CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MEEBGeom.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <stdlib.h>
3 #include <string>
4 #include <assert.h>
5 using namespace std;
6 
9 
10 #include <TGraph.h>
11 
12 //GHM ClassImp(MEEBGeom)
13 
14 int
16 {
17  int iz=1;
18  if( ieta<0 ) iz=-1;
19  ieta *= iz;
20  assert( ieta>0 && ieta<=85 );
21  if( iphi<0 ) iphi+=360;
22  assert( iphi>0 && iphi<=360 );
23  return iz;
24 }
25 
26 int
28 {
29  int iz=1;
30  if( ieta<0 ) iz=-1;
31  ieta *= iz;
32  assert( ieta>0 && ieta<=85 );
33 
34  // int iphi_ = iphi+10;
35  int iphi_ = iphi;
36  if( iphi_>360 ) iphi_-=360;
37  assert( iphi_>0 && iphi_<=360 );
38 
39  int ism = (iphi_-1)/20 + 1;
40  assert( ism>=1 && ism<=18 );
41  // if( iz==1 ) ism += 18;
42  if( iz==-1 ) ism += 18;
43 
44  return ism;
45 }
46 
47 int
49 {
50  int ism = sm( ieta, iphi );
51  return dccFromSm( ism );
52 }
53 
54 int
56 {
57  assert( ism>=1 && ism<=36 );
58  int iz=1;
59  if( ism>18 ) iz=-1;
60  if( iz==-1 ) ism-=18;
61  assert( ism>=1 && ism<=18 );
62  int idcc = 9+ism;
63  if( iz==+1 ) idcc+=18;
64  return idcc;
65 }
66 
67 int
69 {
70  if( idcc>600 ) idcc-=600; // also works with FEDids
71  assert( idcc>=10 && idcc<=45 );
72  int ism=idcc-9;
73  if( ism>18 ) ism-=18;
74  else ism+=18;
75  return ism;
76 }
77 
78 TString
80 {
81  assert( ism>=1 && ism<=36 );
82  TString out = "EB+";
83  if( ism>18 )
84  {
85  out = "EB-";
86  ism -= 18;
87  }
88  out += ism;
89  return out;
90 }
91 
92 int
94 {
95  std::pair<EBLocalCoord,EBLocalCoord> ixy = localCoord( ieta, iphi );
96  return lm_channel( ixy.first/5, ixy.second/5 );
97 }
98 
99 int
101 {
102  std::pair<EBLocalCoord,EBLocalCoord> ixy = localCoord( ieta, iphi );
103  return tt_channel( ixy.first/5, ixy.second/5 );
104 }
105 
106 int
108 {
109  std::pair<EBLocalCoord,EBLocalCoord> ixy = localCoord( ieta, iphi );
110  return crystal_channel( ixy.first, ixy.second );
111 }
112 
113 int
115 {
116  int ilmmod = lmmod( ieta, iphi );
117  return (ilmmod%2==0)?1:0;
118 }
119 
120 int
122 {
123  int idcc = dcc( ieta, iphi );
124  int ism = idcc-9;
125  int iside = side( ieta, iphi );
126  int ilmr = 1 + 2*(ism-1) + iside;
127  return ilmr;
128 }
129 
130 std::pair< MEEBGeom::EBLocalCoord, MEEBGeom::EBLocalCoord >
132 {
133  int iz=1;
134  if( ieta<0 ) iz=-1;
135  ieta *= iz;
136  assert( ieta>0 && ieta<=85 );
137 
138  // int iphi_ = iphi+10;
139  int iphi_ = iphi;
140  if( iphi_>360 ) iphi_-=360;
141  assert( iphi_>0 && iphi_<=360 );
142 
143  int ix = ieta-1;
144 
145  int iy = (iphi_-1)%20;
146  if( iz==-1 ) iy = 19-iy;
147  // if( iz==1 ) iy = 19-iy;
148 
149  return std::pair< EBLocalCoord, EBLocalCoord >(ix,iy);
150 }
151 
152 std::pair< MEEBGeom::EBLocalCoord, MEEBGeom::EBLocalCoord >
154 {
155  assert( icr>=1 && icr<=1700 );
156  int ix = (icr-1)/20;
157  int iy = 19 - (icr-1)%20;
158  return std::pair< EBLocalCoord, EBLocalCoord >(ix,iy);
159 }
160 
161 std::pair< MEEBGeom::EBGlobalCoord, MEEBGeom::EBGlobalCoord >
163 {
164  assert( ism>=1 && ism<=36 );
165  assert( ix>=0 && ix<85 );
166  assert( iy>=0 && iy<20 );
167  // int iz=-1;
168  int iz=1;
169  if( ism>18 )
170  {
171  iz=-1;
172  ism -= 18;
173  }
174  if( iz==-1 ) iy = 19-iy;
175  // if( iz==1 ) iy = 19-iy;
176 
177  int ieta = ix+1;
178  ieta *= iz;
179  // int iphi = -9 + iy + 20*(ism-1);
180  int iphi = 1 + iy + 20*(ism-1);
181 
182  return std::pair< EBGlobalCoord, EBGlobalCoord >(ieta,iphi);
183 }
184 
185 std::pair< float, float >
186 MEEBGeom::globalCoord( int ism, float x, float y )
187 {
188  assert( ism>=1 && ism<=36 );
189  int iz=1;
190  if( ism>18 )
191  {
192  iz=-1;
193  ism -= 18;
194  }
195  if( iz==-1 ) y = 19-y;
196 
197  float eta = x+1;
198  eta *= iz;
199  // float phi = -9 + y + 20*(ism-1);
200  float phi = 1 + y + 20*(ism-1);
201 
202  return std::pair< float, float >(eta,phi);
203 }
204 
205 std::pair< MEEBGeom::EBGlobalCoord, MEEBGeom::EBGlobalCoord >
206 MEEBGeom::globalCoord( int ism, int icr )
207 {
208  assert( ism>=1 && ism<=36 );
209  assert( icr>=1 && icr<=1700 );
210 
211  int ix = (icr-1)/20;
212  int iy = 19 - (icr-1)%20;
213 
214  return globalCoord( ism, ix, iy );
215 }
216 
217 int
219 {
220  string
221  str_
222  (
223  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
224  "-01-02-02-02-02-04-04-04-04-06-06-06-06-08-08-08-08" // 3
225  "-01-02-02-02-02-04-04-04-04-06-06-06-06-08-08-08-08" // 2
226  "-01-03-03-03-03-05-05-05-05-07-07-07-07-09-09-09-09" // 1
227  "-01-03-03-03-03-05-05-05-05-07-07-07-07-09-09-09-09" // 0
228  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
229  );
230 
231  int iym, ixm, nc, il, ic, ii;
232  iym=4;
233  ixm=17;
234  int iX_ = iX+1;
235  int iY_ = iY+1;
236  nc=3;
237  il=iym-iY_;
238  ic=nc*(iX_-1);
239  ii=il*nc*ixm+ic;
240  if( str_.substr(ii,1).find("-")==string::npos ) return -1;
241  return atoi( str_.substr(ii+1,2).c_str() );
242 }
243 
244 int
246 {
247  string
248  str_
249  (
250  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
251  "-01-01-01-02-02-01-01-02-02-01-01-02-02-01-01-02-02" // 3
252  "-01-01-01-02-02-01-01-02-02-01-01-02-02-01-01-02-02" // 2
253  "-01-01-01-02-02-01-01-02-02-01-01-02-02-01-01-02-02" // 1
254  "-01-01-01-02-02-01-01-02-02-01-01-02-02-01-01-02-02" // 0
255  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
256  );
257 
258  int iym, ixm, nc, il, ic, ii;
259  iym=4;
260  ixm=17;
261  int iX_ = iX+1;
262  int iY_ = iY+1;
263  nc=3;
264  il=iym-iY_;
265  ic=nc*(iX_-1);
266  ii=il*nc*ixm+ic;
267  if( str_.substr(ii,1).find("-")==string::npos ) return -1;
268  return atoi( str_.substr(ii+1,2).c_str() );
269 }
270 
271 int
273 {
274  string
275  str_
276  (
277  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
278  "-01-03-05-07-09-11-13-15-17-19-21-23-25-27-29-31-33" // 3
279  "-01-03-05-07-09-11-13-15-17-19-21-23-25-27-29-31-33" // 2
280  "-02-04-06-08-10-12-14-16-18-20-22-24-26-28-30-32-34" // 1
281  "-02-04-06-08-10-12-14-16-18-20-22-24-26-28-30-32-34" // 0
282  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
283  );
284 
285  int iym, ixm, nc, il, ic, ii;
286  iym=4;
287  ixm=17;
288  int iX_ = iX+1;
289  int iY_ = iY+1;
290  nc=3;
291  il=iym-iY_;
292  ic=nc*(iX_-1);
293  ii=il*nc*ixm+ic;
294  if( str_.substr(ii,1).find("-")==string::npos ) return -1;
295  return atoi( str_.substr(ii+1,2).c_str() );
296 }
297 
298 int
300 {
301  string
302  str_
303  (
304  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
305  "-01-02-02-04-04-06-06-08-08-10-10-12-12-14-14-16-16" // 3
306  "-01-02-02-04-04-06-06-08-08-10-10-12-12-14-14-16-16" // 2
307  "-01-03-03-05-05-07-07-09-09-11-11-13-13-15-15-17-17" // 1
308  "-01-03-03-05-05-07-07-09-09-11-11-13-13-15-15-17-17" // 0
309  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
310  );
311 
312  int iym, ixm, nc, il, ic, ii;
313  iym=4;
314  ixm=17;
315  int iX_ = iX+1;
316  int iY_ = iY+1;
317  nc=3;
318  il=iym-iY_;
319  ic=nc*(iX_-1);
320  ii=il*nc*ixm+ic;
321  if( str_.substr(ii,1).find("-")==string::npos ) return -1;
322  return atoi( str_.substr(ii+1,2).c_str() );
323 }
324 
325 int
327 {
328 
329  int itt = 4*iX+4-iY; // :)
330 
331  return itt;
332 
333 }
334 
335 int
337 {
338  // "Test beam numbering"
339  int icr = 20*ix + 19-iy + 1; // :)
340 
341  return icr;
342 }
343 
344 int
346 {
347  int iX = ix/5;
348  int iY = iy/5;
349  int itt = tt_channel( iX, iY );
350  int type = tt_type( iX, iY );
351 
352  int iVFE = ix%5+1;
353  int islot = iy%5+1;
354  if( iVFE%2==1 ) islot = 6-islot;
355  int icr = 5*(iVFE-1)+(islot-1);
356  // rotate for type-1 towers
357  if( type==1 )
358  {
359  icr = 24-icr;
360  }
361  icr += 25*(itt-1);
362 
363  return icr;
364 }
365 
366 TGraph*
367 MEEBGeom::getGraphBoundary( int type, int num, bool global )
368 {
369  int ism_=0;
370  if( type==iSuperModule )
371  {
372  ism_ = num;
373  }
374  else if( type==iLMRegion )
375  {
376  ism_ = (num-1)/2+1;
377  if( ism_>18 )
378  ism_-=18;
379  else
380  ism_+=18;
381  }
382  else
383  abort();
384 
385  int ism=1;
386  if( global ) ism = ism_;
387 
388  // std::list< std::pair< float, float > > l;
389  // getBoundary( l, type, num, global, ism );
390  // int n = l.size();
391  // if( n==0 ) return 0;
392 
393  float ix[100];
394  float iy[100];
395  int ixmin = 0;
396  int ixmax = 84;
397  int iymin = 0;
398  int iymax = 19;
399 
400  int n(0);
401  if( type==iSuperModule )
402  {
403  n=5;
404  ix[0] = ixmin-0.5;
405  iy[0] = iymin-0.5;
406  ix[1] = ixmin-0.5;
407  iy[1] = iymax+0.5;
408  ix[2] = ixmax+0.5;
409  iy[2] = iymax+0.5;
410  ix[3] = ixmax+0.5;
411  iy[3] = iymin-0.5;
412  ix[4] = ix[0];
413  iy[4] = iy[0];
414  }
415  else if( type==iLMRegion )
416  {
417  int iside = num;
418  if( global )
419  {
420  iside = (num-1)%2;
421  }
422 
423  if( iside==1 )
424  {
425  n=5;
426  ix[0] = ixmin+5-0.5;
427  iy[0] = iymin+10-0.5;
428  ix[1] = ixmin+5-0.5;
429  iy[1] = iymax+0.5;
430  ix[2] = ixmax+0.5;
431  iy[2] = iymax+0.5;
432  ix[3] = ixmax+0.5;
433  iy[3] = iymin+10-0.5;
434  ix[4] = ix[0];
435  iy[4] = iy[0];
436  }
437  else
438  {
439  n=7;
440  ix[0] = ixmin-0.5;
441  iy[0] = iymin-0.5;
442  ix[1] = ixmin-0.5;
443  iy[1] = iymax+0.5;
444  ix[2] = ixmin+5-0.5;
445  iy[2] = iymax+0.5;
446  ix[3] = ixmin+5-0.5;
447  iy[3] = iymax-10+0.5;
448  ix[4] = ixmax+0.5;
449  iy[4] = iymax-10+0.5;
450  ix[5] = ixmax+0.5;
451  iy[5] = iymin-0.5;
452  ix[6] = ix[0];
453  iy[6] = iy[0];
454  }
455  }
456 
457  if( global )
458  {
459  for( int ii=0; ii<n; ii ++ )
460  {
461  std::pair<float,float> xy = globalCoord( ism, ix[ii], iy[ii] );
462  ix[ii] = xy.first;
463  iy[ii] = xy.second;
464  }
465  }
466 
467 // int ii=0;
468 // std::list< std::pair< float, float > >::const_iterator l_it;
469 // for( l_it=l.begin(); l_it!=l.end(); l_it++ )
470 // {
471 // // std::cout << "[" << l_it->first << "," << l_it->second << "]" << std::endl;
472 // ix[ii] = l_it->first;
473 // iy[ii] = l_it->second;
474 // ii++;
475 // }
476 
477 
478 // assert( ii==n );
479  return new TGraph( n, ix, iy );
480 }
481 
482 std::pair< int, int >
483 MEEBGeom::pn( int ilmmod )
484 {
485  switch( ilmmod )
486  {
487  case 1: return std::pair<int,int>( 0, 5 );
488  case 2: return std::pair<int,int>( 1, 6 );
489  case 3: return std::pair<int,int>( 1, 6 );
490  case 4: return std::pair<int,int>( 2, 7 );
491  case 5: return std::pair<int,int>( 2, 7 );
492  case 6: return std::pair<int,int>( 3, 8 );
493  case 7: return std::pair<int,int>( 3, 8 );
494  case 8: return std::pair<int,int>( 4, 9 );
495  case 9: return std::pair<int,int>( 4, 9 );
496  default:
497  abort();
498  }
499  return std::pair<int,int>(-1,-1);
500 }
501 
502 std::pair<int,int>
504 {
505  std::pair< int, int > dccAndSide_ = ME::dccAndSide( ilmr );
506  int idcc = dccAndSide_.first;
507  return std::pair<int,int>( idcc, idcc );
508 }
509 
510 std::vector<int>
512 {
513  std::pair< int, int > dccAndSide_ = ME::dccAndSide( ilmr );
514  int iside = dccAndSide_.second;
515  std::vector< int > vec;
516  for( int ilmmod=1; ilmmod<=9; ilmmod++ )
517  {
518  if( (ilmmod+iside)%2==1 ) vec.push_back(ilmmod);
519  }
520  return vec;
521 }
522 
523 int
525 {
526  switch( ilmmod )
527  {
528  /* case 1: return 1;
529  case 2: return 5;
530  case 3: return 7;
531  case 4: return 21;
532  case 5: return 23;
533  case 6: return 37;
534  case 7: return 39;
535  case 8: return 53;
536  case 9: return 55;
537  */
538  case 1: return 2;
539  case 2: return 6;
540  case 3: return 8;
541  case 4: return 22;
542  case 5: return 24;
543  case 6: return 38;
544  case 7: return 40;
545  case 8: return 54;
546  case 9: return 56;
547  default:
548  abort();
549  }
550  return 0;
551 }
552 
553 
554 std::vector< int >
556 {
557 
558  std::vector< int > vec;
559  switch( ilmmod )
560  {
561  case 1: vec.push_back(0); vec.push_back(24); break;
562  case 2: vec.push_back(0); vec.push_back(24); break;
563  case 3: vec.push_back(0); vec.push_back(24); break;
564  case 4: vec.push_back(0); vec.push_back(24); break;
565  case 5: vec.push_back(0); vec.push_back(24); break;
566  case 6: vec.push_back(0); vec.push_back(24); break;
567  case 7: vec.push_back(0); vec.push_back(24); break;
568  case 8: vec.push_back(0); vec.push_back(24); break;
569  case 9: vec.push_back(0); vec.push_back(24); break;
570  default:
571  abort();
572  }
573  return vec;
574 }
575 
type
Definition: HCALResponse.h:22
static XYCoord localCoord(int icr)
Definition: MEEBGeom.cc:153
static int smFromDcc(int idcc)
Definition: MEEBGeom.cc:68
static std::vector< int > apdRefChannels(int ilmmod)
Definition: MEEBGeom.cc:555
static TString smName(int ism)
Definition: MEEBGeom.cc:79
static int crystal(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:107
static int crystal_channel(EBLocalCoord ix, EBLocalCoord iy)
Definition: MEEBGeom.cc:336
static int tt_type(EBTTLocalCoord iX, EBTTLocalCoord iY)
Definition: MEEBGeom.cc:245
static int lmr(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:121
T eta() const
static std::pair< int, int > pn(int ilmmod)
Definition: MEEBGeom.cc:483
static int lm_channel(EBTTLocalCoord iX, EBTTLocalCoord iY)
Definition: MEEBGeom.cc:218
static int electronic_channel(EBLocalCoord ix, EBLocalCoord iy)
Definition: MEEBGeom.cc:345
int EBTTLocalCoord
Definition: MEEBGeom.h:24
static EtaPhiCoord globalCoord(int ism, EBLocalCoord ix, EBLocalCoord iy)
Definition: MEEBGeom.cc:162
static TGraph * getGraphBoundary(int type, int num, bool global=false)
Definition: MEEBGeom.cc:367
static std::pair< int, int > dccAndSide(int ilmr)
Definition: ME.cc:313
int EBGlobalCoord
Definition: MEEBGeom.h:23
static int apdRefTower(int ilmmod)
Definition: MEEBGeom.cc:524
static int lv_channel(EBTTLocalCoord iX, EBTTLocalCoord iY)
Definition: MEEBGeom.cc:299
static int lmmod(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:93
tuple out
Definition: dbtoconf.py:99
static std::pair< int, int > memFromLmr(int ilmr)
Definition: MEEBGeom.cc:503
static int side(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:114
static int tt_channel(EBTTLocalCoord iX, EBTTLocalCoord iY)
Definition: MEEBGeom.cc:326
static int hv_channel(EBTTLocalCoord iX, EBTTLocalCoord iY)
Definition: MEEBGeom.cc:272
long long int num
Definition: procUtils.cc:71
static int barrel(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:15
static int sm(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:27
static int dcc(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:48
x
Definition: VDTMath.h:216
int ism(int ieta, int iphi)
Definition: EcalPyUtils.cc:56
static int dccFromSm(int ism)
Definition: MEEBGeom.cc:55
static int tt(EBGlobalCoord ieta, EBGlobalCoord iphi)
Definition: MEEBGeom.cc:100
static std::vector< int > lmmodFromLmr(int ilmr)
Definition: MEEBGeom.cc:511
int EBLocalCoord
Definition: MEEBGeom.h:22
Definition: DDAxes.h:10