00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <cmath>
00030
00031 #include "Physics/ExN04IonPhysics.hh"
00032
00033 #include "globals.hh"
00034 #include "G4ios.hh"
00035
00036
00037 ExN04IonPhysics::ExN04IonPhysics(const G4String& name)
00038 : G4VPhysicsConstructor(name)
00039 {
00040 }
00041
00042 ExN04IonPhysics::~ExN04IonPhysics()
00043 {
00044 }
00045
00046 #include "G4ParticleDefinition.hh"
00047 #include "G4ParticleTable.hh"
00048
00049
00050 #include "G4IonConstructor.hh"
00051
00052 void ExN04IonPhysics::ConstructParticle()
00053 {
00054
00055 G4IonConstructor pConstructor;
00056 pConstructor.ConstructParticle();
00057 }
00058
00059
00060 #include "G4ProcessManager.hh"
00061
00062
00063 void ExN04IonPhysics::ConstructProcess()
00064 {
00065 G4ProcessManager * pManager = 0;
00066
00067
00068 theElasticModel = new G4LElastic();
00069 theElasticProcess.RegisterMe(theElasticModel);
00070
00071
00072 pManager = G4GenericIon::GenericIon()->GetProcessManager();
00073
00074 pManager->AddDiscreteProcess(&theElasticProcess);
00075
00076 pManager->AddProcess(&fIonIonisation, ordInActive, 2, 2);
00077
00078 pManager->AddProcess(&fIonMultipleScattering);
00079 pManager->SetProcessOrdering(&fIonMultipleScattering, idxAlongStep, 1);
00080 pManager->SetProcessOrdering(&fIonMultipleScattering, idxPostStep, 1);
00081
00082
00083 pManager = G4Deuteron::Deuteron()->GetProcessManager();
00084
00085 pManager->AddDiscreteProcess(&theElasticProcess);
00086
00087 fDeuteronModel = new G4LEDeuteronInelastic();
00088 fDeuteronProcess.RegisterMe(fDeuteronModel);
00089 pManager->AddDiscreteProcess(&fDeuteronProcess);
00090
00091 pManager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2);
00092
00093 pManager->AddProcess(&fDeuteronMultipleScattering);
00094 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxAlongStep, 1);
00095 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxPostStep, 1);
00096
00097
00098 pManager = G4Triton::Triton()->GetProcessManager();
00099
00100 pManager->AddDiscreteProcess(&theElasticProcess);
00101
00102 fTritonModel = new G4LETritonInelastic();
00103 fTritonProcess.RegisterMe(fTritonModel);
00104 pManager->AddDiscreteProcess(&fTritonProcess);
00105
00106 pManager->AddProcess(&fTritonIonisation, ordInActive, 2, 2);
00107
00108 pManager->AddProcess(&fTritonMultipleScattering);
00109 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxAlongStep, 1);
00110 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxPostStep, 1);
00111
00112
00113 pManager = G4Alpha::Alpha()->GetProcessManager();
00114
00115 pManager->AddDiscreteProcess(&theElasticProcess);
00116
00117 fAlphaModel = new G4LEAlphaInelastic();
00118 fAlphaProcess.RegisterMe(fAlphaModel);
00119 pManager->AddDiscreteProcess(&fAlphaProcess);
00120
00121 pManager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2);
00122
00123 pManager->AddProcess(&fAlphaMultipleScattering);
00124 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxAlongStep, 1);
00125 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxPostStep, 1);
00126
00127
00128 pManager = G4He3::He3()->GetProcessManager();
00129
00130 pManager->AddDiscreteProcess(&theElasticProcess);
00131
00132 pManager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2);
00133
00134 pManager->AddProcess(&fHe3MultipleScattering);
00135 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxAlongStep, 1);
00136 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxPostStep, 1);
00137
00138 }
00139
00140
00141