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
00025 G4Geantino::GeantinoDefinition();
00026
00027
00028 G4Gamma::GammaDefinition();
00029
00030
00031
00032 G4Electron::ElectronDefinition();
00033 G4Positron::PositronDefinition();
00034
00035 G4MuonPlus::MuonPlusDefinition();
00036 G4MuonMinus::MuonMinusDefinition();
00037
00038 G4NeutrinoE::NeutrinoEDefinition();
00039 G4AntiNeutrinoE::AntiNeutrinoEDefinition();
00040
00041
00042 G4NeutrinoMu::NeutrinoMuDefinition();
00043 G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
00044
00045
00046 G4NeutrinoTau::NeutrinoTauDefinition();
00047 G4AntiNeutrinoTau::AntiNeutrinoTauDefinition();
00048
00049
00050
00051 G4PionPlus::PionPlusDefinition();
00052 G4PionMinus::PionMinusDefinition();
00053 G4PionZero::PionZeroDefinition();
00054
00055 G4UnknownParticle::UnknownParticleDefinition();
00056
00057 G4KaonPlus::KaonPlusDefinition();
00058 G4KaonMinus::KaonMinusDefinition();
00059
00060 G4KaonZeroLong::KaonZeroLongDefinition();
00061 G4KaonZeroShort::KaonZeroShortDefinition();
00062
00063
00064 G4Proton::ProtonDefinition();
00065 G4AntiProton::AntiProtonDefinition();
00066
00067 G4Neutron::NeutronDefinition();
00068 G4AntiNeutron::AntiNeutronDefinition();
00069
00070
00071 G4Eta::EtaDefinition();
00072 G4Alpha::AlphaDefinition();
00073
00074
00075 G4Lambda::LambdaDefinition();
00076 G4AntiLambda::AntiLambdaDefinition();
00077
00078 G4SigmaPlus::SigmaPlusDefinition();
00079 G4SigmaMinus::SigmaMinusDefinition();
00080 G4SigmaZero::SigmaZeroDefinition();
00081
00082 G4AntiSigmaPlus::AntiSigmaPlusDefinition();
00083 G4AntiSigmaMinus::AntiSigmaMinusDefinition();
00084 G4AntiSigmaZero::AntiSigmaZeroDefinition();
00085
00086 G4TauPlus::TauPlusDefinition();
00087 G4TauMinus::TauMinusDefinition();
00088
00089 G4XiZero::XiZeroDefinition();
00090 G4XiMinus::XiMinusDefinition();
00091
00092 G4AntiXiZero::AntiXiZeroDefinition();
00093
00094
00095 G4Deuteron::DeuteronDefinition();
00096
00097 G4He3::He3Definition();
00098
00099 G4GenericIon::GenericIonDefinition();
00100
00101 G4DMesonPlus::DMesonPlusDefinition();
00102 G4DMesonMinus::DMesonMinusDefinition();
00103 G4DMesonZero::DMesonZeroDefinition();
00104 G4AntiDMesonZero::AntiDMesonZeroDefinition();
00105
00106 G4DsMesonPlus::DsMesonPlusDefinition();
00107 G4DsMesonMinus::DsMesonMinusDefinition();
00108
00109 G4LambdacPlus::LambdacPlusDefinition();
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
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
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
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
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
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226 } else if ((!particle->IsShortLived()) &&
00227 (particle->GetPDGCharge() != 0.0) &&
00228 (particle->GetParticleName() != "chargedgeantino")) {
00229
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
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
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
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