CMS 3D CMS Logo

TrackerGeometryCompare.cc
Go to the documentation of this file.
5 #include "CLHEP/Vector/RotationInterfaces.h"
16 
18 
23 
39 
40 //#include "Alignment/OfflineValidation/interface/ComparisonUtilities.h"
41 //#include "Alignment/CommonAlignment/interface/AlignTools.h"
42 
43 //#include "Alignment/OfflineValidation/plugins/TrackerGeometryCompare.h"
44 #include "TrackerGeometryCompare.h"
45 #include "TFile.h"
46 #include "CLHEP/Vector/ThreeVector.h"
47 
48 // Database
52 //#include "Geometry/Records/interface/PGeometricDetRcd.h"
53 
56 
57 #include <iostream>
58 #include <fstream>
59 #include <sstream>
60 
62  referenceTracker(0),
63  dummyTracker(0),
64  currentTracker(0),
65  theSurveyIndex(0),
66  theSurveyValues(0),
67  theSurveyErrors(0),
68  _levelStrings(cfg.getUntrackedParameter< std::vector<std::string> >("levels")),
69  _writeToDB(cfg.getUntrackedParameter<bool>("writeToDB")),
70  _commonTrackerLevel(align::invalid),
71  _moduleListFile(0),
72  _moduleList(0),
73  _inputRootFile1(0),
74  _inputRootFile2(0),
75  _inputTree01(0),
76  _inputTree02(0),
77  _inputTree11(0),
78  _inputTree12(0),
79  m_nBins(10000),
80  m_rangeLow(-.1),
81  m_rangeHigh(.1),
82  firstEvent_(true),
83  m_vtkmap(13)
84 {
85  _moduleListName = cfg.getUntrackedParameter< std::string > ("moduleList");
86 
87  //input is ROOT
88  _inputFilename1 = cfg.getUntrackedParameter< std::string > ("inputROOTFile1");
89  _inputFilename2 = cfg.getUntrackedParameter< std::string > ("inputROOTFile2");
90  _inputTreenameAlign = cfg.getUntrackedParameter< std::string > ("treeNameAlign");
91  _inputTreenameDeform = cfg.getUntrackedParameter< std::string > ("treeNameDeform");
92 
93  //output file
94  _filename = cfg.getUntrackedParameter< std::string > ("outputFile");
95 
96 
97  _weightBy = cfg.getUntrackedParameter< std::string > ("weightBy");
98  _setCommonTrackerSystem = cfg.getUntrackedParameter< std::string > ("setCommonTrackerSystem");
99  _detIdFlag = cfg.getUntrackedParameter< bool > ("detIdFlag");
100  _detIdFlagFile = cfg.getUntrackedParameter< std::string > ("detIdFlagFile");
101  _weightById = cfg.getUntrackedParameter< bool > ("weightById");
102  _weightByIdFile = cfg.getUntrackedParameter< std::string > ("weightByIdFile");
103 
104 
105  // if want to use, make id cut list
106  if (_detIdFlag){
107  std::ifstream fin;
108  fin.open( _detIdFlagFile.c_str() );
109 
110  while (!fin.eof() && fin.good() ){
111 
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","alignTree");//,"id:level:mid:mlevel:sublevel:x:y:z:r:phi:a:b:c:dx:dy:dz:dr:dphi:da:db:dc");
138  _alignTree->Branch("id", &_id, "id/I");
139  _alignTree->Branch("badModuleQuality", &_badModuleQuality, "badModuleQuality/I");
140  _alignTree->Branch("inModuleList", &_inModuleList, "inModuleList/I");
141  _alignTree->Branch("level", &_level, "level/I");
142  _alignTree->Branch("mid", &_mid, "mid/I");
143  _alignTree->Branch("mlevel", &_mlevel, "mlevel/I");
144  _alignTree->Branch("sublevel", &_sublevel, "sublevel/I");
145  _alignTree->Branch("x", &_xVal, "x/F");
146  _alignTree->Branch("y", &_yVal, "y/F");
147  _alignTree->Branch("z", &_zVal, "z/F");
148  _alignTree->Branch("r", &_rVal, "r/F");
149  _alignTree->Branch("phi", &_phiVal, "phi/F");
150  _alignTree->Branch("eta", &_etaVal, "eta/F");
151  _alignTree->Branch("alpha", &_alphaVal, "alpha/F");
152  _alignTree->Branch("beta", &_betaVal, "beta/F");
153  _alignTree->Branch("gamma", &_gammaVal, "gamma/F");
154  _alignTree->Branch("dx", &_dxVal, "dx/F");
155  _alignTree->Branch("dy", &_dyVal, "dy/F");
156  _alignTree->Branch("dz", &_dzVal, "dz/F");
157  _alignTree->Branch("dr", &_drVal, "dr/F");
158  _alignTree->Branch("dphi", &_dphiVal, "dphi/F");
159  _alignTree->Branch("dalpha", &_dalphaVal, "dalpha/F");
160  _alignTree->Branch("dbeta", &_dbetaVal, "dbeta/F");
161  _alignTree->Branch("dgamma", &_dgammaVal, "dgamma/F");
162  _alignTree->Branch("du", &_duVal, "du/F");
163  _alignTree->Branch("dv", &_dvVal, "dv/F");
164  _alignTree->Branch("dw", &_dwVal, "dw/F");
165  _alignTree->Branch("da", &_daVal, "da/F");
166  _alignTree->Branch("db", &_dbVal, "db/F");
167  _alignTree->Branch("dg", &_dgVal, "dg/F");
168  _alignTree->Branch("useDetId", &_useDetId, "useDetId/I");
169  _alignTree->Branch("detDim", &_detDim, "detDim/I");
170  _alignTree->Branch("surW", &_surWidth, "surW/F");
171  _alignTree->Branch("surL", &_surLength, "surL/F");
172  _alignTree->Branch("surRot", &_surRot, "surRot[9]/D");
173  _alignTree->Branch("identifiers", &_identifiers, "identifiers[6]/I");
174  _alignTree->Branch("type", &_type, "type/I");
175  _alignTree->Branch("surfDeform", &_surfDeform, "surfDeform[13]/D");
176 
177  for (std::vector<TrackerMap>::iterator it = m_vtkmap.begin(); it != m_vtkmap.end(); ++it) {
178  it->setPalette(1) ;
179  it->addPixel(true) ;
180  }
181 
183  TFileDirectory subDir_All = fs->mkdir( "AllSubdetectors" );
184  TFileDirectory subDir_PXB = fs->mkdir( "PixelBarrel" );
185  TFileDirectory subDir_PXF = fs->mkdir( "PixelEndcap" );
186  for (int ii = 0; ii < 13; ++ii) {
187  std::stringstream histname0 ;
188  histname0 << "SurfDeform_Par_" << ii ;
189  m_h1[histname0.str()] = subDir_All.make<TH1D>((histname0.str()).c_str(),(histname0.str()).c_str(),m_nBins,m_rangeLow,m_rangeHigh);
190 
191  std::stringstream histname1 ;
192  histname1 << "SurfDeform_PixelBarrel_Par_" << ii ;
193  m_h1[histname1.str()] = subDir_PXB.make<TH1D>((histname1.str()).c_str(),(histname1.str()).c_str(),m_nBins,m_rangeLow,m_rangeHigh);
194 
195  std::stringstream histname2 ;
196  histname2 << "SurfDeform_PixelEndcap_Par_" << ii ;
197  m_h1[histname2.str()] = subDir_PXF.make<TH1D>((histname2.str()).c_str(),(histname2.str()).c_str(),m_nBins,m_rangeLow,m_rangeHigh);
198  }
199 
200 }
201 
203  firstEvent_ = true;
204 }
205 
207 
208  int iname(0) ;
209  for (std::vector<TrackerMap>::iterator it = m_vtkmap.begin(); it != m_vtkmap.end(); ++it) {
210  std::stringstream mapname ;
211  mapname << "TkMap_SurfDeform" << iname << ".png" ;
212  it->save(true,0,0,mapname.str());
213  mapname.str( std::string() );
214  mapname.clear() ;
215  mapname << "TkMap_SurfDeform" << iname << ".pdf" ;
216  it->save(true,0,0,mapname.str());
217  ++iname ;
218  }
219 
220  _theFile->cd();
221  _alignTree->Write();
222  _theFile->Close();
223 
224 }
225 
227 
228  if (firstEvent_) {
229 
230  //Retrieve tracker topology from geometry
231  edm::ESHandle<TrackerTopology> tTopoHandle;
232  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
233  const TrackerTopology* const tTopo = tTopoHandle.product();
234 
235  //upload the ROOT geometries
236  createROOTGeometry(iSetup);
237 
238  //setting the levels being used in the geometry comparator
239  edm::LogInfo("TrackerGeometryCompare") << "levels: " << _levelStrings.size();
240  for (const auto& level: _levelStrings){
242  edm::LogInfo("TrackerGeometryCompare") << "level: " << level;
243  edm::LogInfo("TrackerGeometryCompare")
244  << "structure type: "
246  }
247 
248 
249  //set common tracker system first
250  // if setting the tracker common system
251  if (_setCommonTrackerSystem != "NONE"){
253  }
254 
255  //compare the goemetries
258 
259  //write out ntuple
260  //might be better to do within output module
261 
262  if (_writeToDB){
263  Alignments* myAlignments = currentTracker->alignments();
264  AlignmentErrorsExtended* myAlignmentErrorsExtended = currentTracker->alignmentErrors();
265 
266  // 2. Store alignment[Error]s to DB
268  // Call service
269  if( !poolDbService.isAvailable() ) // Die if not available
270  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
271 
272  poolDbService->writeOne<Alignments>(&(*myAlignments), poolDbService->beginOfTime(), "TrackerAlignmentRcd");
273  poolDbService->writeOne<AlignmentErrorsExtended>(&(*myAlignmentErrorsExtended), poolDbService->beginOfTime(), "TrackerAlignmentErrorExtendedRcd");
274 
275  }
276 
277  firstEvent_ = false;
278  }
279 }
280 
282 
283  int inputRawId1, inputRawId2;
284  double inputX1, inputY1, inputZ1, inputX2, inputY2, inputZ2;
285  double inputAlpha1, inputBeta1, inputGamma1, inputAlpha2, inputBeta2, inputGamma2;
286 
287  //Retrieve tracker topology from geometry
288  edm::ESHandle<TrackerTopology> tTopoHandle;
289  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
290  const TrackerTopology* const tTopo = tTopoHandle.product();
291 
292  // Fill module IDs from file into a list
294  if (_moduleListFile.is_open()){
296  while(!_moduleListFile.eof()){
297  std::getline(_moduleListFile,line);
298  _moduleList.push_back(std::atoi(line.c_str()));
299  }
300  }
301  else{
302  std::cout << "Error: Module list not found! Please verify that given list exists!" << std::endl;
303  }
304 
305  //declare alignments
306  Alignments* alignments1 = new Alignments();
307  AlignmentErrorsExtended* alignmentErrors1 = new AlignmentErrorsExtended();
308  if (_inputFilename1 != "IDEAL"){
309  _inputRootFile1 = new TFile(_inputFilename1.c_str());
310  TTree* _inputTree01 = (TTree*) _inputRootFile1->Get(_inputTreenameAlign.c_str());
311  _inputTree01->SetBranchAddress("rawid", &inputRawId1);
312  _inputTree01->SetBranchAddress("x", &inputX1);
313  _inputTree01->SetBranchAddress("y", &inputY1);
314  _inputTree01->SetBranchAddress("z", &inputZ1);
315  _inputTree01->SetBranchAddress("alpha", &inputAlpha1);
316  _inputTree01->SetBranchAddress("beta", &inputBeta1);
317  _inputTree01->SetBranchAddress("gamma", &inputGamma1);
318 
319  int nEntries1 = _inputTree01->GetEntries();
320  //fill alignments
321  for (int i = 0; i < nEntries1; ++i){
322 
323  _inputTree01->GetEntry(i);
324  CLHEP::Hep3Vector translation1(inputX1, inputY1, inputZ1);
325  CLHEP::HepEulerAngles eulerangles1(inputAlpha1,inputBeta1,inputGamma1);
326  uint32_t detid1 = inputRawId1;
327  AlignTransform transform1(translation1, eulerangles1, detid1);
328  alignments1->m_align.push_back(transform1);
329 
330  //dummy errors
331  CLHEP::HepSymMatrix clhepSymMatrix(3,0);
332  AlignTransformErrorExtended transformError(clhepSymMatrix, detid1);
333  alignmentErrors1->m_alignError.push_back(transformError);
334  }
335 
336  // to get the right order
337  std::sort( alignments1->m_align.begin(), alignments1->m_align.end(), lessAlignmentDetId<AlignTransform>() );
338  std::sort( alignmentErrors1->m_alignError.begin(), alignmentErrors1->m_alignError.end(), lessAlignmentDetId<AlignTransformErrorExtended>() );
339  }
340  //------------------
341  Alignments* alignments2 = new Alignments();
342  AlignmentErrorsExtended* alignmentErrors2 = new AlignmentErrorsExtended();
343  if (_inputFilename2 != "IDEAL"){
344  _inputRootFile2 = new TFile(_inputFilename2.c_str());
345  TTree* _inputTree02 = (TTree*) _inputRootFile2->Get(_inputTreenameAlign.c_str());
346  _inputTree02->SetBranchAddress("rawid", &inputRawId2);
347  _inputTree02->SetBranchAddress("x", &inputX2);
348  _inputTree02->SetBranchAddress("y", &inputY2);
349  _inputTree02->SetBranchAddress("z", &inputZ2);
350  _inputTree02->SetBranchAddress("alpha", &inputAlpha2);
351  _inputTree02->SetBranchAddress("beta", &inputBeta2);
352  _inputTree02->SetBranchAddress("gamma", &inputGamma2);
353 
354  int nEntries2 = _inputTree02->GetEntries();
355  //fill alignments
356  for (int i = 0; i < nEntries2; ++i){
357 
358  _inputTree02->GetEntry(i);
359  CLHEP::Hep3Vector translation2(inputX2, inputY2, inputZ2);
360  CLHEP::HepEulerAngles eulerangles2(inputAlpha2,inputBeta2,inputGamma2);
361  uint32_t detid2 = inputRawId2;
362  AlignTransform transform2(translation2, eulerangles2, detid2);
363  alignments2->m_align.push_back(transform2);
364 
365  //dummy errors
366  CLHEP::HepSymMatrix clhepSymMatrix(3,0);
367  AlignTransformErrorExtended transformError(clhepSymMatrix, detid2);
368  alignmentErrors2->m_alignError.push_back(transformError);
369  }
370 
371  //to get the right order
372  std::sort( alignments2->m_align.begin(), alignments2->m_align.end(), lessAlignmentDetId<AlignTransform>() );
373  std::sort( alignmentErrors2->m_alignError.begin(), alignmentErrors2->m_alignError.end(), lessAlignmentDetId<AlignTransformErrorExtended>() );
374  }
375 
376  //accessing the initial geometry
378  iSetup.get<IdealGeometryRecord>().get(cpv);
379  edm::ESHandle<GeometricDet> theGeometricDet;
380  iSetup.get<IdealGeometryRecord>().get(theGeometricDet);
382  iSetup.get<PTrackerParametersRcd>().get( ptp );
383  TrackerGeomBuilderFromGeometricDet trackerBuilder;
384 
385  edm::ESHandle<Alignments> globalPositionRcd;
386  iSetup.get<TrackerDigiGeometryRecord>().getRecord<GlobalPositionRcd>().get(globalPositionRcd);
387 
388  //reference tracker
389  TrackerGeometry* theRefTracker = trackerBuilder.build(&*theGeometricDet, *ptp, tTopo );
390  if (_inputFilename1 != "IDEAL"){
391  GeometryAligner aligner1;
392  aligner1.applyAlignments<TrackerGeometry>( &(*theRefTracker), &(*alignments1), &(*alignmentErrors1),
393  align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Tracker)));
394  }
395  referenceTracker = new AlignableTracker(&(*theRefTracker), tTopo);
396  //referenceTracker->setSurfaceDeformation(surfDef1, true) ;
397 
398  int inputRawid1;
399  int inputRawid2;
400  int inputDtype1, inputDtype2 ;
401  std::vector<double> inputDpar1;
402  std::vector<double> inputDpar2 ;
403  std::vector<double>* p_inputDpar1 = &inputDpar1;
404  std::vector<double>* p_inputDpar2 = &inputDpar2;
405 
406  const std::vector<Alignable*> comp1 = referenceTracker->deepComponents();
407 
408  SurfaceDeformation * surfDef1;
409  if (_inputFilename1 != "IDEAL"){
410  TTree* _inputTree11 = (TTree*) _inputRootFile1->Get(_inputTreenameDeform.c_str());
411  _inputTree11->SetBranchAddress("irawid", &inputRawid1);
412  _inputTree11->SetBranchAddress("dtype", &inputDtype1);
413  _inputTree11->SetBranchAddress("dpar", &p_inputDpar1);
414 
415  unsigned int nEntries11 = _inputTree11->GetEntries();
416  edm::LogInfo("TrackerGeometryCompare") << " nentries11 = " << nEntries11 << std::endl ;
417  for (unsigned int iEntry = 0; iEntry < nEntries11; ++iEntry) {
418  _inputTree11->GetEntry(iEntry) ;
419 
420  surfDef1 = SurfaceDeformationFactory::create( inputDtype1, inputDpar1);
421 
422  if (int(comp1[iEntry]->id()) == inputRawid1) {
423  comp1[iEntry]->setSurfaceDeformation(surfDef1, true) ;
424  }
425 
426  }
427  }
428 
429  //currernt tracker
430  TrackerGeometry* theCurTracker = trackerBuilder.build(&*theGeometricDet, *ptp, tTopo);
431  if (_inputFilename2 != "IDEAL"){
432  GeometryAligner aligner2;
433  aligner2.applyAlignments<TrackerGeometry>( &(*theCurTracker), &(*alignments2), &(*alignmentErrors2),
434  align::DetectorGlobalPosition(*globalPositionRcd, DetId(DetId::Tracker)));
435  }
436  currentTracker = new AlignableTracker(&(*theCurTracker), tTopo);
437 
438  const std::vector<Alignable*> comp2 = currentTracker->deepComponents();
439 
440  SurfaceDeformation * surfDef2 ;
441  if (_inputFilename2 != "IDEAL"){
442  TTree* _inputTree12 = (TTree*) _inputRootFile2->Get(_inputTreenameDeform.c_str());
443  _inputTree12->SetBranchAddress("irawid", &inputRawid2);
444  _inputTree12->SetBranchAddress("dtype", &inputDtype2);
445  _inputTree12->SetBranchAddress("dpar", &p_inputDpar2);
446 
447  unsigned int nEntries12 = _inputTree12->GetEntries();
448  edm::LogInfo("TrackerGeometryCompare") << " nentries12 = " << nEntries12 << std::endl ;
449  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
450  _inputTree12->GetEntry(iEntry) ;
451 
452  surfDef2 = SurfaceDeformationFactory::create( inputDtype2, inputDpar2);
453 
454  if (int(comp2[iEntry]->id()) == inputRawid2) {
455  comp2[iEntry]->setSurfaceDeformation(surfDef2, true) ;
456  }
457 
458  }
459  }
460 
461  delete alignments1;
462  delete alignmentErrors1;
463  delete alignments2;
464  delete alignmentErrors2;
465 
466 }
467 
468 void TrackerGeometryCompare::compareSurfaceDeformations(TTree* refTree, TTree* curTree) {
469 
470  if (_inputFilename1 != "IDEAL" && _inputFilename2 != "IDEAL") {
471 
472  int inputRawid1;
473  int inputRawid2;
474  int inputSubdetid1, inputSubdetid2 ;
475  int inputDtype1, inputDtype2 ;
476  std::vector<double> inputDpar1;
477  std::vector<double> inputDpar2 ;
478  std::vector<double>* p_inputDpar1 = &inputDpar1;
479  std::vector<double>* p_inputDpar2 = &inputDpar2;
480 
481  TTree* refTree = (TTree*) _inputRootFile1->Get(_inputTreenameDeform.c_str());
482  refTree->SetBranchAddress("irawid", &inputRawid1);
483  refTree->SetBranchAddress("subdetid", &inputSubdetid1);
484  refTree->SetBranchAddress("dtype", &inputDtype1);
485  refTree->SetBranchAddress("dpar", &p_inputDpar1);
486 
487  TTree* curTree = (TTree*) _inputRootFile2->Get(_inputTreenameDeform.c_str());
488  curTree->SetBranchAddress("irawid", &inputRawid2);
489  curTree->SetBranchAddress("subdetid", &inputSubdetid2);
490  curTree->SetBranchAddress("dtype", &inputDtype2);
491  curTree->SetBranchAddress("dpar", &p_inputDpar2);
492 
493  unsigned int nEntries11 = refTree->GetEntries();
494  unsigned int nEntries12 = curTree->GetEntries();
495 
496  if (nEntries11 != nEntries12) {
497  edm::LogError("TrackerGeometryCompare") << " Surface deformation parameters in two geometries differ!\n" ;
498  return ;
499  }
500 
501  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
502  refTree->GetEntry(iEntry) ;
503  curTree->GetEntry(iEntry) ;
504  for (int ii = 0; ii < 13; ++ii) { _surfDeform[ii] = -1.0 ; }
505  for (int npar = 0; npar < int(inputDpar2.size()); ++npar ) {
506  if (inputRawid1 == inputRawid2) {
507  _surfDeform[npar] = inputDpar2.at(npar) - inputDpar1.at(npar) ;
508  std::stringstream histname0 ;
509  histname0 << "SurfDeform_Par_" << npar ;
510  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname0.str()]->Fill(_surfDeform[npar]) ;
511  if (inputSubdetid1 == 1 && inputSubdetid2 == 1) {
512  std::stringstream histname1 ;
513  histname1 << "SurfDeform_PixelBarrel_Par_" << npar ;
514  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname1.str()]->Fill(_surfDeform[npar]) ;
515  }
516  if (inputSubdetid1 == 2 && inputSubdetid2 == 2) {
517  std::stringstream histname2 ;
518  histname2 << "SurfDeform_PixelEndcap_Par_" << npar ;
519  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname2.str()]->Fill(_surfDeform[npar]) ;
520  }
521  (m_vtkmap.at(npar)).fill_current_val(inputRawid1,_surfDeform[npar]) ;
522  }
523  }
524  }
525 
526  } else if ( _inputFilename1 == "IDEAL" && _inputFilename2 != "IDEAL" ) {
527 
528  int inputRawid2;
529  int inputSubdetid2 ;
530  int inputDtype2 ;
531  std::vector<double> inputDpar2 ;
532  std::vector<double>* p_inputDpar2 = &inputDpar2;
533 
534  TTree* curTree = (TTree*) _inputRootFile2->Get(_inputTreenameDeform.c_str());
535  curTree->SetBranchAddress("irawid", &inputRawid2);
536  curTree->SetBranchAddress("subdetid", &inputSubdetid2);
537  curTree->SetBranchAddress("dtype", &inputDtype2);
538  curTree->SetBranchAddress("dpar", &p_inputDpar2);
539 
540  unsigned int nEntries12 = curTree->GetEntries();
541 
542  for (unsigned int iEntry = 0; iEntry < nEntries12; ++iEntry) {
543  curTree->GetEntry(iEntry) ;
544  for (int ii = 0; ii < 12; ++ii) { _surfDeform[ii] = -1.0 ; }
545  for (int npar = 0; npar < int(inputDpar2.size()); ++npar ) {
546  _surfDeform[npar] = inputDpar2.at(npar) ;
547  std::stringstream histname0 ;
548  histname0 << "SurfDeform_Par_" << npar ;
549  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname0.str()]->Fill(_surfDeform[npar]) ;
550  if (inputSubdetid2 == 1) {
551  std::stringstream histname1 ;
552  histname1 << "SurfDeform_PixelBarrel_Par_" << npar ;
553  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname1.str()]->Fill(_surfDeform[npar]) ;
554  }
555  if (inputSubdetid2 == 2) {
556  std::stringstream histname2 ;
557  histname2 << "SurfDeform_PixelEndcap_Par_" << npar ;
558  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname2.str()]->Fill(_surfDeform[npar]) ;
559  }
560  (m_vtkmap.at(npar)).fill_current_val(inputRawid2,_surfDeform[npar]) ;
561  }
562  }
563 
564  } else if ( _inputFilename1 != "IDEAL" && _inputFilename2 == "IDEAL" ) {
565 
566  int inputRawid1;
567  int inputSubdetid1 ;
568  int inputDtype1 ;
569  std::vector<double> inputDpar1;
570  std::vector<double>* p_inputDpar1 = &inputDpar1;
571 
572  TTree* refTree = (TTree*) _inputRootFile1->Get(_inputTreenameDeform.c_str());
573  refTree->SetBranchAddress("irawid", &inputRawid1);
574  refTree->SetBranchAddress("subdetid", &inputSubdetid1);
575  refTree->SetBranchAddress("dtype", &inputDtype1);
576  refTree->SetBranchAddress("dpar", &p_inputDpar1);
577 
578  unsigned int nEntries11 = refTree->GetEntries();
579 
580  for (unsigned int iEntry = 0; iEntry < nEntries11; ++iEntry) {
581  refTree->GetEntry(iEntry) ;
582  for (int ii = 0; ii < 12; ++ii) { _surfDeform[ii] = -1.0 ; }
583  for (int npar = 0; npar < int(inputDpar1.size()); ++npar ) {
584  _surfDeform[npar] = - inputDpar1.at(npar) ;
585  std::stringstream histname0 ;
586  histname0 << "SurfDeform_Par_" << npar ;
587  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname0.str()]->Fill(_surfDeform[npar]) ;
588  if (inputSubdetid1 == 1) {
589  std::stringstream histname1 ;
590  histname1 << "SurfDeform_PixelBarrel_Par_" << npar ;
591  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname1.str()]->Fill(_surfDeform[npar]) ;
592  }
593  if (inputSubdetid1 == 2) {
594  std::stringstream histname2 ;
595  histname2 << "SurfDeform_PixelEndcap_Par_" << npar ;
596  if ( TMath::Abs(_surfDeform[npar]) > (m_rangeHigh - m_rangeLow)/(10.*m_nBins) ) m_h1[histname2.str()]->Fill(_surfDeform[npar]) ;
597  }
598  (m_vtkmap.at(npar)).fill_current_val(inputRawid1,_surfDeform[npar]) ;
599  }
600  }
601 
602  } else if ( _inputFilename1 == "IDEAL" && _inputFilename2 == "IDEAL" ) {
603 
604  edm::LogInfo("TrackerGeometryCompare") << ">>>> Comparing IDEAL with IDEAL: nothing to do! <<<<\n" ;
605 
606  }
607 
608  return ;
609 }
610 
612 
613  using namespace align ;
614 
615  const std::vector<Alignable*>& refComp = refAli->components();
616  const std::vector<Alignable*>& curComp = curAli->components();
617 
618  unsigned int nComp = refComp.size();
619  //only perform for designate levels
620  bool useLevel = false;
621  for (unsigned int i = 0; i < m_theLevels.size(); ++i){
622  if (refAli->alignableObjectId() == m_theLevels[i]) useLevel = true;
623  }
624 
625  //another added level for difference between det and detunit
626  //if ((refAli->alignableObjectId()==2)&&(nComp == 1)) useLevel = false;
627 
628  //coordinate matching, etc etc
629  if (useLevel){
630  DetId detid(refAli->id());
631 
632  CLHEP::Hep3Vector Rtotal, Wtotal, lRtotal, lWtotal;
633  Rtotal.set(0.,0.,0.);
634  Wtotal.set(0.,0.,0.);
635  lRtotal.set(0.,0.,0.);
636  lWtotal.set(0.,0.,0.);
637 
638  for (int i = 0; i < 100; i++){
640  CLHEP::Hep3Vector dR(diff[0],diff[1],diff[2]);
641  Rtotal+=dR;
642  CLHEP::Hep3Vector dW(diff[3],diff[4],diff[5]);
643  CLHEP::HepRotation rot(Wtotal.unit(),Wtotal.mag());
644  CLHEP::HepRotation drot(dW.unit(),dW.mag());
645  rot*=drot;
646  Wtotal.set(rot.axis().x()*rot.delta(), rot.axis().y()*rot.delta(), rot.axis().z()*rot.delta());
647  // local coordinates
648  lRtotal.set(diff[6],diff[7],diff[8]);
649  lWtotal.set(diff[9],diff[10],diff[11]);
650 
651  align::moveAlignable(curAli, diff);
652  float tolerance = 1e-7;
654  align::GlobalVector checkR(check[0],check[1],check[2]);
655  align::GlobalVector checkW(check[3],check[4],check[5]);
656  if ((checkR.mag() > tolerance)||(checkW.mag() > tolerance)){
657  edm::LogInfo("TrackerGeometryCompare") << "Tolerance Exceeded!(alObjId: " << refAli->alignableObjectId()
658  << ", rawId: " << refAli->geomDetId().rawId()
659  << ", subdetId: "<< detid.subdetId() << "): " << diff;
660  throw cms::Exception("Tolerance in TrackerGeometryCompare exceeded");
661  }
662  else{
663  break;
664  }
665  }
666 
667  AlgebraicVector TRtot(12);
668  // global
669  TRtot(1) = Rtotal.x(); TRtot(2) = Rtotal.y(); TRtot(3) = Rtotal.z();
670  TRtot(4) = Wtotal.x(); TRtot(5) = Wtotal.y(); TRtot(6) = Wtotal.z();
671  // local
672  TRtot(7) = lRtotal.x(); TRtot(8) = lRtotal.y(); TRtot(9) = lRtotal.z();
673  TRtot(10) = lWtotal.x(); TRtot(11) = lWtotal.y(); TRtot(12) = lWtotal.z();
674 
675  fillTree(refAli, TRtot, tTopo, iSetup);
676  }
677 
678  // another added level for difference between det and detunit
679  for (unsigned int i = 0; i < nComp; ++i)
680  compareGeometries(refComp[i],curComp[i],tTopo,iSetup);
681 
682 }
683 
685 
686  edm::LogInfo("TrackerGeometryCompare") << "Setting Common Tracker System....";
687 
688  // DM_534??AlignableObjectId dummy;
689  // DM_534??_commonTrackerLevel = dummy.nameToType(_setCommonTrackerSystem);
691 
693 
694  align::EulerAngles dOmega(3); dOmega[0] = _TrackerCommonR.x() ; dOmega[1] = _TrackerCommonR.y(); dOmega[2] = _TrackerCommonR.z();
697 
698  std::cout << "what we get from overlaying the pixels..." << theR << ", " << rot << std::endl;
699 
700  //transform to the Tracker System
702  align::GlobalVector cmDiff( trackerCM.x()-_TrackerCommonCM.x(), trackerCM.y()-_TrackerCommonCM.y(), trackerCM.z()-_TrackerCommonCM.z() );
703 
704  std::cout << "Pixel CM: " << _TrackerCommonCM << ", tracker CM: " << trackerCM << std::endl;
705 
706  //adjust translational difference factoring in different rotational CM
707  //needed because rotateInGlobalFrame is about CM of alignable, not Tracker
708  align::GlobalVector::BasicVectorType lpvgf = cmDiff.basicVector();
709  align::GlobalVector moveV( rot.multiplyInverse(lpvgf) - lpvgf);
710  align::GlobalVector theRprime(theR + moveV);
711 
712  AlgebraicVector TrackerCommonTR(6);
713  TrackerCommonTR(1) = theRprime.x(); TrackerCommonTR(2) = theRprime.y(); TrackerCommonTR(3) = theRprime.z();
714  TrackerCommonTR(4) = _TrackerCommonR.x(); TrackerCommonTR(5) = _TrackerCommonR.y(); TrackerCommonTR(6) = _TrackerCommonR.z();
715 
716  std::cout << "and after the transformation: " << TrackerCommonTR << std::endl;
717 
718  align::moveAlignable(currentTracker, TrackerCommonTR );
719 
720 }
721 
723 
724  const std::vector<Alignable*>& refComp = refAli->components();
725  const std::vector<Alignable*>& curComp = curAli->components();
726 
727  unsigned int nComp = refComp.size();
728  //only perform for designate levels
729  bool useLevel = false;
730  if (refAli->alignableObjectId() == _commonTrackerLevel) useLevel = true;
731 
732  //useLevel = false;
733  if (useLevel){
734  CLHEP::Hep3Vector Rtotal, Wtotal;
735  Rtotal.set(0.,0.,0.); Wtotal.set(0.,0.,0.);
736 
738  CLHEP::Hep3Vector dR(diff[0],diff[1],diff[2]);
739  Rtotal+=dR;
740  CLHEP::Hep3Vector dW(diff[3],diff[4],diff[5]);
741  CLHEP::HepRotation rot(Wtotal.unit(),Wtotal.mag());
742  CLHEP::HepRotation drot(dW.unit(),dW.mag());
743  rot*=drot;
744  Wtotal.set(rot.axis().x()*rot.delta(), rot.axis().y()*rot.delta(), rot.axis().z()*rot.delta());
745  /*
746  //std::cout << "a";
747  //if (refAli->alignableObjectId() == 1) std::cout << "DIFF: " << diff << std::endl;
748  align::moveAlignable(curAli, diff);
749  float tolerance = 1e-7;
750  AlgebraicVector check = align::diffAlignables(refAli,curAli, _weightBy, _weightById, _weightByIdVector);
751  align::GlobalVector checkR(check[0],check[1],check[2]);
752  align::GlobalVector checkW(check[3],check[4],check[5]);
753  DetId detid(refAli->id());
754  if ((checkR.mag() > tolerance)||(checkW.mag() > tolerance)){
755  edm::LogInfo("TrackerGeometryCompare") << "Tolerance Exceeded!(alObjId: " << refAli->alignableObjectId()
756  << ", rawId: " << refAli->geomDetId().rawId()
757  << ", subdetId: "<< detid.subdetId() << "): " << diff;
758  }
759  else{
760  break;
761  }
762  }
763  */
764 
765  //_TrackerCommonT.set(Rtotal.x(), Rtotal.y(), Rtotal.z());
766  _TrackerCommonT = align::GlobalVector(Rtotal.x(), Rtotal.y(), Rtotal.z());
767  _TrackerCommonR = align::GlobalVector(Wtotal.x(), Wtotal.y(), Wtotal.z());
768  _TrackerCommonCM = curAli->globalPosition();
769  //_TrackerCommonTR(1) = Rtotal.x(); _TrackerCommonTR(2) = Rtotal.y(); _TrackerCommonTR(3) = Rtotal.z();
770  //_TrackerCommonTR(4) = Wtotal.x(); _TrackerCommonTR(5) = Wtotal.y(); _TrackerCommonTR(6) = Wtotal.z();
771 
772 
773  }
774  else{
775  for (unsigned int i = 0; i < nComp; ++i) diffCommonTrackerSystem(refComp[i],curComp[i]);
776  }
777 
778 
779 }
780 
782 
783  //Get bad modules
784  edm::ESHandle<SiPixelQuality> SiPixelModules;
785  iSetup.get<SiPixelQualityRcd>().get(SiPixelModules);
786  edm::ESHandle<SiStripQuality> SiStripModules;
787  iSetup.get<SiStripQualityRcd>().get(SiStripModules);
788 
789  _id = refAli->id();
790 
791  _badModuleQuality = 0;
792  //check if module has a bad quality tag
793  if (SiPixelModules->IsModuleBad(_id)){
794  _badModuleQuality = 1;
795 
796  }
797  if (SiStripModules->IsModuleBad(_id)){
798  _badModuleQuality = 1;
799  }
800 
801  //check if module is in a given list of bad/untouched etc. modules
802  _inModuleList = 0;
803  for (unsigned int i = 0 ; i< _moduleList.size(); i++){
804  if ( _moduleList[i] == _id)
805  {
806  _inModuleList = 1;
807  break;
808  }
809  }
810 
811  _level = refAli->alignableObjectId();
812  //need if ali has no mother
813  if (refAli->mother()){
814  _mid = refAli->mother()->geomDetId().rawId();
815  _mlevel = refAli->mother()->alignableObjectId();
816  }
817  else{
818  _mid = -1;
819  _mlevel = -1;
820  }
821  DetId detid(_id);
822  _sublevel = detid.subdetId();
823  fillIdentifiers(_sublevel, _id , tTopo);
824  _xVal = refAli->globalPosition().x();
825  _yVal = refAli->globalPosition().y();
826  _zVal = refAli->globalPosition().z();
828  _rVal = vec.perp();
829  _phiVal = vec.phi();
830  _etaVal = vec.eta();
832  align::EulerAngles eulerAngles = align::toAngles(rot);
833  _alphaVal = eulerAngles[0];
834  _betaVal = eulerAngles[1];
835  _gammaVal = eulerAngles[2];
836  // global
837  _dxVal = diff[0];
838  _dyVal = diff[1];
839  _dzVal = diff[2];
840  // local
841  _duVal = diff[6];
842  _dvVal = diff[7];
843  _dwVal = diff[8];
844  //...TODO...
846  //getting dR and dPhi
849  _drVal = vCur.perp() - vRef.perp();
850  _dphiVal = vCur.phi() - vRef.phi();
851  // global
852  _dalphaVal = diff[3];
853  _dbetaVal = diff[4];
854  _dgammaVal = diff[5];
855  // local
856  _daVal = diff[9];
857  _dbVal = diff[10];
858  _dgVal = diff[11];
859 
860  //detIdFlag
861  if (refAli->alignableObjectId() == align::AlignableDetUnit){
862  if (_detIdFlag){
863  if ((passIdCut(refAli->id()))||(passIdCut(refAli->mother()->id()))){
864  _useDetId = 1;
865  }
866  else{
867  _useDetId = 0;
868  }
869  }
870  }
871  // det module dimension
872  if (refAli->alignableObjectId() == align::AlignableDetUnit){
873  if (refAli->mother()->alignableObjectId() != align::AlignableDet) _detDim = 1;
874  else if (refAli->mother()->alignableObjectId() == align::AlignableDet) _detDim = 2;
875  }
876  else _detDim = 0;
877 
878  _surWidth = refAli->surface().width();
879  _surLength = refAli->surface().length();
880  align::RotationType rt = refAli->globalRotation();
881  _surRot[0] = rt.xx(); _surRot[1] = rt.xy(); _surRot[2] = rt.xz();
882  _surRot[3] = rt.yx(); _surRot[4] = rt.yy(); _surRot[5] = rt.yz();
883  _surRot[6] = rt.zx(); _surRot[7] = rt.zy(); _surRot[8] = rt.zz();
884 
885  //Fill
886  _alignTree->Fill();
887 
888 }
889 
891 
892  //getting the right alignables for the alignment record
893  std::vector<Alignable*> detPB = ali->pixelHalfBarrelGeomDets();
894  std::vector<Alignable*> detPEC = ali->pixelEndcapGeomDets();
895  std::vector<Alignable*> detTIB = ali->innerBarrelGeomDets();
896  std::vector<Alignable*> detTID = ali->TIDGeomDets();
897  std::vector<Alignable*> detTOB = ali->outerBarrelGeomDets();
898  std::vector<Alignable*> detTEC = ali->endcapGeomDets();
899 
900  std::vector<Alignable*> allGeomDets;
901  std::copy(detPB.begin(), detPB.end(), std::back_inserter(allGeomDets));
902  std::copy(detPEC.begin(), detPEC.end(), std::back_inserter(allGeomDets));
903  std::copy(detTIB.begin(), detTIB.end(), std::back_inserter(allGeomDets));
904  std::copy(detTID.begin(), detTID.end(), std::back_inserter(allGeomDets));
905  std::copy(detTOB.begin(), detTOB.end(), std::back_inserter(allGeomDets));
906  std::copy(detTEC.begin(), detTEC.end(), std::back_inserter(allGeomDets));
907 
908  std::vector<Alignable*> rcdAlis;
909  for (std::vector<Alignable*>::iterator i = allGeomDets.begin(); i!= allGeomDets.end(); i++){
910  if ((*i)->components().size() == 1){
911  rcdAlis.push_back((*i));
912  }
913  else if ((*i)->components().size() > 1){
914  rcdAlis.push_back((*i));
915  std::vector<Alignable*> comp = (*i)->components();
916  for (std::vector<Alignable*>::iterator j = comp.begin(); j != comp.end(); j++){
917  rcdAlis.push_back((*j));
918  }
919  }
920  }
921 
922  //turning them into alignments
923  for(std::vector<Alignable*>::iterator k = rcdAlis.begin(); k != rcdAlis.end(); k++){
924 
925  const SurveyDet* surveyInfo = (*k)->survey();
926  align::PositionType pos(surveyInfo->position());
927  align::RotationType rot(surveyInfo->rotation());
928  CLHEP::Hep3Vector clhepVector(pos.x(),pos.y(),pos.z());
929  CLHEP::HepRotation clhepRotation( CLHEP::HepRep3x3(rot.xx(),rot.xy(),rot.xz(),rot.yx(),rot.yy(),rot.yz(),rot.zx(),rot.zy(),rot.zz()));
930  AlignTransform transform(clhepVector, clhepRotation, (*k)->id());
931  AlignTransformErrorExtended transformError(CLHEP::HepSymMatrix(3,1), (*k)->id());
932  alignVals->m_align.push_back(transform);
933  alignErrors->m_alignError.push_back(transformError);
934  }
935 
936  //to get the right order
937  std::sort( alignVals->m_align.begin(), alignVals->m_align.end(), lessAlignmentDetId<AlignTransform>() );
938  std::sort( alignErrors->m_alignError.begin(), alignErrors->m_alignError.end(), lessAlignmentDetId<AlignTransformErrorExtended>() );
939 
940 }
941 
943 
944  const std::vector<Alignable*>& comp = ali->components();
945 
946  unsigned int nComp = comp.size();
947 
948  for (unsigned int i = 0; i < nComp; ++i) addSurveyInfo(comp[i]);
949 
951 
952  if ( ali->geomDetId().rawId() != error.rawId() ||
953  ali->alignableObjectId() != error.structureType() )
954  {
955  throw cms::Exception("DatabaseError")
956  << "Error reading survey info from DB. Mismatched id!";
957  }
958 
959  const CLHEP::Hep3Vector& pos = theSurveyValues->m_align[theSurveyIndex].translation();
960  const CLHEP::HepRotation& rot = theSurveyValues->m_align[theSurveyIndex].rotation();
961 
962  AlignableSurface surf( align::PositionType( pos.x(), pos.y(), pos.z() ),
963  align::RotationType( rot.xx(), rot.xy(), rot.xz(),
964  rot.yx(), rot.yy(), rot.yz(),
965  rot.zx(), rot.zy(), rot.zz() ) );
966 
967  surf.setWidth( ali->surface().width() );
968  surf.setLength( ali->surface().length() );
969 
970  ali->setSurvey( new SurveyDet( surf, error.matrix() ) );
971 
972  ++theSurveyIndex;
973 
974 }
975 
977 
978  bool pass = false;
979  int nEntries = _detIdFlagVector.size();
980 
981  for (int i = 0; i < nEntries; i++){
982  if (_detIdFlagVector[i] == id) pass = true;
983  }
984 
985  return pass;
986 
987 }
988 
989 void TrackerGeometryCompare::fillIdentifiers( int subdetlevel, int rawid, const TrackerTopology* tTopo){
990 
991 
992  switch( subdetlevel ){
993 
994  case 1:
995  {
996 
997  _identifiers[0] = tTopo->pxbModule( rawid );
998  _identifiers[1] = tTopo->pxbLadder( rawid );
999  _identifiers[2] = tTopo->pxbLayer( rawid );
1000  _identifiers[3] = 999;
1001  _identifiers[4] = 999;
1002  _identifiers[5] = 999;
1003  break;
1004  }
1005  case 2:
1006  {
1007 
1008  _identifiers[0] = tTopo->pxfModule( rawid );
1009  _identifiers[1] = tTopo->pxfPanel( rawid );
1010  _identifiers[2] = tTopo->pxfBlade( rawid );
1011  _identifiers[3] = tTopo->pxfDisk( rawid );
1012  _identifiers[4] = tTopo->pxfSide( rawid );
1013  _identifiers[5] = 999;
1014  break;
1015  }
1016  case 3:
1017  {
1018 
1019  _identifiers[0] = tTopo->tibModule( rawid );
1020  _identifiers[1] = tTopo->tibStringInfo( rawid )[0];
1021  _identifiers[2] = tTopo->tibStringInfo( rawid )[1];
1022  _identifiers[3] = tTopo->tibStringInfo( rawid )[2];
1023  _identifiers[4] = tTopo->tibLayer( rawid );
1024  _identifiers[5] = 999;
1025  break;
1026  }
1027  case 4:
1028  {
1029 
1030  _identifiers[0] = tTopo->tidModuleInfo( rawid )[0];
1031  _identifiers[1] = tTopo->tidModuleInfo( rawid )[1];
1032  _identifiers[2] = tTopo->tidRing( rawid );
1033  _identifiers[3] = tTopo->tidWheel( rawid );
1034  _identifiers[4] = tTopo->tidSide( rawid );
1035  _identifiers[5] = 999;
1036  break;
1037  }
1038  case 5:
1039  {
1040 
1041  _identifiers[0] = tTopo->tobModule( rawid );
1042  _identifiers[1] = tTopo->tobRodInfo( rawid )[0];
1043  _identifiers[2] = tTopo->tobRodInfo( rawid )[1];
1044  _identifiers[3] = tTopo->tobLayer( rawid );
1045  _identifiers[4] = 999;
1046  _identifiers[5] = 999;
1047  break;
1048  }
1049  case 6:
1050  {
1051 
1052  _identifiers[0] = tTopo->tecModule( rawid );
1053  _identifiers[1] = tTopo->tecRing( rawid );
1054  _identifiers[2] = tTopo->tecPetalInfo( rawid )[0];
1055  _identifiers[3] = tTopo->tecPetalInfo( rawid )[1];
1056  _identifiers[4] = tTopo->tecWheel( rawid );
1057  _identifiers[5] = tTopo->tecSide( rawid );
1058  break;
1059  }
1060  default:
1061  {
1062  std::cout << "Error: bad subdetid!!" << std::endl;
1063  break;
1064  }
1065 
1066  }
1067 }
1068 
1069 
T xx() const
align::Scalar width() const
align::StructureType stringToId(const char *) const
align::ID id() const
Return the ID of Alignable, i.e. DetId of &#39;first&#39; component GeomDet(Unit).
Definition: Alignable.h:189
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
Alignables & pixelHalfBarrelGeomDets()
Return pixel barrel GeomDets.
align::GlobalVector _TrackerCommonR
T perp() const
Definition: PV3DBase.h:72
unsigned int tibLayer(const DetId &id) const
unsigned int tidRing(const DetId &id) const
Vector3DBase< Scalar, GlobalTag > GlobalVector
Definition: Definitions.h:33
void compareGeometries(Alignable *refAli, Alignable *curAli, const TrackerTopology *tTopo, const edm::EventSetup &iSetup)
AlignmentErrorsExtended * alignmentErrors() const
Return alignment errors, sorted by DetId.
Class to update a given geometry with a set of alignments.
std::vector< unsigned int > tidModuleInfo(const DetId &id) const
std::vector< align::StructureType > m_theLevels
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
unsigned int pxfDisk(const DetId &id) const
ErrorMatrix matrix() const
Definition: SurveyError.h:76
const Alignments * theSurveyValues
unsigned int tecRing(const DetId &id) const
ring id
void addSurveyInfo(Alignable *ali)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
unsigned int pxbLadder(const DetId &id) const
align::GlobalVector _TrackerCommonT
T y() const
Definition: PV3DBase.h:63
T yx() const
AlgebraicVector diffAlignables(Alignable *refAli, Alignable *curAli, const std::string &weightBy, bool weightById, const std::vector< unsigned int > &weightByIdVector)
Definition: AlignTools.cc:10
void diffCommonTrackerSystem(Alignable *refAli, Alignable *curAli)
unsigned int tidWheel(const DetId &id) const
unsigned int pxbModule(const DetId &id) const
std::vector< TrackerMap > m_vtkmap
const RotationType & globalRotation() const
Return the global orientation of the object.
Definition: Alignable.h:141
TrackerGeometry * build(const GeometricDet *gd, const PTrackerParameters &ptp, const TrackerTopology *tTopo)
void setWidth(align::Scalar width)
uint8_t structureType() const
Definition: SurveyError.h:66
std::vector< unsigned int > tibStringInfo(const DetId &id) const
std::vector< AlignTransform > m_align
Definition: Alignments.h:19
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 align::RotationType & rotation() const
Definition: SurveyDet.h:68
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
void setLength(align::Scalar length)
T zx() const
T xy() const
const align::PositionType & position() const
Definition: SurveyDet.h:63
std::map< std::string, TH1D * > m_h1
T zz() const
std::vector< unsigned int > tecPetalInfo(const DetId &id) const
T mag() const
Definition: PV3DBase.h:67
unsigned int tidSide(const DetId &id) const
virtual void beginJob()
Read from DB and print survey info.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
std::vector< unsigned int > tobRodInfo(const DetId &id) const
Alignables & innerBarrelGeomDets()
Return inner barrel GeomDets.
virtual Alignables components() const =0
Return vector of all direct components.
T z() const
Definition: PV3DBase.h:64
Alignables & TIDGeomDets()
Return TID GeomDets.
std::vector< uint32_t > _detIdFlagVector
void get(HolderT &iHolder) const
T Abs(T a)
Definition: MathUtil.h:49
bool isAvailable() const
Definition: Service.h:46
T zy() const
int j
Definition: DBlmapReader.cc:9
bool IsModuleBad(const uint32_t &detid) const
align::ID rawId() const
Definition: SurveyError.h:71
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
TrackerGeometryCompare(const edm::ParameterSet &)
Do nothing. Required by framework.
virtual void analyze(const edm::Event &, const edm::EventSetup &)
T * make(const Args &...args) const
make new ROOT object
EulerAngles toAngles(const RotationType &)
Convert rotation matrix to angles about x-, y-, z-axes (frame rotation).
Definition: Utilities.cc:9
align::StructureType _commonTrackerLevel
T yy() const
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
const AlignableObjectId & objectIdProvider() const
Return tracker alignable object ID provider derived from the tracker&#39;s geometry.
bool IsModuleBad(const uint32_t &detid) const
Alignables & endcapGeomDets()
Return endcap GeomDets.
align::PositionType _TrackerCommonCM
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:135
unsigned int tibModule(const DetId &id) const
Alignables & pixelEndcapGeomDets()
Return pixel endcap GeomDets.
unsigned int pxfModule(const DetId &id) const
void fillTree(Alignable *refAli, const AlgebraicVector &diff, const TrackerTopology *tTopo, const edm::EventSetup &iSetup)
ii
Definition: cuy.py:588
int k[5][pyjets_maxn]
unsigned int pxbLayer(const DetId &id) const
unsigned int tecModule(const DetId &id) const
Definition: DetId.h:18
void applyAlignments(C *geometry, const Alignments *alignments, const AlignmentErrorsExtended *alignmentErrors, const AlignTransform &globalCoordinates)
CLHEP::HepVector AlgebraicVector
AlgebraicVector EulerAngles
Definition: Definitions.h:36
align::Scalar length() const
Alignables & outerBarrelGeomDets()
Return outer barrel GeomDets.
AlignableTracker * currentTracker
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
void surveyToTracker(AlignableTracker *ali, Alignments *alignVals, AlignmentErrorsExtended *alignErrors)
std::vector< AlignTransformErrorExtended > m_alignError
const std::vector< std::string > _levelStrings
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:356
const T & get() const
Definition: EventSetup.h:56
void fillIdentifiers(int subdetlevel, int rawid, const TrackerTopology *tTopo)
unsigned int tobModule(const DetId &id) const
return(e1-e2)*(e1-e2)+dp *dp
T eta() const
Definition: PV3DBase.h:76
AlignableTracker * referenceTracker
void createROOTGeometry(const edm::EventSetup &iSetup)
T xz() const
RotationType toMatrix(const EulerAngles &)
Convert rotation angles about x-, y-, z-axes to matrix.
Definition: Utilities.cc:42
unsigned int pxfSide(const DetId &id) const
const AlignTransform & DetectorGlobalPosition(const Alignments &allGlobals, const DetId &id)
const SurveyErrors * theSurveyErrors
std::vector< unsigned int > _weightByIdVector
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:138
Alignments * alignments() const
Return alignments, sorted by DetId.
std::vector< int > _moduleList
std::vector< SurveyError > m_surveyErrors
Definition: SurveyErrors.h:23
Basic3DVector< T > multiplyInverse(const Basic3DVector< T > &v) const
def check(config)
Definition: trackerTree.py:12
T x() const
Definition: PV3DBase.h:62
unsigned int tecWheel(const DetId &id) const
void moveAlignable(Alignable *ali, AlgebraicVector diff)
Moves the alignable by the AlgebraicVector.
Definition: AlignTools.cc:81
T const * product() const
Definition: ESHandle.h:86
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:94
SurfaceDeformation * create(int type, const std::vector< double > &params)
T yz() const
const DetId & geomDetId() const
Definition: Alignable.h:186
unsigned int pxfPanel(const DetId &id) const
unsigned int pxfBlade(const DetId &id) const
unsigned int tobLayer(const DetId &id) const
void compareSurfaceDeformations(TTree *_inputTree11, TTree *_inputTree12)
unsigned int tecSide(const DetId &id) const