/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #include "DsPhysConsIon.h" 00002 00003 00004 #include "G4ProcessManager.hh" 00005 00006 00008 00009 #include "G4HadronElasticProcess.hh" 00010 #include "G4LElastic.hh" 00011 00012 #include "G4DeuteronInelasticProcess.hh" 00013 #include "G4LEDeuteronInelastic.hh" 00014 00015 #include "G4TritonInelasticProcess.hh" 00016 #include "G4LETritonInelastic.hh" 00017 00018 #include "G4AlphaInelasticProcess.hh" 00019 #include "G4LEAlphaInelastic.hh" 00020 00021 #include "G4BinaryLightIonReaction.hh" 00022 #include "G4TripathiCrossSection.hh" 00023 #include "G4IonsShenCrossSection.hh" 00024 00025 00026 DsPhysConsIon::DsPhysConsIon(const std::string& type, 00027 const std::string& name, 00028 const IInterface* parent) 00029 : GiGaPhysConstructorBase(type,name,parent) 00030 { 00031 declareProperty("MinEnergyBinaryCascadeLN",m_minEnergyBinaryCascadeLN=80*MeV, 00032 "Minimum energy for binary cascade of light nuclei"); 00033 declareProperty("MaxEnergyBinaryCascadeLN",m_maxEnergyBinaryCascadeLN=40*GeV, 00034 "Maximum energy for binary cascade of light nuclei"); 00035 declareProperty("MinEnergyBinaryCascadeGenHe3",m_minEnergyBinaryCascadeGenHe3=0*MeV, 00036 "Minimum energy for binary cascade of generic ion and He3"); 00037 declareProperty("MaxEnergyBinaryCascadeGenHe3",m_maxEnergyBinaryCascadeGenHe3=30*GeV, 00038 "Maximum energy for binary cascade of generic ion and He3"); 00039 declareProperty("MaxEnergyInelastic",m_maxEnergyInelastic=100*MeV, 00040 "Maximum energy for inelastic processes"); 00041 00042 } 00043 00044 DsPhysConsIon::~DsPhysConsIon() 00045 { 00046 } 00047 00048 // Interface methods 00049 void DsPhysConsIon::ConstructParticle() 00050 { 00051 } 00052 00053 void DsPhysConsIon::ConstructProcess() 00054 { 00055 G4ProcessManager* pmanager = 0; 00056 // Elastic Process 00057 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess(); 00058 G4LElastic* theElasticModel = new G4LElastic(); 00059 theElasticProcess->RegisterMe(theElasticModel); 00060 00061 // Generic Ion 00062 pmanager = G4GenericIon::GenericIon()->GetProcessManager(); 00063 // add process 00064 pmanager->AddDiscreteProcess(theElasticProcess); 00065 00066 // preparing inelastic reactions for light nuclei 00067 G4BinaryLightIonReaction* theIonCascade; 00068 G4BinaryLightIonReaction* theGenIonCascade; 00069 00070 // binary cascade for light nuclei 00071 // NOTE: Shen XS only up to 10 GeV/n; 00072 theIonCascade= new G4BinaryLightIonReaction; 00073 //theIonCascade->SetMinEnergy(80*MeV); 00074 theIonCascade->SetMinEnergy(m_minEnergyBinaryCascadeLN); 00075 //theIonCascade->SetMaxEnergy(40*GeV); 00076 theIonCascade->SetMaxEnergy(m_maxEnergyBinaryCascadeLN); 00077 00078 // Generic Ion and He3 00079 // NOTE: Shen XS only up to 10 GeV/n; 00080 theGenIonCascade = new G4BinaryLightIonReaction; 00081 //theGenIonCascade->SetMinEnergy(0*MeV); 00082 theGenIonCascade->SetMinEnergy(m_minEnergyBinaryCascadeGenHe3); 00083 //theGenIonCascade->SetMaxEnergy(30*GeV); 00084 theGenIonCascade->SetMaxEnergy(m_maxEnergyBinaryCascadeGenHe3); 00085 00086 // Cross sections 00087 G4TripathiCrossSection* theTripathiCrossSection; 00088 G4IonsShenCrossSection* theShenCrossSection; 00089 theTripathiCrossSection = new G4TripathiCrossSection; 00090 theShenCrossSection = new G4IonsShenCrossSection; 00091 00092 00093 theParticleIterator->reset(); 00094 while( (*theParticleIterator)() ) { 00095 G4ParticleDefinition* particle = theParticleIterator->value(); 00096 G4ProcessManager* pmanager = particle->GetProcessManager(); 00097 G4String particleName = particle->GetParticleName(); 00098 00099 if(particleName == "deuteron") { 00100 pmanager->AddDiscreteProcess(theElasticProcess); 00101 00102 G4DeuteronInelasticProcess* theDeuteronInelasticProcess; 00103 theDeuteronInelasticProcess = new G4DeuteronInelasticProcess; 00104 00105 G4LEDeuteronInelastic* theLEDeuteronInelasticModel; 00106 theLEDeuteronInelasticModel = new G4LEDeuteronInelastic(); 00107 //theLEDeuteronInelasticModel->SetMaxEnergy(100*MeV); 00108 theLEDeuteronInelasticModel->SetMaxEnergy(m_maxEnergyInelastic); 00109 00110 theDeuteronInelasticProcess->AddDataSet(theTripathiCrossSection); 00111 theDeuteronInelasticProcess->AddDataSet(theShenCrossSection); 00112 theDeuteronInelasticProcess->RegisterMe(theLEDeuteronInelasticModel); 00113 theDeuteronInelasticProcess->RegisterMe(theIonCascade); 00114 pmanager->AddDiscreteProcess(theDeuteronInelasticProcess); 00115 } 00116 else if (particleName == "triton") { 00117 pmanager->AddDiscreteProcess(theElasticProcess); 00118 00119 G4TritonInelasticProcess* theTritonInelasticProcess; 00120 theTritonInelasticProcess = new G4TritonInelasticProcess; 00121 00122 G4LETritonInelastic* theLETritonInelasticModel; 00123 theLETritonInelasticModel = new G4LETritonInelastic(); 00124 //theLETritonInelasticModel->SetMaxEnergy(100*MeV); 00125 theLETritonInelasticModel->SetMaxEnergy(m_maxEnergyInelastic); 00126 00127 theTritonInelasticProcess->AddDataSet(theTripathiCrossSection); 00128 theTritonInelasticProcess->AddDataSet(theShenCrossSection); 00129 theTritonInelasticProcess->RegisterMe(theLETritonInelasticModel); 00130 theTritonInelasticProcess->RegisterMe(theIonCascade); 00131 pmanager->AddDiscreteProcess(theTritonInelasticProcess); 00132 } 00133 else if (particleName == "alpha") { 00134 pmanager->AddDiscreteProcess(theElasticProcess); 00135 00136 G4AlphaInelasticProcess* theAlphaInelasticProcess; 00137 theAlphaInelasticProcess = new G4AlphaInelasticProcess; 00138 00139 G4LEAlphaInelastic* theLEAlphaInelasticModel; 00140 theLEAlphaInelasticModel = new G4LEAlphaInelastic(); 00141 //theLEAlphaInelasticModel->SetMaxEnergy(100*MeV); 00142 theLEAlphaInelasticModel->SetMaxEnergy(m_maxEnergyInelastic); 00143 00144 theAlphaInelasticProcess->AddDataSet(theTripathiCrossSection); 00145 theAlphaInelasticProcess->AddDataSet(theShenCrossSection); 00146 theAlphaInelasticProcess->RegisterMe(theLEAlphaInelasticModel); 00147 theAlphaInelasticProcess->RegisterMe(theIonCascade); 00148 pmanager->AddDiscreteProcess(theAlphaInelasticProcess); 00149 } 00150 else if (particleName == "He3") { 00151 pmanager->AddDiscreteProcess(theElasticProcess); 00152 00153 G4HadronInelasticProcess* theHe3InelasticProcess; 00154 theHe3InelasticProcess = new G4HadronInelasticProcess("He3Inelastic", G4He3::He3()); 00155 00156 theHe3InelasticProcess->AddDataSet(theTripathiCrossSection); 00157 theHe3InelasticProcess->AddDataSet(theShenCrossSection); 00158 theHe3InelasticProcess->RegisterMe(theGenIonCascade); 00159 pmanager->AddDiscreteProcess(theHe3InelasticProcess); 00160 } 00161 00162 else if (particleName == "GenericIon") { 00163 pmanager->AddDiscreteProcess(theElasticProcess); 00164 00165 G4HadronInelasticProcess* theGenericIonInelasticProcess; 00166 theGenericIonInelasticProcess = new G4HadronInelasticProcess 00167 ("IonInelastic", G4GenericIon::GenericIon()); 00168 00169 theGenericIonInelasticProcess->AddDataSet(theTripathiCrossSection); 00170 theGenericIonInelasticProcess->AddDataSet(theShenCrossSection); 00171 theGenericIonInelasticProcess->RegisterMe(theGenIonCascade); 00172 pmanager->AddDiscreteProcess(theGenericIonInelasticProcess); 00173 } 00174 } 00175 } 00176