Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // >> 23 // $Id: G4ComptonScattering.cc,v 1.24 2005/05/04 16:16:12 vnivanch Exp $ >> 24 // GEANT4 tag $Name: geant4-08-00 $ 26 // 25 // 27 // 26 // 28 //------------ G4ComptonScattering physics pro 27 //------------ G4ComptonScattering physics process ----------------------------- 29 // by Michel Maire, April 19 28 // by Michel Maire, April 1996 30 // 29 // 31 // Modified: Michel Maire and Vladimir Ivanche << 30 // 28-05-96, DoIt() small change in ElecDirection, by M.Maire 32 // << 31 // 10-06-96, simplification in ComputeMicroscopicCrossSection(), by M.Maire >> 32 // 21-06-96, SetCuts implementation, M.Maire >> 33 // 13-09-96, small changes in DoIt for better efficiency. Thanks to P.Urban >> 34 // 06-01-97, crossection table + meanfreepath table, M.Maire >> 35 // 05-03-97, new Physics scheme, M.Maire >> 36 // 28-03-97, protection in BuildPhysicsTable, M.Maire >> 37 // 07-04-98, remove 'tracking cut' of the scattered gamma, MMa >> 38 // 04-06-98, in DoIt, secondary production condition: >> 39 // range>std::min(threshold,safety) >> 40 // 13-08-98, new methods SetBining() PrintInfo() >> 41 // 15-12-98, cross section=0 below 10 keV >> 42 // 28-05-01, V.Ivanchenko minor changes to provide ANSI -wall compilation >> 43 // 13-07-01, DoIt: suppression of production cut for the electron (mma) >> 44 // 03-08-01, new methods Store/Retrieve PhysicsTable (mma) >> 45 // 06-08-01, BuildThePhysicsTable() called from constructor (mma) >> 46 // 17-09-01, migration of Materials to pure STL (mma) >> 47 // 20-09-01, DoIt: fminimalEnergy = 1*eV (mma) >> 48 // 01-10-01, come back to BuildPhysicsTable(const G4ParticleDefinition&) >> 49 // 17-04-02, LowestEnergyLimit = 1*keV >> 50 // 26-05-04, cross section parametrization improved for low energy : >> 51 // Egamma <~ 15 keV (Laszlo) >> 52 // 08-11-04, Remove Store/Retrieve tables (V.Ivanchenko) >> 53 // 09-03-05 Migrate to model interface and inherit from G4VEmProcess (V.Ivanchenko) >> 54 // 04-05-05, Make class to be default (V.Ivanchenko) 33 // ------------------------------------------- 55 // ----------------------------------------------------------------------------- 34 56 35 #include "G4ComptonScattering.hh" 57 #include "G4ComptonScattering.hh" 36 #include "G4SystemOfUnits.hh" << 37 #include "G4KleinNishinaModel.hh" << 38 #include "G4KleinNishinaCompton.hh" 58 #include "G4KleinNishinaCompton.hh" 39 #include "G4Electron.hh" 59 #include "G4Electron.hh" 40 #include "G4EmParameters.hh" << 41 60 42 //....oooOO0OOooo........oooOO0OOooo........oo 61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 43 62 44 using namespace std; 63 using namespace std; 45 64 46 G4ComptonScattering::G4ComptonScattering(const 65 G4ComptonScattering::G4ComptonScattering(const G4String& processName, 47 G4ProcessType type):G4VEmProcess (processNam << 66 G4ProcessType type):G4VEmProcess (processName, type), >> 67 isInitialised(false), >> 68 selectedModel(0), >> 69 mType(0) 48 { 70 { 49 SetStartFromNullFlag(true); << 71 SetLambdaBinning(90); 50 SetBuildTableFlag(true); << 72 SetMinKinEnergy(0.1*keV); 51 SetSecondaryParticle(G4Electron::Electron()) << 73 SetMaxKinEnergy(100.0*GeV); 52 SetProcessSubType(fComptonScattering); << 53 SetMinKinEnergyPrim(1*CLHEP::MeV); << 54 SetSplineFlag(true); << 55 } 74 } 56 75 57 //....oooOO0OOooo........oooOO0OOooo........oo 76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 58 77 59 G4ComptonScattering::~G4ComptonScattering() = << 78 G4ComptonScattering::~G4ComptonScattering() 60 << 79 {} 61 //....oooOO0OOooo........oooOO0OOooo........oo << 62 << 63 G4bool G4ComptonScattering::IsApplicable(const << 64 { << 65 return (&p == G4Gamma::Gamma()); << 66 } << 67 80 68 //....oooOO0OOooo........oooOO0OOooo........oo 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 69 82 70 void G4ComptonScattering::InitialiseProcess(co 83 void G4ComptonScattering::InitialiseProcess(const G4ParticleDefinition*) 71 { 84 { 72 if(!isInitialised) { 85 if(!isInitialised) { 73 isInitialised = true; 86 isInitialised = true; 74 if(nullptr == EmModel(0)) { SetEmModel(new << 87 SetBuildTableFlag(true); 75 G4EmParameters* param = G4EmParameters::In << 88 SetSecondaryParticle(G4Electron::Electron()); 76 EmModel(0)->SetLowEnergyLimit(param->MinKi << 89 G4double emin = MinKinEnergy(); 77 EmModel(0)->SetHighEnergyLimit(param->MaxK << 90 G4double emax = MaxKinEnergy(); 78 AddEmModel(1, EmModel(0)); << 91 if(0 == mType) selectedModel = new G4KleinNishinaCompton(); >> 92 selectedModel->SetLowEnergyLimit(emin); >> 93 selectedModel->SetHighEnergyLimit(emax); >> 94 AddEmModel(1, selectedModel); 79 } 95 } 80 } 96 } 81 97 82 //....oooOO0OOooo........oooOO0OOooo........oo 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 83 99 84 void G4ComptonScattering::ProcessDescription(s << 100 void G4ComptonScattering::PrintInfo() 85 { 101 { 86 out << " Compton scattering"; << 102 G4cout << " Total cross sections has a good parametrisation" 87 G4VEmProcess::ProcessDescription(out); << 103 << " from 10 KeV to (100/Z) GeV" >> 104 << "\n Sampling according " << selectedModel->GetName() << " model" >> 105 << G4endl; >> 106 } >> 107 >> 108 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 109 >> 110 void G4ComptonScattering::SetModel(const G4String& s) >> 111 { >> 112 if(s == "Klein-Nishina") mType = 0; 88 } 113 } 89 114 90 //....oooOO0OOooo........oooOO0OOooo........oo << 115 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 91 116