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
PHG4HybridHomogeneousCalorimeterSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHG4HybridHomogeneousCalorimeterSubsystem.cc
1
#include "
PHG4HybridHomogeneousCalorimeterSubsystem.h
"
2
#include "
PHG4HybridHomogeneousCalorimeterDetector.h
"
3
#include "
PHG4HybridHomogeneousCalorimeterDisplayAction.h
"
4
#include "
PHG4HybridHomogeneousCalorimeterSteppingAction.h
"
5
#include "
PHG4ProjCrystalCalorimeterDetector.h
"
6
7
#include <phparameter/PHParameters.h>
8
9
#include <
g4main/PHG4DisplayAction.h
>
// for PHG4DisplayAction
10
#include <
g4main/PHG4HitContainer.h
>
11
#include <
g4main/PHG4SteppingAction.h
>
// for PHG4SteppingAction
12
#include <
g4main/PHG4Subsystem.h
>
// for PHG4Subsystem
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 <iostream>
// for operator<<, ostrin...
22
#include <sstream>
23
24
class
PHG4Detector
;
25
26
using namespace
std;
27
28
//_______________________________________________________________________
29
PHG4HybridHomogeneousCalorimeterSubsystem::PHG4HybridHomogeneousCalorimeterSubsystem
(
const
std::string&
name
,
const
int
lyr)
30
:
PHG4DetectorSubsystem
(name, lyr)
31
{
32
InitializeParameters
();
33
}
34
35
//_______________________________________________________________________
36
PHG4HybridHomogeneousCalorimeterSubsystem::~PHG4HybridHomogeneousCalorimeterSubsystem
()
37
{
38
delete
m_DisplayAction
;
39
}
40
41
//_______________________________________________________________________
42
int
PHG4HybridHomogeneousCalorimeterSubsystem::InitRunSubsystem
(
PHCompositeNode
*
topNode
)
43
{
44
// create display settings before detector
45
m_DisplayAction
=
new
PHG4HybridHomogeneousCalorimeterDisplayAction
(
Name
());
46
// create detector
47
if
(
Verbosity
() > 1)
48
{
49
cout <<
"PHG4HybridHomogeneousCalorimeterSubsystem::InitRun - use PHG4HybridHomogeneousCalorimeterDetector"
<< endl;
50
}
51
m_Detector
=
new
PHG4HybridHomogeneousCalorimeterDetector
(
this
, topNode,
GetParams
(),
Name
());
52
53
m_Detector
->
OverlapCheck
(
CheckOverlap
());
54
m_Detector
->
SuperDetector
(
SuperDetector
());
55
m_Detector
->
DetectorId
(
GetLayer
());
56
m_Detector
->
DoFullLightProp
(
_do_lightpropagation
);
57
58
if
(
GetParams
()->
get_int_param
(
"active"
))
59
{
60
PHNodeIterator
iter(topNode);
61
PHCompositeNode
* dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
62
63
// create hit output node
64
string
nodename =
"G4HIT_"
;
65
if
(
SuperDetector
() !=
"NONE"
)
66
{
67
PHNodeIterator
iter_dst(dstNode);
68
PHCompositeNode
* superSubNode =
dynamic_cast<
PHCompositeNode
*
>
(iter_dst.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
69
if
(!superSubNode)
70
{
71
superSubNode =
new
PHCompositeNode
(
SuperDetector
());
72
dstNode->
addNode
(superSubNode);
73
}
74
dstNode = superSubNode;
75
nodename +=
SuperDetector
();
76
}
77
else
78
{
79
nodename +=
Name
();
80
}
81
82
PHG4HitContainer
* crystal_hits = findNode::getClass<PHG4HitContainer>(
topNode
, nodename);
83
if
(!crystal_hits)
84
{
85
crystal_hits =
new
PHG4HitContainer
(nodename);
86
PHIODataNode<PHObject>
* hitNode =
new
PHIODataNode<PHObject>
(crystal_hits, nodename,
"PHObject"
);
87
dstNode->
addNode
(hitNode);
88
}
89
90
if
(
GetParams
()->
get_int_param
(
"absorberactive"
))
91
{
92
string
absnodename =
"G4HIT_ABSORBER_"
;
93
if
(
SuperDetector
() !=
"NONE"
)
94
{
95
absnodename +=
SuperDetector
();
96
}
97
else
98
{
99
absnodename +=
Name
();
100
}
101
102
PHG4HitContainer
* absorber_hits = findNode::getClass<PHG4HitContainer>(
topNode
, absnodename);
103
if
(!absorber_hits)
104
{
105
absorber_hits =
new
PHG4HitContainer
(absnodename);
106
PHIODataNode<PHObject>
* abshitNode =
new
PHIODataNode<PHObject>
(absorber_hits, absnodename,
"PHObject"
);
107
dstNode->
addNode
(abshitNode);
108
}
109
}
110
// create stepping action
111
m_SteppingAction
=
new
PHG4HybridHomogeneousCalorimeterSteppingAction
(
m_Detector
,
GetParams
());
112
}
113
return
0;
114
}
115
116
//_______________________________________________________________________
117
int
PHG4HybridHomogeneousCalorimeterSubsystem::process_event
(
PHCompositeNode
*
topNode
)
118
{
119
// pass top node to stepping action so that it gets
120
// relevant nodes needed internally
121
if
(
m_SteppingAction
)
122
{
123
m_SteppingAction
->
SetInterfacePointers
(topNode);
124
}
125
return
0;
126
}
127
128
//_______________________________________________________________________
129
PHG4Detector
*
PHG4HybridHomogeneousCalorimeterSubsystem::GetDetector
(
void
)
const
130
{
131
return
m_Detector
;
132
}
133
134
void
PHG4HybridHomogeneousCalorimeterSubsystem::SetDefaultParameters
()
135
{
136
// values in cm and degrees
137
set_default_int_param
(
"projective"
, 0);
138
set_default_int_param
(
"carbon_frame_style"
, 0);
139
set_default_double_param
(
"carbon_frame_depth"
, 1.0);
140
set_default_double_param
(
"carbon_face_lip"
, 0.1);
141
set_default_double_param
(
"reflective_foil_thickness"
, 0.0);
142
set_default_double_param
(
"tedlar_thickness"
, 0.0);
143
set_default_double_param
(
"sensor_thickness"
, 0.0);
144
set_default_double_param
(
"sensor_dimension"
, 0.0);
145
set_default_int_param
(
"sensor_count"
, 0);
146
147
set_default_double_param
(
"crystal_dx"
, 2.);
148
set_default_double_param
(
"crystal_dy"
, 2.);
149
set_default_double_param
(
"crystal_dz"
, 18.);
150
set_default_double_param
(
"dz"
, 18.);
151
set_default_double_param
(
"place_x"
, 0.);
152
set_default_double_param
(
"place_y"
, 0.);
153
set_default_double_param
(
"place_z"
, -108.);
154
set_default_double_param
(
"rMin1"
, 2.2);
155
set_default_double_param
(
"rMax1"
, 65.6);
156
set_default_double_param
(
"rMin2"
, 2.6);
157
set_default_double_param
(
"rMax2"
, 77.5);
158
set_default_double_param
(
"rot_x"
, 0.);
159
set_default_double_param
(
"rot_y"
, 180.);
160
set_default_double_param
(
"rot_z"
, 0.);
161
162
set_default_string_param
(
"material"
,
"G4_PbWO4"
);
163
set_default_string_param
(
"mappingtower"
,
""
);
164
set_default_string_param
(
"mapping4x4"
,
""
);
165
return
;
166
}
167
168
void
PHG4HybridHomogeneousCalorimeterSubsystem::SetTowerMappingFile
(
const
std::string&
filename
)
169
{
170
set_string_param
(
"mappingtower"
, filename);
171
}
172
173
void
PHG4HybridHomogeneousCalorimeterSubsystem::SetProjectiveGeometry
(
const
std::string& filename1,
const
std::string& filename2)
174
{
175
set_string_param
(
"mappingtower"
, filename1);
176
set_string_param
(
"mapping4x4"
, filename2);
177
set_int_param
(
"projective"
, 1);
178
}
fun4all_eicdetectors
blob
master
simulation
g4simulation
g4eiccalos
PHG4HybridHomogeneousCalorimeterSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:47
using
1.8.2 with
ECCE GitHub integration