Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-03-29 07:51:41

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file PhysicsList.cc
0027 /// \brief Implementation of the PhysicsList class
0028 
0029 // This example is provided by the Geant4-DNA collaboration
0030 // Any report or published results obtained using the Geant4-DNA software
0031 // shall cite the following Geant4-DNA collaboration publications:
0032 // Med. Phys. 45, (2018) e722-e739
0033 // Phys. Med. 31 (2015) 861-874
0034 // Med. Phys. 37 (2010) 4692-4708
0035 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
0036 // The Geant4-DNA web site is available at http://geant4-dna.org
0037 //
0038 //
0039 
0040 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0041 
0042 #include "PhysicsList.hh"
0043 
0044 #include "G4DecayPhysics.hh"
0045 #include "G4EmDNABuilder.hh"
0046 #include "G4EmDNAPhysics.hh"
0047 #include "G4EmDNAPhysicsActivator.hh"
0048 #include "G4EmDNAPhysics_option1.hh"
0049 #include "G4EmDNAPhysics_option2.hh"
0050 #include "G4EmDNAPhysics_option3.hh"
0051 #include "G4EmDNAPhysics_option4.hh"
0052 #include "G4EmDNAPhysics_option5.hh"
0053 #include "G4EmDNAPhysics_option6.hh"
0054 #include "G4EmDNAPhysics_option7.hh"
0055 #include "G4EmDNAPhysics_option8.hh"
0056 #include "G4EmLivermorePhysics.hh"
0057 #include "G4EmPenelopePhysics.hh"
0058 #include "G4EmStandardPhysics.hh"
0059 #include "G4EmStandardPhysics_option3.hh"
0060 #include "G4EmStandardPhysics_option4.hh"
0061 #include "G4GenericIon.hh"
0062 #include "G4RadioactiveDecayPhysics.hh"
0063 
0064 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0065 
0066 PhysicsList::PhysicsList() : G4VModularPhysicsList()
0067 {
0068   SetDefaultCutValue(1.0 * micrometer);
0069   SetVerboseLevel(1);
0070 
0071   fEmPhysics = "emstandard_opt4";
0072   fEmPhysicsList = new G4EmStandardPhysics_option4();
0073   fDecayPhysicsList = new G4DecayPhysics();
0074   fEmDNAActivator = new G4EmDNAPhysicsActivator();
0075 
0076   G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV);
0077   G4EmParameters* param = G4EmParameters::Instance();
0078   param->SetMinEnergy(100 * eV);
0079   param->SetMaxEnergy(1 * GeV);
0080 }
0081 
0082 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0083 
0084 PhysicsList::~PhysicsList()
0085 {
0086   delete fEmPhysicsList;
0087   delete fEmDNAActivator;
0088   delete fDecayPhysicsList;
0089   delete fRadDecayPhysicsList;
0090 }
0091 
0092 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0093 
0094 void PhysicsList::ConstructParticle()
0095 {
0096   fEmPhysicsList->ConstructParticle();
0097   fDecayPhysicsList->ConstructParticle();
0098   fEmDNAActivator->ConstructParticle();
0099 }
0100 
0101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0102 
0103 void PhysicsList::ConstructProcess()
0104 {
0105   AddTransportation();
0106   fEmPhysicsList->ConstructProcess();
0107   fDecayPhysicsList->ConstructProcess();
0108 
0109   if (nullptr != fRadDecayPhysicsList) {
0110     fRadDecayPhysicsList->ConstructProcess();
0111   }
0112 
0113   if (!fDNAPL) {
0114     fEmDNAActivator->ConstructProcess();
0115   }
0116 
0117   if (fIsTrackingCutSet) {
0118     TrackingCut();
0119   }
0120 }
0121 
0122 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0123 
0124 void PhysicsList::AddPhysics(const G4String& name)
0125 {
0126   if (name == fEmPhysics) {
0127     return;
0128   }
0129 
0130   G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name << "> is requested"
0131          << G4endl;
0132 
0133   fEmPhysics = name;
0134 
0135   if (name == "emstandard_opt0") {
0136     delete fEmPhysicsList;
0137     fEmPhysicsList = new G4EmStandardPhysics();
0138     fDNAPL = false;
0139   }
0140   else if (name == "emstandard_opt3") {
0141     delete fEmPhysicsList;
0142     fEmPhysicsList = new G4EmStandardPhysics_option3();
0143     fDNAPL = false;
0144   }
0145   else if (name == "emstandard_opt4") {
0146     delete fEmPhysicsList;
0147     fEmPhysicsList = new G4EmStandardPhysics_option4();
0148     fDNAPL = false;
0149   }
0150   else if (name == "raddecay") {
0151     if (nullptr == fRadDecayPhysicsList) fRadDecayPhysicsList = new G4RadioactiveDecayPhysics();
0152   }
0153   else if (name == "emlivermore") {
0154     delete fEmPhysicsList;
0155     fEmPhysicsList = new G4EmLivermorePhysics();
0156     fDNAPL = false;
0157   }
0158   else if (name == "empenelope") {
0159     delete fEmPhysicsList;
0160     fEmPhysicsList = new G4EmPenelopePhysics();
0161     fDNAPL = false;
0162   }
0163   else if (name == "DNA_Opt0") {
0164     delete fEmPhysicsList;
0165     fEmPhysicsList = new G4EmDNAPhysics();
0166     fDNAPL = true;
0167   }
0168   else if (name == "DNA_Opt1") {
0169     delete fEmPhysicsList;
0170     fEmPhysicsList = new G4EmDNAPhysics_option1();
0171     fDNAPL = true;
0172   }
0173   else if (name == "DNA_Opt2") {
0174     delete fEmPhysicsList;
0175     fEmPhysicsList = new G4EmDNAPhysics_option2();
0176     fDNAPL = true;
0177   }
0178   else if (name == "DNA_Opt3") {
0179     delete fEmPhysicsList;
0180     fEmPhysicsList = new G4EmDNAPhysics_option3();
0181     fDNAPL = true;
0182   }
0183   else if (name == "DNA_Opt4") {
0184     delete fEmPhysicsList;
0185     fEmPhysicsList = new G4EmDNAPhysics_option4();
0186     fDNAPL = true;
0187   }
0188   else if (name == "DNA_Opt5") {
0189     delete fEmPhysicsList;
0190     fEmPhysicsList = new G4EmDNAPhysics_option5();
0191     fDNAPL = true;
0192   }
0193   else if (name == "DNA_Opt6") {
0194     delete fEmPhysicsList;
0195     fEmPhysicsList = new G4EmDNAPhysics_option6();
0196     fDNAPL = true;
0197   }
0198   else if (name == "DNA_Opt7") {
0199     delete fEmPhysicsList;
0200     fEmPhysicsList = new G4EmDNAPhysics_option7();
0201     fDNAPL = true;
0202   }
0203   else if (name == "DNA_Opt8") {
0204     delete fEmPhysicsList;
0205     fEmPhysicsList = new G4EmDNAPhysics_option8();
0206     fDNAPL = true;
0207   }
0208   else {
0209     G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name
0210            << "> is does not exist - the command ignored" << G4endl;
0211   }
0212 }
0213 
0214 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0215 
0216 void PhysicsList::TrackingCut()
0217 {
0218   auto particle = G4GenericIon::GenericIon();  // DNA heavy ions
0219   auto particleName = particle->GetParticleName();
0220   auto capture = G4EmDNABuilder::FindOrBuildCapture(0.5 * CLHEP::MeV, particle);
0221   capture->AddRegion("World");
0222   capture->AddRegion("regionTarget");
0223   capture->SetKinEnergyLimit(0.5 * CLHEP::MeV);  // 0.5 MeV/u
0224 }
0225 
0226 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0227 
0228 void PhysicsList::SetTrackingCut(G4bool isCut)
0229 {
0230   fIsTrackingCutSet = isCut;
0231 }