63 G4int minAtomicNumberIon,
64 G4int maxAtomicNumberIon) :
65 minAtomicNumber( minAtomicNumberIon ),
66 maxAtomicNumber( maxAtomicNumberIon ),
67 referencePrepared( false ),
68 atomicNumberRefFe( 26 ),
69 massNumberRefFe( 56 ),
70 atomicNumberRefPow23Fe( 0 ),
73 atomicNumberRefAr( 18 ),
74 massNumberRefAr( 40 ),
75 atomicNumberRefPow23Ar( 0 ),
81 cacheAtomicNumber( 0 ),
82 cacheAtomicNumberPow23( 0 ),
96void G4IonDEDXScalingICRU73::CreateReferenceParticles() {
100 massRefFe = ionTable->
GetIonMass(atomicNumberRefFe,massNumberRefFe);
101 massRefAr = ionTable->
GetIonMass(atomicNumberRefAr,massNumberRefAr);
103 chargeRefFe =
G4double(atomicNumberRefFe)*CLHEP::eplus;
104 chargeRefAr =
G4double(atomicNumberRefAr)*CLHEP::eplus;
106 atomicNumberRefPow23Fe = std::pow(
G4double(atomicNumberRefFe), 2./3.);
107 atomicNumberRefPow23Ar = std::pow(
G4double(atomicNumberRefAr), 2./3.);
109 referencePrepared =
true;
122 UpdateCacheParticle(particle);
123 UpdateCacheMaterial(material);
125 if(cacheAtomicNumber >= minAtomicNumber &&
126 cacheAtomicNumber <= maxAtomicNumber &&
127 cacheAtomicNumber != atomicNumberRefFe &&
128 cacheAtomicNumber != atomicNumberRefAr) {
130 if(!referencePrepared) CreateReferenceParticles();
133 factor = cacheMassNumber * (massRefFe / cacheMass) / massNumberRefFe;
135 factor = cacheMassNumber * (massRefAr / cacheMass) / massNumberRefAr;
150 UpdateCacheParticle(particle);
151 UpdateCacheMaterial(material);
153 if(cacheAtomicNumber >= minAtomicNumber &&
154 cacheAtomicNumber <= maxAtomicNumber &&
155 cacheAtomicNumber != atomicNumberRefFe &&
156 cacheAtomicNumber != atomicNumberRefAr) {
158 if(!referencePrepared) CreateReferenceParticles();
162 G4double equilibriumCharge = EquilibriumCharge(cacheMass,
164 cacheAtomicNumberPow23,
167 G4double scaledKineticEnergy = kineticEnergy * (massRefFe / cacheMass);
169 G4double equilibriumChargeRefFe = EquilibriumCharge(massRefFe,
171 atomicNumberRefPow23Fe,
172 scaledKineticEnergy);
174 factor = equilibriumCharge * equilibriumCharge/
175 ( equilibriumChargeRefFe * equilibriumChargeRefFe );
180 G4double equilibriumCharge = EquilibriumCharge(cacheMass,
182 cacheAtomicNumberPow23,
185 G4double scaledKineticEnergy = kineticEnergy * (massRefAr / cacheMass);
187 G4double equilibriumChargeRefAr = EquilibriumCharge(massRefAr,
189 atomicNumberRefPow23Ar,
190 scaledKineticEnergy);
192 factor = equilibriumCharge * equilibriumCharge/
193 ( equilibriumChargeRefAr * equilibriumChargeRefAr );
204 G4int atomicNumberIon,
207 UpdateCacheMaterial(material);
209 G4int atomicNumber = atomicNumberIon;
211 if(atomicNumberIon >= minAtomicNumber &&
212 atomicNumberIon <= maxAtomicNumber &&
213 atomicNumberIon != atomicNumberRefFe &&
214 atomicNumberIon != atomicNumberRefAr) {
216 if(!referencePrepared) CreateReferenceParticles();
218 if( useFe ) atomicNumber = atomicNumberRefFe;
219 else atomicNumber = atomicNumberRefAr;
G4double ScalingFactorDEDX(const G4ParticleDefinition *particle, const G4Material *, G4double kineticEnergy)
~G4IonDEDXScalingICRU73()
G4int AtomicNumberBaseIon(G4int atomicNumberIon, const G4Material *)
G4IonDEDXScalingICRU73(G4int minAtomicNumberIon=19, G4int maxAtomicNumberIon=102)
G4double ScalingFactorEnergy(const G4ParticleDefinition *particle, const G4Material *material)
G4double GetIonMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
static G4IonTable * GetIonTable()