CMS 3D CMS Logo

TrackerGeometryCompare.cc
Go to the documentation of this file.
5 #include "CLHEP/Vector/RotationInterfaces.h"
11 
15 
17 
22 
38 
39 #include "TrackerGeometryCompare.h"
40 #include "TFile.h"
41 #include "CLHEP/Vector/ThreeVector.h"
42 
43 // Database
47 
50 
51 #include <iostream>
52 #include <fstream>
53 #include <sstream>
54 
56  : cpvTokenDDD_(esConsumes()),
57  cpvTokenDD4hep_(esConsumes()),
58  topoToken_(esConsumes()),
59  geomDetToken_(esConsumes()),
60  ptpToken_(esConsumes()),
61  pixQualityToken_(esConsumes()),
62  stripQualityToken_(esConsumes()),
63  referenceTracker(nullptr),
64  dummyTracker(nullptr),
65  currentTracker(nullptr),
66  theSurveyIndex(0),
67  theSurveyValues(nullptr),
68  theSurveyErrors(nullptr),
69  levelStrings_(cfg.getUntrackedParameter<std::vector<std::string> >("levels")),
70  fromDD4hep_(cfg.getUntrackedParameter<bool>("fromDD4hep")),
71  writeToDB_(cfg.getUntrackedParameter<bool>("writeToDB")),
72  commonTrackerLevel_(align::invalid),
73  moduleListFile_(),
74  moduleList_(0),
75  inputRootFile1_(nullptr),
76  inputRootFile2_(nullptr),
77  inputTree01_(nullptr),
78  inputTree02_(nullptr),
79  inputTree11_(nullptr),
80  inputTree12_(nullptr),
81  m_nBins_(10000),
82  m_rangeLow_(-.1),
83  m_rangeHigh_(.1),
84  firstEvent_(true),
85  m_vtkmap_(13) {
86  moduleListName_ = cfg.getUntrackedParameter<std::string>("moduleList");
87 
88  //input is ROOT
89  inputFilename1_ = cfg.getUntrackedParameter<std::string>("inputROOTFile1");
90  inputFilename2_ = cfg.getUntrackedParameter<std::string>("inputROOTFile2");
91  inputTreenameAlign_ = cfg.getUntrackedParameter<std::string>("treeNameAlign");
92  inputTreenameDeform_ = cfg.getUntrackedParameter<std::string>("treeNameDeform");
93 
94  //output file
95  filename_ = cfg.getUntrackedParameter<std::string>("outputFile");
96  //output dir for surface deformations
97  surfdir_ = cfg.getUntrackedParameter<std::string>("surfDir");
98 
99  weightBy_ = cfg.getUntrackedParameter<std::string>("weightBy");
100  setCommonTrackerSystem_ = cfg.getUntrackedParameter<std::string>("setCommonTrackerSystem");
101  detIdFlag_ = cfg.getUntrackedParameter<bool>("detIdFlag");
102  detIdFlagFile_ = cfg.getUntrackedParameter<std::string>("detIdFlagFile");
103  weightById_ = cfg.getUntrackedParameter<bool>("weightById");
104  weightByIdFile_ = cfg.getUntrackedParameter<std::string>("weightByIdFile");
105 
106  // if want to use, make id cut list
107  if (detIdFlag_) {
108  std::ifstream fin;
109  fin.open(detIdFlagFile_.c_str());
110 
111  while (!fin.eof() && fin.good()) {
112  uint32_t id;
113  fin >> id;
114  detIdFlagVector_.push_back(id);
115  }
116  fin.close();
117  }
118 
119  // turn weightByIdFile into weightByIdVector
120  if (weightById_) {
121  std::ifstream inFile;
122  inFile.open(weightByIdFile_.c_str());
123  int ctr = 0;
124  while (!inFile.eof()) {
125  ctr++;
126  unsigned int listId;
127  inFile >> listId;
128  inFile.ignore(256, '\n');
129 
130  weightByIdVector_.push_back(listId);
131  }
132  inFile.close();
133  }
134 
135  //root configuration
136  theFile_ = new TFile(filename_.c_str(), "RECREATE");
137  alignTree_ = new TTree("alignTree",
138  "alignTree"); //,"id:level:mid:mlevel:sublevel:x:y:z:r:phi:a:b:c:dx:dy:dz:dr:dphi:da:db:dc");
139  alignTree_->Branch("id", &id_, "id/I");
140  alignTree_->Branch("badModuleQuality", &badModuleQuality_, "badModuleQuality/I");
141  alignTree_->Branch("inModuleList", &inModuleList_, "inModuleList/I");
142  alignTree_->Branch("level", &level_, "level/I");
143  alignTree_->Branch("mid", &mid_, "mid/I");
144  alignTree_->Branch("mlevel", &mlevel_, "mlevel/I");
145  alignTree_->Branch("sublevel", &sublevel_, "sublevel/I");
146  alignTree_->Branch("x", &xVal_, "x/F");
147  alignTree_->Branch("y", &yVal_, "y/F");
148  alignTree_->Branch("z", &zVal_, "z/F");
149  alignTree_->Branch("r", &rVal_, "r/F");
150  alignTree_->Branch("phi", &phiVal_, "phi/F");
151  alignTree_->Branch("eta", &etaVal_, "eta/F");
152  alignTree_->Branch("alpha", &alphaVal_, "alpha/F");
153  alignTree_->Branch("beta", &betaVal_, "beta/F");
154  alignTree_->Branch("gamma", &gammaVal_, "gamma/F");
155  alignTree_->Branch("dx", &dxVal_, "dx/F");
156  alignTree_->Branch("dy", &dyVal_, "dy/F");
157  alignTree_->Branch("dz", &dzVal_, "dz/F");
158  alignTree_->Branch("dr", &drVal_, "dr/F");
159  alignTree_->Branch("dphi", &dphiVal_, "dphi/F");
160  alignTree_->Branch("dalpha", &dalphaVal_, "dalpha/F");
161  alignTree_->Branch("dbeta", &dbetaVal_, "dbeta/F");
162  alignTree_->Branch("dgamma", &dgammaVal_, "dgamma/F");
163  alignTree_->Branch("du", &duVal_, "du/F");
164  alignTree_->Branch("dv", &dvVal_, "dv/F");
165  alignTree_->Branch("dw", &dwVal_, "dw/F");
166  alignTree_->Branch("da", &daVal_, "da/F");
167  alignTree_->Branch("db", &dbVal_, "db/F");
168  alignTree_->Branch("dg", &dgVal_, "dg/F");
169  alignTree_->Branch("useDetId", &useDetId_, "useDetId/I");
170  alignTree_->Branch("detDim", &detDim_, "detDim/I");
171  alignTree_->Branch("surW", &surWidth_, "surW/F");
172  alignTree_->Branch("surL", &surLength_, "surL/F");
173  alignTree_->Branch("surRot", &surRot_, "surRot[9]/D");
174  alignTree_->Branch("identifiers", &identifiers_, "identifiers[6]/I");
175  alignTree_->Branch("type", &type_, "type/I");
176  alignTree_->Branch("surfDeform", &surfDeform_, "surfDeform[13]/D");
177 
178  for (std::vector<TrackerMap>::iterator it = m_vtkmap_.begin(); it != m_vtkmap_.end(); ++it) {
179  it->setPalette(1);
180  it->addPixel(true);
181  }
182 
184  TFileDirectory subDir_All = fs->mkdir("AllSubdetectors");
185  TFileDirectory subDir_PXB = fs->mkdir("PixelBarrel");
186  TFileDirectory subDir_PXF = fs->mkdir("PixelEndcap");
187  for (int ii = 0; ii < 13; ++ii) {
188  std::stringstream histname0;
189  histname0 << "SurfDeform_Par_" << ii;
190  m_h1_[histname0.str()] = subDir_All.make<TH1D>(
191  (histname0.str()).c_str(), (histname0.str()).c_str(), m_nBins_, m_rangeLow_, m_rangeHigh_);
192 
193  std::stringstream histname1;
194  histname1 << "SurfDeform_PixelBarrel_Par_" << ii;
195  m_h1_[histname1.str()] = subDir_PXB.make<TH1D>(
196  (histname1.str()).c_str(), (histname1.str()).c_str(), m_nBins_, m_rangeLow_, m_rangeHigh_);
197 
198  std::stringstream histname2;
199  histname2 << "SurfDeform_PixelEndcap_Par_" << ii;
200  m_h1_[histname2.str()] = subDir_PXF.make<TH1D>(
201  (histname2.str()).c_str(), (histname2.str()).c_str(), m_nBins_, m_rangeLow_, m_rangeHigh_);
202  }
203 }
204 
207  desc.setComment("Validates alignment payloads by comparing positions of tracker modules positiona and orientations");
208  desc.addUntracked<std::vector<std::string> >("levels", {});
209  desc.addUntracked<bool>("fromDD4hep", false);
210  desc.addUntracked<bool>("writeToDB", false);
211  desc.addUntracked<std::string>("moduleList", "moduleList.txt");
212  desc.addUntracked<std::string>("inputROOTFile1", "IDEAL");
213  desc.addUntracked<std::string>("inputROOTFile2", "idealtracker2.root");
214  desc.addUntracked<std::string>("treeNameAlign", "alignTree");
215  desc.addUntracked<std::string>("treeNameDeform", "alignTreeDeformations");
216  desc.addUntracked<std::string>("outputFile", "output.root");
217  desc.addUntracked<std::string>("surfDir", ".");
218  desc.addUntracked<std::string>("weightBy", "DetUnit");
219  desc.addUntracked<std::string>("setCommonTrackerSystem", "NONE");
220  desc.addUntracked<bool>("detIdFlag", false);
221  desc.addUntracked<std::string>("detIdFlagFile", "blah.txt");
222  desc.addUntracked<bool>("weightById", false);
223  desc.addUntracked<std::string>("weightByIdFile", "blah2.txt");
224  descriptions.addWithDefaultLabel(desc);
225 }
226 
228 
230  int iname(0);
231  for (std::vector<TrackerMap>::iterator it = m_vtkmap_.begin(); it != m_vtkmap_.end(); ++it) {
232  std::stringstream mapname;
233  mapname << surfdir_ << "/TkMap_SurfDeform" << iname << ".png";
234  it->save(true, 0, 0, mapname.str());
235  mapname.str(std::string());
236  mapname.clear();
237  mapname << surfdir_ << "/TkMap_SurfDeform" << iname << ".pdf";
238  it->save(true, 0, 0, mapname.str());
239  ++iname;
240  }
241 
242  theFile_->cd();
243  alignTree_->Write();
244  theFile_->Close();
245 }
246 
248  if (firstEvent_) {
249  //Retrieve tracker topology from geometry
250  const TrackerTopology* const tTopo = &iSetup.getData(topoToken_);
251 
252  //upload the ROOT geometries
253  createROOTGeometry(iSetup);
254 
255  //setting the levels being used in the geometry comparator
256  edm::LogInfo("TrackerGeometryCompare") << "levels: " << levelStrings_.size();
257  for (const auto& level : levelStrings_) {
259  edm::LogInfo("TrackerGeometryCompare") << "level: " << level;
260  edm::LogInfo("TrackerGeometryCompare")
261  << "structure type: " << currentTracker->objectIdProvider().stringToId(level);
262  }
263 
264  //set common tracker system first
265  // if setting the tracker common system
266  if (setCommonTrackerSystem_ != "NONE") {
268  }
269 
270  //compare the goemetries
273 
274  //write out ntuple
275  //might be better to do within output module
276 
277  if (writeToDB_) {
278  Alignments* myAlignments = currentTracker->alignments();
279  AlignmentErrorsExtended* myAlignmentErrorsExtended = currentTracker->alignmentErrors();
280 
281  // 2. Store alignment[Error]s to DB
283  // Call service
284  if (!poolDbService.isAvailable()) // Die if not available
285  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
286 
287  poolDbService->writeOneIOV<Alignments>(*myAlignments, poolDbService->beginOfTime(), "TrackerAlignmentRcd");
288  poolDbService->writeOneIOV<AlignmentErrorsExtended>(
289  *myAlignmentErrorsExtended, poolDbService->beginOfTime(), "TrackerAlignmentErrorExtendedRcd");
290  }
291 
292  firstEvent_ = false;
293  }
294 }
295 
297  int inputRawId1, inputRawId2;
298  double inputX1, inputY1, inputZ1, inputX2, inputY2, inputZ2;
299  double inputAlpha1, inputBeta1, inputGamma1, inputAlpha2, inputBeta2, inputGamma2;
300 
301  //Retrieve tracker topology from geometry
302  const TrackerTopology* const tTopo = &iSetup.getData(topoToken_);
303 
304  // Fill module IDs from file into a list
306  if (moduleListFile_.is_open()) {
308  while (!moduleListFile_.eof()) {
309  std::getline(moduleListFile_, line);
310  moduleList_.push_back(std::atoi(line.c_str()));
311  }
312  } else {
313  edm::LogInfo("TrackerGeometryCompare") << "Error: Module list not found! Please verify that given list exists!";
314  }
315 
316  //declare alignments
317  Alignments* alignments1 = new Alignments();
318  AlignmentErrorsExtended* alignmentErrors1 = new AlignmentErrorsExtended();
319  if (inputFilename1_ != "IDEAL") {
320  inputRootFile1_ = new TFile(inputFilename1_.c_str());
321  TTree* inputTree01_ = (TTree*)inputRootFile1_->Get(inputTreenameAlign_.c_str());
322  inputTree01_->SetBranchAddress("rawid", &inputRawId1);
323  inputTree01_->SetBranchAddress("x", &inputX1);
324  inputTree01_->SetBranchAddress("y", &inputY1);
325  inputTree01_->SetBranchAddress("z", &inputZ1);
326  inputTree01_->SetBranchAddress("alpha", &inputAlpha1);
327  inputTree01_->SetBranchAddress("beta", &inputBeta1);
328  inputTree01_->SetBranchAddress("gamma", &inputGamma1);
329 
330  int nEntries1 = inputTree01_->GetEntries();
331  //fill alignments
332  for (int i = 0; i < nEntries1; ++i) {
333  inputTree01_->GetEntry(i);
334  CLHEP::Hep3Vector translation1(inputX1, inputY1, inputZ1);
335  CLHEP::HepEulerAngles eulerangles1(inputAlpha1, inputBeta1, inputGamma1);
336  uint32_t detid1 = inputRawId1;
337  AlignTransform transform1(translation1, eulerangles1, detid1);
338  alignments1->m_align.push_back(transform1);
339 
340  // dummy errors
341  // APE matrix was 3x3, now it's 6x6 (because of muons), see PR #6483
342  CLHEP::HepSymMatrix clhepSymMatrix(6, 0);
343  AlignTransformErrorExtended transformError(clhepSymMatrix, detid1);
344  alignmentErrors1->m_alignError.push_back(transformError);
345  }
346 
347  // to get the right order, sort by rawId
348  std::sort(alignments1->m_align.begin(), alignments1->m_align.end());
349  std::sort(alignmentErrors1->m_alignError.begin(), alignmentErrors1->m_alignError.end());
350  }
351  //------------------
352  Alignments* alignments2 = new Alignments();
353  AlignmentErrorsExtended* alignmentErrors2 = new AlignmentErrorsExtended();
354  if (inputFilename2_ != "IDEAL") {
355  inputRootFile2_ = new TFile(inputFilename2_.c_str());
356  TTree* inputTree02_ = (TTree*)inputRootFile2_->Get(inputTreenameAlign_.c_str());
357  inputTree02_->SetBranchAddress("rawid", &inputRawId2);
358  inputTree02_->SetBranchAddress("x", &inputX2);
359  inputTree02_->SetBranchAddress("y", &inputY2);
360  inputTree02_->SetBranchAddress("z", &inputZ2);
361  inputTree02_->SetBranchAddress("alpha", &inputAlpha2);
362  inputTree02_->SetBranchAddress("beta", &inputBeta2);
363  inputTree02_->SetBranchAddress("gamma", &inputGamma2);
364 
365  int nEntries2 = inputTree02_->GetEntries();
366  //fill alignments
367  for (int i = 0; i < nEntries2; ++i) {
368  inputTree02_->GetEntry(i);
369  CLHEP::Hep3Vector translation2(inputX2, inputY2, inputZ2);
370  CLHEP::HepEulerAngles eulerangles2(inputAlpha2, inputBeta2, inputGamma2);
371  uint32_t detid2 = inputRawId2;
372  AlignTransform transform2(translation2, eulerangles2, detid2);
373  alignments2->m_align.push_back(transform2);
374 
375  // dummy errors
376  // APE matrix was 3x3, now it's 6x6 (because of muons), see PR #6483
377  CLHEP::HepSymMatrix clhepSymMatrix(6, 0);
378  AlignTransformErrorExtended transformError(clhepSymMatrix, detid2);
379  alignmentErrors2->m_alignError.push_back(transformError);
380  }
381 
382  // to get the right order, sort by rawId
383  std::sort(alignments2->m_align.begin(), alignments2->m_align.end());
384  std::sort(alignmentErrors2->m_alignError.begin(), alignmentErrors2->m_alignError.end());
385  }
386 
387  //accessing the initial geometry
388  if (!fromDD4hep_) {
390  } else {
392  }
393 
394  const GeometricDet* theGeometricDet = &iSetup.getData(geomDetToken_);
395  const PTrackerParameters* ptp = &iSetup.getData(ptpToken_);
396  TrackerGeomBuilderFromGeometricDet trackerBuilder;
397 
398  //reference tracker
399  TrackerGeometry* theRefTracker = trackerBuilder.build(theGeometricDet, *ptp, tTopo);
400  if (inputFilename1_ != "IDEAL") {
401  GeometryAligner aligner1;
403  &(*theRefTracker), &(*alignments1), &(*alignmentErrors1), AlignTransform());
404  }
405  referenceTracker = new AlignableTracker(&(*theRefTracker), tTopo);
406  //referenceTracker->setSurfaceDeformation(surfDef1, true) ;
407 
408  int inputRawid1;
409  int inputRawid2;
410  int inputDtype1, inputDtype2;
411  std::vector<double> inputDpar1;
412  std::vector<double> inputDpar2;
413  std::vector<double>* p_inputDpar1 = &inputDpar1;
414  std::vector<double>* p_inputDpar2 = &inputDpar2;
415 
416  const auto& comp1 = referenceTracker->deepComponents();
417 
418  SurfaceDeformation* surfDef1;
419  if (inputFilename1_ != "IDEAL") {
420  TTree* inputTree11_ = (TTree*)inputRootFile1_->Get(inputTreenameDeform_.c_str());
421  inputTree11_->SetBranchAddress("irawid", &inputRawid1);
422  inputTree11_->SetBranchAddress("dtype", &inputDtype1);
423  inputTree11_->SetBranchAddress("dpar", &p_inputDpar1);
424 
425  unsigned int nEntries11 = inputTree11_->GetEntries();
426  edm::LogInfo("TrackerGeometryCompare") << " nentries11 = " << nEntries11;
427  for (unsigned int iEntry = 0; iEntry < nEntries11; ++iEntry) {
428  inputTree11_->GetEntry(iEntry);
429 
430  surfDef1 = SurfaceDeformationFactory::create(inputDtype1, inputDpar1);
431 
432  if (int(comp1[iEntry]->id()) == inputRawid1) {
433  comp1[iEntry]->setSurfaceDeformation(surfDef1, true);
434  }
435  }
436  }
437 
438  //currernt tracker
439  TrackerGeometry* theCurTracker = trackerBuilder.build(&*theGeometricDet, *ptp, tTopo);
440  if (inputFilename2_ != "IDEAL") {
441  GeometryAligner aligner2;
443  &(*theCurTracker), &(*alignments2), &(*alignmentErrors2), AlignTransform());
444  }
445  currentTracker = new AlignableTracker(&(*theCurTracker), tTopo);
446 
447  const auto& comp2 = currentTracker->deepComponents();
448 
449  SurfaceDeformation* surfDef2;
450  if (inputFilename2_ != "IDEAL") {
451  TTree* inputTree12_ = (TTree*)inputRootFile2_->Get(inputTreenameDeform_.c_str());
452  inputTree12_->SetBranchAddress("irawid", &inputRawid2);
453  inputTree12_->SetBranchAddress("dtype", &inputDtype2);
454  inputTree12_->SetBranchAddress("dpar", &p_inputDpar2);
455 
456  unsigned int nEntries12 = inputTree12_->GetEntries();
457  edm::LogInfo("TrackerGeometryCompare") << " nentries12 = " << nEntries12;
458  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
459  inputTree12_->GetEntry(iEntry);
460 
461  surfDef2 = SurfaceDeformationFactory::create(inputDtype2, inputDpar2);
462 
463  if (int(comp2[iEntry]->id()) == inputRawid2) {
464  comp2[iEntry]->setSurfaceDeformation(surfDef2, true);
465  }
466  }
467  }
468 
469  delete alignments1;
470  delete alignmentErrors1;
471  delete alignments2;
472  delete alignmentErrors2;
473 }
474 
475 void TrackerGeometryCompare::compareSurfaceDeformations(TTree* refTree, TTree* curTree) {
476  if (inputFilename1_ != "IDEAL" && inputFilename2_ != "IDEAL") {
477  int inputRawid1;
478  int inputRawid2;
479  int inputSubdetid1, inputSubdetid2;
480  int inputDtype1, inputDtype2;
481  std::vector<double> inputDpar1;
482  std::vector<double> inputDpar2;
483  std::vector<double>* p_inputDpar1 = &inputDpar1;
484  std::vector<double>* p_inputDpar2 = &inputDpar2;
485 
486  TTree* refTree = (TTree*)inputRootFile1_->Get(inputTreenameDeform_.c_str());
487  refTree->SetBranchAddress("irawid", &inputRawid1);
488  refTree->SetBranchAddress("subdetid", &inputSubdetid1);
489  refTree->SetBranchAddress("dtype", &inputDtype1);
490  refTree->SetBranchAddress("dpar", &p_inputDpar1);
491 
492  TTree* curTree = (TTree*)inputRootFile2_->Get(inputTreenameDeform_.c_str());
493  curTree->SetBranchAddress("irawid", &inputRawid2);
494  curTree->SetBranchAddress("subdetid", &inputSubdetid2);
495  curTree->SetBranchAddress("dtype", &inputDtype2);
496  curTree->SetBranchAddress("dpar", &p_inputDpar2);
497 
498  unsigned int nEntries11 = refTree->GetEntries();
499  unsigned int nEntries12 = curTree->GetEntries();
500 
501  if (nEntries11 != nEntries12) {
502  edm::LogError("TrackerGeometryCompare") << " Surface deformation parameters in two geometries differ!\n";
503  return;
504  }
505 
506  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
507  refTree->GetEntry(iEntry);
508  curTree->GetEntry(iEntry);
509  for (int ii = 0; ii < 13; ++ii) {
510  surfDeform_[ii] = -1.0;
511  }
512  for (int npar = 0; npar < int(inputDpar2.size()); ++npar) {
513  if (inputRawid1 == inputRawid2) {
514  surfDeform_[npar] = inputDpar2.at(npar) - inputDpar1.at(npar);
515  std::stringstream histname0;
516  histname0 << "SurfDeform_Par_" << npar;
517  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
518  m_h1_[histname0.str()]->Fill(surfDeform_[npar]);
519  if (inputSubdetid1 == 1 && inputSubdetid2 == 1) {
520  std::stringstream histname1;
521  histname1 << "SurfDeform_PixelBarrel_Par_" << npar;
522  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
523  m_h1_[histname1.str()]->Fill(surfDeform_[npar]);
524  }
525  if (inputSubdetid1 == 2 && inputSubdetid2 == 2) {
526  std::stringstream histname2;
527  histname2 << "SurfDeform_PixelEndcap_Par_" << npar;
528  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
529  m_h1_[histname2.str()]->Fill(surfDeform_[npar]);
530  }
531  (m_vtkmap_.at(npar)).fill_current_val(inputRawid1, surfDeform_[npar]);
532  }
533  }
534  }
535 
536  } else if (inputFilename1_ == "IDEAL" && inputFilename2_ != "IDEAL") {
537  int inputRawid2;
538  int inputSubdetid2;
539  int inputDtype2;
540  std::vector<double> inputDpar2;
541  std::vector<double>* p_inputDpar2 = &inputDpar2;
542 
543  TTree* curTree = (TTree*)inputRootFile2_->Get(inputTreenameDeform_.c_str());
544  curTree->SetBranchAddress("irawid", &inputRawid2);
545  curTree->SetBranchAddress("subdetid", &inputSubdetid2);
546  curTree->SetBranchAddress("dtype", &inputDtype2);
547  curTree->SetBranchAddress("dpar", &p_inputDpar2);
548 
549  unsigned int nEntries12 = curTree->GetEntries();
550 
551  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
552  curTree->GetEntry(iEntry);
553  for (int ii = 0; ii < 12; ++ii) {
554  surfDeform_[ii] = -1.0;
555  }
556  for (int npar = 0; npar < int(inputDpar2.size()); ++npar) {
557  surfDeform_[npar] = inputDpar2.at(npar);
558  std::stringstream histname0;
559  histname0 << "SurfDeform_Par_" << npar;
560  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
561  m_h1_[histname0.str()]->Fill(surfDeform_[npar]);
562  if (inputSubdetid2 == 1) {
563  std::stringstream histname1;
564  histname1 << "SurfDeform_PixelBarrel_Par_" << npar;
565  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
566  m_h1_[histname1.str()]->Fill(surfDeform_[npar]);
567  }
568  if (inputSubdetid2 == 2) {
569  std::stringstream histname2;
570  histname2 << "SurfDeform_PixelEndcap_Par_" << npar;
571  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
572  m_h1_[histname2.str()]->Fill(surfDeform_[npar]);
573  }
574  (m_vtkmap_.at(npar)).fill_current_val(inputRawid2, surfDeform_[npar]);
575  }
576  }
577 
578  } else if (inputFilename1_ != "IDEAL" && inputFilename2_ == "IDEAL") {
579  int inputRawid1;
580  int inputSubdetid1;
581  int inputDtype1;
582  std::vector<double> inputDpar1;
583  std::vector<double>* p_inputDpar1 = &inputDpar1;
584 
585  TTree* refTree = (TTree*)inputRootFile1_->Get(inputTreenameDeform_.c_str());
586  refTree->SetBranchAddress("irawid", &inputRawid1);
587  refTree->SetBranchAddress("subdetid", &inputSubdetid1);
588  refTree->SetBranchAddress("dtype", &inputDtype1);
589  refTree->SetBranchAddress("dpar", &p_inputDpar1);
590 
591  unsigned int nEntries11 = refTree->GetEntries();
592 
593  for (unsigned int iEntry = 0; iEntry < nEntries11; ++iEntry) {
594  refTree->GetEntry(iEntry);
595  for (int ii = 0; ii < 12; ++ii) {
596  surfDeform_[ii] = -1.0;
597  }
598  for (int npar = 0; npar < int(inputDpar1.size()); ++npar) {
599  surfDeform_[npar] = -inputDpar1.at(npar);
600  std::stringstream histname0;
601  histname0 << "SurfDeform_Par_" << npar;
602  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
603  m_h1_[histname0.str()]->Fill(surfDeform_[npar]);
604  if (inputSubdetid1 == 1) {
605  std::stringstream histname1;
606  histname1 << "SurfDeform_PixelBarrel_Par_" << npar;
607  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
608  m_h1_[histname1.str()]->Fill(surfDeform_[npar]);
609  }
610  if (inputSubdetid1 == 2) {
611  std::stringstream histname2;
612  histname2 << "SurfDeform_PixelEndcap_Par_" << npar;
613  if (TMath::Abs(surfDeform_[npar]) > (m_rangeHigh_ - m_rangeLow_) / (10. * m_nBins_))
614  m_h1_[histname2.str()]->Fill(surfDeform_[npar]);
615  }
616  (m_vtkmap_.at(npar)).fill_current_val(inputRawid1, surfDeform_[npar]);
617  }
618  }
619 
620  } else if (inputFilename1_ == "IDEAL" && inputFilename2_ == "IDEAL") {
621  edm::LogInfo("TrackerGeometryCompare") << ">>>> Comparing IDEAL with IDEAL: nothing to do! <<<<\n";
622  }
623 
624  return;
625 }
626 
628  Alignable* curAli,
629  const TrackerTopology* tTopo,
630  const edm::EventSetup& iSetup) {
631  using namespace align;
632 
633  const auto& refComp = refAli->components();
634  const auto& curComp = curAli->components();
635 
636  unsigned int nComp = refComp.size();
637  //only perform for designate levels
638  bool useLevel = false;
639  for (unsigned int i = 0; i < m_theLevels.size(); ++i) {
640  if (refAli->alignableObjectId() == m_theLevels[i])
641  useLevel = true;
642  }
643 
644  //another added level for difference between det and detunit
645  //if ((refAli->alignableObjectId()==2)&&(nComp == 1)) useLevel = false;
646 
647  //coordinate matching, etc etc
648  if (useLevel) {
649  DetId detid(refAli->id());
650 
651  CLHEP::Hep3Vector Rtotal, Wtotal, lRtotal, lWtotal;
652  Rtotal.set(0., 0., 0.);
653  Wtotal.set(0., 0., 0.);
654  lRtotal.set(0., 0., 0.);
655  lWtotal.set(0., 0., 0.);
656 
657  bool converged = false;
658 
660 
661  for (int i = 0; i < 100; i++) {
662  // Get differences between alignments for rotations and translations
663  // both local and global
665 
666  // 'diffAlignables' returns 'refAli - curAli' for translations and 'curAli - refAli' for rotations.
667  // The plan is to unify this at some point, but a simple change of the sign for one of them was postponed
668  // to do some further checks to understand the rotations better
669  //Updated July 2018: as requested the sign in the translations has been changed to match the one in rotations. A test was done to change the diffAlignables function and solve the issue there, but proved quite time consuming. To unify the sign convention in the least amount of time the choice was made to change the sign here.
670  CLHEP::Hep3Vector dR(-diff[0], -diff[1], -diff[2]);
671  CLHEP::Hep3Vector dW(diff[3], diff[4], diff[5]);
672  CLHEP::Hep3Vector dRLocal(-diff[6], -diff[7], -diff[8]);
673  CLHEP::Hep3Vector dWLocal(diff[9], diff[10], diff[11]);
674 
675  // Translations
676  Rtotal += dR;
677  lRtotal += dRLocal;
678 
679  //Rotations
680  CLHEP::HepRotation rot(Wtotal.unit(), Wtotal.mag());
681  CLHEP::HepRotation drot(dW.unit(), dW.mag());
682  rot *= drot;
683  Wtotal.set(rot.axis().x() * rot.delta(), rot.axis().y() * rot.delta(), rot.axis().z() * rot.delta());
684 
685  CLHEP::HepRotation rotLocal(lWtotal.unit(), lWtotal.mag());
686  CLHEP::HepRotation drotLocal(dWLocal.unit(), dWLocal.mag());
687  rotLocal *= drotLocal;
688  lWtotal.set(rotLocal.axis().x() * rotLocal.delta(),
689  rotLocal.axis().y() * rotLocal.delta(),
690  rotLocal.axis().z() * rotLocal.delta());
691 
692  // Move current alignable by shift and check if difference
693  // is smaller than tolerance value
694  // if true, break the loop
695  align::moveAlignable(curAli, diff);
696  float tolerance = 1e-7;
698  align::GlobalVector checkR(check[0], check[1], check[2]);
699  align::GlobalVector checkW(check[3], check[4], check[5]);
700  if ((checkR.mag() < tolerance) && (checkW.mag() < tolerance)) {
701  converged = true;
702  break;
703  }
704  }
705 
706  // give an exception if difference has not fallen below tolerance level
707  // i.e. method has not converged
708  if (!converged) {
709  edm::LogInfo("TrackerGeometryCompare")
710  << "Tolerance Exceeded!(alObjId: " << refAli->alignableObjectId()
711  << ", rawId: " << refAli->geomDetId().rawId() << ", subdetId: " << detid.subdetId() << "): " << diff << check;
712  throw cms::Exception("Tolerance in TrackerGeometryCompare exceeded");
713  }
714 
715  AlgebraicVector TRtot(12);
716  // global
717  TRtot(1) = Rtotal.x();
718  TRtot(2) = Rtotal.y();
719  TRtot(3) = Rtotal.z();
720  TRtot(4) = Wtotal.x();
721  TRtot(5) = Wtotal.y();
722  TRtot(6) = Wtotal.z();
723  // local
724  TRtot(7) = lRtotal.x();
725  TRtot(8) = lRtotal.y();
726  TRtot(9) = lRtotal.z();
727  TRtot(10) = lWtotal.x();
728  TRtot(11) = lWtotal.y();
729  TRtot(12) = lWtotal.z();
730 
731  fillTree(refAli, TRtot, tTopo, iSetup);
732  }
733 
734  // another added level for difference between det and detunit
735  for (unsigned int i = 0; i < nComp; ++i)
736  compareGeometries(refComp[i], curComp[i], tTopo, iSetup);
737 }
738 
740  edm::LogInfo("TrackerGeometryCompare") << "Setting Common Tracker System....";
741 
742  // DM_534??AlignableObjectId dummy;
743  // DM_534??_commonTrackerLevel = dummy.nameToType(_setCommonTrackerSystem);
745 
747 
748  align::EulerAngles dOmega(3);
749  dOmega[0] = TrackerCommonR_.x();
750  dOmega[1] = TrackerCommonR_.y();
751  dOmega[2] = TrackerCommonR_.z();
754 
755  edm::LogInfo("TrackerGeometryCompare") << "what we get from overlaying the pixels..." << theR << ", " << rot;
756 
757  //transform to the Tracker System
759  align::GlobalVector cmDiff(
760  trackerCM.x() - TrackerCommonCM_.x(), trackerCM.y() - TrackerCommonCM_.y(), trackerCM.z() - TrackerCommonCM_.z());
761 
762  edm::LogInfo("TrackerGeometryCompare") << "Pixel CM: " << TrackerCommonCM_ << ", tracker CM: " << trackerCM;
763 
764  //adjust translational difference factoring in different rotational CM
765  //needed because rotateInGlobalFrame is about CM of alignable, not Tracker
766  const align::GlobalVector::BasicVectorType& lpvgf = cmDiff.basicVector();
767  align::GlobalVector moveV(rot.multiplyInverse(lpvgf) - lpvgf);
768  align::GlobalVector theRprime(theR + moveV);
769 
770  AlgebraicVector TrackerCommonTR(6);
771  TrackerCommonTR(1) = theRprime.x();
772  TrackerCommonTR(2) = theRprime.y();
773  TrackerCommonTR(3) = theRprime.z();
774  TrackerCommonTR(4) = TrackerCommonR_.x();
775  TrackerCommonTR(5) = TrackerCommonR_.y();
776  TrackerCommonTR(6) = TrackerCommonR_.z();
777 
778  edm::LogInfo("TrackerGeometryCompare") << "and after the transformation: " << TrackerCommonTR;
779 
780  align::moveAlignable(currentTracker, TrackerCommonTR);
781 }
782 
784  const auto& refComp = refAli->components();
785  const auto& curComp = curAli->components();
786 
787  unsigned int nComp = refComp.size();
788  //only perform for designate levels
789  bool useLevel = false;
790  if (refAli->alignableObjectId() == commonTrackerLevel_)
791  useLevel = true;
792 
793  //useLevel = false;
794  if (useLevel) {
795  CLHEP::Hep3Vector Rtotal, Wtotal;
796  Rtotal.set(0., 0., 0.);
797  Wtotal.set(0., 0., 0.);
798 
800  CLHEP::Hep3Vector dR(diff[0], diff[1], diff[2]);
801  Rtotal += dR;
802  CLHEP::Hep3Vector dW(diff[3], diff[4], diff[5]);
803  CLHEP::HepRotation rot(Wtotal.unit(), Wtotal.mag());
804  CLHEP::HepRotation drot(dW.unit(), dW.mag());
805  rot *= drot;
806  Wtotal.set(rot.axis().x() * rot.delta(), rot.axis().y() * rot.delta(), rot.axis().z() * rot.delta());
807 
808  TrackerCommonT_ = align::GlobalVector(Rtotal.x(), Rtotal.y(), Rtotal.z());
809  TrackerCommonR_ = align::GlobalVector(Wtotal.x(), Wtotal.y(), Wtotal.z());
810  TrackerCommonCM_ = curAli->globalPosition();
811 
812  } else {
813  for (unsigned int i = 0; i < nComp; ++i)
814  diffCommonTrackerSystem(refComp[i], curComp[i]);
815  }
816 }
817 
819  const AlgebraicVector& diff,
820  const TrackerTopology* tTopo,
821  const edm::EventSetup& iSetup) {
822  //Get bad modules
823  const SiPixelQuality* SiPixelModules = &iSetup.getData(pixQualityToken_);
824  const SiStripQuality* SiStripModules = &iSetup.getData(stripQualityToken_);
825 
826  id_ = refAli->id();
827 
828  badModuleQuality_ = 0;
829  //check if module has a bad quality tag
830  if (SiPixelModules->IsModuleBad(id_)) {
831  badModuleQuality_ = 1;
832  }
833  if (SiStripModules->IsModuleBad(id_)) {
834  badModuleQuality_ = 1;
835  }
836 
837  //check if module is in a given list of bad/untouched etc. modules
838  inModuleList_ = 0;
839  for (unsigned int i = 0; i < moduleList_.size(); i++) {
840  if (moduleList_[i] == id_) {
841  inModuleList_ = 1;
842  break;
843  }
844  }
845 
846  level_ = refAli->alignableObjectId();
847  //need if ali has no mother
848  if (refAli->mother()) {
849  mid_ = refAli->mother()->geomDetId().rawId();
850  mlevel_ = refAli->mother()->alignableObjectId();
851  } else {
852  mid_ = -1;
853  mlevel_ = -1;
854  }
855  DetId detid(id_);
856  sublevel_ = detid.subdetId();
857  fillIdentifiers(sublevel_, id_, tTopo);
858  xVal_ = refAli->globalPosition().x();
859  yVal_ = refAli->globalPosition().y();
860  zVal_ = refAli->globalPosition().z();
862  rVal_ = vec.perp();
863  phiVal_ = vec.phi();
864  etaVal_ = vec.eta();
866  align::EulerAngles eulerAngles = align::toAngles(rot);
867  alphaVal_ = eulerAngles[0];
868  betaVal_ = eulerAngles[1];
869  gammaVal_ = eulerAngles[2];
870  // global
871  dxVal_ = diff[0];
872  dyVal_ = diff[1];
873  dzVal_ = diff[2];
874  // local
875  duVal_ = diff[6];
876  dvVal_ = diff[7];
877  dwVal_ = diff[8];
878  //...TODO...
880  //getting dR and dPhi
883  drVal_ = vCur.perp() - vRef.perp();
884  dphiVal_ = vCur.phi() - vRef.phi();
885  // global
886  dalphaVal_ = diff[3];
887  dbetaVal_ = diff[4];
888  dgammaVal_ = diff[5];
889  // local
890  daVal_ = diff[9];
891  dbVal_ = diff[10];
892  dgVal_ = diff[11];
893 
894  //detIdFlag
895  if (refAli->alignableObjectId() == align::AlignableDetUnit) {
896  if (detIdFlag_) {
897  if ((passIdCut(refAli->id())) || (passIdCut(refAli->mother()->id()))) {
898  useDetId_ = 1;
899  } else {
900  useDetId_ = 0;
901  }
902  }
903  }
904  // det module dimension
905  if (refAli->alignableObjectId() == align::AlignableDetUnit) {
906  if (refAli->mother()->alignableObjectId() != align::AlignableDet)
907  detDim_ = 1;
908  else if (refAli->mother()->alignableObjectId() == align::AlignableDet)
909  detDim_ = 2;
910  } else
911  detDim_ = 0;
912 
913  surWidth_ = refAli->surface().width();
914  surLength_ = refAli->surface().length();
916  surRot_[0] = rt.xx();
917  surRot_[1] = rt.xy();
918  surRot_[2] = rt.xz();
919  surRot_[3] = rt.yx();
920  surRot_[4] = rt.yy();
921  surRot_[5] = rt.yz();
922  surRot_[6] = rt.zx();
923  surRot_[7] = rt.zy();
924  surRot_[8] = rt.zz();
925 
926  //Fill
927  alignTree_->Fill();
928 }
929 
931  Alignments* alignVals,
932  AlignmentErrorsExtended* alignErrors) {
933  //getting the right alignables for the alignment record
934  auto detPB = ali->pixelHalfBarrelGeomDets();
935  auto detPEC = ali->pixelEndcapGeomDets();
936  auto detTIB = ali->innerBarrelGeomDets();
937  auto detTID = ali->TIDGeomDets();
938  auto detTOB = ali->outerBarrelGeomDets();
939  auto detTEC = ali->endcapGeomDets();
940 
941  align::Alignables allGeomDets;
942  std::copy(detPB.begin(), detPB.end(), std::back_inserter(allGeomDets));
943  std::copy(detPEC.begin(), detPEC.end(), std::back_inserter(allGeomDets));
944  std::copy(detTIB.begin(), detTIB.end(), std::back_inserter(allGeomDets));
945  std::copy(detTID.begin(), detTID.end(), std::back_inserter(allGeomDets));
946  std::copy(detTOB.begin(), detTOB.end(), std::back_inserter(allGeomDets));
947  std::copy(detTEC.begin(), detTEC.end(), std::back_inserter(allGeomDets));
948 
949  align::Alignables rcdAlis;
950  for (const auto& i : allGeomDets) {
951  if (i->components().size() == 1) {
952  rcdAlis.push_back(i);
953  } else if (i->components().size() > 1) {
954  rcdAlis.push_back(i);
955  const auto& comp = i->components();
956  for (const auto& j : comp)
957  rcdAlis.push_back(j);
958  }
959  }
960 
961  //turning them into alignments
962  for (const auto& k : rcdAlis) {
963  const SurveyDet* surveyInfo = k->survey();
964  const align::PositionType& pos(surveyInfo->position());
965  align::RotationType rot(surveyInfo->rotation());
966  CLHEP::Hep3Vector clhepVector(pos.x(), pos.y(), pos.z());
967  CLHEP::HepRotation clhepRotation(
968  CLHEP::HepRep3x3(rot.xx(), rot.xy(), rot.xz(), rot.yx(), rot.yy(), rot.yz(), rot.zx(), rot.zy(), rot.zz()));
969  AlignTransform transform(clhepVector, clhepRotation, k->id());
970  AlignTransformErrorExtended transformError(CLHEP::HepSymMatrix(3, 1), k->id());
971  alignVals->m_align.push_back(transform);
972  alignErrors->m_alignError.push_back(transformError);
973  }
974 
975  // to get the right order, sort by rawId
976  std::sort(alignVals->m_align.begin(), alignVals->m_align.end());
977  std::sort(alignErrors->m_alignError.begin(), alignErrors->m_alignError.end());
978 }
979 
981  const auto& comp = ali->components();
982 
983  unsigned int nComp = comp.size();
984 
985  for (unsigned int i = 0; i < nComp; ++i)
986  addSurveyInfo(comp[i]);
987 
989 
990  if (ali->geomDetId().rawId() != error.rawId() || ali->alignableObjectId() != error.structureType()) {
991  throw cms::Exception("DatabaseError") << "Error reading survey info from DB. Mismatched id!";
992  }
993 
994  const CLHEP::Hep3Vector& pos = theSurveyValues->m_align[theSurveyIndex].translation();
995  const CLHEP::HepRotation& rot = theSurveyValues->m_align[theSurveyIndex].rotation();
996 
997  AlignableSurface surf(
998  align::PositionType(pos.x(), pos.y(), pos.z()),
999  align::RotationType(rot.xx(), rot.xy(), rot.xz(), rot.yx(), rot.yy(), rot.yz(), rot.zx(), rot.zy(), rot.zz()));
1000 
1001  surf.setWidth(ali->surface().width());
1002  surf.setLength(ali->surface().length());
1003 
1004  ali->setSurvey(new SurveyDet(surf, error.matrix()));
1005 
1006  ++theSurveyIndex;
1007 }
1008 
1010  bool pass = false;
1011  int nEntries = detIdFlagVector_.size();
1012 
1013  for (int i = 0; i < nEntries; i++) {
1014  if (detIdFlagVector_[i] == id)
1015  pass = true;
1016  }
1017 
1018  return pass;
1019 }
1020 
1021 void TrackerGeometryCompare::fillIdentifiers(int subdetlevel, int rawid, const TrackerTopology* tTopo) {
1022  switch (subdetlevel) {
1023  case 1: {
1024  identifiers_[0] = tTopo->pxbModule(rawid);
1025  identifiers_[1] = tTopo->pxbLadder(rawid);
1026  identifiers_[2] = tTopo->pxbLayer(rawid);
1027  identifiers_[3] = 999;
1028  identifiers_[4] = 999;
1029  identifiers_[5] = 999;
1030  break;
1031  }
1032  case 2: {
1033  identifiers_[0] = tTopo->pxfModule(rawid);
1034  identifiers_[1] = tTopo->pxfPanel(rawid);
1035  identifiers_[2] = tTopo->pxfBlade(rawid);
1036  identifiers_[3] = tTopo->pxfDisk(rawid);
1037  identifiers_[4] = tTopo->pxfSide(rawid);
1038  identifiers_[5] = 999;
1039  break;
1040  }
1041  case 3: {
1042  identifiers_[0] = tTopo->tibModule(rawid);
1043  identifiers_[1] = tTopo->tibStringInfo(rawid)[0];
1044  identifiers_[2] = tTopo->tibStringInfo(rawid)[1];
1045  identifiers_[3] = tTopo->tibStringInfo(rawid)[2];
1046  identifiers_[4] = tTopo->tibLayer(rawid);
1047  identifiers_[5] = 999;
1048  break;
1049  }
1050  case 4: {
1051  identifiers_[0] = tTopo->tidModuleInfo(rawid)[0];
1052  identifiers_[1] = tTopo->tidModuleInfo(rawid)[1];
1053  identifiers_[2] = tTopo->tidRing(rawid);
1054  identifiers_[3] = tTopo->tidWheel(rawid);
1055  identifiers_[4] = tTopo->tidSide(rawid);
1056  identifiers_[5] = 999;
1057  break;
1058  }
1059  case 5: {
1060  identifiers_[0] = tTopo->tobModule(rawid);
1061  identifiers_[1] = tTopo->tobRodInfo(rawid)[0];
1062  identifiers_[2] = tTopo->tobRodInfo(rawid)[1];
1063  identifiers_[3] = tTopo->tobLayer(rawid);
1064  identifiers_[4] = 999;
1065  identifiers_[5] = 999;
1066  break;
1067  }
1068  case 6: {
1069  identifiers_[0] = tTopo->tecModule(rawid);
1070  identifiers_[1] = tTopo->tecRing(rawid);
1071  identifiers_[2] = tTopo->tecPetalInfo(rawid)[0];
1072  identifiers_[3] = tTopo->tecPetalInfo(rawid)[1];
1073  identifiers_[4] = tTopo->tecWheel(rawid);
1074  identifiers_[5] = tTopo->tecSide(rawid);
1075  break;
1076  }
1077  default: {
1078  edm::LogInfo("TrackerGeometryCompare") << "Error: bad subdetid!!";
1079  break;
1080  }
1081  }
1082 }
1083 
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
Alignables & pixelHalfBarrelGeomDets()
Return pixel barrel GeomDets.
unsigned int tobLayer(const DetId &id) const
unsigned int pxbLayer(const DetId &id) const
const edm::ESGetToken< PTrackerParameters, PTrackerParametersRcd > ptpToken_
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:91
T perp() const
Definition: PV3DBase.h:69
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
align::GlobalVector TrackerCommonR_
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
std::vector< unsigned int > tidModuleInfo(const DetId &id) const
Alignments * alignments() const override
Return alignments, sorted by DetId.
Vector3DBase< Scalar, GlobalTag > GlobalVector
Definition: Definitions.h:31
void compareGeometries(Alignable *refAli, Alignable *curAli, const TrackerTopology *tTopo, const edm::EventSetup &iSetup)
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > topoToken_
unsigned int pxfBlade(const DetId &id) const
Class to update a given geometry with a set of alignments.
T z() const
Definition: PV3DBase.h:61
unsigned int tibModule(const DetId &id) const
unsigned int tidSide(const DetId &id) const
std::vector< align::StructureType > m_theLevels
const double tolerance
const std::vector< std::string > levelStrings_
const Alignments * theSurveyValues
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
unsigned int pxfModule(const DetId &id) const
void addSurveyInfo(Alignable *ali)
std::vector< unsigned int > tecPetalInfo(const DetId &id) const
unsigned int tidWheel(const DetId &id) const
unsigned int tecWheel(const DetId &id) const
T eta() const
Definition: PV3DBase.h:73
bool IsModuleBad(uint32_t detid) const
AlgebraicVector diffAlignables(Alignable *refAli, Alignable *curAli, const std::string &weightBy, bool weightById, const std::vector< unsigned int > &weightByIdVector)
Definition: AlignTools.cc:10
align::Scalar width() const
std::vector< TrackerMap > m_vtkmap_
void diffCommonTrackerSystem(Alignable *refAli, Alignable *curAli)
bool IsModuleBad(const uint32_t &detid) const
const edm::ESGetToken< GeometricDet, IdealGeometryRecord > geomDetToken_
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
void setWidth(align::Scalar width)
unsigned int pxbLadder(const DetId &id) const
Log< level::Error, false > LogError
const Alignables & deepComponents() const
Definition: Alignable.h:72
std::map< std::string, TH1D * > m_h1_
std::vector< int > moduleList_
std::vector< AlignTransform > m_align
Definition: Alignments.h:19
unsigned int tecRing(const DetId &id) const
ring id
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > stripQualityToken_
void applyAlignments(const C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
void setLength(align::Scalar length)
T * make(const Args &...args) const
make new ROOT object
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
unsigned int tecModule(const DetId &id) const
std::vector< uint32_t > detIdFlagVector_
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:135
const align::RotationType & rotation() const
Definition: SurveyDet.h:60
Alignables & innerBarrelGeomDets()
Return inner barrel GeomDets.
unsigned int tecSide(const DetId &id) const
const edm::ESGetToken< DDCompactView, IdealGeometryRecord > cpvTokenDDD_
std::vector< unsigned int > weightByIdVector_
Alignables & TIDGeomDets()
Return TID GeomDets.
T mag() const
Definition: PV3DBase.h:64
unsigned int pxfDisk(const DetId &id) const
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Hash writeOneIOV(const T &payload, Time_t time, const std::string &recordName)
void beginJob() override
Read from DB and print survey info.
void analyze(const edm::Event &, const edm::EventSetup &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
TrackerGeometryCompare(const edm::ParameterSet &)
Do nothing. Required by framework.
const align::PositionType & position() const
Definition: SurveyDet.h:58
align::GlobalVector TrackerCommonT_
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:8
virtual const Alignables & components() const =0
Return vector of all direct components.
Alignables & endcapGeomDets()
Return endcap GeomDets.
Alignables & pixelEndcapGeomDets()
Return pixel endcap GeomDets.
void fillTree(Alignable *refAli, const AlgebraicVector &diff, const TrackerTopology *tTopo, const edm::EventSetup &iSetup)
ii
Definition: cuy.py:589
unsigned int pxfPanel(const DetId &id) const
Log< level::Info, false > LogInfo
Definition: DetId.h:17
CLHEP::HepVector AlgebraicVector
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:180
unsigned int pxfSide(const DetId &id) const
AlgebraicVector EulerAngles
Definition: Definitions.h:34
std::vector< unsigned int > tibStringInfo(const DetId &id) const
Alignables & outerBarrelGeomDets()
Return outer barrel GeomDets.
AlignableTracker * currentTracker
void surveyToTracker(AlignableTracker *ali, Alignments *alignVals, AlignmentErrorsExtended *alignErrors)
std::vector< AlignTransformErrorExtended > m_alignError
const DetId & geomDetId() const
Definition: Alignable.h:177
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:266
const edm::ESGetToken< cms::DDCompactView, IdealGeometryRecord > cpvTokenDD4hep_
align::Scalar length() const
align::StructureType commonTrackerLevel_
void fillIdentifiers(int subdetlevel, int rawid, const TrackerTopology *tTopo)
AlignmentErrorsExtended * alignmentErrors() const override
Return alignment errors, sorted by DetId.
std::vector< Alignable * > Alignables
Definition: Utilities.h:31
align::StructureType stringToId(const char *) const
AlignableTracker * referenceTracker
std::vector< unsigned int > tobRodInfo(const DetId &id) const
void createROOTGeometry(const edm::EventSetup &iSetup)
align::PositionType TrackerCommonCM_
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:34
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
const AlignableObjectId & objectIdProvider() const
Return tracker alignable object ID provider derived from the tracker&#39;s geometry.
unsigned int tidRing(const DetId &id) const
const SurveyErrors * theSurveyErrors
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:138
bool isAvailable() const
Definition: Service.h:40
unsigned int tibLayer(const DetId &id) const
unsigned int tobModule(const DetId &id) const
unsigned int pxbModule(const DetId &id) const
std::vector< SurveyError > m_surveyErrors
Definition: SurveyErrors.h:22
void moveAlignable(Alignable *ali, AlgebraicVector diff)
Moves the alignable by the AlgebraicVector.
Definition: AlignTools.cc:84
SurfaceDeformation * create(int type, const std::vector< double > &params)
void compareSurfaceDeformations(TTree *_inputTree11, TTree *_inputTree12)
const edm::ESGetToken< SiPixelQuality, SiPixelQualityRcd > pixQualityToken_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
unsigned transform(const HcalDetId &id, unsigned transformCode)