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>
8 class SubsysReco;
9 R__LOAD_LIBRARY(libg4detectors)
10 #endif
11 
12 using namespace std;
13 
15  PHG4Reco *g4Reco,
16  const bool do_collimator = true,
17  const bool do_target = true,
18  const bool do_e1039_shielding = true,
19  const double target_coil_pos_z = -300,
20  const double target_l = 7.9,
21  const double target_z = 0.,
22  const int use_g4steps = 1
23 ) {
24 
25  const double collimator_pos_z = target_coil_pos_z - 302.36;
26 
27  //gSystem->Load("libfun4all.so");
28  //gSystem->Load("libg4detectors");
29  //gSystem->Load("libg4testbench");
30 
31  //Fun4AllServer *se = Fun4AllServer::instance();
32  //PHG4Reco *g4Reco = (PHG4Reco *) se->getSubsysReco("PHG4RECO");
33 
34  if(do_collimator) {
35  PHG4CollimatorSubsystem* collimator = new PHG4CollimatorSubsystem("Collimator",0);
36  collimator->SuperDetector("Collimator");
37  collimator->set_double_param("place_z", collimator_pos_z);//-302.36 cm
38  collimator->set_double_param("size_z",121.92);
39  collimator->SetActive(1);
40  g4Reco->registerSubsystem(collimator);
41  }
42 
43  if(do_target) {
45  coil_0->SuperDetector("Coil");
46  coil_0->set_double_param("rot_x", 90.);
47  coil_0->set_double_param("rot_y", 0.);
48  coil_0->set_double_param("rot_z", 0.);
49  coil_0->set_double_param("place_x", 0.);
50  coil_0->set_double_param("place_y", (22.7+4.)/2);
51  coil_0->set_double_param("place_z", target_coil_pos_z);
52  coil_0->set_int_param("use_g4steps", use_g4steps);
53  coil_0->SetActive(1); // it is an active volume - save G4Hits
54  g4Reco->registerSubsystem(coil_0);
55 
57  coil_1->SuperDetector("Coil");
58  coil_1->set_double_param("rot_x", -90.);
59  coil_1->set_double_param("rot_y", 0.);
60  coil_1->set_double_param("rot_z", 0.);
61  coil_1->set_double_param("place_x", 0.);
62  coil_1->set_double_param("place_y", -(22.7+4.)/2);
63  coil_1->set_double_param("place_z", target_coil_pos_z);
64  coil_1->set_int_param("use_g4steps", use_g4steps);
65  coil_1->SetActive(1); // it is an active volume - save G4Hits
66  g4Reco->registerSubsystem(coil_1);
67 
68  PHG4CylinderSubsystem* target = new PHG4CylinderSubsystem("Target", 0);
69  target->SuperDetector("Target");
70  target->set_double_param("length", target_l);
71  target->set_double_param("rot_x", 0.);
72  target->set_double_param("rot_y", 0.);
73  target->set_double_param("rot_z", 0.);
74  target->set_double_param("place_x", 0.);
75  target->set_double_param("place_y", 0.);
76  target->set_double_param("place_z", target_coil_pos_z + target_z);
77  target->set_double_param("radius", 0.);
78  target->set_double_param("thickness", (2.)/2);
79  target->set_string_param("material", "Target"); // material of target
80  target->set_int_param("lengthviarapidity", 0);
81  target->set_int_param("use_g4steps", use_g4steps);
82  target->SetActive(1); // it is an active volume - save G4Hits
83  g4Reco->registerSubsystem(target);
84  }
85 
86  if(do_e1039_shielding) {
87  const double inch = 2.54;
88 
89  PHG4SquareTubeSubsystem* shielding = NULL;
90 
91  shielding = new PHG4SquareTubeSubsystem("Shielding1",0);
92  shielding->set_string_param("hole_type","circle");
93  shielding->set_double_param("place_x",0);
94  shielding->set_double_param("place_y",0);
95  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.
96  shielding->set_double_param("size_x",250*inch); //the info is not given?
97  shielding->set_double_param("size_y",200*inch); //the info is not given?
98  shielding->set_double_param("size_z",(18-0.001)*inch);
99  shielding->set_double_param("inner_diameter",4*inch);
100  shielding->set_string_param("material","G4_CONCRETE");
101  g4Reco->registerSubsystem(shielding);
102 
103  shielding = new PHG4SquareTubeSubsystem("Shielding2",0);
104  shielding->set_string_param("hole_type","circle");
105  shielding->set_double_param("place_x",0);
106  shielding->set_double_param("place_y",0);
107  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.
108  shielding->set_double_param("size_x",250*inch); //the info is not given?
109  shielding->set_double_param("size_y",200*inch); //the info is not given?
110  shielding->set_double_param("size_z",36*inch);
111  shielding->set_double_param("inner_diameter",6*inch);
112  shielding->set_string_param("material","G4_CONCRETE");
113  g4Reco->registerSubsystem(shielding);
114 
115  shielding = new PHG4SquareTubeSubsystem("Shielding3",0);
116  shielding->set_double_param("place_x",0);
117  shielding->set_double_param("place_y",0);
118  shielding->set_double_param("place_z",-11.38*inch/2.);
119  shielding->set_double_param("size_x",50*inch);
120  shielding->set_double_param("size_y",50*inch);
121  shielding->set_double_param("size_z",(11.38-0.001)*inch);
122  shielding->set_double_param("inner_size_x",6*inch);
123  shielding->set_double_param("inner_size_y",6*inch);
124  shielding->set_string_param("material","G4_CONCRETE");
125  g4Reco->registerSubsystem(shielding);
126  }
127 
128  return;
129 }
130 
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