![]() |
Precalibrated Ion Beam Identification Detector Simulation 1.0
A pilot study detector simulation, written in C++ with Geant4.
|
00001 #include "G4EmStandardFysik.hh" 00002 00003 #include "G4EmStandardPhysics.hh" 00004 #include "G4ParticleDefinition.hh" 00005 #include "G4ProcessManager.hh" 00006 #include "G4LossTableManager.hh" 00007 #include "G4EmProcessOptions.hh" 00008 00009 #include "G4ComptonScattering.hh" 00010 #include "G4GammaConversion.hh" 00011 #include "G4PhotoElectricEffect.hh" 00012 00013 #include "G4eMultipleScattering.hh" 00014 #include "G4MuMultipleScattering.hh" 00015 #include "G4hMultipleScattering.hh" 00016 #include "G4CoulombScattering.hh" 00017 #include "G4WentzelVIModel.hh" 00018 00019 #include "G4eIonisation.hh" 00020 #include "G4eBremsstrahlung.hh" 00021 #include "G4eplusAnnihilation.hh" 00022 00023 #include "G4MuIonisation.hh" 00024 #include "G4MuBremsstrahlung.hh" 00025 #include "G4MuPairProduction.hh" 00026 #include "G4hBremsstrahlung.hh" 00027 #include "G4hPairProduction.hh" 00028 00029 #include "G4hIonisation.hh" 00030 #include "G4ionIonisation.hh" 00031 #include "G4alphaIonisation.hh" 00032 00033 #include "G4Gamma.hh" 00034 #include "G4Electron.hh" 00035 #include "G4Positron.hh" 00036 #include "G4MuonPlus.hh" 00037 #include "G4MuonMinus.hh" 00038 #include "G4PionPlus.hh" 00039 #include "G4PionMinus.hh" 00040 #include "G4KaonPlus.hh" 00041 #include "G4KaonMinus.hh" 00042 #include "G4Proton.hh" 00043 #include "G4AntiProton.hh" 00044 #include "G4Deuteron.hh" 00045 #include "G4Triton.hh" 00046 #include "G4He3.hh" 00047 #include "G4Alpha.hh" 00048 #include "G4GenericIon.hh" 00049 00050 G4EmStandardFysik::G4EmStandardFysik(G4int ver) 00051 { 00052 verbose = ver; 00053 } 00054 00055 void G4EmStandardFysik::ConstructProcess() 00056 { 00057 theParticleIterator->reset(); 00058 while( (*theParticleIterator)() ){ 00059 G4ParticleDefinition* particle = theParticleIterator->value(); 00060 G4ProcessManager* pmanager = particle->GetProcessManager(); 00061 G4String particleName = particle->GetParticleName(); 00062 if(verbose > 1) 00063 G4cout << "### " << GetPhysicsName() << " instantiates for " 00064 << particleName << G4endl; 00065 00066 if (particleName == "gamma") { 00067 00068 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); 00069 // pmanager->AddDiscreteProcess(new G4ComptonScattering); 00070 pmanager->AddDiscreteProcess(new G4GammaConversion); 00071 00072 } else if (particleName == "e-") { 00073 00074 pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1); 00075 pmanager->AddProcess(new G4eIonisation, -1, 2, 2); 00076 pmanager->AddProcess(new G4eBremsstrahlung(), -1,-3, 3); 00077 00078 } else if (particleName == "e+") { 00079 00080 pmanager->AddProcess(new G4eMultipleScattering(), -1, 1, 1); 00081 pmanager->AddProcess(new G4eIonisation, -1, 2, 2); 00082 pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3); 00083 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 4); 00084 00085 } else if (particleName == "mu+" || 00086 particleName == "mu-" ) { 00087 00088 G4MuMultipleScattering* msc = new G4MuMultipleScattering(); 00089 msc->AddEmModel(0, new G4WentzelVIModel()); 00090 pmanager->AddProcess(msc, -1, 1, 1); 00091 pmanager->AddProcess(new G4MuIonisation, -1, 2, 2); 00092 pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3); 00093 pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4); 00094 pmanager->AddDiscreteProcess(new G4CoulombScattering()); 00095 00096 } else if (particleName == "alpha" || 00097 particleName == "He3") { 00098 00099 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); 00100 pmanager->AddProcess(new G4ionIonisation, -1, 2, 2); 00101 00102 } else if (particleName == "GenericIon") { 00103 00104 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); 00105 pmanager->AddProcess(new G4ionIonisation, -1, 2, 2); 00106 00107 } else if (particleName == "pi+" || 00108 particleName == "pi-" || 00109 particleName == "kaon+" || 00110 particleName == "kaon-" || 00111 particleName == "proton" ) { 00112 00113 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); 00114 pmanager->AddProcess(new G4hIonisation, -1, 2, 2); 00115 pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3); 00116 pmanager->AddProcess(new G4hPairProduction, -1,-4, 4); 00117 00118 } else if (particleName == "B+" || 00119 particleName == "B-" || 00120 particleName == "D+" || 00121 particleName == "D-" || 00122 particleName == "Ds+" || 00123 particleName == "Ds-" || 00124 particleName == "anti_He3" || 00125 particleName == "anti_alpha" || 00126 particleName == "anti_deuteron" || 00127 particleName == "anti_lambda_c+" || 00128 particleName == "anti_omega-" || 00129 particleName == "anti_proton" || 00130 particleName == "anti_sigma_c+" || 00131 particleName == "anti_sigma_c++" || 00132 particleName == "anti_sigma+" || 00133 particleName == "anti_sigma-" || 00134 particleName == "anti_triton" || 00135 particleName == "anti_xi_c+" || 00136 particleName == "anti_xi-" || 00137 particleName == "deuteron" || 00138 particleName == "lambda_c+" || 00139 particleName == "omega-" || 00140 particleName == "sigma_c+" || 00141 particleName == "sigma_c++" || 00142 particleName == "sigma+" || 00143 particleName == "sigma-" || 00144 particleName == "tau+" || 00145 particleName == "tau-" || 00146 particleName == "triton" || 00147 particleName == "xi_c+" || 00148 particleName == "xi-" ) { 00149 00150 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); 00151 pmanager->AddProcess(new G4hIonisation, -1, 2, 2); 00152 } 00153 } 00154 G4EmProcessOptions opt; 00155 opt.SetVerbose(verbose); 00156 opt.SetPolarAngleLimit(0.2); 00157 }