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
ECCE @ EIC Software
Deprecated List
Modules
Namespaces
Classes
Files
File List
acts
analysis
coresoftware
Doxygen_Assist
ecce-detectors
fun4all_eicdetectors
geant4
macros
blob
master
common
DisplayOn.C
ECCEStyle.C
ECCEStyle.h
G4_Aerogel.C
G4_AllSilicon.C
G4_B0ECAL.C
G4_B0Tracking_EIC.C
G4_Barrel_EIC.C
G4_Bbc.C
G4_BECAL.C
G4_BlackHole.C
G4_BMMG.C
G4_BToF.C
G4_BWD.C
G4_CEmc_Albedo.C
G4_CEmc_EIC.C
G4_CEmc_Spacal.C
G4_DIRC.C
G4_DRCALO.C
G4_dRICH.C
G4_DSTReader_EICDetector.C
G4_EEMC.C
G4_EEMC_hybrid.C
G4_EHCAL.C
G4_EToF.C
G4_EventEvaluator.C
G4_FEMC.C
G4_FEMC_EIC.C
G4_FHCAL.C
G4_FST_EIC.C
G4_FwdJets.C
G4_GEM_EIC.C
G4_Global.C
G4_HcalIn_ref.C
G4_HcalOut_ref.C
G4_hFarBwdBeamLine_EIC.C
G4_hFarFwdBeamLine_EIC.C
G4_HToF.C
G4_Input.C
G4_Jets.C
G4_KFParticle.C
G4_LFHCAL.C
G4_Magnet.C
G4_Micromegas.C
G4_mRICH.C
G4_mRwell_EIC.C
G4_Mvtx_EIC.C
G4_ParticleFlow.C
G4_Pipe.C
G4_Pipe_EIC.C
G4_Piston.C
G4_PlugDoor.C
G4_PlugDoor_EIC.C
G4_Production.C
G4_PSTOF.C
G4_RICH.C
G4_TopoClusterReco.C
G4_TPC_EIC.C
G4_Tracking_EIC.C
G4_TrackingSupport.C
G4_TRD.C
G4_TTL_EIC.C
G4_User.C
G4_World.C
GlobalVariables.C
QA.C
sPhenixStyle.C
sPhenixStyle.h
detectors
online_distribution
tutorials
doxygen_mainpage.h
File Members
External Links
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4_HcalOut_ref.C
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4_HcalOut_ref.C
1
#ifndef MACRO_G4HCALOUTREF_C
2
#define MACRO_G4HCALOUTREF_C
3
4
#include <
GlobalVariables.C
>
5
#include <
QA.C
>
6
7
#include <
g4calo/HcalRawTowerBuilder.h
>
8
#include <
g4calo/RawTowerDigitizer.h
>
9
10
#include <
g4detectors/PHG4HcalCellReco.h
>
11
#include <
g4detectors/PHG4OuterHcalSubsystem.h
>
12
13
#include <
g4eval/CaloEvaluator.h
>
14
15
#include <
g4main/PHG4Reco.h
>
16
17
#include <
eiccaloreco/RawClusterBuilderkV3.h
>
18
#include <
eiccaloreco/RawClusterBuilderHelper.h
>
19
20
#include <caloreco/RawClusterBuilderGraph.h>
21
#include <caloreco/RawClusterBuilderTemplate.h>
22
#include <caloreco/RawTowerCalibration.h>
23
#include <qa_modules/QAG4SimulationCalorimeter.h>
24
25
#include <
fun4all/Fun4AllServer.h
>
26
27
R__LOAD_LIBRARY
(libcalo_reco.so)
28
R__LOAD_LIBRARY
(libg4calo.so)
29
R__LOAD_LIBRARY
(libg4detectors.so)
30
R__LOAD_LIBRARY
(libg4eval.so)
31
R__LOAD_LIBRARY
(libqa_modules.so)
32
33
namespace Enable
34
{
35
bool
HCALOUT
=
false
;
36
bool
HCALOUT_ABSORBER
=
false
;
37
bool
HCALOUT_OVERLAPCHECK
=
false
;
38
bool
HCALOUT_CELL
=
false
;
39
bool
HCALOUT_TOWER
=
false
;
40
bool
HCALOUT_CLUSTER
=
false
;
41
bool
HCALOUT_EVAL
=
false
;
42
bool
HCALOUT_QA
=
false
;
43
int
HCALOUT_VERBOSITY
= 0;
44
}
// namespace Enable
45
46
namespace
G4HCALOUT
47
{
48
double
outer_radius
= 264.71;
49
double
size_z
= 304.91 * 2;
50
51
// Digitization (default photon digi):
52
RawTowerDigitizer::enu_digi_algorithm
TowerDigi
=
RawTowerDigitizer::kSimple_photon_digitization
;
53
// directly pass the energy of sim tower to digitized tower
54
// kNo_digitization
55
// simple digitization with photon statistics, single amplitude ADC conversion and pedestal
56
// kSimple_photon_digitization
57
// digitization with photon statistics on SiPM with an effective pixel N, ADC conversion and pedestal
58
// kSiPM_photon_digitization
59
60
enum
enu_HCalOut_clusterizer
61
{
62
kHCalOutGraphClusterizer
,
63
kHCalOutTemplateClusterizer
64
};
65
67
enu_HCalOut_clusterizer
HCalOut_clusterizer
=
kHCalOutTemplateClusterizer
;
69
//enu_HCalOut_clusterizer HCalOut_clusterizer = kHCalOutGraphClusterizer;
70
}
// namespace G4HCALOUT
71
72
// Init is called by G4Setup.C
73
void
HCalOuterInit
()
74
{
75
BlackHoleGeometry::max_radius
=
std::max
(
BlackHoleGeometry::max_radius
,
G4HCALOUT::outer_radius
);
76
BlackHoleGeometry::max_z
=
std::max
(
BlackHoleGeometry::max_z
,
G4HCALOUT::size_z
/ 2.);
77
BlackHoleGeometry::min_z
=
std::min
(
BlackHoleGeometry::min_z
, -
G4HCALOUT::size_z
/ 2.);
78
}
79
80
double
HCalOuter
(
PHG4Reco
*g4Reco,
81
double
radius
,
82
const
int
crossings)
83
{
84
bool
AbsorberActive =
Enable::ABSORBER
||
Enable::HCALOUT_ABSORBER
;
85
bool
OverlapCheck =
Enable::OVERLAPCHECK
||
Enable::HCALOUT_OVERLAPCHECK
;
86
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
87
88
PHG4OuterHcalSubsystem
*hcal =
new
PHG4OuterHcalSubsystem
(
"HCALOUT"
);
89
// hcal->set_double_param("inner_radius", 183.3);
90
//-----------------------------------------
91
// the light correction can be set in a single call
92
// hcal->set_double_param("light_balance_inner_corr", NAN);
93
// hcal->set_double_param("light_balance_inner_radius", NAN);
94
// hcal->set_double_param("light_balance_outer_corr", NAN);
95
// hcal->set_double_param("light_balance_outer_radius", NAN);
96
// hcal->set_double_param("magnet_cutout_radius", 195.31);
97
// hcal->set_double_param("magnet_cutout_scinti_radius", 195.96);
98
// hcal->SetLightCorrection(NAN,NAN,NAN,NAN);
99
//-----------------------------------------
100
// hcal->set_double_param("outer_radius", G4HCALOUT::outer_radius);
101
// hcal->set_double_param("place_x", 0.);
102
// hcal->set_double_param("place_y", 0.);
103
// hcal->set_double_param("place_z", 0.);
104
// hcal->set_double_param("rot_x", 0.);
105
// hcal->set_double_param("rot_y", 0.);
106
// hcal->set_double_param("rot_z", 0.);
107
// hcal->set_double_param("scinti_eta_coverage", 1.1);
108
// hcal->set_double_param("scinti_gap", 0.85);
109
// hcal->set_double_param("scinti_gap_neighbor", 0.1);
110
// hcal->set_double_param("scinti_inner_radius",183.89);
111
// hcal->set_double_param("scinti_outer_radius",263.27);
112
// hcal->set_double_param("scinti_tile_thickness", 0.7);
113
// hcal->set_double_param("size_z", G4HCALOUT::size_z);
114
// hcal->set_double_param("steplimits", NAN);
115
// hcal->set_double_param("tilt_angle", -11.23);
116
117
// hcal->set_int_param("light_scint_model", 1);
118
// hcal->set_int_param("magnet_cutout_first_scinti", 8);
119
// hcal->set_int_param("ncross", 0);
120
// hcal->set_int_param("n_towers", 64);
121
// hcal->set_int_param("n_scinti_plates_per_tower", 5);
122
// hcal->set_int_param("n_scinti_tiles", 12);
123
124
// hcal->set_string_param("material", "Steel_1006");
125
126
hcal->
SetActive
();
127
hcal->
SuperDetector
(
"HCALOUT"
);
128
if
(AbsorberActive)
129
{
130
hcal->
SetAbsorberActive
();
131
}
132
hcal->
OverlapCheck
(OverlapCheck);
133
g4Reco->
registerSubsystem
(hcal);
134
135
radius = hcal->
get_double_param
(
"outer_radius"
);
136
137
radius +=
no_overlapp
;
138
139
return
radius
;
140
}
141
142
void
HCALOuter_Cells
()
143
{
144
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
145
146
Fun4AllServer
*se =
Fun4AllServer::instance
();
147
148
PHG4HcalCellReco
*
hc
=
new
PHG4HcalCellReco
(
"HCALOUT_CELLRECO"
);
149
hc->
Detector
(
"HCALOUT"
);
150
// hc->Verbosity(2);
151
// check for energy conservation - needs modified "infinite" timing cuts
152
// 0-999999999
153
// hc->checkenergy();
154
// timing cuts with their default settings
155
// hc->set_double_param("tmin",0.);
156
// hc->set_double_param("tmax",60.0);
157
// or all at once:
158
// hc->set_timing_window(0.0,60.0);
159
se->
registerSubsystem
(hc);
160
161
return
;
162
}
163
164
void
HCALOuter_Towers
()
165
{
166
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
167
168
Fun4AllServer
*se =
Fun4AllServer::instance
();
169
170
HcalRawTowerBuilder
*TowerBuilder =
new
HcalRawTowerBuilder
(
"HcalOutRawTowerBuilder"
);
171
TowerBuilder->
Detector
(
"HCALOUT"
);
172
TowerBuilder->
set_sim_tower_node_prefix
(
"SIM"
);
173
TowerBuilder->
Verbosity
(verbosity);
174
se->
registerSubsystem
(TowerBuilder);
175
176
// From 2016 Test beam sim
177
RawTowerDigitizer
*TowerDigitizer =
new
RawTowerDigitizer
(
"HcalOutRawTowerDigitizer"
);
178
TowerDigitizer->
Detector
(
"HCALOUT"
);
179
// TowerDigitizer->set_raw_tower_node_prefix("RAW_LG");
180
TowerDigitizer->
set_digi_algorithm
(
G4HCALOUT::TowerDigi
);
181
TowerDigitizer->
set_pedstal_central_ADC
(0);
182
TowerDigitizer->
set_pedstal_width_ADC
(1);
// From Jin's guess. No EMCal High Gain data yet! TODO: update
183
TowerDigitizer->
set_photonelec_ADC
(16. / 5.);
184
TowerDigitizer->
set_photonelec_yield_visible_GeV
(16. / 5 / (0.2
e
-3));
185
TowerDigitizer->
set_zero_suppression_ADC
(-0);
// no-zero suppression
186
se->
registerSubsystem
(TowerDigitizer);
187
188
const
double
visible_sample_fraction_HCALOUT = 3.38021e-02;
// /gpfs/mnt/gpfs04/sphenix/user/jinhuang/prod_analysis/hadron_shower_res_nightly/./G4Hits_sPHENIX_pi-_eta0_16GeV.root_qa.rootQA_Draw_HCALOUT_G4Hit.pdf
189
190
RawTowerCalibration
*TowerCalibration =
new
RawTowerCalibration
(
"HcalOutRawTowerCalibration"
);
191
TowerCalibration->
Detector
(
"HCALOUT"
);
192
// TowerCalibration->set_raw_tower_node_prefix("RAW_LG");
193
// TowerCalibration->set_calib_tower_node_prefix("CALIB_LG");
194
TowerCalibration->
set_calib_algorithm
(
RawTowerCalibration::kSimple_linear_calibration
);
195
if
(
G4HCALOUT::TowerDigi
==
RawTowerDigitizer::kNo_digitization
)
196
{
197
TowerCalibration->
set_calib_const_GeV_ADC
(1. / visible_sample_fraction_HCALOUT);
198
}
199
else
200
{
201
TowerCalibration->
set_calib_const_GeV_ADC
(0.2
e
-3 / visible_sample_fraction_HCALOUT);
202
}
203
TowerCalibration->
set_pedstal_ADC
(0);
204
se->
registerSubsystem
(TowerCalibration);
205
206
return
;
207
}
208
209
void
HCALOuter_Clusters
()
210
{
211
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
212
213
Fun4AllServer
*se =
Fun4AllServer::instance
();
214
215
if
(
G4HCALOUT::HCalOut_clusterizer
==
G4HCALOUT::kHCalOutTemplateClusterizer
)
216
{
217
RawClusterBuilderHelper
*ClusterBuilder =
new
RawClusterBuilderkV3
(
"HcalOuRawClusterBuilderkV3"
);
218
ClusterBuilder->
Detector
(
"HCALOUT"
);
219
ClusterBuilder->
set_seed_e
(0.5);
220
ClusterBuilder->
set_agg_e
(0.1);
221
se->
registerSubsystem
(ClusterBuilder);
222
/*
223
RawClusterBuilderTemplate *ClusterBuilder = new RawClusterBuilderTemplate("HcalOutRawClusterBuilderTemplate");
224
ClusterBuilder->Detector("HCALOUT");
225
ClusterBuilder->SetCylindricalGeometry(); // has to be called after Detector()
226
ClusterBuilder->Verbosity(verbosity);
227
se->registerSubsystem(ClusterBuilder);
228
*/
229
}
230
else
if
(
G4HCALOUT::HCalOut_clusterizer
==
G4HCALOUT::kHCalOutGraphClusterizer
)
231
{
232
RawClusterBuilderGraph
*ClusterBuilder =
new
RawClusterBuilderGraph
(
"HcalOutRawClusterBuilderGraph"
);
233
ClusterBuilder->
Detector
(
"HCALOUT"
);
234
ClusterBuilder->
Verbosity
(verbosity);
235
se->
registerSubsystem
(ClusterBuilder);
236
}
237
else
238
{
239
cout <<
"HCALOuter_Clusters - unknown clusterizer setting!"
<< endl;
240
exit
(1);
241
}
242
243
return
;
244
}
245
246
void
HCALOuter_Eval
(
const
std::string &outputfile)
247
{
248
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
249
250
Fun4AllServer
*se =
Fun4AllServer::instance
();
251
252
CaloEvaluator
*eval =
new
CaloEvaluator
(
"HCALOUTEVALUATOR"
,
"HCALOUT"
, outputfile);
253
eval->
Verbosity
(verbosity);
254
se->
registerSubsystem
(eval);
255
256
return
;
257
}
258
259
void
HCALOuter_QA
()
260
{
261
int
verbosity =
std::max
(
Enable::QA_VERBOSITY
,
Enable::HCALOUT_VERBOSITY
);
262
263
Fun4AllServer
*se =
Fun4AllServer::instance
();
264
QAG4SimulationCalorimeter
*qa =
new
QAG4SimulationCalorimeter
(
"HCALOUT"
);
265
qa->
Verbosity
(verbosity);
266
se->
registerSubsystem
(qa);
267
268
return
;
269
}
270
271
#endif
macros
blob
master
common
G4_HcalOut_ref.C
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:58
using
1.8.2 with
ECCE GitHub integration