Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
exrdmPhysListHadron Class Reference

#include <exrdmPhysListHadron.hh>

Inheritance diagram for exrdmPhysListHadron:
G4VPhysicsConstructor

Public Member Functions

 exrdmPhysListHadron (const G4String &name="hadron")
 
virtual ~exrdmPhysListHadron ()
 
virtual void ConstructParticle ()
 
virtual void ConstructProcess ()
 
- Public Member Functions inherited from G4VPhysicsConstructor
 G4VPhysicsConstructor (const G4String &="")
 
 G4VPhysicsConstructor (const G4String &name, G4int physics_type)
 
virtual ~G4VPhysicsConstructor ()
 
void SetPhysicsName (const G4String &="")
 
const G4StringGetPhysicsName () const
 
void SetPhysicsType (G4int)
 
G4int GetPhysicsType () const
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4int GetInstanceID () const
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPhysicsConstructor
static const G4VPCManagerGetSubInstanceManager ()
 
- Protected Member Functions inherited from G4VPhysicsConstructor
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
 
- Protected Attributes inherited from G4VPhysicsConstructor
G4int verboseLevel
 
G4String namePhysics
 
G4int typePhysics
 
G4ParticleTabletheParticleTable
 
G4int g4vpcInstanceID
 
- Static Protected Attributes inherited from G4VPhysicsConstructor
static G4RUN_DLL G4VPCManager subInstanceManager
 

Detailed Description

Definition at line 51 of file exrdmPhysListHadron.hh.

Constructor & Destructor Documentation

exrdmPhysListHadron::exrdmPhysListHadron ( const G4String name = "hadron")

Definition at line 80 of file exrdmPhysListHadron.cc.

81  : G4VPhysicsConstructor(name),
82  fTheNeutronElasticProcess(0), fTheFissionProcess(0),
83  fTheCaptureProcess(0),fTheDeuteronInelasticProcess(0),
84  fTheTritonInelasticProcess(0), fTheAlphaInelasticProcess(0),
85  fTheIonInelasticProcess(0)
86 {}
G4VPhysicsConstructor(const G4String &="")
exrdmPhysListHadron::~exrdmPhysListHadron ( )
virtual

Definition at line 88 of file exrdmPhysListHadron.cc.

89 {}

Member Function Documentation

virtual void exrdmPhysListHadron::ConstructParticle ( void  )
inlinevirtual

Implements G4VPhysicsConstructor.

Definition at line 59 of file exrdmPhysListHadron.hh.

59 {};
void exrdmPhysListHadron::ConstructProcess ( void  )
virtual

Implements G4VPhysicsConstructor.

Definition at line 92 of file exrdmPhysListHadron.cc.

References G4HadronicProcess::AddDataSet(), G4ProcessManager::AddDiscreteProcess(), G4Alpha::Alpha(), aParticleIterator, G4Deuteron::Deuteron(), G4GenericIon::GenericIon(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4ParticleDefinition::GetProcessManager(), python.hepunit::GeV, G4VProcess::IsApplicable(), G4ParticleDefinition::IsShortLived(), python.hepunit::MeV, G4Neutron::Neutron(), G4Proton::Proton(), G4HadronicProcess::RegisterMe(), G4VIntraNuclearTransportModel::SetDeExcitation(), G4ExcitationHandler::SetEvaporation(), G4ExcitationHandler::SetFermiModel(), G4VPartonStringModel::SetFragmentationModel(), G4TheoFSGenerator::SetHighEnergyGenerator(), G4ExcitationHandler::SetMaxAandZForFermiBreakUp(), G4HadronicInteraction::SetMaxEnergy(), G4ExcitationHandler::SetMinEForMultiFrag(), G4HadronicInteraction::SetMinEnergy(), G4ExcitationHandler::SetMultiFragmentation(), G4TheoFSGenerator::SetTransport(), python.hepunit::TeV, and G4Triton::Triton().

93 {
94 
95  G4ProcessManager * pManager = 0;
96 
97  // this will be the model class for high energies
98  G4TheoFSGenerator * theTheoModel = new G4TheoFSGenerator;
99  // all models for treatment of thermal nucleus
100  G4Evaporation * theEvaporation = new G4Evaporation;
101  G4FermiBreakUp * theFermiBreakUp = new G4FermiBreakUp;
102  G4StatMF * theMF = new G4StatMF;
103  // Evaporation logic
104  G4ExcitationHandler * theHandler = new G4ExcitationHandler;
105  theHandler->SetEvaporation(theEvaporation);
106  theHandler->SetFermiModel(theFermiBreakUp);
107  theHandler->SetMultiFragmentation(theMF);
108  theHandler->SetMaxAandZForFermiBreakUp(12, 6);
109  theHandler->SetMinEForMultiFrag(5*MeV);
110  // Pre equilibrium stage
111  G4PreCompoundModel * thePreEquilib = new G4PreCompoundModel(theHandler);
112 
113  // a no-cascade generator-precompound interaface
114  G4GeneratorPrecompoundInterface * theCascade =
116  theCascade->SetDeExcitation(thePreEquilib);
117 
118  // here come the high energy parts
119  // the string model; still not quite according to design
120  // - Explicite use of the forseen interfaces
121  G4VPartonStringModel * theStringModel;
122  theStringModel = new G4QGSModel<G4QGSParticipants>;
123  theTheoModel->SetTransport(theCascade);
124  theTheoModel->SetHighEnergyGenerator(theStringModel);
125  theTheoModel->SetMinEnergy(10*GeV); // 15 GeV may be the right limit
126  theTheoModel->SetMaxEnergy(100*TeV);
127 
128  G4VLongitudinalStringDecay * theFragmentation = new G4QGSMFragmentation;
129  G4ExcitedStringDecay * theStringDecay =
130  new G4ExcitedStringDecay(theFragmentation);
131  theStringModel->SetFragmentationModel(theStringDecay);
132 
133  // Elastic Process
134 
135  fTheElasticProcess.RegisterMe(new G4HadronElastic());
136 
137  // ---------------------------------------------------------------------------
138  // Hadron elastic process
139  // for all particles except neutrons
140 
141  aParticleIterator->reset();
142  while( (*aParticleIterator)() ) {
143  G4ParticleDefinition* particle = aParticleIterator->value();
144  G4String particleName = particle->GetParticleName();
145  if (particleName != "neutron") {
146  pManager = particle->GetProcessManager();
147  if (particle->GetPDGMass() > 110.*MeV &&
148  fTheElasticProcess.IsApplicable(*particle) &&
149  !particle->IsShortLived()) {
150  pManager->AddDiscreteProcess(&fTheElasticProcess);
151  //
152  // G4cout << "### Elastic model are registered for "
153  // << particle->GetParticleName()
154  // << G4endl;
155  }
156  }
157  }
158  // Proton
159  pManager = G4Proton::Proton()->GetProcessManager();
160  // add inelastic process
161  // Binary Cascade
162  G4BinaryCascade * theBC = new G4BinaryCascade;
163  theBC->SetMaxEnergy(10.5*GeV);
164  fTheProtonInelastic.RegisterMe(theBC);
165  // Higher energy
166  fTheProtonInelastic.RegisterMe(theTheoModel);
167  // now the cross-sections.
168  G4ProtonInelasticCrossSection * theProtonData =
170  fTheProtonInelastic.AddDataSet(theProtonData);
171  pManager->AddDiscreteProcess(&fTheProtonInelastic);
172  //
173  //
174  // Neutron
175  pManager = G4Neutron::Neutron()->GetProcessManager();
176  // add process
177  // elastic scattering
178  fTheNeutronElasticProcess =
180  G4HadronElastic* theElasticModel1 = new G4HadronElastic;
181  G4NeutronHPElastic * theElasticNeutron = new G4NeutronHPElastic;
182  fTheNeutronElasticProcess->RegisterMe(theElasticModel1);
183  theElasticModel1->SetMinEnergy(19.*MeV);
184  fTheNeutronElasticProcess->RegisterMe(theElasticNeutron);
185  theElasticNeutron->SetMaxEnergy(20.*MeV);
186 
187  G4NeutronHPElasticData * theNeutronData = new G4NeutronHPElasticData;
188  fTheNeutronElasticProcess->AddDataSet(theNeutronData);
189  pManager->AddDiscreteProcess(fTheNeutronElasticProcess);
190  // inelastic
191  G4NeutronHPInelastic * theHPNeutronInelasticModel =
193  theHPNeutronInelasticModel->SetMaxEnergy(20.*MeV);
194  fTheNeutronInelastic.RegisterMe(theHPNeutronInelasticModel);
195  G4NeutronHPInelasticData * theNeutronData1 = new G4NeutronHPInelasticData;
196  fTheNeutronInelastic.AddDataSet(theNeutronData1);
197  // binary
198  G4BinaryCascade * neutronBC = new G4BinaryCascade;
199  neutronBC->SetMinEnergy(19.*MeV);
200  neutronBC->SetMaxEnergy(10.5*GeV);
201  fTheNeutronInelastic.RegisterMe(neutronBC);
202  // higher energy
203  fTheNeutronInelastic.RegisterMe(theTheoModel);
204  // now the cross-sections.
205  G4NeutronInelasticCrossSection * theNeutronData2 =
207  fTheNeutronInelastic.AddDataSet(theNeutronData2);
208  pManager->AddDiscreteProcess(&fTheNeutronInelastic);
209 
210  // fission
211  fTheFissionProcess = new G4HadronFissionProcess;
212  G4LFission* theFissionModel = new G4LFission;
213  fTheFissionProcess->RegisterMe(theFissionModel);
214  pManager->AddDiscreteProcess(fTheFissionProcess);
215 
216  //capture
217  fTheCaptureProcess = new G4HadronCaptureProcess;
218  G4NeutronRadCapture* theCaptureModel = new G4NeutronRadCapture;
219  theCaptureModel->SetMinEnergy(19.*MeV);
220  fTheCaptureProcess->RegisterMe(theCaptureModel);
221  fTheCaptureProcess->AddDataSet(new G4NeutronCaptureXS);
222 
223  G4NeutronHPCapture * theHPNeutronCaptureModel = new G4NeutronHPCapture;
224  fTheCaptureProcess->RegisterMe(theHPNeutronCaptureModel);
225  G4NeutronHPCaptureData * theNeutronData3 = new G4NeutronHPCaptureData;
226  fTheCaptureProcess->AddDataSet(theNeutronData3);
227  pManager->AddDiscreteProcess(fTheCaptureProcess);
228 
229  // now light ions
230  // light Ion BC
232  theIonBC->SetMinEnergy(1*MeV);
233  theIonBC->SetMaxEnergy(20*GeV);
234  G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection;
236 
237  // deuteron
238  pManager = G4Deuteron::Deuteron()->GetProcessManager();
239  fTheDeuteronInelasticProcess =
240  new G4DeuteronInelasticProcess("inelastic");
241  fTheDeuteronInelasticProcess->AddDataSet(TripathiCrossSection);
242  fTheDeuteronInelasticProcess->AddDataSet(aShen);
243  // fTheDeuteronInelasticProcess->RegisterMe(theDeuteronInelasticModel);
244  fTheDeuteronInelasticProcess->RegisterMe(theIonBC);
245  fTheDeuteronInelasticProcess->RegisterMe(theTheoModel);
246  pManager->AddDiscreteProcess(fTheDeuteronInelasticProcess);
247  // triton
248  pManager = G4Triton::Triton()->GetProcessManager();
249  fTheTritonInelasticProcess =
250  new G4TritonInelasticProcess("inelastic");
251  fTheTritonInelasticProcess->AddDataSet(TripathiCrossSection);
252  fTheTritonInelasticProcess->AddDataSet(aShen);
253  // fTheTritonInelasticProcess->RegisterMe(theTritonInelasticModel);
254  fTheTritonInelasticProcess->RegisterMe(theIonBC);
255  fTheTritonInelasticProcess->RegisterMe(theTheoModel);
256  pManager->AddDiscreteProcess(fTheTritonInelasticProcess);
257  // alpha
258  pManager = G4Alpha::Alpha()->GetProcessManager();
259  fTheAlphaInelasticProcess =
260  new G4AlphaInelasticProcess("inelastic");
261  fTheAlphaInelasticProcess->AddDataSet(TripathiCrossSection);
262  fTheAlphaInelasticProcess->AddDataSet(aShen);
263  // fTheAlphaInelasticProcess->RegisterMe(theAlphaInelasticModel);
264  fTheAlphaInelasticProcess->RegisterMe(theIonBC);
265  fTheAlphaInelasticProcess->RegisterMe(theTheoModel);
266  pManager->AddDiscreteProcess(fTheAlphaInelasticProcess);
267 
268  // GenericIon
270  // need to add the elastic explicitly
271  pManager->AddDiscreteProcess(&fTheElasticProcess);
272  fTheIonInelasticProcess =
273  new G4IonInelasticProcess();
274  fTheIonInelasticProcess->AddDataSet(TripathiCrossSection);
275  fTheIonInelasticProcess->AddDataSet(aShen);
276  // G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
277  // theGenIonBC->SetMinEnergy(0*MeV);
278  //theGenIonBC->SetMaxEnergy(20*GeV);
279  fTheIonInelasticProcess->RegisterMe(theIonBC);
280  fTheIonInelasticProcess->RegisterMe(theTheoModel);
281  pManager->AddDiscreteProcess(fTheIonInelasticProcess);
282 }
void SetFragmentationModel(G4VStringFragmentation *aModel)
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
void SetMinEForMultiFrag(G4double anE)
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
void RegisterMe(G4HadronicInteraction *a)
void SetMinEnergy(G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
#define aParticleIterator
void SetFermiModel(G4VFermiBreakUp *ptr)
static G4Triton * Triton()
Definition: G4Triton.cc:95
static G4Proton * Proton()
Definition: G4Proton.cc:93
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:93
G4double GetPDGMass() const
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
void SetEvaporation(G4VEvaporation *ptr)
void SetMaxEnergy(const G4double anEnergy)
void SetDeExcitation(G4VPreCompoundModel *ptr)
void SetTransport(G4VIntraNuclearTransportModel *const value)
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
virtual G4bool IsApplicable(const G4ParticleDefinition &)
Definition: G4VProcess.hh:205

The documentation for this class was generated from the following files: