ATLAS Offline Software
runMmGeoComparison.cxx
Go to the documentation of this file.
1 
2 /*
3  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 */
14 #include <GaudiKernel/SystemOfUnits.h>
16 #include <string>
17 #include <set>
18 #include <vector>
19 #include <map>
20 #include <iostream>
21 #include <cmath>
22 
24 #include <TFile.h>
25 #include <TTreeReader.h>
26 
27 using namespace MuonGMR4;
28 using namespace ActsTrk;
29 
30 constexpr double tolerance = 0.003*Gaudi::Units::millimeter;
31 
33 struct MmChamber{
35  MmChamber() = default;
36 
38  int stationIndex{0};
39  int stationEta{0};
40  int stationPhi{0};
41  int multilayer{0};
42  std::string design{};
43 
45  bool operator<(const MmChamber& other) const {
46  if (stationIndex != other.stationIndex) return stationIndex < other.stationIndex;
47  if (stationEta != other.stationEta) return stationEta < other.stationEta;
48  if (stationPhi != other.stationPhi) return stationPhi < other.stationPhi;
49  return multilayer < other.multilayer;
50  }
51 
53  Amg::Transform3D geoModelTransform{Amg::Transform3D::Identity()};
54 
56  unsigned int nGasGaps{0};
57 
59  double ActiveWidthS{0.};
60  double ActiveWidthL{0.};
61  double ActiveHeightR{0.};
62  double stripPitch{0.};
63 
64 
65 
66  struct MmChannel{
76  unsigned int channel{0};
78  unsigned int gasGap{0};
80  bool isStereo{false};
82  bool operator<(const MmChannel& other) const {
83  if (gasGap != other.gasGap) return gasGap < other.gasGap;
84  return channel < other.channel;
85  }
86 
87  };
88 
90  struct MmLayer {
92  unsigned int gasGap{0};
94  Amg::Transform3D transform{Amg::Transform3D::Identity()};
98  unsigned int firstStrip{0};
100  int readoutSide{0};
102  bool operator<(const MmLayer& other) const {
103  return gasGap < other.gasGap;
104  }
105  };
106  std::set<MmChannel> channels{};
107  std::set<MmLayer> layers{};
108 
109 };
110 
111 
114 std::ostream& operator<<(std::ostream& ostr, const MmChamber& chamb) {
115  static const std::map<int, std::string> stationDict{
116  {55, "MMS"}, {56, "MML"}
117  };
118  ostr<<"MicroMegas chamber "<<stationDict.at(chamb.stationIndex)<<std::abs(chamb.stationEta)<<
119  (chamb.stationEta>0 ? "A" : "C")<<chamb.stationPhi<<"-"<<chamb.multilayer<<" ";
120  return ostr;
121 }
122 
123 std::ostream& operator<<(std::ostream& ostr,const MmChamber::MmChannel & channel) {
124  ostr<<"channel (gasGap/number): ";
125  ostr<<channel.gasGap<<"/";
126  ostr<<std::setfill('0')<<std::setw(4)<<channel.channel<<", ";
127  ostr<<"center: "<<Amg::toString(channel.globCenter, 2);
128  return ostr;
129 }
130 
131 
132 std::ostream& operator<<(std::ostream& ostr,const MmChamber::MmLayer & layer) {
133  ostr<<"Mmlayer (gasGap): ";
134  ostr<<layer.gasGap<<", ";
135  ostr<<"transform: "<<Amg::toString(layer.transform);
136  return ostr;
137 }
138 
139 std::set<MmChamber> readTreeDump(const std::string& inputFile) {
140  std::set<MmChamber> to_ret{};
141  std::cout<<"Read the MicroMegas geometry tree dump from "<<inputFile<<std::endl;
142  std::unique_ptr<TFile> inFile{TFile::Open(inputFile.c_str())};
143  if (!inFile || !inFile->IsOpen()) {
144  std::cerr<<__FILE__<<":"<<__LINE__<<" Failed to open "<<inputFile<<std::endl;
145  return to_ret;
146  }
147  TTreeReader treeReader("MmGeoModelTree", inFile.get());
148  if (treeReader.IsInvalid()){
149  std::cerr<<__FILE__<<":"<<__LINE__<<" The file "<<inputFile<<" does not contain the 'MmGeoModelTree'"<<std::endl;
150  return to_ret;
151  }
152 
154  TTreeReaderValue<unsigned short> stationIndex{treeReader, "stationIndex"};
155  TTreeReaderValue<short> stationEta{treeReader, "stationEta"};
156  TTreeReaderValue<short> stationPhi{treeReader, "stationPhi"};
157  TTreeReaderValue<short> multilayer{treeReader, "multilayer"};
158 
160  TTreeReaderValue<std::vector<uint>> channel{treeReader, "channel"};
161  TTreeReaderValue<std::vector<short>> gasGap{treeReader, "gasGap"};
162  TTreeReaderValue<std::vector<float>> stripLength{treeReader, "stripLength"};
163 
164  TTreeReaderValue<std::vector<bool>> isStereo{treeReader, "isStereo"};
165  TTreeReaderValue<std::vector<float>> locStripCenterX{treeReader, "locStripCenterX"};
166  TTreeReaderValue<std::vector<float>> locStripCenterY{treeReader, "locStripCenterY"};
167 
168  TTreeReaderValue<std::vector<float>> stripCenterX{treeReader, "stripCenterX"};
169  TTreeReaderValue<std::vector<float>> stripCenterY{treeReader, "stripCenterY"};
170  TTreeReaderValue<std::vector<float>> stripCenterZ{treeReader, "stripCenterZ"};
171  TTreeReaderValue<std::vector<float>> stripLeftEdgeX{treeReader, "stripLeftEdgeX"};
172  TTreeReaderValue<std::vector<float>> stripLeftEdgeY{treeReader, "stripLeftEdgeY"};
173  TTreeReaderValue<std::vector<float>> stripLeftEdgeZ{treeReader, "stripLeftEdgeZ"};
174  TTreeReaderValue<std::vector<float>> stripRightEdgeX{treeReader, "stripRightEdgeX"};
175  TTreeReaderValue<std::vector<float>> stripRightEdgeY{treeReader, "stripRightEdgeY"};
176  TTreeReaderValue<std::vector<float>> stripRightEdgeZ{treeReader, "stripRightEdgeZ"};
177 
179  TTreeReaderValue<float> ActiveHeightR{treeReader, "ActiveHeightR"};
180  TTreeReaderValue<float> ActiveWidthS{treeReader, "ActiveWidthS"};
181  TTreeReaderValue<float> ActiveWidthL{treeReader, "ActiveWidthL"};
182  TTreeReaderValue<float> stripPitch{treeReader, "stripPitch"};
183 
185  TTreeReaderValue<std::vector<float>> geoModelTransformX{treeReader, "GeoModelTransformX"};
186  TTreeReaderValue<std::vector<float>> geoModelTransformY{treeReader, "GeoModelTransformY"};
187  TTreeReaderValue<std::vector<float>> geoModelTransformZ{treeReader, "GeoModelTransformZ"};
188 
189  TTreeReaderValue<std::vector<float>> stripRotCol1X{treeReader, "stripRotLinearCol1X"};
190  TTreeReaderValue<std::vector<float>> stripRotCol1Y{treeReader, "stripRotLinearCol1Y"};
191  TTreeReaderValue<std::vector<float>> stripRotCol1Z{treeReader, "stripRotLinearCol1Z"};
192 
193  TTreeReaderValue<std::vector<float>> stripRotCol2X{treeReader, "stripRotLinearCol2X"};
194  TTreeReaderValue<std::vector<float>> stripRotCol2Y{treeReader, "stripRotLinearCol2Y"};
195  TTreeReaderValue<std::vector<float>> stripRotCol2Z{treeReader, "stripRotLinearCol2Z"};
196 
197  TTreeReaderValue<std::vector<float>> stripRotCol3X{treeReader, "stripRotLinearCol3X"};
198  TTreeReaderValue<std::vector<float>> stripRotCol3Y{treeReader, "stripRotLinearCol3Y"};
199  TTreeReaderValue<std::vector<float>> stripRotCol3Z{treeReader, "stripRotLinearCol3Z"};
200 
201  TTreeReaderValue<std::vector<float>> stripRotTransX{treeReader, "stripRotTranslationX"};
202  TTreeReaderValue<std::vector<float>> stripRotTransY{treeReader, "stripRotTranslationY"};
203  TTreeReaderValue<std::vector<float>> stripRotTransZ{treeReader, "stripRotTranslationZ"};
204 
205  TTreeReaderValue<std::vector<uint8_t>> stripRotGasGap{treeReader, "stripRotGasGap"};
206 
207  TTreeReaderValue<std::vector<float>> firstStripPosX{treeReader, "firstStripPosX"};
208  TTreeReaderValue<std::vector<float>> firstStripPosY{treeReader, "firstStripPosY"};
209 
210  TTreeReaderValue<std::vector<int>> readoutSide{treeReader, "stripReadoutSide"};
211  TTreeReaderValue<std::vector<unsigned int>> firstStripNum{treeReader, "stripFirstStrip"};
212 
213 
214  while (treeReader.Next()) {
215  MmChamber newchamber{};
216 
218  newchamber.stationIndex = (*stationIndex);
219  newchamber.stationEta = (*stationEta);
220  newchamber.stationPhi = (*stationPhi);
221  newchamber.multilayer = (*multilayer);
222 
224  newchamber.ActiveHeightR = (*ActiveHeightR);
225  newchamber.ActiveWidthS = (*ActiveWidthS);
226  newchamber.ActiveWidthL = (*ActiveWidthL);
227  newchamber.stripPitch = (*stripPitch);
228 
229  Amg::Vector3D geoTrans{(*geoModelTransformX)[0], (*geoModelTransformY)[0], (*geoModelTransformZ)[0]};
230  Amg::RotationMatrix3D geoRot{Amg::RotationMatrix3D::Identity()};
231  geoRot.col(0) = Amg::Vector3D((*geoModelTransformX)[1], (*geoModelTransformY)[1], (*geoModelTransformZ)[1]);
232  geoRot.col(1) = Amg::Vector3D((*geoModelTransformX)[2], (*geoModelTransformY)[2], (*geoModelTransformZ)[2]);
233  geoRot.col(2) = Amg::Vector3D((*geoModelTransformX)[3], (*geoModelTransformY)[3], (*geoModelTransformZ)[3]);
234  newchamber.geoModelTransform = Amg::getTransformFromRotTransl(std::move(geoRot), std::move(geoTrans));
235 
236  //Strips
237  for (size_t s = 0; s < stripCenterX->size(); ++s){
238  MmChamber::MmChannel newStrip{};
239  newStrip.globCenter = Amg::Vector3D{(*stripCenterX)[s], (*stripCenterY)[s], (*stripCenterZ)[s]};
240  newStrip.locCenter = Amg::Vector2D{(*locStripCenterX)[s], (*locStripCenterY)[s]};
241  newStrip.leftEdge = Amg::Vector3D{(*stripLeftEdgeX)[s], (*stripLeftEdgeY)[s], (*stripLeftEdgeZ)[s]};
242  newStrip.rightEdge = Amg::Vector3D{(*stripRightEdgeX)[s], (*stripRightEdgeY)[s], (*stripRightEdgeZ)[s]};
243 
244  newStrip.gasGap = (*gasGap)[s];
245  newStrip.channel = (*channel)[s];
246  newStrip.isStereo = (*isStereo)[s];
247  newchamber.channels.insert(std::move(newStrip));
248  }
249 
250  for (size_t l = 0; l < stripRotGasGap->size(); ++l){
251  MmChamber::MmLayer newLayer{};
252  newLayer.gasGap = (*stripRotGasGap)[l];
253  Amg::RotationMatrix3D stripRot{Amg::RotationMatrix3D::Identity()};
254  stripRot.col(0) = Amg::Vector3D((*stripRotCol1X)[l],(*stripRotCol1Y)[l], (*stripRotCol1Z)[l]);
255  stripRot.col(1) = Amg::Vector3D((*stripRotCol2X)[l],(*stripRotCol2Y)[l], (*stripRotCol2Z)[l]);
256  stripRot.col(2) = Amg::Vector3D((*stripRotCol3X)[l],(*stripRotCol3Y)[l], (*stripRotCol3Z)[l]);
257  Amg::Vector3D layTrans{(*stripRotTransX)[l], (*stripRotTransY)[l], (*stripRotTransZ)[l]};
258  newLayer.transform = Amg::getTransformFromRotTransl(std::move(stripRot), std::move(layTrans));
259  newLayer.firstStripPos = Amg::Vector2D{(*firstStripPosX)[l], (*firstStripPosY)[l]};
260  newLayer.readoutSide = (*readoutSide)[l];
261  newLayer.firstStrip = (*firstStripNum)[l];
262  newchamber.layers.insert(std::move(newLayer));
263  }
264 
265  auto insert_itr = to_ret.insert(std::move(newchamber));
266  if (!insert_itr.second) {
267  std::stringstream err{};
268  err<<__FILE__<<":"<<__LINE__<<" The chamber "<<(*insert_itr.first).stationIndex
269  <<" has already been inserted. "<<std::endl;
270  throw std::runtime_error(err.str());
271  }
272  }
273  std::cout<<"File parsing is finished. Found in total "<<to_ret.size()<<" readout element dumps "<<std::endl;
274  return to_ret;
275 }
276 
277 #define TEST_BASICPROP(attribute, propName) \
278  if (std::abs(1.*test.attribute - 1.*reference.attribute) > tolerance) { \
279  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": The chamber "<<reference \
280  <<" differs w.r.t "<<propName<<" "<< reference.attribute \
281  <<" (ref) vs. " <<test.attribute << " (test)" << std::endl; \
282  chamberOkay = false; \
283  }
284 
285 int main( int argc, char** argv ) {
286  std::string refFile{}, testFile{};
287 
288  for (int arg = 1; arg < argc; ++arg) {
289  std::string the_arg{argv[arg]};
290  if (the_arg == "--refFile" && arg +1 < argc) {
291  refFile = std::string{argv[arg+1]};
292  ++arg;
293  } else if (the_arg == "--testFile" && arg + 1 < argc) {
294  testFile = std::string{argv[arg+1]};
295  ++arg;
296  }
297  }
298  if (refFile.empty()) {
299  std::cerr<<"Please parse the path of the reference file via --refFile "<<std::endl;
300  return EXIT_FAILURE;
301  }
302  if (testFile.empty()) {
303  std::cerr<<"Please parse the path of the test file via --testFile "<<std::endl;
304  return EXIT_FAILURE;
305  }
307  if (!refFile.starts_with ("root://")) refFile = PathResolver::FindCalibFile(refFile);
308  if (!testFile.starts_with ("root://")) testFile = PathResolver::FindCalibFile(testFile);
310  std::set<MmChamber> refChambers = readTreeDump(refFile);
311  if (refChambers.empty()) {
312  std::cerr<<"The file "<<refFile<<" should contain at least one chamber "<<std::endl;
313  return EXIT_FAILURE;
314  }
315  std::set<MmChamber> testChambers = readTreeDump(testFile);
316  if (testChambers.empty()) {
317  std::cerr<<"The file "<<testFile<<" should contain at least one chamber "<<std::endl;
318  return EXIT_FAILURE;
319  }
320  int return_code = EXIT_SUCCESS;
322  for (const MmChamber& reference : refChambers) {
323  std::set<MmChamber>::const_iterator test_itr = testChambers.find(reference);
324 
325  if (test_itr == testChambers.end()) {
326  std::cerr<<"The chamber "<<reference<<" is not part of the testing "<<std::endl;
327  return_code = EXIT_FAILURE;
328  continue;
329  }
330  bool chamberOkay{true};
331  const MmChamber& test = {*test_itr};
332 
334  TEST_BASICPROP(ActiveWidthS, "GasGap length on the short side");
335  TEST_BASICPROP(ActiveWidthL, "GasGap length on the long side");
336  TEST_BASICPROP(ActiveHeightR, "GasGap Height");
337  TEST_BASICPROP(stripPitch, "Strip pitch");
338  // if (!chamberOkay) continue;
339  using MmLayer = MmChamber::MmLayer;
340  for (const MmLayer& refLayer : reference.layers) {
341  break;
342  std::set<MmLayer>::const_iterator lay_itr = test.layers.find(refLayer);
343  if (lay_itr == test.layers.end()) {
344  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": in "<<test<<" "
345  <<refLayer<<" is not found. "<<std::endl;
346  chamberOkay = false;
347  continue;
348  }
349  const MmLayer& testLayer{*lay_itr};
350  if ( (refLayer.firstStripPos- testLayer.firstStripPos).mag() > tolerance) {
351  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": in "<<test<<" "
352  <<testLayer.gasGap<<" has different starting position "
353  <<Amg::toString(refLayer.firstStripPos, 2) <<" vs. "
354  <<Amg::toString(testLayer.firstStripPos, 2)
355  <<"difference: "<<Amg::toString(refLayer.firstStripPos- testLayer.firstStripPos, 2)
356  <<" / "<<(refLayer.firstStripPos- testLayer.firstStripPos).mag()/reference.stripPitch
357  <<std::endl;
358  chamberOkay = false;
359  }
360  if (refLayer.firstStrip != testLayer.firstStrip) {
361  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": in "<<test<<" "
362  <<testLayer.gasGap<<" starts from different strip "<<refLayer.firstStrip<<" vs. "
363  <<testLayer.firstStrip<<std::endl;
364  chamberOkay = false;
365  }
366 
367 
368  if (!Amg::doesNotDeform(refLayer.transform.inverse()* testLayer.transform)){
369  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": in "<<test<<" "
370  <<testLayer<<" differs w.r.t. reference "<<Amg::toString(refLayer.transform)<<". vs. "
371  <<Amg::toString(refLayer.transform.inverse()*testLayer.transform)<<std::endl;
372  chamberOkay = false;
373  }
374  }
375  unsigned int failedEta{0}, failedStereo{0};
376  for (const MmChamber::MmChannel& refStrip : reference.channels) {
377  std::set<MmChamber::MmChannel>::const_iterator strip_itr = test.channels.find(refStrip);
378  if (strip_itr == test.channels.end()) {
379  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": in "<<test<<" "
380  <<refStrip<<" is not found. "<<std::endl;
381  chamberOkay = false;
382  continue;
383  }
384  const MmChamber::MmChannel& testStrip{*strip_itr};
385 
388  if (!refStrip.isStereo && (failedEta <=10)) {
389  const Amg::Vector3D diffStrip{testStrip.globCenter - refStrip.globCenter};
390  if (diffStrip.mag() > tolerance) {
391  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": In "
392  <<test<<" " <<testStrip <<"/local: "<<Amg::toString(testStrip.locCenter, 2)
393  <<" should be located at "<<Amg::toString(refStrip.globCenter, 2)
394  <<"/local: "<<Amg::toString(refStrip.locCenter, 2)
395  <<" displacement: "<<Amg::toString(diffStrip, 2)<<" "<<diffStrip.mag()<<std::endl;
396  chamberOkay = false;
397  }
398  ++failedEta;
399  }
406  else if (failedStereo <= 10) {
408  (refStrip.leftEdge - refStrip.rightEdge).unit()};
410  (testStrip.rightEdge - testStrip.leftEdge).unit()};
411  const double centerDist = stripDir.dot(testStrip.globCenter - refStrip.globCenter);
412  const double leftDist = stripDir.dot(testStrip.leftEdge -refStrip.globCenter);
413  const double rightDist = stripDir.dot(testStrip.rightEdge - refStrip.globCenter);
414  if ( std::abs(centerDist) > tolerance || std::abs(leftDist) > tolerance || std::abs(rightDist) > tolerance) {
415  std::cerr<<"runMmGeoComparison() "<<__LINE__<<": In "
416  <<test<<" " <<testStrip <<" + mu "<<Amg::toString(testDir,2)
417  <<"/local: "<<Amg::toString(testStrip.locCenter, 2)
418  <<" does not describe the same stereo strip as "
419  <<Amg::toString(refStrip.globCenter, 2)<<" + lambda "<<Amg::toString(stripDir,2)
420  <<". Distances to the left-edge/center/right-edge: "
421  <<leftDist<<"/"<<centerDist<<"/"<<rightDist<<", dot: "
422  <<std::acos(std::clamp(stripDir.dot(testDir),- 1., 1.)) / Gaudi::Units::deg<<std::endl;
423  chamberOkay = false;
424  }
425  ++failedStereo;
426  }
427  }
428 
429  if (!chamberOkay) {
430  return_code = EXIT_FAILURE;
431  }
432  }
433  return return_code;
434 
435 }
436 
437 
MmChamber
Helper struct to represent a full MicroMegas chamber.
Definition: runMmGeoComparison.cxx:33
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.h:108
MmChamber::MmChannel::locCenter
Amg::Vector2D locCenter
Local center of the micromega strip.
Definition: runMmGeoComparison.cxx:68
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
MmChamber::MmChamber
MmChamber()=default
Default constructor.
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
makeTOC.inFile
string inFile
Definition: makeTOC.py:5
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:114
deg
#define deg
Definition: SbPolyhedron.cxx:17
plotIsoValidation.treeReader
treeReader
Definition: plotIsoValidation.py:127
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
MmChamber::MmChannel
Definition: runMmGeoComparison.cxx:66
reference
Definition: hcg.cxx:437
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:147
MmChamber::MmChannel::leftEdge
Amg::Vector3D leftEdge
Left edge of the strip.
Definition: runMmGeoComparison.cxx:72
tolerance
constexpr double tolerance
Definition: runMmGeoComparison.cxx:30
dq_defect_copy_defect_database.channels
def channels
Definition: dq_defect_copy_defect_database.py:56
Amg::getRotateZ3D
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
Definition: GeoPrimitivesHelpers.h:270
SCT_CalibAlgs::firstStrip
@ firstStrip
Definition: SCT_CalibNumbers.h:10
MmChamber::MmLayer
Helper struct to assess that the layers are properly oriented.
Definition: runMmGeoComparison.cxx:90
Amg::getTransformFromRotTransl
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
Definition: GeoPrimitivesHelpers.h:172
MmChamber::multilayer
int multilayer
Definition: runMmGeoComparison.cxx:41
GeoPrimitives.h
python.SystemOfUnits.millimeter
int millimeter
Definition: SystemOfUnits.py:53
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGMR4
The ReadoutGeomCnvAlg converts the Run4 Readout geometry build from the GeoModelXML into the legacy M...
Definition: MdtCalibInput.h:20
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
CaloCondBlobAlgs_fillNoiseFromASCII.inputFile
string inputFile
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:17
LArCellNtuple.argv
argv
Definition: LArCellNtuple.py:152
MmChamber::MmChannel::globCenter
Amg::Vector3D globCenter
Global center of the micromega strip.
Definition: runMmGeoComparison.cxx:70
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
MmChamber::MmChannel::rightEdge
Amg::Vector3D rightEdge
Right edge of the strip.
Definition: runMmGeoComparison.cxx:74
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::doesNotDeform
bool doesNotDeform(const Amg::Transform3D &trans)
Checks whether the linear part of the transformation rotates or stetches any of the basis vectors.
Definition: GeoPrimitivesHelpers.h:361
readTreeDump
std::set< MmChamber > readTreeDump(const std::string &inputFile)
Definition: runMmGeoComparison.cxx:139
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:20
MmChamber::MmLayer::gasGap
unsigned int gasGap
Gas gap number of the layer.
Definition: runMmGeoComparison.cxx:92
create_dcsc_inputs_sqlite.arg
list arg
Definition: create_dcsc_inputs_sqlite.py:48
tolerance
Definition: suep_shower.h:17
MmChamber::stationIndex
int stationIndex
Definition: runMmGeoComparison.cxx:38
PathResolver.h
TEST_BASICPROP
#define TEST_BASICPROP(attribute, propName)
Definition: runMmGeoComparison.cxx:277
MmChamber::stationPhi
int stationPhi
Definition: runMmGeoComparison.cxx:40
MmChamber::stationEta
int stationEta
Definition: runMmGeoComparison.cxx:39
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MmChamber::MmChannel::operator<
bool operator<(const MmChannel &other) const
Odering operator to use the strip with set.
Definition: runMmGeoComparison.cxx:82
MmChamber::MmChannel::isStereo
bool isStereo
Short flag whether the angle is stereo.
Definition: runMmGeoComparison.cxx:80
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
main
int main(int argc, char **argv)
Definition: runMmGeoComparison.cxx:285
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
GeoPrimitivesHelpers.h
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:21
GeoPrimitivesToStringConverter.h
MuonDetectorDefs.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:49
CscCalibQuery.testFile
testFile
Definition: CscCalibQuery.py:274
MuonGMR4::operator<<
std::ostream & operator<<(std::ostream &ostr, const Chamber::defineArgs &args)
Definition: Chamber.cxx:14
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:26
MmChamber::operator<
bool operator<(const MmChamber &other) const
Sorting operator to insert the object into std::set.
Definition: runMmGeoComparison.cxx:45
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
MmChamber::MmLayer::operator<
bool operator<(const MmLayer &other) const
Ordering operator.
Definition: runMmGeoComparison.cxx:102