musrPhysicsList.cc

Go to the documentation of this file.
00001 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00002 
00003 #include "globals.hh"
00004 #include "G4ios.hh"
00005 #include "musrPhysicsList.hh"
00006 #include "G4VPhysicsConstructor.hh"
00007 #include "G4ProcessManager.hh"
00008 #include "G4ParticleTypes.hh"
00009 
00010 #include "G4MuonDecayChannel.hh"
00011 #include "G4DecayTable.hh"
00012 #include "musrMuonDecayChannel.hh"
00013 #include "musrDecay.hh"
00014 
00015 
00016 
00017 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00018 
00019 musrPhysicsList::musrPhysicsList():  G4VUserPhysicsList()
00020 {
00021   defaultCutValue = 1.0*cm;  
00022    SetVerboseLevel(0);
00023 }
00024 
00025 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00026 
00027 musrPhysicsList::~musrPhysicsList()
00028 {}
00029 
00030 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00031 
00032 void musrPhysicsList::ConstructParticle()
00033 {
00034 
00035   ConstructBosons();
00036   ConstructLeptons();
00037   ConstructMesons();
00038   ConstructBaryons();
00039 }
00040 
00041 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00042 
00043 void musrPhysicsList::ConstructBosons()
00044 {
00045   // pseudo-particles
00046   G4Geantino::GeantinoDefinition();
00047   G4ChargedGeantino::ChargedGeantinoDefinition();
00048 
00049   // gamma
00050   G4Gamma::GammaDefinition();
00051 }
00052 
00053 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00054 
00055 void musrPhysicsList::ConstructLeptons()
00056 {
00057   // leptons
00058   //  e+/-
00059   G4Electron::ElectronDefinition();
00060   G4Positron::PositronDefinition();
00061   // mu+/-
00062   G4MuonPlus::MuonPlusDefinition();
00063   G4MuonMinus::MuonMinusDefinition();
00064   G4DecayTable* MuonPlusDecayTable = new G4DecayTable();
00065   MuonPlusDecayTable -> Insert(new musrMuonDecayChannel("mu+",1.00));
00066   G4MuonPlus::MuonPlusDefinition() -> SetDecayTable(MuonPlusDecayTable);
00067   // nu_e
00068   G4NeutrinoE::NeutrinoEDefinition();
00069   G4AntiNeutrinoE::AntiNeutrinoEDefinition();
00070   // nu_mu
00071   G4NeutrinoMu::NeutrinoMuDefinition();
00072   G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
00073 }
00074 
00075 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00076 
00077 void musrPhysicsList::ConstructMesons()
00078 {
00079   //  mesons
00080   //    light mesons
00081   G4PionPlus::PionPlusDefinition();
00082   G4PionMinus::PionMinusDefinition();
00083   G4PionZero::PionZeroDefinition();
00084   G4Eta::EtaDefinition();
00085   G4EtaPrime::EtaPrimeDefinition();
00086   G4KaonPlus::KaonPlusDefinition();
00087   G4KaonMinus::KaonMinusDefinition();
00088   G4KaonZero::KaonZeroDefinition();
00089   G4AntiKaonZero::AntiKaonZeroDefinition();
00090   G4KaonZeroLong::KaonZeroLongDefinition();
00091   G4KaonZeroShort::KaonZeroShortDefinition();
00092 }
00093 
00094 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00095 
00096 void musrPhysicsList::ConstructBaryons()
00097 {
00098   //  baryons
00099   G4Proton::ProtonDefinition();
00100   G4AntiProton::AntiProtonDefinition();
00101 
00102   G4Neutron::NeutronDefinition();
00103   G4AntiNeutron::AntiNeutronDefinition();
00104 }
00105 
00106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00107 
00108 void musrPhysicsList::ConstructProcess()
00109 {
00110   AddTransportation();
00111   ConstructEM();
00112   ConstructGeneral();
00113 }
00114 
00115 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00116 
00117 #include "G4ComptonScattering.hh"
00118 #include "G4GammaConversion.hh"
00119 #include "G4PhotoElectricEffect.hh"
00120 
00121 #include "G4MultipleScattering.hh"
00122 
00123 #include "G4eIonisation.hh"
00124 #include "G4eBremsstrahlung.hh"
00125 #include "G4eplusAnnihilation.hh"
00126 
00127 #include "G4MuIonisation.hh"
00128 #include "G4MuBremsstrahlung.hh"
00129 #include "G4MuPairProduction.hh"
00130 
00131 #include "G4hIonisation.hh"
00132 
00133 #include "G4UserSpecialCuts.hh"
00134 
00135 #include "musrAtRestSpinRotation.hh"
00136 
00137 
00138 
00139 
00140 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00141 
00142 void musrPhysicsList::ConstructEM()
00143 {
00144   theParticleIterator->reset();
00145   while( (*theParticleIterator)() ){
00146     G4ParticleDefinition* particle = theParticleIterator->value();
00147     G4ProcessManager* pmanager = particle->GetProcessManager();
00148     G4String particleName = particle->GetParticleName();
00149      
00150     if (particleName == "gamma") {
00151       // gamma         
00152       pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
00153       pmanager->AddDiscreteProcess(new G4ComptonScattering);
00154       pmanager->AddDiscreteProcess(new G4GammaConversion);
00155       
00156     } else if (particleName == "e-") {
00157       //electron
00158       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00159       pmanager->AddProcess(new G4eIonisation,       -1, 2,2);
00160       pmanager->AddProcess(new G4eBremsstrahlung,   -1, 3,3);      
00161 
00162     } else if (particleName == "e+") {
00163       //positron
00164       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00165       pmanager->AddProcess(new G4eIonisation,       -1, 2,2);
00166       pmanager->AddProcess(new G4eBremsstrahlung,   -1, 3,3);
00167       pmanager->AddProcess(new G4eplusAnnihilation,  0,-1,4);
00168 
00169     } else if( particleName == "mu+" || 
00170                particleName == "mu-"    ) {
00171       //muon  
00172 
00173       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00174       pmanager->AddProcess(new G4MuIonisation,      -1, 2,2);
00175       pmanager->AddProcess(new G4MuBremsstrahlung,  -1, 3,3);
00176       pmanager->AddProcess(new G4MuPairProduction,  -1, 4,4);       
00177       pmanager->AddProcess(new musrAtRestSpinRotation, 1, -1, -1);
00178       musrDecay* theDecayProcess = new musrDecay();
00179       pmanager->AddProcess(theDecayProcess);
00180       pmanager ->SetProcessOrderingToLast(theDecayProcess, idxAtRest);
00181       pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
00182 
00183      
00184     } else if ((!particle->IsShortLived()) &&
00185                (particle->GetPDGCharge() != 0.0) && 
00186                (particle->GetParticleName() != "chargedgeantino")) {
00187       //all others charged particles except geantino
00188       pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
00189       pmanager->AddProcess(new G4hIonisation,       -1, 2,2);
00191     }
00192   }
00193 }
00194 
00195 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00196 
00197 #include "G4Decay.hh"
00198 void musrPhysicsList::ConstructGeneral()
00199 {
00200 
00201 }
00202 
00203 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00204 
00205 void musrPhysicsList::SetCuts()
00206 {
00207   //G4VUserPhysicsList::SetCutsWithDefault method sets 
00208   //the default cut value for all particle types 
00209   //
00210   SetCutsWithDefault();
00211      
00212    if (verboseLevel>0) DumpCutValuesTable();
00213 }
00214 
00215 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
00216 

Generated on Mon Mar 27 12:19:54 2006 for MUSR by  doxygen 1.4.6