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 "G4MultipleScattering.hh" >> 167 >> 168 #include "G4eIonisation.hh" >> 169 #include "G4eBremsstrahlung.hh" >> 170 #include "G4eplusAnnihilation.hh" >> 171 >> 172 #include "G4MuIonisation.hh" >> 173 #include "G4MuBremsstrahlung.hh" >> 174 #include "G4MuPairProduction.hh" >> 175 >> 176 #include "G4hIonisation.hh" >> 177 >> 178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 117 179 118 if (fOpPhysicsList) << 180 void UltraPhysicsList::ConstructEM() 119 fOpPhysicsList->ConstructProcess(); << 181 { >> 182 theParticleIterator->reset(); >> 183 while( (*theParticleIterator)() ){ >> 184 G4ParticleDefinition* particle = theParticleIterator->value(); >> 185 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 186 G4String particleName = particle->GetParticleName(); >> 187 >> 188 if (particleName == "gamma") { >> 189 // gamma >> 190 // Construct processes for gamma >> 191 pmanager->AddDiscreteProcess(new G4GammaConversion()); >> 192 pmanager->AddDiscreteProcess(new G4ComptonScattering()); >> 193 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect()); >> 194 >> 195 } else if (particleName == "e-") { >> 196 //electron >> 197 // Construct processes for electron >> 198 pmanager->AddProcess(new G4MultipleScattering(),-1,1,1); >> 199 pmanager->AddProcess(new G4eIonisation(),-1,2,2); >> 200 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); >> 201 >> 202 } else if (particleName == "e+") { >> 203 //positron >> 204 // Construct processes for positron >> 205 pmanager->AddProcess(new G4MultipleScattering(),-1,1,1); >> 206 pmanager->AddProcess(new G4eIonisation(),-1,2,2); >> 207 pmanager->AddProcess(new G4eBremsstrahlung(),-1,-1,3); >> 208 pmanager->AddProcess(new G4eplusAnnihilation(),0,-1,4); >> 209 >> 210 } else if( particleName == "mu+" || >> 211 particleName == "mu-" ) { >> 212 //muon >> 213 // Construct processes for muon >> 214 pmanager->AddProcess(new G4MultipleScattering(),-1,1,1); >> 215 pmanager->AddProcess(new G4MuIonisation(),-1,2,2); >> 216 pmanager->AddProcess(new G4MuBremsstrahlung(),-1,-1,3); >> 217 pmanager->AddProcess(new G4MuPairProduction(),-1,-1,4); >> 218 >> 219 } else { >> 220 if ((particle->GetPDGCharge() != 0.0) && >> 221 (particle->GetParticleName() != "chargedgeantino")) { >> 222 // all others charged particles except geantino >> 223 pmanager->AddProcess(new G4MultipleScattering(),-1,1,1); >> 224 pmanager->AddProcess(new G4hIonisation(),-1,2,2); >> 225 } >> 226 } >> 227 } >> 228 } >> 229 >> 230 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 231 >> 232 #include "G4Cerenkov.hh" >> 233 #include "G4Scintillation.hh" >> 234 #include "G4OpAbsorption.hh" >> 235 #include "G4OpRayleigh.hh" >> 236 #include "G4OpBoundaryProcess.hh" 120 237 121 if (fDecayPhysicsList) << 238 void UltraPhysicsList::ConstructOp() 122 fDecayPhysicsList->ConstructProcess(); << 239 { >> 240 // this Cerenkov Process >> 241 G4Cerenkov* theCerenkovProcess = new G4Cerenkov("Cerenkov"); >> 242 // this is Scintillation process >> 243 G4Scintillation* theScintillationProcess = new G4Scintillation("Scintillation"); >> 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 theScintillationProcess -> SetVerboseLevel(0); >> 254 theAbsorptionProcess -> SetVerboseLevel(0); >> 255 theRayleighScatteringProcess -> SetVerboseLevel(0); >> 256 theBoundaryProcess -> SetVerboseLevel(0); >> 257 >> 258 >> 259 // Chose MaxNumPhotons that can be generated. Lets ignore this for now >> 260 // G4int MaxNumPhotons = 300; >> 261 // theCerenkovProcess->SetMaxNumPhotonsPerStep(MaxNumPhotons); >> 262 theCerenkovProcess->SetTrackSecondariesFirst(true); >> 263 >> 264 theScintillationProcess->SetTrackSecondariesFirst(true); >> 265 theScintillationProcess->SetScintillationYieldFactor(1.); >> 266 theScintillationProcess->SetScintillationExcitationRatio(0.0); >> 267 >> 268 // Boundary model (UNIFIED OR GLISUR (OLD GEANT3)) For now only GEANT3 >> 269 G4OpticalSurfaceModel themodel = unified; >> 270 theBoundaryProcess->SetModel(themodel); >> 271 >> 272 theParticleIterator->reset(); >> 273 while( (*theParticleIterator)() ){ >> 274 G4ParticleDefinition* particle = theParticleIterator->value(); >> 275 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 276 G4String particleName = particle->GetParticleName(); >> 277 >> 278 if (theCerenkovProcess->IsApplicable(*particle)) { >> 279 // pmanager->AddContinuousProcess(theCerenkovProcess); >> 280 } >> 281 >> 282 if (theScintillationProcess->IsApplicable(*particle)) { >> 283 pmanager->AddProcess(theScintillationProcess); >> 284 pmanager->SetProcessOrderingToLast(theScintillationProcess, idxAtRest); >> 285 pmanager->SetProcessOrderingToLast(theScintillationProcess, idxPostStep); >> 286 } >> 287 >> 288 if (particleName == "opticalphoton") { >> 289 G4cout << ">>>>>>>>>>>>>> AddDiscreteProcess to OpticalPhoton " << G4endl; >> 290 pmanager->AddDiscreteProcess(theAbsorptionProcess); >> 291 pmanager->AddDiscreteProcess(theRayleighScatteringProcess); >> 292 pmanager->AddDiscreteProcess(theBoundaryProcess); >> 293 } >> 294 } 123 } 295 } 124 296 >> 297 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 125 298 126 void UltraPhysicsList::SetCuts() 299 void UltraPhysicsList::SetCuts() 127 { 300 { 128 if (verboseLevel >1){ 301 if (verboseLevel >1){ 129 G4cout << "UltraPhysicsList::SetCuts:"; 302 G4cout << "UltraPhysicsList::SetCuts:"; 130 } << 303 } 131 // " G4VUserPhysicsList::SetCutsWithDefault << 304 // " G4VUserPhysicsList::SetCutsWithDefault" method sets 132 // the default cut value for all particle << 305 // the default cut value for all particle types 133 SetCutsWithDefault(); << 306 SetCutsWithDefault(); 134 } 307 } >> 308 >> 309 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 135 310