GEMC  1.8
Geant4 Monte-Carlo Framework
run_conditions.cc
Go to the documentation of this file.
1 // %%%%%%%%%%%%%
2 // gemc headers
3 // %%%%%%%%%%%%%
4 #include "run_conditions.h"
5 #include "string_utilities.h"
6 
8 {
9  string hd_msg = gemcOpt.args["LOG_MSG"].args + " gcard: >> " ;
10 
11  string file = gemcOpt.args["gcard"].args;
12  if(file=="no") return;
13 
14  QFile gcard(file.c_str());
15 
16  if (!domDocument.setContent(&gcard))
17  {
18  gcard.close();
19  cout << hd_msg << " gcard format is wrong - check XML syntax. Exiting." << endl;
20  exit(0);
21  }
22  gcard.close();
23 
24  QDomElement docElem = domDocument.documentElement();
25  QDomNode n;
26 
27 
28  n = docElem.firstChild();
29  while(!n.isNull())
30  {
31  QDomElement e = n.toElement();
32  if(!e.isNull())
33  if(gemc_tostring(e.tagName()) == "sqltable")
34  {
35  string table_name = gemc_tostring(e.attributeNode("name").value());
36  gTab_Vec.push_back(table_name);
37  }
38  n = n.nextSibling();
39  }
40 
41 
42  n = docElem.firstChild();
43  while(!n.isNull())
44  {
45  QDomElement e = n.toElement();
46  if(!e.isNull())
47  if(gemc_tostring(e.tagName()) == "detector")
48  {
49  gcard_detector gdet;
50  gdet.set_position("0*cm", "0*cm", "0*cm");
51  gdet.set_rotation("0*deg", "0*deg", "0*deg");
52 
53  string det_name = gemc_tostring(e.attributeNode("name").value());
54 
55  QDomNode nn = e.firstChild();
56  while(!nn.isNull())
57  {
58  QDomElement ee = nn.toElement();
59  if(!ee.isNull())
60  {
61  if(gemc_tostring(ee.tagName()) == "position")
62  {
63  gdet.set_position(gemc_tostring(ee.attributeNode("x").value()),
64  gemc_tostring(ee.attributeNode("y").value()),
65  gemc_tostring(ee.attributeNode("z").value()) );
66  }
67  if(gemc_tostring(ee.tagName()) == "rotation")
68  {
69  gdet.set_rotation(gemc_tostring(ee.attributeNode("x").value()),
70  gemc_tostring(ee.attributeNode("y").value()),
71  gemc_tostring(ee.attributeNode("z").value()) );
72  }
73  if(gemc_tostring(ee.tagName()) == "existence")
74  {
75  gdet.set_existance(gemc_tostring(ee.attributeNode("exist").value()));
76  }
77  }
78 
79  nn = nn.nextSibling();
80  }
81  gDet_Map[det_name] = gdet;
82 
83  }
84 
85  n = n.nextSibling();
86  }
87 
88  cout << hd_msg << " Importing SQL tables: " << endl << endl;
89  for(unsigned int i=0; i<gTab_Vec.size(); i++)
90  cout << " \"" << gTab_Vec[i] << "\"" << endl ;
91  cout << endl;
92 }
93 
95 
96 
97 void gcard_detector::set_position(string X, string Y, string Z)
98 {
99  pos.setX(get_number(X));
100  pos.setY(get_number(Y));
101  pos.setZ(get_number(Z));
102 }
103 
104 void gcard_detector::set_rotation(string X, string Y, string Z)
105 {
106  rot = G4RotationMatrix(G4ThreeVector(1, 0, 0),
107  G4ThreeVector(0, 1, 0),
108  G4ThreeVector(0, 0, 1));
109 
110  rot.rotateX(get_number(X));
111  rot.rotateY(get_number(Y));
112  rot.rotateZ(get_number(Z));
113 
114  vrot.setX(get_number(X));
115  vrot.setY(get_number(Y));
116  vrot.setZ(get_number(Z));
117 
118 }
119 
121 {
122  if(exist == "no" || exist == "NO" || exist == "No")
123  is_present = 0;
124 }
125 
126 
run_conditions(gemc_opts)
vector< string > gTab_Vec
Vector of SQL tables names.
void set_position(string X, string Y, string Z)
void set_existance(string exist)
string gemc_tostring(QString input)
map< string, gcard_detector > gDet_Map
Map of gcard_detector. Map Key = detector name.
map< string, opts > args
Options map.
Definition: usage.h:68
void set_rotation(string X, string Y, string Z)
double get_number(string)
Returns dimension from string, i.e. 100*cm.