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_FEMC.C
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4_FEMC.C
1
#ifndef MACRO_G4FEMC_C
2
#define MACRO_G4FEMC_C
3
4
#include <
GlobalVariables.C
>
5
6
#include <
g4calo/RawTowerBuilderByHitIndex.h
>
7
#include <
g4calo/RawTowerDigitizer.h
>
8
9
#include <g4detectors/PHG4ForwardCalCellReco.h>
10
#include <g4detectors/PHG4ForwardEcalSubsystem.h>
11
12
#include <
g4eval/CaloEvaluator.h
>
13
14
#include <
g4main/PHG4Reco.h
>
15
16
#include <
eiccaloreco/RawClusterBuilderkMA.h
>
17
#include <
eiccaloreco/RawClusterBuilderHelper.h
>
18
19
#include <caloreco/RawClusterBuilderFwd.h>
20
#include <caloreco/RawClusterBuilderTemplate.h>
21
#include <caloreco/RawTowerCalibration.h>
22
23
#include <
fun4all/Fun4AllServer.h
>
24
25
R__LOAD_LIBRARY
(libcalo_reco.so)
26
R__LOAD_LIBRARY
(libg4calo.so)
27
R__LOAD_LIBRARY
(libg4detectors.so)
28
R__LOAD_LIBRARY
(libg4eval.so)
29
30
namespace Enable
31
{
32
bool
FEMC
=
false
;
33
bool
FEMC_ABSORBER
=
false
;
34
bool
FEMC_CELL
=
false
;
35
bool
FEMC_TOWER
=
false
;
36
bool
FEMC_CLUSTER
=
false
;
37
bool
FEMC_EVAL
=
false
;
38
bool
FEMC_OVERLAPCHECK
=
false
;
39
int
FEMC_VERBOSITY
= 0;
40
}
// namespace Enable
41
42
namespace
G4FEMC
43
{
44
// from ForwardEcal/mapping/towerMap_FEMC_fsPHENIX_v004.txt
45
double
Gz0
= 305.;
46
double
Gdz
= 40.;
47
double
outer_radius
= 180.;
48
string
calibfile
=
"/ForwardEcal/mapping/towerMap_FEMC_fsPHENIX_v004.txt"
;
49
enum
enu_Femc_clusterizer
50
{
51
kFemcGraphClusterizer
,
52
kFemcTemplateClusterizer
53
};
54
55
//template clusterizer, as developed by Sasha Bazilevsky
56
enu_Femc_clusterizer
Femc_clusterizer
=
kFemcTemplateClusterizer
;
57
// graph clusterizer
58
//enu_Femc_clusterizer Femc_clusterizer = kFemcGraphClusterizer;
59
}
// namespace G4FEMC
60
61
void
FEMCInit
()
62
{
63
BlackHoleGeometry::max_radius
=
std::max
(
BlackHoleGeometry::max_radius
,
G4FEMC::outer_radius
);
64
BlackHoleGeometry::max_z
=
std::max
(
BlackHoleGeometry::max_z
,
G4FEMC::Gz0
+
G4FEMC::Gdz
/ 2.);
65
}
66
67
void
FEMCSetup
(
PHG4Reco
*g4Reco,
const
int
absorberactive = 0)
68
{
69
bool
AbsorberActive =
Enable::ABSORBER
||
Enable::FEMC_ABSORBER
|| (absorberactive > 0);
70
bool
OverlapCheck =
Enable::OVERLAPCHECK
||
Enable::FEMC_OVERLAPCHECK
;
71
72
Fun4AllServer
*se =
Fun4AllServer::instance
();
73
75
PHG4ForwardEcalSubsystem
*femc =
new
PHG4ForwardEcalSubsystem
(
"FEMC"
);
76
77
ostringstream mapping_femc;
78
79
// fsPHENIX ECAL
80
femc->
SetfsPHENIXDetector
();
81
mapping_femc << getenv(
"CALIBRATIONROOT"
) <<
G4FEMC::calibfile
;
82
83
// cout << mapping_femc.str() << endl;
84
femc->
SetTowerMappingFile
(mapping_femc.str());
85
femc->
OverlapCheck
(OverlapCheck);
86
femc->
SetActive
();
87
femc->
SuperDetector
(
"FEMC"
);
88
if
(AbsorberActive) femc->
SetAbsorberActive
(AbsorberActive);
89
90
g4Reco->
registerSubsystem
(femc);
91
}
92
93
void
FEMC_Cells
()
94
{
95
return
;
96
}
97
98
void
FEMC_Towers
()
99
{
100
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::FEMC_VERBOSITY
);
101
Fun4AllServer
*se =
Fun4AllServer::instance
();
102
103
ostringstream mapping_femc;
104
105
// fsPHENIX ECAL
106
mapping_femc << getenv(
"CALIBRATIONROOT"
) <<
G4FEMC::calibfile
;
107
108
RawTowerBuilderByHitIndex
*tower_FEMC =
new
RawTowerBuilderByHitIndex
(
"TowerBuilder_FEMC"
);
109
tower_FEMC->
Detector
(
"FEMC"
);
110
tower_FEMC->
set_sim_tower_node_prefix
(
"SIM"
);
111
tower_FEMC->
GeometryTableFile
(mapping_femc.str());
112
113
se->
registerSubsystem
(tower_FEMC);
114
115
// PbW crystals
116
//RawTowerDigitizer *TowerDigitizer1 = new RawTowerDigitizer("FEMCRawTowerDigitizer1");
117
//TowerDigitizer1->Detector("FEMC");
118
//TowerDigitizer1->TowerType(1);
119
//TowerDigitizer1->Verbosity(verbosity);
120
//TowerDigitizer1->set_digi_algorithm(RawTowerDigitizer::kNo_digitization);
121
//se->registerSubsystem( TowerDigitizer1 );
122
123
// PbSc towers
124
//RawTowerDigitizer *TowerDigitizer2 = new RawTowerDigitizer("FEMCRawTowerDigitizer2");
125
//TowerDigitizer2->Detector("FEMC");
126
//TowerDigitizer2->TowerType(2);
127
//TowerDigitizer2->Verbosity(verbosity);
128
//TowerDigitizer2->set_digi_algorithm(RawTowerDigitizer::kNo_digitization);
129
//se->registerSubsystem( TowerDigitizer2 );
130
131
// E864 towers (three types for three sizes)
132
RawTowerDigitizer
*TowerDigitizer3 =
new
RawTowerDigitizer
(
"FEMCRawTowerDigitizer3"
);
133
TowerDigitizer3->
Detector
(
"FEMC"
);
134
TowerDigitizer3->
TowerType
(3);
135
TowerDigitizer3->
Verbosity
(verbosity);
136
TowerDigitizer3->
set_digi_algorithm
(
RawTowerDigitizer::kNo_digitization
);
137
se->
registerSubsystem
(TowerDigitizer3);
138
139
RawTowerDigitizer
*TowerDigitizer4 =
new
RawTowerDigitizer
(
"FEMCRawTowerDigitizer4"
);
140
TowerDigitizer4->
Detector
(
"FEMC"
);
141
TowerDigitizer4->
TowerType
(4);
142
TowerDigitizer4->
Verbosity
(verbosity);
143
TowerDigitizer4->
set_digi_algorithm
(
RawTowerDigitizer::kNo_digitization
);
144
se->
registerSubsystem
(TowerDigitizer4);
145
146
RawTowerDigitizer
*TowerDigitizer5 =
new
RawTowerDigitizer
(
"FEMCRawTowerDigitizer5"
);
147
TowerDigitizer5->
Detector
(
"FEMC"
);
148
TowerDigitizer5->
TowerType
(5);
149
TowerDigitizer5->
Verbosity
(verbosity);
150
TowerDigitizer5->
set_digi_algorithm
(
RawTowerDigitizer::kNo_digitization
);
151
se->
registerSubsystem
(TowerDigitizer5);
152
153
RawTowerDigitizer
*TowerDigitizer6 =
new
RawTowerDigitizer
(
"FEMCRawTowerDigitizer6"
);
154
TowerDigitizer6->
Detector
(
"FEMC"
);
155
TowerDigitizer6->
TowerType
(6);
156
TowerDigitizer6->
Verbosity
(verbosity);
157
TowerDigitizer6->
set_digi_algorithm
(
RawTowerDigitizer::kNo_digitization
);
158
se->
registerSubsystem
(TowerDigitizer6);
159
160
// PbW crystals
161
//RawTowerCalibration *TowerCalibration1 = new RawTowerCalibration("FEMCRawTowerCalibration1");
162
//TowerCalibration1->Detector("FEMC");
163
//TowerCalibration1->TowerType(1);
164
//TowerCalibration1->Verbosity(verbosity);
165
//TowerCalibration1->set_calib_algorithm(RawTowerCalibration::kSimple_linear_calibration);
166
//TowerCalibration1->set_calib_const_GeV_ADC(1.0); // sampling fraction = 1.0
167
//TowerCalibration1->set_pedstal_ADC(0);
168
//se->registerSubsystem( TowerCalibration1 );
169
170
// PbSc towers
171
//RawTowerCalibration *TowerCalibration2 = new RawTowerCalibration("FEMCRawTowerCalibration2");
172
//TowerCalibration2->Detector("FEMC");
173
//TowerCalibration2->TowerType(2);
174
//TowerCalibration2->Verbosity(verbosity);
175
//TowerCalibration2->set_calib_algorithm(RawTowerCalibration::kSimple_linear_calibration);
176
//TowerCalibration2->set_calib_const_GeV_ADC(1.0/0.249); // sampling fraction = 0.249 for e-
177
//TowerCalibration2->set_pedstal_ADC(0);
178
//se->registerSubsystem( TowerCalibration2 );
179
180
// E864 towers (three types for three sizes)
181
RawTowerCalibration
*TowerCalibration3 =
new
RawTowerCalibration
(
"FEMCRawTowerCalibration3"
);
182
TowerCalibration3->
Detector
(
"FEMC"
);
183
TowerCalibration3->
TowerType
(3);
184
TowerCalibration3->
Verbosity
(verbosity);
185
TowerCalibration3->
set_calib_algorithm
(
RawTowerCalibration::kSimple_linear_calibration
);
186
TowerCalibration3->
set_calib_const_GeV_ADC
(1.0 / 0.030);
// sampling fraction = 0.030
187
TowerCalibration3->
set_pedstal_ADC
(0);
188
se->
registerSubsystem
(TowerCalibration3);
189
190
RawTowerCalibration
*TowerCalibration4 =
new
RawTowerCalibration
(
"FEMCRawTowerCalibration4"
);
191
TowerCalibration4->
Detector
(
"FEMC"
);
192
TowerCalibration4->
TowerType
(4);
193
TowerCalibration4->
Verbosity
(verbosity);
194
TowerCalibration4->
set_calib_algorithm
(
RawTowerCalibration::kSimple_linear_calibration
);
195
TowerCalibration4->
set_calib_const_GeV_ADC
(1.0 / 0.030);
// sampling fraction = 0.030
196
TowerCalibration4->
set_pedstal_ADC
(0);
197
se->
registerSubsystem
(TowerCalibration4);
198
199
RawTowerCalibration
*TowerCalibration5 =
new
RawTowerCalibration
(
"FEMCRawTowerCalibration5"
);
200
TowerCalibration5->
Detector
(
"FEMC"
);
201
TowerCalibration5->
TowerType
(5);
202
TowerCalibration5->
Verbosity
(verbosity);
203
TowerCalibration5->
set_calib_algorithm
(
RawTowerCalibration::kSimple_linear_calibration
);
204
TowerCalibration5->
set_calib_const_GeV_ADC
(1.0 / 0.030);
// sampling fraction = 0.030
205
TowerCalibration5->
set_pedstal_ADC
(0);
206
se->
registerSubsystem
(TowerCalibration5);
207
208
RawTowerCalibration
*TowerCalibration6 =
new
RawTowerCalibration
(
"FEMCRawTowerCalibration6"
);
209
TowerCalibration6->
Detector
(
"FEMC"
);
210
TowerCalibration6->
TowerType
(6);
211
TowerCalibration6->
Verbosity
(verbosity);
212
TowerCalibration6->
set_calib_algorithm
(
RawTowerCalibration::kSimple_linear_calibration
);
213
TowerCalibration6->
set_calib_const_GeV_ADC
(1.0 / 0.030);
// sampling fraction = 0.030
214
TowerCalibration6->
set_pedstal_ADC
(0);
215
se->
registerSubsystem
(TowerCalibration6);
216
}
217
218
void
FEMC_Clusters
()
219
{
220
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::FEMC_VERBOSITY
);
221
222
Fun4AllServer
*se =
Fun4AllServer::instance
();
223
224
if
(
G4FEMC::Femc_clusterizer
==
G4FEMC::kFemcTemplateClusterizer
)
225
{
226
RawClusterBuilderHelper
*ClusterBuilder =
new
RawClusterBuilderkMA
(
"FEMCRawClusterBuilderkMA"
);
227
ClusterBuilder->
Detector
(
"FEMC"
);
228
ClusterBuilder->
set_seed_e
(0.1);
229
ClusterBuilder->
set_agg_e
(0.005);
230
se->
registerSubsystem
(ClusterBuilder);
231
/*
232
RawClusterBuilderTemplate *ClusterBuilder = new RawClusterBuilderTemplate("EmcRawClusterBuilderTemplateFEMC");
233
ClusterBuilder->Detector("FEMC");
234
ClusterBuilder->Verbosity(verbosity);
235
ClusterBuilder->set_threshold_energy(0.020); // This threshold should be the same as in FEMCprof_Thresh**.root file below
236
std::string femc_prof = getenv("CALIBRATIONROOT");
237
femc_prof += "/EmcProfile/FEMCprof_Thresh20MeV.root";
238
ClusterBuilder->LoadProfile(femc_prof.c_str());
239
se->registerSubsystem(ClusterBuilder);
240
*/
241
}
242
else
if
(
G4FEMC::Femc_clusterizer
==
G4FEMC::kFemcGraphClusterizer
)
243
{
244
RawClusterBuilderFwd
*ClusterBuilder =
new
RawClusterBuilderFwd
(
"FEMCRawClusterBuilderFwd"
);
245
246
ClusterBuilder->
Detector
(
"FEMC"
);
247
ClusterBuilder->
Verbosity
(verbosity);
248
ClusterBuilder->
set_threshold_energy
(0.010);
249
se->
registerSubsystem
(ClusterBuilder);
250
}
251
else
252
{
253
cout <<
"FEMC_Clusters - unknown clusterizer setting!"
<< endl;
254
exit
(1);
255
}
256
257
return
;
258
}
259
260
void
FEMC_Eval
(std::string outputfile)
261
{
262
int
verbosity =
std::max
(
Enable::VERBOSITY
,
Enable::FEMC_VERBOSITY
);
263
Fun4AllServer
*se =
Fun4AllServer::instance
();
264
265
CaloEvaluator
*eval =
new
CaloEvaluator
(
"FEMCEVALUATOR"
,
"FEMC"
, outputfile.c_str());
266
eval->
Verbosity
(verbosity);
267
se->
registerSubsystem
(eval);
268
269
return
;
270
}
271
#endif
macros
blob
master
common
G4_FEMC.C
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:58
using
1.8.2 with
ECCE GitHub integration