CMS 3D CMS Logo

MillePedeFileReader.cc
Go to the documentation of this file.
1 /*** Header file ***/
4 
5 /*** system includes ***/
6 #include <cmath> // include floating-point std::abs functions
7 #include <fstream>
8 
9 /*** Alignment ***/
11 
12 //=============================================================================
13 //=== PUBLIC METHOD IMPLEMENTATION ===
14 //=============================================================================
15 
17  const std::shared_ptr<const PedeLabelerBase>& pedeLabeler,
18  const std::shared_ptr<const AlignPCLThresholdsHG>& theThresholds,
19  const std::shared_ptr<const PixelTopologyMap>& pixelTopologyMap)
20  : pedeLabeler_(pedeLabeler),
21  theThresholds_(theThresholds),
22  pixelTopologyMap_(pixelTopologyMap),
23  dirName_(config.getParameter<std::string>("fileDir")),
24  millePedeEndFile_(config.getParameter<std::string>("millePedeEndFile")),
25  millePedeLogFile_(config.getParameter<std::string>("millePedeLogFile")),
26  millePedeResFile_(config.getParameter<std::string>("millePedeResFile")),
27  isHG_(config.getParameter<bool>("isHG")) {
28  if (!dirName_.empty() && dirName_.find_last_of('/') != dirName_.size() - 1)
29  dirName_ += '/'; // may need '/'
30 }
31 
33  if (isHG_) {
35  }
39 }
40 
42 
43 //=============================================================================
44 //=== PRIVATE METHOD IMPLEMENTATION ===
45 //=============================================================================
47  std::ifstream endFile;
48  endFile.open((dirName_ + millePedeEndFile_).c_str());
49 
50  if (endFile.is_open()) {
51  edm::LogInfo("MillePedeFileReader") << "Reading millepede end-file";
53  getline(endFile, line);
54  std::string trash;
55  if (line.find("-1") != std::string::npos) {
56  getline(endFile, line);
58  std::istringstream iss(line);
59  iss >> exitCode_ >> trash;
60  edm::LogInfo("MillePedeFileReader")
61  << " Pede exit code is: " << exitCode_ << " (" << exitMessage_ << ")" << std::endl;
62  } else {
64  std::istringstream iss(line);
65  iss >> exitCode_ >> trash;
66  edm::LogInfo("MillePedeFileReader")
67  << " Pede exit code is: " << exitCode_ << " (" << exitMessage_ << ")" << std::endl;
68  }
69  } else {
70  edm::LogError("MillePedeFileReader") << "Could not read millepede end-file.";
71  exitMessage_ = "no exit code found";
72  }
73 }
74 
76  std::ifstream logFile;
77  logFile.open((dirName_ + millePedeLogFile_).c_str());
78 
79  if (logFile.is_open()) {
80  edm::LogInfo("MillePedeFileReader") << "Reading millepede log-file";
82 
83  while (getline(logFile, line)) {
84  std::string Nrec_string = "NREC =";
85  std::string Binaries_string = "C_binary";
86 
87  if (line.find(Nrec_string) != std::string::npos) {
88  std::istringstream iss(line);
89  std::string trash;
90  iss >> trash >> trash >> Nrec_;
91 
92  if (Nrec_ < theThresholds_->getNrecords()) {
93  edm::LogInfo("MillePedeFileReader")
94  << "Number of records used " << theThresholds_->getNrecords() << std::endl;
95  updateDB_ = false;
96  }
97  }
98 
99  if (line.find(Binaries_string) != std::string::npos) {
100  binariesAmount_ += 1;
101  }
102  }
103  } else {
104  edm::LogError("MillePedeFileReader") << "Could not read millepede log-file.";
105 
106  updateDB_ = false;
107  Nrec_ = 0;
108  }
109 }
110 
112  // cutoffs by coordinate and by alignable
113  std::map<std::string, std::array<float, 6> > cutoffs_;
114  std::map<std::string, std::array<float, 6> > significances_;
115  std::map<std::string, std::array<float, 6> > thresholds_;
116  std::map<std::string, std::array<float, 6> > errors_;
117  std::map<std::string, std::array<float, 6> > fractions_;
118 
119  std::map<std::string, std::array<int, 6> > countsAbove_;
120  std::map<std::string, std::array<int, 6> > countsTotal_;
121 
123 
124  std::vector<std::string> alignables_ = theThresholds_->getAlignableList();
125  for (auto& ali : alignables_) {
126  cutoffs_[ali] = theThresholds_->getCut(ali);
127  significances_[ali] = theThresholds_->getSigCut(ali);
128  thresholds_[ali] = theThresholds_->getMaxMoveCut(ali);
129  errors_[ali] = theThresholds_->getMaxErrorCut(ali);
130 
131  if (theThresholds_->hasFloatMap(ali)) {
132  fractions_[ali] = theThresholds_->getFractionCut(ali);
133  countsAbove_[ali] = {{0, 0, 0, 0, 0, 0}};
134  countsTotal_[ali] = {{0, 0, 0, 0, 0, 0}};
135  }
136  }
137 
138  updateDB_ = false;
139  vetoUpdateDB_ = false;
140  std::ifstream resFile;
141  resFile.open((dirName_ + millePedeResFile_).c_str());
142 
143  if (resFile.is_open()) {
144  edm::LogInfo("MillePedeFileReader") << "Reading millepede result-file";
145 
147  getline(resFile, line); // drop first line
148 
149  while (getline(resFile, line)) {
150  std::istringstream iss(line);
151 
152  std::vector<std::string> tokens;
154  while (iss >> token) {
155  tokens.push_back(token);
156  }
157 
158  auto alignableLabel = std::stoul(tokens[0]);
159  const auto alignable = pedeLabeler_->alignableFromLabel(alignableLabel);
160  auto det = getHLS(alignable);
161  int detIndex = static_cast<int>(det);
162  auto alignableIndex = alignableLabel % 10 - 1;
164 
165  if (tokens.size() > 4 /*3*/) {
166  countsTotal_[detLabel][alignableIndex]++; //Count aligned modules/ladders per structure
167  const auto paramNum = pedeLabeler_->paramNumFromLabel(alignableLabel);
168  align::StructureType type = alignable->alignableObjectId();
169  align::ID id = alignable->id();
170 
171  double ObsMove = std::stof(tokens[3]) * multiplier_[alignableIndex];
172  double ObsErr = std::stof(tokens[4]) * multiplier_[alignableIndex];
173 
174  auto coord = static_cast<AlignPCLThresholdsHG::coordType>(alignableIndex);
175 
176  if (det != PclHLS::NotInPCL) {
177  if (type != align::TPBLadder && type != align::TPEPanel) {
178  switch (coord) {
180  Xobs_[detIndex] = ObsMove;
181  XobsErr_[detIndex] = ObsErr;
182  break;
184  Yobs_[detIndex] = ObsMove;
185  YobsErr_[detIndex] = ObsErr;
186  break;
188  Zobs_[detIndex] = ObsMove;
189  ZobsErr_[detIndex] = ObsErr;
190  break;
192  tXobs_[detIndex] = ObsMove;
193  tXobsErr_[detIndex] = ObsErr;
194  break;
196  tYobs_[detIndex] = ObsMove;
197  tYobsErr_[detIndex] = ObsErr;
198  break;
200  tZobs_[detIndex] = ObsMove;
201  tZobsErr_[detIndex] = ObsErr;
202  break;
203  default:
204  edm::LogError("MillePedeFileReader") << "Currently not able to handle DOF " << coord << std::endl;
205  break;
206  }
207  } else {
208  auto hgIndex = getIndexForHG(id, det);
209  switch (coord) {
211  Xobs_HG_[hgIndex - 1] = ObsMove;
212  XobsErr_HG_[hgIndex - 1] = ObsErr;
213  break;
215  Yobs_HG_[hgIndex - 1] = ObsMove;
216  YobsErr_HG_[hgIndex - 1] = ObsErr;
217  break;
219  Zobs_HG_[hgIndex - 1] = ObsMove;
220  ZobsErr_HG_[hgIndex - 1] = ObsErr;
221  break;
223  tXobs_HG_[hgIndex - 1] = ObsMove;
224  tXobsErr_HG_[hgIndex - 1] = ObsErr;
225  break;
227  tYobs_HG_[hgIndex - 1] = ObsMove;
228  tYobsErr_HG_[hgIndex - 1] = ObsErr;
229  break;
231  tZobs_HG_[hgIndex - 1] = ObsMove;
232  tZobsErr_HG_[hgIndex - 1] = ObsErr;
233  break;
234  default:
235  edm::LogError("MillePedeFileReader") << "Currently not able to handle DOF " << coord << std::endl;
236  break;
237  }
238  }
239 
240  } else {
241  edm::LogError("MillePedeFileReader")
242  << "Currently not able to handle coordinate: " << coord << " (" << paramNum << ") "
243  << Form(" %s with ID %d (subdet %d)", alignableObjectId.idToString(type), id, DetId(id).subdetId())
244  << std::endl;
245  continue;
246  }
247 
248  edm::LogVerbatim("MillePedeFileReader")
249  << " alignableLabel: " << alignableLabel << " with alignableIndex " << alignableIndex << " detIndex "
250  << detIndex << "\n"
251  << " i.e. detLabel: " << detLabel << " (" << coord << ")\n"
252  << " has movement: " << ObsMove << " +/- " << ObsErr << "\n"
253  << " cutoff (cutoffs_[" << detLabel << "][" << coord << "]): " << cutoffs_[detLabel][alignableIndex] << "\n"
254  << " significance (significances_[" << detLabel << "][" << coord
255  << "]): " << significances_[detLabel][alignableIndex] << "\n"
256  << " error thresolds (errors_[" << detLabel << "][" << coord << "]): " << errors_[detLabel][alignableIndex]
257  << "\n"
258  << " max movement (thresholds_[" << detLabel << "][" << coord
259  << "]): " << thresholds_[detLabel][alignableIndex] << "\n"
260  << " fraction (fractions_[" << detLabel << "][" << coord << "]): " << fractions_[detLabel][alignableIndex]
261  << "\n"
262  << "=============" << std::endl;
263 
264  if (std::abs(ObsMove) > thresholds_[detLabel][alignableIndex]) {
265  edm::LogWarning("MillePedeFileReader") << "Aborting payload creation."
266  << " Exceeding maximum thresholds for movement: " << std::abs(ObsMove)
267  << " for" << detLabel << "(" << coord << ")";
268  updateBits_.set(0);
269  vetoUpdateDB_ = true;
270  continue;
271 
272  } else if (std::abs(ObsMove) > cutoffs_[detLabel][alignableIndex]) {
273  updateBits_.set(1);
274 
275  if (std::abs(ObsErr) > errors_[detLabel][alignableIndex]) {
276  edm::LogWarning("MillePedeFileReader") << "Aborting payload creation."
277  << " Exceeding maximum thresholds for error: " << std::abs(ObsErr)
278  << " for" << detLabel << "(" << coord << ")";
279  updateBits_.set(2);
280  vetoUpdateDB_ = true;
281  continue;
282  } else {
283  if (std::abs(ObsMove / ObsErr) < significances_[detLabel][alignableIndex]) {
284  updateBits_.set(3);
285  continue;
286  }
287  }
288  updateDB_ = true;
289  if (!isHG_) {
290  edm::LogInfo("MillePedeFileReader")
291  << "This correction: " << ObsMove << "+/-" << ObsErr << " for " << detLabel << "(" << coord
292  << ") will trigger a new Tracker Alignment payload!";
293  }
294  countsAbove_[detLabel][alignableIndex]++;
295  }
296  }
297  }
298  } else {
299  edm::LogError("MillePedeFileReader") << "Could not read millepede result-file.";
300 
301  updateDB_ = false;
302  Nrec_ = 0;
303  }
304 
305  if (isHG_) { // check fractionCut
306  updateDB_ = false; // reset booleans since fractionCut is considered for HG
307  std::stringstream ss;
308  for (auto& ali : alignables_) {
309  ss << ali << std::endl;
310  for (long unsigned int i = 0; i < countsTotal_[ali].size(); i++) {
311  if (countsTotal_[ali][i] != 0 && fractions_[ali][i] != -1) {
312  float fraction_ = countsAbove_[ali][i] / (1.0 * countsTotal_[ali][i]);
313  ss << static_cast<AlignPCLThresholdsHG::coordType>(i) << ": Fraction = " << fraction_
314  << " Fraction Threshold = " << fractions_[ali][i];
315  if (fraction_ >= fractions_[ali][i]) {
316  updateDB_ = true;
317  ss << " above fraction threshold" << std::endl;
318  fractionExceeded_[ali][i] = true;
319  } else {
320  ss << std::endl;
321  fractionExceeded_[ali][i] = false;
322  }
323  } else
324  ss << "No entries available or no fraction thresholds defined" << std::endl;
325  }
326  ss << "===================" << std::endl;
327  }
328  if (updateDB_ && !vetoUpdateDB_) {
329  ss << "Alignment will be updated" << std::endl;
330  } else {
331  ss << "Alignment will NOT be updated" << std::endl;
332  }
333  edm::LogWarning("MillePedeFileReader") << ss.str();
334  }
335 }
336 
338  if (!alignable)
339  return PclHLS::NotInPCL;
340 
341  const auto& tns = pedeLabeler_->alignableTracker()->trackerNameSpace();
342  const align::ID id = alignable->id();
343 
344  switch (alignable->alignableObjectId()) {
346  switch (tns.tpb().halfBarrelNumber(id)) {
347  case 1:
349  case 2:
351  default:
352  throw cms::Exception("LogicError")
353  << "@SUB=MillePedeFileReader::getHLS\n"
354  << "Found a pixel half-barrel number that should not exist: " << tns.tpb().halfBarrelNumber(id);
355  }
357  switch (tns.tpe().endcapNumber(id)) {
358  case 1:
359  switch (tns.tpe().halfCylinderNumber(id)) {
360  case 1:
362  case 2:
364  default:
365  throw cms::Exception("LogicError")
366  << "@SUB=MillePedeFileReader::getHLS\n"
367  << "Found a pixel half-cylinder number that should not exist: " << tns.tpe().halfCylinderNumber(id);
368  }
369  case 2:
370  switch (tns.tpe().halfCylinderNumber(id)) {
371  case 1:
373  case 2:
375  default:
376  throw cms::Exception("LogicError")
377  << "@SUB=MillePedeFileReader::getHLS\n"
378  << "Found a pixel half-cylinder number that should not exist: " << tns.tpe().halfCylinderNumber(id);
379  }
380  default:
381  throw cms::Exception("LogicError")
382  << "@SUB=MillePedeFileReader::getHLS\n"
383  << "Found a pixel endcap number that should not exist: " << tns.tpe().endcapNumber(id);
384  }
385  case align::TPBLadder:
386  switch (tns.tpb().layerNumber(id)) {
387  case 1:
389  case 2:
391  case 3:
393  case 4:
395  default:
396  throw cms::Exception("LogicError")
397  << "@SUB=MillePedeFileReader::getHLS\n"
398  << "Found a pixel layer number that should not exist: " << tns.tpb().layerNumber(id);
399  }
400  case align::TPEPanel:
401  switch (static_cast<signed int>((tns.tpe().endcapNumber(id) == 1) ? -1 * tns.tpe().halfDiskNumber(id)
402  : tns.tpe().halfDiskNumber(id))) {
403  case -3:
404  return PclHLS::TPEPanelDiskM3;
405  case -2:
406  return PclHLS::TPEPanelDiskM2;
407  case -1:
408  return PclHLS::TPEPanelDiskM1;
409  case 3:
410  return PclHLS::TPEPanelDisk3;
411  case 2:
412  return PclHLS::TPEPanelDisk2;
413  case 1:
414  return PclHLS::TPEPanelDisk1;
415  default:
416  throw cms::Exception("LogicError")
417  << "@SUB=MillePedeFileReader::getHLS\n"
418  << "Found a pixel disk number that should not exist: "
419  << static_cast<signed int>((tns.tpe().endcapNumber(id) == 1) ? -1 * tns.tpe().halfDiskNumber(id)
420  : tns.tpe().halfDiskNumber(id));
421  }
422  default:
423  return PclHLS::NotInPCL;
424  }
425 }
426 
428  switch (HLS) {
430  return "TPBHalfBarrelXminus";
432  return "TPBHalfBarrelXplus";
434  return "TPEHalfCylinderXminusZminus";
436  return "TPEHalfCylinderXplusZminus";
438  return "TPEHalfCylinderXminusZplus";
440  return "TPEHalfCylinderXplusZplus";
442  return "TPBLadderLayer1";
444  return "TPBLadderLayer2";
446  return "TPBLadderLayer3";
448  return "TPBLadderLayer4";
450  return "TPEPanelDisk1";
452  return "TPEPanelDisk2";
454  return "TPEPanelDisk3";
456  return "TPEPanelDiskM1";
458  return "TPEPanelDiskM2";
460  return "TPEPanelDiskM3";
461  default:
462  //return "NotInPCL";
463  throw cms::Exception("LogicError")
464  << "@SUB=MillePedeFileReader::getStringFromHLS\n"
465  << "Found an alignable structure not possible to map in the default AlignPCLThresholdsHG partitions";
466  }
467 }
468 
470  int currentSum = 0;
471 
473  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(1) / 2);
474  currentSum += pixelTopologyMap_->getPXBLadders(1);
476  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(2) / 2);
477  currentSum += pixelTopologyMap_->getPXBLadders(2);
479  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(3) / 2);
480  currentSum += pixelTopologyMap_->getPXBLadders(3);
482  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(4) / 2);
483  currentSum += pixelTopologyMap_->getPXBLadders(4);
484 
485  indexHelper[PclHLS::TPEPanelDiskM3] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-3));
486  currentSum += pixelTopologyMap_->getPXFBlades(-3) * 2;
487  indexHelper[PclHLS::TPEPanelDiskM2] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-2));
488  currentSum += pixelTopologyMap_->getPXFBlades(-2) * 2;
489  indexHelper[PclHLS::TPEPanelDiskM1] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-1));
490  currentSum += pixelTopologyMap_->getPXFBlades(-1) * 2;
491 
492  indexHelper[PclHLS::TPEPanelDisk1] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(1));
493  currentSum += pixelTopologyMap_->getPXFBlades(1) * 2;
494  indexHelper[PclHLS::TPEPanelDisk2] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(2));
495  currentSum += pixelTopologyMap_->getPXFBlades(2) * 2;
496  indexHelper[PclHLS::TPEPanelDisk3] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(3));
497  currentSum += pixelTopologyMap_->getPXFBlades(3) * 2;
498 }
499 
501  const auto& tns = pedeLabeler_->alignableTracker()->trackerNameSpace();
502 
503  switch (HLS) {
505  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
506  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
508  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
509  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
511  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
512  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
514  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
515  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
517  return (tns.tpe().halfCylinderNumber(id) == 1)
518  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
519  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
521  return (tns.tpe().halfCylinderNumber(id) == 1)
522  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
523  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
525  return (tns.tpe().halfCylinderNumber(id) == 1)
526  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
527  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
529  return (tns.tpe().halfCylinderNumber(id) == 1)
530  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
531  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
533  return (tns.tpe().halfCylinderNumber(id) == 1)
534  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
535  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
537  return (tns.tpe().halfCylinderNumber(id) == 1)
538  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
539  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
540  default:
541  return -200;
542  }
543 }
544 
545 //=============================================================================
546 //=== STATIC CONST MEMBER DEFINITION ===
547 //=============================================================================
548 constexpr std::array<double, 6> MillePedeFileReader::multiplier_;
std::array< double, SIZE_LG_STRUCTS > Zobs_
Log< level::Info, true > LogVerbatim
MillePedeFileReader(const edm::ParameterSet &, const std::shared_ptr< const PedeLabelerBase > &, const std::shared_ptr< const AlignPCLThresholdsHG > &, const std::shared_ptr< const PixelTopologyMap > &)
std::array< double, SIZE_HG_STRUCTS > tXobs_HG_
std::array< double, SIZE_LG_STRUCTS > tYobs_
std::array< double, SIZE_LG_STRUCTS > tZobsErr_
std::array< double, SIZE_LG_STRUCTS > Yobs_
const std::shared_ptr< const AlignPCLThresholdsHG > theThresholds_
std::array< double, SIZE_HG_STRUCTS > XobsErr_HG_
uint32_t ID
Definition: Definitions.h:24
std::bitset< 4 > updateBits_
std::array< double, SIZE_LG_STRUCTS > YobsErr_
std::array< double, SIZE_HG_STRUCTS > YobsErr_HG_
const std::shared_ptr< const PixelTopologyMap > pixelTopologyMap_
Definition: config.py:1
PclHLS getHLS(const Alignable *)
Log< level::Error, false > LogError
std::array< double, SIZE_HG_STRUCTS > Zobs_HG_
std::array< double, SIZE_LG_STRUCTS > Xobs_
static constexpr std::array< double, 6 > multiplier_
std::array< double, SIZE_HG_STRUCTS > Xobs_HG_
std::array< double, SIZE_HG_STRUCTS > tYobs_HG_
const std::string millePedeLogFile_
std::array< double, SIZE_LG_STRUCTS > tXobs_
std::array< double, SIZE_LG_STRUCTS > tYobsErr_
std::array< double, SIZE_HG_STRUCTS > ZobsErr_HG_
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::array< double, SIZE_HG_STRUCTS > tZobs_HG_
Allows conversion between type and name, and vice-versa.
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
std::string getStringFromHLS(PclHLS HLS)
Log< level::Info, false > LogInfo
Definition: DetId.h:17
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
const std::string millePedeResFile_
std::array< double, SIZE_LG_STRUCTS > tXobsErr_
std::unordered_map< PclHLS, std::pair< int, int > > indexHelper
std::array< double, SIZE_HG_STRUCTS > tZobsErr_HG_
std::array< double, SIZE_LG_STRUCTS > XobsErr_
int getIndexForHG(align::ID id, PclHLS HLS)
const std::shared_ptr< const PedeLabelerBase > pedeLabeler_
const std::string millePedeEndFile_
std::array< double, SIZE_HG_STRUCTS > tXobsErr_HG_
std::array< double, SIZE_HG_STRUCTS > Yobs_HG_
std::array< double, SIZE_LG_STRUCTS > tZobs_
std::map< std::string, std::array< bool, 6 > > fractionExceeded_
Log< level::Warning, false > LogWarning
std::array< double, SIZE_LG_STRUCTS > ZobsErr_
std::array< double, SIZE_HG_STRUCTS > tYobsErr_HG_