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
PHG4OuterHcalSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHG4OuterHcalSubsystem.cc
1
#include "
PHG4OuterHcalSubsystem.h
"
2
3
#include "
PHG4OuterHcalDetector.h
"
4
#include "
PHG4OuterHcalDisplayAction.h
"
5
#include "
PHG4OuterHcalSteppingAction.h
"
6
#include "
PHG4HcalDefs.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>
// for set
26
#include <sstream>
27
28
class
PHG4Detector
;
29
30
using namespace
std;
31
32
//_______________________________________________________________________
33
PHG4OuterHcalSubsystem::PHG4OuterHcalSubsystem
(
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
PHG4OuterHcalSubsystem::~PHG4OuterHcalSubsystem
()
44
{
45
delete
m_DisplayAction
;
46
}
47
48
//_______________________________________________________________________
49
int
50
PHG4OuterHcalSubsystem::InitRunSubsystem
(
PHCompositeNode
*
topNode
)
51
{
52
PHNodeIterator
iter( topNode );
53
PHCompositeNode
*dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
54
55
// create display settings before detector
56
m_DisplayAction
=
new
PHG4OuterHcalDisplayAction
(
Name
());
57
58
// create detector
59
m_Detector
=
new
PHG4OuterHcalDetector
(
this
, topNode,
GetParams
(),
Name
());
60
m_Detector
->
SuperDetector
(
SuperDetector
());
61
m_Detector
->
OverlapCheck
(
CheckOverlap
());
62
set<string> nodes;
63
if
(
GetParams
()->
get_int_param
(
"active"
))
64
{
65
PHNodeIterator
dstIter( dstNode );
66
PHCompositeNode
*DetNode =
dynamic_cast<
PHCompositeNode
*
>
(dstIter.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
67
if
(! DetNode)
68
{
69
DetNode =
new
PHCompositeNode
(
SuperDetector
());
70
dstNode->
addNode
(DetNode);
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
// create stepping action
105
m_SteppingAction
=
new
PHG4OuterHcalSteppingAction
(
m_Detector
,
GetParams
());
106
m_SteppingAction
->
Init
();
107
}
108
else
109
{
110
if
(
GetParams
()->
get_int_param
(
"blackhole"
))
111
{
112
m_SteppingAction
=
new
PHG4OuterHcalSteppingAction
(
m_Detector
,
GetParams
());
113
m_SteppingAction
->
Init
();
114
}
115
}
116
117
return
0;
118
}
119
120
//_______________________________________________________________________
121
int
122
PHG4OuterHcalSubsystem::process_event
(
PHCompositeNode
*
topNode
)
123
{
124
// pass top node to stepping action so that it gets
125
// relevant nodes needed internally
126
if
(
m_SteppingAction
)
127
{
128
m_SteppingAction
->
SetInterfacePointers
( topNode );
129
}
130
return
0;
131
}
132
133
void
134
PHG4OuterHcalSubsystem::Print
(
const
string
&what)
const
135
{
136
cout <<
"Outer Hcal Parameters: "
<< endl;
137
GetParams
()->
Print
();
138
if
(
m_Detector
)
139
{
140
m_Detector
->
Print
(what);
141
}
142
return
;
143
}
144
145
146
//_______________________________________________________________________
147
PHG4Detector
*
PHG4OuterHcalSubsystem::GetDetector
(
void
)
const
148
{
149
return
m_Detector
;
150
}
151
152
void
153
PHG4OuterHcalSubsystem::SetLightCorrection
(
const
double
inner_radius
,
const
double
inner_corr,
const
double
outer_radius
,
const
double
outer_corr)
154
{
155
set_double_param
(
"light_balance_inner_corr"
, inner_corr);
156
set_double_param
(
"light_balance_inner_radius"
, inner_radius);
157
set_double_param
(
"light_balance_outer_corr"
, outer_corr);
158
set_double_param
(
"light_balance_outer_radius"
, outer_radius);
159
return
;
160
}
161
162
void
163
PHG4OuterHcalSubsystem::SetDefaultParameters
()
164
{
165
set_default_double_param
(
"inner_radius"
, 183.3);
166
set_default_double_param
(
"light_balance_inner_corr"
, NAN);
167
set_default_double_param
(
"light_balance_inner_radius"
, NAN);
168
set_default_double_param
(
"light_balance_outer_corr"
, NAN);
169
set_default_double_param
(
"light_balance_outer_radius"
, NAN);
170
// some math issue in the code does not subtract the magnet cutout correctly
171
// (maybe some factor of 2 in a G4 volume creation)
172
// The engineering drawing values are:
173
// set_default_double_param("magnet_cutout_radius", 195.31);
174
// set_default_double_param("magnet_cutout_scinti_radius", 195.96);
175
// seting this to these values results in the correct edges
176
// (verified by looking at the G4 hit coordinates of the inner edges)
177
set_default_double_param
(
"magnet_cutout_radius"
, 195.72);
178
set_default_double_param
(
"magnet_cutout_scinti_radius"
, 197.04);
179
set_default_double_param
(
"outer_radius"
, 264.71);
180
set_default_double_param
(
"place_x"
, 0.);
181
set_default_double_param
(
"place_y"
, 0.);
182
set_default_double_param
(
"place_z"
, 0.);
183
set_default_double_param
(
"rot_x"
, 0.);
184
set_default_double_param
(
"rot_y"
, 0.);
185
set_default_double_param
(
"rot_z"
, 0.);
186
set_default_double_param
(
"scinti_eta_coverage"
, 1.1);
187
set_default_double_param
(
"scinti_gap"
, 0.85);
188
set_default_double_param
(
"scinti_gap_neighbor"
, 0.1);
189
set_default_double_param
(
"scinti_inner_radius"
,183.89);
190
// some math issue in the code subtracts 0.1mm+ so the scintillator
191
// does not end at 263.27 as per drawing but at 263.26
192
// adding 0.125mm compensates for this (so 263.2825 gives the desired 263.27
193
set_default_double_param
(
"scinti_outer_radius"
,263.2825);
194
set_default_double_param
(
"scinti_tile_thickness"
, 0.7);
195
set_default_double_param
(
"size_z"
, 304.91 * 2);
196
set_default_double_param
(
"steplimits"
, NAN);
197
set_default_double_param
(
"tilt_angle"
, -11.23);
// engineering drawing
198
// corresponds very closely to 4 crossinge (-11.7826 deg)
199
200
set_default_int_param
(
"field_check"
, 0);
201
set_default_int_param
(
"light_scint_model"
, 1);
202
set_default_int_param
(
"magnet_cutout_first_scinti"
, 8);
// tile start at 0, drawing tile starts at 1
203
204
// if ncross is set (and tilt_angle is NAN) tilt_angle is calculated
205
// from number of crossings
206
set_default_int_param
(
"ncross"
, 0);
207
set_default_int_param
(
"n_towers"
, 64);
208
set_default_int_param
(
PHG4HcalDefs::scipertwr
, 5);
209
set_default_int_param
(
"n_scinti_tiles"
, 12);
210
211
set_default_string_param
(
"material"
,
"Steel_1006"
);
212
}
coresoftware
blob
master
simulation
g4simulation
g4detectors
PHG4OuterHcalSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:41
using
1.8.2 with
ECCE GitHub integration