Back to home page

EIC code displayed by LXR

 
 

    


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 }