Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - ULTRA experiment 28 // GEANT 4 - ULTRA experiment example 29 // ------------------------------------------- 29 // -------------------------------------------------------------- 30 // 30 // 31 // Code developed by: 31 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, << 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, P. Rodrigues 33 // 33 // 34 // **************************************** 34 // **************************************************** 35 // * UltraPhysicsList.cc 35 // * UltraPhysicsList.cc 36 // **************************************** 36 // **************************************************** 37 // 37 // 38 // Ultra Physics List class; Standard and L 38 // Ultra Physics List class; Standard and Low Energy EM processes are defined for 39 // the relevant particles. Optical processe 39 // the relevant particles. Optical processes are declared. 40 // 40 // 41 #include "G4ios.hh" 41 #include "G4ios.hh" 42 //#include "iomanip.h" 42 //#include "iomanip.h" 43 #include "globals.hh" 43 #include "globals.hh" 44 44 45 #include "UltraPhysicsList.hh" 45 #include "UltraPhysicsList.hh" 46 46 47 #include "G4ParticleDefinition.hh" 47 #include "G4ParticleDefinition.hh" 48 #include "G4ParticleTypes.hh" 48 #include "G4ParticleTypes.hh" 49 #include "G4ParticleWithCuts.hh" 49 #include "G4ParticleWithCuts.hh" 50 #include "G4ParticleTable.hh" 50 #include "G4ParticleTable.hh" 51 #include "G4Material.hh" 51 #include "G4Material.hh" 52 #include "G4MaterialTable.hh" 52 #include "G4MaterialTable.hh" 53 #include "G4ProcessManager.hh" 53 #include "G4ProcessManager.hh" 54 #include "G4ProcessVector.hh" 54 #include "G4ProcessVector.hh" 55 55 56 #include "G4EmStandardPhysics.hh" << 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 57 #include "G4EmLivermorePhysics.hh" << 58 #include "G4EmPenelopePhysics.hh" << 59 #include "G4EmLowEPPhysics.hh" << 60 #include "G4DecayPhysics.hh" << 61 #include "G4IonPhysics.hh" << 62 #include "G4EmExtraPhysics.hh" << 63 #include "G4StoppingPhysics.hh" << 64 #include "G4OpticalPhysics.hh" << 65 57 66 #include "G4UnitsTable.hh" << 58 UltraPhysicsList::UltraPhysicsList() : G4VUserPhysicsList() {;} 67 #include "G4SystemOfUnits.hh" << 68 #include "G4LossTableManager.hh" << 69 59 70 UltraPhysicsList::UltraPhysicsList() : G4VMod << 60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 71 fEmPhysicsList(0), << 61 72 fOpPhysicsList(0), << 62 UltraPhysicsList::~UltraPhysicsList() {;} 73 fDecayPhysicsList(0), << 63 74 fVerboseLebel(1), << 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 fMaxNumPhotonStep(20) << 65 >> 66 void UltraPhysicsList::ConstructParticle() 76 { 67 { 77 G4LossTableManager::Instance(); << 68 // In this method, static member functions should be called 78 SetDefaultCutValue(1*mm); << 69 // for all particles which you want to use. >> 70 // This ensures that objects of these particle types will be >> 71 // created in the program. >> 72 >> 73 ConstructBosons(); >> 74 ConstructLeptons(); >> 75 ConstructMesons(); >> 76 ConstructBaryons(); 79 77 80 // fMessenger = new UltraPhysicsListMessenge << 78 } 81 // fStepMaxProcess = new StepMax(); << 82 79 83 // Initilise flags << 80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 84 81 85 SetVerboseLevel(1); << 82 void UltraPhysicsList::ConstructBosons() >> 83 { >> 84 // pseudo-particles >> 85 G4Geantino::GeantinoDefinition(); >> 86 G4ChargedGeantino::ChargedGeantinoDefinition(); 86 87 >> 88 // gamma >> 89 G4Gamma::GammaDefinition(); 87 90 88 // EM physics << 91 // optical photon 89 fEmName = G4String("emstandard"); << 92 G4OpticalPhoton::OpticalPhotonDefinition(); 90 fEmPhysicsList = new G4EmStandardPhysics(); << 91 fOpPhysicsList = new G4OpticalPhysics(); << 92 93 93 // Decay Physics is always defined << 94 fDecayPhysicsList = new G4DecayPhysics(); << 95 } 94 } 96 95 97 UltraPhysicsList::~UltraPhysicsList() << 96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 97 >> 98 void UltraPhysicsList::ConstructLeptons() 98 { 99 { 99 delete fDecayPhysicsList; << 100 // leptons 100 delete fEmPhysicsList; << 101 G4Electron::ElectronDefinition(); 101 delete fOpPhysicsList; << 102 G4Positron::PositronDefinition(); 102 // delete fStepMaxProcess; << 103 G4NeutrinoE::NeutrinoEDefinition(); >> 104 G4AntiNeutrinoE::AntiNeutrinoEDefinition(); >> 105 G4MuonPlus::MuonPlusDefinition(); >> 106 G4MuonMinus::MuonMinusDefinition(); >> 107 G4NeutrinoMu::NeutrinoMuDefinition(); >> 108 G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); 103 } 109 } 104 110 >> 111 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 105 112 106 void UltraPhysicsList::ConstructParticle() << 113 void UltraPhysicsList::ConstructMesons() >> 114 { >> 115 // mesons >> 116 G4PionPlus::PionPlusDefinition(); >> 117 G4PionMinus::PionMinusDefinition(); >> 118 G4PionZero::PionZeroDefinition(); >> 119 } >> 120 >> 121 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 122 >> 123 void UltraPhysicsList::ConstructBaryons() 107 { 124 { 108 fDecayPhysicsList->ConstructParticle(); << 125 // barions >> 126 G4Proton::ProtonDefinition(); >> 127 G4AntiProton::AntiProtonDefinition(); >> 128 G4Neutron::NeutronDefinition(); >> 129 G4AntiNeutron::AntiNeutronDefinition(); 109 } 130 } 110 131 >> 132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 111 133 112 void UltraPhysicsList::ConstructProcess() 134 void UltraPhysicsList::ConstructProcess() 113 { 135 { 114 AddTransportation(); 136 AddTransportation(); 115 if (fEmPhysicsList) << 137 ConstructGeneral(); 116 fEmPhysicsList->ConstructProcess(); << 138 ConstructEM(); >> 139 ConstructOp(); >> 140 >> 141 } >> 142 >> 143 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 144 >> 145 #include "G4Decay.hh" >> 146 >> 147 void UltraPhysicsList::ConstructGeneral() >> 148 { >> 149 G4Decay* theDecayProcess = new G4Decay(); >> 150 theParticleIterator->reset(); >> 151 while( (*theParticleIterator)() ){ >> 152 G4ParticleDefinition* particle = theParticleIterator->value(); >> 153 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 154 if (theDecayProcess->IsApplicable(*particle)) { >> 155 pmanager->AddDiscreteProcess(theDecayProcess); >> 156 } >> 157 } >> 158 } >> 159 >> 160 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 161 >> 162 #include "G4ComptonScattering.hh" >> 163 #include "G4GammaConversion.hh" >> 164 #include "G4PhotoElectricEffect.hh" >> 165 >> 166 #include "G4eMultipleScattering.hh" >> 167 #include "G4MuMultipleScattering.hh" >> 168 #include "G4hMultipleScattering.hh" >> 169 >> 170 #include "G4eIonisation.hh" >> 171 #include "G4eBremsstrahlung.hh" >> 172 #include "G4eplusAnnihilation.hh" >> 173 >> 174 #include "G4MuIonisation.hh" >> 175 #include "G4MuBremsstrahlung.hh" >> 176 #include "G4MuPairProduction.hh" >> 177 >> 178 #include "G4hIonisation.hh" >> 179 >> 180 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 117 181 118 if (fOpPhysicsList) << 182 void UltraPhysicsList::ConstructEM() 119 fOpPhysicsList->ConstructProcess(); << 183 { >> 184 theParticleIterator->reset(); >> 185 while( (*theParticleIterator)() ){ >> 186 G4ParticleDefinition* particle = theParticleIterator->value(); >> 187 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 188 G4String particleName = particle->GetParticleName(); >> 189 >> 190 if (particleName == "gamma") { >> 191 // gamma >> 192 // Construct processes for gamma >> 193 pmanager->AddDiscreteProcess(new G4GammaConversion()); >> 194 pmanager->AddDiscreteProcess(new G4ComptonScattering()); >> 195 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect()); >> 196 >> 197 } else if (particleName == "e-") { >> 198 //electron >> 199 // Construct processes for electron >> 200 pmanager->AddProcess(new G4eMultipleScattering(),-1,1,1); >> 201 pmanager->AddProcess(new G4eIonisation(),-1,2,2); >> 202 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); >> 203 >> 204 } else if (particleName == "e+") { >> 205 //positron >> 206 // Construct processes for positron >> 207 pmanager->AddProcess(new G4eMultipleScattering(),-1,1,1); >> 208 pmanager->AddProcess(new G4eIonisation(),-1,2,2); >> 209 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); >> 210 pmanager->AddProcess(new G4eplusAnnihilation(),0,-1,4); >> 211 >> 212 } else if( particleName == "mu+" || >> 213 particleName == "mu-" ) { >> 214 //muon >> 215 // Construct processes for muon >> 216 pmanager->AddProcess(new G4MuMultipleScattering(),-1,1,1); >> 217 pmanager->AddProcess(new G4MuIonisation(),-1,2,2); >> 218 pmanager->AddProcess(new G4MuBremsstrahlung(),-1,-1,3); >> 219 pmanager->AddProcess(new G4MuPairProduction(),-1,-1,4); >> 220 >> 221 } else { >> 222 if ((particle->GetPDGCharge() != 0.0) && >> 223 (particle->GetParticleName() != "chargedgeantino")) { >> 224 // all others charged particles except geantino >> 225 pmanager->AddProcess(new G4hMultipleScattering(),-1,1,1); >> 226 pmanager->AddProcess(new G4hIonisation(),-1,2,2); >> 227 } >> 228 } >> 229 } >> 230 } >> 231 >> 232 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 233 >> 234 #include "G4Cerenkov.hh" >> 235 #include "G4Scintillation.hh" >> 236 #include "G4OpAbsorption.hh" >> 237 #include "G4OpRayleigh.hh" >> 238 #include "G4OpBoundaryProcess.hh" 120 239 121 if (fDecayPhysicsList) << 240 void UltraPhysicsList::ConstructOp() 122 fDecayPhysicsList->ConstructProcess(); << 241 { >> 242 // this Cerenkov Process >> 243 G4Cerenkov* theCerenkovProcess = new G4Cerenkov("Cerenkov"); >> 244 // this absorption process inside optical media >> 245 G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption(); >> 246 // Rayleigh scattering for optical photons (aerogel radiators) >> 247 G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh(); >> 248 // Boundary process definition Class >> 249 G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess(); >> 250 >> 251 // Chose level 0 (no verbose) >> 252 theCerenkovProcess -> SetVerboseLevel(0); >> 253 theAbsorptionProcess -> SetVerboseLevel(0); >> 254 theRayleighScatteringProcess -> SetVerboseLevel(0); >> 255 theBoundaryProcess -> SetVerboseLevel(0); >> 256 >> 257 >> 258 // Chose MaxNumPhotons that can be generated. Lets ignore this for now >> 259 // G4int MaxNumPhotons = 300; >> 260 // theCerenkovProcess->SetMaxNumPhotonsPerStep(MaxNumPhotons); >> 261 theCerenkovProcess->SetTrackSecondariesFirst(true); >> 262 >> 263 theParticleIterator->reset(); >> 264 while( (*theParticleIterator)() ){ >> 265 G4ParticleDefinition* particle = theParticleIterator->value(); >> 266 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 267 G4String particleName = particle->GetParticleName(); >> 268 >> 269 if (theCerenkovProcess->IsApplicable(*particle)) { >> 270 pmanager->AddProcess(theCerenkovProcess); >> 271 pmanager->SetProcessOrdering(theCerenkovProcess,idxPostStep); >> 272 } >> 273 >> 274 >> 275 if (particleName == "opticalphoton") { >> 276 G4cout << ">>>>>>>>>>>>>> AddDiscreteProcess to OpticalPhoton " << G4endl; >> 277 pmanager->AddDiscreteProcess(theAbsorptionProcess); >> 278 pmanager->AddDiscreteProcess(theRayleighScatteringProcess); >> 279 pmanager->AddDiscreteProcess(theBoundaryProcess); >> 280 } >> 281 } 123 } 282 } 124 283 >> 284 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 125 285 126 void UltraPhysicsList::SetCuts() 286 void UltraPhysicsList::SetCuts() 127 { 287 { 128 if (verboseLevel >1){ 288 if (verboseLevel >1){ 129 G4cout << "UltraPhysicsList::SetCuts:"; 289 G4cout << "UltraPhysicsList::SetCuts:"; 130 } << 290 } 131 // " G4VUserPhysicsList::SetCutsWithDefault << 291 // " G4VUserPhysicsList::SetCutsWithDefault" method sets 132 // the default cut value for all particle << 292 // the default cut value for all particle types 133 SetCutsWithDefault(); << 293 SetCutsWithDefault(); 134 } 294 } >> 295 >> 296 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 135 297