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
CexmcProductionModel.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file CexmcProductionModel.hh
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
* Filename: CexmcProductionModel.hh
30
*
31
* Description: interface to production model
32
*
33
* Version: 1.0
34
* Created: 03.11.2009 16:50:53
35
* Revision: none
36
* Compiler: gcc
37
*
38
* Author: Alexey Radkov (),
39
* Company: PNPI
40
*
41
* =============================================================================
42
*/
43
44
#ifndef CEXMC_PRODUCTION_MODEL_HH
45
#define CEXMC_PRODUCTION_MODEL_HH
46
47
#include <
G4Types.hh
>
48
#include <G4String.hh>
49
#include <
G4ios.hh
>
50
#include <
G4ParticleDefinition.hh
>
51
#include "
CexmcAngularRange.hh
"
52
#include "
CexmcProductionModelData.hh
"
53
#include "
CexmcHistoManager.hh
"
54
#include "
CexmcException.hh
"
55
#include "
CexmcCommon.hh
"
56
57
class
CexmcProductionModelMessenger
;
58
59
60
class
CexmcProductionModel
61
{
62
public
:
63
explicit
CexmcProductionModel
(
const
G4String
&
name
=
"unspecified"
,
64
G4bool
fermiMotionIsOn
=
false
);
65
66
virtual
~CexmcProductionModel
();
67
68
public
:
69
void
ApplyFermiMotion
(
G4bool
on,
G4bool
fromMessenger =
true
);
70
71
void
SetAngularRange
(
G4double
top,
G4double
bottom,
72
G4int
nmbOfDivs );
73
74
void
SetAngularRanges
(
const
CexmcAngularRangeList
& angularRanges_ );
75
76
void
AddAngularRange
(
G4double
top,
G4double
bottom,
77
G4int
nmbOfDivs );
78
79
void
SetProductionModelData
(
80
const
CexmcProductionModelData
& productionModelData_ );
81
82
void
PrintInitialData
(
void
)
const
;
83
84
const
CexmcAngularRangeList
&
GetAngularRanges
(
void
)
const
;
85
86
const
CexmcAngularRangeList
&
GetTriggeredAngularRanges
(
void
)
const
;
87
88
const
CexmcProductionModelData
&
GetProductionModelData
(
void
)
const
;
89
90
G4bool
IsFermiMotionOn
(
void
)
const
;
91
92
void
SetTriggeredAngularRanges
(
G4double
opCosThetaSCM );
93
94
const
G4String
&
GetName
(
void
)
const
;
95
96
public
:
97
G4ParticleDefinition
*
GetIncidentParticle
(
void
)
const
;
98
99
G4ParticleDefinition
*
GetNucleusParticle
(
void
)
const
;
100
101
G4ParticleDefinition
*
GetOutputParticle
(
void
)
const
;
102
103
G4ParticleDefinition
*
GetNucleusOutputParticle
(
void
)
const
;
104
105
protected
:
106
virtual
void
FermiMotionStatusChangeHook
(
void
);
107
108
private
:
109
G4bool
IsValidCandidateForAngularRange
(
G4double
top,
110
G4double
bottom,
G4int
nmbOfDivs = 1 )
const
;
111
112
G4bool
IsGoodCandidateForAngularRange
(
G4double
top,
113
G4double
bottom )
const
;
114
115
protected
:
116
G4String
name
;
117
118
G4bool
fermiMotionIsOn
;
119
120
CexmcAngularRangeList
angularRanges
;
121
122
CexmcAngularRangeList
angularRangesRef
;
123
124
CexmcAngularRangeList
triggeredAngularRanges
;
125
126
CexmcProductionModelData
productionModelData
;
127
128
protected
:
129
G4ParticleDefinition
*
incidentParticle
;
130
131
G4ParticleDefinition
*
nucleusParticle
;
132
133
G4ParticleDefinition
*
outputParticle
;
134
135
G4ParticleDefinition
*
nucleusOutputParticle
;
136
137
private
:
138
CexmcProductionModelMessenger
*
messenger
;
139
};
140
141
142
inline
void
CexmcProductionModel::ApplyFermiMotion
(
G4bool
on,
143
G4bool
fromMessenger )
144
{
145
if
( fromMessenger )
146
ThrowExceptionIfProjectIsRead
(
CexmcCmdIsNotAllowed
);
147
148
fermiMotionIsOn
= on;
149
150
FermiMotionStatusChangeHook
();
151
}
152
153
154
inline
void
CexmcProductionModel::SetAngularRanges
(
155
const
CexmcAngularRangeList
& angularRanges_ )
156
{
157
angularRangesRef
= angularRanges_;
158
angularRanges
=
angularRangesRef
;
159
#ifdef CEXMC_USE_ROOT
160
CexmcHistoManager::Instance()->SetupARHistos(
angularRanges
);
161
#endif
162
}
163
164
165
inline
void
CexmcProductionModel::SetProductionModelData
(
166
const
CexmcProductionModelData
& productionModelData_ )
167
{
168
productionModelData
= productionModelData_;
169
}
170
171
172
inline
void
CexmcProductionModel::PrintInitialData
(
void
)
const
173
{
174
const
char
* fermiMotionMsg(
"Fermi motion in the target is off"
);
175
if
(
fermiMotionIsOn
)
176
fermiMotionMsg =
"Fermi motion in the target is on"
;
177
178
G4cout
<<
CEXMC_LINE_START
<< fermiMotionMsg <<
G4endl
;
179
G4cout
<<
CEXMC_LINE_START
<<
"Angular ranges:"
<<
angularRanges
;
180
}
181
182
183
inline
const
CexmcAngularRangeList
&
184
CexmcProductionModel::GetAngularRanges
(
void
)
const
185
{
186
return
angularRanges
;
187
}
188
189
190
inline
const
CexmcAngularRangeList
&
191
CexmcProductionModel::GetTriggeredAngularRanges
(
void
)
const
192
{
193
return
triggeredAngularRanges
;
194
}
195
196
197
inline
const
CexmcProductionModelData
&
198
CexmcProductionModel::GetProductionModelData
(
void
)
const
199
{
200
return
productionModelData
;
201
}
202
203
204
inline
G4bool
CexmcProductionModel::IsFermiMotionOn
(
void
)
const
205
{
206
return
fermiMotionIsOn
;
207
}
208
209
210
inline
const
G4String
&
CexmcProductionModel::GetName
(
void
)
const
211
{
212
return
name
;
213
}
214
215
216
inline
G4ParticleDefinition
*
CexmcProductionModel::GetIncidentParticle
(
217
void
)
const
218
{
219
return
incidentParticle
;
220
}
221
222
223
inline
G4ParticleDefinition
*
CexmcProductionModel::GetNucleusParticle
(
void
)
224
const
225
{
226
return
nucleusParticle
;
227
}
228
229
230
inline
G4ParticleDefinition
*
CexmcProductionModel::GetOutputParticle
(
void
)
231
const
232
{
233
return
outputParticle
;
234
}
235
236
237
inline
G4ParticleDefinition
*
CexmcProductionModel::GetNucleusOutputParticle
(
238
void
)
const
239
{
240
return
nucleusOutputParticle
;
241
}
242
243
244
inline
G4bool
CexmcProductionModel::IsValidCandidateForAngularRange
(
245
G4double
top,
G4double
bottom,
G4int
nmbOfDivs )
const
246
{
247
return
top > bottom && top <= 1.0 && top > -1.0 && bottom < 1.0 &&
248
bottom >= -1.0 && nmbOfDivs >= 1;
249
}
250
251
252
#endif
253
geant4
tree
geant4-10.6-release
examples
advanced
ChargeExchangeMC
include
CexmcProductionModel.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:56
using
1.8.2 with
ECCE GitHub integration