ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonDEDXScalingICRU73.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonDEDXScalingICRU73.cc
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 class source file
30 //
31 // Class: G4IonDEDXScalingICRU73
32 //
33 // Base class: G4VIonDEDXScalingAlgorithm
34 //
35 // Author: Anton Lechner (Anton.Lechner@cern.ch)
36 //
37 // First implementation: 10. 05. 2009
38 //
39 // Modifications: 06. 08. 2009 - Minor bug fix (initialization of cache) AL
40 // 12. 11. 2009 - Moved all decision logic concerning ICRU 73
41 // scaling for heavy ions into this class.
42 // Adapting ScalingFactorEnergy class according
43 // to changes in base class (AL).
44 //
45 // Class description:
46 // dE/dx scaling algorithm applied on top of ICRU 73 data (for ions not
47 // covered by the ICRU 73 report)
48 //
49 // Comments:
50 //
51 // ===========================================================================
52 
54 #include "G4ParticleDefinition.hh"
55 #include "G4ParticleTable.hh"
56 #include "G4IonTable.hh"
57 #include "G4Material.hh"
58 
59 
60 // ###########################################################################
61 
63  G4int minAtomicNumberIon,
64  G4int maxAtomicNumberIon) :
65  minAtomicNumber( minAtomicNumberIon ),
66  maxAtomicNumber( maxAtomicNumberIon ),
67  referencePrepared( false ),
68  atomicNumberRefFe( 26 ),
69  massNumberRefFe( 56 ),
70  atomicNumberRefPow23Fe( 0 ),
71  chargeRefFe( 0 ),
72  massRefFe( 0 ),
73  atomicNumberRefAr( 18 ),
74  massNumberRefAr( 40 ),
75  atomicNumberRefPow23Ar( 0 ),
76  chargeRefAr( 0 ),
77  massRefAr( 0 ),
78  useFe( true ),
79  cacheParticle( 0 ),
80  cacheMassNumber( 0 ),
81  cacheAtomicNumber( 0 ),
82  cacheAtomicNumberPow23( 0 ),
83  cacheCharge( 0 ),
84  cacheMass( 0 ),
85  cacheMaterial( 0 ) {
86 
87 }
88 
89 // ###########################################################################
90 
92 }
93 
94 // ###########################################################################
95 
97 
98  G4IonTable* ionTable = G4IonTable::GetIonTable();
99 
102 
105 
108 
109  referencePrepared = true;
110 }
111 
112 
113 // ###########################################################################
114 
115 
117  const G4ParticleDefinition* particle, // Projectile (ion)
118  const G4Material* material) { // Target material
119 
120  G4double factor = 1.0;
121 
122  UpdateCacheParticle(particle);
123  UpdateCacheMaterial(material);
124 
129 
131 
132  if( useFe )
134  else
136  }
137 
138  return factor;
139 }
140 
141 // ###########################################################################
142 
144  const G4ParticleDefinition* particle, // Projectile (ion)
145  const G4Material* material, // Target material
146  G4double kineticEnergy) { // Kinetic energy
147 
148  G4double factor = 1.0;
149 
150  UpdateCacheParticle(particle);
151  UpdateCacheMaterial(material);
152 
157 
159 
160  if( useFe ) {
161 
162  G4double equilibriumCharge = EquilibriumCharge(cacheMass,
163  cacheCharge,
165  kineticEnergy);
166 
167  G4double scaledKineticEnergy = kineticEnergy * (massRefFe / cacheMass);
168 
169  G4double equilibriumChargeRefFe = EquilibriumCharge(massRefFe,
170  chargeRefFe,
172  scaledKineticEnergy);
173 
174  factor = equilibriumCharge * equilibriumCharge/
175  ( equilibriumChargeRefFe * equilibriumChargeRefFe );
176 
177  }
178  else {
179 
180  G4double equilibriumCharge = EquilibriumCharge(cacheMass,
181  cacheCharge,
183  kineticEnergy);
184 
185  G4double scaledKineticEnergy = kineticEnergy * (massRefAr / cacheMass);
186 
187  G4double equilibriumChargeRefAr = EquilibriumCharge(massRefAr,
188  chargeRefAr,
190  scaledKineticEnergy);
191 
192  factor = equilibriumCharge * equilibriumCharge/
193  ( equilibriumChargeRefAr * equilibriumChargeRefAr );
194 
195  }
196  }
197 
198  return factor;
199 }
200 
201 // ###########################################################################
202 
204  G4int atomicNumberIon, // Atomic number of ion
205  const G4Material* material) { // Target material
206 
207  UpdateCacheMaterial(material);
208 
209  G4int atomicNumber = atomicNumberIon;
210 
211  if(atomicNumberIon >= minAtomicNumber &&
212  atomicNumberIon <= maxAtomicNumber &&
213  atomicNumberIon != atomicNumberRefFe &&
214  atomicNumberIon != atomicNumberRefAr) {
215 
217 
218  if( useFe ) atomicNumber = atomicNumberRefFe;
219  else atomicNumber = atomicNumberRefAr;
220  }
221 
222  return atomicNumber;
223 }
224 
225 // ###########################################################################