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 // Code developed by: 23 // Code developed by: 27 // S.Larsson 24 // S.Larsson 28 // 25 // 29 // ******************************** 26 // ******************************** 30 // * * 27 // * * 31 // * PurgMagPhysicsList.cc * 28 // * PurgMagPhysicsList.cc * 32 // * * 29 // * * 33 // ******************************** 30 // ******************************** 34 // 31 // >> 32 // >> 33 // $Id: PurgMagPhysicsList.cc,v 1.4 2005/12/14 16:06:49 gunter Exp $ >> 34 // GEANT4 tag $Name: geant4-08-00-patch-01 $ >> 35 // >> 36 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 35 37 36 #include "PurgMagPhysicsList.hh" 38 #include "PurgMagPhysicsList.hh" 37 #include "G4SystemOfUnits.hh" << 39 38 #include "G4ParticleDefinition.hh" 40 #include "G4ParticleDefinition.hh" 39 #include "G4ParticleWithCuts.hh" 41 #include "G4ParticleWithCuts.hh" 40 #include "G4ProcessManager.hh" 42 #include "G4ProcessManager.hh" 41 #include "G4ParticleTypes.hh" 43 #include "G4ParticleTypes.hh" 42 #include "G4ParticleTable.hh" 44 #include "G4ParticleTable.hh" 43 #include "G4Material.hh" 45 #include "G4Material.hh" 44 #include "G4UnitsTable.hh" 46 #include "G4UnitsTable.hh" 45 #include "G4ios.hh" 47 #include "G4ios.hh" 46 #include "G4EmStandardPhysics_option4.hh" << 48 47 #include "G4VPhysicsConstructor.hh" << 49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 48 #include "G4DecayPhysics.hh" << 49 50 50 PurgMagPhysicsList::PurgMagPhysicsList(): G4V 51 PurgMagPhysicsList::PurgMagPhysicsList(): G4VUserPhysicsList() 51 { 52 { 52 defaultCutValue = 1*micrometer; 53 defaultCutValue = 1*micrometer; 53 cutForGamma = defaultCutValue; 54 cutForGamma = defaultCutValue; 54 cutForElectron = defaultCutValue; 55 cutForElectron = defaultCutValue; 55 cutForPositron = defaultCutValue; 56 cutForPositron = defaultCutValue; 56 cutForProton = defaultCutValue; 57 cutForProton = defaultCutValue; 57 << 58 58 fEmPhysicsList = new G4EmStandardPhysics_opt << 59 fDecPhysicsList = new G4DecayPhysics(); << 60 SetVerboseLevel(1); 59 SetVerboseLevel(1); 61 } 60 } 62 61 >> 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 63 63 PurgMagPhysicsList::~PurgMagPhysicsList() 64 PurgMagPhysicsList::~PurgMagPhysicsList() >> 65 {} >> 66 >> 67 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 68 >> 69 void PurgMagPhysicsList::ConstructParticle() 64 { 70 { 65 delete fDecPhysicsList; << 71 // In this method, static member functions should be called 66 delete fEmPhysicsList; << 72 // for all particles which you want to use. >> 73 // This ensures that objects of these particle types will be >> 74 // created in the program. >> 75 >> 76 ConstructBosons(); >> 77 ConstructLeptons(); >> 78 ConstructBarions(); 67 } 79 } 68 80 69 void PurgMagPhysicsList::ConstructParticle() << 81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 82 >> 83 void PurgMagPhysicsList::ConstructBosons() >> 84 { >> 85 >> 86 // gamma >> 87 G4Gamma::GammaDefinition(); >> 88 >> 89 // optical photon >> 90 G4OpticalPhoton::OpticalPhotonDefinition(); >> 91 } >> 92 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 93 >> 94 void PurgMagPhysicsList::ConstructLeptons() >> 95 { >> 96 // leptons >> 97 G4Electron::ElectronDefinition(); >> 98 G4Positron::PositronDefinition(); >> 99 } >> 100 >> 101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 102 >> 103 void PurgMagPhysicsList::ConstructBarions() 70 { 104 { 71 fDecPhysicsList -> ConstructParticle(); << 105 // barions 72 } << 106 G4Proton::ProtonDefinition(); >> 107 G4AntiProton::AntiProtonDefinition(); >> 108 } >> 109 >> 110 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 73 111 74 void PurgMagPhysicsList::ConstructProcess() 112 void PurgMagPhysicsList::ConstructProcess() 75 { 113 { 76 AddTransportation(); 114 AddTransportation(); 77 fEmPhysicsList -> ConstructProcess(); << 115 ConstructEM(); 78 << 116 ConstructGeneral(); 79 // Deexcitation << 80 // Both Fluorescence and Auger e- emission act << 81 //G4VAtomDeexcitation* de = new G4UAtomicDeexc << 82 //G4LossTableManager::Instance()->SetAtomDeexc << 83 //de -> SetFluo(true); << 84 //de -> SetAuger(true); << 85 } 117 } 86 118 >> 119 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 120 >> 121 #include "G4MultipleScattering.hh" >> 122 // Bosons >> 123 #include "G4PhotoElectricEffect.hh" >> 124 #include "G4ComptonScattering.hh" >> 125 #include "G4GammaConversion.hh" >> 126 // Leptons >> 127 #include "G4eIonisation.hh" >> 128 #include "G4eBremsstrahlung.hh" >> 129 #include "G4eplusAnnihilation.hh" >> 130 >> 131 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 132 >> 133 void PurgMagPhysicsList::ConstructEM() >> 134 { >> 135 theParticleIterator->reset(); >> 136 while( (*theParticleIterator)() ) >> 137 { >> 138 G4ParticleDefinition* particle = theParticleIterator->value(); >> 139 G4ProcessManager* pmanager = particle->GetProcessManager(); >> 140 G4String particleName = particle->GetParticleName(); >> 141 >> 142 >> 143 if (particleName == "gamma") { >> 144 //gamma >> 145 pmanager->AddDiscreteProcess(new G4GammaConversion); >> 146 pmanager->AddDiscreteProcess(new G4ComptonScattering); >> 147 pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); >> 148 >> 149 } else if (particleName == "e-") { >> 150 //electron >> 151 pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3); >> 152 pmanager->AddProcess(new G4eIonisation, -1, 2,2); >> 153 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); >> 154 >> 155 } else if (particleName == "e+") { >> 156 //positron >> 157 pmanager->AddProcess(new G4eBremsstrahlung, -1,-1,3); >> 158 pmanager->AddProcess(new G4eIonisation, -1, 2,2); >> 159 pmanager->AddProcess(new G4MultipleScattering, -1, 1,1); >> 160 pmanager->AddProcess(new G4eplusAnnihilation, 0,-1,4); >> 161 >> 162 } else if (particleName == "proton") { >> 163 //proton >> 164 pmanager->AddProcess(new G4MultipleScattering, -1,1,1); >> 165 >> 166 } else if (particleName == "anti_proton") { >> 167 //antiproton >> 168 pmanager->AddProcess(new G4MultipleScattering, -1,1,1); >> 169 } >> 170 } >> 171 } >> 172 >> 173 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 174 >> 175 void PurgMagPhysicsList::ConstructGeneral() >> 176 { } >> 177 >> 178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 179 87 void PurgMagPhysicsList::SetCuts() 180 void PurgMagPhysicsList::SetCuts() 88 { 181 { 89 if (verboseLevel >0){ 182 if (verboseLevel >0){ 90 G4cout << "PurgMagPhysicsList::SetCuts:"; 183 G4cout << "PurgMagPhysicsList::SetCuts:"; 91 G4cout << "CutLength : " << G4BestUnit(def 184 G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl; 92 } 185 } 93 186 94 // set cut values for gamma at first and for 187 // set cut values for gamma at first and for e- second and next for e+, 95 // because some processes for e+/e- need cut 188 // because some processes for e+/e- need cut values for gamma 96 SetCutValue(cutForGamma, "gamma"); 189 SetCutValue(cutForGamma, "gamma"); 97 SetCutValue(cutForElectron, "e-"); 190 SetCutValue(cutForElectron, "e-"); 98 SetCutValue(cutForPositron, "e+"); 191 SetCutValue(cutForPositron, "e+"); 99 192 100 // set cut values for proton and anti_proton 193 // set cut values for proton and anti_proton before all other hadrons 101 // because some processes for hadrons need c 194 // because some processes for hadrons need cut values for proton/anti_proton 102 SetCutValue(cutForProton, "proton"); 195 SetCutValue(cutForProton, "proton"); 103 SetCutValue(cutForProton, "anti_proton"); 196 SetCutValue(cutForProton, "anti_proton"); 104 197 105 // SetCutValueForOthers(defaultCutValue); << 198 // SetCutValueForOthers(defaultCutValue); 106 199 107 if (verboseLevel>0) DumpCutValuesTable(); 200 if (verboseLevel>0) DumpCutValuesTable(); 108 } 201 } 109 202 >> 203 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 204 110 void PurgMagPhysicsList::SetGammaLowLimit(G4do 205 void PurgMagPhysicsList::SetGammaLowLimit(G4double lowcut) 111 { 206 { 112 if (verboseLevel >0){ 207 if (verboseLevel >0){ 113 G4cout << "PurgMagPhysicsList::SetCuts:"; 208 G4cout << "PurgMagPhysicsList::SetCuts:"; 114 G4cout << "Gamma cut in energy: " << lowcu 209 G4cout << "Gamma cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 115 } 210 } 116 211 117 // G4Gamma::SetEnergyRange(lowcut,1e5); 212 // G4Gamma::SetEnergyRange(lowcut,1e5); 118 SetGELowLimit(lowcut); 213 SetGELowLimit(lowcut); 119 } 214 } 120 215 >> 216 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 217 121 void PurgMagPhysicsList::SetElectronLowLimit(G 218 void PurgMagPhysicsList::SetElectronLowLimit(G4double lowcut) 122 { 219 { 123 if (verboseLevel >0){ 220 if (verboseLevel >0){ 124 221 125 G4cout << "PurgMagPhysicsList::SetCuts:"; 222 G4cout << "PurgMagPhysicsList::SetCuts:"; 126 G4cout << "Electron cut in energy: " << lo 223 G4cout << "Electron cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 127 } 224 } 128 225 129 // G4Electron::SetEnergyRange(lowcut,1e5); 226 // G4Electron::SetEnergyRange(lowcut,1e5); 130 SetGELowLimit(lowcut); 227 SetGELowLimit(lowcut); 131 } 228 } 132 229 >> 230 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 231 133 void PurgMagPhysicsList::SetPositronLowLimit(G 232 void PurgMagPhysicsList::SetPositronLowLimit(G4double lowcut) 134 { 233 { 135 if (verboseLevel >0){ 234 if (verboseLevel >0){ 136 235 137 G4cout << "PurgMagPhysicsList::SetCuts:"; 236 G4cout << "PurgMagPhysicsList::SetCuts:"; 138 G4cout << "Positron cut in energy: " << lo 237 G4cout << "Positron cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 139 } 238 } 140 239 141 G4cerr << "PurgMagPhysicsList::SetPositronLo 240 G4cerr << "PurgMagPhysicsList::SetPositronLowLimit: Not currently able to set Positron LowLimit." << G4endl; 142 G4Exception("PurgMagPhysicsList::SetPositron << 241 G4Exception("Positron Low Limit: not implemented in PurgMagPhysicsList"); 143 FatalException,"Positron Low Limit: no << 144 // 242 // 145 // G4Positron::SetEnergyRange(lowcut,1e5); 243 // G4Positron::SetEnergyRange(lowcut,1e5); 146 } 244 } 147 245 >> 246 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 148 247 149 void PurgMagPhysicsList::SetProtonLowLimit(G4d 248 void PurgMagPhysicsList::SetProtonLowLimit(G4double lowcut) 150 { 249 { 151 if (verboseLevel >0){ 250 if (verboseLevel >0){ 152 251 153 G4cout << "PurgMagPhysicsList::SetCuts:"; 252 G4cout << "PurgMagPhysicsList::SetCuts:"; 154 G4cout << "Proton cut in energy: " << lowc 253 G4cout << "Proton cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 155 } 254 } 156 255 157 G4cerr << "PurgMagPhysicsList::SetProtonLowL 256 G4cerr << "PurgMagPhysicsList::SetProtonLowLimit: Not currently able to set Proton LowLimit." << G4endl; 158 G4Exception("PurgMagPhysicsList::SetProtonLo << 257 G4Exception("Proton Low Limit: not implemented in PurgMagPhysicsList"); 159 FatalException,"Proton Low Limit: not << 160 // 258 // 161 // G4Proton::SetEnergyRange(lowcut,1e5); 259 // G4Proton::SetEnergyRange(lowcut,1e5); 162 // G4AntiProton::SetEnergyRange(lowcut,1e5); 260 // G4AntiProton::SetEnergyRange(lowcut,1e5); 163 } 261 } 164 262 >> 263 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 264 165 void PurgMagPhysicsList::SetGEPLowLimit(G4doub 265 void PurgMagPhysicsList::SetGEPLowLimit(G4double lowcut) 166 { 266 { 167 if (verboseLevel >0){ 267 if (verboseLevel >0){ 168 G4cout << "PurgMagPhysicsList::SetGEPLowLi 268 G4cout << "PurgMagPhysicsList::SetGEPLowLimit:"; 169 G4cout << "Gamma and Electron cut in energ 269 G4cout << "Gamma and Electron cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 170 } 270 } 171 271 172 // G4Gamma::SetEnergyRange(lowcut,1e5); 272 // G4Gamma::SetEnergyRange(lowcut,1e5); 173 // G4Electron::SetEnergyRange(lowcut,1e5); 273 // G4Electron::SetEnergyRange(lowcut,1e5); 174 // G4Positron::SetEnergyRange(lowcut,1e5); 274 // G4Positron::SetEnergyRange(lowcut,1e5); 175 this->SetGELowLimit(lowcut); 275 this->SetGELowLimit(lowcut); 176 276 177 G4cerr << " SetGEPLowLimit : Uncertain wheth 277 G4cerr << " SetGEPLowLimit : Uncertain whether setting Positron low limit " << G4endl; 178 } 278 } >> 279 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 179 280 >> 281 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 180 void PurgMagPhysicsList::SetGELowLimit(G4doubl 282 void PurgMagPhysicsList::SetGELowLimit(G4double lowcut) 181 { 283 { 182 if (verboseLevel >0){ 284 if (verboseLevel >0){ 183 G4cout << "PurgMagPhysicsList::SetGELowLim 285 G4cout << "PurgMagPhysicsList::SetGELowLimit:"; 184 G4cout << "Gamma and Electron cut in energ 286 G4cout << "Gamma and Electron cut in energy: " << lowcut*MeV << " (MeV)" << G4endl; 185 } 287 } 186 288 187 G4ProductionCutsTable::GetProductionCutsTabl 289 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowcut,1e5); 188 } 290 } 189 void PurgMagPhysicsList::SetGammaCut(G4double 291 void PurgMagPhysicsList::SetGammaCut(G4double val) 190 { 292 { >> 293 ResetCuts(); 191 cutForGamma = val; 294 cutForGamma = val; 192 } 295 } 193 296 >> 297 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 298 194 void PurgMagPhysicsList::SetElectronCut(G4doub 299 void PurgMagPhysicsList::SetElectronCut(G4double val) 195 { 300 { >> 301 // ResetCuts(); 196 cutForElectron = val; 302 cutForElectron = val; 197 } 303 } 198 304 >> 305 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 306 199 void PurgMagPhysicsList::SetPositronCut(G4doub 307 void PurgMagPhysicsList::SetPositronCut(G4double val) 200 { 308 { >> 309 // ResetCuts(); 201 cutForPositron = val; 310 cutForPositron = val; 202 } 311 } 203 312 >> 313 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 314 204 void PurgMagPhysicsList::SetProtonCut(G4double 315 void PurgMagPhysicsList::SetProtonCut(G4double val) 205 { 316 { >> 317 //ResetCuts(); 206 cutForProton = val; 318 cutForProton = val; 207 } 319 } >> 320 >> 321 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 208 322 209 323 210 324 211 325 212 326 213 327 214 328