Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/electromagnetic/TestEm16/src/PhysicsList.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/extended/electromagnetic/TestEm16/src/PhysicsList.cc (Version 11.3.0) and /examples/extended/electromagnetic/TestEm16/src/PhysicsList.cc (Version 11.1.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 /// \file electromagnetic/TestEm16/src/Physics     26 /// \file electromagnetic/TestEm16/src/PhysicsList.cc
 27 /// \brief Implementation of the PhysicsList c     27 /// \brief Implementation of the PhysicsList class
 28 //                                                 28 //
 29 //                                                 29 //
 30 //....oooOO0OOooo........oooOO0OOooo........oo     30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 31 //....oooOO0OOooo........oooOO0OOooo........oo     31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 32                                                    32 
 33 #include "PhysicsList.hh"                          33 #include "PhysicsList.hh"
 34                                                << 
 35 #include "PhysicsListMessenger.hh"                 34 #include "PhysicsListMessenger.hh"
 36                                                    35 
 37 #include "G4ComptonScattering.hh"              << 
 38 #include "G4DecayPhysics.hh"                   << 
 39 #include "G4GammaConversion.hh"                << 
 40 #include "G4MuBremsstrahlung.hh"               << 
 41 #include "G4MuIonisation.hh"                   << 
 42 #include "G4MuMultipleScattering.hh"           << 
 43 #include "G4MuPairProduction.hh"               << 
 44 #include "G4ParticleDefinition.hh"                 36 #include "G4ParticleDefinition.hh"
 45 #include "G4ParticleTable.hh"                  <<  37 #include "G4ProcessManager.hh"
 46 #include "G4ParticleTypes.hh"                      38 #include "G4ParticleTypes.hh"
                                                   >>  39 #include "G4ParticleTable.hh"
                                                   >>  40 
                                                   >>  41 #include "G4ComptonScattering.hh"
                                                   >>  42 #include "G4GammaConversion.hh"
 47 #include "G4PhotoElectricEffect.hh"                43 #include "G4PhotoElectricEffect.hh"
 48 #include "G4ProcessManager.hh"                 << 
 49 #include "G4ProcessTable.hh"                   << 
 50 #include "G4RayleighScattering.hh"                 44 #include "G4RayleighScattering.hh"
 51 #include "G4StepLimiter.hh"                    <<  45 
 52 #include "G4SynchrotronRadiation.hh"           << 
 53 #include "G4SynchrotronRadiationInMat.hh"      << 
 54 #include "G4SystemOfUnits.hh"                  << 
 55 #include "G4XrayReflection.hh"                 << 
 56 #include "G4eBremsstrahlung.hh"                << 
 57 #include "G4eIonisation.hh"                    << 
 58 #include "G4eMultipleScattering.hh"                46 #include "G4eMultipleScattering.hh"
                                                   >>  47 #include "G4eIonisation.hh"
                                                   >>  48 #include "G4eBremsstrahlung.hh"
 59 #include "G4eplusAnnihilation.hh"                  49 #include "G4eplusAnnihilation.hh"
 60 #include "G4hBremsstrahlung.hh"                <<  50 
 61 #include "G4hIonisation.hh"                    <<  51 #include "G4MuMultipleScattering.hh"
                                                   >>  52 #include "G4MuIonisation.hh"
                                                   >>  53 #include "G4MuBremsstrahlung.hh"
                                                   >>  54 #include "G4MuPairProduction.hh"
                                                   >>  55 
 62 #include "G4hMultipleScattering.hh"                56 #include "G4hMultipleScattering.hh"
                                                   >>  57 #include "G4hIonisation.hh"
                                                   >>  58 #include "G4hBremsstrahlung.hh"
 63 #include "G4hPairProduction.hh"                    59 #include "G4hPairProduction.hh"
 64                                                    60 
                                                   >>  61 #include "G4SynchrotronRadiation.hh"
                                                   >>  62 #include "G4SynchrotronRadiationInMat.hh"
                                                   >>  63 
                                                   >>  64 #include "G4StepLimiter.hh"
                                                   >>  65 #include "G4DecayPhysics.hh"
                                                   >>  66 
                                                   >>  67 #include "G4SystemOfUnits.hh"
                                                   >>  68 
 65 //....oooOO0OOooo........oooOO0OOooo........oo     69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 66                                                    70 
 67 PhysicsList::PhysicsList() : G4VUserPhysicsLis <<  71 PhysicsList::PhysicsList()
                                                   >>  72 : G4VUserPhysicsList(),
                                                   >>  73   fMess(0)
 68 {                                                  74 {
 69   SetDefaultCutValue(1. * km);                 <<  75   SetDefaultCutValue(1.*km);
 70                                                <<  76   
 71   fSRType = true;                              <<  77   fSRType = true; 
 72   fMess = new PhysicsListMessenger(this);          78   fMess = new PhysicsListMessenger(this);
 73   fDecayPhysics = new G4DecayPhysics();            79   fDecayPhysics = new G4DecayPhysics();
 74 }                                                  80 }
 75                                                    81 
 76 //....oooOO0OOooo........oooOO0OOooo........oo     82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 77                                                    83 
                                                   >>  84 PhysicsList::~PhysicsList()
                                                   >>  85 { 
                                                   >>  86   delete fMess;
                                                   >>  87   delete fDecayPhysics;
                                                   >>  88 }
                                                   >>  89 
                                                   >>  90 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
                                                   >>  91 
 78 void PhysicsList::ConstructParticle()              92 void PhysicsList::ConstructParticle()
 79 {                                                  93 {
 80   fDecayPhysics->ConstructParticle();              94   fDecayPhysics->ConstructParticle();
 81 }                                                  95 }
 82                                                    96 
 83 //....oooOO0OOooo........oooOO0OOooo........oo     97 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 84                                                    98 
 85 void PhysicsList::ConstructProcess()               99 void PhysicsList::ConstructProcess()
 86 {                                                 100 {
 87   AddTransportation();                            101   AddTransportation();
 88   ConstructEM();                                  102   ConstructEM();
 89   fDecayPhysics->ConstructProcess();              103   fDecayPhysics->ConstructProcess();
 90 }                                                 104 }
 91                                                   105 
 92 //....oooOO0OOooo........oooOO0OOooo........oo    106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 93                                                   107 
 94 void PhysicsList::ConstructEM()                   108 void PhysicsList::ConstructEM()
 95 {                                                 109 {
 96   auto particleIterator = GetParticleIterator( << 110   auto particleIterator=GetParticleIterator();
 97   particleIterator->reset();                      111   particleIterator->reset();
 98   auto fSync = new G4SynchrotronRadiation();   << 112   G4SynchrotronRadiation* fSync = new G4SynchrotronRadiation();
 99   while ((*particleIterator)()) {              << 113   while( (*particleIterator)() ){
100     G4ParticleDefinition* particle = particleI    114     G4ParticleDefinition* particle = particleIterator->value();
101     G4ProcessManager* pmanager = particle->Get    115     G4ProcessManager* pmanager = particle->GetProcessManager();
102     G4String particleName = particle->GetParti    116     G4String particleName = particle->GetParticleName();
103                                                   117 
104     if (particleName == "gamma") {                118     if (particleName == "gamma") {
105       // gamma                                    119       // gamma
106       pmanager->AddDiscreteProcess(new G4Photo    120       pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
107       pmanager->AddDiscreteProcess(new G4Compt    121       pmanager->AddDiscreteProcess(new G4ComptonScattering);
108       pmanager->AddDiscreteProcess(new G4Gamma    122       pmanager->AddDiscreteProcess(new G4GammaConversion);
109       pmanager->AddDiscreteProcess(new G4Rayle    123       pmanager->AddDiscreteProcess(new G4RayleighScattering);
110       pmanager->AddDiscreteProcess(new G4XrayR << 124             
111     }                                          << 125     } else if (particleName == "e-") {
112     else if (particleName == "e-") {           << 126       //electron
113       // electron                              << 127       pmanager->AddProcess(new G4eMultipleScattering,       -1, 1, -1);
114       pmanager->AddProcess(new G4eMultipleScat << 128       pmanager->AddProcess(new G4eIonisation,               -1, 2, 1);
115       pmanager->AddProcess(new G4eIonisation,  << 129       pmanager->AddProcess(new G4eBremsstrahlung,           -1, 3, 2);
116       pmanager->AddProcess(new G4eBremsstrahlu << 
117       if (fSRType) {                              130       if (fSRType) {
118         pmanager->AddProcess(fSync, -1, -1, 3) << 131         pmanager->AddProcess(fSync,    -1,-1, 3);
119       }                                        << 132       } else {
120       else {                                   << 133         pmanager->AddProcess(new G4SynchrotronRadiationInMat,-1,-1, 3); 
121         pmanager->AddProcess(new G4Synchrotron << 
122       }                                           134       }
123       pmanager->AddProcess(new G4StepLimiter,  << 135       pmanager->AddProcess(new G4StepLimiter,               -1,-1, 4);
124     }                                          << 136      
125     else if (particleName == "e+") {           << 137     } else if (particleName == "e+") {
126       // positron                              << 138       //positron
127       pmanager->AddProcess(new G4eMultipleScat << 139       pmanager->AddProcess(new G4eMultipleScattering,       -1, 1, -1);
128       pmanager->AddProcess(new G4eIonisation,  << 140       pmanager->AddProcess(new G4eIonisation,               -1, 2, 1);
129       pmanager->AddProcess(new G4eBremsstrahlu << 141       pmanager->AddProcess(new G4eBremsstrahlung,           -1, 3, 2);
130       pmanager->AddProcess(new G4eplusAnnihila << 142       pmanager->AddProcess(new G4eplusAnnihilation,          0,-1, 3);
131       if (fSRType) {                              143       if (fSRType) {
132         pmanager->AddProcess(fSync, -1, -1, 4) << 144         pmanager->AddProcess(fSync,      -1,-1, 4);
133       }                                        << 145       } else {
134       else {                                   << 146         pmanager->AddProcess(new G4SynchrotronRadiationInMat, -1,-1, 4);
135         pmanager->AddProcess(new G4Synchrotron << 
136       }                                           147       }
137       pmanager->AddProcess(new G4StepLimiter,  << 148       pmanager->AddProcess(new G4StepLimiter,               -1,-1, 5);
138     }                                          << 149       
139     else if (particleName == "mu+" || particle << 150     } else if( particleName == "mu+" ||
140       // muon                                  << 151                particleName == "mu-"    ) {
                                                   >> 152       //muon
141       pmanager->AddProcess(new G4MuMultipleSca    153       pmanager->AddProcess(new G4MuMultipleScattering, -1, 1, -1);
142       pmanager->AddProcess(new G4MuIonisation, << 154       pmanager->AddProcess(new G4MuIonisation,         -1, 2, 1);
143       pmanager->AddProcess(new G4MuBremsstrahl << 155       pmanager->AddProcess(new G4MuBremsstrahlung,     -1, 3, 2);
144       pmanager->AddProcess(new G4MuPairProduct << 156       pmanager->AddProcess(new G4MuPairProduction,     -1, 4, 3);
145       pmanager->AddProcess(fSync, -1, -1, 4);  << 157       pmanager->AddProcess(fSync, -1,-1, 4); 
146       pmanager->AddProcess(new G4StepLimiter,  << 158       pmanager->AddProcess(new G4StepLimiter,               -1,-1, 5);
147     }                                          << 159 
148     else if (particleName == "proton") {       << 160     } else if( particleName == "proton") {
149       // proton                                << 161       //proton
150       pmanager->AddProcess(new G4hMultipleScat    162       pmanager->AddProcess(new G4hMultipleScattering, -1, 1, -1);
151       pmanager->AddProcess(new G4hIonisation,  << 163       pmanager->AddProcess(new G4hIonisation,         -1, 2, 1);
152       pmanager->AddProcess(new G4hBremsstrahlu << 164       pmanager->AddProcess(new G4hBremsstrahlung,     -1, 3, 2);
153       pmanager->AddProcess(new G4hPairProducti << 165       pmanager->AddProcess(new G4hPairProduction,     -1, 4, 3);
154       pmanager->AddProcess(fSync, -1, -1, 4);  << 166       pmanager->AddProcess(fSync, -1,-1, 4); 
155       pmanager->AddProcess(new G4StepLimiter,  << 167       pmanager->AddProcess(new G4StepLimiter,          -1,-1, 5);
156     }                                          << 168     }
157     else if (particle->GetPDGCharge() != 0.0 & << 169     else if (particle->GetPDGCharge() != 0.0 && !particle->IsShortLived()) 
158       pmanager->AddProcess(fSync, -1, -1, 1);  << 170     {
                                                   >> 171       pmanager->AddProcess(fSync,-1,-1, 1);  
159     }                                             172     }
160   }                                               173   }
161 }                                              << 
162                                                << 
163 //....oooOO0OOooo........oooOO0OOooo........oo << 
164                                                << 
165 void PhysicsList::SetXrayReflectionRoughness(G << 
166 {                                              << 
167   G4ProcessTable* theProcessTable = G4ProcessT << 
168   G4XrayReflection* XrayReflectionProcess =    << 
169     (G4XrayReflection*)theProcessTable->FindPr << 
170   if (XrayReflectionProcess)                   << 
171     XrayReflectionProcess->SetSurfaceRoughness << 
172   else                                         << 
173     G4cout << "Warning. No process XrayReflect << 
174               "SetXrayReflectionRoughness igno << 
175            << G4endl;                          << 
176 }                                                 174 }
177                                                   175 
178 //....oooOO0OOooo........oooOO0OOooo........oo    176 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
179                                                   177