Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // ******************************************* 27 // 28 // CaTS (Calorimetry and Tracking Simulation) 29 // 30 // Authors : Hans Wenzel 31 // Soon Yung Jun 32 // (Fermi National Accelerator Labo 33 // 34 // History 35 // October 18th, 2021 : first implementation 36 // 37 // ******************************************* 38 // 39 /// \file PhysicsConfigurator.cc 40 /// \brief Implementation of the CaTS::Physics 41 42 // Geant4 headers 43 #include "G4String.hh" 44 #include "G4VModularPhysicsList.hh" 45 #include "G4PhysListFactoryAlt.hh" 46 #include "G4PhysicsConstructorRegistry.hh" 47 #include "G4PhysListRegistry.hh" 48 #include "G4OpticalParameters.hh" 49 #include "G4NeutronTrackingCut.hh" 50 #include "G4StepLimiter.hh" 51 #include "G4StepLimiterPhysics.hh" 52 #include "G4SystemOfUnits.hh" 53 // project Headers 54 #include "PhysicsConfigurator.hh" 55 #include "ConfigurationManager.hh" 56 // c++ headers 57 #include <stdlib.h> 58 PhysicsConfigurator* PhysicsConfigurator::inst 59 60 G4VModularPhysicsList* PhysicsConfigurator::Co 61 { 62 // 63 // Access to registries and factories 64 // 65 G4PhysicsConstructorRegistry* g4pcr = 66 G4PhysicsConstructorRegistry::Instance(); 67 G4PhysListRegistry* g4plr = G4PhysListRegist 68 G4bool verbose = ConfigurationManager::getIn 69 if(verbose) 70 { 71 G4cout << "Available Physics Constructors: 72 << g4pcr->AvailablePhysicsConstruct 73 G4cout << "Available Physics Lists: 74 << g4plr->AvailablePhysLists().size 75 G4cout << "Available Physics Extensions: 76 << g4plr->AvailablePhysicsExtension 77 G4cout << "Available Physics Lists Em: 78 << g4plr->AvailablePhysListsEM().si 79 g4plr->SetVerbose(1); 80 } 81 else 82 { 83 g4plr->SetVerbose(0); 84 } 85 g4plr->AddPhysicsExtension("OPTICAL", "G4Opt 86 g4plr->AddPhysicsExtension("STEPLIMIT", "G4S 87 g4plr->AddPhysicsExtension("NEUTRONLIMIT", " 88 if(verbose) 89 { 90 g4pcr->PrintAvailablePhysicsConstructors() 91 g4plr->PrintAvailablePhysLists(); 92 } 93 g4alt::G4PhysListFactory factory; 94 G4VModularPhysicsList* phys = nullptr; 95 if(verbose) 96 G4cout << "Physics configuration: " << phy 97 // 98 // currently using the Constructor names doe 99 // G4String physName = "FTFP_BERT+G4OpticalP 100 // using the name doesn't work either 101 // G4String physName = "FTFP_BERT+Optical+st 102 // reference PhysicsList via its name 103 // 104 if(factory.IsReferencePhysList(physName)) 105 { 106 phys = factory.GetReferencePhysList(physNa 107 } 108 else 109 { 110 G4cout << "Not a reference physics list" < 111 g4plr->PrintAvailablePhysLists(); 112 exit(EXIT_FAILURE); 113 } 114 if(verbose) 115 { 116 G4cout << phys->GetPhysicsTableDirectory() 117 } 118 G4OpticalParameters::Instance()->SetProcessA 119 G4OpticalParameters::Instance()->SetProcessA 120 G4OpticalParameters::Instance()->SetProcessA 121 G4OpticalParameters::Instance()->SetProcessA 122 G4OpticalParameters::Instance()->SetProcessA 123 G4OpticalParameters::Instance()->SetProcessA 124 G4OpticalParameters::Instance()->SetProcessA 125 126 G4OpticalParameters::Instance()->SetCerenkov 127 G4OpticalParameters::Instance()->SetScintSta 128 G4OpticalParameters::Instance()->SetScintTra 129 true); // only relevant if we actually st 130 G4OpticalParameters::Instance()->SetCerenkov 131 true); // only relevant if we actually st 132 G4OpticalParameters::Instance()->SetCerenkov 133 G4OpticalParameters::Instance()->SetCerenkov 134 if(verbose) 135 { 136 phys->DumpList(); 137 } 138 return phys; 139 } 140 141 PhysicsConfigurator* PhysicsConfigurator::getI 142 { 143 if(instance == 0) 144 instance = new PhysicsConfigurator(); 145 return instance; 146 } 147