Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/air_shower/src/UltraPhysicsList.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/air_shower/src/UltraPhysicsList.cc (Version 11.3.0) and /examples/advanced/air_shower/src/UltraPhysicsList.cc (Version 9.2)


  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 absorption process inside optical media
                                                   >> 243   G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
                                                   >> 244   // Rayleigh scattering for optical photons (aerogel radiators)
                                                   >> 245   G4OpRayleigh*   theRayleighScatteringProcess = new G4OpRayleigh();
                                                   >> 246   // Boundary process definition Class
                                                   >> 247   G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
                                                   >> 248 
                                                   >> 249   // Chose level 0 (no verbose)
                                                   >> 250   theCerenkovProcess           -> SetVerboseLevel(0);
                                                   >> 251   theAbsorptionProcess         -> SetVerboseLevel(0);
                                                   >> 252   theRayleighScatteringProcess -> SetVerboseLevel(0);
                                                   >> 253   theBoundaryProcess           -> SetVerboseLevel(0);
                                                   >> 254 
                                                   >> 255  
                                                   >> 256 // Chose MaxNumPhotons that can be generated. Lets ignore this for now
                                                   >> 257 //   G4int MaxNumPhotons = 300;
                                                   >> 258 //   theCerenkovProcess->SetMaxNumPhotonsPerStep(MaxNumPhotons);
                                                   >> 259   theCerenkovProcess->SetTrackSecondariesFirst(true);
                                                   >> 260 
                                                   >> 261   // Boundary model (UNIFIED OR GLISUR (OLD GEANT3)) For now only GEANT3
                                                   >> 262   G4OpticalSurfaceModel themodel = unified;
                                                   >> 263   theBoundaryProcess->SetModel(themodel);
                                                   >> 264 
                                                   >> 265   theParticleIterator->reset();
                                                   >> 266   while( (*theParticleIterator)() ){
                                                   >> 267     G4ParticleDefinition* particle = theParticleIterator->value();
                                                   >> 268     G4ProcessManager* pmanager = particle->GetProcessManager();
                                                   >> 269     G4String particleName = particle->GetParticleName();
                                                   >> 270 
                                                   >> 271     if (theCerenkovProcess->IsApplicable(*particle)) {
                                                   >> 272       pmanager->AddProcess(theCerenkovProcess);
                                                   >> 273       pmanager->SetProcessOrdering(theCerenkovProcess,idxPostStep);
                                                   >> 274     }
                                                   >> 275 
                                                   >> 276 
                                                   >> 277     if (particleName == "opticalphoton") {
                                                   >> 278       G4cout << ">>>>>>>>>>>>>> AddDiscreteProcess to OpticalPhoton " << G4endl;
                                                   >> 279       pmanager->AddDiscreteProcess(theAbsorptionProcess);
                                                   >> 280       pmanager->AddDiscreteProcess(theRayleighScatteringProcess);
                                                   >> 281       pmanager->AddDiscreteProcess(theBoundaryProcess);
                                                   >> 282     }
                                                   >> 283   }
123 }                                                 284 }
124                                                   285 
                                                   >> 286 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
125                                                   287 
126 void UltraPhysicsList::SetCuts()                  288 void UltraPhysicsList::SetCuts()
127 {                                                 289 {
128   if (verboseLevel >1){                           290   if (verboseLevel >1){
129     G4cout << "UltraPhysicsList::SetCuts:";       291     G4cout << "UltraPhysicsList::SetCuts:";
130   }                                            << 292   }  
131   //  " G4VUserPhysicsList::SetCutsWithDefault << 293   //  " G4VUserPhysicsList::SetCutsWithDefault" method sets 
132   //   the default cut value for all particle  << 294   //   the default cut value for all particle types 
133   SetCutsWithDefault();                        << 295   SetCutsWithDefault();   
134 }                                                 296 }
                                                   >> 297 
                                                   >> 298 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
135                                                   299