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  countsTotal_[detLabel][alignableIndex]++;
166 
167  if (tokens.size() > 4 /*3*/) {
168  const auto paramNum = pedeLabeler_->paramNumFromLabel(alignableLabel);
169  align::StructureType type = alignable->alignableObjectId();
170  align::ID id = alignable->id();
171 
172  double ObsMove = std::stof(tokens[3]) * multiplier_[alignableIndex];
173  double ObsErr = std::stof(tokens[4]) * multiplier_[alignableIndex];
174 
175  auto coord = static_cast<AlignPCLThresholdsHG::coordType>(alignableIndex);
176 
177  if (det != PclHLS::NotInPCL) {
178  if (type != align::TPBLadder && type != align::TPEPanel) {
179  switch (coord) {
181  Xobs_[detIndex] = ObsMove;
182  XobsErr_[detIndex] = ObsErr;
183  break;
185  Yobs_[detIndex] = ObsMove;
186  YobsErr_[detIndex] = ObsErr;
187  break;
189  Zobs_[detIndex] = ObsMove;
190  ZobsErr_[detIndex] = ObsErr;
191  break;
193  tXobs_[detIndex] = ObsMove;
194  tXobsErr_[detIndex] = ObsErr;
195  break;
197  tYobs_[detIndex] = ObsMove;
198  tYobsErr_[detIndex] = ObsErr;
199  break;
201  tZobs_[detIndex] = ObsMove;
202  tZobsErr_[detIndex] = ObsErr;
203  break;
204  default:
205  edm::LogError("MillePedeFileReader") << "Currently not able to handle DOF " << coord << std::endl;
206  break;
207  }
208  } else {
209  auto hgIndex = getIndexForHG(id, det);
210  switch (coord) {
212  Xobs_HG_[hgIndex - 1] = ObsMove;
213  XobsErr_HG_[hgIndex - 1] = ObsErr;
214  break;
216  Yobs_HG_[hgIndex - 1] = ObsMove;
217  YobsErr_HG_[hgIndex - 1] = ObsErr;
218  break;
220  Zobs_HG_[hgIndex - 1] = ObsMove;
221  ZobsErr_HG_[hgIndex - 1] = ObsErr;
222  break;
224  tXobs_HG_[hgIndex - 1] = ObsMove;
225  tXobsErr_HG_[hgIndex - 1] = ObsErr;
226  break;
228  tYobs_HG_[hgIndex - 1] = ObsMove;
229  tYobsErr_HG_[hgIndex - 1] = ObsErr;
230  break;
232  tZobs_HG_[hgIndex - 1] = ObsMove;
233  tZobsErr_HG_[hgIndex - 1] = ObsErr;
234  break;
235  default:
236  edm::LogError("MillePedeFileReader") << "Currently not able to handle DOF " << coord << std::endl;
237  break;
238  }
239  }
240 
241  } else {
242  edm::LogError("MillePedeFileReader")
243  << "Currently not able to handle coordinate: " << coord << " (" << paramNum << ") "
244  << Form(" %s with ID %d (subdet %d)", alignableObjectId.idToString(type), id, DetId(id).subdetId())
245  << std::endl;
246  continue;
247  }
248 
249  edm::LogVerbatim("MillePedeFileReader")
250  << " alignableLabel: " << alignableLabel << " with alignableIndex " << alignableIndex << " detIndex "
251  << detIndex << "\n"
252  << " i.e. detLabel: " << detLabel << " (" << coord << ")\n"
253  << " has movement: " << ObsMove << " +/- " << ObsErr << "\n"
254  << " cutoff (cutoffs_[" << detLabel << "][" << coord << "]): " << cutoffs_[detLabel][alignableIndex] << "\n"
255  << " significance (significances_[" << detLabel << "][" << coord
256  << "]): " << significances_[detLabel][alignableIndex] << "\n"
257  << " error thresolds (errors_[" << detLabel << "][" << coord << "]): " << errors_[detLabel][alignableIndex]
258  << "\n"
259  << " max movement (thresholds_[" << detLabel << "][" << coord
260  << "]): " << thresholds_[detLabel][alignableIndex] << "\n"
261  << " fraction (fractions_[" << detLabel << "][" << coord << "]): " << fractions_[detLabel][alignableIndex]
262  << "\n"
263  << "=============" << std::endl;
264 
265  if (std::abs(ObsMove) > thresholds_[detLabel][alignableIndex]) {
266  edm::LogWarning("MillePedeFileReader") << "Aborting payload creation."
267  << " Exceeding maximum thresholds for movement: " << std::abs(ObsMove)
268  << " for" << detLabel << "(" << coord << ")";
269  updateBits_.set(0);
270  vetoUpdateDB_ = true;
271  continue;
272 
273  } else if (std::abs(ObsMove) > cutoffs_[detLabel][alignableIndex]) {
274  updateBits_.set(1);
275 
276  if (std::abs(ObsErr) > errors_[detLabel][alignableIndex]) {
277  edm::LogWarning("MillePedeFileReader") << "Aborting payload creation."
278  << " Exceeding maximum thresholds for error: " << std::abs(ObsErr)
279  << " for" << detLabel << "(" << coord << ")";
280  updateBits_.set(2);
281  vetoUpdateDB_ = true;
282  continue;
283  } else {
284  if (std::abs(ObsMove / ObsErr) < significances_[detLabel][alignableIndex]) {
285  updateBits_.set(3);
286  continue;
287  }
288  }
289  updateDB_ = true;
290  if (!isHG_) {
291  edm::LogInfo("MillePedeFileReader")
292  << "This correction: " << ObsMove << "+/-" << ObsErr << " for " << detLabel << "(" << coord
293  << ") will trigger a new Tracker Alignment payload!";
294  }
295  countsAbove_[detLabel][alignableIndex]++;
296  }
297  }
298  }
299  } else {
300  edm::LogError("MillePedeFileReader") << "Could not read millepede result-file.";
301 
302  updateDB_ = false;
303  Nrec_ = 0;
304  }
305 
306  if (isHG_) { // check fractionCut
307  updateDB_ = false; // reset booleans since fractionCut is considered for HG
308  std::stringstream ss;
309  for (auto& ali : alignables_) {
310  ss << ali << std::endl;
311  for (long unsigned int i = 0; i < countsTotal_[ali].size(); i++) {
312  if (countsTotal_[ali][i] != 0 && fractions_[ali][i] != -1) {
313  float fraction_ = countsAbove_[ali][i] / (1.0 * countsTotal_[ali][i]);
314  ss << static_cast<AlignPCLThresholdsHG::coordType>(i) << ": Fraction = " << fraction_
315  << " Fraction Threshold = " << fractions_[ali][i];
316  if (fraction_ >= fractions_[ali][i]) {
317  updateDB_ = true;
318  ss << " above fraction threshold" << std::endl;
319  fractionExceeded_[ali][i] = true;
320  } else {
321  ss << std::endl;
322  fractionExceeded_[ali][i] = false;
323  }
324  } else
325  ss << "No entries available or no fraction thresholds defined" << std::endl;
326  }
327  ss << "===================" << std::endl;
328  }
329  if (updateDB_ && !vetoUpdateDB_) {
330  ss << "Alignment will be updated" << std::endl;
331  } else {
332  ss << "Alignment will NOT be updated" << std::endl;
333  }
334  edm::LogWarning("MillePedeFileReader") << ss.str();
335  }
336 }
337 
339  if (!alignable)
340  return PclHLS::NotInPCL;
341 
342  const auto& tns = pedeLabeler_->alignableTracker()->trackerNameSpace();
343  const align::ID id = alignable->id();
344 
345  switch (alignable->alignableObjectId()) {
347  switch (tns.tpb().halfBarrelNumber(id)) {
348  case 1:
350  case 2:
352  default:
353  throw cms::Exception("LogicError")
354  << "@SUB=MillePedeFileReader::getHLS\n"
355  << "Found a pixel half-barrel number that should not exist: " << tns.tpb().halfBarrelNumber(id);
356  }
358  switch (tns.tpe().endcapNumber(id)) {
359  case 1:
360  switch (tns.tpe().halfCylinderNumber(id)) {
361  case 1:
363  case 2:
365  default:
366  throw cms::Exception("LogicError")
367  << "@SUB=MillePedeFileReader::getHLS\n"
368  << "Found a pixel half-cylinder number that should not exist: " << tns.tpe().halfCylinderNumber(id);
369  }
370  case 2:
371  switch (tns.tpe().halfCylinderNumber(id)) {
372  case 1:
374  case 2:
376  default:
377  throw cms::Exception("LogicError")
378  << "@SUB=MillePedeFileReader::getHLS\n"
379  << "Found a pixel half-cylinder number that should not exist: " << tns.tpe().halfCylinderNumber(id);
380  }
381  default:
382  throw cms::Exception("LogicError")
383  << "@SUB=MillePedeFileReader::getHLS\n"
384  << "Found a pixel endcap number that should not exist: " << tns.tpe().endcapNumber(id);
385  }
386  case align::TPBLadder:
387  switch (tns.tpb().layerNumber(id)) {
388  case 1:
390  case 2:
392  case 3:
394  case 4:
396  default:
397  throw cms::Exception("LogicError")
398  << "@SUB=MillePedeFileReader::getHLS\n"
399  << "Found a pixel layer number that should not exist: " << tns.tpb().layerNumber(id);
400  }
401  case align::TPEPanel:
402  switch (static_cast<signed int>((tns.tpe().endcapNumber(id) == 1) ? -1 * tns.tpe().halfDiskNumber(id)
403  : tns.tpe().halfDiskNumber(id))) {
404  case -3:
405  return PclHLS::TPEPanelDiskM3;
406  case -2:
407  return PclHLS::TPEPanelDiskM2;
408  case -1:
409  return PclHLS::TPEPanelDiskM1;
410  case 3:
411  return PclHLS::TPEPanelDisk3;
412  case 2:
413  return PclHLS::TPEPanelDisk2;
414  case 1:
415  return PclHLS::TPEPanelDisk1;
416  default:
417  throw cms::Exception("LogicError")
418  << "@SUB=MillePedeFileReader::getHLS\n"
419  << "Found a pixel disk number that should not exist: "
420  << static_cast<signed int>((tns.tpe().endcapNumber(id) == 1) ? -1 * tns.tpe().halfDiskNumber(id)
421  : tns.tpe().halfDiskNumber(id));
422  }
423  default:
424  return PclHLS::NotInPCL;
425  }
426 }
427 
429  switch (HLS) {
431  return "TPBHalfBarrelXminus";
433  return "TPBHalfBarrelXplus";
435  return "TPEHalfCylinderXminusZminus";
437  return "TPEHalfCylinderXplusZminus";
439  return "TPEHalfCylinderXminusZplus";
441  return "TPEHalfCylinderXplusZplus";
443  return "TPBLadderLayer1";
445  return "TPBLadderLayer2";
447  return "TPBLadderLayer3";
449  return "TPBLadderLayer4";
451  return "TPEPanelDisk1";
453  return "TPEPanelDisk2";
455  return "TPEPanelDisk3";
457  return "TPEPanelDiskM1";
459  return "TPEPanelDiskM2";
461  return "TPEPanelDiskM3";
462  default:
463  //return "NotInPCL";
464  throw cms::Exception("LogicError")
465  << "@SUB=MillePedeFileReader::getStringFromHLS\n"
466  << "Found an alignable structure not possible to map in the default AlignPCLThresholdsHG partitions";
467  }
468 }
469 
471  int currentSum = 0;
472 
474  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(1) / 2);
475  currentSum += pixelTopologyMap_->getPXBLadders(1);
477  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(2) / 2);
478  currentSum += pixelTopologyMap_->getPXBLadders(2);
480  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(3) / 2);
481  currentSum += pixelTopologyMap_->getPXBLadders(3);
483  std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXBLadders(4) / 2);
484  currentSum += pixelTopologyMap_->getPXBLadders(4);
485 
486  indexHelper[PclHLS::TPEPanelDiskM3] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-3));
487  currentSum += pixelTopologyMap_->getPXFBlades(-3) * 2;
488  indexHelper[PclHLS::TPEPanelDiskM2] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-2));
489  currentSum += pixelTopologyMap_->getPXFBlades(-2) * 2;
490  indexHelper[PclHLS::TPEPanelDiskM1] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(-1));
491  currentSum += pixelTopologyMap_->getPXFBlades(-1) * 2;
492 
493  indexHelper[PclHLS::TPEPanelDisk1] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(1));
494  currentSum += pixelTopologyMap_->getPXFBlades(1) * 2;
495  indexHelper[PclHLS::TPEPanelDisk2] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(2));
496  currentSum += pixelTopologyMap_->getPXFBlades(2) * 2;
497  indexHelper[PclHLS::TPEPanelDisk3] = std::make_pair(currentSum, currentSum + pixelTopologyMap_->getPXFBlades(3));
498  currentSum += pixelTopologyMap_->getPXFBlades(3) * 2;
499 }
500 
502  const auto& tns = pedeLabeler_->alignableTracker()->trackerNameSpace();
503 
504  switch (HLS) {
506  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
507  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
509  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
510  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
512  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
513  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
515  return (tns.tpb().halfBarrelNumber(id) == 1) ? tns.tpb().ladderNumber(id) + indexHelper[HLS].first
516  : tns.tpb().ladderNumber(id) + indexHelper[HLS].second;
518  return (tns.tpe().halfCylinderNumber(id) == 1)
519  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
520  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
522  return (tns.tpe().halfCylinderNumber(id) == 1)
523  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
524  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
526  return (tns.tpe().halfCylinderNumber(id) == 1)
527  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
528  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
530  return (tns.tpe().halfCylinderNumber(id) == 1)
531  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
532  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
534  return (tns.tpe().halfCylinderNumber(id) == 1)
535  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
536  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
538  return (tns.tpe().halfCylinderNumber(id) == 1)
539  ? (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].first
540  : (tns.tpe().bladeNumber(id) * 2 - (tns.tpe().panelNumber(id) % 2)) + indexHelper[HLS].second;
541  default:
542  return -200;
543  }
544 }
545 
546 //=============================================================================
547 //=== STATIC CONST MEMBER DEFINITION ===
548 //=============================================================================
549 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_