EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Fun4All_G4_Momentum_Projection_Calorimeters.C
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Fun4All_G4_Momentum_Projection_Calorimeters.C
1 #ifndef FUN4ALL_G4_MOMENTUM_PROJECTION_CALORIMETERS_C
2 #define FUN4ALL_G4_MOMENTUM_PROJECTION_CALORIMETERS_C
3 
4 #include "G4_CEmc_Spacal.C"
5 
7 
10 
12 #include <g4main/PHG4ParticleGun.h>
13 #include <g4main/PHG4Reco.h>
15 
20 #include <fun4all/Fun4AllServer.h>
21 #include <fun4all/SubsysReco.h>
22 
23 #include <phool/recoConsts.h>
24 
25 R__LOAD_LIBRARY(libfun4all.so)
26 R__LOAD_LIBRARY(libg4testbench.so)
27 R__LOAD_LIBRARY(libg4detectors.so)
28 R__LOAD_LIBRARY(libg4trackfastsim.so)
29 
30 int Fun4All_G4_Momentum_Projection_Calorimeters(const int nEvents = 1000, const string &evalfile = "FastTrackingEval.root", const string &outfile = "")
31 {
33  // Make the Server
36  se->Verbosity(0);
37 
39  // if you want to use a fixed seed for reproducible results
40  // rc->set_IntFlag("RANDOMSEED", 12345); // if you want to use a fixed seed
41  // PHG4ParticleGenerator generates particle
42  // distributions in eta/phi/mom range
43  PHG4ParticleGenerator *gen = new PHG4ParticleGenerator("PGENERATOR");
44  gen->set_name("pi-");
45  gen->set_vtx(0, 0, 0);
46  gen->set_eta_range(-1, 1.);
47  gen->set_mom_range(2, 2); // GeV/c
48  gen->set_phi_range(0., 90. / 180. * TMath::Pi()); // 0-90 deg
49  se->registerSubsystem(gen);
50 
51  PHG4Reco *g4Reco = new PHG4Reco();
52  g4Reco->set_field(1.5); // 1.5 T solenoidal field
53 
54  double si_thickness[6] = {0.02, 0.02, 0.0625, 0.032, 0.032, 0.032};
55  double svxrad[6] = {2.71, 4.63, 11.765, 25.46, 41.38, 63.66};
56  double length[6] = {20., 20., 36., -1., -1., -1.}; // -1 use eta coverage to determine length
58  // here is our silicon:
59  for (int ilayer = 0; ilayer < 6; ilayer++)
60  {
61  cyl = new PHG4CylinderSubsystem("SVTX", ilayer);
62  cyl->set_double_param("radius", svxrad[ilayer]);
63  cyl->set_string_param("material", "G4_Si");
64  cyl->set_double_param("thickness", si_thickness[ilayer]);
65  cyl->SetActive();
66  cyl->SuperDetector("SVTX");
67  if (length[ilayer] > 0)
68  {
69  cyl->set_double_param("length", length[ilayer]);
70  }
71  g4Reco->registerSubsystem(cyl);
72  }
73 
74  CEmc(g4Reco, 25, 4);
75 
76  // Black hole swallows everything - prevent loopers from returning
77  // to inner detectors
78  cyl = new PHG4CylinderSubsystem("BlackHole", 0);
79  cyl->set_double_param("radius", 100); // 80 cm
80  cyl->set_double_param("thickness", 0.1); // does not matter (but > 0)
81  cyl->SetActive();
82  cyl->BlackHole(); // eats everything
83  g4Reco->registerSubsystem(cyl);
84 
86  g4Reco->registerSubsystem(truth);
87 
88  se->registerSubsystem(g4Reco);
89 
90  CEMC_Cells();
91  CEMC_Towers();
92 
93  //---------------------------
94  // fast pattern recognition and full Kalman filter
95  // output evaluation file for truth track and reco tracks are PHG4TruthInfoContainer
96  //---------------------------
97  PHG4TrackFastSim *kalman = new PHG4TrackFastSim("PHG4TrackFastSim");
98  kalman->set_use_vertex_in_fitting(false);
99  kalman->set_sub_top_node_name("SVTX");
100  kalman->set_trackmap_out_name("SvtxTrackMap");
101 
102  // add Si Trtacker
103  kalman->add_phg4hits(
104  "G4HIT_SVTX", // const std::string& phg4hitsNames,
105  PHG4TrackFastSim::Cylinder, // const DETECTOR_TYPE phg4dettype,
106  300e-4, // radial-resolution [cm]
107  30e-4, // azimuthal-resolution [cm]
108  1, // z-resolution [cm]
109  1, // efficiency,
110  0 // noise hits
111  );
112 
113  kalman->add_state_name("CEMC");
114 
115  se->registerSubsystem(kalman);
116 
117  PHG4TrackFastSimEval *fast_sim_eval = new PHG4TrackFastSimEval("FastTrackingEval");
118  fast_sim_eval->set_filename(evalfile);
119  fast_sim_eval->AddProjection("CEMC");
120 
121  se->registerSubsystem(fast_sim_eval);
122 
123  //---------------------------
124  // output DST file for further offlien analysis
125  //---------------------------
126  if (!outfile.empty())
127  {
128  Fun4AllOutputManager *out = new Fun4AllDstOutputManager("DSTOUT", outfile);
129  se->registerOutputManager(out);
130  }
132  se->registerInputManager(in);
133 
134  if (nEvents > 0)
135  {
136  se->run(nEvents);
137  // finish job - close and save output files
138  se->End();
139  std::cout << "All done" << std::endl;
140 
141  // cleanup - delete the server and exit
142  delete se;
143  gSystem->Exit(0);
144  }
145  return 0;
146 }
147 
148 PHG4ParticleGenerator *get_gen(const char *name = "PGENERATOR")
149 {
152  return pgun;
153 }
154 
155 #endif