[807] | 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 | |
---|