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
PHG4CylinderStripSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file PHG4CylinderStripSubsystem.cc
1
#include "
PHG4CylinderStripSubsystem.h
"
2
#include "
PHG4CylinderStripDetector.h
"
3
#include "
PHG4CylinderStripSteppingAction.h
"
4
5
#include <phparameter/PHParameters.h>
6
7
#include <
g4main/PHG4DisplayAction.h
>
// for PHG4DisplayAction
8
#include <
g4main/PHG4HitContainer.h
>
9
#include <
g4main/PHG4SteppingAction.h
>
// for PHG4SteppingAction
10
#include <
g4main/PHG4Utils.h
>
11
12
#include <
phool/PHCompositeNode.h
>
13
#include <
phool/PHIODataNode.h
>
// for PHIODataNode
14
#include <
phool/PHNode.h
>
// for PHNode
15
#include <
phool/PHNodeIterator.h
>
// for PHNodeIterator
16
#include <
phool/PHObject.h
>
// for PHObject
17
#include <
phool/getClass.h
>
18
19
#include <Geant4/G4Types.hh>
// for G4double
20
21
#include <cmath>
// for NAN
22
#include <iostream>
// for operator<<, basic_ostream, endl
23
#include <sstream>
24
25
class
PHG4Detector
;
26
27
using namespace
std;
28
29
//_______________________________________________________________________
30
PHG4CylinderStripSubsystem::PHG4CylinderStripSubsystem
(
const
std::string &na,
const
int
lyr)
31
:
PHG4DetectorSubsystem
(na, lyr)
32
, m_Detector(nullptr)
33
, m_SteppingAction(nullptr)
34
{
35
InitializeParameters
();
36
}
37
38
PHG4CylinderStripSubsystem::~PHG4CylinderStripSubsystem
()
39
{
40
}
41
42
//_______________________________________________________________________
43
int
PHG4CylinderStripSubsystem::InitRunSubsystem
(
PHCompositeNode
*
topNode
)
44
{
45
// create detector
46
m_Detector
=
new
PHG4CylinderStripDetector
(
this
, topNode,
GetParams
(),
Name
(),
GetLayer
());
47
//G4double detlength = GetParams()->get_double_param("length");
48
m_Detector
->
SuperDetector
(
SuperDetector
());
49
m_Detector
->
OverlapCheck
(
CheckOverlap
());
50
if
(
GetParams
()->
get_int_param
(
"active"
))
51
{
52
PHNodeIterator
iter(topNode);
53
PHCompositeNode
*dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
54
PHCompositeNode
*runNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"RUN"
));
55
56
ostringstream nodename;
57
ostringstream geonode;
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
PHNodeIterator
iter_run(runNode);
70
superSubNode =
dynamic_cast<
PHCompositeNode
*
>
(iter_run.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
71
if
(!superSubNode)
72
{
73
superSubNode =
new
PHCompositeNode
(
SuperDetector
());
74
runNode->
addNode
(superSubNode);
75
}
76
runNode = superSubNode;
77
78
nodename <<
"G4HIT_"
<<
SuperDetector
();
79
geonode <<
"CYLINDERStripGEOM_"
<<
SuperDetector
();
80
}
81
82
else
83
{
84
nodename <<
"G4HIT_"
<<
Name
();
85
geonode <<
"CYLINDERStripGEOM_"
<<
Name
();
86
}
87
PHG4HitContainer
*cylinder_hits = findNode::getClass<PHG4HitContainer>(
topNode
, nodename.str());
88
if
(!cylinder_hits)
89
{
90
dstNode->
addNode
(
new
PHIODataNode<PHObject>
(cylinder_hits =
new
PHG4HitContainer
(nodename.str()), nodename.str(),
"PHObject"
));
91
}
92
cylinder_hits->
AddLayer
(
GetLayer
());
93
//PHG4CylinderStripGeomContainer *geo = findNode::getClass<PHG4CylinderStripGeomContainer>(topNode, geonode.str());
94
//if (!geo)
95
//{
96
// geo = new PHG4CylinderStripGeomContainer();
97
// PHIODataNode<PHObject> *newNode = new PHIODataNode<PHObject>(geo, geonode.str(), "PHObject");
98
// runNode->addNode(newNode);
99
//}
100
//PHG4CylinderStripGeom *mygeom = new PHG4CylinderStripGeomv1(GetParams()->get_double_param("radius"), GetParams()->get_double_param("place_z") - detlength / 2., GetParams()->get_double_param("place_z") + detlength / 2., GetParams()->get_double_param("thickness"));
101
//geo->AddLayerGeom(GetLayer(), mygeom);
102
m_SteppingAction
=
new
PHG4CylinderStripSteppingAction
(
m_Detector
,
GetParams
());
103
}
104
else
if
(
GetParams
()->
get_int_param
(
"blackhole"
))
105
{
106
m_SteppingAction
=
new
PHG4CylinderStripSteppingAction
(
m_Detector
,
GetParams
());
107
}
108
return
0;
109
}
110
111
//_______________________________________________________________________
112
int
PHG4CylinderStripSubsystem::process_event
(
PHCompositeNode
*
topNode
)
113
{
114
// pass top node to stepping action so that it gets
115
// relevant nodes needed internally
116
if
(
m_SteppingAction
)
117
{
118
m_SteppingAction
->
SetInterfacePointers
(topNode);
119
}
120
return
0;
121
}
122
123
void
PHG4CylinderStripSubsystem::SetDefaultParameters
()
124
{
125
set_default_double_param
(
"length"
, 100);
126
set_default_double_param
(
"place_x"
, 0.);
127
set_default_double_param
(
"place_y"
, 0.);
128
set_default_double_param
(
"place_z"
, 0.);
129
set_default_double_param
(
"radius"
, 100);
130
set_default_double_param
(
"steplimits"
, NAN);
131
set_default_double_param
(
"gap"
, 20);
132
set_default_double_param
(
"gas1thickness"
, 0.0020000);
133
set_default_double_param
(
"gas2thickness"
, 0.3000000);
134
set_default_double_param
(
"phi0"
, 0.);
135
set_default_double_param
(
"tmin"
, NAN);
136
set_default_double_param
(
"tmax"
, NAN);
137
set_default_double_param
(
"deadzone"
, 0);
138
139
set_default_int_param
(
"lengthviarapidity"
, 0);
140
set_default_int_param
(
"lightyield"
, 0);
141
set_default_int_param
(
"use_g4steps"
, 0);
142
set_default_int_param
(
"use_2Dreadout"
, 0);
143
set_default_int_param
(
"nhit"
, 1);
144
145
set_default_string_param
(
"gas"
,
"G4_Ar"
);
146
}
147
148
PHG4Detector
*
149
PHG4CylinderStripSubsystem::GetDetector
(
void
)
const
150
{
151
return
m_Detector
;
152
}
153
154
void
PHG4CylinderStripSubsystem::Print
(
const
string
&what)
const
155
{
156
cout <<
Name
() <<
" Parameters: "
<< endl;
157
if
(!
BeginRunExecuted
())
158
{
159
cout <<
"Need to execute BeginRun() before parameter printout is meaningful"
<< endl;
160
cout <<
"To do so either run one or more events or on the command line execute: "
<< endl;
161
cout <<
"Fun4AllServer *se = Fun4AllServer::instance();"
<< endl;
162
cout <<
"PHG4Reco *g4 = (PHG4Reco *) se->getSubsysReco(\"PHG4RECO\");"
<< endl;
163
cout <<
"g4->InitRun(se->topNode());"
<< endl;
164
cout <<
"PHG4CylinderStripSubsystem *cyl = (PHG4CylinderStripSubsystem *) g4->getSubsystem(\""
<<
Name
() <<
"\");"
<< endl;
165
cout <<
"cyl->Print()"
<< endl;
166
return
;
167
}
168
GetParams
()->
Print
();
169
if
(
m_SteppingAction
)
170
{
171
m_SteppingAction
->
Print
(what);
172
}
173
return
;
174
}
fun4all_eicdetectors
blob
master
simulation
g4simulation
g4barrelmmg
PHG4CylinderStripSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:46
using
1.8.2 with
ECCE GitHub integration