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
G4JLeicBeamLineMagnetSubsystem.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4JLeicBeamLineMagnetSubsystem.cc
1
#include "
G4JLeicBeamLineMagnetSubsystem.h
"
2
#include "
G4JLeicBeamLineMagnetDetector.h
"
3
#include "
G4JLeicBeamLineMagnetDisplayAction.h
"
4
#include "
G4JLeicBeamLineMagnetSteppingAction.h
"
5
6
#include <phparameter/PHParameters.h>
7
8
#include <
g4main/PHG4DisplayAction.h
>
// for PHG4DisplayAction
9
#include <
g4main/PHG4HitContainer.h
>
10
#include <
g4main/PHG4SteppingAction.h
>
// for PHG4SteppingAction
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 <cmath>
// for NAN
20
#include <iostream>
// for operator<<, endl, basic_ostream
21
22
class
PHCompositeNode
;
23
class
PHG4Detector
;
24
25
using namespace
std;
26
27
//_______________________________________________________________________
28
G4JLeicBeamLineMagnetSubsystem::G4JLeicBeamLineMagnetSubsystem
(
const
std::string& na,
const
int
lyr)
29
:
PHG4DetectorSubsystem
(na, lyr)
30
, m_Detector(nullptr)
31
, m_SteppingAction(nullptr)
32
, m_DisplayAction(nullptr)
33
{
34
InitializeParameters
();
35
}
36
37
//_______________________________________________________________________
38
G4JLeicBeamLineMagnetSubsystem::~G4JLeicBeamLineMagnetSubsystem
()
39
{
40
delete
m_DisplayAction
;
41
}
42
43
//_______________________________________________________________________
44
int
G4JLeicBeamLineMagnetSubsystem::InitRunSubsystem
(
PHCompositeNode
*
topNode
)
45
{
46
PHNodeIterator
iter(topNode);
47
PHCompositeNode
*dstNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"DST"
));
48
PHCompositeNode
*runNode =
dynamic_cast<
PHCompositeNode
*
>
(iter.
findFirst
(
"PHCompositeNode"
,
"RUN"
));
49
50
// create display settings before detector
51
G4JLeicBeamLineMagnetDisplayAction
*displayaction =
new
G4JLeicBeamLineMagnetDisplayAction
(
Name
());
52
m_DisplayAction
= displayaction;
53
/* create magnet */
54
m_Detector
=
new
G4JLeicBeamLineMagnetDetector
(
this
, topNode,
GetParams
(),
Name
(),
GetLayer
());
55
m_Detector
->
SuperDetector
(
SuperDetector
());
56
m_Detector
->
OverlapCheck
(
CheckOverlap
());
57
set<string> nodes;
58
if
(
GetParams
()->
get_int_param
(
"active"
))
59
{
60
PHNodeIterator
dstIter(dstNode);
61
PHCompositeNode
*DetNode =
dynamic_cast<
PHCompositeNode
*
>
(dstIter.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
62
if
(!DetNode)
63
{
64
DetNode =
new
PHCompositeNode
(
SuperDetector
());
65
dstNode->
addNode
(DetNode);
66
}
67
68
ostringstream nodename;
69
if
(
SuperDetector
() !=
"NONE"
)
70
{
71
// create super detector subnodes
72
PHNodeIterator
iter_dst(dstNode);
73
PHCompositeNode
*superSubNode =
dynamic_cast<
PHCompositeNode
*
>
(iter_dst.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
74
if
(!superSubNode)
75
{
76
superSubNode =
new
PHCompositeNode
(
SuperDetector
());
77
dstNode->
addNode
(superSubNode);
78
}
79
dstNode = superSubNode;
80
PHNodeIterator
iter_run(runNode);
81
superSubNode =
dynamic_cast<
PHCompositeNode
*
>
(iter_run.
findFirst
(
"PHCompositeNode"
,
SuperDetector
()));
82
if
(!superSubNode)
83
{
84
superSubNode =
new
PHCompositeNode
(
SuperDetector
());
85
runNode->
addNode
(superSubNode);
86
}
87
runNode = superSubNode;
88
89
nodename <<
"G4HIT_"
<<
SuperDetector
();
90
}
91
else
92
{
93
nodename <<
"G4HIT_"
<<
Name
();
94
}
95
nodes.insert(nodename.str());
96
if
(
GetParams
()->
get_int_param
(
"absorberactive"
))
97
{
98
nodename.str(
""
);
99
if
(
SuperDetector
() !=
"NONE"
)
100
{
101
nodename <<
"G4HIT_ABSORBER_"
<<
SuperDetector
();
102
}
103
else
104
{
105
nodename <<
"G4HIT_ABSORBER_"
<<
Name
();
106
}
107
nodes.insert(nodename.str());
108
}
109
for
(
auto
node : nodes)
110
{
111
PHG4HitContainer
*g4_hits = findNode::getClass<PHG4HitContainer>(
topNode
, node);
112
if
(!g4_hits)
113
{
114
g4_hits =
new
PHG4HitContainer
(node);
115
DetNode->
addNode
(
new
PHIODataNode<PHObject>
(g4_hits, node,
"PHObject"
));
116
}
117
}
118
119
m_SteppingAction
=
new
G4JLeicBeamLineMagnetSteppingAction
(
m_Detector
,
GetParams
());
120
}
121
else
if
(
GetParams
()->
get_int_param
(
"blackhole"
))
122
{
123
m_SteppingAction
=
new
G4JLeicBeamLineMagnetSteppingAction
(
m_Detector
,
GetParams
());
124
}
125
126
return
0;
127
}
128
129
//_______________________________________________________________________
130
int
G4JLeicBeamLineMagnetSubsystem::process_event
(
PHCompositeNode
*
topNode
)
131
{
132
// pass top node to stepping action so that it gets
133
// relevant nodes needed internally
134
if
(
m_SteppingAction
)
135
{
136
m_SteppingAction
->
SetInterfacePointers
(topNode);
137
}
138
return
0;
139
}
140
141
//_______________________________________________________________________
142
PHG4Detector
*
G4JLeicBeamLineMagnetSubsystem::GetDetector
(
void
)
const
143
{
144
return
m_Detector
;
145
}
146
147
void
G4JLeicBeamLineMagnetSubsystem::SetDefaultParameters
()
148
{
149
set_default_string_param
(
"magtype"
,
""
);
150
151
set_default_double_param
(
"field_x"
, 0.);
152
set_default_double_param
(
"field_y"
, 0.);
153
set_default_double_param
(
"field_z"
, 0.);
154
set_default_double_param
(
"fieldgradient"
, 0.);
155
156
set_default_double_param
(
"length"
, 100);
157
set_default_double_param
(
"place_x"
, 0.);
158
set_default_double_param
(
"place_y"
, 0.);
159
set_default_double_param
(
"place_z"
, 0.);
160
set_default_double_param
(
"rot_x"
, 0.);
161
set_default_double_param
(
"rot_y"
, 0.);
162
set_default_double_param
(
"rot_z"
, 0.);
163
set_default_double_param
(
"inner_radius"
, 4);
164
set_default_double_param
(
"outer_radius"
, 100);
165
}
166
167
void
G4JLeicBeamLineMagnetSubsystem::Print
(
const
string
& what)
const
168
{
169
cout <<
Name
() <<
" Parameters: "
<< endl;
170
if
(!
BeginRunExecuted
())
171
{
172
cout <<
"Need to execute BeginRun() before parameter printout is meaningful"
<< endl;
173
cout <<
"To do so either run one or more events or on the command line execute: "
<< endl;
174
cout <<
"Fun4AllServer *se = Fun4AllServer::instance();"
<< endl;
175
cout <<
"PHG4Reco *g4 = (PHG4Reco *) se->getSubsysReco(\"PHG4RECO\");"
<< endl;
176
cout <<
"g4->InitRun(se->topNode());"
<< endl;
177
cout <<
"G4JLeicBeamLineMagnetSubsystem *cyl = (PHG4BeamLineMagnetSubsystem *) g4->getSubsystem(\""
<<
Name
() <<
"\");"
<< endl;
178
cout <<
"cyl->Print()"
<< endl;
179
return
;
180
}
181
GetParams
()->
Print
();
182
return
;
183
}
fun4all_eicdetectors
blob
master
simulation
g4simulation
g4jleic
G4JLeicBeamLineMagnetSubsystem.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:24:47
using
1.8.2 with
ECCE GitHub integration