CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CmsTrackerDetIdBuilder.cc
Go to the documentation of this file.
3 
5 
7 
8 #include <iostream>
9 #include <fstream>
10 #include <sstream>
11 #include <string>
12 #include <bitset>
13 
14 
16 }
17 
19 
21  tracker->setGeographicalID(t);
22  iterate(tracker,0,tracker->geographicalID().rawId());
23 
24  return tracker;
25 }
26 
27 void CmsTrackerDetIdBuilder::iterate(GeometricDet const * in, int level, unsigned int ID){
28  std::bitset<32> binary_ID(ID);
29 
30  // SubDetector (useful to know fron now on, valid only after level 0, where SubDetector is assigned)
31  uint32_t mask = (7<<25);
32  uint32_t iSubDet = ID & mask;
33  iSubDet = iSubDet >> 25;
34  //
35 
36  switch (level) {
37 
38  // level 0
39  case 0:
40  {
41 
42  for(uint32_t i=0; i<(in)->components().size();i++) {
43  uint32_t jSubDet = ((in)->components())[i]->geographicalID().rawId();
44  uint32_t temp = ID;
45  temp |= (jSubDet<<25);
46  ((in)->components())[i]->setGeographicalID(temp);
47 
48  switch (jSubDet) {
49 
50  // PXF
51  case 2:
52  {
53  // SubDetector Side start bit is 23 [3 unused and Side length is 2 bit]
54  if( ((in)->components())[i]->translation().z()<0. ) {
55  temp |= (1<<23); // PXF-
56  } else {
57  temp |= (2<<23); // PXF+
58  }
59  break;
60  }
61 
62  // TID
63  case 4:
64  {
65  temp|= (0<<15); // SubDetector Side start bit is 13 [10 unused and Side length is 2 bit]
66  if( (((in)->components())[i])->components()[0]->translation().z()<0. ) {
67  temp |= (1<<13); // TIDB = TID-
68  } else {
69  temp |= (2<<13); // TIDF = TID+
70  }
71  break;
72  }
73 
74  // TEC
75  case 6:
76  {
77  temp|= (0<<20); // SubDetector Side start bit is 18 [5 unused and Side length is 2 bit]
78  if( ((in)->components())[i]->translation().z()<0. ) {
79  temp |= (1<<18); // TEC-
80  } else {
81  temp |= (2<<18); // TEC+
82  }
83  break;
84  }
85 
86  // PXB, TIB, TOB (barrel)
87  default:
88  {
89  // do nothing
90  }
91 
92  // SubDetector switch ends
93  }
94 
95  ((in)->components())[i]->setGeographicalID(DetId(temp));
96 
97  // next level
98  iterate(((in)->components())[i],level+1,((in)->components())[i]->geographicalID().rawId());
99  }
100  break;
101  }
102 
103  // level 1
104  case 1: {
105 
106  for (uint32_t i=0;i<(in)->components().size();i++) {
107  uint32_t temp = ID;
108 
109  switch (iSubDet) {
110 
111  // PXB
112  case 1:
113  {
114  temp |= (((in)->components())[i]->geographicalID().rawId()<<16); // Layer Number start bit is 16 [5 unused]
115  break;
116  }
117 
118  // PXF
119  case 2:
120  {
121  temp |= (((in)->components())[i]->geographicalID().rawId()<<16); // Disk Number start bit is 16
122  break;
123  }
124 
125  // TIB
126  case 3:
127  {
128  temp |= (((in)->components())[i]->geographicalID().rawId()<<14); // Layer Number start bit is 14 [8 unused]
129  break;
130  }
131 
132  // TID
133  case 4:
134  {
135  temp |= (((in)->components())[i]->geographicalID().rawId()<<11); // Disk (Wheel) Number start bit is 11
136  break;
137  }
138 
139  // TOB
140  case 5:
141  {
142  temp |= (((in)->components())[i]->geographicalID().rawId()<<14); // Layer Number start bit is 14 [8 unused]
143  break;
144  }
145 
146  // TEC
147  case 6:
148  {
149  temp |= (((in)->components())[i]->geographicalID().rawId()<<14); // Wheel Number start bit is 14
150  break;
151  }
152 
153  // the rest
154  default:
155  {
156  // do nothing
157  }
158 
159  // SubDetector switch ends
160  }
161 
162  ((in)->components())[i]->setGeographicalID(temp);
163 
164  // next level
165  iterate(((in)->components())[i],level+1,((in)->components())[i]->geographicalID().rawId());
166  }
167 
168  break;
169  }
170 
171  // level 2
172  case 2: {
173 
174  for (uint32_t i=0;i<(in)->components().size();i++) {
175 
176  switch (iSubDet) {
177 
178  // PXB
179  case 1:
180  {
181  uint32_t temp = ID;
182  // Ladder Starting bit = 2 (last unused) + 6 (Module Number) = 8
183  temp |= (((in)->components())[i]->geographicalID().rawId()<<8);
184  ((in)->components())[i]->setGeographicalID(temp);
185  break;
186  }
187 
188  // PXF
189  case 2:
190  {
191  uint32_t temp = ID;
192  // Blade Starting bit = 1 (last unused) + 5 (Module Number) + 2 (Plaquette part) = 8
193  temp |= (((in)->components())[i]->geographicalID().rawId()<<8);
194  ((in)->components())[i]->setGeographicalID(temp);
195  break;
196  }
197 
198  // TIB
199  case 3:
200  {
201  uint32_t temp = ID;
202  // Side+Part+String Starting bit = 2 (Module Type) + 2 (Module Number) = 4
203  temp |= (((in)->components())[i]->geographicalID().rawId()<<4);
204  ((in)->components())[i]->setGeographicalID(temp);
205  break;
206  }
207 
208  // TID
209  case 4:
210  {
211  uint32_t temp = ID;
212  // Ring+Part Starting bit = 2 (Module Type) + 5 (Module Number) + 2 (Disk Part)= 9
213  temp |= (((in)->components())[i]->geographicalID().rawId()<<9);
214  ((in)->components())[i]->setGeographicalID(DetId(temp));
215  break;
216  }
217 
218  // TOB
219  case 5:
220  {
221  uint32_t temp = ID;
222  // Side+Rod Starting bit = 2 (Module Type) + 3 (Module Number) = 5
223  temp |= (((in)->components())[i]->geographicalID().rawId()<<5);
224  ((in)->components())[i]->setGeographicalID(temp);
225  break;
226  }
227 
228  // TEC
229  case 6:
230  {
231  uint32_t temp = ID;
232  // Petal+Part Starting bit = 2 (Module Type) + 3 (Module Number) + 3 (Ring Number) = 8
233  temp |= (((in)->components())[i]->geographicalID().rawId()<<8);
234  ((in)->components())[i]->setGeographicalID(temp);
235  break;
236  }
237 
238  // the rest
239  default:
240  {
241  // do nothing
242  }
243 
244  // SubDetector switch ends
245  }
246 
247  // next level
248  iterate(((in)->components())[i],level+1,((in)->components())[i]->geographicalID().rawId());
249  }
250 
251  break;
252  }
253 
254  // level 3
255  case 3:
256  {
257  for (uint32_t i=0;i<(in)->components().size();i++) {
258 
259  switch (iSubDet) {
260 
261  // TEC
262  case 6:
263  {
264  // Ring Starting bit = 2 (Module Type) + 3 (Module Number)
265  uint32_t temp = ID;
266  temp |= (((in)->components())[i]->geographicalID().rawId()<<5);
267  ((in)->components())[i]->setGeographicalID(temp);
268  break;
269  }
270 
271  // the others but TEC
272  default:
273  {
274  uint32_t temp = ID;
275  temp |= (((in)->components())[i]->geographicalID().rawId()<<2); // Starting bit = 2 (Module Type)
276  ((in)->components())[i]->setGeographicalID(temp);
277  }
278 
279  // SubDetector switch ends
280  }
281 
282  // next level
283  iterate(((in)->components())[i],level+1,((in)->components())[i]->geographicalID().rawId());
284 
285  }
286 
287  break;
288  }
289 
290  // level 4
291  case 4:
292  {
293 
294  for (uint32_t i=0;i<(in)->components().size();i++) {
295 
296  switch (iSubDet) {
297 
298  // TEC
299  case 6:
300  {
301  // Module Number bit = 2 (Module Type)
302  uint32_t temp = ID;
303  temp |= (((in)->components())[i]->geographicalID().rawId()<<2);
304  ((in)->components())[i]->setGeographicalID(temp);
305  // next level
306  iterate(((in)->components())[i],level+1,((in)->components())[i]->geographicalID().rawId());
307  break;
308  }
309 
310  // the others stop here!
311  default:
312  {
313  for (uint32_t i=0;i<(in)->components().size();i++) {
314  uint32_t temp = ID;
315  temp |= (((in)->components())[i]->geographicalID().rawId());
316  ((in)->components())[i]->setGeographicalID(temp);
317  }
318  }
319 
320  // SubDetector switch ends
321  }
322 
323  }
324 
325  break;
326  }
327 
328  // level 5
329  case 5:
330  {
331  // TEC Module Type (only TEC arrives here)
332  for (uint32_t i=0;i<(in)->components().size();i++) {
333  uint32_t temp = ID;
334  temp |= (((in)->components())[i]->geographicalID().rawId());
335  ((in)->components())[i]->setGeographicalID(temp);
336  }
337  break;
338  }
339 
340  // throw exception
341  default:
342  {
343  cms::Exception("LogicError") <<" CmsTrackerDetIdBuilder invalid level "<< level;
344  }
345 
346  // level switch ends
347  }
348 
349  return;
350 
351 }
352 
int i
Definition: DBlmapReader.cc:9
void setGeographicalID(DetId id) const
Definition: GeometricDet.h:74
uint32_t ID
Definition: Definitions.h:26
DetId geographicalID() const
Definition: GeometricDet.h:195
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
void iterate(GeometricDet const *, int, unsigned int)
GeometricDet * buildId(GeometricDet *)
Definition: DetId.h:20
tuple level
Definition: testEve_cfg.py:34