Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 /// \file electromagnetic/TestEm4/src/PhysicsL << 27 /// \brief Implementation of the PhysicsList c << 28 // << 29 // 23 // >> 24 // $Id: PhysicsList.cc,v 1.4 2003/10/24 12:14:34 maire Exp $ >> 25 // GEANT4 tag $Name: geant4-07-00-patch-01 $ 30 // 26 // 31 27 32 //....oooOO0OOooo........oooOO0OOooo........oo 28 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 33 //....oooOO0OOooo........oooOO0OOooo........oo 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 34 30 35 #include "PhysicsList.hh" 31 #include "PhysicsList.hh" 36 32 37 #include "G4ComptonScattering.hh" << 38 #include "G4EmBuilder.hh" << 39 #include "G4GammaConversion.hh" << 40 #include "G4ParticleDefinition.hh" 33 #include "G4ParticleDefinition.hh" 41 #include "G4ParticleTable.hh" << 34 #include "G4ProductionCutsTable.hh" 42 #include "G4ParticleTypes.hh" << 43 #include "G4PhotoElectricEffect.hh" << 44 #include "G4PhysicsListHelper.hh" << 45 #include "G4ProcessManager.hh" 35 #include "G4ProcessManager.hh" 46 #include "G4SystemOfUnits.hh" << 36 #include "G4ParticleTypes.hh" 47 #include "G4eBremsstrahlung.hh" << 37 #include "G4ParticleTable.hh" 48 #include "G4eIonisation.hh" << 49 #include "G4eMultipleScattering.hh" << 50 #include "G4eplusAnnihilation.hh" << 51 38 52 //....oooOO0OOooo........oooOO0OOooo........oo 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 53 40 54 PhysicsList::PhysicsList() 41 PhysicsList::PhysicsList() >> 42 : G4VUserPhysicsList() 55 { 43 { 56 defaultCutValue = 1.0 * mm; << 44 defaultCutValue = 1.0*mm; >> 45 SetVerboseLevel(1); 57 } 46 } 58 47 59 //....oooOO0OOooo........oooOO0OOooo........oo 48 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 49 >> 50 PhysicsList::~PhysicsList() >> 51 {} >> 52 >> 53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 54 61 void PhysicsList::ConstructParticle() 55 void PhysicsList::ConstructParticle() 62 { 56 { 63 // In this method, static member functions s 57 // In this method, static member functions should be called 64 // for all particles which you want to use. 58 // for all particles which you want to use. 65 // This ensures that objects of these partic 59 // This ensures that objects of these particle types will be 66 // created in the program. << 60 // created in the program. 67 G4EmBuilder::ConstructMinimalEmSet(); << 61 >> 62 ConstructBosons(); >> 63 ConstructLeptons(); >> 64 } >> 65 >> 66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 67 >> 68 void PhysicsList::ConstructBosons() >> 69 { >> 70 G4Gamma::GammaDefinition(); >> 71 } >> 72 >> 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 74 >> 75 void PhysicsList::ConstructLeptons() >> 76 { >> 77 G4Electron::ElectronDefinition(); >> 78 G4Positron::PositronDefinition(); 68 } 79 } 69 80 70 //....oooOO0OOooo........oooOO0OOooo........oo 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 71 82 72 void PhysicsList::ConstructProcess() 83 void PhysicsList::ConstructProcess() 73 { 84 { 74 AddTransportation(); 85 AddTransportation(); 75 G4PhysicsListHelper* ph = G4PhysicsListHelpe << 86 ConstructEM(); >> 87 } 76 88 77 auto particleIterator = GetParticleIterator( << 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 78 particleIterator->reset(); << 79 while ((*particleIterator)()) { << 80 G4ParticleDefinition* particle = particleI << 81 G4String particleName = particle->GetParti << 82 90 >> 91 #include "G4ComptonScattering.hh" >> 92 #include "G4GammaConversion.hh" >> 93 #include "G4PhotoElectricEffect.hh" >> 94 >> 95 #include "G4MultipleScattering.hh" >> 96 >> 97 #include "G4eIonisation.hh" >> 98 #include "G4eBremsstrahlung.hh" >> 99 #include "G4eplusAnnihilation.hh" >> 100 >> 101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 102 >> 103 void PhysicsList::ConstructEM() >> 104 { >> 105 theParticleIterator->reset(); >> 106 while( (*theParticleIterator)() ){ >> 107 G4ParticleDefinition* particle = theParticleIterator->value(); >> 108 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 109 G4String particleName = particle->GetParticleName(); >> 110 83 if (particleName == "gamma") { 111 if (particleName == "gamma") { 84 ph->RegisterProcess(new G4PhotoElectricE << 112 // gamma 85 ph->RegisterProcess(new G4ComptonScatter << 113 86 ph->RegisterProcess(new G4GammaConversio << 114 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); 87 } << 115 pmanager->AddDiscreteProcess(new G4ComptonScattering); 88 else if (particleName == "e-") { << 116 pmanager->AddDiscreteProcess(new G4GammaConversion); 89 ph->RegisterProcess(new G4eMultipleScatt << 117 90 ph->RegisterProcess(new G4eIonisation, p << 118 } else if (particleName == "e-") { 91 ph->RegisterProcess(new G4eBremsstrahlun << 119 //electron 92 } << 120 93 else if (particleName == "e+") { << 121 pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); 94 ph->RegisterProcess(new G4eMultipleScatt << 122 pmanager->AddProcess(new G4eIonisation, -1, 2,2); 95 ph->RegisterProcess(new G4eIonisation, p << 123 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); 96 ph->RegisterProcess(new G4eBremsstrahlun << 124 97 ph->RegisterProcess(new G4eplusAnnihilat << 125 } else if (particleName == "e+") { >> 126 //positron >> 127 >> 128 pmanager->AddProcess(new G4MultipleScattering,-1, 1,1); >> 129 pmanager->AddProcess(new G4eIonisation, -1, 2,2); >> 130 pmanager->AddProcess(new G4eBremsstrahlung, -1, 3,3); >> 131 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); 98 } 132 } 99 } 133 } 100 } 134 } 101 135 102 //....oooOO0OOooo........oooOO0OOooo........oo 136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 137 >> 138 void PhysicsList::SetCuts() >> 139 { >> 140 if (verboseLevel >0){ >> 141 G4cout << "PhysicsList::SetCuts:"; >> 142 G4cout << "CutLength : " << defaultCutValue/mm << " (mm)" << G4endl; >> 143 } >> 144 >> 145 //special for low energy physics >> 146 // >> 147 G4ProductionCutsTable::GetProductionCutsTable() >> 148 ->SetEnergyRange(250*eV, 100*GeV); >> 149 >> 150 // set cut values for gamma at first and for e- second and next for e+, >> 151 // because some processes for e+/e- need cut values for gamma >> 152 SetCutValue(defaultCutValue, "gamma"); >> 153 SetCutValue(defaultCutValue, "e-"); >> 154 SetCutValue(defaultCutValue, "e+"); >> 155 } >> 156 >> 157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 158 >> 159 >> 160 >> 161 103 162