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
PHG4InnerHcalSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHG4InnerHcalSubsystem.cc
1
#include "
PHG4InnerHcalSubsystem.h
"
2
3
#include "
PHG4HcalDefs.h
"
4
#include "
PHG4InnerHcalDetector.h
"
5
#include "
PHG4InnerHcalDisplayAction.h
"
6
#include "
PHG4InnerHcalSteppingAction.h
"
7
8
#include <phparameter/PHParameters.h>
9
10
#include <
g4main/PHG4DisplayAction.h
>
// for PHG4DisplayAction
11
#include <
g4main/PHG4HitContainer.h
>
12
#include <
g4main/PHG4SteppingAction.h
>
// for PHG4SteppingAction
13
14
#include <
phool/PHCompositeNode.h
>
15
#include <
phool/PHIODataNode.h
>
// for PHIODataNode
16
#include <
phool/PHNode.h
>
// for PHNode
17
#include <
phool/PHNodeIterator.h
>
// for PHNodeIterator
18
#include <
phool/PHObject.h
>
// for PHObject
19
#include <
phool/getClass.h
>
20
21
#include <boost/foreach.hpp>
22
23
#include <cmath>
// for NAN
24
#include <iostream>
// for operator<<, basic_ostream
25
#include <set>
26
#include <sstream>
27
28
class
PHG4Detector
;
29
30
using namespace
std;
31
32
//_______________________________________________________________________
33
PHG4InnerHcalSubsystem::PHG4InnerHcalSubsystem
(
const
std::string &
name
,
const
int
lyr)
34
:
PHG4DetectorSubsystem
(name, lyr)
35
, m_Detector(nullptr)
36
, m_SteppingAction(nullptr)
37
, m_DisplayAction(nullptr)
38
{
39
InitializeParameters
();
40
}
41
42
//_______________________________________________________________________
43
PHG4InnerHcalSubsystem::~PHG4InnerHcalSubsystem
()
44
{
45
delete
m_DisplayAction
;
46
}
47
48
//_______________________________________________________________________
49
int
PHG4InnerHcalSubsystem::InitRunSubsystem
(
PHCompositeNode
*
topNode
)
50
{
51
PHNodeIterator
iter(topNode);
52
PHCompositeNode
*dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
53
54
// create display settings before detector
55
m_DisplayAction
=
new
PHG4InnerHcalDisplayAction
(
Name
());
56
57
// create detector
58
m_Detector
=
new
PHG4InnerHcalDetector
(
this
, topNode,
GetParams
(),
Name
());
59
m_Detector
->
SuperDetector
(
SuperDetector
());
60
m_Detector
->
OverlapCheck
(
CheckOverlap
());
61
set<string> nodes;
62
if
(
GetParams
()->
get_int_param
(
"active"
))
63
{
64
PHNodeIterator
dstIter(dstNode);
65
PHCompositeNode
*DetNode =
dynamic_cast<
PHCompositeNode
*
>
(dstIter.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
66
if
(!DetNode)
67
{
68
DetNode =
new
PHCompositeNode
(
SuperDetector
());
69
dstNode->
addNode
(DetNode);
70
}
71
72
ostringstream nodename;
73
if
(
SuperDetector
() !=
"NONE"
)
74
{
75
nodename <<
"G4HIT_"
<<
SuperDetector
();
76
}
77
else
78
{
79
nodename <<
"G4HIT_"
<<
Name
();
80
}
81
nodes.insert(nodename.str());
82
if
(
GetParams
()->
get_int_param
(
"absorberactive"
))
83
{
84
nodename.str(
""
);
85
if
(
SuperDetector
() !=
"NONE"
)
86
{
87
nodename <<
"G4HIT_ABSORBER_"
<<
SuperDetector
();
88
}
89
else
90
{
91
nodename <<
"G4HIT_ABSORBER_"
<<
Name
();
92
}
93
nodes.insert(nodename.str());
94
}
95
BOOST_FOREACH (
string
node, nodes)
96
{
97
PHG4HitContainer
*g4_hits = findNode::getClass<PHG4HitContainer>(
topNode
, node.c_str());
98
if
(!g4_hits)
99
{
100
g4_hits =
new
PHG4HitContainer
(node);
101
DetNode->
addNode
(
new
PHIODataNode<PHObject>
(g4_hits, node.c_str(),
"PHObject"
));
102
}
103
}
104
105
// create stepping action
106
m_SteppingAction
=
new
PHG4InnerHcalSteppingAction
(
m_Detector
,
GetParams
());
107
}
108
else
109
{
110
// if this is a black hole it does not have to be active
111
if
(
GetParams
()->
get_int_param
(
"blackhole"
))
112
{
113
m_SteppingAction
=
new
PHG4InnerHcalSteppingAction
(
m_Detector
,
GetParams
());
114
}
115
}
116
return
0;
117
}
118
119
//_______________________________________________________________________
120
int
PHG4InnerHcalSubsystem::process_event
(
PHCompositeNode
*
topNode
)
121
{
122
// pass top node to stepping action so that it gets
123
// relevant nodes needed internally
124
if
(
m_SteppingAction
)
125
{
126
m_SteppingAction
->
SetInterfacePointers
(topNode);
127
}
128
return
0;
129
}
130
131
void
PHG4InnerHcalSubsystem::Print
(
const
string
&what)
const
132
{
133
cout <<
Name
() <<
" Parameters: "
<< endl;
134
GetParams
()->
Print
();
135
if
(
m_Detector
)
136
{
137
m_Detector
->
Print
(what);
138
}
139
if
(
m_SteppingAction
)
140
{
141
m_SteppingAction
->
Print
(what);
142
}
143
144
return
;
145
}
146
147
//_______________________________________________________________________
148
PHG4Detector
*
PHG4InnerHcalSubsystem::GetDetector
(
void
)
const
149
{
150
return
m_Detector
;
151
}
152
153
void
PHG4InnerHcalSubsystem::SetDefaultParameters
()
154
{
155
set_default_double_param
(
PHG4HcalDefs::innerrad
, 117.27);
156
set_default_double_param
(
"light_balance_inner_corr"
, NAN);
157
set_default_double_param
(
"light_balance_inner_radius"
, NAN);
158
set_default_double_param
(
"light_balance_outer_corr"
, NAN);
159
set_default_double_param
(
"light_balance_outer_radius"
, NAN);
160
set_default_double_param
(
PHG4HcalDefs::outerrad
, 134.42);
161
set_default_double_param
(
"place_x"
, 0.);
162
set_default_double_param
(
"place_y"
, 0.);
163
set_default_double_param
(
"place_z"
, 0.);
164
set_default_double_param
(
"rot_x"
, 0.);
165
set_default_double_param
(
"rot_y"
, 0.);
166
set_default_double_param
(
"rot_z"
, 0.);
167
set_default_double_param
(
"scinti_eta_coverage"
, 1.1);
168
set_default_double_param
(
"scinti_eta_coverage_pos"
, 1.1);
169
set_default_double_param
(
"scinti_eta_coverage_neg"
, 1.1);
170
set_default_double_param
(
"scinti_gap_neighbor"
, 0.1);
171
set_default_double_param
(
"scinti_inner_gap"
, 0.85);
172
set_default_double_param
(
"scinti_outer_gap"
, 1.22 * (5.0 / 4.0));
173
// some math issue in the code subtracts 0.4mm so the scintillator
174
// does not end at 133.09 as per drawing but at 133.05
175
// adding 0.4mm compensates for this (so 133.13 gives the desired 133.09
176
set_default_double_param
(
"scinti_outer_radius"
, 133.13);
177
set_default_double_param
(
"scinti_tile_thickness"
, 0.7);
178
set_default_double_param
(
"size_z"
, 175.94 * 2);
179
set_default_double_param
(
"steplimits"
, NAN);
180
set_default_double_param
(
"tilt_angle"
, 36.15);
// engineering drawing
181
// corresponds very closely to 4 crossinge (35.5497 deg)
182
183
set_default_int_param
(
"light_scint_model"
, 1);
184
// if ncross is set (and tilt_angle is NAN) tilt_angle is calculated
185
// from number of crossings
186
set_default_int_param
(
"ncross"
, 0);
187
set_default_int_param
(
PHG4HcalDefs::n_towers
, 64);
188
set_default_int_param
(
PHG4HcalDefs::scipertwr
, 4);
189
set_default_int_param
(
PHG4HcalDefs::n_scinti_tiles
, 12);
190
set_default_int_param
(
PHG4HcalDefs::n_scinti_tiles_pos
, 12);
191
set_default_int_param
(
PHG4HcalDefs::n_scinti_tiles_neg
, 12);
192
193
set_default_string_param
(
"material"
,
"G4_Al"
);
194
}
195
196
void
PHG4InnerHcalSubsystem::SetLightCorrection
(
const
double
inner_radius
,
const
double
inner_corr,
const
double
outer_radius
,
const
double
outer_corr)
197
{
198
set_double_param
(
"light_balance_inner_corr"
, inner_corr);
199
set_double_param
(
"light_balance_inner_radius"
, inner_radius);
200
set_double_param
(
"light_balance_outer_corr"
, outer_corr);
201
set_double_param
(
"light_balance_outer_radius"
, outer_radius);
202
return
;
203
}
coresoftware
blob
master
simulation
g4simulation
g4detectors
PHG4InnerHcalSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:41
using
1.8.2 with
ECCE GitHub integration