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
00049 void DsPhysConsIon::ConstructParticle()
00050 {
00051 }
00052
00053 void DsPhysConsIon::ConstructProcess()
00054 {
00055 G4ProcessManager* pmanager = 0;
00056
00057 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess();
00058 G4LElastic* theElasticModel = new G4LElastic();
00059 theElasticProcess->RegisterMe(theElasticModel);
00060
00061
00062 pmanager = G4GenericIon::GenericIon()->GetProcessManager();
00063
00064 pmanager->AddDiscreteProcess(theElasticProcess);
00065
00066
00067 G4BinaryLightIonReaction* theIonCascade;
00068 G4BinaryLightIonReaction* theGenIonCascade;
00069
00070
00071
00072 theIonCascade= new G4BinaryLightIonReaction;
00073
00074 theIonCascade->SetMinEnergy(m_minEnergyBinaryCascadeLN);
00075
00076 theIonCascade->SetMaxEnergy(m_maxEnergyBinaryCascadeLN);
00077
00078
00079
00080 theGenIonCascade = new G4BinaryLightIonReaction;
00081
00082 theGenIonCascade->SetMinEnergy(m_minEnergyBinaryCascadeGenHe3);
00083
00084 theGenIonCascade->SetMaxEnergy(m_maxEnergyBinaryCascadeGenHe3);
00085
00086
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
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
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
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