ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4Setup_EICDetector.C
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4Setup_EICDetector.C
1 #ifndef MACRO_G4SETUPEICDETECTOR_C
2 #define MACRO_G4SETUPEICDETECTOR_C
3 
4 #include <G4_BMMG.C>
5 #include <G4_TRD.C>
6 
7 #include <GlobalVariables.C>
8 
9 #include <G4_BlackHole.C>
10 
11 //#include <G4_AllSilicon.C>
12 //#include <G4_Mvtx_EIC.C>
13 #include <G4_BECAL.C>
14 #include <G4_Barrel_EIC.C>
15 #include <G4_CEmc_EIC.C>
16 #include <G4_DIRC.C>
17 #include <G4_DRCALO.C>
18 #include <G4_EEMC.C>
19 #include <G4_EEMC_hybrid.C>
20 #include <G4_EHCAL.C>
21 #include <G4_FEMC_EIC.C>
22 #include <G4_FHCAL.C>
23 #include <G4_B0ECAL.C> //for B0 ECAL
24 #include <G4_BWD.C> //for Far Backward Detectors
25 #include <G4_FST_EIC.C>
26 #include <G4_GEM_EIC.C>
27 #include <G4_HcalIn_ref.C>
28 #include <G4_HcalOut_ref.C>
29 #include <G4_Input.C>
30 #include <G4_LFHCAL.C>
31 #include <G4_Magnet.C>
32 #include <G4_Pipe_EIC.C>
33 #include <G4_PlugDoor_EIC.C>
34 #include <G4_TTL_EIC.C>
35 #include <G4_TrackingSupport.C>
36 #include <G4_Tracking_EIC.C>
37 #include <G4_B0Tracking_EIC.C> //for B0 Tracking
38 #include <G4_dRICH.C>
39 #include <G4_mRICH.C>
40 #include <G4_mRwell_EIC.C>
41 #include <G4_BToF.C>
42 #include <G4_HToF.C>
43 #include <G4_EToF.C>
44 
45 // these two has to be ordered this way for now.
46 #include <G4_hFarFwdBeamLine_EIC.C>
47 #include <G4_hFarBwdBeamLine_EIC.C>
48 
49 #include <G4_User.C>
50 #include <G4_World.C>
51 
53 #include <eicg4b0/EICG4B0Subsystem.h>
54 #include <eicg4b0ecal/EICG4B0ECALSubsystem.h>
55 #include <eicg4bwd/EICG4BwdSubsystem.h>
56 
58 
59 #include <g4main/PHG4Reco.h>
61 
62 #include <phfield/PHFieldConfig.h>
63 
64 #include <g4decayer/EDecayType.hh>
65 
67 #include <fun4all/Fun4AllServer.h>
68 
69 R__LOAD_LIBRARY(libg4decayer.so)
70 R__LOAD_LIBRARY(libg4detectors.so)
71 
72 void G4Init()
73 {
74  // First some check for subsystems which do not go together
75 
76  if (Enable::IP6 and Enable::IP8)
77  {
78  cout << "Can not enable Enable::IP6 and Enable::IP8 at the same time!" << endl;
79  gSystem->Exit(1);
80  }
81  if (Enable::IP6 == false and Enable::IP8 == false)
82  {
83  cout << "None of the possible EIC IPs were selected: Enable::IP6 and Enable::IP8 !" << endl;
84  gSystem->Exit(1);
85  }
86 
88  {
89  cout << "Can not enable EEMC and EEMCH at the same time!" << endl;
90  gSystem->Exit(1);
91  }
93  {
94  cout << "Can not enable CEMC and BECAL at the same time!" << endl;
95  gSystem->Exit(1);
96  }
97  if (Enable::BTOF and Enable::CTTL)
98  {
99  cout << "Can not enable BTOF and CTTL at the same time!" << endl;
100  gSystem->Exit(1);
101  }
102  if (Enable::ETOF and Enable::ETTL)
103  {
104  cout << "Can not enable ETOF and ETTL at the same time!" << endl;
105  gSystem->Exit(1);
106  }
107  if (Enable::HTOF and Enable::FTTL)
108  {
109  cout << "Can not enable HTOF and FTTL at the same time!" << endl;
110  gSystem->Exit(1);
111  }
112  if (Enable::BMMG and Enable::DIRC)
113  {
114  cout << "Can not enable BMMG and DIRC at the same time!" << endl;
115  gSystem->Exit(1);
116  }
118  {
119  cout << "Can not enable TRD* and RICH at the same time!" << endl;
120  gSystem->Exit(1);
121  }
123  {
124  cout << "Can not enable *HCal and PLUGDOOR at the same time!" << endl;
125  gSystem->Exit(1);
126  }
127  // load detector/material macros and execute Init() function
128  if (Enable::PIPE) PipeInit();
129  if (Enable::PLUGDOOR) PlugDoorInit();
131  if (Enable::B0TRACKING) B0TrackingInit();
132 
133  //Farforward/backward
134  if (Enable::HFARFWD_MAGNETS) hFarBwdBeamLineInit(); //Shouldnt this be far backward enables
136 
137  //Barrel
139  if (Enable::BARREL) BarrelInit();
140  if (Enable::RWELL) RWellInit();
141  if (Enable::CEMC) CEmcInit(72); // make it 2*2*2*3*3 so we can try other combinations
142  if (Enable::BECAL) BECALInit();
144  if (Enable::MAGNET) MagnetInit();
145  MagnetFieldInit(); // We want the field - even if the magnet volume is disabled
147  if (Enable::DIRC) DIRCInit();
148  if (Enable::BTOF) BToFInit();
149  if (Enable::BMMG) BMMGInit();
150 
151  //Forward
152  if (Enable::FGEM) FGEM_Init();
153  if (Enable::FEMC) FEMCInit();
154  if (Enable::DRCALO) DRCALOInit();
155  if (Enable::FHCAL) FHCALInit();
156  if (Enable::LFHCAL) LFHCALInit();
157  if (Enable::RICH) RICHInit();
158  if (Enable::TRD) TRDInit();
159  if (Enable::HTOF) HTOFInit();
160  if (Enable::B0ECAL) B0ECALInit();
161 
162  //Backward
163  if (Enable::EGEM) EGEM_Init();
164  if (Enable::EEMC) EEMCInit();
165  if (Enable::EEMCH) EEMCHInit();
166  if (Enable::EHCAL) EHCALInit();
167  if (Enable::mRICH) mRICHInit();
168  if (Enable::ETOF) ETOFInit();
169  if (Enable::BWD) BWDInit();
170 
171  //Combined
172  if (Enable::FST) FST_Init();
173  if (Enable::FTTL || Enable::ETTL || Enable::CTTL) TTL_Init();
174 
175  if (Enable::USER) UserInit();
177 }
178 
179 int G4Setup()
180 {
181  //---------------
182  // Fun4All server
183  //---------------
184 
186 
187  PHG4Reco *g4Reco = new PHG4Reco();
188 
189  WorldInit(g4Reco);
190 
191  g4Reco->set_rapidity_coverage(1.1); // according to drawings
192  // uncomment to set QGSP_BERT_HP physics list for productions
193  // (default is QGSP_BERT for speed)
194  // g4Reco->SetPhysicsList("QGSP_BERT_HP");
195 
197  {
199  }
200 
201  double fieldstrength;
202  istringstream stringline(G4MAGNET::magfield);
203  stringline >> fieldstrength;
204  if (stringline.fail())
205  { // conversion to double fails -> we have a string
206 
207  if (G4MAGNET::magfield.find("sPHENIX.root") != string::npos)
208 // if (G4MAGNET::magfield.find("B0MagField_all_v2.root") != string::npos) // for B0 Tracking
209 // if (G4MAGNET::magfield.find("/cvmfs/eic.opensciencegrid.org/ecce/gcc-8.3/opt/fun4all/core/calibrations/Field/Map/sphenix3dbigmapxyz.root") != string::npos)
210  {
211 // std::cout <<"G4 Setup: Using B0MagField_all_v1.root as 3D fieldMap"<<std::endl;
213  }
214  else
215  {
217  }
218  }
219  else
220  {
221  g4Reco->set_field(fieldstrength); // use const soleniodal field
222  }
224 
225  // the radius is an older protection against overlaps, it is not
226  // clear how well this works nowadays but it doesn't hurt either
227  double radius = 0.;
228 
229  if (Enable::PIPE) radius = Pipe(g4Reco, radius);
230 
231  // Far Forward Region
235 
236  // Far Backward Region
240 
241  //Barrel
242  if (Enable::TrackingService) TrackingService(g4Reco, radius);
243 
244  if (Enable::RWELL) RWellSetup(g4Reco);
245  if (Enable::FST) FSTSetup(g4Reco);
246  if (Enable::CTTL) CTTLSetup(g4Reco);
247  if (Enable::BARREL) Barrel(g4Reco);
248  if (Enable::CEMC) radius = CEmc(g4Reco, radius);
249  if (Enable::BECAL) BECALSetup(g4Reco);
250  if (Enable::HCALIN) radius = HCalInner(g4Reco, radius, 4);
251  if (Enable::MAGNET) radius = Magnet(g4Reco, radius);
252  if (Enable::HCALOUT) radius = HCalOuter(g4Reco, radius, 4);
253  if (Enable::DIRC) DIRCSetup(g4Reco);
254  if (Enable::BTOF) BToFSetup(g4Reco);
255  if (Enable::BMMG) BMMGSetup(g4Reco);
256 
257  //Forward
258  if (Enable::FGEM) FGEMSetup(g4Reco);
259  if (Enable::FTTL) FTTLSetup(g4Reco);
260  if (Enable::FEMC) FEMCSetup(g4Reco);
261  if (Enable::DRCALO) DRCALOSetup(g4Reco);
262  if (Enable::FHCAL) FHCALSetup(g4Reco);
263  if (Enable::LFHCAL) LFHCALSetup(g4Reco);
264  if (Enable::RICH) RICHSetup(g4Reco);
265  if (Enable::TRD) TRDSetup(g4Reco);
266  if (Enable::HTOF) HTOFSetup(g4Reco);
267 
268  //Backward
269  if (Enable::ETTL) ETTLSetup(g4Reco);
270  if (Enable::EGEM) EGEMSetup(g4Reco);
271  if (Enable::EEMC) EEMCSetup(g4Reco);
272  if (Enable::EEMCH) EEMCHSetup(g4Reco);
273  if (Enable::EHCAL) EHCALSetup(g4Reco);
274  if (Enable::mRICH) mRICHSetup(g4Reco);
275  if (Enable::ETOF) ETOFSetup(g4Reco);
276 
277  //----------------------------------------
278  // sPHENIX forward flux return door
279  if (Enable::PLUGDOOR) PlugDoor(g4Reco);
280 
281  if (Enable::USER) UserDetector(g4Reco);
282 
283  //----------------------------------------
284  // BLACKHOLE if enabled, needs info from all previous sub detectors for dimensions
285  if (Enable::BLACKHOLE) BlackHole(g4Reco, radius);
286 
287  PHG4TruthSubsystem *truth = new PHG4TruthSubsystem();
288  g4Reco->registerSubsystem(truth);
289  // finally adjust the world size in case the default is too small
290  WorldSize(g4Reco, radius);
291 
292  se->registerSubsystem(g4Reco);
293  return 0;
294 }
295 
297 {
299 
300  PHG4DstCompressReco *compress = new PHG4DstCompressReco("PHG4DstCompressReco");
301  compress->AddHitContainer("G4HIT_PIPE");
302 
306  //
307  // compress->AddHitContainer("G4HIT_ZDC");
308  // compress->AddHitContainer("G4HIT_RomanPots");
309  compress->AddHitContainer("G4HIT_b0Truth");
310  compress->AddHitContainer("G4HIT_FIELDCAGE");
311 
312  compress->AddHitContainer("G4HIT_CEMC_ELECTRONICS");
313  compress->AddHitContainer("G4HIT_CEMC");
314  compress->AddHitContainer("G4HIT_ABSORBER_CEMC");
315  compress->AddHitContainer("G4HIT_CEMC_SPT");
316  compress->AddCellContainer("G4CELL_CEMC");
317  compress->AddTowerContainer("TOWER_SIM_CEMC");
318  compress->AddTowerContainer("TOWER_RAW_CEMC");
319  compress->AddTowerContainer("TOWER_CALIB_CEMC");
320 
321  compress->AddHitContainer("G4HIT_BECAL");
322  compress->AddHitContainer("G4HIT_ABSORBER_BECAL");
323  compress->AddCellContainer("G4CELL_BECAL");
324  compress->AddTowerContainer("TOWER_SIM_BECAL");
325  compress->AddTowerContainer("TOWER_RAW_BECAL");
326  compress->AddTowerContainer("TOWER_CALIB_BECAL");
327 
328  compress->AddHitContainer("G4HIT_HCALIN");
329  compress->AddHitContainer("G4HIT_ABSORBER_HCALIN");
330  compress->AddHitContainer("G4HIT_HCALIN_SPT");
331  compress->AddCellContainer("G4CELL_HCALIN");
332  compress->AddTowerContainer("TOWER_SIM_HCALIN");
333  compress->AddTowerContainer("TOWER_RAW_HCALIN");
334  compress->AddTowerContainer("TOWER_CALIB_HCALIN");
335 
336  compress->AddHitContainer("G4HIT_MAGNET");
337 
338  compress->AddHitContainer("G4HIT_HCALOUT");
339  compress->AddHitContainer("G4HIT_ABSORBER_HCALOUT");
340  compress->AddCellContainer("G4CELL_HCALOUT");
341  compress->AddTowerContainer("TOWER_SIM_HCALOUT");
342  compress->AddTowerContainer("TOWER_RAW_HCALOUT");
343  compress->AddTowerContainer("TOWER_CALIB_HCALOUT");
344 
345  compress->AddHitContainer("G4HIT_BH_1");
346  compress->AddHitContainer("G4HIT_BH_FORWARD_PLUS");
347  compress->AddHitContainer("G4HIT_BH_FORWARD_NEG");
348 
349  compress->AddHitContainer("G4HIT_FEMC");
350  compress->AddHitContainer("G4HIT_ABSORBER_FEMC");
351  compress->AddCellContainer("G4CELL_FEMC");
352  compress->AddTowerContainer("TOWER_SIM_FEMC");
353  compress->AddTowerContainer("TOWER_RAW_FEMC");
354  compress->AddTowerContainer("TOWER_CALIB_FEMC");
355 
356  compress->AddHitContainer("G4HIT_DRCALO");
357  compress->AddHitContainer("G4HIT_ABSORBER_DRCALO");
358  compress->AddCellContainer("G4CELL_DRCALO");
359  compress->AddTowerContainer("TOWER_SIM_DRCALO");
360  compress->AddTowerContainer("TOWER_RAW_DRCALO");
361  compress->AddTowerContainer("TOWER_CALIB_DRCALO");
362 
363  compress->AddHitContainer("G4HIT_FHCAL");
364  compress->AddHitContainer("G4HIT_ABSORBER_FHCAL");
365  compress->AddCellContainer("G4CELL_FHCAL");
366  compress->AddTowerContainer("TOWER_SIM_FHCAL");
367  compress->AddTowerContainer("TOWER_RAW_FHCAL");
368  compress->AddTowerContainer("TOWER_CALIB_FHCAL");
369 
370  compress->AddHitContainer("G4HIT_LFHCAL");
371  compress->AddHitContainer("G4HIT_ABSORBER_LFHCAL");
372  compress->AddCellContainer("G4CELL_LFHCAL");
373  compress->AddTowerContainer("TOWER_SIM_LFHCAL");
374  compress->AddTowerContainer("TOWER_RAW_LFHCAL");
375  compress->AddTowerContainer("TOWER_CALIB_LFHCAL");
376 
377  compress->AddHitContainer("G4HIT_EEMC");
378  compress->AddHitContainer("G4HIT_EEMC_glass");
379  compress->AddHitContainer("G4HIT_ABSORBER_EEMC");
380  compress->AddCellContainer("G4CELL_EEMC");
381  compress->AddTowerContainer("TOWER_SIM_EEMC");
382  compress->AddTowerContainer("TOWER_RAW_EEMC");
383  compress->AddTowerContainer("TOWER_CALIB_EEMC");
384 
385  compress->AddHitContainer("G4HIT_EHCAL");
386  compress->AddHitContainer("G4HIT_ABSORBER_EHCAL");
387  compress->AddTowerContainer("TOWER_SIM_EHCAL");
388  compress->AddTowerContainer("TOWER_RAW_EHCAL");
389  compress->AddTowerContainer("TOWER_CALIB_EHCAL");
390 
391  compress->AddHitContainer("G4HIT_B0ECAL");
392  compress->AddHitContainer("G4HIT_ABSORBER_B0ECAL");
393  compress->AddCellContainer("G4CELL_B0ECAL");
394  compress->AddTowerContainer("TOWER_SIM_B0ECAL");
395  compress->AddTowerContainer("TOWER_RAW_B0ECAL");
396  compress->AddTowerContainer("TOWER_CALIB_B0ECAL");
397 
398  compress->AddHitContainer("G4HIT_BWD");
399  compress->AddHitContainer("G4HIT_ABSORBER_BWD");
400  compress->AddCellContainer("G4CELL_BWD");
401  compress->AddTowerContainer("TOWER_SIM_BWD");
402  compress->AddTowerContainer("TOWER_RAW_BWD");
403  compress->AddTowerContainer("TOWER_CALIB_BWD");
404 
405  se->registerSubsystem(compress);
406 
407  return;
408 }
409 
411 {
412  if (out)
413  {
414  out->StripNode("G4HIT_PIPE");
415 
419  //
420  // out->StripNode("G4HIT_ZDC");
421  // out->StripNode("G4HIT_RomanPots");
422  out->StripNode("G4HIT_b0Truth");
423  out->StripNode("G4HIT_BWD");
424  out->StripNode("G4HIT_SVTXSUPPORT");
425  out->StripNode("G4HIT_CEMC_ELECTRONICS");
426  out->StripNode("G4HIT_CEMC");
427  out->StripNode("G4HIT_ABSORBER_CEMC");
428  out->StripNode("G4HIT_CEMC_SPT");
429  out->StripNode("G4CELL_CEMC");
430  out->StripNode("G4HIT_BECAL");
431  out->StripNode("G4CELL_BECAL");
432  out->StripNode("G4HIT_ABSORBER_BECAL");
433  out->StripNode("G4HIT_ABSORBER_HCALIN");
434  out->StripNode("G4HIT_HCALIN");
435  out->StripNode("G4HIT_HCALIN_SPT");
436  out->StripNode("G4CELL_HCALIN");
437  out->StripNode("G4HIT_MAGNET");
438  out->StripNode("G4HIT_HCALOUT");
439  out->StripNode("G4HIT_ABSORBER_HCALOUT");
440  out->StripNode("G4CELL_HCALOUT");
441  out->StripNode("G4HIT_BH_1");
442  out->StripNode("G4HIT_BH_FORWARD_PLUS");
443  out->StripNode("G4HIT_BH_FORWARD_NEG");
444 
445  out->StripNode("G4HIT_FEMC");
446  out->StripNode("G4HIT_ABSORBER_FEMC");
447  out->StripNode("G4HIT_FHCAL");
448  out->StripNode("G4HIT_ABSORBER_FHCAL");
449  out->StripNode("G4CELL_FEMC");
450  out->StripNode("G4HIT_DRCALO");
451  out->StripNode("G4HIT_ABSORBER_DRCALO");
452  out->StripNode("G4CELL_DRCALO");
453  out->StripNode("G4CELL_FHCAL");
454  out->StripNode("G4HIT_LFHCAL");
455  out->StripNode("G4HIT_ABSORBER_LFHCAL");
456  out->StripNode("G4CELL_LFHCAL");
457  out->StripNode("G4HIT_EEMC");
458  out->StripNode("G4HIT_EEMC_glass");
459  out->StripNode("G4HIT_ABSORBER_EEMC");
460  out->StripNode("G4CELL_EEMC");
461  out->StripNode("G4HIT_EHCAL");
462  out->StripNode("G4HIT_ABSORBER_EHCAL");
463  out->StripNode("G4CELL_EHCAL");
464  out->StripNode("G4CELL_B0ECAL");
465  out->StripNode("G4CELL_BWD");
466 
467  }
468 }
469 #endif