CMS 3D CMS Logo

AlignmentParameterSelector.cc
Go to the documentation of this file.
1 
14 
16 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h" // for enums TID/TIB/etc.
18 
22 
23 //________________________________________________________________________________
25  AlignableExtras *aliExtras) :
26  theTracker(aliTracker), theMuon(aliMuon), theExtras(aliExtras), theSelectedAlignables(),
27  theRangesEta(), theRangesPhi(), theRangesR(), theRangesX(), theRangesY(), theRangesZ()
28 {
29  this->setSpecials(""); // init theOnlyDS, theOnlySS, theSelLayers, theMinLayer, theMaxLayer, theRphiOrStereoDetUnit
30 }
31 
32 //________________________________________________________________________________
34 {
35  theSelectedAlignables.clear();
36  theSelectedParameters.clear();
37  this->clearGeometryCuts();
38 }
39 
40 //________________________________________________________________________________
42 {
43  theRangesEta.clear();
44  theRangesPhi.clear();
45  theRangesR.clear();
46  theRangesX.clear();
47  theRangesY.clear();
48  theRangesZ.clear();
49 
56 }
57 
59 {
60  return theTracker;
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 //________________________________________________________________________________
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 //________________________________________________________________________________
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, but geometry-independent 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 == "PXECHalfCylinders") numAli += this->add(theTracker->pixelEndcapHalfCylinders(), paramSel);
379  else if (name == "PXEndCaps") numAli += this->add(theTracker->pixelEndCaps(), paramSel);
380  //
381  // Pixel Barrel+endcap
382  //
383  else if (name == "PixelDets") {
384  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel);
385  numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel);
386  } else if (name == "PixelRods") {
387  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel);
388  numAli += this->add(theTracker->pixelEndcapPetals(), paramSel);
389  } else if (name == "PixelLayers") {
390  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel);
391  numAli += this->add(theTracker->pixelEndcapLayers(), paramSel);
392  }
393  //
394  // TID
395  //
396  else if (name == "TIDs") numAli += this->add(theTracker->TIDs(), paramSel);
397  else if (name == "TIDLayers") numAli += this->add(theTracker->TIDLayers(), paramSel);
398  else if (name == "TIDRings") numAli += this->add(theTracker->TIDRings(), paramSel);
399  else if (name == "TIDDets") numAli += this->add(theTracker->TIDGeomDets(), paramSel);
400  //
401  // TEC
402  //
403  else if (name == "TECDets") numAli += this->add(theTracker->endcapGeomDets(), paramSel);
404  else if (name == "TECPetals") numAli += this->add(theTracker->endcapPetals(), paramSel);
405  else if (name == "TECLayers") numAli += this->add(theTracker->endcapLayers(), paramSel);
406  else if (name == "TECs") numAli += this->add(theTracker->endCaps(), paramSel);
407  //
408  // StripEndcap (TID+TEC)
409  //
410  else if (name == "EndcapDets") {
411  numAli += this->add(theTracker->TIDGeomDets(), paramSel);
412  numAli += this->add(theTracker->endcapGeomDets(), paramSel);
413  } else if (name == "EndcapPetals") {
414  numAli += this->add(theTracker->TIDRings(), paramSel);
415  numAli += this->add(theTracker->endcapPetals(), paramSel);
416  } else if (name == "EndcapLayers") {
417  numAli += this->add(theTracker->TIDLayers(), paramSel);
418  numAli += this->add(theTracker->endcapLayers(), paramSel);
419  }
420  //
421  // Strip Barrel+endcap
422  //
423  else if (name == "StripDets") {
424  numAli += this->add(theTracker->barrelGeomDets(), paramSel);
425  numAli += this->add(theTracker->TIDGeomDets(), paramSel);
426  numAli += this->add(theTracker->endcapGeomDets(), paramSel);
427  } else if (name == "StripRods") {
428  numAli += this->add(theTracker->barrelRods(), paramSel);
429  numAli += this->add(theTracker->TIDRings(), paramSel);
430  numAli += this->add(theTracker->endcapPetals(), paramSel);
431  } else if (name == "StripLayers") {
432  numAli += this->add(theTracker->barrelLayers(), paramSel);
433  numAli += this->add(theTracker->TIDLayers(), paramSel);
434  numAli += this->add(theTracker->endcapLayers(), paramSel);
435  }
437  // Muon selection
439  // Check if name contains muon and react if alignable muon not initialized
440  else if (name.find("Muon") != std::string::npos) {
441  if (!theMuon) {
442  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::addSelection] "
443  << "Configuration requires access to AlignableMuon"
444  << " which is not initialized";
445  }
446  else if (name == "MuonDTLayers") add(theMuon->DTLayers(), paramSel);
447  else if (name == "MuonDTSuperLayers") add(theMuon->DTSuperLayers(), paramSel);
448  else if (name == "MuonDTChambers") add(theMuon->DTChambers(), paramSel);
449  else if (name == "MuonDTStations") add(theMuon->DTStations(), paramSel);
450  else if (name == "MuonDTWheels") add(theMuon->DTWheels(), paramSel);
451  else if (name == "MuonBarrel") add(theMuon->DTBarrel(), paramSel);
452  else if (name == "MuonCSCLayers") add(theMuon->CSCLayers(), paramSel);
453  else if (name == "MuonCSCRings") add(theMuon->CSCRings(), paramSel);
454  else if (name == "MuonCSCChambers") add(theMuon->CSCChambers(), paramSel);
455  else if (name == "MuonCSCStations") add(theMuon->CSCStations(), paramSel);
456  else if (name == "MuonEndcaps") add(theMuon->CSCEndcaps(), paramSel);
457 
459  // not found, but Muon
461  else {
462  throw cms::Exception("BadConfig") <<"[AlignmentParameterSelector::addSelection]"
463  << ": Selection '" << name << "' invalid!";
464  }
465  }
466 
468  // Generic Extra Alignable Section
470  else if (name.find("Extras") == 0) { // string starts with "Extras"
471  if (!theExtras) {
472  throw cms::Exception("BadConfig") << "[AlignmentParameterSelector::addSelection] "
473  << "Configuration requires access to AlignableExtras"
474  << " (for " << name << ") that is not initialized";
475  }
476  const std::string substructName(name, 6); // erase "Extras" at the beginning
477  numAli += this->add(theExtras->subStructures(substructName), paramSel);
478  }
479  // end of "name.find("Extras") != std::string::npos"
480 
481  else {
482  throw cms::Exception("BadConfig") <<"[AlignmentParameterSelector::addSelection]"
483  << ": Selection '" << name << "' invalid!";
484  }
485 
486  this->setSpecials(""); // reset
487 
488  return numAli;
489 }
490 
491 //________________________________________________________________________________
492 unsigned int AlignmentParameterSelector::add(const align::Alignables &alignables,
493  const std::vector<char> &paramSel)
494 {
495  unsigned int numAli = 0;
496 
497  // loop on Alignable objects
498  for (align::Alignables::const_iterator iAli = alignables.begin();
499  iAli != alignables.end(); ++iAli) {
500 
501  if (!this->layerDeselected(*iAli) // check layers
502  && !this->detUnitDeselected(*iAli) // check detunit selection
503  && !this->outsideGeometricalRanges(*iAli) // check geometrical ranges
504  && !this->outsideDetIdRanges(*iAli)) { // check DetId ranges
505  // all fine, so add to output arrays
506  theSelectedAlignables.push_back(*iAli);
507  theSelectedParameters.push_back(paramSel);
508  ++numAli;
509  }
510  }
511 
512  return numAli;
513 }
514 
515 //_________________________________________________________________________
517 {
518  if (theOnlySS || theOnlyDS || theSelLayers) {
519  TrackerAlignableId idProvider;
520  std::pair<int,int> typeLayer = idProvider.typeAndLayerFromDetId(ali->id(), alignableTracker()->trackerTopology());
521  int type = typeLayer.first;
522  int layer = typeLayer.second;
523 
524  // select on single/double sided barrel layers in TIB/TOB
525  if (theOnlySS // only single sided
526  && (std::abs(type) == SiStripDetId::TIB || std::abs(type) == SiStripDetId::TOB)
527  && layer <= 2) {
528  return true;
529  }
530  if (theOnlyDS // only double sided
531  && (std::abs(type) == SiStripDetId::TIB || std::abs(type) == SiStripDetId::TOB)
532  && layer > 2) {
533  return true;
534  }
535 
536  // reject layers
537  if (theSelLayers && (layer < theMinLayer || layer > theMaxLayer)) {
538  return true;
539  }
540  }
541 
542  return false; // do not deselect...
543 }
544 
545 //_________________________________________________________________________
547 {
548 
550  const SiStripDetId detId(ali->geomDetId()); // do not know yet whether right type...
551  if (detId.det() == DetId::Tracker
552  && (detId.subdetId() == SiStripDetId::TIB || detId.subdetId() == SiStripDetId::TID ||
553  detId.subdetId() == SiStripDetId::TOB || detId.subdetId() == SiStripDetId::TEC)) {
554  // We have a DetUnit in strip, so check for a selection of stereo/rphi (DetUnits in 1D layers are rphi):
555  if ((theRphiOrStereoDetUnit == Stereo && !detId.stereo())
556  || (theRphiOrStereoDetUnit == Rphi && detId.stereo())) {
557  return true;
558  }
559  }
560  }
561 
562  return false; // do not deselect...
563 }
564 
565 //_________________________________________________________________________
567 {
568  const align::PositionType& position(alignable->globalPosition());
569 
570  if (!theRangesEta.empty() && !this->insideRanges<double>((position.eta()), theRangesEta)) return true;
571  if (!theRangesPhi.empty() && !this->insideRanges<double>((position.phi()), theRangesPhi, true))return true;
572  if (!theRangesR.empty() && !this->insideRanges<double>((position.perp()), theRangesR)) return true;
573  if (!theRangesX.empty() && !this->insideRanges<double>((position.x()), theRangesX)) return true;
574  if (!theRangesY.empty() && !this->insideRanges<double>((position.y()), theRangesY)) return true;
575  if (!theRangesZ.empty() && !this->insideRanges<double>((position.z()), theRangesZ)) return true;
576 
577  return false;
578 }
579 
580 //_________________________________________________________________________
582 {
583  //const DetId detId(alignable->geomDetId());
584  const DetId detId(alignable->id());
585  const int subdetId = detId.subdetId();
586 
587  if (alignableTracker()) {
588 
590 
591  if (!theDetIds.empty() &&
592  !this->isMemberOfVector((detId.rawId()), theDetIds)) return true;
593  if (!theDetIdRanges.empty() &&
594  !this->insideRanges<int>((detId.rawId()), theDetIdRanges)) return true;
595  if (!theExcludedDetIds.empty() &&
596  this->isMemberOfVector((detId.rawId()), theExcludedDetIds)) return true;
597  if (!theExcludedDetIdRanges.empty() &&
598  this->insideRanges<int>((detId.rawId()), theExcludedDetIdRanges)) return true;
599 
600  if (detId.det()==DetId::Tracker) {
601 
602  if (subdetId==static_cast<int>(PixelSubdetector::PixelBarrel)) {
603  if (!thePXBDetIdRanges.theLadderRanges.empty() &&
604  !this->insideRanges<int>(tTopo->pxbLadder(detId), thePXBDetIdRanges.theLadderRanges)) return true;
605  if (!thePXBDetIdRanges.theLayerRanges.empty() &&
606  !this->insideRanges<int>(tTopo->pxbLayer(detId), thePXBDetIdRanges.theLayerRanges)) return true;
607  if (!thePXBDetIdRanges.theModuleRanges.empty() &&
608  !this->insideRanges<int>(tTopo->pxbModule(detId), thePXBDetIdRanges.theModuleRanges)) return true;
609  }
610 
611  if (subdetId==static_cast<int>(PixelSubdetector::PixelEndcap)) {
612  if (!thePXFDetIdRanges.theBladeRanges.empty() &&
613  !this->insideRanges<int>(tTopo->pxfBlade(detId), thePXFDetIdRanges.theBladeRanges)) return true;
614  if (!thePXFDetIdRanges.theDiskRanges.empty() &&
615  !this->insideRanges<int>(tTopo->pxfDisk(detId), thePXFDetIdRanges.theDiskRanges)) return true;
616  if (!thePXFDetIdRanges.theModuleRanges.empty() &&
617  !this->insideRanges<int>(tTopo->pxfModule(detId), thePXFDetIdRanges.theModuleRanges)) return true;
618  if (!thePXFDetIdRanges.thePanelRanges.empty() &&
619  !this->insideRanges<int>(tTopo->pxfPanel(detId), thePXFDetIdRanges.thePanelRanges)) return true;
620  if (!thePXFDetIdRanges.theSideRanges.empty() &&
621  !this->insideRanges<int>(tTopo->pxfSide(detId), thePXFDetIdRanges.theSideRanges)) return true;
622  }
623 
624  if (subdetId==static_cast<int>(SiStripDetId::TIB)) {
625  if (!theTIBDetIdRanges.theLayerRanges.empty() &&
626  !this->insideRanges<int>(tTopo->tibLayer(detId), theTIBDetIdRanges.theLayerRanges)) return true;
627  if (!theTIBDetIdRanges.theModuleRanges.empty() &&
628  !this->insideRanges<int>(tTopo->tibModule(detId), theTIBDetIdRanges.theModuleRanges)) return true;
629  if (!theTIBDetIdRanges.theSideRanges.empty() &&
630  !this->insideRanges<int>(tTopo->tibSide(detId), theTIBDetIdRanges.theSideRanges)) return true;
631  if (!theTIBDetIdRanges.theStringRanges.empty() &&
632  !this->insideRanges<int>(tTopo->tibString(detId), theTIBDetIdRanges.theStringRanges)) return true;
633  }
634 
635  if (subdetId==static_cast<int>(SiStripDetId::TID)) {
636  if (!theTIDDetIdRanges.theDiskRanges.empty() &&
637  !this->insideRanges<int>(tTopo->tidWheel(detId), theTIDDetIdRanges.theDiskRanges)) return true;
638  if (!theTIDDetIdRanges.theModuleRanges.empty() &&
639  !this->insideRanges<int>(tTopo->tidModule(detId), theTIDDetIdRanges.theModuleRanges)) return true;
640  if (!theTIDDetIdRanges.theRingRanges.empty() &&
641  !this->insideRanges<int>(tTopo->tidRing(detId), theTIDDetIdRanges.theRingRanges)) return true;
642  if (!theTIDDetIdRanges.theSideRanges.empty() &&
643  !this->insideRanges<int>(tTopo->tidSide(detId), theTIDDetIdRanges.theSideRanges)) return true;
644  }
645 
646  if (subdetId==static_cast<int>(SiStripDetId::TOB)) {
647  if (!theTOBDetIdRanges.theLayerRanges.empty() &&
648  !this->insideRanges<int>(tTopo->tobLayer(detId), theTOBDetIdRanges.theLayerRanges)) return true;
649  if (!theTOBDetIdRanges.theModuleRanges.empty() &&
650  !this->insideRanges<int>(tTopo->tobModule(detId), theTOBDetIdRanges.theModuleRanges)) return true;
651  if (!theTOBDetIdRanges.theRodRanges.empty() &&
652  !this->insideRanges<int>(tTopo->tobRod(detId), theTOBDetIdRanges.theRodRanges)) return true;
653  if (!theTOBDetIdRanges.theSideRanges.empty() &&
654  !this->insideRanges<int>(tTopo->tobSide(detId), theTOBDetIdRanges.theSideRanges)) return true;
655  }
656 
657  if (subdetId==static_cast<int>(SiStripDetId::TEC)) {
658  if (!theTECDetIdRanges.theWheelRanges.empty() &&
659  !this->insideRanges<int>(tTopo->tecWheel(detId), theTECDetIdRanges.theWheelRanges)) return true;
660  if (!theTECDetIdRanges.thePetalRanges.empty() &&
661  !this->insideRanges<int>(tTopo->tecPetalNumber(detId), theTECDetIdRanges.thePetalRanges)) return true;
662  if (!theTECDetIdRanges.theModuleRanges.empty() &&
663  !this->insideRanges<int>(tTopo->tecModule(detId), theTECDetIdRanges.theModuleRanges)) return true;
664  if (!theTECDetIdRanges.theRingRanges.empty() &&
665  !this->insideRanges<int>(tTopo->tecRing(detId), theTECDetIdRanges.theRingRanges)) return true;
666  if (!theTECDetIdRanges.theSideRanges.empty() &&
667  !this->insideRanges<int>(tTopo->tecSide(detId), theTECDetIdRanges.theSideRanges)) return true;
668  }
669  }
670  }
671 
672  return false;
673 }
674 
675 //_________________________________________________________________________
677  const std::vector<T> &ranges,
678  bool isPhi) const
679 {
680  // might become templated on <double> ?
681 
682  if (ranges.size()%2 != 0) {
683  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
684  << " need even number of entries in ranges instead of "
685  << ranges.size();
686  return false;
687  }
688 
689  for (unsigned int i = 0; i < ranges.size(); i += 2) {
690  if (isPhi) { // mapping into (-pi,+pi] and checking for range including sign flip area
691  Geom::Phi<double> rangePhi1(ranges[i]);
692  Geom::Phi<double> rangePhi2(ranges[i+1]);
693  Geom::Phi<double> valuePhi(value);
694  if (rangePhi1 <= valuePhi && valuePhi < rangePhi2) { // 'normal'
695  return true;
696  }
697  if (rangePhi2 < rangePhi1 && (rangePhi1 <= valuePhi || valuePhi < rangePhi2)) {// 'sign flip'
698  return true;
699  }
700  } else if (ranges[i] <= value && value < ranges[i+1]) {
701  return true;
702  }
703  }
704 
705  return false;
706 }
707 
708 //_________________________________________________________________________
709 template<> bool AlignmentParameterSelector::insideRanges<int>(int value,
710  const std::vector<int> &ranges,
711  bool /*isPhi*/) const
712 {
713  if (ranges.size()%2 != 0) {
714  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
715  << " need even number of entries in ranges instead of "
716  << ranges.size();
717  return false;
718  }
719 
720  for (unsigned int i = 0; i < ranges.size(); i += 2) {
721  if (ranges[i] <= value && value <= ranges[i+1]) return true;
722  }
723 
724  return false;
725 }
726 
727 bool AlignmentParameterSelector::isMemberOfVector(int value, const std::vector<int> &values) const
728 {
729  if (std::find(values.begin(), values.end(), value)!=values.end()) return true;
730  return false;
731 }
732 
733 //__________________________________________________________________________________________________
734 std::vector<std::string>
736 {
737 
738  std::vector<std::string> result;
739 
740  std::string::size_type previousPos = 0;
741  while (true) {
742  const std::string::size_type delimiterPos = s.find(delimiter, previousPos);
743  if (delimiterPos == std::string::npos) {
744  result.push_back(s.substr(previousPos)); // until end
745  break;
746  }
747  result.push_back(s.substr(previousPos, delimiterPos - previousPos));
748  previousPos = delimiterPos + 1; // +1: skip delimiter
749  }
750 
751  return result;
752 }
753 
754 //__________________________________________________________________________________________________
755 std::vector<char> AlignmentParameterSelector::convertParamSel(const std::string &selString) const
756 {
757 
758  // Convert selString into vector<char> of same length.
759  // Note: Old implementation in AlignmentParameterBuilder was rigid in length,
760  // expecting RigidBodyAlignmentParameters::N_PARAM.
761  // But I prefer to be more general and allow other Alignables. It will throw anyway if
762  // RigidBodyAlignmentParameters are build with wrong selection length.
763  std::vector<char> result(selString.size());
764 
765  for (std::string::size_type pos = 0; pos < selString.size(); ++pos) {
766  result[pos] = selString[pos];
767  }
768 
769  return result;
770 }
771 
772 
773 //________________________________________________________________________________
775 {
776  // Use new string only, although direct erasing of found indicator causes problems for 'DSS',
777  // but 'DSS' makes absolutely no sense!
778  std::string newName(name);
779 
780  const std::string::size_type ss = newName.rfind("SS");
781  if (ss != std::string::npos) {
782  newName.erase(ss, 2); // 2: length of 'SS'
783  theOnlySS = true;
784  } else {
785  theOnlySS = false;
786  }
787 
788  const std::string::size_type ds = newName.rfind("DS");
789  if (ds != std::string::npos) {
790  newName.erase(ds, 2); // 2: length of 'DS'
791  theOnlyDS = true;
792  } else {
793  theOnlyDS = false;
794  }
795 
796  const std::string::size_type size = newName.size();
797  const std::string::size_type layers = newName.rfind("Layers");
798  if (layers != std::string::npos && size - layers - 2 == 6 // 2 digits, 6: length of 'Layers'
799  && isdigit(newName[size-1]) && isdigit(newName[size-2])) {
800  theSelLayers = true;
801  theMinLayer = newName[size-2] - '0';
802  theMaxLayer = newName[size-1] - '0';
803  newName.erase(layers);
804  } else {
805  theSelLayers = false;
806  theMinLayer = -1;
807  theMaxLayer = 99999;
808  }
809 
811  if (newName.rfind("Unit") != std::string::npos) {
812  const std::string::size_type uRph = newName.rfind("UnitRphi");
813  if (uRph != std::string::npos) {
814  newName.erase(uRph + 4, 4); // keep 'Unit' (4) and erase 'Rphi' (4)
816  }
817  const std::string::size_type uSte = newName.rfind("UnitStereo");
818  if (uSte != std::string::npos) {
819  newName.erase(uSte + 4, 6); // keep 'Unit' (4) and erase 'Stereo' (6)
821  }
822  }
823 
824  if (newName != name) {
825  LogDebug("Alignment") << "@SUB=AlignmentParameterSelector::setSpecials"
826  << name << " becomes " << newName << ", makes theOnlySS " << theOnlySS
827  << ", theOnlyDS " << theOnlyDS << ", theSelLayers " << theSelLayers
828  << ", theMinLayer " << theMinLayer << ", theMaxLayer " << theMaxLayer
829  << ", theRphiOrStereoDetUnit " << theRphiOrStereoDetUnit;
830  }
831 
832  return newName;
833 }
834 
835 //________________________________________________________________________________
836 unsigned int AlignmentParameterSelector::addAllDets(const std::vector<char> &paramSel)
837 {
838  unsigned int numAli = 0;
839 
840  numAli += this->add(theTracker->barrelGeomDets(), paramSel); // TIB+TOB
841  numAli += this->add(theTracker->endcapGeomDets(), paramSel); // TEC
842  numAli += this->add(theTracker->TIDGeomDets(), paramSel); // TID
843  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel); // PixelBarrel
844  numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel); // PixelEndcap
845 
846  return numAli;
847 }
848 
849 //________________________________________________________________________________
850 unsigned int AlignmentParameterSelector::addAllRods(const std::vector<char> &paramSel)
851 {
852  unsigned int numAli = 0;
853 
854  numAli += this->add(theTracker->barrelRods(), paramSel); // TIB+TOB
855  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel); // PixelBarrel
856  numAli += this->add(theTracker->endcapPetals(), paramSel); // TEC
857  numAli += this->add(theTracker->TIDRings(), paramSel); // TID
858  numAli += this->add(theTracker->pixelEndcapPetals(), paramSel); // PixelEndcap
859 
860  return numAli;
861 }
862 
863 //________________________________________________________________________________
864 unsigned int AlignmentParameterSelector::addAllLayers(const std::vector<char> &paramSel)
865 {
866  unsigned int numAli = 0;
867 
868  numAli += this->add(theTracker->barrelLayers(), paramSel); // TIB+TOB
869  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel); // PixelBarrel
870  numAli += this->add(theTracker->endcapLayers(), paramSel); // TEC
871  numAli += this->add(theTracker->TIDLayers(), paramSel); // TID
872  numAli += this->add(theTracker->pixelEndcapLayers(), paramSel); // PixelEndcap
873 
874  return numAli;
875 }
876 
877 //________________________________________________________________________________
878 unsigned int AlignmentParameterSelector::addAllAlignables(const std::vector<char> &paramSel)
879 {
880  unsigned int numAli = 0;
881 
882  numAli += this->addAllDets(paramSel);
883  numAli += this->addAllRods(paramSel);
884  numAli += this->addAllLayers(paramSel);
885  numAli += this->add(theTracker->components(), paramSel);
886 
887  return numAli;
888 }
#define LogDebug(id)
size
Write out results.
type
Definition: HCALResponse.h:21
const Alignables & components() const override
Return vector of direct components.
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:189
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.
void setTIDDetIdCuts(const edm::ParameterSet &pSet)
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
Definition: LayerTriplets.cc:4
unsigned int tibLayer(const DetId &id) const
unsigned int tibString(const DetId &id) const
std::pair< int, int > typeAndLayerFromDetId(const DetId &detId, const TrackerTopology *tTopo) const
unsigned int tidRing(const DetId &id) const
align::Alignables DTLayers()
Methods to return specific of components.
AlignmentParameterSelector(AlignableTracker *aliTracker, AlignableMuon *aliMuon=nullptr, AlignableExtras *aliExtras=nullptr)
Constructor from tracker only or from tracker and muon.
unsigned int addAllAlignables(const std::vector< char > &paramSel)
bool insideRanges(T value, const std::vector< T > &ranges, bool isPhi=false) const
align::Alignables CSCChambers()
void clearGeometryCuts()
remove all geometrical restrictions
unsigned int pxfDisk(const DetId &id) const
unsigned int tecRing(const DetId &id) const
ring id
std::vector< std::vector< char > > theSelectedParameters
align::Alignables DTBarrel()
unsigned int pxbLadder(const DetId &id) const
align::Alignables CSCStations()
Alignables & pixelHalfBarrelLayers()
Return pixel half barrel layers.
unsigned int tidWheel(const DetId &id) const
unsigned int pxbModule(const DetId &id) const
string newName
Definition: mps_merge.py:84
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:20
struct AlignmentParameterSelector::PXFDetIdRanges thePXFDetIdRanges
uint16_t size_type
const TrackerTopology * trackerTopology() const
Return tracker topology used to build AlignableTracker.
void setGeometryCuts(const edm::ParameterSet &pSet)
unsigned int tibSide(const DetId &id) const
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()
unsigned int tidSide(const DetId &id) const
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
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 tidModule(const DetId &id) const
unsigned int addAllDets(const std::vector< char > &paramSel)
some helper methods
void setTECDetIdCuts(const edm::ParameterSet &pSet)
Alignables & TIDGeomDets()
Return TID GeomDets.
unsigned int addAllLayers(const std::vector< char > &paramSel)
unsigned int tobSide(const DetId &id) const
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;.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
Definition: value.py:1
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.
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
struct AlignmentParameterSelector::TIBDetIdRanges theTIBDetIdRanges
Alignables barrelLayers()
Return inner and outer barrel layers.
Alignables & endcapGeomDets()
Return endcap GeomDets.
unsigned int tibModule(const DetId &id) const
Alignables & pixelEndcapGeomDets()
Return pixel endcap GeomDets.
unsigned int pxfModule(const DetId &id) const
align::Alignables CSCLayers()
struct AlignmentParameterSelector::TOBDetIdRanges theTOBDetIdRanges
string ranges
Definition: diffTwoXMLs.py:78
Alignables & TIDs()
Return TIDs.
unsigned int pxbLayer(const DetId &id) const
unsigned int tecModule(const DetId &id) const
unsigned int addAllRods(const std::vector< char > &paramSel)
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
Definition: DetId.h:18
Alignables & outerBarrelLayers()
Return outer barrel layers.
void setPXFDetIdCuts(const edm::ParameterSet &pSet)
Alignables & outerBarrelGeomDets()
Return outer barrel GeomDets.
Alignables & TIDLayers()
Return TID layers.
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()
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 ...
std::vector< Alignable * > Alignables
Definition: Utilities.h:32
unsigned int tobModule(const DetId &id) const
Alignables & innerBarrelLayers()
Return inner barrel layers.
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)
static int position[264][3]
Definition: ReadPGInfo.cc:509
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<char>
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 pxfSide(const DetId &id) const
bool isMemberOfVector(int value, const std::vector< int > &values) const
true if value is member of vector of values
unsigned int tecPetalNumber(const DetId &id) const
const PositionType & globalPosition() const
Return the global position of the object.
Definition: Alignable.h:138
Alignables & endcapPetals()
Return encap petals.
Alignables & innerHalfBarrels()
Return TIB half barrels.
unsigned int tobRod(const DetId &id) const
const AlignableTracker * alignableTracker() const
long double T
Constructor of the full muon geometry.
Definition: AlignableMuon.h:37
unsigned int tecWheel(const DetId &id) const
Alignables & endcapLayers()
Return endcap layers.
Alignables & pixelEndcapHalfCylinders()
Return pixel endcap half cylinders.
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
Alignables & pixelEndcapLayers()
Return pixel endcap layers.
unsigned int tecSide(const DetId &id) const
struct AlignmentParameterSelector::TIDDetIdRanges theTIDDetIdRanges
Alignables & outerHalfBarrels()
Return TOB half barrels.
bool layerDeselected(const Alignable *alignable) const
true if layer is deselected via "Layers<N><M>" or "DS/SS"
bool detUnitDeselected(const Alignable *alignable) const
true if alignable is DetUnit deselected by Unit<Rphi/Stereo> selection
Alignables & innerBarrelRods()
Return inner barrel rods.
std::string setSpecials(const std::string &name)
void setTIBDetIdCuts(const edm::ParameterSet &pSet)