Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/eRosita/physics/src/G4LowEnergyRayleigh.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/eRosita/physics/src/G4LowEnergyRayleigh.cc (Version 11.3.0) and /examples/advanced/eRosita/physics/src/G4LowEnergyRayleigh.cc (Version 9.2.p3)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 // -------------------------------------------    
 27 //                                                
 28 //                                                
 29 // Author: A. Forti                               
 30 //         Maria Grazia Pia (Maria.Grazia.Pia@    
 31 //                                                
 32 // History:                                       
 33 // --------                                       
 34 // Added Livermore data table construction met    
 35 // Added BuildMeanFreePath A. Forti               
 36 // Added PostStepDoIt A. Forti                    
 37 // Added SelectRandomAtom A. Forti                
 38 // Added map of the elements  A.Forti             
 39 // 24.04.01 V.Ivanchenko remove RogueWave         
 40 // 11.08.2001 MGP - Major revision according t    
 41 // 06.10.2001 MGP - Added strategy to test ran    
 42 // 05.06.2002 F.Longo and G.Depaola  - bug fix    
 43 // 20.10.2002 G. Depaola   - Change sampling m    
 44 // 22.01.2003 V.Ivanchenko - Cut per region       
 45 // 24.04.2003 V.Ivanchenko - Cut per region mf    
 46 //                                                
 47 // -------------------------------------------    
 48                                                   
 49 #include "G4LowEnergyRayleigh.hh"                 
 50 #include "Randomize.hh"                           
 51 #include "G4PhysicalConstants.hh"                 
 52 #include "G4SystemOfUnits.hh"                     
 53 #include "G4ParticleDefinition.hh"                
 54 #include "G4Track.hh"                             
 55 #include "G4Step.hh"                              
 56 #include "G4ForceCondition.hh"                    
 57 #include "G4Gamma.hh"                             
 58 #include "G4Electron.hh"                          
 59 #include "G4DynamicParticle.hh"                   
 60 #include "G4VParticleChange.hh"                   
 61 #include "G4ThreeVector.hh"                       
 62 #include "G4RDVCrossSectionHandler.hh"            
 63 #include "G4RDCrossSectionHandler.hh"             
 64 #include "G4RDVEMDataSet.hh"                      
 65 #include "G4RDCompositeEMDataSet.hh"              
 66 #include "G4RDVDataSetAlgorithm.hh"               
 67 #include "G4RDLogLogInterpolation.hh"             
 68                                                   
 69 #include "G4MaterialCutsCouple.hh"                
 70                                                   
 71 G4LowEnergyRayleigh::G4LowEnergyRayleigh(const    
 72   : G4VDiscreteProcess(processName),              
 73     lowEnergyLimit(250*eV),                       
 74     highEnergyLimit(100*GeV),                     
 75     intrinsicLowEnergyLimit(10*eV),               
 76     intrinsicHighEnergyLimit(100*GeV)             
 77 {                                                 
 78   if (lowEnergyLimit < intrinsicLowEnergyLimit    
 79       highEnergyLimit > intrinsicHighEnergyLim    
 80     {                                             
 81       G4Exception("G4LowEnergyRayleigh::G4LowE    
 82                   "OutOfRange", FatalException    
 83                   "Energy limit outside intrin    
 84     }                                             
 85                                                   
 86   crossSectionHandler = new G4RDCrossSectionHa    
 87                                                   
 88   G4RDVDataSetAlgorithm* ffInterpolation = new    
 89   G4String formFactorFile = "rayl/re-ff-";        
 90   formFactorData = new G4RDCompositeEMDataSet(    
 91   formFactorData->LoadData(formFactorFile);       
 92                                                   
 93   meanFreePathTable = 0;                          
 94                                                   
 95    if (verboseLevel > 0)                          
 96      {                                            
 97        G4cout << GetProcessName() << " is crea    
 98         << "Energy range: "                       
 99         << lowEnergyLimit / keV << " keV - "      
100         << highEnergyLimit / GeV << " GeV"        
101         << G4endl;                                
102      }                                            
103 }                                                 
104                                                   
105 G4LowEnergyRayleigh::~G4LowEnergyRayleigh()       
106 {                                                 
107   delete meanFreePathTable;                       
108   delete crossSectionHandler;                     
109   delete formFactorData;                          
110 }                                                 
111                                                   
112 void G4LowEnergyRayleigh::BuildPhysicsTable(co    
113 {                                                 
114                                                   
115   crossSectionHandler->Clear();                   
116   G4String crossSectionFile = "rayl/re-cs-";      
117   crossSectionHandler->LoadData(crossSectionFi    
118                                                   
119   delete meanFreePathTable;                       
120   meanFreePathTable = crossSectionHandler->Bui    
121 }                                                 
122                                                   
123 G4VParticleChange* G4LowEnergyRayleigh::PostSt    
124                  const G4Step& aStep)             
125 {                                                 
126                                                   
127   aParticleChange.Initialize(aTrack);             
128                                                   
129   const G4DynamicParticle* incidentPhoton = aT    
130   G4double photonEnergy0 = incidentPhoton->Get    
131                                                   
132   if (photonEnergy0 <= lowEnergyLimit)            
133     {                                             
134       aParticleChange.ProposeTrackStatus(fStop    
135       aParticleChange.ProposeEnergy(0.);          
136       aParticleChange.ProposeLocalEnergyDeposi    
137       return G4VDiscreteProcess::PostStepDoIt(    
138     }                                             
139                                                   
140   //  G4double e0m = photonEnergy0 / electron_    
141   G4ParticleMomentum photonDirection0 = incide    
142                                                   
143   // Select randomly one element in the curren    
144   const G4MaterialCutsCouple* couple = aTrack.    
145   G4int Z = crossSectionHandler->SelectRandomA    
146                                                   
147   // Sample the angle of the scattered photon     
148                                                   
149   G4double wlPhoton = h_Planck*c_light/photonE    
150                                                   
151   G4double gReject,x,dataFormFactor;              
152   G4double randomFormFactor;                      
153   G4double cosTheta;                              
154   G4double sinTheta;                              
155   G4double fcostheta;                             
156                                                   
157   do                                              
158     {                                             
159       do                                          
160       {                                           
161       cosTheta = 2. * G4UniformRand() - 1.;       
162       fcostheta = ( 1. + cosTheta*cosTheta)/2.    
163       } while (fcostheta < G4UniformRand());      
164                                                   
165       G4double sinThetaHalf = std::sqrt((1. -     
166       x = sinThetaHalf / (wlPhoton/cm);           
167       if (x > 1.e+005)                            
168          dataFormFactor = formFactorData->Find    
169       else                                        
170          dataFormFactor = formFactorData->Find    
171       randomFormFactor = G4UniformRand() * Z *    
172       sinTheta = std::sqrt(1. - cosTheta*cosTh    
173       gReject = dataFormFactor * dataFormFacto    
174                                                   
175     } while( gReject < randomFormFactor);         
176                                                   
177   // Scattered photon angles. ( Z - axis along    
178   G4double phi = twopi * G4UniformRand() ;        
179   G4double dirX = sinTheta*std::cos(phi);         
180   G4double dirY = sinTheta*std::sin(phi);         
181   G4double dirZ = cosTheta;                       
182                                                   
183   // Update G4VParticleChange for the scattere    
184   G4ThreeVector photonDirection1(dirX, dirY, d    
185                                                   
186   photonDirection1.rotateUz(photonDirection0);    
187   aParticleChange.ProposeEnergy(photonEnergy0)    
188   aParticleChange.ProposeMomentumDirection(pho    
189                                                   
190   aParticleChange.SetNumberOfSecondaries(0);      
191                                                   
192   return G4VDiscreteProcess::PostStepDoIt(aTra    
193 }                                                 
194                                                   
195 G4bool G4LowEnergyRayleigh::IsApplicable(const    
196 {                                                 
197   return ( &particle == G4Gamma::Gamma() );       
198 }                                                 
199                                                   
200 G4double G4LowEnergyRayleigh::GetMeanFreePath(    
201                 G4double, // previousStepSize     
202                 G4ForceCondition*)                
203 {                                                 
204   const G4DynamicParticle* photon = track.GetD    
205   G4double energy = photon->GetKineticEnergy()    
206   const G4MaterialCutsCouple* couple = track.G    
207   size_t materialIndex = couple->GetIndex();      
208                                                   
209   G4double meanFreePath;                          
210   if (energy > highEnergyLimit) meanFreePath =    
211   else if (energy < lowEnergyLimit) meanFreePa    
212   else meanFreePath = meanFreePathTable->FindV    
213   return meanFreePath;                            
214 }                                                 
215