Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/particles/management/include/G4Ions.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 ]

Diff markup

Differences between /particles/management/include/G4Ions.hh (Version 11.3.0) and /particles/management/include/G4Ions.hh (Version 10.4.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4Ions                                      << 
 27 //                                                 26 //
 28 // Class Description:                          <<  27 // $Id: G4Ions.hh 103892 2017-05-03 08:11:00Z gcosmo $
 29 //                                                 28 //
 30 // This is the base class for all nuclei inclu <<  29 // 
 31 // light nuclei such as deuteron, alpha, and p <<  30 // ------------------------------------------------------------
 32 // All nuclei/ions created on the fly are obje <<  31 //      GEANT 4 class header file
 33 // Atomic number and atomic mass are valid onl <<  32 //
 34 // from this class. This class has Excitation  <<  33 //      History: first implementation, based on object model of
 35 // the normal particle properties.             <<  34 //      Hisaya Kurashige, 27 June 1998
 36                                                <<  35 // ----------------------------------------------------------------
 37 // Authors: G.Cosmo, 4 April 1996 - Design bas <<  36 //      Add excitation energy         17 Aug. 1999 H.Kurashige
 38 //          H.Kurashige, 27 June 1998 - First  <<  37 //      Add isomer level              30 Apr. H.Kurashige
 39 // ------------------------------------------- <<  38 
 40 #ifndef G4Ions_hh                              <<  39 
 41 #define G4Ions_hh 1                            <<  40 #ifndef G4Ions_h
                                                   >>  41 #define G4Ions_h 1
 42                                                    42 
 43 #include "G4ParticleDefinition.hh"             << 
 44 #include "G4ios.hh"                            << 
 45 #include "globals.hh"                              43 #include "globals.hh"
                                                   >>  44 #include "G4ios.hh"
                                                   >>  45 #include "G4ParticleDefinition.hh"
                                                   >>  46 
                                                   >>  47 // ######################################################################
                                                   >>  48 // ###                          Ions                                 ###
                                                   >>  49 // ######################################################################
 46                                                    50 
 47 class G4Ions : public G4ParticleDefinition         51 class G4Ions : public G4ParticleDefinition
 48 {                                                  52 {
 49   public:                                      <<  53  // Class Description
 50     // clang-format off                        <<  54  //  This is the base class for all nuclei including pre-defined 
 51     G4Ions(                                    <<  55  //  light nuclei such as deuteron, alpha, and proton (Hydrogen) 
                                                   >>  56  //  All nuclei/ions created on the fly are objects of this class
                                                   >>  57  //  Atomic number and atomic mass are vaild only for particles derived
                                                   >>  58  //  from this class.  This class has Excitation Energy in addition to
                                                   >>  59  //  the normal particle properties.
                                                   >>  60 
                                                   >>  61  protected:
                                                   >>  62    G4Ions(){};
                                                   >>  63 
                                                   >>  64 
                                                   >>  65  public: //With Description
                                                   >>  66    G4Ions(
 52        const G4String&     aName,        G4dou     67        const G4String&     aName,        G4double            mass,
 53        G4double            width,        G4dou     68        G4double            width,        G4double            charge,   
 54        G4int               iSpin,        G4int     69        G4int               iSpin,        G4int               iParity,    
 55        G4int               iConjugation, G4int     70        G4int               iConjugation, G4int               iIsospin,   
 56        G4int               iIsospin3,    G4int     71        G4int               iIsospin3,    G4int               gParity,
 57        const G4String&     pType,        G4int     72        const G4String&     pType,        G4int               lepton,      
 58        G4int               baryon,       G4int     73        G4int               baryon,       G4int               encoding,
 59        G4bool              stable,       G4dou     74        G4bool              stable,       G4double            lifetime,
 60        G4DecayTable*       decaytable,   G4boo <<  75        G4DecayTable        *decaytable,  G4bool              shortlived,
 61        const G4String&     subType ="",            76        const G4String&     subType ="",
 62        G4int               anti_encoding =0,       77        G4int               anti_encoding =0,
 63        G4double            excitation = 0.0,       78        G4double            excitation = 0.0, 
 64        G4int               isomer = 0              79        G4int               isomer = 0
 65     );                                         <<  80    );
 66     // clang-format on                         << 
 67                                                << 
 68     ~G4Ions() override = default;              << 
 69                                                    81 
 70     inline G4Ions* IonsDefinition();           <<  82  public:
 71     inline G4Ions* Ions();                     <<  83    virtual          ~G4Ions();
                                                   >>  84    G4Ions*          IonsDefinition();
                                                   >>  85    G4Ions*          Ions();
                                                   >>  86 
                                                   >>  87  public:  //With Description
                                                   >>  88    // Get excitation energy of nucleus
                                                   >>  89    G4double GetExcitationEnergy() const ; 
                                                   >>  90   
                                                   >>  91   // Get Isomer level (=0 for ground state)
                                                   >>  92   G4int GetIsomerLevel() const; 
                                                   >>  93    
                                                   >>  94   // enumerator for floating level base
                                                   >>  95   enum class G4FloatLevelBase
                                                   >>  96        { no_Float=0,
                                                   >>  97          plus_X, plus_Y, plus_Z, plus_U, plus_V, plus_W,
                                                   >>  98          plus_R, plus_S, plus_T, plus_A, plus_B, plus_C, plus_D, plus_E
                                                   >>  99        };
                                                   >> 100   static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar);
                                                   >> 101   static G4Ions::G4FloatLevelBase FloatLevelBase(G4int flbIdx);
                                                   >> 102   static char FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb);
                                                   >> 103 
                                                   >> 104   // set/get methods for floating level base
                                                   >> 105   G4Ions::G4FloatLevelBase GetFloatLevelBase() const;
                                                   >> 106   G4int GetFloatLevelBaseIndex() const;
                                                   >> 107   void SetFloatLevelBase(G4Ions::G4FloatLevelBase flb);
                                                   >> 108   void SetFloatLevelBase(char flbChar);
                                                   >> 109   void SetFloatLevelBase(G4int flbIdx);
                                                   >> 110 
                                                   >> 111  private:
                                                   >> 112   G4double theExcitationEnergy; 
                                                   >> 113   G4int    theIsomerLevel;
                                                   >> 114   G4FloatLevelBase floatLevelBase;
 72                                                   115 
 73     // Get excitation energy of nucleus        << 
 74     inline G4double GetExcitationEnergy() cons << 
 75                                                << 
 76     // Get Isomer level (=0 for ground state)  << 
 77     inline G4int GetIsomerLevel() const;       << 
 78                                                << 
 79     enum class G4FloatLevelBase  // enumerator << 
 80     {                                          << 
 81       no_Float = 0,                            << 
 82       plus_X,                                  << 
 83       plus_Y,                                  << 
 84       plus_Z,                                  << 
 85       plus_U,                                  << 
 86       plus_V,                                  << 
 87       plus_W,                                  << 
 88       plus_R,                                  << 
 89       plus_S,                                  << 
 90       plus_T,                                  << 
 91       plus_A,                                  << 
 92       plus_B,                                  << 
 93       plus_C,                                  << 
 94       plus_D,                                  << 
 95       plus_E                                   << 
 96     };                                         << 
 97                                                << 
 98     static G4Ions::G4FloatLevelBase FloatLevel << 
 99     static G4Ions::G4FloatLevelBase FloatLevel << 
100     static char FloatLevelBaseChar(G4Ions::G4F << 
101                                                << 
102     // Set/Get methods for floating level base << 
103     //                                         << 
104     inline G4Ions::G4FloatLevelBase GetFloatLe << 
105     inline G4int GetFloatLevelBaseIndex() cons << 
106     inline void SetFloatLevelBase(G4Ions::G4Fl << 
107     inline void SetFloatLevelBase(char flbChar << 
108     inline void SetFloatLevelBase(G4int flbIdx << 
109                                                << 
110   protected:                                   << 
111     G4Ions() = default;                        << 
112                                                << 
113   private:                                     << 
114     G4double theExcitationEnergy = 0.0;        << 
115     G4int theIsomerLevel = 0;                  << 
116     G4FloatLevelBase floatLevelBase = G4FloatL << 
117 };                                                116 };
118                                                   117 
119 #define noFloat G4Ions::G4FloatLevelBase::no_F    118 #define noFloat G4Ions::G4FloatLevelBase::no_Float
120 #define plusU G4Ions::G4FloatLevelBase::plus_U << 119 #define plusU G4Ions::G4FloatLevelBase::plus_U 
121 #define plusV G4Ions::G4FloatLevelBase::plus_V << 120 #define plusV G4Ions::G4FloatLevelBase::plus_V 
122 #define plusW G4Ions::G4FloatLevelBase::plus_W << 121 #define plusW G4Ions::G4FloatLevelBase::plus_W 
123 #define plusX G4Ions::G4FloatLevelBase::plus_X    122 #define plusX G4Ions::G4FloatLevelBase::plus_X
124 #define plusY G4Ions::G4FloatLevelBase::plus_Y << 123 #define plusY G4Ions::G4FloatLevelBase::plus_Y 
125 #define plusZ G4Ions::G4FloatLevelBase::plus_Z << 124 #define plusZ G4Ions::G4FloatLevelBase::plus_Z 
126 #define plusR G4Ions::G4FloatLevelBase::plus_R << 125 #define plusR G4Ions::G4FloatLevelBase::plus_R 
127 #define plusS G4Ions::G4FloatLevelBase::plus_S << 126 #define plusS G4Ions::G4FloatLevelBase::plus_S 
128 #define plusT G4Ions::G4FloatLevelBase::plus_T << 127 #define plusT G4Ions::G4FloatLevelBase::plus_T 
129 #define plusA G4Ions::G4FloatLevelBase::plus_A    128 #define plusA G4Ions::G4FloatLevelBase::plus_A
130 #define plusB G4Ions::G4FloatLevelBase::plus_B << 129 #define plusB G4Ions::G4FloatLevelBase::plus_B 
131 #define plusC G4Ions::G4FloatLevelBase::plus_C << 130 #define plusC G4Ions::G4FloatLevelBase::plus_C 
132 #define plusD G4Ions::G4FloatLevelBase::plus_D << 131 #define plusD G4Ions::G4FloatLevelBase::plus_D 
133 #define plusE G4Ions::G4FloatLevelBase::plus_E << 132 #define plusE G4Ions::G4FloatLevelBase::plus_E 
134                                                << 
135 // ------------------------                    << 
136 // Inline methods                              << 
137 // ------------------------                    << 
138                                                   133 
139 inline G4Ions* G4Ions::IonsDefinition()        << 134 inline
                                                   >> 135  G4Ions* G4Ions::IonsDefinition()
140 {                                                 136 {
141   return this;                                    137   return this;
142 }                                                 138 }
143                                                   139 
144 inline G4Ions* G4Ions::Ions()                  << 140 inline
                                                   >> 141  G4Ions* G4Ions::Ions() 
145 {                                                 142 {
146   return this;                                    143   return this;
147 }                                                 144 }
148                                                   145 
149 inline G4double G4Ions::GetExcitationEnergy()  << 146 inline
                                                   >> 147  G4double G4Ions::GetExcitationEnergy() const 
150 {                                                 148 {
151   return theExcitationEnergy;                     149   return theExcitationEnergy;
152 }                                                 150 }
153                                                   151 
154 inline G4int G4Ions::GetIsomerLevel() const    << 152 inline
                                                   >> 153  G4int G4Ions::GetIsomerLevel() const
155 {                                                 154 {
156   return theIsomerLevel;                          155   return theIsomerLevel;
157 }                                                 156 }
158                                                << 157     
159 inline G4Ions::G4FloatLevelBase G4Ions::GetFlo << 158 inline
                                                   >> 159  G4Ions::G4FloatLevelBase G4Ions::GetFloatLevelBase() const
160 {                                                 160 {
161   return floatLevelBase;                          161   return floatLevelBase;
162 }                                                 162 }
163                                                   163 
164 inline G4int G4Ions::GetFloatLevelBaseIndex()  << 164 inline
                                                   >> 165  G4int G4Ions::GetFloatLevelBaseIndex() const
165 {                                                 166 {
166   return static_cast<G4int>(floatLevelBase);      167   return static_cast<G4int>(floatLevelBase);
167 }                                                 168 }
168                                                   169 
169 inline void G4Ions::SetFloatLevelBase(G4Ions:: << 170 inline
                                                   >> 171  void G4Ions::SetFloatLevelBase(G4Ions::G4FloatLevelBase flb)
170 {                                                 172 {
171   floatLevelBase = flb;                           173   floatLevelBase = flb;
172 }                                                 174 }
173                                                   175 
174 inline void G4Ions::SetFloatLevelBase(char flb << 176 inline
                                                   >> 177  void G4Ions::SetFloatLevelBase(char flbChar)
175 {                                                 178 {
176   floatLevelBase = FloatLevelBase(flbChar);       179   floatLevelBase = FloatLevelBase(flbChar);
177 }                                                 180 }
178                                                   181 
179 inline void G4Ions::SetFloatLevelBase(G4int fl << 182 inline
                                                   >> 183  void G4Ions::SetFloatLevelBase(G4int flbIdx)
180 {                                                 184 {
181   floatLevelBase = FloatLevelBase(flbIdx);        185   floatLevelBase = FloatLevelBase(flbIdx);
182 }                                                 186 }
183                                                   187 
                                                   >> 188 inline
                                                   >> 189  G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(char flbChar)
                                                   >> 190 {
                                                   >> 191   G4Ions::G4FloatLevelBase flb = noFloat;
                                                   >> 192   switch(flbChar)
                                                   >> 193   {
                                                   >> 194    case 'x': case 'X':
                                                   >> 195     flb = plusX;
                                                   >> 196     break;
                                                   >> 197    case 'y': case 'Y':
                                                   >> 198     flb = plusY;
                                                   >> 199     break;
                                                   >> 200    case 'z': case 'Z':
                                                   >> 201     flb = plusZ;
                                                   >> 202     break;
                                                   >> 203    case 'u': case 'U':
                                                   >> 204     flb = plusU;
                                                   >> 205     break;
                                                   >> 206    case 'v': case 'V':
                                                   >> 207     flb = plusV;
                                                   >> 208     break;
                                                   >> 209    case 'w': case 'W':
                                                   >> 210     flb = plusW;
                                                   >> 211     break;
                                                   >> 212    case 'r': case 'R':
                                                   >> 213     flb = plusR;
                                                   >> 214     break;
                                                   >> 215    case 's': case 'S':
                                                   >> 216     flb = plusS;
                                                   >> 217     break;
                                                   >> 218    case 't': case 'T':
                                                   >> 219     flb = plusT;
                                                   >> 220     break;
                                                   >> 221    case 'a': case 'A':
                                                   >> 222     flb = plusA;
                                                   >> 223     break;
                                                   >> 224    case 'b': case 'B':
                                                   >> 225     flb = plusB;
                                                   >> 226     break;
                                                   >> 227    case 'c': case 'C':
                                                   >> 228     flb = plusC;
                                                   >> 229     break;
                                                   >> 230    case 'd': case 'D':
                                                   >> 231     flb = plusD;
                                                   >> 232     break;
                                                   >> 233    case 'e': case 'E':
                                                   >> 234     flb = plusE;
                                                   >> 235     break;
                                                   >> 236    case '\0': default:
                                                   >> 237     break;
                                                   >> 238   }
                                                   >> 239   return flb;
                                                   >> 240 }
                                                   >> 241 
                                                   >> 242 inline
                                                   >> 243  G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(G4int flbIdx)
                                                   >> 244 {
                                                   >> 245   static G4Ions::G4FloatLevelBase flb[] = 
                                                   >> 246   { noFloat,
                                                   >> 247     plusX, plusY, plusZ, plusU, plusV, plusW, 
                                                   >> 248     plusR, plusS, plusT, plusA, plusB, plusC, plusD, plusE };
                                                   >> 249   return flb[flbIdx];
                                                   >> 250 }
                                                   >> 251 
                                                   >> 252 inline
                                                   >> 253  char G4Ions::FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb)
                                                   >> 254 {
                                                   >> 255   static char flbChar[] = {'\0','X','Y','Z','U','V','W',
                                                   >> 256                                 'R','S','T','A','B','C','D','E'};
                                                   >> 257   return flbChar[static_cast<G4int>(flb)];
                                                   >> 258 }
                                                   >> 259 
184 #endif                                            260 #endif
                                                   >> 261 
                                                   >> 262 
                                                   >> 263 
                                                   >> 264 
                                                   >> 265 
                                                   >> 266 
                                                   >> 267 
                                                   >> 268 
185                                                   269