ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonDEDXScalingICRU73.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonDEDXScalingICRU73.hh
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 header 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: 12. 11. 2009 - Moved all decision logic concerning ICRU 73
40 // scaling for heavy ions into this class.
41 // Adapting ScalingFactorEnergy class according
42 // to changes in base class (AL).
43 //
44 // Class description:
45 // dE/dx scaling algorithm applied on top of ICRU 73 data (for ions not
46 // covered by the ICRU 73 report)
47 //
48 // Comments:
49 //
50 // ===========================================================================
51 
52 #ifndef G4IONDEDXSCALINGICRU73_HH
53 #define G4IONDEDXSCALINGICRU73_HH
54 
55 #include "globals.hh"
57 #include "G4Material.hh"
58 #include "G4ParticleDefinition.hh"
59 #include <vector>
60 #include "G4Exp.hh"
61 
63 
64  public:
65  G4IonDEDXScalingICRU73(G4int minAtomicNumberIon = 19,
66  G4int maxAtomicNumberIon = 102);
68 
69  // Function for scaling the kinetic energy (no scaling by default).
70  // Returns scaling factor for a given ion.
72  const G4ParticleDefinition* particle, // Projectile (ion)
73  const G4Material* material); // Target material
74 
75 
76  // Function for scaling the dE/dx value (no scaling by default).
77  // Returns scaling factor for a given ion-material couple and
78  // a given kinetic energy.
80  const G4ParticleDefinition* particle, // Projectile (ion)
81  const G4Material*, // Target material
82  G4double kineticEnergy); // Kinetic energy
83 
84 
85  // Function for defining a base particle for dE/dx calculation.
86  // (no base particle by default). Returns atomic number of base
87  // particle.
89  G4int atomicNumberIon, // Atomic number of ion
90  const G4Material*); // Target material
91 
92  private:
94  const G4ParticleDefinition* particle); // Projectile (ion)
95 
97  const G4Material* material); // Target material
98 
100 
102  G4double mass, // Ion mass
103  G4double charge, // Ion charge
104  G4double atomicNumberPow, // Power of atomic nmb
105  G4double kineticEnergy); // Kinetic energy
106 
107  // Scaling is only applied for ions with atomic numbers in the range
108  // defined by the following parameters:
111 
113 
114  // Some properties of reference particle (Fe) are stored for faster access
121 
122  // Some properties of reference particle (Ar) are stored for faster access
129 
130  // Flag indicating the use of Fe ions as reference particles
132 
133  // Some properties of projectiles are stored for faster access
140 
141  // Material pointer
143 };
144 
145 // ###########################################################################
146 
148  const G4ParticleDefinition* particle) { // Projectile (ion)
149 
150  if(particle != cacheParticle) {
151 
153  cacheAtomicNumber = particle -> GetAtomicNumber();
154  cacheMassNumber = particle -> GetAtomicMass();
155  cacheCharge = particle -> GetPDGCharge();
156  cacheMass = particle -> GetPDGMass();
158  }
159 }
160 
161 // ###########################################################################
162 
164  const G4Material* material) { // Target material
165 
166  if(cacheMaterial != material) {
167 
169 
170  useFe = true;
171 
172  size_t nmbElements = material -> GetNumberOfElements();
173  if( nmbElements > 1 ) useFe = false;
174 
175  if( material -> GetName() == "G4_WATER" ) useFe = true;
176  }
177 }
178 
179 // ###########################################################################
180 
182  G4double mass,
184  G4double atomicNumberPow,
185  G4double kineticEnergy) {
186 
187  G4double totalEnergy = kineticEnergy + mass;
188  G4double betaSquared = kineticEnergy *
189  (totalEnergy + mass) / (totalEnergy * totalEnergy);
190 
191  G4double beta = std::sqrt( betaSquared );
192 
193  G4double velOverBohrVel = beta / CLHEP::fine_structure_const;
194 
195  G4double q1 = 1.0 - G4Exp(-velOverBohrVel / atomicNumberPow);
196 
197  return q1 * charge;
198 }
199 
200 // ###########################################################################
201 
202 #endif