Geant4 Cross Reference |
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 // GEANT4 class 29 // 30 // Class: G4IonParametrisedLossModel 31 // 32 // Base class: G4VEmModel (utils) 33 // 34 // Author: Anton Lechner (Anton.Lechner@cern.ch) 35 // 36 // First implementation: 10. 11. 2008 37 // 38 // Modifications: 03. 02. 2009 - Bug fix iterators (AL) 39 // 11. 03. 2009 - Introduced new table handler (G4IonDEDXHandler) 40 // and modified method to add/remove tables 41 // (tables are now built in initialisation phase), 42 // Minor bug fix in ComputeDEDXPerVolume (AL) 43 // 20. 11. 2009 - Added set-method for energy loss limit (AL) 44 // 04. 11. 2010 - Moved virtual methods to the source (VI) 45 // 46 // Class description: 47 // Model for computing the energy loss of ions by employing a 48 // parameterisation of dE/dx tables (default ICRU 73 tables). For 49 // ion-material combinations and/or projectile energies not covered 50 // by this model, the G4BraggIonModel and G4BetheBloch models are 51 // employed. 52 // 53 // Comments: 54 // 55 // =========================================================================== 56 57 inline G4double G4IonParametrisedLossModel::DeltaRayMeanEnergyTransferRate( 58 const G4Material* material, 59 const G4ParticleDefinition* particle, 60 G4double kineticEnergy, 61 G4double cutEnergy) { 62 63 // ############## Mean energy transferred to delta-rays ################### 64 // Computes the mean energy transfered to delta-rays per unit length, 65 // considering only delta-rays with energies above the energy threshold 66 // (energy cut) 67 // 68 // The mean energy transfer rate is derived by using the differential 69 // cross section given in the references below. 70 // 71 // See Geant4 physics reference manual (version 9.1), section 9.1.3 72 // 73 // Ref.: W.M. Yao et al, Jour. of Phys. G 33 (2006) 1. 74 // B. Rossi, High energy particles, New York, NY: Prentice-Hall (1952). 75 // 76 // (Implementation adapted from G4BraggIonModel) 77 78 79 // *** Variables: 80 // kineticEnergy = kinetic energy of projectile 81 // totEnergy = total energy of projectile, i.e. kinetic energy 82 // plus rest energy (Mc^2) 83 // betaSquared = beta of projectile squared, calculated as 84 // beta^2 = 1 - 1 / (E/Mc^2)^2 85 // = T * ( E + Mc^2 ) / E^2 86 // where T = kineticEnergy, E = totEnergy 87 // cutEnergy = energy threshold for secondary particle production 88 // i.e. energy cut, below which energy transfered to 89 // electrons is treated as continuous loss of projectile 90 // maxKinEnergy = maximum energy transferable to secondary electrons 91 // meanRate = mean kinetic energy of delta ray (per unit length) 92 // (above cutEnergy) 93 94 G4double meanRate = 0.0; 95 96 G4double maxKinEnergy = MaxSecondaryEnergy(particle, kineticEnergy); 97 98 if (cutEnergy < maxKinEnergy) { 99 100 G4double totalEnergy = kineticEnergy + cacheMass; 101 G4double betaSquared = kineticEnergy * 102 (totalEnergy + cacheMass) / (totalEnergy * totalEnergy); 103 104 G4double cutMaxEnergyRatio = cutEnergy / maxKinEnergy; 105 106 meanRate = 107 (- std::log(cutMaxEnergyRatio) - (1.0 - cutMaxEnergyRatio) * betaSquared) * 108 CLHEP::twopi_mc2_rcl2 * 109 (material->GetTotNbOfElectPerVolume()) / betaSquared; 110 111 meanRate *= GetChargeSquareRatio(particle, material, kineticEnergy); 112 } 113 114 return meanRate; 115 } 116 117 inline 118 void G4IonParametrisedLossModel::UpdateCache( 119 const G4ParticleDefinition* particle) { 120 121 cacheParticle = particle; 122 cacheMass = particle -> GetPDGMass(); 123 cacheElecMassRatio = CLHEP::electron_mass_c2 / cacheMass; 124 G4double q = particle -> GetPDGCharge() / CLHEP::eplus; 125 cacheChargeSquare = q * q; 126 } 127 128 inline 129 LossTableList::iterator G4IonParametrisedLossModel::IsApplicable( 130 const G4ParticleDefinition* particle, // Projectile (ion) 131 const G4Material* material) { // Target material 132 133 LossTableList::iterator iter = lossTableList.end(); 134 LossTableList::iterator iterTables = lossTableList.begin(); 135 LossTableList::iterator iterTables_end = lossTableList.end(); 136 137 for(;iterTables != iterTables_end; iterTables++) { 138 G4bool isApplicable = (*iterTables) -> 139 IsApplicable(particle, material); 140 if(isApplicable) { 141 iter = iterTables; 142 break; 143 } 144 } 145 146 return iter; 147 } 148 149 150 inline 151 void G4IonParametrisedLossModel::SetEnergyLossLimit( 152 G4double ionEnergyLossLimit) { 153 154 if(ionEnergyLossLimit > 0 && ionEnergyLossLimit <=1) { 155 156 energyLossLimit = ionEnergyLossLimit; 157 } 158 } 159