1 | // %%%%%%%%%%%%% |
---|
2 | // gemc headers |
---|
3 | // %%%%%%%%%%%%% |
---|
4 | #include "run_conditions.h" |
---|
5 | |
---|
6 | run_conditions::run_conditions(gemc_opts gemcOpt) |
---|
7 | { |
---|
8 | string hd_msg = gemcOpt.args["LOG_MSG"].args + " gcard: >> " ; |
---|
9 | |
---|
10 | string file = gemcOpt.args["gcard"].args; |
---|
11 | if(file=="no") return; |
---|
12 | |
---|
13 | QFile gcard(file.c_str()); |
---|
14 | |
---|
15 | if (!domDocument.setContent(&gcard)) |
---|
16 | { |
---|
17 | gcard.close(); |
---|
18 | cout << hd_msg << " gcard format is wrong - check XML syntax. Exiting." << endl; |
---|
19 | return; |
---|
20 | } |
---|
21 | gcard.close(); |
---|
22 | |
---|
23 | QDomElement docElem = domDocument.documentElement(); |
---|
24 | QDomNode n; |
---|
25 | |
---|
26 | |
---|
27 | n = docElem.firstChild(); |
---|
28 | while(!n.isNull()) |
---|
29 | { |
---|
30 | QDomElement e = n.toElement(); |
---|
31 | if(!e.isNull()) |
---|
32 | if(e.tagName().toStdString() == "sqltable") |
---|
33 | { |
---|
34 | string table_name = e.attributeNode("name").value().toStdString(); |
---|
35 | gTab_Vec.push_back(table_name); |
---|
36 | } |
---|
37 | n = n.nextSibling(); |
---|
38 | } |
---|
39 | |
---|
40 | |
---|
41 | n = docElem.firstChild(); |
---|
42 | while(!n.isNull()) |
---|
43 | { |
---|
44 | QDomElement e = n.toElement(); |
---|
45 | if(!e.isNull()) |
---|
46 | if(e.tagName().toStdString() == "detector") |
---|
47 | { |
---|
48 | gcard_detector gdet; |
---|
49 | gdet.set_position("0*cm", "0*cm", "0*cm"); |
---|
50 | gdet.set_rotation("0*deg", "0*deg", "0*deg"); |
---|
51 | |
---|
52 | string det_name = e.attributeNode("name").value().toStdString(); |
---|
53 | |
---|
54 | QDomNode nn = e.firstChild(); |
---|
55 | while(!nn.isNull()) |
---|
56 | { |
---|
57 | QDomElement ee = nn.toElement(); |
---|
58 | if(!ee.isNull()) |
---|
59 | { |
---|
60 | if(ee.tagName().toStdString() == "position") |
---|
61 | { |
---|
62 | gdet.set_position(ee.attributeNode("x").value().toStdString(), |
---|
63 | ee.attributeNode("y").value().toStdString(), |
---|
64 | ee.attributeNode("z").value().toStdString()); |
---|
65 | } |
---|
66 | if(ee.tagName().toStdString() == "rotation") |
---|
67 | { |
---|
68 | gdet.set_rotation(ee.attributeNode("x").value().toStdString(), |
---|
69 | ee.attributeNode("y").value().toStdString(), |
---|
70 | ee.attributeNode("z").value().toStdString()); |
---|
71 | } |
---|
72 | } |
---|
73 | |
---|
74 | nn = nn.nextSibling(); |
---|
75 | } |
---|
76 | gDet_Map[det_name] = gdet; |
---|
77 | |
---|
78 | } |
---|
79 | |
---|
80 | n = n.nextSibling(); |
---|
81 | } |
---|
82 | |
---|
83 | cout << hd_msg << " Importing SQL tables: " << endl << endl; |
---|
84 | for(int i=0; i<gTab_Vec.size(); i++) |
---|
85 | cout << " \"" << gTab_Vec[i] << "\"" << endl ; |
---|
86 | cout << endl; |
---|
87 | } |
---|
88 | |
---|
89 | run_conditions::~run_conditions(){} |
---|
90 | |
---|
91 | |
---|
92 | void gcard_detector::set_position(string X, string Y, string Z) |
---|
93 | { |
---|
94 | pos.setX(get_number(X)); |
---|
95 | pos.setY(get_number(Y)); |
---|
96 | pos.setZ(get_number(Z)); |
---|
97 | } |
---|
98 | |
---|
99 | void gcard_detector::set_rotation(string X, string Y, string Z) |
---|
100 | { |
---|
101 | rot = G4RotationMatrix(G4ThreeVector(1, 0, 0), |
---|
102 | G4ThreeVector(0, 1, 0), |
---|
103 | G4ThreeVector(0, 0, 1)); |
---|
104 | |
---|
105 | rot.rotateX(get_number(X)); |
---|
106 | rot.rotateY(get_number(Y)); |
---|
107 | rot.rotateZ(get_number(Z)); |
---|
108 | } |
---|
109 | |
---|
110 | |
---|