Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4Ions.cc
Go to the documentation of this file.
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// G4Ions class implementation
27//
28// Authors: G.Cosmo, 4 April 1996 - Object model
29// H.Kurashige, 27 June 1998 - First implementation
30// --------------------------------------------------------------------
31
32#include "G4Ions.hh"
33
35#include "G4SystemOfUnits.hh"
36
37#include <fstream>
38#include <iomanip>
39
40// clang-format off
42 const G4String& aName, G4double mass,
43 G4double width, G4double charge,
44 G4int iSpin, G4int iParity,
45 G4int iConjugation, G4int iIsospin,
46 G4int iIsospin3, G4int gParity,
47 const G4String& pType, G4int lepton,
48 G4int baryon, G4int encoding,
49 G4bool stable, G4double lifetime,
50 G4DecayTable *decaytable , G4bool shortlived,
51 const G4String& subType,
52 G4int anti_encoding,
53 G4double excitation,
54 G4int isomer
55)
56 : G4ParticleDefinition( aName,mass,width,charge,iSpin,iParity,
57 iConjugation,iIsospin,iIsospin3,gParity,pType,
58 lepton,baryon,encoding,stable,lifetime,decaytable,
59 shortlived, subType, anti_encoding),
60 theExcitationEnergy(excitation),
61 theIsomerLevel(isomer)
62// clang-format on
63{
64 if ((aName == "proton") || (aName == "neutron")) {
65 isGeneralIon = false;
66 }
67 else if ((aName == "GenericIon") || (aName == "alpha") || (aName == "He3")
68 || (aName == "deuteron") || (aName == "triton"))
69 {
70 isGeneralIon = false;
71 }
72 else if ((aName == "anti_He3") || (aName == "anti_deuteron") || (aName == "anti_triton")
73 || (aName == "anti_alpha"))
74 {
75 isGeneralIon = false;
76 }
77 else if ((aName == "iron") || (aName == "oxygen") || (aName == "nitrogen") || (aName == "carbon")
78 || (aName == "helium") || (aName == "alpha+") || (aName == "hydrogen")
79 || (aName == "Ps-1s") || (aName == "Ps-2s"))
80 {
81 isGeneralIon = false;
82 }
83 else if (aName == "hypertriton" || aName == "anti_hypertriton" || aName == "hyperalpha"
84 || aName == "anti_hyperalpha" || aName == "hyperH4" || aName == "anti_hyperH4"
85 || aName == "doublehyperH4" || aName == "anti_doublehyperH4"
86 || aName == "doublehyperdoubleneutron" || aName == "anti_doublehyperdoubleneutron"
87 || aName == "hyperHe5" || aName == "anti_hyperHe5")
88 {
89 isGeneralIon = false;
90 }
91 else {
92 isGeneralIon = true;
93 }
94
95 // isomer level isset to 9
96 // if isomer level is set to 0 for excited state
97 //
98 if ((theExcitationEnergy > 0.0) && (isomer == 0)) isomer = 9;
99
100 if (GetAtomicNumber() == 0) {
101 // AtomicNumber/Mass is positive even for anti_nulceus
102 SetAtomicNumber(std::abs(G4int(GetPDGCharge() / eplus)));
103 SetAtomicMass(std::abs(GetBaryonNumber()));
104 }
105}
106
108{
110 switch (flbChar) {
111 case 'x':
112 case 'X':
113 flb = plusX;
114 break;
115 case 'y':
116 case 'Y':
117 flb = plusY;
118 break;
119 case 'z':
120 case 'Z':
121 flb = plusZ;
122 break;
123 case 'u':
124 case 'U':
125 flb = plusU;
126 break;
127 case 'v':
128 case 'V':
129 flb = plusV;
130 break;
131 case 'w':
132 case 'W':
133 flb = plusW;
134 break;
135 case 'r':
136 case 'R':
137 flb = plusR;
138 break;
139 case 's':
140 case 'S':
141 flb = plusS;
142 break;
143 case 't':
144 case 'T':
145 flb = plusT;
146 break;
147 case 'a':
148 case 'A':
149 flb = plusA;
150 break;
151 case 'b':
152 case 'B':
153 flb = plusB;
154 break;
155 case 'c':
156 case 'C':
157 flb = plusC;
158 break;
159 case 'd':
160 case 'D':
161 flb = plusD;
162 break;
163 case 'e':
164 case 'E':
165 flb = plusE;
166 break;
167 case '\0':
168 default:
169 break;
170 }
171 return flb;
172}
173
175{
176 // clang-format off
177 static G4Ions::G4FloatLevelBase flb[] =
178 { noFloat,
181 // clang-format on
182 return (flbIdx >= 0 && flbIdx < 15) ? flb[flbIdx] : flb[0];
183}
184
186{
187 // clang-format off
188 static char flbChar[] = {'\0', 'X', 'Y', 'Z', 'U', 'V', 'W', 'R',
189 'S', 'T', 'A', 'B', 'C', 'D', 'E'};
190 // clang-format on
191 return flbChar[static_cast<G4int>(flb)];
192}
#define plusA
Definition G4Ions.hh:129
#define plusT
Definition G4Ions.hh:128
#define plusR
Definition G4Ions.hh:126
#define plusV
Definition G4Ions.hh:121
#define plusW
Definition G4Ions.hh:122
#define plusD
Definition G4Ions.hh:132
#define plusU
Definition G4Ions.hh:120
#define plusS
Definition G4Ions.hh:127
#define plusY
Definition G4Ions.hh:124
#define plusX
Definition G4Ions.hh:123
#define plusZ
Definition G4Ions.hh:125
#define plusB
Definition G4Ions.hh:130
#define plusC
Definition G4Ions.hh:131
#define plusE
Definition G4Ions.hh:133
#define noFloat
Definition G4Ions.hh:119
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4Ions()=default
static char FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb)
Definition G4Ions.cc:185
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
Definition G4Ions.cc:107
G4FloatLevelBase
Definition G4Ions.hh:80
G4int GetAtomicNumber() const
void SetAtomicMass(G4int)
void SetAtomicNumber(G4int)