CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
AlignmentParameterSelector.cc
Go to the documentation of this file.
1 
14 
18 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" // for enums TID/TIB/etc.
23 
27 
28 //________________________________________________________________________________
30  AlignableExtras *aliExtras) :
31  theTracker(aliTracker), theMuon(aliMuon), theExtras(aliExtras), theSelectedAlignables(),
32  theRangesEta(), theRangesPhi(), theRangesR(), theRangesX(), theRangesY(), theRangesZ()
33 {
34  this->setSpecials(""); // init theOnlyDS, theOnlySS, theSelLayers, theMinLayer, theMaxLayer, theRphiOrStereoDetUnit
35 }
36 
37 //________________________________________________________________________________
39 {
40  theSelectedAlignables.clear();
41  theSelectedParameters.clear();
42  this->clearGeometryCuts();
43 }
44 
45 //________________________________________________________________________________
47 {
48  theRangesEta.clear();
49  theRangesPhi.clear();
50  theRangesR.clear();
51  theRangesX.clear();
52  theRangesY.clear();
53  theRangesZ.clear();
54 
61 }
62 
63 //__________________________________________________________________________________________________
65 {
66 
67  const std::vector<std::string> selections
68  = pSet.getParameter<std::vector<std::string> >("alignParams");
69 
70  unsigned int addedSets = 0;
71 
72  for (unsigned int iSel = 0; iSel < selections.size(); ++iSel) {
73  std::vector<std::string> decompSel(this->decompose(selections[iSel], ','));
74  if (decompSel.empty()) continue; // edm::LogError or even cms::Exception??
75 
76  if (decompSel.size() < 2) {
77  throw cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::addSelections"
78  << selections[iSel]<<" from alignableParamSelector: "
79  << " should have at least 2 ','-separated parts";
80  } else if (decompSel.size() > 2) {
81  const edm::ParameterSet geoSel(pSet.getParameter<edm::ParameterSet>(decompSel[2].c_str()));
82  this->addSelection(decompSel[0], this->convertParamSel(decompSel[1]), geoSel);
83  } else {
84  this->clearGeometryCuts();
85  this->addSelection(decompSel[0], this->convertParamSel(decompSel[1]));
86  }
87 
88  ++addedSets;
89  }
90 
91  return addedSets;
92 }
93 
94 //________________________________________________________________________________
96 {
97  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
98  // but take care that nothing unknown is configured (to fetch typos!).
99 
100  this->clearGeometryCuts();
101  const std::vector<std::string> parameterNames(pSet.getParameterNames());
102  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
103  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
104 
105  // Calling swap is more efficient than assignment:
106  if (*iParam == "etaRanges") {
107  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesEta);
108  } else if (*iParam == "phiRanges") {
109  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesPhi);
110  } else if (*iParam == "rRanges") {
111  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesR);
112  } else if (*iParam == "xRanges") {
113  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesX);
114  } else if (*iParam == "yRanges") {
115  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesY);
116  } else if (*iParam == "zRanges") {
117  pSet.getParameter<std::vector<double> >(*iParam).swap(theRangesZ);
118  } else if (*iParam == "detIds") {
119  pSet.getParameter<std::vector<int> >(*iParam).swap(theDetIds);
120  } else if (*iParam == "detIdRanges") {
121  pSet.getParameter<std::vector<int> >(*iParam).swap(theDetIdRanges);
122  } else if (*iParam == "excludedDetIds") {
123  pSet.getParameter<std::vector<int> >(*iParam).swap(theExcludedDetIds);
124  } else if (*iParam == "excludedDetIdRanges") {
125  pSet.getParameter<std::vector<int> >(*iParam).swap(theExcludedDetIdRanges);
126  } else if (*iParam == "pxbDetId") {
127  const edm::ParameterSet & pxbDetIdPSet = pSet.getParameterSet(*iParam);
128  this->setPXBDetIdCuts(pxbDetIdPSet);
129  } else if (*iParam == "pxfDetId") {
130  const edm::ParameterSet & pxfDetIdPSet = pSet.getParameterSet(*iParam);
131  this->setPXFDetIdCuts(pxfDetIdPSet);
132  } else if (*iParam == "tibDetId") {
133  const edm::ParameterSet & tibDetIdPSet = pSet.getParameterSet(*iParam);
134  this->setTIBDetIdCuts(tibDetIdPSet);
135  } else if (*iParam == "tidDetId") {
136  const edm::ParameterSet & tidDetIdPSet = pSet.getParameterSet(*iParam);
137  this->setTIDDetIdCuts(tidDetIdPSet);
138  } else if (*iParam == "tobDetId") {
139  const edm::ParameterSet & tobDetIdPSet = pSet.getParameterSet(*iParam);
140  this->setTOBDetIdCuts(tobDetIdPSet);
141  } else if (*iParam == "tecDetId") {
142  const edm::ParameterSet & tecDetIdPSet = pSet.getParameterSet(*iParam);
143  this->setTECDetIdCuts(tecDetIdPSet);
144  } else {
145  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setGeometryCuts] "
146  << "Unknown parameter '" << *iParam << "'.\n";
147  }
148  }
149 }
150 
151 //________________________________________________________________________________
153 {
154  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
155  // but take care that nothing unknown is configured (to fetch typos!).
156 
157  const std::vector<std::string> parameterNames(pSet.getParameterNames());
158  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
159  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
160 
161  // Calling swap is more efficient than assignment:
162  if (*iParam == "ladderRanges") {
163  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXBDetIdRanges.theLadderRanges);
164  } else if (*iParam == "layerRanges") {
165  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXBDetIdRanges.theLayerRanges);
166  } else if (*iParam == "moduleRanges") {
167  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXBDetIdRanges.theModuleRanges);
168  } else {
169  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setPXBDetIdCuts] "
170  << "Unknown parameter '" << *iParam << "'.\n";
171  }
172  }
173 }
174 
175 //________________________________________________________________________________
177 {
178  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
179  // but take care that nothing unknown is configured (to fetch typos!).
180 
181  const std::vector<std::string> parameterNames(pSet.getParameterNames());
182  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
183  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
184 
185  // Calling swap is more efficient than assignment:
186  if (*iParam == "bladeRanges") {
187  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXFDetIdRanges.theBladeRanges);
188  } else if (*iParam == "diskRanges") {
189  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXFDetIdRanges.theDiskRanges);
190  } else if (*iParam == "moduleRanges") {
191  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXFDetIdRanges.theModuleRanges);
192  } else if (*iParam == "panelRanges") {
193  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXFDetIdRanges.thePanelRanges);
194  } else if (*iParam == "sideRanges") {
195  pSet.getParameter<std::vector<int> >(*iParam).swap(thePXFDetIdRanges.theSideRanges);
196  } else {
197  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setPXFDetIdCuts] "
198  << "Unknown parameter '" << *iParam << "'.\n";
199  }
200  }
201 }
202 
203 //________________________________________________________________________________
205 {
206  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
207  // but take care that nothing unknown is configured (to fetch typos!).
208 
209  const std::vector<std::string> parameterNames(pSet.getParameterNames());
210  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
211  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
212 
213  // Calling swap is more efficient than assignment:
214  if (*iParam == "layerRanges") {
215  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIBDetIdRanges.theLayerRanges);
216  } else if (*iParam == "moduleRanges") {
217  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIBDetIdRanges.theModuleRanges);
218  } else if (*iParam == "stringRanges") {
219  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIBDetIdRanges.theStringRanges);
220  } else if (*iParam == "sideRanges") {
221  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIBDetIdRanges.theSideRanges);
222  } else {
223  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setTIBDetIdCuts] "
224  << "Unknown parameter '" << *iParam << "'.\n";
225  }
226  }
227 }
228 
229 //________________________________________________________________________________
231 {
232  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
233  // but take care that nothing unknown is configured (to fetch typos!).
234 
235  const std::vector<std::string> parameterNames(pSet.getParameterNames());
236  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
237  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
238 
239  // Calling swap is more efficient than assignment:
240  if (*iParam == "diskRanges") {
241  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIDDetIdRanges.theDiskRanges);
242  } else if (*iParam == "moduleRanges") {
243  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIDDetIdRanges.theModuleRanges);
244  } else if (*iParam == "ringRanges") {
245  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIDDetIdRanges.theRingRanges);
246  } else if (*iParam == "sideRanges") {
247  pSet.getParameter<std::vector<int> >(*iParam).swap(theTIDDetIdRanges.theSideRanges);
248  } else {
249  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setTIDDetIdCuts] "
250  << "Unknown parameter '" << *iParam << "'.\n";
251  }
252  }
253 }
254 
255 //________________________________________________________________________________
257 {
258  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
259  // but take care that nothing unknown is configured (to fetch typos!).
260 
261  const std::vector<std::string> parameterNames(pSet.getParameterNames());
262  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
263  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
264 
265  // Calling swap is more efficient than assignment:
266  if (*iParam == "layerRanges") {
267  pSet.getParameter<std::vector<int> >(*iParam).swap(theTOBDetIdRanges.theLayerRanges);
268  } else if (*iParam == "moduleRanges") {
269  pSet.getParameter<std::vector<int> >(*iParam).swap(theTOBDetIdRanges.theModuleRanges);
270  } else if (*iParam == "sideRanges") {
271  pSet.getParameter<std::vector<int> >(*iParam).swap(theTOBDetIdRanges.theSideRanges);
272  } else if (*iParam == "rodRanges") {
273  pSet.getParameter<std::vector<int> >(*iParam).swap(theTOBDetIdRanges.theRodRanges);
274  } else {
275  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setTOBDetIdCuts] "
276  << "Unknown parameter '" << *iParam << "'.\n";
277  }
278  }
279 }
280 
281 //________________________________________________________________________________
283 {
284  // Allow non-specified arrays to be interpreted as empty (i.e. no selection),
285  // but take care that nothing unknown is configured (to fetch typos!).
286 
287  const std::vector<std::string> parameterNames(pSet.getParameterNames());
288  for (std::vector<std::string>::const_iterator iParam = parameterNames.begin(),
289  iEnd = parameterNames.end(); iParam != iEnd; ++iParam) {
290 
291  // Calling swap is more efficient than assignment:
292  if (*iParam == "wheelRanges") {
293  pSet.getParameter<std::vector<int> >(*iParam).swap(theTECDetIdRanges.theWheelRanges);
294  } else if (*iParam == "petalRanges") {
295  pSet.getParameter<std::vector<int> >(*iParam).swap(theTECDetIdRanges.thePetalRanges);
296  } else if (*iParam == "moduleRanges") {
297  pSet.getParameter<std::vector<int> >(*iParam).swap(theTECDetIdRanges.theModuleRanges);
298  } else if (*iParam == "ringRanges") {
299  pSet.getParameter<std::vector<int> >(*iParam).swap(theTECDetIdRanges.theRingRanges);
300  } else if (*iParam == "sideRanges") {
301  pSet.getParameter<std::vector<int> >(*iParam).swap(theTECDetIdRanges.theSideRanges);
302  } else {
303  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::setTECDetIdCuts] "
304  << "Unknown parameter '" << *iParam << "'.\n";
305  }
306  }
307 }
308 
309 //________________________________________________________________________________
310 unsigned int AlignmentParameterSelector::addSelection(const std::string &name,
311  const std::vector<char> &paramSel,
312  const edm::ParameterSet &pSet)
313 {
314  this->setGeometryCuts(pSet);
315  return this->addSelection(name, paramSel);
316 }
317 
318 //________________________________________________________________________________
319 unsigned int AlignmentParameterSelector::addSelection(const std::string &nameInput,
320  const std::vector<char> &paramSel)
321 {
322  const std::string name(this->setSpecials(nameInput)); // possibly changing name
323 
324  unsigned int numAli = 0;
325 
327  // Generic Tracker Section
329  if (name.find("Tracker") == 0) { // string starts with "Tracker"
330  if (!theTracker) {
331  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::addSelection] "
332  << "Configuration requires access to AlignableTracker"
333  << " (for " << name << ") that is not initialized";
334  }
335  const std::string substructName(name, 7); // erase "Tracker" at the beginning
336  numAli += this->add(theTracker->subStructures(substructName), paramSel);
337  }
339  // Old hardcoded (i.e. deprecated) tracker section (NOTE: no check on theTracker != 0)
341  else if (name == "AllDets") numAli += this->addAllDets(paramSel);
342  else if (name == "AllRods") numAli += this->addAllRods(paramSel);
343  else if (name == "AllLayers") numAli += this->addAllLayers(paramSel);
344  else if (name == "AllComponents") numAli += this->add(theTracker->components(), paramSel);
345  else if (name == "AllAlignables") numAli += this->addAllAlignables(paramSel);
346  //
347  // TIB+TOB
348  //
349  else if (name == "BarrelRods") numAli += this->add(theTracker->barrelRods(), paramSel);
350  else if (name == "BarrelDets") numAli += this->add(theTracker->barrelGeomDets(), paramSel);
351  else if (name == "BarrelLayers") numAli += this->add(theTracker->barrelLayers(), paramSel);
352  else if (name == "TOBDets") numAli += this->add(theTracker->outerBarrelGeomDets(), paramSel);
353  else if (name == "TOBRods") numAli += this->add(theTracker->outerBarrelRods(), paramSel);
354  else if (name == "TOBLayers") numAli += this->add(theTracker->outerBarrelLayers(), paramSel);
355  else if (name == "TOBHalfBarrels") numAli += this->add(theTracker->outerHalfBarrels(), paramSel);
356  else if (name == "TIBDets") numAli += this->add(theTracker->innerBarrelGeomDets(), paramSel);
357  else if (name == "TIBRods") numAli += this->add(theTracker->innerBarrelRods(), paramSel);
358  else if (name == "TIBLayers") numAli += this->add(theTracker->innerBarrelLayers(), paramSel);
359  else if (name == "TIBHalfBarrels") numAli += this->add(theTracker->innerHalfBarrels(), paramSel);
360  //
361  // PXBarrel
362  //
363  else if (name == "PixelHalfBarrelDets") {
364  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel);
365  } else if (name == "PixelHalfBarrelLadders") {
366  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel);
367  } else if (name == "PixelHalfBarrelLayers") {
368  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel);
369  } else if (name == "PixelHalfBarrels") {
370  numAli += this->add(theTracker->pixelHalfBarrels(), paramSel);
371  }
372  //
373  // PXEndcap
374  //
375  else if (name == "PXECDets") numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel);
376  else if (name == "PXECPetals") numAli += this->add(theTracker->pixelEndcapPetals(), paramSel);
377  else if (name == "PXECLayers") numAli += this->add(theTracker->pixelEndcapLayers(), paramSel);
378  else if (name == "PXEndCaps") numAli += this->add(theTracker->pixelEndCaps(), paramSel);
379  //
380  // Pixel Barrel+endcap
381  //
382  else if (name == "PixelDets") {
383  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel);
384  numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel);
385  } else if (name == "PixelRods") {
386  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel);
387  numAli += this->add(theTracker->pixelEndcapPetals(), paramSel);
388  } else if (name == "PixelLayers") {
389  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel);
390  numAli += this->add(theTracker->pixelEndcapLayers(), paramSel);
391  }
392  //
393  // TID
394  //
395  else if (name == "TIDs") numAli += this->add(theTracker->TIDs(), paramSel);
396  else if (name == "TIDLayers") numAli += this->add(theTracker->TIDLayers(), paramSel);
397  else if (name == "TIDRings") numAli += this->add(theTracker->TIDRings(), paramSel);
398  else if (name == "TIDDets") numAli += this->add(theTracker->TIDGeomDets(), paramSel);
399  //
400  // TEC
401  //
402  else if (name == "TECDets") numAli += this->add(theTracker->endcapGeomDets(), paramSel);
403  else if (name == "TECPetals") numAli += this->add(theTracker->endcapPetals(), paramSel);
404  else if (name == "TECLayers") numAli += this->add(theTracker->endcapLayers(), paramSel);
405  else if (name == "TECs") numAli += this->add(theTracker->endCaps(), paramSel);
406  //
407  // StripEndcap (TID+TEC)
408  //
409  else if (name == "EndcapDets") {
410  numAli += this->add(theTracker->TIDGeomDets(), paramSel);
411  numAli += this->add(theTracker->endcapGeomDets(), paramSel);
412  } else if (name == "EndcapPetals") {
413  numAli += this->add(theTracker->TIDRings(), paramSel);
414  numAli += this->add(theTracker->endcapPetals(), paramSel);
415  } else if (name == "EndcapLayers") {
416  numAli += this->add(theTracker->TIDLayers(), paramSel);
417  numAli += this->add(theTracker->endcapLayers(), paramSel);
418  }
419  //
420  // Strip Barrel+endcap
421  //
422  else if (name == "StripDets") {
423  numAli += this->add(theTracker->barrelGeomDets(), paramSel);
424  numAli += this->add(theTracker->TIDGeomDets(), paramSel);
425  numAli += this->add(theTracker->endcapGeomDets(), paramSel);
426  } else if (name == "StripRods") {
427  numAli += this->add(theTracker->barrelRods(), paramSel);
428  numAli += this->add(theTracker->TIDRings(), paramSel);
429  numAli += this->add(theTracker->endcapPetals(), paramSel);
430  } else if (name == "StripLayers") {
431  numAli += this->add(theTracker->barrelLayers(), paramSel);
432  numAli += this->add(theTracker->TIDLayers(), paramSel);
433  numAli += this->add(theTracker->endcapLayers(), paramSel);
434  }
436  // Muon selection
438  // Check if name contains muon and react if alignable muon not initialized
439  else if (name.find("Muon") != std::string::npos) {
440  if (!theMuon) {
441  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::addSelection] "
442  << "Configuration requires access to AlignableMuon"
443  << " which is not initialized";
444  }
445  else if (name == "MuonDTLayers") add(theMuon->DTLayers(), paramSel);
446  else if (name == "MuonDTSuperLayers") add(theMuon->DTSuperLayers(), paramSel);
447  else if (name == "MuonDTChambers") add(theMuon->DTChambers(), paramSel);
448  else if (name == "MuonDTStations") add(theMuon->DTStations(), paramSel);
449  else if (name == "MuonDTWheels") add(theMuon->DTWheels(), paramSel);
450  else if (name == "MuonBarrel") add(theMuon->DTBarrel(), paramSel);
451  else if (name == "MuonCSCLayers") add(theMuon->CSCLayers(), paramSel);
452  else if (name == "MuonCSCRings") add(theMuon->CSCRings(), paramSel);
453  else if (name == "MuonCSCChambers") add(theMuon->CSCChambers(), paramSel);
454  else if (name == "MuonCSCStations") add(theMuon->CSCStations(), paramSel);
455  else if (name == "MuonEndcaps") add(theMuon->CSCEndcaps(), paramSel);
456 
458  // not found, but Muon
460  else {
461  throw cms::Exception("BadConfig") <<"[AlignmentParameterSelector::addSelection]"
462  << ": Selection '" << name << "' invalid!";
463  }
464  }
465 
467  // Generic Extra Alignable Section
469  else if (name.find("Extras") == 0) { // string starts with "Extras"
470  if (!theExtras) {
471  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::addSelection] "
472  << "Configuration requires access to AlignableExtras"
473  << " (for " << name << ") that is not initialized";
474  }
475  const std::string substructName(name, 6); // erase "Extras" at the beginning
476  numAli += this->add(theExtras->subStructures(substructName), paramSel);
477  }
478  // end of "name.find("Extras") != std::string::npos"
479 
480  else {
481  throw cms::Exception("BadConfig") <<"[AlignmentParameterSelector::addSelection]"
482  << ": Selection '" << name << "' invalid!";
483  }
484 
485  this->setSpecials(""); // reset
486 
487  return numAli;
488 }
489 
490 //________________________________________________________________________________
491 unsigned int AlignmentParameterSelector::add(const align::Alignables &alignables,
492  const std::vector<char> &paramSel)
493 {
494  unsigned int numAli = 0;
495 
496  // loop on Alignable objects
497  for (align::Alignables::const_iterator iAli = alignables.begin();
498  iAli != alignables.end(); ++iAli) {
499 
500  if (!this->layerDeselected(*iAli) // check layers
501  && !this->detUnitDeselected(*iAli) // check detunit selection
502  && !this->outsideGeometricalRanges(*iAli) // check geometrical ranges
503  && !this->outsideDetIdRanges(*iAli)) { // check DetId ranges
504  // all fine, so add to output arrays
505  theSelectedAlignables.push_back(*iAli);
506  theSelectedParameters.push_back(paramSel);
507  ++numAli;
508  }
509  }
510 
511  return numAli;
512 }
513 
514 //_________________________________________________________________________
516 {
517  if (theOnlySS || theOnlyDS || theSelLayers) {
518  TrackerAlignableId idProvider;
519  std::pair<int,int> typeLayer = idProvider.typeAndLayerFromDetId(ali->id());
520  int type = typeLayer.first;
521  int layer = typeLayer.second;
522 
523  // select on single/double sided barrel layers in TIB/TOB
524  if (theOnlySS // only single sided
525  && (std::abs(type) == SiStripDetId::TIB || std::abs(type) == SiStripDetId::TOB)
526  && layer <= 2) {
527  return true;
528  }
529  if (theOnlyDS // only double sided
530  && (std::abs(type) == SiStripDetId::TIB || std::abs(type) == SiStripDetId::TOB)
531  && layer > 2) {
532  return true;
533  }
534 
535  // reject layers
536  if (theSelLayers && (layer < theMinLayer || layer > theMaxLayer)) {
537  return true;
538  }
539  }
540 
541  return false; // do not deselect...
542 }
543 
544 //_________________________________________________________________________
546 {
547 
549  const SiStripDetId detId(ali->geomDetId()); // do not know yet whether right type...
550  if (detId.det() == DetId::Tracker
551  && (detId.subdetId() == SiStripDetId::TIB || detId.subdetId() == SiStripDetId::TID ||
552  detId.subdetId() == SiStripDetId::TOB || detId.subdetId() == SiStripDetId::TEC)) {
553  // We have a DetUnit in strip, so check for a selection of stereo/rphi (DetUnits in 1D layers are rphi):
554  if ((theRphiOrStereoDetUnit == Stereo && !detId.stereo())
555  || (theRphiOrStereoDetUnit == Rphi && detId.stereo())) {
556  return true;
557  }
558  }
559  }
560 
561  return false; // do not deselect...
562 }
563 
564 //_________________________________________________________________________
566 {
567  const align::PositionType& position(alignable->globalPosition());
568 
569  if (!theRangesEta.empty() && !this->insideRanges<double>((position.eta()), theRangesEta)) return true;
570  if (!theRangesPhi.empty() && !this->insideRanges<double>((position.phi()), theRangesPhi, true))return true;
571  if (!theRangesR.empty() && !this->insideRanges<double>((position.perp()), theRangesR)) return true;
572  if (!theRangesX.empty() && !this->insideRanges<double>((position.x()), theRangesX)) return true;
573  if (!theRangesY.empty() && !this->insideRanges<double>((position.y()), theRangesY)) return true;
574  if (!theRangesZ.empty() && !this->insideRanges<double>((position.z()), theRangesZ)) return true;
575 
576  return false;
577 }
578 
579 //_________________________________________________________________________
581 {
582  //const DetId detId(alignable->geomDetId());
583  const DetId detId(alignable->id());
584  const int subdetId = detId.subdetId();
585 
586  if (!theDetIds.empty() &&
587  !this->isMemberOfVector((detId.rawId()), theDetIds)) return true;
588  if (!theDetIdRanges.empty() &&
589  !this->insideRanges<int>((detId.rawId()), theDetIdRanges)) return true;
590  if (!theExcludedDetIds.empty() &&
591  this->isMemberOfVector((detId.rawId()), theExcludedDetIds)) return true;
592  if (!theExcludedDetIdRanges.empty() &&
593  this->insideRanges<int>((detId.rawId()), theExcludedDetIdRanges)) return true;
594 
595  if (detId.det()==DetId::Tracker) {
596 
597  if (subdetId==static_cast<int>(PixelSubdetector::PixelBarrel)) {
598  const PXBDetId pxbDetId(detId);
599  if (!thePXBDetIdRanges.theLadderRanges.empty() &&
600  !this->insideRanges<int>(pxbDetId.ladder(), thePXBDetIdRanges.theLadderRanges)) return true;
601  if (!thePXBDetIdRanges.theLayerRanges.empty() &&
602  !this->insideRanges<int>(pxbDetId.layer(), thePXBDetIdRanges.theLayerRanges)) return true;
603  if (!thePXBDetIdRanges.theModuleRanges.empty() &&
604  !this->insideRanges<int>(pxbDetId.module(), thePXBDetIdRanges.theModuleRanges)) return true;
605  }
606 
607  if (subdetId==static_cast<int>(PixelSubdetector::PixelEndcap)) {
608  const PXFDetId pxfDetId(detId);
609  if (!thePXFDetIdRanges.theBladeRanges.empty() &&
610  !this->insideRanges<int>(pxfDetId.blade(), thePXFDetIdRanges.theBladeRanges)) return true;
611  if (!thePXFDetIdRanges.theDiskRanges.empty() &&
612  !this->insideRanges<int>(pxfDetId.disk(), thePXFDetIdRanges.theDiskRanges)) return true;
613  if (!thePXFDetIdRanges.theModuleRanges.empty() &&
614  !this->insideRanges<int>(pxfDetId.module(), thePXFDetIdRanges.theModuleRanges)) return true;
615  if (!thePXFDetIdRanges.thePanelRanges.empty() &&
616  !this->insideRanges<int>(pxfDetId.panel(), thePXFDetIdRanges.thePanelRanges)) return true;
617  if (!thePXFDetIdRanges.theSideRanges.empty() &&
618  !this->insideRanges<int>(pxfDetId.side(), thePXFDetIdRanges.theSideRanges)) return true;
619  }
620 
621  if (subdetId==static_cast<int>(SiStripDetId::TIB)) {
622  const TIBDetId tibDetId(detId);
623  if (!theTIBDetIdRanges.theLayerRanges.empty() &&
624  !this->insideRanges<int>(tibDetId.layer(), theTIBDetIdRanges.theLayerRanges)) return true;
625  if (!theTIBDetIdRanges.theModuleRanges.empty() &&
626  !this->insideRanges<int>(tibDetId.module(), theTIBDetIdRanges.theModuleRanges)) return true;
627  if (!theTIBDetIdRanges.theSideRanges.empty() &&
628  !this->insideRanges<int>(tibDetId.side(), theTIBDetIdRanges.theSideRanges)) return true;
629  if (!theTIBDetIdRanges.theStringRanges.empty() &&
630  !this->insideRanges<int>(tibDetId.stringNumber(), theTIBDetIdRanges.theStringRanges)) return true;
631  }
632 
633  if (subdetId==static_cast<int>(SiStripDetId::TID)) {
634  const TIDDetId tidDetId(detId);
635  if (!theTIDDetIdRanges.theDiskRanges.empty() &&
636  !this->insideRanges<int>(tidDetId.diskNumber(), theTIDDetIdRanges.theDiskRanges)) return true;
637  if (!theTIDDetIdRanges.theModuleRanges.empty() &&
638  !this->insideRanges<int>(tidDetId.moduleNumber(), theTIDDetIdRanges.theModuleRanges)) return true;
639  if (!theTIDDetIdRanges.theRingRanges.empty() &&
640  !this->insideRanges<int>(tidDetId.ring(), theTIDDetIdRanges.theRingRanges)) return true;
641  if (!theTIDDetIdRanges.theSideRanges.empty() &&
642  !this->insideRanges<int>(tidDetId.side(), theTIDDetIdRanges.theSideRanges)) return true;
643  }
644 
645  if (subdetId==static_cast<int>(SiStripDetId::TOB)) {
646  const TOBDetId tobDetId(detId);
647  if (!theTOBDetIdRanges.theLayerRanges.empty() &&
648  !this->insideRanges<int>(tobDetId.layer(), theTOBDetIdRanges.theLayerRanges)) return true;
649  if (!theTOBDetIdRanges.theModuleRanges.empty() &&
650  !this->insideRanges<int>(tobDetId.module(), theTOBDetIdRanges.theModuleRanges)) return true;
651  if (!theTOBDetIdRanges.theRodRanges.empty() &&
652  !this->insideRanges<int>(tobDetId.rodNumber(), theTOBDetIdRanges.theRodRanges)) return true;
653  if (!theTOBDetIdRanges.theSideRanges.empty() &&
654  !this->insideRanges<int>(tobDetId.side(), theTOBDetIdRanges.theSideRanges)) return true;
655  }
656 
657  if (subdetId==static_cast<int>(SiStripDetId::TEC)) {
658  const TECDetId tecDetId(detId);
659  if (!theTECDetIdRanges.theWheelRanges.empty() &&
660  !this->insideRanges<int>(tecDetId.wheel(), theTECDetIdRanges.theWheelRanges)) return true;
661  if (!theTECDetIdRanges.thePetalRanges.empty() &&
662  !this->insideRanges<int>(tecDetId.petalNumber(), theTECDetIdRanges.thePetalRanges)) return true;
663  if (!theTECDetIdRanges.theModuleRanges.empty() &&
664  !this->insideRanges<int>(tecDetId.module(), theTECDetIdRanges.theModuleRanges)) return true;
665  if (!theTECDetIdRanges.theRingRanges.empty() &&
666  !this->insideRanges<int>(tecDetId.ring(), theTECDetIdRanges.theRingRanges)) return true;
667  if (!theTECDetIdRanges.theSideRanges.empty() &&
668  !this->insideRanges<int>(tecDetId.side(), theTECDetIdRanges.theSideRanges)) return true;
669  }
670 
671  }
672 
673  return false;
674 }
675 
676 //_________________________________________________________________________
678  const std::vector<T> &ranges,
679  bool isPhi) const
680 {
681  // might become templated on <double> ?
682 
683  if (ranges.size()%2 != 0) {
684  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
685  << " need even number of entries in ranges instead of "
686  << ranges.size();
687  return false;
688  }
689 
690  for (unsigned int i = 0; i < ranges.size(); i += 2) {
691  if (isPhi) { // mapping into (-pi,+pi] and checking for range including sign flip area
692  Geom::Phi<double> rangePhi1(ranges[i]);
693  Geom::Phi<double> rangePhi2(ranges[i+1]);
694  Geom::Phi<double> valuePhi(value);
695  if (rangePhi1 <= valuePhi && valuePhi < rangePhi2) { // 'normal'
696  return true;
697  }
698  if (rangePhi2 < rangePhi1 && (rangePhi1 <= valuePhi || valuePhi < rangePhi2)) {// 'sign flip'
699  return true;
700  }
701  } else if (ranges[i] <= value && value < ranges[i+1]) {
702  return true;
703  }
704  }
705 
706  return false;
707 }
708 
709 //_________________________________________________________________________
710 template<> bool AlignmentParameterSelector::insideRanges<int>(int value,
711  const std::vector<int> &ranges,
712  bool /*isPhi*/) const
713 {
714  if (ranges.size()%2 != 0) {
715  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
716  << " need even number of entries in ranges instead of "
717  << ranges.size();
718  return false;
719  }
720 
721  for (unsigned int i = 0; i < ranges.size(); i += 2) {
722  if (ranges[i] <= value && value <= ranges[i+1]) return true;
723  }
724 
725  return false;
726 }
727 
728 bool AlignmentParameterSelector::isMemberOfVector(int value, const std::vector<int> &values) const
729 {
730  if (std::find(values.begin(), values.end(), value)!=values.end()) return true;
731  return false;
732 }
733 
734 //__________________________________________________________________________________________________
735 std::vector<std::string>
737 {
738 
739  std::vector<std::string> result;
740 
741  std::string::size_type previousPos = 0;
742  while (true) {
743  const std::string::size_type delimiterPos = s.find(delimiter, previousPos);
744  if (delimiterPos == std::string::npos) {
745  result.push_back(s.substr(previousPos)); // until end
746  break;
747  }
748  result.push_back(s.substr(previousPos, delimiterPos - previousPos));
749  previousPos = delimiterPos + 1; // +1: skip delimiter
750  }
751 
752  return result;
753 }
754 
755 //__________________________________________________________________________________________________
756 std::vector<char> AlignmentParameterSelector::convertParamSel(const std::string &selString) const
757 {
758 
759  // Convert selString into vector<char> of same length.
760  // Note: Old implementation in AlignmentParameterBuilder was rigid in length,
761  // expecting RigidBodyAlignmentParameters::N_PARAM.
762  // But I prefer to be more general and allow other Alignables. It will throw anyway if
763  // RigidBodyAlignmentParameters are build with wrong selection length.
764  std::vector<char> result(selString.size());
765 
766  for (std::string::size_type pos = 0; pos < selString.size(); ++pos) {
767  result[pos] = selString[pos];
768  }
769 
770  return result;
771 }
772 
773 
774 //________________________________________________________________________________
775 std::string AlignmentParameterSelector::setSpecials(const std::string &name)
776 {
777  // Use new string only, although direct erasing of found indicator causes problems for 'DSS',
778  // but 'DSS' makes absolutely no sense!
779  std::string newName(name);
780 
781  const std::string::size_type ss = newName.rfind("SS");
782  if (ss != std::string::npos) {
783  newName.erase(ss, 2); // 2: length of 'SS'
784  theOnlySS = true;
785  } else {
786  theOnlySS = false;
787  }
788 
789  const std::string::size_type ds = newName.rfind("DS");
790  if (ds != std::string::npos) {
791  newName.erase(ds, 2); // 2: length of 'DS'
792  theOnlyDS = true;
793  } else {
794  theOnlyDS = false;
795  }
796 
797  const std::string::size_type size = newName.size();
798  const std::string::size_type layers = newName.rfind("Layers");
799  if (layers != std::string::npos && size - layers - 2 == 6 // 2 digits, 6: length of 'Layers'
800  && isdigit(newName[size-1]) && isdigit(newName[size-2])) {
801  theSelLayers = true;
802  theMinLayer = newName[size-2] - '0';
803  theMaxLayer = newName[size-1] - '0';
804  newName.erase(layers);
805  } else {
806  theSelLayers = false;
807  theMinLayer = -1;
808  theMaxLayer = 99999;
809  }
810 
812  if (newName.rfind("Unit") != std::string::npos) {
813  const std::string::size_type uRph = newName.rfind("UnitRphi");
814  if (uRph != std::string::npos) {
815  newName.erase(uRph + 4, 4); // keep 'Unit' (4) and erase 'Rphi' (4)
817  }
818  const std::string::size_type uSte = newName.rfind("UnitStereo");
819  if (uSte != std::string::npos) {
820  newName.erase(uSte + 4, 6); // keep 'Unit' (4) and erase 'Stereo' (6)
822  }
823  }
824 
825  if (newName != name) {
826  LogDebug("Alignment") << "@SUB=AlignmentParameterSelector::setSpecials"
827  << name << " becomes " << newName << ", makes theOnlySS " << theOnlySS
828  << ", theOnlyDS " << theOnlyDS << ", theSelLayers " << theSelLayers
829  << ", theMinLayer " << theMinLayer << ", theMaxLayer " << theMaxLayer
830  << ", theRphiOrStereoDetUnit " << theRphiOrStereoDetUnit;
831  }
832 
833  return newName;
834 }
835 
836 //________________________________________________________________________________
837 unsigned int AlignmentParameterSelector::addAllDets(const std::vector<char> &paramSel)
838 {
839  unsigned int numAli = 0;
840 
841  numAli += this->add(theTracker->barrelGeomDets(), paramSel); // TIB+TOB
842  numAli += this->add(theTracker->endcapGeomDets(), paramSel); // TEC
843  numAli += this->add(theTracker->TIDGeomDets(), paramSel); // TID
844  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel); // PixelBarrel
845  numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel); // PixelEndcap
846 
847  return numAli;
848 }
849 
850 //________________________________________________________________________________
851 unsigned int AlignmentParameterSelector::addAllRods(const std::vector<char> &paramSel)
852 {
853  unsigned int numAli = 0;
854 
855  numAli += this->add(theTracker->barrelRods(), paramSel); // TIB+TOB
856  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel); // PixelBarrel
857  numAli += this->add(theTracker->endcapPetals(), paramSel); // TEC
858  numAli += this->add(theTracker->TIDRings(), paramSel); // TID
859  numAli += this->add(theTracker->pixelEndcapPetals(), paramSel); // PixelEndcap
860 
861  return numAli;
862 }
863 
864 //________________________________________________________________________________
865 unsigned int AlignmentParameterSelector::addAllLayers(const std::vector<char> &paramSel)
866 {
867  unsigned int numAli = 0;
868 
869  numAli += this->add(theTracker->barrelLayers(), paramSel); // TIB+TOB
870  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel); // PixelBarrel
871  numAli += this->add(theTracker->endcapLayers(), paramSel); // TEC
872  numAli += this->add(theTracker->TIDLayers(), paramSel); // TID
873  numAli += this->add(theTracker->pixelEndcapLayers(), paramSel); // PixelEndcap
874 
875  return numAli;
876 }
877 
878 //________________________________________________________________________________
879 unsigned int AlignmentParameterSelector::addAllAlignables(const std::vector<char> &paramSel)
880 {
881  unsigned int numAli = 0;
882 
883  numAli += this->addAllDets(paramSel);
884  numAli += this->addAllRods(paramSel);
885  numAli += this->addAllLayers(paramSel);
886  numAli += this->add(theTracker->components(), paramSel);
887 
888  return numAli;
889 }
#define LogDebug(id)
type
Definition: HCALResponse.h:22
unsigned int rodNumber() const
Definition: TOBDetId.h:77
T getParameter(std::string const &) const
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 side() const
Definition: TIBDetId.h:67
int i
Definition: DBlmapReader.cc:9
bool outsideGeometricalRanges(const Alignable *alignable) const
true if geometrical restrictions in eta, phi, r, x, y, z not satisfied
Alignables & pixelHalfBarrelGeomDets()
Return pixel barrel GeomDets.
unsigned int panel() const
panel id
Definition: PXFDetId.h:52
void setTIDDetIdCuts(const edm::ParameterSet &pSet)
unsigned int petalNumber() const
Definition: TECDetId.h:94
unsigned int stringNumber() const
Definition: TIBDetId.h:87
unsigned int layer() const
layer id
Definition: TOBDetId.h:39
align::Alignables DTLayers()
unsigned int addAllAlignables(const std::vector< char > &paramSel)
AlignmentParameterSelector(AlignableTracker *aliTracker, AlignableMuon *aliMuon=0, AlignableExtras *aliExtras=0)
Constructor from tracker only or from tracker and muon.
bool insideRanges(T value, const std::vector< T > &ranges, bool isPhi=false) const
align::Alignables CSCChambers()
void clearGeometryCuts()
remove all geometrical restrictions
std::vector< std::vector< char > > theSelectedParameters
align::Alignables DTBarrel()
align::Alignables CSCStations()
Alignables & pixelHalfBarrelLayers()
Return pixel half barrel layers.
#define abs(x)
Definition: mlp_lapack.h:159
unsigned int ladder() const
ladder id
Definition: PXBDetId.h:39
align::Alignables DTStations()
Alignables barrelGeomDets()
Return inner and outer barrel GeomDets together.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
struct AlignmentParameterSelector::PXFDetIdRanges thePXFDetIdRanges
unsigned int side() const
Definition: TOBDetId.h:55
uint16_t size_type
unsigned int module() const
det id
Definition: TECDetId.h:75
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
unsigned int layer() const
layer id
Definition: PXBDetId.h:35
unsigned int side() const
positive or negative id
Definition: TECDetId.h:47
void setGeometryCuts(const edm::ParameterSet &pSet)
unsigned int blade() const
blade id
Definition: PXFDetId.h:48
void clear()
remove all selected Alignables and geometrical restrictions
std::vector< int > theDetIds
DetId restrictions in eta, phi, r, x, y, z to be applied for next addSelection.
align::Alignables CSCEndcaps()
align::Alignables DTChambers()
Alignables & innerBarrelGeomDets()
Return inner barrel GeomDets.
void setPXBDetIdCuts(const edm::ParameterSet &pSet)
Alignables & subStructures(const std::string &subStructName)
Return alignables determined by name.
align::Alignables DTWheels()
struct AlignmentParameterSelector::PXBDetIdRanges thePXBDetIdRanges
Alignables & endCaps()
Return TECs.
unsigned int addAllDets(const std::vector< char > &paramSel)
some helper methods
void setTECDetIdCuts(const edm::ParameterSet &pSet)
tuple result
Definition: query.py:137
Alignables & TIDGeomDets()
Return TID GeomDets.
unsigned int addAllLayers(const std::vector< char > &paramSel)
unsigned int ring() const
ring id
Definition: TIDDetId.h:55
std::vector< std::string > decompose(const std::string &s, std::string::value_type delimiter) const
Decomposing input string &#39;s&#39; into parts separated by &#39;delimiter&#39;.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
unsigned int module() const
det id
Definition: PXBDetId.h:43
unsigned int module() const
det id
Definition: PXFDetId.h:56
Alignables & outerBarrelRods()
Return outer barrel rods.
Alignables barrelRods()
Return inner and outer barrel rods.
std::vector< std::string > getParameterNames() const
Alignables & pixelEndcapPetals()
Return pixel endcap petals.
Container::value_type value_type
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
struct AlignmentParameterSelector::TIBDetIdRanges theTIBDetIdRanges
unsigned int disk() const
disk id
Definition: PXFDetId.h:43
Alignables barrelLayers()
Return inner and outer barrel layers.
Alignables & endcapGeomDets()
Return endcap GeomDets.
Alignables & pixelEndcapGeomDets()
Return pixel endcap GeomDets.
align::Alignables CSCLayers()
struct AlignmentParameterSelector::TOBDetIdRanges theTOBDetIdRanges
string ranges
Definition: diffTwoXMLs.py:78
Alignables & TIDs()
Return TIDs.
unsigned int addAllRods(const std::vector< char > &paramSel)
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
Definition: DetId.h:20
Alignables & outerBarrelLayers()
Return outer barrel layers.
void setPXFDetIdCuts(const edm::ParameterSet &pSet)
Alignables & outerBarrelGeomDets()
Return outer barrel GeomDets.
Alignables & TIDLayers()
Return TID layers.
unsigned int module() const
detector id
Definition: TIBDetId.h:61
Alignables & TIDRings()
Return TID rings.
ParameterSet const & getParameterSet(std::string const &) const
Alignables & pixelHalfBarrels()
Return Pixel half barrels.
Alignables & pixelEndCaps()
Return TPEs.
align::Alignables DTSuperLayers()
unsigned int side() const
positive or negative id
Definition: TIDDetId.h:45
Alignables & subStructures(const std::string &subStructName)
std::vector< double > theRangesEta
geometrical restrictions in eta, phi, r, x, y, z to be applied for next addSelection ...
unsigned int wheel() const
wheel id
Definition: TECDetId.h:52
std::vector< Alignable * > Alignables
Definition: Utilities.h:28
Alignables & innerBarrelLayers()
Return inner barrel layers.
unsigned int layer() const
layer id
Definition: TIBDetId.h:41
struct AlignmentParameterSelector::TECDetIdRanges theTECDetIdRanges
unsigned int addSelection(const std::string &name, const std::vector< char > &paramSel)
align::Alignables CSCRings()
void setTOBDetIdCuts(const edm::ParameterSet &pSet)
unsigned int ring() const
ring id
Definition: TECDetId.h:71
unsigned int add(const align::Alignables &alignables, const std::vector< char > &paramSel)
adding alignables which fulfil geometrical restrictions and special switches
std::vector< char > convertParamSel(const std::string &selString) const
Converting std::string into std::vector&lt;char&gt;
unsigned int addSelections(const edm::ParameterSet &pSet)
Alignables & pixelHalfBarrelLadders()
Return pixel half barrel ladders (implemented as AlignableRods)
bool outsideDetIdRanges(const Alignable *alignable) const
true if DetId restrictions are not satisfied
unsigned int side() const
positive or negative id
Definition: PXFDetId.h:38
bool isMemberOfVector(int value, const std::vector< int > &values) const
true if value is member of vector of values
std::pair< int, int > typeAndLayerFromDetId(const DetId &detId) const
unsigned int module() const
detector id
Definition: TOBDetId.h:58
virtual Alignables components() const
Return vector of direct components.
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:129
Alignables & endcapPetals()
Return encap petals.
Alignables & innerHalfBarrels()
Return TIB half barrels.
long double T
Constructor of the full muon geometry.
Definition: AlignableMuon.h:36
Alignables & endcapLayers()
Return endcap layers.
unsigned int moduleNumber() const
Definition: TIDDetId.h:101
Definition: Phi.h:20
const DetId & geomDetId() const
Definition: Alignable.h:177
tuple size
Write out results.
Alignables & pixelEndcapLayers()
Return pixel endcap layers.
struct AlignmentParameterSelector::TIDDetIdRanges theTIDDetIdRanges
Alignables & outerHalfBarrels()
Return TOB half barrels.
bool layerDeselected(const Alignable *alignable) const
true if layer is deselected via &quot;Layers&lt;N&gt;&lt;M&gt;&quot; or &quot;DS/SS&quot;
unsigned int diskNumber() const
Definition: TIDDetId.h:93
bool detUnitDeselected(const Alignable *alignable) const
true if alignable is DetUnit deselected by Unit&lt;Rphi/Stereo&gt; selection
Alignables & innerBarrelRods()
Return inner barrel rods.
std::string setSpecials(const std::string &name)
void setTIBDetIdCuts(const edm::ParameterSet &pSet)