Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4IonINCLXXPhysics.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27//
28//---------------------------------------------------------------------------
29//
30// ClassName: G4IonINCLXXPhysics
31//
32// Author: D. Mancusi
33//
34// Modified:
35//
36//----------------------------------------------------------------------------
37//
38
39#include "G4IonINCLXXPhysics.hh"
40
41#include "G4SystemOfUnits.hh"
46
47#include "G4INCLXXInterface.hh"
51
53#include "G4ParticleTable.hh"
54#include "G4ProcessManager.hh"
55
56// Nuclei
57#include "G4IonConstructor.hh"
58#include "G4BuilderType.hh"
59
60// factory
62//
64
65
67 G4VPhysicsConstructor("IonINCLXX"),
68 fINCLXXIons(NULL),
69 fTripathi(NULL),
70 fTripathiLight(NULL),
71 fShen(NULL),
72 fLEDModel(NULL),
73 fLETModel(NULL),
74 fLEAModel(NULL),
75 verbose(ver), wasActivated(false)
76{
77 // INCLXX light ion maximum energy is 3.0 GeV/nucleon
78 emax_d = 2 * 3.0 * GeV;
79 emax_t = 3 * 3.0 * GeV;
80 emax_he3 = 3 * 3.0 * GeV;
81 emax_alpha = 4 * 3.0 * GeV;
82 emax = 16 * 3.0 * GeV;
83 emaxLHEP = 1.*TeV;
84 emin = 0.*MeV;
86 if(verbose > 1) G4cout << "### G4IonINCLXXPhysics" << G4endl;
87}
88
90 G4int ver)
92 fINCLXXIons(NULL),
93 fTripathi(NULL),
94 fTripathiLight(NULL),
95 fShen(NULL),
96 fLEDModel(NULL),
97 fLETModel(NULL),
98 fLEAModel(NULL),
99 verbose(ver), wasActivated(false)
100{
101 // INCLXX light ion maximum energy is 3.0 GeV/nucleon
102 emax_d = 2 * 3.0 * GeV;
103 emax_t = 3 * 3.0 * GeV;
104 emax_he3 = 3 * 3.0 * GeV;
105 emax_alpha = 4 * 3.0 * GeV;
106 emax = 16 * 3.0 * GeV;
107 emaxLHEP = 1.*TeV;
108 emin = 0.*MeV;
110 if(verbose > 1) G4cout << "### G4IonINCLXXPhysics" << G4endl;
111}
112
114{
115 if(wasActivated) {
116 delete fTripathi;
117 delete fTripathiLight;
118 delete fShen;
119 delete fLEDModel;
120 delete fLETModel;
121 delete fLEAModel;
122 G4int i;
123 G4int n = p_list.size();
124 for(i=0; i<n; i++) {delete p_list[i];}
125 delete fINCLXXIons;
126 }
127}
128
130{
131 if(wasActivated) return;
132 wasActivated = true;
133
134 fINCLXXIons= new G4INCLXXInterface();
135 fShen = new G4IonsShenCrossSection;
136 fTripathi = new G4TripathiCrossSection;
137 fTripathiLight = new G4TripathiLightCrossSection;
138
139 fLEDModel = new G4LEDeuteronInelastic();
140 fLETModel = new G4LETritonInelastic();
141 fLEAModel = new G4LEAlphaInelastic();
142
143 AddProcess("dInelastic", G4Deuteron::Deuteron(), fINCLXXIons, fLEDModel, emax_d);
144 AddProcess("tInelastic",G4Triton::Triton(), fINCLXXIons, fLETModel, emax_t);
145 AddProcess("He3Inelastic",G4He3::He3(), fINCLXXIons, 0, emax_he3);
146 AddProcess("alphaInelastic", G4Alpha::Alpha(), fINCLXXIons, fLEAModel, emax_alpha);
147 AddProcess("ionInelastic",G4GenericIon::GenericIon(), fINCLXXIons, 0, emax);
148}
149
150void G4IonINCLXXPhysics::AddProcess(const G4String& name,
152 G4HadronicInteraction* hmodel,
153 G4HadronicInteraction* lmodel,
154 const G4double inclxxEnergyUpperLimit = 3.0 * GeV)
155{
157 p_list.push_back(hadi);
158 G4ProcessManager* pManager = p->GetProcessManager();
159 pManager->AddDiscreteProcess(hadi);
160 hadi->AddDataSet(fShen);
161 hadi->AddDataSet(fTripathi);
162 hadi->AddDataSet(fTripathiLight);
163 hmodel->SetMinEnergy(emin);
164 hmodel->SetMaxEnergy(inclxxEnergyUpperLimit);
165 hadi->RegisterMe(hmodel);
166 if(lmodel) {
167 lmodel->SetMinEnergy(inclxxEnergyUpperLimit - MeV);
168 lmodel->SetMaxEnergy(emaxLHEP);
169 hadi->RegisterMe(lmodel);
170 }
171 if(verbose > 1) {
172 G4cout << "Register " << hadi->GetProcessName()
173 << " for " << p->GetParticleName()
174 << " INCLXX/G4DeexcitationHandler for E(MeV)= " << emin << " - " << inclxxEnergyUpperLimit;
175 if(lmodel) {
176 G4cout << " LHEP for E(MeV)= " << inclxxEnergyUpperLimit-MeV << " - " << emaxLHEP;
177 }
178 G4cout << G4endl;
179 }
180}
181
183{
184 // Construct light ions
185 G4IonConstructor pConstructor;
186 pConstructor.ConstructParticle();
187}
@ bIons
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:89
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:94
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:92
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void RegisterMe(G4HadronicInteraction *a)
static G4He3 * He3()
Definition: G4He3.cc:94
INCL++ intra-nuclear cascade with G4ExcitationHandler for de-excitation.
static void ConstructParticle()
virtual void ConstructParticle()
virtual void ConstructProcess()
G4IonINCLXXPhysics(G4int ver=0)
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4Triton * Triton()
Definition: G4Triton.cc:95
const G4String & GetProcessName() const
Definition: G4VProcess.hh:379