ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4IonINCLXXPhysics.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4IonINCLXXPhysics.cc
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
//
27
//---------------------------------------------------------------------------
28
//
29
// ClassName: G4IonINCLXXPhysics
30
//
31
// Author: D. Mancusi
32
//
33
// Modified:
34
//
35
//----------------------------------------------------------------------------
36
//
37
38
#include "
G4IonINCLXXPhysics.hh
"
39
40
#include "
G4SystemOfUnits.hh
"
41
#include "
G4ParticleDefinition.hh
"
42
#include "
G4ProcessManager.hh
"
43
#include "
G4Deuteron.hh
"
44
#include "
G4Triton.hh
"
45
#include "
G4He3.hh
"
46
#include "
G4Alpha.hh
"
47
#include "
G4GenericIon.hh
"
48
#include "
G4IonConstructor.hh
"
49
50
#include "
G4HadronInelasticProcess.hh
"
51
#include "
G4ComponentGGNuclNuclXsc.hh
"
52
#include "
G4CrossSectionInelastic.hh
"
53
54
#include "
G4INCLXXInterface.hh
"
55
#include "
G4PreCompoundModel.hh
"
56
#include "
G4ExcitationHandler.hh
"
57
#include "
G4FTFBuilder.hh
"
58
#include "
G4HadronicInteraction.hh
"
59
#include "
G4HadronicInteractionRegistry.hh
"
60
#include "
G4HadronicParameters.hh
"
61
#include "
G4DeexPrecoParameters.hh
"
62
#include "
G4NuclearLevelData.hh
"
63
#include "
G4BuilderType.hh
"
64
#include "
G4HadronicParameters.hh
"
65
66
// factory
67
#include "
G4PhysicsConstructorFactory.hh
"
68
//
69
G4_DECLARE_PHYSCONSTR_FACTORY
(
G4IonINCLXXPhysics
);
70
71
G4ThreadLocal
G4INCLXXInterface
*
G4IonINCLXXPhysics::theINCLXXDeuteron
=
nullptr
;
72
G4ThreadLocal
G4INCLXXInterface
*
G4IonINCLXXPhysics::theINCLXXTriton
=
nullptr
;
73
G4ThreadLocal
G4INCLXXInterface
*
G4IonINCLXXPhysics::theINCLXXHe3
=
nullptr
;
74
G4ThreadLocal
G4INCLXXInterface
*
G4IonINCLXXPhysics::theINCLXXAlpha
=
nullptr
;
75
G4ThreadLocal
G4INCLXXInterface
*
G4IonINCLXXPhysics::theINCLXXIons
=
nullptr
;
76
G4ThreadLocal
G4FTFBuilder
*
G4IonINCLXXPhysics::theFTFPBuilder
=
nullptr
;
77
78
G4IonINCLXXPhysics::G4IonINCLXXPhysics
(
G4int
ver) :
79
G4IonINCLXXPhysics
(
"IonINCLXX"
, ver)
80
{}
81
82
G4IonINCLXXPhysics::G4IonINCLXXPhysics
(
const
G4String
& nname,
G4int
ver)
83
:
G4VPhysicsConstructor
(nname), verbose(ver)
84
{
85
// INCLXX light ion maximum energy is 3.0 GeV/nucleon
86
emaxINCLXX
= 3.0 *
GeV
;
87
deltaE
= 100.*
MeV
;
88
SetPhysicsType
(
bIons
);
89
G4DeexPrecoParameters
* param =
G4NuclearLevelData::GetInstance
()->
GetParameters
();
90
param->
SetDeexChannelsType
(
fCombined
);
91
if
(
verbose
> 1) {
G4cout
<<
"### IonPhysics: "
<< nname <<
G4endl
; }
92
}
93
94
G4IonINCLXXPhysics::~G4IonINCLXXPhysics
()
95
{
96
//For MT need to explicitly set back pointers to zero:
97
//variables are static and if new threads are created we can have problems
98
//since variable is still pointing old value
99
delete
theFTFPBuilder
;
theFTFPBuilder
=
nullptr
;
100
delete
theINCLXXDeuteron
;
theINCLXXDeuteron
=
nullptr
;
101
delete
theINCLXXTriton
;
theINCLXXTriton
=
nullptr
;
102
delete
theINCLXXHe3
;
theINCLXXHe3
=
nullptr
;
103
delete
theINCLXXAlpha
;
theINCLXXAlpha
=
nullptr
;
104
delete
theINCLXXIons
;
theINCLXXIons
=
nullptr
;
105
}
106
107
void
G4IonINCLXXPhysics::ConstructProcess
()
108
{
109
theINCLXXDeuteron
=
new
G4INCLXXInterface
();
110
theINCLXXTriton
=
new
G4INCLXXInterface
();
111
theINCLXXHe3
=
new
G4INCLXXInterface
();
112
theINCLXXAlpha
=
new
G4INCLXXInterface
();
113
theINCLXXIons
=
new
G4INCLXXInterface
();
114
115
G4HadronicInteraction
*
p
=
116
G4HadronicInteractionRegistry::Instance
()->
FindModel
(
"PRECO"
);
117
G4PreCompoundModel
* thePreCompound =
static_cast<
G4PreCompoundModel
*
>
(
p
);
118
if
(!thePreCompound) { thePreCompound =
new
G4PreCompoundModel
; }
119
120
G4CrossSectionInelastic
* theNuclNuclData =
121
new
G4CrossSectionInelastic
(
new
G4ComponentGGNuclNuclXsc
() );
122
123
G4double
emax
=
G4HadronicParameters::Instance
()->
GetMaxEnergy
();
124
G4HadronicInteraction
* theFTFP =
nullptr
;
125
if
(emax >
emaxINCLXX
) {
126
theFTFPBuilder
=
new
G4FTFBuilder
(
"FTFP"
,thePreCompound);
127
theFTFP =
theFTFPBuilder
->
GetModel
();
128
theFTFP->
SetMinEnergy
(
emaxINCLXX
-
deltaE
);
129
theFTFP->
SetMaxEnergy
(emax);
130
}
131
132
AddProcess
(
"dInelastic"
,
G4Deuteron::Deuteron
(),
theINCLXXDeuteron
, theFTFP, theNuclNuclData);
133
AddProcess
(
"tInelastic"
,
G4Triton::Triton
(),
theINCLXXTriton
, theFTFP, theNuclNuclData);
134
AddProcess
(
"He3Inelastic"
,
G4He3::He3
(),
theINCLXXHe3
, theFTFP, theNuclNuclData);
135
AddProcess
(
"alphaInelastic"
,
G4Alpha::Alpha
(),
theINCLXXAlpha
, theFTFP, theNuclNuclData);
136
AddProcess
(
"ionInelastic"
,
G4GenericIon::GenericIon
(),
theINCLXXIons
, theFTFP, theNuclNuclData);
137
}
138
139
void
G4IonINCLXXPhysics::AddProcess
(
const
G4String
&
name
,
140
G4ParticleDefinition
*
p
,
141
G4HadronicInteraction
* model1,
142
G4HadronicInteraction
* model2,
143
G4VCrossSectionDataSet
* xs)
144
{
145
G4HadronInelasticProcess
* hadi =
new
G4HadronInelasticProcess
(name, p);
146
G4ProcessManager
* pManager = p->
GetProcessManager
();
147
pManager->
AddDiscreteProcess
(hadi);
148
hadi->
AddDataSet
(xs);
149
model1->
SetMaxEnergy
(
emaxINCLXX
);
150
hadi->
RegisterMe
(model1);
151
if
(model2) { hadi->
RegisterMe
(model2); }
152
153
if
(
verbose
> 1) {
154
G4cout
<<
"Register "
<< hadi->
GetProcessName
()
155
<<
" for "
<< p->
GetParticleName
()
156
<<
" INCLXX/G4DeexcitationHandler for E(MeV)= 0"
<<
" - "
<<
emaxINCLXX
;
157
if
(model2) {
158
G4cout
<<
" FTFP for E(MeV)= "
<<
emaxINCLXX
-
deltaE
<<
" - "
159
<< model2->
GetMaxEnergy
();
160
}
161
G4cout
<<
G4endl
;
162
}
163
}
164
165
void
G4IonINCLXXPhysics::ConstructParticle
()
166
{
167
// Construct light ions
168
G4IonConstructor
pConstructor;
169
pConstructor.
ConstructParticle
();
170
}
geant4
tree
geant4-10.6-release
source
physics_lists
constructors
ions
src
G4IonINCLXXPhysics.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:27
using
1.8.2 with
ECCE GitHub integration