CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTSurvey.cc
Go to the documentation of this file.
1 #include <fstream>
2 
8 
10 #include <iostream>
11 
12 DTSurvey::DTSurvey(const std::string& Wheel, const std::string& Chambers, int n) {
13 
14  nameOfWheelInfoFile = Wheel;
15  nameOfChamberInfoFile = Chambers;
16  id = n;
17 
18  FillWheelInfo();
19 }
20 
21 
23  delete [] chambers;
24 }
25 
26 
28  for(int stationCounter = 0; stationCounter < 4; stationCounter++) {
29  for(int sectorCounter = 0; sectorCounter < 14; sectorCounter++) {
30  if(chambers[stationCounter][sectorCounter]->getNumberPoints() > 2) {
31  chambers[stationCounter][sectorCounter]->compute();
32  }
33  }
34  }
35 }
36 
37 
38 const DTSurveyChamber * DTSurvey::getChamber(int station, int sector) const {return chambers[station][sector];}
39 
41 
42  //Create the chambers
43  chambers = new DTSurveyChamber ** [4];
44  for (int cont_stat = 0; cont_stat < 4; cont_stat++) {
45  chambers[cont_stat] = new DTSurveyChamber * [14];
46  for(int cont_sect = 0; cont_sect < 14; cont_sect++) {
47  DTChamberId mId(id, cont_stat+1, cont_sect+1);
48  chambers[cont_stat][cont_sect] = new DTSurveyChamber(id, cont_stat+1, cont_sect+1, mId.rawId());
49  }
50  }
51 
52  std::cout << nameOfChamberInfoFile << std::endl;
53  std::ifstream file(nameOfChamberInfoFile.c_str());
54  while(!file.eof()) {
55  int code, station, sector;
56  double x, y, z, rms, dx, dy, dz;
57  file >> code >> x >> y >> z >> rms >> dx >> dy >> dz;
58  if(file.eof()) break;
59  x = x/10.0; y=y/10.0; z=z/10.0; dx=dx/10.0; dy=dy/10.0; dz=dz/10.0;rms=rms/10.0;
60  station = code/10000 - 1;
61  sector = (code-(station+1)*10000)/100 - 1;
62  //De momento vamos a actuar como si no hubiera otra forma de resolver esto
63  TMatrixD r(3,1);
64  r(0,0) = x; r(1,0) = y;r(2,0) = z+OffsetZ;
65  TMatrixD disp(3,1);
66  disp(0,0) = dx; disp(1,0) = dy; disp(2,0) = dz;
67  TMatrixD rp = Rot*r-delta;
68  disp = disp-r+rp;
69 
70  GlobalPoint rg(r(0,0), r(1,0), r(2,0));
71  GlobalPoint rt(r(0,0)-disp(0,0), r(1,0)-disp(1,0), r(2,0)-disp(2,0));
72  DTChamberId mId(id, station+1, sector+1);
73  const DTChamber *mChamber = static_cast<const DTChamber *>(pDD->idToDet(mId));
74  LocalPoint rl = mChamber->toLocal(rg);
75  LocalPoint rtl = mChamber->toLocal(rt);
76  TMatrixD rLocal(3,1);
77  rLocal(0,0) = rl.x(); rLocal(1,0) = rl.y(); rLocal(2,0) = rl.z();
78  TMatrixD rTeo(3,1);
79  rTeo(0,0) = rtl.x(); rTeo(1,0) = rtl.y(); rTeo(2,0) = rtl.z();
80  TMatrixD diff = rLocal-rTeo;
81  TMatrixD errors(3,1);
82  errors(0,0) = rms; errors(1,0) = rms; errors(2,0) = rms;
83  chambers[station][sector]->addPoint(code, rLocal, diff, errors);
84  }
85  file.close();
86 }
87 
88 /*
89 void DTSurvey::ToDB(MuonAlignment *myMuonAlignment) {
90 
91  for(int station = 0; station < 4; station++) {
92  for(int sector = 0; sector < 14; sector++) {
93  if(chambers[station][sector]->getNumberPoints() > 2) {
94  std::vector<float> displacements;
95  std::vector<float> rotations;
96  displacements.push_back(chambers[station][sector]->getDeltaX());
97  displacements.push_back(chambers[station][sector]->getDeltaY());
98  displacements.push_back(chambers[station][sector]->getDeltaZ());
99  rotations.push_back(chambers[station][sector]->getAlpha());
100  rotations.push_back(chambers[station][sector]->getBeta());
101  rotations.push_back(chambers[station][sector]->getGamma());
102  DTChamberId mId(id, station+1, sector+1);
103  myMuonAlignment->moveAlignableLocalCoord(mId, displacements, rotations);
104  }
105  }
106  }
107 }
108 */
109 
111 
112  std::ifstream wheeltowheel(nameOfWheelInfoFile.c_str());
113  float zOffset, deltax, deltay, deltaz, alpha, beta, gamma;
114  wheeltowheel >> zOffset >> deltax >> deltay >> deltaz >> alpha >> beta >> gamma;
115  wheeltowheel.close();
116 
117  OffsetZ = zOffset;
118 
119  //Build displacement vector
120  delta.ResizeTo(3,1);
121  delta(0,0) = deltax/10.0;
122  delta(1,0) = deltay/10.0;
123  delta(2,0) = deltaz/10.0;
124 
125  //Build rotation matrix
126  Rot.ResizeTo(3,3);
127  TMatrixD alpha_m(3,3);
128  TMatrixD beta_m(3,3);
129  TMatrixD gamma_m(3,3);
130  alpha_m.Zero();
131  beta_m.Zero();
132  gamma_m.Zero();
133  for(int k = 0; k < 3; k++) {
134  alpha_m(k,k) = 1.0;
135  beta_m(k,k) = 1.0;
136  gamma_m(k,k) = 1.0;
137  }
138  alpha /= 1000.0; //New scale: angles in radians
139  beta /= 1000.0;
140  gamma /= 1000.0;
141  alpha_m(1,1) = cos(alpha);
142  alpha_m(1,2) = sin(alpha);
143  alpha_m(2,1) = -sin(alpha);
144  alpha_m(2,2) = cos(alpha);
145  beta_m(0,0) = cos(beta);
146  beta_m(0,2) = -sin(beta);
147  beta_m(2,0) = sin(beta);
148  beta_m(2,2) = cos(beta);
149  gamma_m(0,0) = cos(gamma);
150  gamma_m(0,1) = sin(gamma);
151  gamma_m(1,0) = -sin(gamma);
152  gamma_m(1,1) = cos(gamma);
153  Rot = alpha_m*beta_m*gamma_m;
154 }
155 
156 
157 std::ostream &operator<<(std::ostream & flux, const DTSurvey& obj) {
158 
159  for(int stationCounter = 0; stationCounter < 4; stationCounter++) {
160  for(int sectorCounter = 0; sectorCounter < 14; sectorCounter++) {
161  if(obj.getChamber(stationCounter,sectorCounter)->getNumberPoints() > 2) {
162  const DTSurveyChamber *m_chamber = obj.getChamber(stationCounter, sectorCounter);
163  flux << *m_chamber;
164  }
165  }
166  }
167  return flux;
168 }
const double beta
float alpha
Definition: AMPTWrapper.h:95
~DTSurvey()
Definition: DTSurvey.cc:22
TMatrixD Rot
Definition: DTSurvey.h:49
void ReadChambers(edm::ESHandle< DTGeometry >)
Definition: DTSurvey.cc:40
list file
Definition: dbtoweb.py:253
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
T y() const
Definition: PV3DBase.h:57
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:64
int getNumberPoints() const
std::ostream & operator<<(std::ostream &out, const ALILine &li)
Definition: ALILine.cc:187
std::string nameOfWheelInfoFile
Definition: DTSurvey.h:43
void CalculateChambers()
Definition: DTSurvey.cc:27
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
TMatrixD delta
Definition: DTSurvey.h:48
tuple obj
Example code starts here #.
Definition: VarParsing.py:655
const DTSurveyChamber * getChamber(int, int) const
Definition: DTSurvey.cc:38
Definition: DDAxes.h:10
float OffsetZ
Definition: DTSurvey.h:47
T z() const
Definition: PV3DBase.h:58
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
DTSurveyChamber *** chambers
Definition: DTSurvey.h:51
void addPoint(int, const TMatrixD &, const TMatrixD &, const TMatrixD &)
std::string nameOfChamberInfoFile
Definition: DTSurvey.h:43
DTSurvey(const std::string &, const std::string &, int)
Definition: DTSurvey.cc:12
int k[5][pyjets_maxn]
tuple cout
Definition: gather_cfg.py:41
void FillWheelInfo()
Definition: DTSurvey.cc:110
T x() const
Definition: PV3DBase.h:56