Class Reference for E1039 Core & Analysis Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4_SensitiveDetectors.C
Go to the documentation of this file.
1 #include <string>
2 
3 #define LogDebug(exp) std::cout<<"DEBUG: " <<__FILE__<<": "<<__LINE__<<": "<< exp << std::endl
4 
5 using namespace std;
6 
7 class SolidParam {
8 public:
9  SolidParam(int iid, string iname, double ixLength, double iyLength, double izLength):
10  id(iid), name(iname), xLength(ixLength), yLength(iyLength), zLength(izLength)
11 {};
12  int id;
13  string name;
14  double xLength;
15  double yLength;
16  double zLength;
17 };
18 
20  TSQLServer *server,
21  const string &pvName,
22  int &lvID,
23  double *place,
24  double *rot
25  ){
26  char query[2000];
27  sprintf(query,
28  "SELECT lvID, xRel, yRel, zRel, rotX, rotY, rotZ"
29  " FROM PhysicalVolumes WHERE pvName LIKE '%s_%%'",
30  pvName.c_str()
31  );
32  //LogDebug(query);
33  TSQLResult *res = server->Query(query);
34  int nrow = res->GetRowCount();
35  if (nrow!=1) {
36  LogDebug("nrow!=1");
37  }
38  TSQLRow *row = res->Next();
39  lvID = atoi((*row)[0]);
40  place[0] = atof((*row)[1]);
41  place[1] = atof((*row)[2]);
42  place[2] = atof((*row)[3]);
43  rot[0] = atof((*row)[4]);
44  rot[1] = atof((*row)[5]);
45  rot[2] = atof((*row)[6]);
46  return;
47 }
48 
50  TSQLServer *server,
51  const int lvID,
52  int &sID
53  ){
54  char query[2000];
55  sprintf(query,
56  "SELECT sID"
57  " FROM LogicalVolumes WHERE lvID = %i",
58  lvID
59  );
60  //LogDebug(query);
61  TSQLResult *res = server->Query(query);
62  int nrow = res->GetRowCount();
63  if (nrow!=1) {
64  LogDebug("nrow!=1");
65  }
66  TSQLRow *row = res->Next();
67  sID = atoi((*row)[0]);
68  return;
69 }
70 
72  TSQLServer *server,
73  const int sID,
74  double *size
75  ){
76  char query[2000];
77  sprintf(query,
78  " SELECT xLength, yLength, zLength "
79  " FROM SolidBoxes WHERE sID = %i",
80  sID
81  );
82  //LogDebug(query);
83  TSQLResult *res = server->Query(query);
84  int nrow = res->GetRowCount();
85  if (nrow!=1) {
86  LogDebug("nrow!=1");
87  }
88  TSQLRow *row = res->Next();
89  size[0] = atof((*row)[0]);
90  size[1] = atof((*row)[1]);
91  size[2] = atof((*row)[2]);
92  return;
93 }
94 
96  PHG4Reco *g4Reco,
97  std::string _server_name = "seaquestdb01.fnal.gov",
98  int _port = 3310,
99  std::string _user_name = "seaguest",
100  std::string _password = "qqbar2mu+mu-",
101  std::string _input_shcema = "geometry_G17_run3"
102  ){
103  char serverUrl[200];
104  sprintf(serverUrl, "mysql://%s:%d", _server_name.c_str(), _port);
105  TSQLServer *server = TSQLServer::Connect(serverUrl, _user_name.c_str(), _password.c_str());
106 
107  char query[2000];
108  sprintf(query, "USE %s", _input_shcema.c_str());
109 
110  if(!server->Exec(query))
111  {
112  std::cout << "MySQLSvc: working schema does not exist! Will exit..." << std::endl;
114  }
115 
116  vector<string> chamber_names;
117  chamber_names.push_back("C1X");
118  chamber_names.push_back("C1V");
119  chamber_names.push_back("C1U");
120  chamber_names.push_back("C2U");
121  chamber_names.push_back("C2X");
122  chamber_names.push_back("C2V");
123  chamber_names.push_back("C3T");
124  chamber_names.push_back("C3B");
125 
126  chamber_names.push_back("osta4");
127  chamber_names.push_back("osta3");
128  chamber_names.push_back("osta2");
129  chamber_names.push_back("osta1");
130 
131  chamber_names.push_back("H1y");
132  chamber_names.push_back("H1x");
133  chamber_names.push_back("H2y");
134  chamber_names.push_back("H2x");
135  chamber_names.push_back("H3x");
136 
137  chamber_names.push_back("P1V");
138  chamber_names.push_back("P2H");
139  chamber_names.push_back("P2V");
140  chamber_names.push_back("P1H");
141 
142  chamber_names.push_back("H4y1L");
143  chamber_names.push_back("H4y1R");
144  chamber_names.push_back("H4y2L");
145  chamber_names.push_back("H4y2R");
146  chamber_names.push_back("H4xT");
147  chamber_names.push_back("H4xB");
148 
149  for(int i=0; i<chamber_names.size(); ++i){
150  string name = chamber_names[i];
151  double size[3];
152  double place[3];
153  double rot[3];
154  int lvID;
155  int sID;
156 
157  //LogDebug("");
158  get_phys_param(server, name, lvID, place, rot);
159  //cout
160  //<< "lvID: " << lvID
161  //<< " {" << place[0] << ", " << place[1] << ", " << place[2] << "} "
162  //<< " {" << rot[0] << ", " << rot[1] << ", " << rot[2] << "} "
163  //<< endl;
164 
165  //LogDebug("");
166  get_logi_param(server, lvID, sID);
167 
168  //LogDebug("");
169  get_soli_param(server, sID, size);
170  //cout
171  //<< "sID: " << sID
172  //<< " {" << size[0] << ", " << size[1] << ", " << size[2] << "} "
173  //<< endl;
174 
175  PHG4BlockSubsystem *box = new PHG4BlockSubsystem(name.c_str(), 0);
176  box->SuperDetector(name.c_str());
177  box->set_double_param("size_x", size[0]);
178  box->set_double_param("size_y", size[1]);
179  box->set_double_param("size_z", size[2]);
180  box->set_double_param("place_x", place[0]);
181  box->set_double_param("place_y", place[1]);
182  box->set_double_param("place_z", place[2]);
183  box->set_string_param("material", "G4_Si");// G4_Si, G4_AIR
184  box->SetActive(1);
185  g4Reco->registerSubsystem(box);
186  }
187 
188 
189  return;
190 }
Runs G4 as a subsystem.
Definition: PHG4Reco.h:38
void SetupSensitiveDetectors(PHG4Reco *g4Reco, bool toggle_dphodo=true, bool toggle_dc1=false, std::string chamberGas="SQ_ArCO2", std::string hodoMat="SQ_Scintillator", const int verbosity=0)
void get_phys_param(TSQLServer *server, const string &pvName, int &lvID, double *place, double *rot)
void SuperDetector(const std::string &name)
void set_double_param(const std::string &name, const double dval)
void get_soli_param(TSQLServer *server, const int sID, double *size)
#define LogDebug(exp)
void set_string_param(const std::string &name, const std::string &sval)
void get_logi_param(TSQLServer *server, const int lvID, int &sID)
void SetActive(const int i=1)
void registerSubsystem(PHG4Subsystem *subsystem)
register subsystem
Definition: PHG4Reco.h:65