Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 /// \file FlashPhysicsList.cc 28 /// \brief Implementation of the FlashPhysicsList class 29 30 #include "FlashPhysicsList.hh" 31 #include "FlashPhysicsListMessenger.hh" 32 #include "G4DecayPhysics.hh" 33 #include "G4EmLivermorePhysics.hh" 34 #include "G4EmPenelopePhysics.hh" 35 #include "G4EmStandardPhysics.hh" 36 #include "G4EmStandardPhysics_option4.hh" 37 #include "G4EmStandardPhysics_option3.hh" 38 #include "G4PhysListFactory.hh" 39 #include "G4ProductionCuts.hh" 40 #include "G4RadioactiveDecayPhysics.hh" 41 #include "G4Region.hh" 42 #include "G4RegionStore.hh" 43 #include "G4SystemOfUnits.hh" 44 45 FlashPhysicsList::FlashPhysicsList() : G4VModularPhysicsList() { 46 47 48 49 pMessenger = new FlashPhysicsListMessenger(this); 50 SetVerboseLevel(2); 51 52 // EM physics 53 emPhysicsList = new G4EmStandardPhysics_option4(1); 54 emName = G4String("emstandard_opt4"); 55 56 // Decay physics and all particles 57 decPhysicsList = new G4DecayPhysics(); 58 59 // Radioactive physics and all particles 60 radPhysicsList=new G4RadioactiveDecayPhysics(); 61 62 63 } 64 65 FlashPhysicsList::~FlashPhysicsList() { 66 67 delete pMessenger; 68 delete emPhysicsList; 69 delete decPhysicsList; 70 delete radPhysicsList; 71 72 } 73 74 75 void FlashPhysicsList::AddPackage(const G4String& name) 76 { 77 G4PhysListFactory factory; 78 G4VModularPhysicsList* phys =factory.GetReferencePhysList(name); 79 G4int i=0; 80 const G4VPhysicsConstructor* elem= phys->GetPhysics(i); 81 G4VPhysicsConstructor* tmp = const_cast<G4VPhysicsConstructor*> (elem); 82 while (elem !=0) 83 { 84 RegisterPhysics(tmp); 85 elem= phys->GetPhysics(++i) ; 86 tmp = const_cast<G4VPhysicsConstructor*> (elem); 87 } 88 } 89 90 91 92 93 void FlashPhysicsList::ConstructParticle() 94 { 95 decPhysicsList->ConstructParticle(); 96 } 97 98 void FlashPhysicsList::ConstructProcess() 99 { 100 // transportation 101 // 102 AddTransportation(); 103 104 // electromagnetic physics list 105 // 106 emPhysicsList->ConstructProcess(); 107 em_config.AddModels(); 108 109 decPhysicsList->ConstructProcess(); 110 radPhysicsList->ConstructProcess(); 111 112 } 113 114 void FlashPhysicsList::AddPhysicsList(const G4String& name) 115 { 116 117 if (verboseLevel>1) { 118 G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; 119 } 120 if (name == emName) return; 121 122 ///////////////////////////////////////////////////////////////////////////// 123 // ELECTROMAGNETIC MODELS 124 ///////////////////////////////////////////////////////////////////////////// 125 126 if (name == "standard_opt3") { 127 emName = name; 128 delete emPhysicsList; 129 emPhysicsList = new G4EmStandardPhysics_option3(); 130 G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: G4EmStandardPhysics_option3" << G4endl; 131 } 132 else if (name == "standard_opt4") { 133 emName = name; 134 delete emPhysicsList; 135 emPhysicsList = new G4EmStandardPhysics_option4(); 136 G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: G4EmStandardPhysics_option4" << G4endl; 137 138 139 } else if (name == "Livermore") { 140 emName = name; 141 delete emPhysicsList; 142 emPhysicsList = new G4EmLivermorePhysics(); 143 G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: G4EmLivermorePhysics" << G4endl; 144 145 } else if (name == "Penelope") { 146 emName = name; 147 delete emPhysicsList; 148 emPhysicsList = new G4EmPenelopePhysics(); 149 G4cout << "THE FOLLOWING ELECTROMAGNETIC PHYSICS LIST HAS BEEN ACTIVATED: G4EmPenelopePhysics" << G4endl; 150 151 } 152 153 } 154 void FlashPhysicsList::SetCuts() {//set cuts based on region name defined in detector construction 155 156 SetCutsWithDefault(); 157 G4Region *region; 158 G4String regName; 159 G4ProductionCuts *cuts; 160 161 162 163 regName = "Phantom_reg"; 164 region = G4RegionStore::GetInstance()->GetRegion(regName); 165 cuts = new G4ProductionCuts; 166 cuts->SetProductionCut(0.1 * mm, G4ProductionCuts::GetIndex("gamma")); 167 cuts->SetProductionCut(0.1 * mm, G4ProductionCuts::GetIndex("e-")); 168 cuts->SetProductionCut(0.1 * mm, G4ProductionCuts::GetIndex("e+")); 169 region->SetProductionCuts(cuts); 170 171 172 } 173 174 175 176