Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // $Id: G4IonParametrisedLossModel.icc,v 1.7 2010/11/04 12:21:47 vnivanch Exp $ >> 27 // GEANT4 tag $Name: geant4-09-04 $ 26 // 28 // 27 // =========================================== 29 // =========================================================================== 28 // GEANT4 class 30 // GEANT4 class 29 // 31 // 30 // Class: G4IonParametrisedLoss 32 // Class: G4IonParametrisedLossModel 31 // 33 // 32 // Base class: G4VEmModel (utils) 34 // Base class: G4VEmModel (utils) 33 // 35 // 34 // Author: Anton Lechner (Anton. 36 // Author: Anton Lechner (Anton.Lechner@cern.ch) 35 // 37 // 36 // First implementation: 10. 11. 2008 38 // First implementation: 10. 11. 2008 37 // 39 // 38 // Modifications: 03. 02. 2009 - Bug fix itera 40 // Modifications: 03. 02. 2009 - Bug fix iterators (AL) 39 // 11. 03. 2009 - Introduced ne 41 // 11. 03. 2009 - Introduced new table handler (G4IonDEDXHandler) 40 // and modified 42 // and modified method to add/remove tables 41 // (tables are n 43 // (tables are now built in initialisation phase), 42 // Minor bug fix 44 // Minor bug fix in ComputeDEDXPerVolume (AL) 43 // 20. 11. 2009 - Added set-met 45 // 20. 11. 2009 - Added set-method for energy loss limit (AL) 44 // 04. 11. 2010 - Moved virtual 46 // 04. 11. 2010 - Moved virtual methods to the source (VI) 45 // 47 // 46 // Class description: 48 // Class description: 47 // Model for computing the energy loss of i 49 // Model for computing the energy loss of ions by employing a 48 // parameterisation of dE/dx tables (defaul 50 // parameterisation of dE/dx tables (default ICRU 73 tables). For 49 // ion-material combinations and/or project 51 // ion-material combinations and/or projectile energies not covered 50 // by this model, the G4BraggIonModel and G 52 // by this model, the G4BraggIonModel and G4BetheBloch models are 51 // employed. 53 // employed. 52 // 54 // 53 // Comments: 55 // Comments: 54 // 56 // 55 // =========================================== 57 // =========================================================================== 56 58 57 inline G4double G4IonParametrisedLossModel::De 59 inline G4double G4IonParametrisedLossModel::DeltaRayMeanEnergyTransferRate( 58 const G4 60 const G4Material* material, 59 const G4ParticleDefinition 61 const G4ParticleDefinition* particle, 60 G4double kineticEnergy, 62 G4double kineticEnergy, 61 G4double cutEnergy) { 63 G4double cutEnergy) { 62 64 63 // ############## Mean energy transferred to 65 // ############## Mean energy transferred to delta-rays ################### 64 // Computes the mean energy transfered to de 66 // Computes the mean energy transfered to delta-rays per unit length, 65 // considering only delta-rays with energies 67 // considering only delta-rays with energies above the energy threshold 66 // (energy cut) 68 // (energy cut) 67 // 69 // 68 // The mean energy transfer rate is derived 70 // The mean energy transfer rate is derived by using the differential 69 // cross section given in the references bel 71 // cross section given in the references below. 70 // 72 // 71 // See Geant4 physics reference manual (vers 73 // See Geant4 physics reference manual (version 9.1), section 9.1.3 72 // 74 // 73 // Ref.: W.M. Yao et al, Jour. of Phys. G 33 75 // Ref.: W.M. Yao et al, Jour. of Phys. G 33 (2006) 1. 74 // B. Rossi, High energy particles, Ne 76 // B. Rossi, High energy particles, New York, NY: Prentice-Hall (1952). 75 // 77 // 76 // (Implementation adapted from G4BraggIonMo 78 // (Implementation adapted from G4BraggIonModel) 77 79 78 80 79 // *** Variables: 81 // *** Variables: 80 // kineticEnergy = kinetic energy of proje 82 // kineticEnergy = kinetic energy of projectile 81 // totEnergy = total energy of project 83 // totEnergy = total energy of projectile, i.e. kinetic energy 82 // plus rest energy (Mc^2) 84 // plus rest energy (Mc^2) 83 // betaSquared = beta of projectile squa 85 // betaSquared = beta of projectile squared, calculated as 84 // beta^2 = 1 - 1 / (E/ 86 // beta^2 = 1 - 1 / (E/Mc^2)^2 85 // = T * ( E + M 87 // = T * ( E + Mc^2 ) / E^2 86 // where T = kineticEnergy 88 // where T = kineticEnergy, E = totEnergy 87 // cutEnergy = energy threshold for se 89 // cutEnergy = energy threshold for secondary particle production 88 // i.e. energy cut, below 90 // i.e. energy cut, below which energy transfered to 89 // electrons is treated as 91 // electrons is treated as continuous loss of projectile 90 // maxKinEnergy = maximum energy transfer 92 // maxKinEnergy = maximum energy transferable to secondary electrons 91 // meanRate = mean kinetic energy of 93 // meanRate = mean kinetic energy of delta ray (per unit length) 92 // (above cutEnergy) 94 // (above cutEnergy) 93 95 94 G4double meanRate = 0.0; 96 G4double meanRate = 0.0; 95 97 96 G4double maxKinEnergy = MaxSecondaryEnergy(p 98 G4double maxKinEnergy = MaxSecondaryEnergy(particle, kineticEnergy); 97 99 98 if (cutEnergy < maxKinEnergy) { 100 if (cutEnergy < maxKinEnergy) { 99 101 100 G4double totalEnergy = kineticEnergy + ca 102 G4double totalEnergy = kineticEnergy + cacheMass; 101 G4double betaSquared = kineticEnergy * 103 G4double betaSquared = kineticEnergy * 102 (totalEnergy + cacheMass) / 104 (totalEnergy + cacheMass) / (totalEnergy * totalEnergy); 103 105 104 G4double cutMaxEnergyRatio = cutEnergy / m 106 G4double cutMaxEnergyRatio = cutEnergy / maxKinEnergy; 105 107 106 meanRate = 108 meanRate = 107 (- std::log(cutMaxEnergyRatio) - (1.0 109 (- std::log(cutMaxEnergyRatio) - (1.0 - cutMaxEnergyRatio) * betaSquared) * 108 CLHEP::twopi_mc2_rcl2 * << 110 twopi_mc2_rcl2 * 109 (material->GetTotNbOfElectPerVolume()) 111 (material->GetTotNbOfElectPerVolume()) / betaSquared; 110 112 111 meanRate *= GetChargeSquareRatio(particle, 113 meanRate *= GetChargeSquareRatio(particle, material, kineticEnergy); 112 } 114 } 113 115 114 return meanRate; 116 return meanRate; 115 } 117 } 116 118 117 inline 119 inline 118 void G4IonParametrisedLossModel::UpdateCache( 120 void G4IonParametrisedLossModel::UpdateCache( 119 const G4ParticleD 121 const G4ParticleDefinition* particle) { 120 122 121 cacheParticle = particle; 123 cacheParticle = particle; 122 cacheMass = particle -> GetPDGMass(); 124 cacheMass = particle -> GetPDGMass(); 123 cacheElecMassRatio = CLHEP::electron_mass_c2 << 125 cacheElecMassRatio = electron_mass_c2 / cacheMass; 124 G4double q = particle -> GetPDGCharge() / CL << 126 G4double q = particle -> GetPDGCharge() / eplus; 125 cacheChargeSquare = q * q; 127 cacheChargeSquare = q * q; 126 } 128 } 127 129 128 inline 130 inline 129 LossTableList::iterator G4IonParametrisedLossM 131 LossTableList::iterator G4IonParametrisedLossModel::IsApplicable( 130 const G4ParticleDefinition 132 const G4ParticleDefinition* particle, // Projectile (ion) 131 const G4Material* material 133 const G4Material* material) { // Target material 132 134 133 LossTableList::iterator iter = lossTableList 135 LossTableList::iterator iter = lossTableList.end(); 134 LossTableList::iterator iterTables = lossTab 136 LossTableList::iterator iterTables = lossTableList.begin(); 135 LossTableList::iterator iterTables_end = los 137 LossTableList::iterator iterTables_end = lossTableList.end(); 136 138 137 for(;iterTables != iterTables_end; iterTable 139 for(;iterTables != iterTables_end; iterTables++) { 138 G4bool isApplicable = (*iterTables) -> 140 G4bool isApplicable = (*iterTables) -> 139 IsApplicable(particle, 141 IsApplicable(particle, material); 140 if(isApplicable) { 142 if(isApplicable) { 141 iter = iterTables; 143 iter = iterTables; 142 break; 144 break; 143 } 145 } 144 } 146 } 145 147 146 return iter; 148 return iter; 147 } 149 } 148 150 149 151 150 inline 152 inline 151 void G4IonParametrisedLossModel::SetEnergyLoss 153 void G4IonParametrisedLossModel::SetEnergyLossLimit( 152 G4 154 G4double ionEnergyLossLimit) { 153 155 154 if(ionEnergyLossLimit > 0 && ionEnergyLossLi 156 if(ionEnergyLossLimit > 0 && ionEnergyLossLimit <=1) { 155 157 156 energyLossLimit = ionEnergyLossLimit; 158 energyLossLimit = ionEnergyLossLimit; 157 } 159 } 158 } 160 } 159 161