Class Reference for E1039 Core & Analysis Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4_Target.C
Go to the documentation of this file.
1 #pragma once
2 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,00,0)
3 #include <g4detectors/PHG4E1039InsensSubsystem.h>
9 class SubsysReco;
10 R__LOAD_LIBRARY(libg4detectors)
11 #endif
12 
13 using namespace std;
14 
16  PHG4Reco *g4Reco,
17  const bool do_collimator = true,
18  const bool do_target = true,
19  const bool do_e1039_shielding = true,
20  const double target_coil_pos_z = -300,
21  const double target_l = 7.9,
22  const double target_z = 0.,
23  const int use_g4steps = 1
24 ) {
25 
26  const double collimator_pos_z = target_coil_pos_z - 302.36;
27 
28  //gSystem->Load("libfun4all.so");
29  //gSystem->Load("libg4detectors");
30  //gSystem->Load("libg4testbench");
31 
32  //Fun4AllServer *se = Fun4AllServer::instance();
33  //PHG4Reco *g4Reco = (PHG4Reco *) se->getSubsysReco("PHG4RECO");
34 
35  if(do_collimator) {
36  PHG4CollimatorSubsystem* collimator = new PHG4CollimatorSubsystem("Collimator",0);
37  collimator->SuperDetector("Collimator");
38  collimator->set_double_param("place_z", collimator_pos_z);//-302.36 cm
39  collimator->set_double_param("size_z",121.92);
40  collimator->SetActive(1);
41  g4Reco->registerSubsystem(collimator);
42  }
43 
44  if(do_target) {
46  coil_0->SuperDetector("Coil");
47  coil_0->set_double_param("rot_x", 90.);
48  coil_0->set_double_param("rot_y", 0.);
49  coil_0->set_double_param("rot_z", 0.);
50  coil_0->set_double_param("place_x", 0.);
51  coil_0->set_double_param("place_y", (22.7+4.)/2);
52  coil_0->set_double_param("place_z", target_coil_pos_z);
53  coil_0->set_int_param("use_g4steps", use_g4steps);
54  coil_0->SetActive(1); // it is an active volume - save G4Hits
55  g4Reco->registerSubsystem(coil_0);
56 
58  coil_1->SuperDetector("Coil");
59  coil_1->set_double_param("rot_x", -90.);
60  coil_1->set_double_param("rot_y", 0.);
61  coil_1->set_double_param("rot_z", 0.);
62  coil_1->set_double_param("place_x", 0.);
63  coil_1->set_double_param("place_y", -(22.7+4.)/2);
64  coil_1->set_double_param("place_z", target_coil_pos_z);
65  coil_1->set_int_param("use_g4steps", use_g4steps);
66  coil_1->SetActive(1); // it is an active volume - save G4Hits
67  g4Reco->registerSubsystem(coil_1);
68 
69  PHG4CylinderSubsystem* target = new PHG4CylinderSubsystem("Target", 0);
70  target->SuperDetector("Target");
71  target->set_double_param("length", target_l);
72  target->set_double_param("rot_x", 0.);
73  target->set_double_param("rot_y", 0.);
74  target->set_double_param("rot_z", 0.);
75  target->set_double_param("place_x", 0.);
76  target->set_double_param("place_y", 0.);
77  target->set_double_param("place_z", target_coil_pos_z + target_z);
78  target->set_double_param("radius", 0.);
79  target->set_double_param("thickness", (2.)/2);
80  target->set_string_param("material", "Target"); // material of target
81  target->set_int_param("lengthviarapidity", 0);
82  target->set_int_param("use_g4steps", use_g4steps);
83  target->SetActive(1); // it is an active volume - save G4Hits
84  g4Reco->registerSubsystem(target);
85  }
86 
87  if(do_e1039_shielding) {
88  const double inch = 2.54;
89 
90  PHG4SquareTubeSubsystem* shielding = NULL;
91 
92  shielding = new PHG4SquareTubeSubsystem("Shielding1",0);
93  shielding->set_string_param("hole_type","circle");
94  shielding->set_double_param("place_x",0);
95  shielding->set_double_param("place_y",0);
96  shielding->set_double_param("place_z", (-18*inch/2.-(2.15+11.38+ 36)*inch)); // I have added all the z length and put the z into the center of mass of the block.
97  shielding->set_double_param("size_x",250*inch); //the info is not given?
98  shielding->set_double_param("size_y",200*inch); //the info is not given?
99  shielding->set_double_param("size_z",(18-0.001)*inch);
100  shielding->set_double_param("inner_diameter",4*inch);
101  shielding->set_string_param("material","G4_CONCRETE");
102  g4Reco->registerSubsystem(shielding);
103 
104  shielding = new PHG4SquareTubeSubsystem("Shielding2",0);
105  shielding->set_string_param("hole_type","circle");
106  shielding->set_double_param("place_x",0);
107  shielding->set_double_param("place_y",0);
108  shielding->set_double_param("place_z",(-36*inch/2.-(2.15+11.38)*inch)); // I have added all the z length and put the z into the center of mass of the block.
109  shielding->set_double_param("size_x",250*inch); //the info is not given?
110  shielding->set_double_param("size_y",200*inch); //the info is not given?
111  shielding->set_double_param("size_z",36*inch);
112  shielding->set_double_param("inner_diameter",6*inch);
113  shielding->set_string_param("material","G4_CONCRETE");
114  g4Reco->registerSubsystem(shielding);
115 
116  shielding = new PHG4SquareTubeSubsystem("Shielding3",0);
117  shielding->set_double_param("place_x",0);
118  shielding->set_double_param("place_y",0);
119  shielding->set_double_param("place_z",-11.38*inch/2.);
120  shielding->set_double_param("size_x",50*inch);
121  shielding->set_double_param("size_y",50*inch);
122  shielding->set_double_param("size_z",(11.38-0.001)*inch);
123  shielding->set_double_param("inner_size_x",6*inch);
124  shielding->set_double_param("inner_size_y",6*inch);
125  shielding->set_string_param("material","G4_CONCRETE");
126  g4Reco->registerSubsystem(shielding);
127  }
128 
129  return;
130 }
131 
Runs G4 as a subsystem.
Definition: PHG4Reco.h:38
void set_int_param(const std::string &name, const int ival)
void SuperDetector(const std::string &name)
void set_double_param(const std::string &name, const double dval)
#define NULL
Definition: Pdb.h:9
void SetupTarget(PHG4Reco *g4Reco, const double target_coil_pos_z=-300, const double target_l=7.9, const double target_z=0., const int use_g4steps=1, const int register_hits=0)
Definition: G4_Target.C:10
void set_string_param(const std::string &name, const std::string &sval)
void SetActive(const int i=1)
void registerSubsystem(PHG4Subsystem *subsystem)
register subsystem
Definition: PHG4Reco.h:65