MollerPhysicsList.cc

Go to the documentation of this file.
00001 
00002 
00003 #include "globals.hh"
00004 #include "G4Version.hh"
00005 #include "MollerPhysicsList.hh"
00006 
00007 #include "G4ProcessManager.hh"
00008 #include "G4ParticleTypes.hh"
00009 
00010 #include "G4UnknownParticle.hh"
00011 
00012 MollerPhysicsList::MollerPhysicsList()
00013 {
00014   defaultCutValue = 1.0*cm;
00015   SetVerboseLevel(1);
00016 }
00017 
00018 MollerPhysicsList::~MollerPhysicsList()
00019 {;}
00020 
00021 void MollerPhysicsList::ConstructParticle()
00022 {
00023 
00024   // pseudo-particles
00025   G4Geantino::GeantinoDefinition();//1
00026 
00027   // gamma
00028   G4Gamma::GammaDefinition();//2
00029 
00030   // leptons
00031   //  e+/-
00032   G4Electron::ElectronDefinition();//3
00033   G4Positron::PositronDefinition();//4
00034   // mu+/-
00035   G4MuonPlus::MuonPlusDefinition();//5
00036   G4MuonMinus::MuonMinusDefinition();//6
00037   // nu_e
00038   G4NeutrinoE::NeutrinoEDefinition();//7
00039   G4AntiNeutrinoE::AntiNeutrinoEDefinition();//7
00040 
00041   // nu_mu
00042   G4NeutrinoMu::NeutrinoMuDefinition();//7
00043   G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();//7
00044 
00045   // nu_tau
00046   G4NeutrinoTau::NeutrinoTauDefinition();//7
00047   G4AntiNeutrinoTau::AntiNeutrinoTauDefinition();//7
00048 
00049   //  mesons
00050   //    light mesons
00051   G4PionPlus::PionPlusDefinition();//8
00052   G4PionMinus::PionMinusDefinition();//9
00053   G4PionZero::PionZeroDefinition();//10
00054 
00055   G4UnknownParticle::UnknownParticleDefinition();//11
00056 
00057   G4KaonPlus::KaonPlusDefinition();//13
00058   G4KaonMinus::KaonMinusDefinition();//14
00059 
00060   G4KaonZeroLong::KaonZeroLongDefinition();//15
00061   G4KaonZeroShort::KaonZeroShortDefinition();//16
00062 
00063   //  barions
00064   G4Proton::ProtonDefinition();//17
00065   G4AntiProton::AntiProtonDefinition();//18
00066 
00067   G4Neutron::NeutronDefinition();//19
00068   G4AntiNeutron::AntiNeutronDefinition();//20
00069 
00070   //Other
00071   G4Eta::EtaDefinition();//21
00072   G4Alpha::AlphaDefinition();//22
00073   //G4Omega::OmegaDefinition();//23
00074 
00075   G4Lambda::LambdaDefinition();//24
00076   G4AntiLambda::AntiLambdaDefinition();//25
00077 
00078   G4SigmaPlus::SigmaPlusDefinition();//26
00079   G4SigmaMinus::SigmaMinusDefinition();//27
00080   G4SigmaZero::SigmaZeroDefinition();//28
00081 
00082   G4AntiSigmaPlus::AntiSigmaPlusDefinition();//29
00083   G4AntiSigmaMinus::AntiSigmaMinusDefinition();//30
00084   G4AntiSigmaZero::AntiSigmaZeroDefinition();//31
00085 
00086   G4TauPlus::TauPlusDefinition();//32
00087   G4TauMinus::TauMinusDefinition();//33
00088 
00089   G4XiZero::XiZeroDefinition();//34
00090   G4XiMinus::XiMinusDefinition();//35
00091 
00092   G4AntiXiZero::AntiXiZeroDefinition();//36
00093   //G4AntiXiPlus::AntiXiPlusDefinition();//37
00094 
00095   G4Deuteron::DeuteronDefinition();//38
00096   //G4Tritium::TritiumDefinition();//39
00097   G4He3::He3Definition();//40
00098 
00099   G4GenericIon::GenericIonDefinition();
00100 
00101   G4DMesonPlus::DMesonPlusDefinition();//41
00102   G4DMesonMinus::DMesonMinusDefinition();//42
00103   G4DMesonZero::DMesonZeroDefinition();//43
00104   G4AntiDMesonZero::AntiDMesonZeroDefinition();//44
00105 
00106   G4DsMesonPlus::DsMesonPlusDefinition();//45
00107   G4DsMesonMinus::DsMesonMinusDefinition();//45
00108   
00109   G4LambdacPlus::LambdacPlusDefinition();//47
00110 }
00111 
00112 void MollerPhysicsList::ConstructProcess()
00113 {
00114   AddTransportation();
00115   ConstructEM();
00116   ConstructGeneral();
00117 }
00118 
00119 
00120 #include "G4ComptonScattering.hh"
00121 #include "G4GammaConversion.hh"
00122 #include "G4PhotoElectricEffect.hh"
00123 #include "G4GammaConversionToMuons.hh"
00124 
00125 #if G4VERSION_NUMBER < 940
00126 #include "G4MultipleScattering.hh"
00127 #else
00128 #include "G4eMultipleScattering.hh"
00129 #include "G4hMultipleScattering.hh"
00130 #include "G4MuMultipleScattering.hh"
00131 #endif
00132 
00133 #include "G4eIonisation.hh"
00134 #include "G4eBremsstrahlung.hh"
00135 #include "G4eplusAnnihilation.hh"
00136 #include "G4CoulombScattering.hh"
00137 
00138 #include "G4HadronElasticProcess.hh"
00139 #include "G4LElastic.hh"
00140 #include "G4ProtonInelasticProcess.hh"
00141 #include "G4LEProtonInelastic.hh"
00142 #include "G4ProtonInelasticCrossSection.hh"
00143 
00144 #include "G4MuIonisation.hh"
00145 #include "G4MuBremsstrahlung.hh"
00146 #include "G4MuPairProduction.hh"
00147 
00148 #include "G4hIonisation.hh"
00149 
00150 #include "G4StepLimiter.hh"
00151 #include "G4UserSpecialCuts.hh"
00152 
00153 
00154 void MollerPhysicsList::ConstructEM()
00155 {
00156   theParticleIterator->reset();
00157   while( (*theParticleIterator)() ){
00158     G4ParticleDefinition* particle = theParticleIterator->value();
00159     G4ProcessManager* pmanager = particle->GetProcessManager();
00160     G4String particleName = particle->GetParticleName();
00161      
00162     if (particleName == "gamma") {
00163       // gamma         
00164       pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
00165       pmanager->AddDiscreteProcess(new G4ComptonScattering);
00166       pmanager->AddDiscreteProcess(new G4GammaConversion);
00167       pmanager->AddDiscreteProcess(new G4GammaConversionToMuons);
00168      
00169     } else if (particleName == "e-") {
00170       //electron
00171       #if G4VERSION_NUMBER < 940
00172       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00173       #else
00174       pmanager->AddProcess(new G4eMultipleScattering,-1, 1,1);
00175       #endif
00176       pmanager->AddProcess(new G4eIonisation,       -1, 2,2);
00177       pmanager->AddProcess(new G4eBremsstrahlung,   -1, 3,3); 
00178       
00179     } else if (particleName == "e+") {
00180       //positron
00181       #if G4VERSION_NUMBER < 940
00182       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00183       #else
00184       pmanager->AddProcess(new G4eMultipleScattering,-1, 1,1);
00185       #endif
00186       pmanager->AddProcess(new G4eIonisation,       -1, 2,2);
00187       pmanager->AddProcess(new G4eBremsstrahlung,   -1, 3,3);
00188       pmanager->AddProcess(new G4eplusAnnihilation,  0,-1,4);
00189 
00190     } else if (particleName == "proton") {
00191       //proton
00192       #if G4VERSION_NUMBER < 940
00193       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00194       #else
00195       pmanager->AddProcess(new G4hMultipleScattering,-1, 1,1);
00196       #endif
00197       pmanager->AddProcess(new G4hIonisation,        -1,2,2);
00198       
00199       G4HadronElasticProcess* theElasticProcess = 
00200   new G4HadronElasticProcess;
00201       G4LElastic* theElasticModel = new G4LElastic;
00202       theElasticProcess->RegisterMe(theElasticModel);
00203       pmanager->AddDiscreteProcess(new G4HadronElasticProcess);
00204       
00205       G4ProtonInelasticProcess* theInelasticProcess = 
00206   new G4ProtonInelasticProcess("inelastic");
00207       G4LEProtonInelastic* theLEInelasticModel = new G4LEProtonInelastic;
00208       theInelasticProcess->RegisterMe(theLEInelasticModel);
00209       G4ProtonInelasticCrossSection* theProtonData1 = 
00210   new G4ProtonInelasticCrossSection;
00211       theInelasticProcess->AddDataSet(theProtonData1); 
00212       pmanager->AddDiscreteProcess(theInelasticProcess);
00213       
00214       /*} else if( particleName == "mu+" || 
00215                particleName == "mu-"    ) {
00216       //muon  
00217       #if G4VERSION_NUMBER < 940
00218       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00219       #else
00220       pmanager->AddProcess(new G4MuMultipleScattering,-1, 1,1);
00221       #endif
00222       pmanager->AddProcess(new G4MuIonisation,      -1, 2,2);
00223       pmanager->AddProcess(new G4MuBremsstrahlung,  -1, 3,3);
00224       pmanager->AddProcess(new G4MuPairProduction,  -1, 4,4);  */     
00225      
00226     } else if ((!particle->IsShortLived()) &&
00227          (particle->GetPDGCharge() != 0.0) && 
00228          (particle->GetParticleName() != "chargedgeantino")) {
00229       //all others charged particles except geantino
00230       #if G4VERSION_NUMBER < 940
00231       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00232       #else
00233       pmanager->AddProcess(new G4hMultipleScattering,-1, 1,1);
00234       #endif
00235       pmanager->AddProcess(new G4hIonisation,       -1, 2,2);
00236       //step limit
00237       pmanager->AddProcess(new G4StepLimiter,       -1,-1,4);         
00238       pmanager->AddProcess(new G4UserSpecialCuts,   -1,-1,5);  
00239     }
00240   }
00241 }
00242 
00243 #include "G4Decay.hh"
00244 #include "G4MollerBhabhaModel.hh"
00245 
00246 void MollerPhysicsList::ConstructGeneral()
00247 {
00248   // Add Decay Process
00249   G4Decay* theDecayProcess = new G4Decay();
00250   theParticleIterator->reset();
00251   while( (*theParticleIterator)() ){
00252     G4ParticleDefinition* particle = theParticleIterator->value();
00253     G4ProcessManager* pmanager = particle->GetProcessManager();
00254     if (theDecayProcess->IsApplicable(*particle)) { 
00255       pmanager ->AddProcess(theDecayProcess);
00256       // set ordering for PostStepDoIt and AtRestDoIt
00257       pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
00258       pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
00259     }
00260   }
00261 }
00262 
00263 void MollerPhysicsList::SetCuts()
00264 {
00265   G4int temp = GetVerboseLevel();
00266 
00267   SetVerboseLevel(0);
00268   SetCutsWithDefault();
00269   SetVerboseLevel(temp);
00270 }
00271 

Generated on 16 Jun 2013 for mollersim by  doxygen 1.6.1