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
RMC01AnalysisManagerMessenger.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file RMC01AnalysisManagerMessenger.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
//
28
//
29
//
31
// Class Name: RMC01AnalysisManagerMessenger
32
// Author: L. Desorgher
33
// Organisation: SpaceIT GmbH
34
// Contract: ESA contract 21435/08/NL/AT
35
// Customer: ESA/ESTEC
37
38
#include "
RMC01AnalysisManagerMessenger.hh
"
39
40
#include "
RMC01AnalysisManager.hh
"
41
#include "
G4UIdirectory.hh
"
42
#include "
G4UIcmdWithADouble.hh
"
43
#include "
G4UnitsTable.hh
"
44
#include "
G4SystemOfUnits.hh
"
45
46
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
47
48
RMC01AnalysisManagerMessenger::RMC01AnalysisManagerMessenger
(
49
RMC01AnalysisManager
* analysisManager)
50
:
G4UImessenger
(),
51
fAnalysisManager(analysisManager),
52
fAnalysisDir(0),
53
fSetPrecisionForConvergenceTestCmd(0),
54
fSetExpSpectrumToNormaliseAdjResCmd(0),
55
fSetPowerLawSpectrumToNormaliseAdjResCmd(0)
56
{
57
fAnalysisDir
=
new
G4UIdirectory
(
"/RMC01/analysis/"
);
58
fAnalysisDir
->
SetGuidance
(
"Analysis commands"
);
59
60
G4UIparameter
* fluence_par =
new
G4UIparameter
(
"Fluence"
,
'd'
,
true
);
61
fluence_par->
SetParameterRange
(
"Fluence > 0"
);
62
fluence_par->
SetGuidance
(
"Omnidirectional fluence for primary spectrum"
);
63
64
G4UIparameter
* fluence_unit_par =
new
G4UIparameter
(
"Fluence_unit"
,
's'
,
true
);
65
fluence_unit_par->
SetParameterCandidates
(
"1/cm2 1/m2 cm-2 m-2"
);
66
67
G4UIparameter
* alpha_par =
new
G4UIparameter
(
"alpha"
,
'd'
,
true
);
68
69
G4UIparameter
* e0_par =
new
G4UIparameter
(
"E0"
,
'd'
,
true
);
70
e0_par->
SetParameterRange
(
"E0 > 0"
);
71
72
G4UIparameter
* e1_par =
new
G4UIparameter
(
"E1"
,
'd'
,
true
);
73
e1_par->
SetParameterRange
(
"E1 > 0"
);
74
75
G4UIparameter
* e2_par =
new
G4UIparameter
(
"E2"
,
'd'
,
true
);
76
e2_par->
SetParameterRange
(
"E2 > 0"
);
77
78
G4UIparameter
* e_unit_par =
new
G4UIparameter
(
"E_unit"
,
's'
,
true
);
79
e_unit_par->
SetParameterCandidates
(
"eV keV MeV GeV TeV"
);
80
81
G4UIparameter
* part_name_par =
new
G4UIparameter
(
"particle_name"
,
's'
,
true
);
82
part_name_par->
SetParameterCandidates
(
"e- gamma proton "
);
83
84
fSetPowerLawSpectrumToNormaliseAdjResCmd
=
85
new
G4UIcommand
(
"/RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim"
,
this
);
86
fSetPowerLawSpectrumToNormaliseAdjResCmd
87
->
SetGuidance
(
"Set the primary spectrum to which adjoint simulation "
88
"results will be normalised as a power law (Ekin^-alpha)."
);
89
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(part_name_par);
90
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(fluence_par);
91
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(fluence_unit_par);
92
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(alpha_par);
93
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(e1_par);
94
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(e2_par);
95
fSetPowerLawSpectrumToNormaliseAdjResCmd
->
SetParameter
(e_unit_par);
96
fSetPowerLawSpectrumToNormaliseAdjResCmd
97
->
AvailableForStates
(
G4State_PreInit
,
G4State_Idle
);
98
99
100
fSetExpSpectrumToNormaliseAdjResCmd
=
new
G4UIcommand
(
"/RMC01/analysis/"
101
"SetExponentialSpectrumForAdjointSim"
,
this
);
102
fSetExpSpectrumToNormaliseAdjResCmd
103
->
SetGuidance
(
"Set the primary spectrum to which adjoint simulation results"
104
"will be normalised as exponential (exp(-Ekin/E0))."
);
105
fSetExpSpectrumToNormaliseAdjResCmd
106
->
SetParameter
(
new
G4UIparameter
(*part_name_par));
107
fSetExpSpectrumToNormaliseAdjResCmd
108
->
SetParameter
(
new
G4UIparameter
(*fluence_par));
109
fSetExpSpectrumToNormaliseAdjResCmd
110
->
SetParameter
(
new
G4UIparameter
(*fluence_unit_par));
111
fSetExpSpectrumToNormaliseAdjResCmd
112
->
SetParameter
(
new
G4UIparameter
(*e0_par));
113
fSetExpSpectrumToNormaliseAdjResCmd
114
->
SetParameter
(
new
G4UIparameter
(*e1_par));
115
fSetExpSpectrumToNormaliseAdjResCmd
116
->
SetParameter
(
new
G4UIparameter
(*e2_par));
117
fSetExpSpectrumToNormaliseAdjResCmd
118
->
SetParameter
(
new
G4UIparameter
(*e_unit_par));
119
fSetExpSpectrumToNormaliseAdjResCmd
120
->
AvailableForStates
(
G4State_PreInit
,
G4State_Idle
);
121
122
123
fSetPrecisionForConvergenceTestCmd
=
new
G4UIcmdWithADouble
(
"/RMC01/analysis/"
124
"SetExpectedPrecisionOfResults"
,
this
);
125
fSetPrecisionForConvergenceTestCmd
126
->
SetGuidance
(
"Set the precision in % that the computed energy deposited "
127
"in the sensitive volume should reached. If this precision is reached"
128
" before the end of the run, the run is aborted and the results are "
129
"registered."
);
130
fSetPrecisionForConvergenceTestCmd
->
SetParameterName
(
"Precision"
,
true
);
131
fSetPrecisionForConvergenceTestCmd
132
->
AvailableForStates
(
G4State_PreInit
,
G4State_Idle
);
133
}
134
135
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
136
137
RMC01AnalysisManagerMessenger::~RMC01AnalysisManagerMessenger
()
138
{
139
delete
fAnalysisDir
;
140
}
141
142
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
143
144
void
RMC01AnalysisManagerMessenger::SetNewValue
(
145
G4UIcommand
* command,
G4String
newValue)
146
{
147
if
( command ==
fSetPowerLawSpectrumToNormaliseAdjResCmd
){
148
G4double
alpha
,
e1
,
e2
,fluence;
149
G4String
f_unit,e_unit,part_name;
150
const
char
* nv = (
const
char
*)newValue;
151
std::istringstream is(nv);
152
is >> part_name>>fluence>>f_unit>>alpha>>e1>>e2>>e_unit;
153
154
G4double
factor_f_unit=1/
cm2
;
155
if
(f_unit ==
"1/m2"
|| f_unit ==
"m-2"
) factor_f_unit=1/
m2
;
156
fluence*=factor_f_unit;
157
e1*=
G4UnitDefinition::GetValueOf
(e_unit);
158
e2*=
G4UnitDefinition::GetValueOf
(e_unit);
159
fAnalysisManager
->
SetPrimaryPowerLawSpectrumForAdjointSim
(
160
part_name, fluence, alpha, e1, e2);
161
}
162
else
if
( command ==
fSetExpSpectrumToNormaliseAdjResCmd
){
163
G4double
e0,
e1
,
e2
,fluence;
164
G4String
f_unit,e_unit,part_name;
165
const
char
* nv = (
const
char
*)newValue;
166
std::istringstream is(nv);
167
is >> part_name>>fluence>>f_unit>>e0>>e1>>e2>>e_unit;
168
169
G4double
factor_f_unit=1/
cm2
;
170
if
(f_unit ==
"1/m2"
|| f_unit ==
"m-2"
) factor_f_unit=1/
m2
;
171
172
fluence*=factor_f_unit;
173
e0*=
G4UnitDefinition::GetValueOf
(e_unit);
174
e1*=
G4UnitDefinition::GetValueOf
(e_unit);
175
e2*=
G4UnitDefinition::GetValueOf
(e_unit);
176
177
fAnalysisManager
->
SetPrimaryExpSpectrumForAdjointSim
(part_name,
178
fluence, e0, e1, e2);
179
180
}
181
else
if
( command ==
fSetPrecisionForConvergenceTestCmd
){
182
fAnalysisManager
->
SetPrecision
(
183
fSetPrecisionForConvergenceTestCmd
->
GetNewDoubleValue
(newValue));
184
}
185
}
186
187
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
geant4
tree
geant4-10.6-release
examples
extended
biasing
ReverseMC01
src
RMC01AnalysisManagerMessenger.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:03
using
1.8.2 with
ECCE GitHub integration