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 
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 (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(), alignableTracker()->trackerTopology());
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 
587 
588  if (!theDetIds.empty() &&
589  !this->isMemberOfVector((detId.rawId()), theDetIds)) return true;
590  if (!theDetIdRanges.empty() &&
591  !this->insideRanges<int>((detId.rawId()), theDetIdRanges)) return true;
592  if (!theExcludedDetIds.empty() &&
593  this->isMemberOfVector((detId.rawId()), theExcludedDetIds)) return true;
594  if (!theExcludedDetIdRanges.empty() &&
595  this->insideRanges<int>((detId.rawId()), theExcludedDetIdRanges)) return true;
596 
597  if (detId.det()==DetId::Tracker) {
598 
599  if (subdetId==static_cast<int>(PixelSubdetector::PixelBarrel)) {
600  if (!thePXBDetIdRanges.theLadderRanges.empty() &&
601  !this->insideRanges<int>(tTopo->pxbLadder(detId), thePXBDetIdRanges.theLadderRanges)) return true;
602  if (!thePXBDetIdRanges.theLayerRanges.empty() &&
603  !this->insideRanges<int>(tTopo->pxbLayer(detId), thePXBDetIdRanges.theLayerRanges)) return true;
604  if (!thePXBDetIdRanges.theModuleRanges.empty() &&
605  !this->insideRanges<int>(tTopo->pxbModule(detId), thePXBDetIdRanges.theModuleRanges)) return true;
606  }
607 
608  if (subdetId==static_cast<int>(PixelSubdetector::PixelEndcap)) {
609  if (!thePXFDetIdRanges.theBladeRanges.empty() &&
610  !this->insideRanges<int>(tTopo->pxfBlade(detId), thePXFDetIdRanges.theBladeRanges)) return true;
611  if (!thePXFDetIdRanges.theDiskRanges.empty() &&
612  !this->insideRanges<int>(tTopo->pxfDisk(detId), thePXFDetIdRanges.theDiskRanges)) return true;
613  if (!thePXFDetIdRanges.theModuleRanges.empty() &&
614  !this->insideRanges<int>(tTopo->pxfModule(detId), thePXFDetIdRanges.theModuleRanges)) return true;
615  if (!thePXFDetIdRanges.thePanelRanges.empty() &&
616  !this->insideRanges<int>(tTopo->pxfPanel(detId), thePXFDetIdRanges.thePanelRanges)) return true;
617  if (!thePXFDetIdRanges.theSideRanges.empty() &&
618  !this->insideRanges<int>(tTopo->pxfSide(detId), thePXFDetIdRanges.theSideRanges)) return true;
619  }
620 
621  if (subdetId==static_cast<int>(SiStripDetId::TIB)) {
622  if (!theTIBDetIdRanges.theLayerRanges.empty() &&
623  !this->insideRanges<int>(tTopo->tibLayer(detId), theTIBDetIdRanges.theLayerRanges)) return true;
624  if (!theTIBDetIdRanges.theModuleRanges.empty() &&
625  !this->insideRanges<int>(tTopo->tibModule(detId), theTIBDetIdRanges.theModuleRanges)) return true;
626  if (!theTIBDetIdRanges.theSideRanges.empty() &&
627  !this->insideRanges<int>(tTopo->tibSide(detId), theTIBDetIdRanges.theSideRanges)) return true;
628  if (!theTIBDetIdRanges.theStringRanges.empty() &&
629  !this->insideRanges<int>(tTopo->tibString(detId), theTIBDetIdRanges.theStringRanges)) return true;
630  }
631 
632  if (subdetId==static_cast<int>(SiStripDetId::TID)) {
633  if (!theTIDDetIdRanges.theDiskRanges.empty() &&
634  !this->insideRanges<int>(tTopo->tidWheel(detId), theTIDDetIdRanges.theDiskRanges)) return true;
635  if (!theTIDDetIdRanges.theModuleRanges.empty() &&
636  !this->insideRanges<int>(tTopo->tidModule(detId), theTIDDetIdRanges.theModuleRanges)) return true;
637  if (!theTIDDetIdRanges.theRingRanges.empty() &&
638  !this->insideRanges<int>(tTopo->tidRing(detId), theTIDDetIdRanges.theRingRanges)) return true;
639  if (!theTIDDetIdRanges.theSideRanges.empty() &&
640  !this->insideRanges<int>(tTopo->tidSide(detId), theTIDDetIdRanges.theSideRanges)) return true;
641  }
642 
643  if (subdetId==static_cast<int>(SiStripDetId::TOB)) {
644  if (!theTOBDetIdRanges.theLayerRanges.empty() &&
645  !this->insideRanges<int>(tTopo->tobLayer(detId), theTOBDetIdRanges.theLayerRanges)) return true;
646  if (!theTOBDetIdRanges.theModuleRanges.empty() &&
647  !this->insideRanges<int>(tTopo->tobModule(detId), theTOBDetIdRanges.theModuleRanges)) return true;
648  if (!theTOBDetIdRanges.theRodRanges.empty() &&
649  !this->insideRanges<int>(tTopo->tobRod(detId), theTOBDetIdRanges.theRodRanges)) return true;
650  if (!theTOBDetIdRanges.theSideRanges.empty() &&
651  !this->insideRanges<int>(tTopo->tobSide(detId), theTOBDetIdRanges.theSideRanges)) return true;
652  }
653 
654  if (subdetId==static_cast<int>(SiStripDetId::TEC)) {
655  if (!theTECDetIdRanges.theWheelRanges.empty() &&
656  !this->insideRanges<int>(tTopo->tecWheel(detId), theTECDetIdRanges.theWheelRanges)) return true;
657  if (!theTECDetIdRanges.thePetalRanges.empty() &&
658  !this->insideRanges<int>(tTopo->tecPetalNumber(detId), theTECDetIdRanges.thePetalRanges)) return true;
659  if (!theTECDetIdRanges.theModuleRanges.empty() &&
660  !this->insideRanges<int>(tTopo->tecModule(detId), theTECDetIdRanges.theModuleRanges)) return true;
661  if (!theTECDetIdRanges.theRingRanges.empty() &&
662  !this->insideRanges<int>(tTopo->tecRing(detId), theTECDetIdRanges.theRingRanges)) return true;
663  if (!theTECDetIdRanges.theSideRanges.empty() &&
664  !this->insideRanges<int>(tTopo->tecSide(detId), theTECDetIdRanges.theSideRanges)) return true;
665  }
666 
667  }
668 
669  return false;
670 }
671 
672 //_________________________________________________________________________
674  const std::vector<T> &ranges,
675  bool isPhi) const
676 {
677  // might become templated on <double> ?
678 
679  if (ranges.size()%2 != 0) {
680  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
681  << " need even number of entries in ranges instead of "
682  << ranges.size();
683  return false;
684  }
685 
686  for (unsigned int i = 0; i < ranges.size(); i += 2) {
687  if (isPhi) { // mapping into (-pi,+pi] and checking for range including sign flip area
688  Geom::Phi<double> rangePhi1(ranges[i]);
689  Geom::Phi<double> rangePhi2(ranges[i+1]);
690  Geom::Phi<double> valuePhi(value);
691  if (rangePhi1 <= valuePhi && valuePhi < rangePhi2) { // 'normal'
692  return true;
693  }
694  if (rangePhi2 < rangePhi1 && (rangePhi1 <= valuePhi || valuePhi < rangePhi2)) {// 'sign flip'
695  return true;
696  }
697  } else if (ranges[i] <= value && value < ranges[i+1]) {
698  return true;
699  }
700  }
701 
702  return false;
703 }
704 
705 //_________________________________________________________________________
706 template<> bool AlignmentParameterSelector::insideRanges<int>(int value,
707  const std::vector<int> &ranges,
708  bool /*isPhi*/) const
709 {
710  if (ranges.size()%2 != 0) {
711  cms::Exception("BadConfig") << "@SUB=AlignmentParameterSelector::insideRanges"
712  << " need even number of entries in ranges instead of "
713  << ranges.size();
714  return false;
715  }
716 
717  for (unsigned int i = 0; i < ranges.size(); i += 2) {
718  if (ranges[i] <= value && value <= ranges[i+1]) return true;
719  }
720 
721  return false;
722 }
723 
724 bool AlignmentParameterSelector::isMemberOfVector(int value, const std::vector<int> &values) const
725 {
726  if (std::find(values.begin(), values.end(), value)!=values.end()) return true;
727  return false;
728 }
729 
730 //__________________________________________________________________________________________________
731 std::vector<std::string>
733 {
734 
735  std::vector<std::string> result;
736 
737  std::string::size_type previousPos = 0;
738  while (true) {
739  const std::string::size_type delimiterPos = s.find(delimiter, previousPos);
740  if (delimiterPos == std::string::npos) {
741  result.push_back(s.substr(previousPos)); // until end
742  break;
743  }
744  result.push_back(s.substr(previousPos, delimiterPos - previousPos));
745  previousPos = delimiterPos + 1; // +1: skip delimiter
746  }
747 
748  return result;
749 }
750 
751 //__________________________________________________________________________________________________
752 std::vector<char> AlignmentParameterSelector::convertParamSel(const std::string &selString) const
753 {
754 
755  // Convert selString into vector<char> of same length.
756  // Note: Old implementation in AlignmentParameterBuilder was rigid in length,
757  // expecting RigidBodyAlignmentParameters::N_PARAM.
758  // But I prefer to be more general and allow other Alignables. It will throw anyway if
759  // RigidBodyAlignmentParameters are build with wrong selection length.
760  std::vector<char> result(selString.size());
761 
762  for (std::string::size_type pos = 0; pos < selString.size(); ++pos) {
763  result[pos] = selString[pos];
764  }
765 
766  return result;
767 }
768 
769 
770 //________________________________________________________________________________
772 {
773  // Use new string only, although direct erasing of found indicator causes problems for 'DSS',
774  // but 'DSS' makes absolutely no sense!
775  std::string newName(name);
776 
777  const std::string::size_type ss = newName.rfind("SS");
778  if (ss != std::string::npos) {
779  newName.erase(ss, 2); // 2: length of 'SS'
780  theOnlySS = true;
781  } else {
782  theOnlySS = false;
783  }
784 
785  const std::string::size_type ds = newName.rfind("DS");
786  if (ds != std::string::npos) {
787  newName.erase(ds, 2); // 2: length of 'DS'
788  theOnlyDS = true;
789  } else {
790  theOnlyDS = false;
791  }
792 
793  const std::string::size_type size = newName.size();
794  const std::string::size_type layers = newName.rfind("Layers");
795  if (layers != std::string::npos && size - layers - 2 == 6 // 2 digits, 6: length of 'Layers'
796  && isdigit(newName[size-1]) && isdigit(newName[size-2])) {
797  theSelLayers = true;
798  theMinLayer = newName[size-2] - '0';
799  theMaxLayer = newName[size-1] - '0';
800  newName.erase(layers);
801  } else {
802  theSelLayers = false;
803  theMinLayer = -1;
804  theMaxLayer = 99999;
805  }
806 
808  if (newName.rfind("Unit") != std::string::npos) {
809  const std::string::size_type uRph = newName.rfind("UnitRphi");
810  if (uRph != std::string::npos) {
811  newName.erase(uRph + 4, 4); // keep 'Unit' (4) and erase 'Rphi' (4)
813  }
814  const std::string::size_type uSte = newName.rfind("UnitStereo");
815  if (uSte != std::string::npos) {
816  newName.erase(uSte + 4, 6); // keep 'Unit' (4) and erase 'Stereo' (6)
818  }
819  }
820 
821  if (newName != name) {
822  LogDebug("Alignment") << "@SUB=AlignmentParameterSelector::setSpecials"
823  << name << " becomes " << newName << ", makes theOnlySS " << theOnlySS
824  << ", theOnlyDS " << theOnlyDS << ", theSelLayers " << theSelLayers
825  << ", theMinLayer " << theMinLayer << ", theMaxLayer " << theMaxLayer
826  << ", theRphiOrStereoDetUnit " << theRphiOrStereoDetUnit;
827  }
828 
829  return newName;
830 }
831 
832 //________________________________________________________________________________
833 unsigned int AlignmentParameterSelector::addAllDets(const std::vector<char> &paramSel)
834 {
835  unsigned int numAli = 0;
836 
837  numAli += this->add(theTracker->barrelGeomDets(), paramSel); // TIB+TOB
838  numAli += this->add(theTracker->endcapGeomDets(), paramSel); // TEC
839  numAli += this->add(theTracker->TIDGeomDets(), paramSel); // TID
840  numAli += this->add(theTracker->pixelHalfBarrelGeomDets(), paramSel); // PixelBarrel
841  numAli += this->add(theTracker->pixelEndcapGeomDets(), paramSel); // PixelEndcap
842 
843  return numAli;
844 }
845 
846 //________________________________________________________________________________
847 unsigned int AlignmentParameterSelector::addAllRods(const std::vector<char> &paramSel)
848 {
849  unsigned int numAli = 0;
850 
851  numAli += this->add(theTracker->barrelRods(), paramSel); // TIB+TOB
852  numAli += this->add(theTracker->pixelHalfBarrelLadders(), paramSel); // PixelBarrel
853  numAli += this->add(theTracker->endcapPetals(), paramSel); // TEC
854  numAli += this->add(theTracker->TIDRings(), paramSel); // TID
855  numAli += this->add(theTracker->pixelEndcapPetals(), paramSel); // PixelEndcap
856 
857  return numAli;
858 }
859 
860 //________________________________________________________________________________
861 unsigned int AlignmentParameterSelector::addAllLayers(const std::vector<char> &paramSel)
862 {
863  unsigned int numAli = 0;
864 
865  numAli += this->add(theTracker->barrelLayers(), paramSel); // TIB+TOB
866  numAli += this->add(theTracker->pixelHalfBarrelLayers(), paramSel); // PixelBarrel
867  numAli += this->add(theTracker->endcapLayers(), paramSel); // TEC
868  numAli += this->add(theTracker->TIDLayers(), paramSel); // TID
869  numAli += this->add(theTracker->pixelEndcapLayers(), paramSel); // PixelEndcap
870 
871  return numAli;
872 }
873 
874 //________________________________________________________________________________
875 unsigned int AlignmentParameterSelector::addAllAlignables(const std::vector<char> &paramSel)
876 {
877  unsigned int numAli = 0;
878 
879  numAli += this->addAllDets(paramSel);
880  numAli += this->addAllRods(paramSel);
881  numAli += this->addAllLayers(paramSel);
882  numAli += this->add(theTracker->components(), paramSel);
883 
884  return numAli;
885 }
#define LogDebug(id)
type
Definition: HCALResponse.h:21
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
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.
void setTIDDetIdCuts(const edm::ParameterSet &pSet)
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()
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
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
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
uint16_t size_type
static int position[TOTALCHAMBERS][3]
Definition: ReadPGInfo.cc:509
const TrackerTopology * trackerTopology() const
Returns tracker topology.
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
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)
tuple result
Definition: query.py:137
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;.
virtual StructureType alignableObjectId() const =0
Return the alignable type identifier.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
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: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:28
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)
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 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
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.
unsigned int tobRod(const DetId &id) const
const AlignableTracker * alignableTracker() const
long double T
Constructor of the full muon geometry.
Definition: AlignableMuon.h:36
unsigned int tecWheel(const DetId &id) const
Alignables & endcapLayers()
Return endcap layers.
const DetId & geomDetId() const
Definition: Alignable.h:177
tuple size
Write out results.
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 &quot;Layers&lt;N&gt;&lt;M&gt;&quot; or &quot;DS/SS&quot;
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)