test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
AlignableObjectId.cc
Go to the documentation of this file.
2 
4 #include <algorithm>
5 
6 using namespace align;
7 
8 namespace {
9  struct entry {
11  const char* name;
12  };
13 
14  entry entries_RunI[] {
15  { invalid , "invalid"},
16  { AlignableDetUnit, "DetUnit"},
17  { AlignableDet , "Det"},
18 
19  {TPBModule , "TPBModule"},
20  {TPBLadder , "TPBLadder"},
21  {TPBLayer , "TPBLayer"},
22  {TPBHalfBarrel , "TPBHalfBarrel"},
23  {TPBBarrel , "TPBBarrel"},
24 
25  {TPEModule , "TPEModule"},
26  {TPEPanel , "TPEPanel"},
27  {TPEBlade , "TPEBlade"},
28  {TPEHalfDisk , "TPEHalfDisk"},
29  {TPEHalfCylinder, "TPEHalfCylinder"},
30  {TPEEndcap , "TPEEndcap"},
31 
32  {TIBModule , "TIBModule"},
33  {TIBString , "TIBString"},
34  {TIBSurface , "TIBSurface"},
35  {TIBHalfShell , "TIBHalfShell"},
36  {TIBLayer , "TIBLayer"},
37  {TIBHalfBarrel , "TIBHalfBarrel"},
38  {TIBBarrel , "TIBBarrel"},
39 
40  {TIDModule , "TIDModule"},
41  {TIDSide , "TIDSide"},
42  {TIDRing , "TIDRing"},
43  {TIDDisk , "TIDDisk"},
44  {TIDEndcap , "TIDEndcap"},
45 
46  {TOBModule , "TOBModule"},
47  {TOBRod , "TOBRod"},
48  {TOBLayer , "TOBLayer"},
49  {TOBHalfBarrel , "TOBHalfBarrel"},
50  {TOBBarrel , "TOBBarrel"},
51 
52  {TECModule , "TECModule"},
53  {TECRing , "TECRing"},
54  {TECPetal , "TECPetal"},
55  {TECSide , "TECSide"},
56  {TECDisk , "TECDisk"},
57  {TECEndcap , "TECEndcap"},
58 
59  {Pixel , "Pixel"},
60  {Strip , "Strip"},
61  {Tracker , "Tracker"},
62 
63  { AlignableDTBarrel , "DTBarrel"},
64  { AlignableDTWheel , "DTWheel"},
65  { AlignableDTStation , "DTStation"},
66  { AlignableDTChamber , "DTChamber"},
67  { AlignableDTSuperLayer, "DTSuperLayer"},
68  { AlignableDTLayer , "DTLayer"},
69  { AlignableCSCEndcap , "CSCEndcap"},
70  { AlignableCSCStation , "CSCStation"},
71  { AlignableCSCRing , "CSCRing"},
72  { AlignableCSCChamber , "CSCChamber"},
73  { AlignableCSCLayer , "CSCLayer"},
74  { AlignableMuon , "Muon"},
75 
76  { BeamSpot, "BeamSpot"},
77  {notfound, 0}
78  };
79 
80  entry entries_PhaseI[] {
81  { invalid , "invalid"},
82  { AlignableDetUnit, "DetUnit"},
83  { AlignableDet , "Det"},
84 
85  {TPBModule , "P1PXBModule"},
86  {TPBLadder , "P1PXBLadder"},
87  {TPBLayer , "P1PXBLayer"},
88  {TPBHalfBarrel , "P1PXBHalfBarrel"},
89  {TPBBarrel , "P1PXBBarrel"},
90 
91  {TPEModule , "P1PXECModule"},
92  {TPEPanel , "P1PXECPanel"},
93  {TPEBlade , "P1PXECBlade"},
94  {TPEHalfDisk , "P1PXECHalfDisk"},
95  {TPEHalfCylinder, "P1PXECHalfCylinder"},
96  {TPEEndcap , "P1PXECEndcap"},
97 
98  {TIBModule , "TIBModule"},
99  {TIBString , "TIBString"},
100  {TIBSurface , "TIBSurface"},
101  {TIBHalfShell , "TIBHalfShell"},
102  {TIBLayer , "TIBLayer"},
103  {TIBHalfBarrel , "TIBHalfBarrel"},
104  {TIBBarrel , "TIBBarrel"},
105 
106  {TIDModule , "TIDModule"},
107  {TIDSide , "TIDSide"},
108  {TIDRing , "TIDRing"},
109  {TIDDisk , "TIDDisk"},
110  {TIDEndcap , "TIDEndcap"},
111 
112  {TOBModule , "TOBModule"},
113  {TOBRod , "TOBRod"},
114  {TOBLayer , "TOBLayer"},
115  {TOBHalfBarrel , "TOBHalfBarrel"},
116  {TOBBarrel , "TOBBarrel"},
117 
118  {TECModule , "TECModule"},
119  {TECRing , "TECRing"},
120  {TECPetal , "TECPetal"},
121  {TECSide , "TECSide"},
122  {TECDisk , "TECDisk"},
123  {TECEndcap , "TECEndcap"},
124 
125  {Pixel , "Pixel"},
126  {Strip , "Strip"},
127  {Tracker , "Tracker"},
128 
129  { AlignableDTBarrel , "DTBarrel"},
130  { AlignableDTWheel , "DTWheel"},
131  { AlignableDTStation , "DTStation"},
132  { AlignableDTChamber , "DTChamber"},
133  { AlignableDTSuperLayer, "DTSuperLayer"},
134  { AlignableDTLayer , "DTLayer"},
135  { AlignableCSCEndcap , "CSCEndcap"},
136  { AlignableCSCStation , "CSCStation"},
137  { AlignableCSCRing , "CSCRing"},
138  { AlignableCSCChamber , "CSCChamber"},
139  { AlignableCSCLayer , "CSCLayer"},
140  { AlignableMuon , "Muon"},
141 
142  { BeamSpot, "BeamSpot"},
143  {notfound, 0}
144  };
145 
146  entry entries_PhaseII[] {
147  { invalid , "invalid"},
148  { AlignableDetUnit, "DetUnit"},
149  { AlignableDet , "Det"},
150 
151  {TPBModule , "P1PXBModule"},
152  {TPBLadder , "P1PXBLadder"},
153  {TPBLayer , "P1PXBLayer"},
154  {TPBHalfBarrel , "P1PXBHalfBarrel"},
155  {TPBBarrel , "P1PXBBarrel"},
156 
157  {TPEModule , "P2PXECModule"},
158  {TPEPanel , "P2PXECPanel"},
159  {TPEBlade , "P2PXECBlade"},
160  {TPEHalfDisk , "P2PXECHalfDisk"},
161  {TPEHalfCylinder, "P2PXECHalfCylinder"},
162  {TPEEndcap , "P2PXECEndcap"},
163 
164  // TIB doesn't exit in PhaseII
165  {TIBModule , "TIBModule-INVALID"},
166  {TIBString , "TIBString-INVALID"},
167  {TIBSurface , "TIBSurface-INVALID"},
168  {TIBHalfShell , "TIBHalfShell-INVALID"},
169  {TIBLayer , "TIBLayer-INVALID"},
170  {TIBHalfBarrel , "TIBHalfBarrel-INVALID"},
171  {TIBBarrel , "TIBBarrel-INVALID"},
172 
173  {TIDModule , "P2OTECModule"},
174  {TIDSide , "P2OTECSide"},
175  {TIDRing , "P2OTECRing"},
176  {TIDDisk , "P2OTECDisk"},
177  {TIDEndcap , "P2OTECEndcap"},
178 
179  {TOBModule , "P2OTBModule"},
180  {TOBRod , "P2OTBRod"},
181  {TOBLayer , "P2OTBLayer"},
182  {TOBHalfBarrel , "P2OTBHalfBarrel"},
183  {TOBBarrel , "P2OTBBarrel"},
184 
185  // TEC doesn't exit in PhaseII
186  {TECModule , "TECModule-INVALID"},
187  {TECRing , "TECRing-INVALID"},
188  {TECPetal , "TECPetal-INVALID"},
189  {TECSide , "TECSide-INVALID"},
190  {TECDisk , "TECDisk-INVALID"},
191  {TECEndcap , "TECEndcap-INVALID"},
192 
193  {Pixel , "Pixel"},
194  {Strip , "Strip"},
195  {Tracker , "Tracker"},
196 
197  { AlignableDTBarrel , "DTBarrel"},
198  { AlignableDTWheel , "DTWheel"},
199  { AlignableDTStation , "DTStation"},
200  { AlignableDTChamber , "DTChamber"},
201  { AlignableDTSuperLayer, "DTSuperLayer"},
202  { AlignableDTLayer , "DTLayer"},
203  { AlignableCSCEndcap , "CSCEndcap"},
204  { AlignableCSCStation , "CSCStation"},
205  { AlignableCSCRing , "CSCRing"},
206  { AlignableCSCChamber , "CSCChamber"},
207  { AlignableCSCLayer , "CSCLayer"},
208  { AlignableMuon , "Muon"},
209 
210  { BeamSpot, "BeamSpot"},
211  {notfound, 0}
212  };
213 
214  // This pointer points per default to the structure-names of RunI geometry
215  // version. If an upgraded geometry is loaded, one can reset the pointer with
216  // help of the isPhaseIGeometry() below.
217  entry* entries = entries_RunI;
218 
219 
220 
221  constexpr bool same(char const *x, char const *y) {
222  return !*x && !*y ? true : (*x == *y && same(x+1, y+1));
223  }
224 
225  constexpr char const *objectIdToString(StructureType type, entry const *entries) {
226  return !entries->name ? 0 :
227  entries->type == type ? entries->name :
228  objectIdToString(type, entries+1);
229  }
230 
231  constexpr enum StructureType stringToObjectId(char const *name, entry const *entries) {
232  return !entries->name ? invalid :
233  same(entries->name, name) ? entries->type :
234  stringToObjectId(name, entries+1);
235  }
236 }
237 
238 
239 
240 //_____________________________________________________________________________
243  entries = entries_RunI;
244 }
245 
246 //_____________________________________________________________________________
249  entries = entries_PhaseI;
250 }
251 
252 //_____________________________________________________________________________
255  entries = entries_PhaseII;
256 }
257 
258 //_____________________________________________________________________________
261 {
262  return stringToId(name.c_str());
263 }
264 
265 //_____________________________________________________________________________
267 {
268  return idToString(type);
269 }
270 
271 //_____________________________________________________________________________
273 {
274  const char *result = objectIdToString(type, entries);
275 
276  if (result == 0)
277  {
278  throw cms::Exception("AlignableObjectIdError")
279  << "Unknown alignableObjectId " << type;
280  }
281 
282  return result;
283 }
284 
285 //_____________________________________________________________________________
287 {
288  StructureType result = stringToObjectId(name, entries);
289  if (result == -1)
290  {
291  throw cms::Exception("AlignableObjectIdError")
292  << "Unknown alignableObjectId " << name;
293  }
294 
295  return result;
296 }
type
Definition: HCALResponse.h:21
static void isRunIGeometry()
sets entries-pointer to names of RunI geometry
#define constexpr
tuple result
Definition: mps_fire.py:84
static std::string typeToName(align::StructureType type)
Convert type to name.
static align::StructureType stringToId(const char *)
static void isPhaseIIGeometry()
sets entries-pointer to names of PhaseII geometry
static align::StructureType nameToType(const std::string &name)
Convert name to type.
list entry
Definition: mps_splice.py:62
static void isPhaseIGeometry()
sets entries-pointer to names of PhaseI geometry
static const char * idToString(align::StructureType type)