CMS 3D CMS Logo

AlignableObjectId.cc
Go to the documentation of this file.
2 
3 #include <algorithm>
4 
7 
10  const char *name;
11 };
12 
13 namespace {
14 
15  constexpr AlignableObjectId::entry entries_RunI[]{{align::invalid, "invalid"},
16  {align::AlignableDetUnit, "DetUnit"},
17  {align::AlignableDet, "Det"},
18 
19  {align::TPBModule, "TPBModule"},
20  {align::TPBLadder, "TPBLadder"},
21  {align::TPBLayer, "TPBLayer"},
22  {align::TPBHalfBarrel, "TPBHalfBarrel"},
23  {align::TPBBarrel, "TPBBarrel"},
24 
25  {align::TPEModule, "TPEModule"},
26  {align::TPEPanel, "TPEPanel"},
27  {align::TPEBlade, "TPEBlade"},
28  {align::TPEHalfDisk, "TPEHalfDisk"},
29  {align::TPEHalfCylinder, "TPEHalfCylinder"},
30  {align::TPEEndcap, "TPEEndcap"},
31 
32  {align::TIBModule, "TIBModule"},
33  {align::TIBString, "TIBString"},
34  {align::TIBSurface, "TIBSurface"},
35  {align::TIBHalfShell, "TIBHalfShell"},
36  {align::TIBLayer, "TIBLayer"},
37  {align::TIBHalfBarrel, "TIBHalfBarrel"},
38  {align::TIBBarrel, "TIBBarrel"},
39 
40  {align::TIDModule, "TIDModule"},
41  {align::TIDSide, "TIDSide"},
42  {align::TIDRing, "TIDRing"},
43  {align::TIDDisk, "TIDDisk"},
44  {align::TIDEndcap, "TIDEndcap"},
45 
46  {align::TOBModule, "TOBModule"},
47  {align::TOBRod, "TOBRod"},
48  {align::TOBLayer, "TOBLayer"},
49  {align::TOBHalfBarrel, "TOBHalfBarrel"},
50  {align::TOBBarrel, "TOBBarrel"},
51 
52  {align::TECModule, "TECModule"},
53  {align::TECRing, "TECRing"},
54  {align::TECPetal, "TECPetal"},
55  {align::TECSide, "TECSide"},
56  {align::TECDisk, "TECDisk"},
57  {align::TECEndcap, "TECEndcap"},
58 
59  {align::Pixel, "Pixel"},
60  {align::Strip, "Strip"},
61  {align::Tracker, "Tracker"},
62 
63  {align::AlignableDTBarrel, "DTBarrel"},
64  {align::AlignableDTWheel, "DTWheel"},
65  {align::AlignableDTStation, "DTStation"},
66  {align::AlignableDTChamber, "DTChamber"},
67  {align::AlignableDTSuperLayer, "DTSuperLayer"},
68  {align::AlignableDTLayer, "DTLayer"},
69  {align::AlignableCSCEndcap, "CSCEndcap"},
70  {align::AlignableCSCStation, "CSCStation"},
71  {align::AlignableCSCRing, "CSCRing"},
72  {align::AlignableCSCChamber, "CSCChamber"},
73  {align::AlignableCSCLayer, "CSCLayer"},
74  {align::AlignableMuon, "Muon"},
75 
76  {align::BeamSpot, "BeamSpot"},
77  {align::notfound, nullptr}};
78 
79  constexpr AlignableObjectId::entry entries_PhaseI[]{{align::invalid, "invalid"},
80  {align::AlignableDetUnit, "DetUnit"},
81  {align::AlignableDet, "Det"},
82 
83  {align::TPBModule, "P1PXBModule"},
84  {align::TPBLadder, "P1PXBLadder"},
85  {align::TPBLayer, "P1PXBLayer"},
86  {align::TPBHalfBarrel, "P1PXBHalfBarrel"},
87  {align::TPBBarrel, "P1PXBBarrel"},
88 
89  {align::TPEModule, "P1PXECModule"},
90  {align::TPEPanel, "P1PXECPanel"},
91  {align::TPEBlade, "P1PXECBlade"},
92  {align::TPEHalfDisk, "P1PXECHalfDisk"},
93  {align::TPEHalfCylinder, "P1PXECHalfCylinder"},
94  {align::TPEEndcap, "P1PXECEndcap"},
95 
96  {align::TIBModule, "TIBModule"},
97  {align::TIBString, "TIBString"},
98  {align::TIBSurface, "TIBSurface"},
99  {align::TIBHalfShell, "TIBHalfShell"},
100  {align::TIBLayer, "TIBLayer"},
101  {align::TIBHalfBarrel, "TIBHalfBarrel"},
102  {align::TIBBarrel, "TIBBarrel"},
103 
104  {align::TIDModule, "TIDModule"},
105  {align::TIDSide, "TIDSide"},
106  {align::TIDRing, "TIDRing"},
107  {align::TIDDisk, "TIDDisk"},
108  {align::TIDEndcap, "TIDEndcap"},
109 
110  {align::TOBModule, "TOBModule"},
111  {align::TOBRod, "TOBRod"},
112  {align::TOBLayer, "TOBLayer"},
113  {align::TOBHalfBarrel, "TOBHalfBarrel"},
114  {align::TOBBarrel, "TOBBarrel"},
115 
116  {align::TECModule, "TECModule"},
117  {align::TECRing, "TECRing"},
118  {align::TECPetal, "TECPetal"},
119  {align::TECSide, "TECSide"},
120  {align::TECDisk, "TECDisk"},
121  {align::TECEndcap, "TECEndcap"},
122 
123  {align::Pixel, "Pixel"},
124  {align::Strip, "Strip"},
125  {align::Tracker, "Tracker"},
126 
127  {align::AlignableDTBarrel, "DTBarrel"},
128  {align::AlignableDTWheel, "DTWheel"},
129  {align::AlignableDTStation, "DTStation"},
130  {align::AlignableDTChamber, "DTChamber"},
131  {align::AlignableDTSuperLayer, "DTSuperLayer"},
132  {align::AlignableDTLayer, "DTLayer"},
133  {align::AlignableCSCEndcap, "CSCEndcap"},
134  {align::AlignableCSCStation, "CSCStation"},
135  {align::AlignableCSCRing, "CSCRing"},
136  {align::AlignableCSCChamber, "CSCChamber"},
137  {align::AlignableCSCLayer, "CSCLayer"},
138  {align::AlignableGEMEndcap, "GEMEndcap"},
139  {align::AlignableGEMStation, "GEMStation"},
140  {align::AlignableGEMRing, "GEMRing"},
141  {align::AlignableGEMSuperChamber, "GEMSuperChamber"},
142  {align::AlignableGEMChamber, "GEMChamber"},
143  {align::AlignableGEMEtaPartition, "GEMEtaPartition"},
144  {align::AlignableMuon, "Muon"},
145 
146  {align::BeamSpot, "BeamSpot"},
147  {align::notfound, nullptr}};
148 
149  constexpr AlignableObjectId::entry entries_PhaseII[]{{align::invalid, "invalid"},
150  {align::AlignableDetUnit, "DetUnit"},
151  {align::AlignableDet, "Det"},
152 
153  {align::TPBModule, "P2PXBModule"},
154  {align::TPBLadder, "P2PXBLadder"},
155  {align::TPBLayer, "P2PXBLayer"},
156  {align::TPBHalfBarrel, "P2PXBHalfBarrel"},
157  {align::TPBBarrel, "P2PXBBarrel"},
158 
159  {align::TPEModule, "P2PXECModule"},
160  {align::TPEPanel, "P2PXECPanel"},
161  {align::TPEBlade, "P2PXECBlade"},
162  {align::TPEHalfDisk, "P2PXECHalfDisk"},
163  {align::TPEHalfCylinder, "P2PXECHalfCylinder"},
164  {align::TPEEndcap, "P2PXECEndcap"},
165 
166  // TIB doesn't exit in PhaseII
167  {align::TIBModule, "TIBModule-INVALID"},
168  {align::TIBString, "TIBString-INVALID"},
169  {align::TIBSurface, "TIBSurface-INVALID"},
170  {align::TIBHalfShell, "TIBHalfShell-INVALID"},
171  {align::TIBLayer, "TIBLayer-INVALID"},
172  {align::TIBHalfBarrel, "TIBHalfBarrel-INVALID"},
173  {align::TIBBarrel, "TIBBarrel-INVALID"},
174 
175  {align::TIDModule, "P2OTECModule"},
176  {align::TIDSide, "P2OTECSide"},
177  {align::TIDRing, "P2OTECRing"},
178  {align::TIDDisk, "P2OTECDisk"},
179  {align::TIDEndcap, "P2OTECEndcap"},
180 
181  {align::TOBModule, "P2OTBModule"},
182  {align::TOBRod, "P2OTBRod"},
183  {align::TOBLayer, "P2OTBLayer"},
184  {align::TOBHalfBarrel, "P2OTBHalfBarrel"},
185  {align::TOBBarrel, "P2OTBBarrel"},
186 
187  // TEC doesn't exit in PhaseII
188  {align::TECModule, "TECModule-INVALID"},
189  {align::TECRing, "TECRing-INVALID"},
190  {align::TECPetal, "TECPetal-INVALID"},
191  {align::TECSide, "TECSide-INVALID"},
192  {align::TECDisk, "TECDisk-INVALID"},
193  {align::TECEndcap, "TECEndcap-INVALID"},
194 
195  {align::Pixel, "Pixel"},
196  {align::Strip, "Strip"},
197  {align::Tracker, "Tracker"},
198 
199  {align::AlignableDTBarrel, "DTBarrel"},
200  {align::AlignableDTWheel, "DTWheel"},
201  {align::AlignableDTStation, "DTStation"},
202  {align::AlignableDTChamber, "DTChamber"},
203  {align::AlignableDTSuperLayer, "DTSuperLayer"},
204  {align::AlignableDTLayer, "DTLayer"},
205  {align::AlignableCSCEndcap, "CSCEndcap"},
206  {align::AlignableCSCStation, "CSCStation"},
207  {align::AlignableCSCRing, "CSCRing"},
208  {align::AlignableCSCChamber, "CSCChamber"},
209  {align::AlignableCSCLayer, "CSCLayer"},
210  {align::AlignableGEMEndcap, "GEMEndcap"},
211  {align::AlignableGEMStation, "GEMStation"},
212  {align::AlignableGEMRing, "GEMRing"},
213  {align::AlignableGEMSuperChamber, "GEMSuperChamber"},
214  {align::AlignableGEMChamber, "GEMChamber"},
215  {align::AlignableGEMEtaPartition, "GEMEtaPartition"},
216  {align::AlignableMuon, "Muon"},
217 
218  {align::BeamSpot, "BeamSpot"},
219  {align::notfound, nullptr}};
220 
221  constexpr bool same(char const *x, char const *y) { return !*x && !*y ? true : (*x == *y && same(x + 1, y + 1)); }
222 
223  constexpr char const *objectIdToString(align::StructureType type, AlignableObjectId::entry const *entries) {
224  return !entries->name ? nullptr : entries->type == type ? entries->name : objectIdToString(type, entries + 1);
225  }
226 
227  constexpr enum align::StructureType stringToObjectId(char const *name, AlignableObjectId::entry const *entries) {
228  return !entries->name ? align::invalid
229  : same(entries->name, name) ? entries->type : stringToObjectId(name, entries + 1);
230  }
231 } // namespace
232 
233 //_____________________________________________________________________________
235  switch (geometry) {
237  entries_ = entries_RunI;
238  break;
240  entries_ = entries_PhaseI;
241  break;
243  entries_ = entries_PhaseII;
244  break;
246  entries_ = entries_RunI;
247  break;
249  entries_ = nullptr;
250  break;
251  }
252  if (!entries_) {
253  throw cms::Exception("LogicError") << "@SUB=AlignableObjectId::ctor\n"
254  << "trying to create AlignableObjectId with unspecified geometry";
255  }
256 }
257 
258 //_____________________________________________________________________________
260  const DTGeometry *muonDt,
261  const CSCGeometry *muonCsc,
262  const GEMGeometry *muonGem)
263  : AlignableObjectId(commonGeometry(trackerGeometry(tracker), muonGeometry(muonDt, muonCsc, muonGem))) {}
264 
265 //_____________________________________________________________________________
267 
268 //_____________________________________________________________________________
270 
271 //_____________________________________________________________________________
273  const char *result = objectIdToString(type, entries_);
274 
275  if (result == nullptr) {
276  throw cms::Exception("AlignableObjectIdError") << "Unknown alignableObjectId " << type;
277  }
278 
279  return result;
280 }
281 
282 //_____________________________________________________________________________
284  auto result = stringToObjectId(name, entries_);
285  if (result == -1) {
286  throw cms::Exception("AlignableObjectIdError") << "Unknown alignableObjectId " << name;
287  }
288 
289  return result;
290 }
291 
292 //______________________________________________________________________________
294  if (!geometry)
295  return Geometry::General;
296 
297  if (geometry->isThere(GeomDetEnumerators::P2PXEC)) {
298  // use structure-type <-> name translation for PhaseII geometry
299  return Geometry::PhaseII;
300 
301  } else if (geometry->isThere(GeomDetEnumerators::P1PXEC)) {
302  // use structure-type <-> name translation for PhaseI geometry
303  return Geometry::PhaseI;
304 
305  } else if (geometry->isThere(GeomDetEnumerators::PixelEndcap)) {
306  // use structure-type <-> name translation for RunI geometry
307  return Geometry::RunI;
308 
309  } else {
310  throw cms::Exception("AlignableObjectIdError") << "@SUB=AlignableObjectId::trackerGeometry\n"
311  << "unknown version of TrackerGeometry";
312  }
313 }
314 
316  const CSCGeometry *,
317  const GEMGeometry *) {
318  // muon alignment structure types are identical for all kinds of geometries
319  return Geometry::General;
320 }
321 
323  if (first == Geometry::General)
324  return second;
325  if (second == Geometry::General)
326  return first;
327  if (first == second)
328  return first;
329 
330  throw cms::Exception("AlignableObjectIdError") << "@SUB=AlignableObjectId::commonGeometry\n"
331  << "impossible to find common geometry because the two geometries are "
332  << "different and none of them is 'General'";
333 }
334 
336  const AlignableObjectId &second) {
337  return AlignableObjectId{commonGeometry(first.geometry(), second.geometry())};
338 }
DTGeometry
Definition: DTGeometry.h:28
AlignableObjectId
Allows conversion between type and name, and vice-versa.
Definition: AlignableObjectId.h:13
align::TPBHalfBarrel
Definition: StructureType.h:26
AlignableObjectId::Geometry::RunI
align::TPEHalfDisk
Definition: StructureType.h:33
AlignableObjectId::typeToName
std::string typeToName(align::StructureType type) const
Convert type to name.
Definition: AlignableObjectId.cc:269
align::TPBBarrel
Definition: StructureType.h:27
align::TPEBlade
Definition: StructureType.h:32
TrackerGeometry.h
align::TECEndcap
Definition: StructureType.h:66
align::BeamSpot
Definition: StructureType.h:95
align::TOBBarrel
Definition: StructureType.h:58
align::TPBLayer
Definition: StructureType.h:25
geometry
Definition: geometry.py:1
align::TIBSurface
Definition: StructureType.h:40
align::TOBModule
Definition: StructureType.h:54
align::AlignableGEMChamber
Definition: StructureType.h:88
align::TPEEndcap
Definition: StructureType.h:35
align::TIBModule
Definition: StructureType.h:38
AlignableObjectId::commonObjectIdProvider
static AlignableObjectId commonObjectIdProvider(const AlignableObjectId &, const AlignableObjectId &)
Definition: AlignableObjectId.cc:335
align::TIBString
Definition: StructureType.h:39
align::notfound
Definition: StructureType.h:17
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
AlignableObjectId::Geometry::PhaseII
align::AlignableCSCStation
Definition: StructureType.h:80
AlignableObjectId::Geometry::General
AlignableObjectId::muonGeometry
static Geometry muonGeometry(const DTGeometry *, const CSCGeometry *, const GEMGeometry *)
Definition: AlignableObjectId.cc:315
align::AlignableDTChamber
Definition: StructureType.h:76
align::TOBLayer
Definition: StructureType.h:56
align::Tracker
Definition: StructureType.h:70
AlignableObjectId::nameToType
align::StructureType nameToType(const std::string &name) const
Convert name to type.
Definition: AlignableObjectId.cc:266
CSCGeometry
Definition: CSCGeometry.h:24
align::AlignableMuon
Definition: StructureType.h:90
AlignableObjectId::AlignableObjectId
AlignableObjectId(Geometry)
AlignableObjectId::Geometry::Unspecified
align::AlignableCSCLayer
Definition: StructureType.h:83
AlignableObjectId::Geometry
Geometry
Definition: AlignableObjectId.h:16
align::AlignableGEMRing
Definition: StructureType.h:86
align::AlignableDTSuperLayer
Definition: StructureType.h:77
align::AlignableCSCEndcap
Definition: StructureType.h:79
GeomDetEnumerators::P1PXEC
Definition: GeomDetEnumerators.h:26
align::AlignableGEMStation
Definition: StructureType.h:85
align::TECSide
Definition: StructureType.h:64
align::TOBHalfBarrel
Definition: StructureType.h:57
align::TIBLayer
Definition: StructureType.h:42
align::TIBHalfBarrel
Definition: StructureType.h:43
align::TIDRing
Definition: StructureType.h:49
align::TPBLadder
Definition: StructureType.h:24
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:112
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
align::StructureType
StructureType
Definition: StructureType.h:16
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
funct::true
true
Definition: Factorize.h:173
align::AlignableGEMEndcap
Definition: StructureType.h:84
align::AlignableDetUnit
Definition: StructureType.h:19
align::AlignableDTStation
Definition: StructureType.h:75
align::AlignableGEMEtaPartition
Definition: StructureType.h:89
align::invalid
Definition: StructureType.h:18
align::TPEHalfCylinder
Definition: StructureType.h:34
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
AlignableObjectId::entry::type
align::StructureType type
Definition: AlignableObjectId.cc:9
AlignableObjectId::entry::name
const char * name
Definition: AlignableObjectId.cc:10
AlignableObjectId::entries_
const entry * entries_
Definition: AlignableObjectId.h:49
align::TIDModule
Definition: StructureType.h:47
align::AlignableCSCChamber
Definition: StructureType.h:82
align::TIDEndcap
Definition: StructureType.h:51
align::TECPetal
Definition: StructureType.h:63
AlignableObjectId::entry
Definition: AlignableObjectId.cc:8
align::AlignableDTBarrel
Definition: StructureType.h:73
AlignableObjectId.h
align::AlignableDet
Definition: StructureType.h:20
align::TIDDisk
Definition: StructureType.h:50
align::AlignableDTWheel
Definition: StructureType.h:74
align::AlignableGEMSuperChamber
Definition: StructureType.h:87
align::TPEModule
Definition: StructureType.h:30
align::TIBBarrel
Definition: StructureType.h:44
Exception
Definition: hltDiff.cc:245
genVertex_cff.x
x
Definition: genVertex_cff.py:12
align::Strip
Definition: StructureType.h:69
detailsBasic3DVector::y
float float y
Definition: extBasic3DVector.h:14
align::AlignableDTLayer
Definition: StructureType.h:78
AlignableObjectId::stringToId
align::StructureType stringToId(const char *) const
Definition: AlignableObjectId.cc:283
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
Exception.h
align::Pixel
Definition: StructureType.h:68
GeomDetEnumerators::PixelEndcap
Definition: GeomDetEnumerators.h:12
AlignableObjectId::idToString
const char * idToString(align::StructureType type) const
Definition: AlignableObjectId.cc:272
GEMGeometry
Definition: GEMGeometry.h:24
mps_fire.result
result
Definition: mps_fire.py:311
align::TECRing
Definition: StructureType.h:62
AlignableObjectId::commonGeometry
static Geometry commonGeometry(Geometry, Geometry)
Definition: AlignableObjectId.cc:322
align::TIBHalfShell
Definition: StructureType.h:41
align::AlignableCSCRing
Definition: StructureType.h:81
align::TECDisk
Definition: StructureType.h:65
AlignableObjectId::Geometry::PhaseI
AlignableObjectId::trackerGeometry
static Geometry trackerGeometry(const TrackerGeometry *)
Definition: AlignableObjectId.cc:293
Geometry
Class Geometry Contains vector for fit parameters (mean, sigma, etc.) obtained from multiple IOVs See...
Definition: DMRtrends.cc:182
align::TIDSide
Definition: StructureType.h:48
align::TECModule
Definition: StructureType.h:61
align::TOBRod
Definition: StructureType.h:55
GeomDetEnumerators::P2PXEC
Definition: GeomDetEnumerators.h:28
TrackerGeometry
Definition: TrackerGeometry.h:14
align::TPBModule
Definition: StructureType.h:23
align::TPEPanel
Definition: StructureType.h:31