62 G4int minAtomicNumberIon,
63 G4int maxAtomicNumberIon) :
64 minAtomicNumber( minAtomicNumberIon ),
65 maxAtomicNumber( maxAtomicNumberIon ),
67 atomicNumberRefFe( 26 ),
68 massNumberRefFe( 56 ),
69 atomicNumberRefPow23Fe( 0 ),
73 atomicNumberRefAr( 18 ),
74 massNumberRefAr( 40 ),
75 atomicNumberRefPow23Ar( 0 ),
81 cacheAtomicNumber( 0 ),
82 cacheAtomicNumberPow23( 0 ),
97void G4IonDEDXScalingICRU73::CreateReferenceParticles() {
103 referenceFe = particleTable -> GetIon(atomicNumberRefFe, massNumberRefFe,
105 referenceAr = particleTable -> GetIon(atomicNumberRefAr, massNumberRefAr,
108 massRefFe = referenceFe -> GetPDGMass();
109 massRefAr = referenceAr -> GetPDGMass();
111 chargeRefFe = referenceFe -> GetPDGCharge();
112 chargeRefAr = referenceAr -> GetPDGCharge();
114 atomicNumberRefPow23Fe = std::pow(
G4double(atomicNumberRefFe), 2./3.);
115 atomicNumberRefPow23Ar = std::pow(
G4double(atomicNumberRefAr), 2./3.);
128 UpdateCacheParticle(particle);
129 UpdateCacheMaterial(material);
131 if(cacheAtomicNumber >= minAtomicNumber &&
132 cacheAtomicNumber <= maxAtomicNumber &&
133 cacheAtomicNumber != atomicNumberRefFe &&
134 cacheAtomicNumber != atomicNumberRefAr) {
136 if(referenceFe == 0 || referenceAr == 0) CreateReferenceParticles();
139 factor = cacheMassNumber * (massRefFe / cacheMass) / massNumberRefFe;
141 factor = cacheMassNumber * (massRefAr / cacheMass) / massNumberRefAr;
156 UpdateCacheParticle(particle);
157 UpdateCacheMaterial(material);
159 if(cacheAtomicNumber >= minAtomicNumber &&
160 cacheAtomicNumber <= maxAtomicNumber &&
161 cacheAtomicNumber != atomicNumberRefFe &&
162 cacheAtomicNumber != atomicNumberRefAr) {
164 if(referenceFe == 0 || referenceAr == 0) CreateReferenceParticles();
168 G4double equilibriumCharge = EquilibriumCharge(cacheMass,
170 cacheAtomicNumberPow23,
173 G4double scaledKineticEnergy = kineticEnergy * (massRefFe / cacheMass);
175 G4double equilibriumChargeRefFe = EquilibriumCharge(massRefFe,
177 atomicNumberRefPow23Fe,
178 scaledKineticEnergy);
180 factor = equilibriumCharge * equilibriumCharge/
181 ( equilibriumChargeRefFe * equilibriumChargeRefFe );
186 G4double equilibriumCharge = EquilibriumCharge(cacheMass,
188 cacheAtomicNumberPow23,
191 G4double scaledKineticEnergy = kineticEnergy * (massRefAr / cacheMass);
193 G4double equilibriumChargeRefAr = EquilibriumCharge(massRefAr,
195 atomicNumberRefPow23Ar,
196 scaledKineticEnergy);
198 factor = equilibriumCharge * equilibriumCharge/
199 ( equilibriumChargeRefAr * equilibriumChargeRefAr );
210 G4int atomicNumberIon,
213 UpdateCacheMaterial(material);
215 G4int atomicNumber = atomicNumberIon;
217 if(atomicNumberIon >= minAtomicNumber &&
218 atomicNumberIon <= maxAtomicNumber &&
219 atomicNumberIon != atomicNumberRefFe &&
220 atomicNumberIon != atomicNumberRefAr) {
222 if(referenceFe == 0 || referenceAr == 0) CreateReferenceParticles();
224 if( useFe ) atomicNumber = atomicNumberRefFe;
225 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)
static G4ParticleTable * GetParticleTable()