|
||||
File indexing completed on 2025-01-18 09:58:31
0001 // 0002 // ******************************************************************** 0003 // * License and Disclaimer * 0004 // * * 0005 // * The Geant4 software is copyright of the Copyright Holders of * 0006 // * the Geant4 Collaboration. It is provided under the terms and * 0007 // * conditions of the Geant4 Software License, included in the file * 0008 // * LICENSE and available at http://cern.ch/geant4/license . These * 0009 // * include a list of copyright holders. * 0010 // * * 0011 // * Neither the authors of this software system, nor their employing * 0012 // * institutes,nor the agencies providing financial support for this * 0013 // * work make any representation or warranty, express or implied, * 0014 // * regarding this software system or assume any liability for its * 0015 // * use. Please see the license in the file LICENSE and URL above * 0016 // * for the full disclaimer and the limitation of liability. * 0017 // * * 0018 // * This code implementation is the result of the scientific and * 0019 // * technical work of the GEANT4 collaboration. * 0020 // * By using, copying, modifying or distributing the software (or * 0021 // * any work based on the software) you agree to acknowledge its * 0022 // * use in resulting scientific publications, and indicate your * 0023 // * acceptance of all terms of the Geant4 Software license. * 0024 // ******************************************************************** 0025 // 0026 // 0027 // =========================================================================== 0028 // GEANT4 class 0029 // 0030 // Class: G4IonParametrisedLossModel 0031 // 0032 // Base class: G4VEmModel (utils) 0033 // 0034 // Author: Anton Lechner (Anton.Lechner@cern.ch) 0035 // 0036 // First implementation: 10. 11. 2008 0037 // 0038 // Modifications: 03. 02. 2009 - Bug fix iterators (AL) 0039 // 11. 03. 2009 - Introduced new table handler (G4IonDEDXHandler) 0040 // and modified method to add/remove tables 0041 // (tables are now built in initialisation phase), 0042 // Minor bug fix in ComputeDEDXPerVolume (AL) 0043 // 20. 11. 2009 - Added set-method for energy loss limit (AL) 0044 // 04. 11. 2010 - Moved virtual methods to the source (VI) 0045 // 0046 // Class description: 0047 // Model for computing the energy loss of ions by employing a 0048 // parameterisation of dE/dx tables (default ICRU 73 tables). For 0049 // ion-material combinations and/or projectile energies not covered 0050 // by this model, the G4BraggIonModel and G4BetheBloch models are 0051 // employed. 0052 // 0053 // Comments: 0054 // 0055 // =========================================================================== 0056 0057 inline G4double G4IonParametrisedLossModel::DeltaRayMeanEnergyTransferRate( 0058 const G4Material* material, 0059 const G4ParticleDefinition* particle, 0060 G4double kineticEnergy, 0061 G4double cutEnergy) { 0062 0063 // ############## Mean energy transferred to delta-rays ################### 0064 // Computes the mean energy transfered to delta-rays per unit length, 0065 // considering only delta-rays with energies above the energy threshold 0066 // (energy cut) 0067 // 0068 // The mean energy transfer rate is derived by using the differential 0069 // cross section given in the references below. 0070 // 0071 // See Geant4 physics reference manual (version 9.1), section 9.1.3 0072 // 0073 // Ref.: W.M. Yao et al, Jour. of Phys. G 33 (2006) 1. 0074 // B. Rossi, High energy particles, New York, NY: Prentice-Hall (1952). 0075 // 0076 // (Implementation adapted from G4BraggIonModel) 0077 0078 0079 // *** Variables: 0080 // kineticEnergy = kinetic energy of projectile 0081 // totEnergy = total energy of projectile, i.e. kinetic energy 0082 // plus rest energy (Mc^2) 0083 // betaSquared = beta of projectile squared, calculated as 0084 // beta^2 = 1 - 1 / (E/Mc^2)^2 0085 // = T * ( E + Mc^2 ) / E^2 0086 // where T = kineticEnergy, E = totEnergy 0087 // cutEnergy = energy threshold for secondary particle production 0088 // i.e. energy cut, below which energy transfered to 0089 // electrons is treated as continuous loss of projectile 0090 // maxKinEnergy = maximum energy transferable to secondary electrons 0091 // meanRate = mean kinetic energy of delta ray (per unit length) 0092 // (above cutEnergy) 0093 0094 G4double meanRate = 0.0; 0095 0096 G4double maxKinEnergy = MaxSecondaryEnergy(particle, kineticEnergy); 0097 0098 if (cutEnergy < maxKinEnergy) { 0099 0100 G4double totalEnergy = kineticEnergy + cacheMass; 0101 G4double betaSquared = kineticEnergy * 0102 (totalEnergy + cacheMass) / (totalEnergy * totalEnergy); 0103 0104 G4double cutMaxEnergyRatio = cutEnergy / maxKinEnergy; 0105 0106 meanRate = 0107 (- std::log(cutMaxEnergyRatio) - (1.0 - cutMaxEnergyRatio) * betaSquared) * 0108 CLHEP::twopi_mc2_rcl2 * 0109 (material->GetTotNbOfElectPerVolume()) / betaSquared; 0110 0111 meanRate *= GetChargeSquareRatio(particle, material, kineticEnergy); 0112 } 0113 0114 return meanRate; 0115 } 0116 0117 inline 0118 void G4IonParametrisedLossModel::UpdateCache( 0119 const G4ParticleDefinition* particle) { 0120 0121 cacheParticle = particle; 0122 cacheMass = particle -> GetPDGMass(); 0123 cacheElecMassRatio = CLHEP::electron_mass_c2 / cacheMass; 0124 G4double q = particle -> GetPDGCharge() / CLHEP::eplus; 0125 cacheChargeSquare = q * q; 0126 } 0127 0128 inline 0129 LossTableList::iterator G4IonParametrisedLossModel::IsApplicable( 0130 const G4ParticleDefinition* particle, // Projectile (ion) 0131 const G4Material* material) { // Target material 0132 0133 LossTableList::iterator iter = lossTableList.end(); 0134 LossTableList::iterator iterTables = lossTableList.begin(); 0135 LossTableList::iterator iterTables_end = lossTableList.end(); 0136 0137 for(;iterTables != iterTables_end; iterTables++) { 0138 G4bool isApplicable = (*iterTables) -> 0139 IsApplicable(particle, material); 0140 if(isApplicable) { 0141 iter = iterTables; 0142 break; 0143 } 0144 } 0145 0146 return iter; 0147 } 0148 0149 0150 inline 0151 void G4IonParametrisedLossModel::SetEnergyLossLimit( 0152 G4double ionEnergyLossLimit) { 0153 0154 if(ionEnergyLossLimit > 0 && ionEnergyLossLimit <=1) { 0155 0156 energyLossLimit = ionEnergyLossLimit; 0157 } 0158 }
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |