CMS 3D CMS Logo

AlignableMuon.cc
Go to the documentation of this file.
1 
8 // Framework
10 
19 // Muon components
32 
33 #include <iostream>
34 
35 //--------------------------------------------------------------------------------------------------
37  const CSCGeometry* cscGeometry,
38  const GEMGeometry* gemGeometry)
39  : AlignableComposite(0, align::AlignableMuon), // cannot yet set id, use 0
40  alignableObjectId_(nullptr, dtGeometry, cscGeometry, gemGeometry),
41  doGEM_(false) {
42  // Build the muon barrel
43  buildDTBarrel(dtGeometry);
44 
45  // Build the muon end caps
46  buildCSCEndcap(cscGeometry);
47  if (gemGeometry) {
48  doGEM_ = true;
50  }
51 
52  // Set links to mothers recursively
53  recursiveSetMothers(this);
54 
55  // now can set id as for all composites: id of first component
56  theId = this->components()[0]->id();
57 
58  edm::LogInfo("AlignableMuon") << "Constructing alignable muon objects DONE";
59 }
60 
61 //--------------------------------------------------------------------------------------------------
63  for (align::Alignables::iterator iter = theMuonComponents.begin(); iter != theMuonComponents.end(); iter++) {
64  delete *iter;
65  }
66 }
67 
68 //------------------------------------------------------------------------------
69 void AlignableMuon::update(const DTGeometry* dtGeometry,
70  const CSCGeometry* cscGeometry,
71  const GEMGeometry* gemGeometry) {
72  // update the muon barrel
73  buildDTBarrel(dtGeometry, /* update = */ true);
74 
75  // update the muon end caps
76  buildCSCEndcap(cscGeometry, /* update = */ true);
77  if (gemGeometry) {
78  doGEM_ = true;
79  buildGEMEndcap(gemGeometry, /* update = */ true);
80  }
81  edm::LogInfo("Alignment") << "@SUB=AlignableMuon::update"
82  << "Updating alignable muon objects DONE";
83 }
84 
85 //------------------------------------------------------------------------------
87  LogDebug("Position") << "Constructing AlignableDTBarrel";
88 
89  // Temporary container for chambers in a given station and stations in a given wheel
90  std::vector<AlignableDTChamber*> tmpDTChambersInStation;
91  std::vector<AlignableDTStation*> tmpDTStationsInWheel;
92 
93  // Loop over wheels ( -2..2 )
94  for (int iwh = -2; iwh < 3; iwh++) {
95  // Loop over stations ( 1..4 )
96  for (int ist = 1; ist < 5; ist++) {
97  // Loop over geom DT Chambers
98  int iChamber{0};
99  std::vector<const GeomDet*>
100  theSLs; // FIXME: What is this vector meant to be for? Probably redundant since super layers are handled inside of the AlignableDTChamber.
101  for (const auto& det : pDT->chambers()) {
102  // Get the chamber ID
103  DTChamberId chamberId = det->id();
104 
105  // Get wheel,station and sector of the chamber
106  int wh = chamberId.wheel();
107  int st = chamberId.station();
108  //int se = chamberId.sector();
109 
110  // Select the chambers in a given wheel in a given station
111  if (iwh == wh && ist == st) {
112  if (update) {
113  // Update the alignable DT chamber
114  theDTBarrel.back()->wheel(iwh + 2).station(ist - 1).chamber(iChamber).update(det);
115  } else {
116  // Create the alignable DT chamber
117  AlignableDTChamber* tmpDTChamber = new AlignableDTChamber(det);
118 
119  // Store the DT chambers in a given DT Station and Wheel
120  tmpDTChambersInStation.push_back(tmpDTChamber);
121  }
122 
123  ++iChamber;
124  // End chamber selection
125  }
126 
127  // End loop over chambers
128  }
129 
130  if (!update) {
131  // Store the DT chambers
132  theDTChambers.insert(theDTChambers.end(), tmpDTChambersInStation.begin(), tmpDTChambersInStation.end());
133 
134  // Create the alignable DT station with chambers in a given station and wheel
135  AlignableDTStation* tmpDTStation = new AlignableDTStation(tmpDTChambersInStation);
136 
137  // Store the DT stations in a given wheel
138  tmpDTStationsInWheel.push_back(tmpDTStation);
139 
140  // Clear the temporary vector of chambers in a station
141  tmpDTChambersInStation.clear();
142  }
143  // End loop over stations
144  }
145 
146  if (!update) {
147  // Store The DT stations
148  theDTStations.insert(theDTStations.end(), tmpDTStationsInWheel.begin(), tmpDTStationsInWheel.end());
149 
150  // Create the alignable DT wheel
151  AlignableDTWheel* tmpWheel = new AlignableDTWheel(tmpDTStationsInWheel);
152 
153  // Store the DT wheels
154  theDTWheels.push_back(tmpWheel);
155 
156  // Clear temporary vector of stations in a wheel
157  tmpDTStationsInWheel.clear();
158  }
159 
160  // End loop over wheels
161  }
162 
163  if (!update) {
164  // Create the alignable Muon Barrel
165  AlignableDTBarrel* tmpDTBarrel = new AlignableDTBarrel(theDTWheels);
166 
167  // Store the barrel
168  theDTBarrel.push_back(tmpDTBarrel);
169 
170  // Store the barrel in the muon
171  theMuonComponents.push_back(tmpDTBarrel);
172  }
173 }
174 
175 //------------------------------------------------------------------------------
177  LogDebug("Position") << "Constructing AlignableCSCBarrel";
178 
179  // Temporary container for stations in a given endcap
180  std::vector<AlignableCSCStation*> tmpCSCStationsInEndcap;
181 
182  // Loop over endcaps ( 1..2 )
183  for (int iec = 1; iec < 3; iec++) {
184  // Temporary container for rings in a given station
185  std::vector<AlignableCSCRing*> tmpCSCRingsInStation;
186 
187  // Loop over stations ( 1..4 )
188  for (int ist = 1; ist < 5; ist++) {
189  // Temporary container for chambers in a given ring
190  std::vector<AlignableCSCChamber*> tmpCSCChambersInRing;
191 
192  // Loop over rings ( 1..4 )
193  for (int iri = 1; iri < 5; iri++) {
194  // Loop over geom CSC Chambers
195  int iChamber{0};
196  const CSCGeometry::ChamberContainer& vc = pCSC->chambers();
197  for (const auto& det : vc) {
198  // Get the CSCDet ID
199  CSCDetId cscId = det->id();
200 
201  // Get chamber, station, ring, layer and endcap labels of the CSC chamber
202  int ec = cscId.endcap();
203  int st = cscId.station();
204  int ri = cscId.ring();
205  //int ch = cscId.chamber();
206 
207  // Select the chambers in a given endcap, station, and ring
208  if (iec == ec && ist == st && iri == ri) {
209  if (update) {
210  // Update the alignable CSC chamber
211  theCSCEndcaps[iec - 1]->station(ist - 1).ring(iri - 1).chamber(iChamber).update(det);
212  } else {
213  AlignableCSCChamber* tmpCSCChamber = new AlignableCSCChamber(det);
214 
215  // Store the alignable CSC chambers
216  tmpCSCChambersInRing.push_back(tmpCSCChamber);
217  }
218 
219  ++iChamber;
220  // End If chamber selection
221  }
222 
223  // End loop over geom CSC chambers
224  }
225 
226  if (!update) {
227  // Not all stations have 4 rings: only add the rings that exist (have chambers associated with them)
228  if (!tmpCSCChambersInRing.empty()) {
229  // Store the alignable CSC chambers
230  theCSCChambers.insert(theCSCChambers.end(), tmpCSCChambersInRing.begin(), tmpCSCChambersInRing.end());
231 
232  // Create the alignable CSC ring with chambers in a given ring
233  AlignableCSCRing* tmpCSCRing = new AlignableCSCRing(tmpCSCChambersInRing);
234 
235  // Store the CSC rings in a given station
236  tmpCSCRingsInStation.push_back(tmpCSCRing);
237 
238  // Clear the temporary vector of chambers in ring
239  tmpCSCChambersInRing.clear();
240 
241  // End if this ring exists
242  }
243  }
244 
245  // End loop over rings
246  }
247 
248  if (!update) {
249  // Create the alignable CSC station with rings in a given station
250  AlignableCSCStation* tmpCSCStation = new AlignableCSCStation(tmpCSCRingsInStation);
251 
252  // Store the alignable CSC rings
253  theCSCRings.insert(theCSCRings.end(), tmpCSCRingsInStation.begin(), tmpCSCRingsInStation.end());
254 
255  // Store the CSC stations in a given endcap
256  tmpCSCStationsInEndcap.push_back(tmpCSCStation);
257 
258  // Clear the temporary vector of rings in station
259  tmpCSCRingsInStation.clear();
260  }
261 
262  // End loop over stations
263  }
264 
265  if (!update) {
266  // Create the alignable CSC endcap
267  AlignableCSCEndcap* tmpEndcap = new AlignableCSCEndcap(tmpCSCStationsInEndcap);
268 
269  // Store the alignable CSC stations
270  theCSCStations.insert(theCSCStations.end(), tmpCSCStationsInEndcap.begin(), tmpCSCStationsInEndcap.end());
271 
272  // Store the alignable CSC endcaps
273  theCSCEndcaps.push_back(tmpEndcap);
274 
275  // Clear the temporary vector of stations in endcap
276  tmpCSCStationsInEndcap.clear();
277  }
278 
279  // End loop over endcaps
280  }
281 
282  if (!update) {
283  // Store the encaps in the muon components
284  theMuonComponents.insert(theMuonComponents.end(), theCSCEndcaps.begin(), theCSCEndcaps.end());
285  }
286 }
287 
288 //--------------------------------------------------------------------------------------------------
290  LogDebug("Position") << "Constructing AlignableGEMEndcap";
291  std::vector<AlignableGEMStation*> tmpGEMStationsInEndcap;
292  for (const auto& GEMRegion : pGEM->regions()) {
293  int iec = GEMRegion->region();
294  std::vector<AlignableGEMRing*> tmpGEMRingsInStation;
295  for (const auto& GEMStation : pGEM->stations()) {
296  if (GEMStation->region() != iec)
297  continue;
298  int ist = GEMStation->station();
299  std::vector<AlignableGEMSuperChamber*> tmpGEMSuperChambersInRing;
300  int iri = 1;
301  int iChamber{0};
302  auto vc = pGEM->superChambers();
303  for (const auto& det : vc) {
304  GEMDetId gemId = det->id();
305  int ec = gemId.region();
306  int st = gemId.station();
307  int ri = gemId.ring();
308 
309  if (iec == ec && ist == st && iri == ri) {
310  if (update) {
311  theGEMEndcaps[iec == -1 ? 0 : 1]->station(ist - 1).ring(iri - 1).superChamber(iChamber).update(det);
312  } else {
313  AlignableGEMSuperChamber* tmpGEMSuperChamber = new AlignableGEMSuperChamber(det);
314  tmpGEMSuperChambersInRing.push_back(tmpGEMSuperChamber);
315  }
316  ++iChamber;
317  }
318  }
319  if (!update) {
320  if (!tmpGEMSuperChambersInRing.empty()) {
321  theGEMSuperChambers.insert(
322  theGEMSuperChambers.end(), tmpGEMSuperChambersInRing.begin(), tmpGEMSuperChambersInRing.end());
323  AlignableGEMRing* tmpGEMRing = new AlignableGEMRing(tmpGEMSuperChambersInRing);
324  tmpGEMRingsInStation.push_back(tmpGEMRing);
325  tmpGEMSuperChambersInRing.clear();
326  }
327  }
328  if (!update) {
329  AlignableGEMStation* tmpGEMStation = new AlignableGEMStation(tmpGEMRingsInStation);
330  theGEMRings.insert(theGEMRings.end(), tmpGEMRingsInStation.begin(), tmpGEMRingsInStation.end());
331  tmpGEMStationsInEndcap.push_back(tmpGEMStation);
332  tmpGEMRingsInStation.clear();
333  }
334  }
335  if (!update) {
336  AlignableGEMEndcap* tmpEndcap = new AlignableGEMEndcap(tmpGEMStationsInEndcap);
337  theGEMStations.insert(theGEMStations.end(), tmpGEMStationsInEndcap.begin(), tmpGEMStationsInEndcap.end());
338  theGEMEndcaps.push_back(tmpEndcap);
339  tmpGEMStationsInEndcap.clear();
340  }
341  }
342 }
343 
344 //--------------------------------------------------------------------------------------------------
347 
349  for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end(); ++chamberIter) {
350  align::Alignables superlayers = (*chamberIter)->components();
351  for (align::Alignables::const_iterator superlayerIter = superlayers.begin(); superlayerIter != superlayers.end();
352  ++superlayerIter) {
353  align::Alignables layers = (*superlayerIter)->components();
354  for (align::Alignables::const_iterator layerIter = layers.begin(); layerIter != layers.end(); ++layerIter) {
355  result.push_back(*layerIter);
356  }
357  }
358  }
359 
360  return result;
361 }
362 
363 //--------------------------------------------------------------------------------------------------
366 
368  for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end(); ++chamberIter) {
369  align::Alignables superlayers = (*chamberIter)->components();
370  for (align::Alignables::const_iterator superlayerIter = superlayers.begin(); superlayerIter != superlayers.end();
371  ++superlayerIter) {
372  result.push_back(*superlayerIter);
373  }
374  }
375 
376  return result;
377 }
378 
379 //--------------------------------------------------------------------------------------------------
382  copy(theDTChambers.begin(), theDTChambers.end(), back_inserter(result));
383  return result;
384 }
385 
386 //--------------------------------------------------------------------------------------------------
389  copy(theDTStations.begin(), theDTStations.end(), back_inserter(result));
390  return result;
391 }
392 
393 //--------------------------------------------------------------------------------------------------
396  copy(theDTWheels.begin(), theDTWheels.end(), back_inserter(result));
397  return result;
398 }
399 
400 //--------------------------------------------------------------------------------------------------
403  copy(theDTBarrel.begin(), theDTBarrel.end(), back_inserter(result));
404  return result;
405 }
406 
407 //--------------------------------------------------------------------------------------------------
410 
412  for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end(); ++chamberIter) {
413  align::Alignables layers = (*chamberIter)->components();
414  for (align::Alignables::const_iterator layerIter = layers.begin(); layerIter != layers.end(); ++layerIter) {
415  result.push_back(*layerIter);
416  }
417  }
418 
419  return result;
420 }
421 
422 //--------------------------------------------------------------------------------------------------
425  copy(theCSCChambers.begin(), theCSCChambers.end(), back_inserter(result));
426  return result;
427 }
428 
429 //--------------------------------------------------------------------------------------------------
432  copy(theCSCRings.begin(), theCSCRings.end(), back_inserter(result));
433  return result;
434 }
435 
436 //--------------------------------------------------------------------------------------------------
439  copy(theCSCStations.begin(), theCSCStations.end(), back_inserter(result));
440  return result;
441 }
442 
443 //--------------------------------------------------------------------------------------------------
446  copy(theCSCEndcaps.begin(), theCSCEndcaps.end(), back_inserter(result));
447  return result;
448 }
449 
450 //__________________________________________________________________________________________________
453  align::Alignables superChambers = GEMSuperChambers();
454  for (align::Alignables::const_iterator superChamberIter = superChambers.begin();
455  superChamberIter != superChambers.end();
456  ++superChamberIter) {
457  align::Alignables chambers = (*superChamberIter)->components();
458  for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end();
459  ++chamberIter) {
460  align::Alignables etaPartitions = (*chamberIter)->components();
461  for (align::Alignables::const_iterator etaPartitionIter = etaPartitions.begin();
462  etaPartitionIter != etaPartitions.end();
463  ++etaPartitionIter) {
464  result.push_back(*etaPartitionIter);
465  }
466  }
467  }
468  return result;
469 }
470 
471 //__________________________________________________________________________________________________
474  align::Alignables superChambers = GEMSuperChambers();
475  for (align::Alignables::const_iterator superChamberIter = superChambers.begin();
476  superChamberIter != superChambers.end();
477  ++superChamberIter) {
478  align::Alignables chambers = (*superChamberIter)->components();
479  for (align::Alignables::const_iterator chamberIter = chambers.begin(); chamberIter != chambers.end();
480  ++chamberIter) {
481  result.push_back(*chamberIter);
482  }
483  }
484  return result;
485 }
486 
487 //__________________________________________________________________________________________________
490  copy(theGEMSuperChambers.begin(), theGEMSuperChambers.end(), back_inserter(result));
491  return result;
492 }
493 
494 //__________________________________________________________________________________________________
497  copy(theGEMRings.begin(), theGEMRings.end(), back_inserter(result));
498  return result;
499 }
500 
501 //__________________________________________________________________________________________________
504  copy(theGEMStations.begin(), theGEMStations.end(), back_inserter(result));
505  return result;
506 }
507 
508 //--------------------------------------------------------------------------------------------------
511  copy(theGEMEndcaps.begin(), theGEMEndcaps.end(), back_inserter(result));
512  return result;
513 }
514 
515 //__________________________________________________________________________________________________
517  for (const auto& iter : alignable->components()) {
518  iter->setMother(alignable);
519  recursiveSetMothers(iter);
520  }
521 }
522 
523 //__________________________________________________________________________________________________
526  Alignments* m_alignments = new Alignments();
527  // Add components recursively
528  for (align::Alignables::iterator i = comp.begin(); i != comp.end(); i++) {
529  Alignments* tmpAlignments = (*i)->alignments();
530  std::copy(tmpAlignments->m_align.begin(), tmpAlignments->m_align.end(), std::back_inserter(m_alignments->m_align));
531  delete tmpAlignments;
532  }
533 
534  // sort by rawId
535  std::sort(m_alignments->m_align.begin(), m_alignments->m_align.end());
536 
537  return m_alignments;
538 }
539 //__________________________________________________________________________________________________
542  AlignmentErrorsExtended* m_alignmentErrors = new AlignmentErrorsExtended();
543 
544  // Add components recursively
545  for (align::Alignables::iterator i = comp.begin(); i != comp.end(); i++) {
546  AlignmentErrorsExtended* tmpAlignmentErrorsExtended = (*i)->alignmentErrors();
547  std::copy(tmpAlignmentErrorsExtended->m_alignError.begin(),
548  tmpAlignmentErrorsExtended->m_alignError.end(),
549  std::back_inserter(m_alignmentErrors->m_alignError));
550  delete tmpAlignmentErrorsExtended;
551  }
552 
553  // sort by rawId
554  std::sort(m_alignmentErrors->m_alignError.begin(), m_alignmentErrors->m_alignError.end());
555 
556  return m_alignmentErrors;
557 }
558 //__________________________________________________________________________________________________
560  // Retrieve muon barrel alignments
561  Alignments* tmpAlignments = this->DTBarrel().front()->alignments();
562 
563  return tmpAlignments;
564 }
565 //__________________________________________________________________________________________________
567  // Retrieve muon barrel alignment errors
568  AlignmentErrorsExtended* tmpAlignmentErrorsExtended = this->DTBarrel().front()->alignmentErrors();
569 
570  return tmpAlignmentErrorsExtended;
571 }
572 //__________________________________________________________________________________________________
574  // Retrieve muon endcaps alignments
575  Alignments* cscEndCap1 = this->CSCEndcaps().front()->alignments();
576  Alignments* cscEndCap2 = this->CSCEndcaps().back()->alignments();
577  Alignments* tmpAlignments = new Alignments();
578 
579  std::copy(cscEndCap1->m_align.begin(), cscEndCap1->m_align.end(), back_inserter(tmpAlignments->m_align));
580  std::copy(cscEndCap2->m_align.begin(), cscEndCap2->m_align.end(), back_inserter(tmpAlignments->m_align));
581 
582  return tmpAlignments;
583 }
584 //__________________________________________________________________________________________________
586  // Retrieve muon endcaps alignment errors
587  AlignmentErrorsExtended* cscEndCap1Errors = this->CSCEndcaps().front()->alignmentErrors();
588  AlignmentErrorsExtended* cscEndCap2Errors = this->CSCEndcaps().back()->alignmentErrors();
589  AlignmentErrorsExtended* tmpAlignmentErrorsExtended = new AlignmentErrorsExtended();
590 
591  std::copy(cscEndCap1Errors->m_alignError.begin(),
592  cscEndCap1Errors->m_alignError.end(),
593  back_inserter(tmpAlignmentErrorsExtended->m_alignError));
594  std::copy(cscEndCap2Errors->m_alignError.begin(),
595  cscEndCap2Errors->m_alignError.end(),
596  back_inserter(tmpAlignmentErrorsExtended->m_alignError));
597 
598  return tmpAlignmentErrorsExtended;
599 }
600 
601 //__________________________________________________________________________________________________
603  Alignments* gemEndCap1 = this->GEMEndcaps().front()->alignments();
604  Alignments* gemEndCap2 = this->GEMEndcaps().back()->alignments();
605  Alignments* tmpAlignments = new Alignments();
606  std::copy(gemEndCap1->m_align.begin(), gemEndCap1->m_align.end(), back_inserter(tmpAlignments->m_align));
607  std::copy(gemEndCap2->m_align.begin(), gemEndCap2->m_align.end(), back_inserter(tmpAlignments->m_align));
608  std::sort(tmpAlignments->m_align.begin(), tmpAlignments->m_align.end());
609 
610  return tmpAlignments;
611 }
612 //__________________________________________________________________________________________________
614  // Retrieve muon endcaps alignment errors
615  AlignmentErrorsExtended* gemEndCap1Errors = this->GEMEndcaps().front()->alignmentErrors();
616  AlignmentErrorsExtended* gemEndCap2Errors = this->GEMEndcaps().back()->alignmentErrors();
617  AlignmentErrorsExtended* tmpAlignmentErrorsExtended = new AlignmentErrorsExtended();
618 
619  std::copy(gemEndCap1Errors->m_alignError.begin(),
620  gemEndCap1Errors->m_alignError.end(),
621  back_inserter(tmpAlignmentErrorsExtended->m_alignError));
622  std::copy(gemEndCap2Errors->m_alignError.begin(),
623  gemEndCap2Errors->m_alignError.end(),
624  back_inserter(tmpAlignmentErrorsExtended->m_alignError));
625  std::sort(tmpAlignmentErrorsExtended->m_alignError.begin(), tmpAlignmentErrorsExtended->m_alignError.end());
626 
627  return tmpAlignmentErrorsExtended;
628 }
std::vector< AlignableGEMRing * > theGEMRings
int station() const
Return the station number.
Definition: DTChamberId.h:45
A muon DT Chamber( an AlignableDet )
constexpr int station() const
Definition: GEMDetId.h:179
constexpr int region() const
Definition: GEMDetId.h:171
align::Alignables DTLayers()
Methods to return specific of components.
align::Alignables CSCChambers()
AlignableMuon(const DTGeometry *, const CSCGeometry *, const GEMGeometry *)
Constructor from geometries.
std::vector< AlignableGEMEndcap * > theGEMEndcaps
align::Alignables DTBarrel()
align::Alignables CSCStations()
align::Alignables GEMStations()
align::Alignables GEMRings()
align::Alignables DTStations()
~AlignableMuon() override
Destructor.
const std::vector< const GEMStation * > & stations() const
Return a vector of all GEM stations.
Definition: GEMGeometry.cc:32
int region() const
Get the region.
Definition: GEMStation.cc:70
std::vector< AlignTransform > m_align
Definition: Alignments.h:19
int region() const
Return the region.
Definition: GEMRegion.cc:64
std::vector< AlignableCSCEndcap * > theCSCEndcaps
align::Alignables GEMSuperChambers()
void buildGEMEndcap(const GEMGeometry *, bool update=false)
std::vector< AlignableGEMStation * > theGEMStations
Alignments * dtAlignments()
Get DT alignments sorted by DetId.
align::Alignables GEMEtaPartitions()
align::Alignables CSCEndcaps()
align::Alignables theMuonComponents
align::Alignables DTChambers()
align::Alignables DTWheels()
std::vector< AlignableCSCStation * > theCSCStations
std::vector< AlignableGEMSuperChamber * > theGEMSuperChambers
void recursiveSetMothers(Alignable *alignable)
Set mothers recursively.
constexpr int ring() const
Definition: GEMDetId.h:176
std::vector< AlignableDTStation * > theDTStations
virtual const Alignables & components() const =0
Return vector of all direct components.
AlignmentErrorsExtended * cscAlignmentErrorsExtended()
Get CSC alignment errors sorted by DetId.
align::Alignables CSCLayers()
Alignments * alignments() const override
Get alignments sorted by DetId.
Log< level::Info, false > LogInfo
AlignmentErrorsExtended * alignmentErrors() const override
Get alignment errors sorted by DetId.
void buildCSCEndcap(const CSCGeometry *, bool update=false)
Build muon end caps.
std::vector< AlignableDTChamber * > theDTChambers
Containers of separate components.
std::vector< AlignableCSCRing * > theCSCRings
int station() const
Definition: CSCDetId.h:79
std::vector< AlignTransformErrorExtended > m_alignError
align::Alignables DTSuperLayers()
Alignments * cscAlignments()
Get CSC alignments sorted by DetId.
int endcap() const
Definition: CSCDetId.h:85
Alignments * gemAlignments()
align::Alignables GEMChambers()
AlignmentErrorsExtended * dtAlignmentErrorsExtended()
Get DT alignment errors sorted by DetId.
AlignmentErrorsExtended * gemAlignmentErrorsExtended()
std::vector< Alignable * > Alignables
Definition: Utilities.h:31
align::Alignables GEMEndcaps()
std::vector< const CSCChamber * > ChamberContainer
Definition: CSCGeometry.h:30
align::Alignables CSCRings()
int wheel() const
Return the wheel number.
Definition: DTChamberId.h:42
const std::vector< const GEMRegion * > & regions() const
Return a vector of all GEM regions.
Definition: GEMGeometry.cc:30
#define update(a, b)
const align::Alignables & components() const final
Return all components.
Definition: AlignableMuon.h:51
void buildDTBarrel(const DTGeometry *, bool update=false)
Build muon barrel.
std::vector< AlignableDTBarrel * > theDTBarrel
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:84
std::vector< AlignableDTWheel * > theDTWheels
align::ID theId
Definition: Alignable.h:235
int ring() const
Definition: CSCDetId.h:68
const ChamberContainer & chambers() const
Return a vector of all chambers.
Definition: CSCGeometry.cc:96
static char chambers[264][20]
Definition: ReadPGInfo.cc:243
Constructor of the full muon geometry.
Definition: AlignableMuon.h:38
void update(const DTGeometry *, const CSCGeometry *, const GEMGeometry *)
const std::vector< const GEMSuperChamber * > & superChambers() const
Return a vector of all GEM super chambers.
Definition: GEMGeometry.cc:36
int station() const
Get the station.
Definition: GEMStation.cc:72
std::vector< AlignableCSCChamber * > theCSCChambers
#define LogDebug(id)
A muon CSC Chamber( an AlignableDet )