Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/de_excitation/management/include/G4NucLevel.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //
 27 // -------------------------------------------------------------------
 28 //
 29 //      GEANT4 header file 
 30 //
 31 //      File name:     G4NucLevel
 32 //
 33 //      Author:        V.Ivanchenko
 34 // 
 35 //      Creation date: 4 January 2012
 36 //
 37 //      Modifications:
 38 //      
 39 // -------------------------------------------------------------------
 40 //
 41 //  Container class keeping information about gamma transition
 42 //  and for a given nuclear level
 43 //
 44 
 45 #ifndef G4NUCLEVEL_HH
 46 #define G4NUCLEVEL_HH 1
 47 
 48 #include "globals.hh"
 49 #include <vector>
 50 #include <iostream>
 51 
 52 class G4NucLevel 
 53 {
 54 public:
 55 
 56   explicit G4NucLevel(std::size_t ntrans, G4double  tgamma,
 57                 const std::vector<G4int>&   vTrans,
 58                 const std::vector<G4float>& wLevelGamma,
 59                 const std::vector<G4float>& wGamma,
 60                 const std::vector<G4float>& vRatio,
 61                       const std::vector<const std::vector<G4float>*>& wShell);
 62 
 63   ~G4NucLevel();
 64 
 65   inline std::size_t NumberOfTransitions() const;
 66 
 67   inline std::size_t FinalExcitationIndex(std::size_t idx) const;
 68 
 69   inline G4int TransitionType(std::size_t idx) const;
 70 
 71   inline G4double GetTimeGamma() const;
 72 
 73   inline G4float GammaProbability(std::size_t idx) const;
 74 
 75   inline G4float GammaCumProbability(std::size_t idx) const;
 76 
 77   inline G4float MultipolarityRatio(std::size_t idx) const;
 78 
 79   inline std::size_t SampleGammaTransition(G4double rndm) const;
 80 
 81   inline G4int SampleShell(std::size_t idx, G4double rndm) const;
 82 
 83   inline const std::vector<G4float>* ShellProbabilty(std::size_t idx) const;
 84 
 85   void StreamInfo(std::ostream& os) const;
 86 
 87   G4NucLevel(const G4NucLevel &right) = delete;
 88   G4bool operator==(const G4NucLevel &right) const = delete;
 89   G4bool operator!=(const G4NucLevel &right) const = delete;
 90   G4bool operator<(const G4NucLevel &right) const = delete;
 91   const G4NucLevel& operator=(const G4NucLevel &right) = delete;
 92 
 93 private:  
 94 
 95   std::size_t   length;
 96   G4double fTimeGamma;
 97   
 98   std::vector<G4int>    fTrans;
 99   std::vector<G4float>  fGammaCumProbability;
100   std::vector<G4float>  fGammaProbability;
101   std::vector<G4float>  fMpRatio;
102   std::vector<const std::vector<G4float>*> fShellProbability;
103 };
104 
105 inline std::size_t G4NucLevel::NumberOfTransitions() const
106 {
107   return length;
108 }
109 
110 inline std::size_t G4NucLevel::FinalExcitationIndex(const std::size_t idx) const
111 {
112   return (std::size_t)(fTrans[idx]/10000);
113 }
114 
115 inline G4int G4NucLevel::TransitionType(const std::size_t idx) const
116 {
117   return fTrans[idx]%10000;
118 }
119 
120 inline G4double G4NucLevel::GetTimeGamma() const
121 {
122   return fTimeGamma;
123 }
124 
125 inline G4float G4NucLevel::GammaProbability(const std::size_t idx) const
126 {
127   return fGammaProbability[idx];
128 }
129 
130 inline G4float G4NucLevel::GammaCumProbability(const std::size_t idx) const
131 {
132   return fGammaCumProbability[idx];
133 }
134 
135 inline G4float G4NucLevel::MultipolarityRatio(const std::size_t idx) const
136 {
137   return fMpRatio[idx];
138 }
139 
140 inline std::size_t G4NucLevel::SampleGammaTransition(const G4double rndm) const
141 {
142   G4float x = rndm;
143   std::size_t idx = 0;
144   for(; idx<length; ++idx) { 
145     if(x <= fGammaCumProbability[idx]) { break; } 
146   }
147   return idx;
148 }
149 
150 inline G4int 
151 G4NucLevel::SampleShell(const std::size_t idx, const G4double rndm) const
152 {
153   const std::vector<G4float>* prob = fShellProbability[idx];
154   G4int i(-1);
155   if(nullptr != prob) {
156     G4int nn = (G4int)prob->size();
157     G4float x = rndm;
158     for(i=0; i<nn; ++i) { if(x <= (*prob)[i]) { break; } }
159   } 
160   return i;
161 }
162 
163 inline const std::vector<G4float>* 
164 G4NucLevel::ShellProbabilty(std::size_t idx) const
165 {
166   return fShellProbability[idx];
167 }
168 
169 #endif
170