source: trunk/examples/novice/gemc/src/run_conditions.cc @ 887

Last change on this file since 887 was 807, checked in by garnier, 16 years ago

update

File size: 3.0 KB
Line 
1// %%%%%%%%%%%%%
2// gemc headers
3// %%%%%%%%%%%%%
4#include "run_conditions.h"
5
6run_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
89run_conditions::~run_conditions(){}
90
91
92void 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
99void 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
Note: See TracBrowser for help on using the repository browser.