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
EICG4BwdSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file EICG4BwdSubsystem.cc
1
//____________________________________________________________________________..
2
//
3
// This is the interface to the framework. You only need to define the parameters
4
// you use for your detector in the SetDefaultParameters() method here
5
// The place to do this is marked by //implement your own here//
6
// The parameters have no units, they need to be converted in the
7
// EICG4B0Detector::ConstructMe() method
8
// but the convention is as mentioned cm and deg
9
//____________________________________________________________________________..
10
//
11
#include "
EICG4BwdSubsystem.h
"
12
13
#include "
EICG4BwdDetector.h
"
14
#include "
EICG4BwdSteppingAction.h
"
15
16
#include <phparameter/PHParameters.h>
17
18
#include <
g4main/PHG4HitContainer.h
>
19
#include <
g4main/PHG4SteppingAction.h
>
20
21
#include <
phool/PHCompositeNode.h
>
22
#include <
phool/PHIODataNode.h
>
23
#include <
phool/PHNode.h
>
24
#include <
phool/PHNodeIterator.h
>
25
#include <
phool/PHObject.h
>
26
#include <
phool/getClass.h
>
27
28
using namespace
std;
29
30
//_______________________________________________________________________
31
EICG4BwdSubsystem::EICG4BwdSubsystem
(
const
std::string &
name
,
const
int
lyr)
32
:
PHG4DetectorSubsystem
(name, lyr)
33
, m_Detector(nullptr)
34
, m_SteppingAction(nullptr)
35
, mappingfile_(
""
)
36
{
37
// call base class method which will set up parameter infrastructure
38
// and call our SetDefaultParameters() method
39
InitializeParameters
();
40
}
41
//_______________________________________________________________________
42
int
EICG4BwdSubsystem::InitRunSubsystem
(
PHCompositeNode
*topNode)
43
{
44
// create detector
45
m_Detector
=
new
EICG4BwdDetector
(
this
, topNode,
GetParams
(),
Name
(),
GetLayer
());
46
m_Detector
->
SuperDetector
(
SuperDetector
());
47
m_Detector
->
OverlapCheck
(
CheckOverlap
());
48
m_Detector
->
SetTowerMappingFile
(
mappingfile_
);
49
50
if
(
GetParams
()->
get_int_param
(
"active"
))
51
{
52
PHNodeIterator
iter(topNode);
53
PHCompositeNode
*dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
54
55
string
nodename;
56
string
geonode;
57
std::cout<<
"BWD ECAL: "
<<
SuperDetector
()<<std::endl;
58
if
(
SuperDetector
() !=
"NONE"
)
59
{
60
// create super detector subnodes
61
PHNodeIterator
iter_dst(dstNode);
62
PHCompositeNode
*superSubNode =
dynamic_cast<
PHCompositeNode
*
>
(iter_dst.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
63
if
(!superSubNode)
64
{
65
superSubNode =
new
PHCompositeNode
(
SuperDetector
());
66
dstNode->
addNode
(superSubNode);
67
}
68
dstNode = superSubNode;
69
70
nodename =
"G4HIT_"
+
SuperDetector
();
71
}
72
73
else
74
{
75
nodename =
"G4HIT_"
+
Name
();
76
}
77
PHG4HitContainer
*bwd_hits = findNode::getClass<PHG4HitContainer>(topNode, nodename);
78
if
(!bwd_hits)
79
{
80
dstNode->
addNode
(
new
PHIODataNode<PHObject>
(bwd_hits =
new
PHG4HitContainer
(nodename), nodename,
"PHObject"
));
81
}
82
bwd_hits->
AddLayer
(
GetLayer
());
83
auto
*
tmp
=
new
EICG4BwdSteppingAction
(
this
,
m_Detector
,
GetParams
());
84
tmp
->HitNodeName(nodename);
85
m_SteppingAction
=
tmp
;
86
}
87
else
if
(
GetParams
()->
get_int_param
(
"blackhole"
))
88
{
89
m_SteppingAction
=
new
EICG4BwdSteppingAction
(
this
,
m_Detector
,
GetParams
());
90
}
91
if
(
m_SteppingAction
)
92
{
93
(
dynamic_cast<
EICG4BwdSteppingAction
*
>
(
m_SteppingAction
))->SaveAllHits(
m_SaveAllHitsFlag
);
94
}
95
return
0;
96
}
97
//_______________________________________________________________________
98
int
EICG4BwdSubsystem::process_event
(
PHCompositeNode
*topNode)
99
{
100
// pass top node to stepping action so that it gets
101
// relevant nodes needed internally
102
if
(
m_SteppingAction
)
103
{
104
m_SteppingAction
->
SetInterfacePointers
(topNode);
105
}
106
return
0;
107
}
108
//_______________________________________________________________________
109
void
EICG4BwdSubsystem::Print
(
const
string
&what)
const
110
{
111
if
(
m_Detector
)
112
{
113
m_Detector
->
Print
(what);
114
}
115
return
;
116
}
117
118
//_______________________________________________________________________
119
PHG4Detector
*
EICG4BwdSubsystem::GetDetector
(
void
)
const
120
{
121
return
m_Detector
;
122
}
123
124
//_______________________________________________________________________
125
void
EICG4BwdSubsystem::SetDefaultParameters
()
126
{
127
// sizes are in cm
128
// angles are in deg
129
// units should be converted to G4 units when used
130
//implement your own here//
131
set_default_double_param
(
"place_x"
, 0.);
//subdetector position
132
set_default_double_param
(
"place_y"
, 0.);
//subdetector position
133
set_default_double_param
(
"place_z"
, 0.);
//subdetector position
134
// set_default_double_param("pipe_ir", 2.8); //beam pipe inner radius (for future implementation)
135
// set_default_double_param("pipe_or", 3.05); //beam pipe outer raidus (for future implementation)
136
// set_default_double_param("pipe_hole_r", 3.5); //beam pipe cut off radius in the detector volume
137
// set_default_double_param("pipe_hole", 1.0); //beam pipe cut off rectangle in the detector volume
138
// set_default_double_param("cable_hole", 2.0); //beam pipe cut off radius in the detector volume
139
// set_default_double_param("cable_x", -17.0); //cable hole position
140
// set_default_double_param("cable_y", 0.); // position
141
// set_default_double_param("cable_z", 0.); // position
142
// set_default_double_param("pipe_x", -3.4); //beam pipe position
143
// set_default_double_param("pipe_y", 0.); //beam pipe position
144
// set_default_double_param("pipe_z", 0.); //beam pipe position
145
set_default_double_param
(
"rot_y"
, 0.);
//subdetector rotation
146
// set_default_double_param("outer_radius", 2.); //detector outer radiues
147
// set_default_double_param("d_radius", 5.); //packman cutoff size
148
set_default_double_param
(
"length"
, 20.);
//detector length
149
set_default_double_param
(
"width"
, 20.);
//detector length
150
set_default_double_param
(
"height"
, 20.);
//detector length
151
// set_default_double_param("startAngle", 0.); //start Angle for packman cutoff
152
// set_default_double_param("spanningAngle", 360.); //spanning Angle of the detector (for packman cutoff)
153
set_default_double_param
(
"detid"
, 0.);
//detector id
154
// set_default_int_param("ispipe", 0); //pipe or detector (for future implementation)
155
set_default_int_param
(
"lightyield"
, 1);
156
set_default_int_param
(
"use_g4steps"
, 0);
157
set_default_double_param
(
"tower_size"
, 2.);
158
set_default_double_param
(
"global_x"
, 0);
159
set_default_double_param
(
"global_y"
, 0);
160
set_default_double_param
(
"global_z"
, 0);
161
set_default_double_param
(
"readout_size"
, 2.);
162
set_default_double_param
(
"tmin"
, NAN);
163
set_default_double_param
(
"tmax"
, NAN);
164
set_default_string_param
(
"material"
,
"G4_PbWO4"
);
//detector material
165
}
166
167
void
EICG4BwdSubsystem::SetTowerMappingFile
(
const
std::string&
filename
)
168
{
169
mappingfile_
=
filename
;
170
}
fun4all_eicdetectors
blob
master
simulation
g4simulation
g4bwd
EICG4BwdSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:46
using
1.8.2 with
ECCE GitHub integration