StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
EEname2Index.cxx
1 
2 #include <cstdlib>
3 #include <cassert>
4 #include <cstdio>
5 
6 #include "EEname2Index.h"
7 //__________________________________________________
8 //__________________________________________________
9 void EEindexRange(int secID,int &ix1, int &ix2){
10  // returns range of valid index for given sector
11  assert(secID>=0);
12  assert(secID<=12);
13  ix1=(secID-1)*1000;
14  ix2=ix1+999;
15 }
16 
17 
18 //__________________________________________________
19 //__________________________________________________
20 void EEindex2Name(int ix,char *name){
21  assert(ix>=0);
22  assert(ix<EEindexMax);
23 
24  int sec=1+ix/1000;
25  assert(sec>0 && sec<=12);
26 
27  int jx=ix%1000;
28 
29  int key=jx/100;
30 
31  char ckey=' ';
32 
33  switch(key) {
34  case 0: ckey='T';break;
35  case 1: ckey='P';break;
36  case 2: ckey='Q';break;
37  case 3: ckey='R';break;
38  case 4:
39  case 5:
40  case 6: ckey='U';break;
41  case 7:
42  case 8:
43  case 9: ckey='V';break;
44  default:
45  printf("EEindex2Name() Logical Error1: invalid index=%d\n",ix);
46  exit(-1);
47  }
48 
49  // printf("key=%d ckey=%c, jx=%d\n",key, ckey,jx);
50 
51  switch(ckey) {
52  case 'T':
53  case 'P':
54  case 'Q':
55  case 'R': {
56  jx=jx%100 -1;
57  int sub ='A'+jx/12;
58  assert(sub>='A' && sub<='E');
59  int eta=1+jx%12;
60  assert(eta>0 && eta <=12);
61  sprintf(name,"%2.2d%c%c%2.2d",sec,ckey,sub,eta);
62  break;}
63 
64  case 'V': jx-=300;
65  case 'U': {
66  int strip=jx-400;
67  assert(strip>0 && strip<=288);
68  sprintf(name,"%2.2d%c%3.3d",sec,ckey,strip);
69  break;}
70 
71  default:
72  printf("EEindex2Name() Logical Error2: invalid index=%d\n",ix);
73  exit(-1);
74  }
75 
76  // printf("EEindex2Name(%d) -->%s \n",ix,name);
77 }
78 
79 
80 //__________________________________________________
81 //__________________________________________________
82 int EEname2Index(const char *name){
83 
84  int index=-1;
85 
86  int sec=atoi(name);
87  assert(sec>0 && sec<=12);
88 
89  index=(sec-1)*1000;
90 
91  if(sec<10 && name[0]!='0') name--; // compensate for missing proceeding zero in sectorID
92  char key=name[2];
93 
94  switch(key) {
95  case 'R': index+=100;
96  case 'Q': index+=100;
97  case 'P': index+=100;
98  case 'T': {
99  int sub =name[3];
100  assert(sub>='A' && sub<='E');
101  int eta=atoi(name+4);
102  assert(eta>0 && eta <=12);
103  index+=(sub-'A')*12 +eta;
104  } break;
105  case 'V': index+=300;
106  case 'U': {index+=400;
107  int strip=atoi(name+3);
108  assert(strip>0 && strip<=288);
109  index+=strip;
110  } break;
111 
112  default:
113  printf("EEname2Index('%s') Logical Error3: invalid index=%d\n",name,index);
114  exit(-1);
115  }
116 
117  // printf("EEname2Index(%s)-->%d\n",name,index);
118 
119  assert(index>=0);
120  assert(index<EEindexMax);
121 
122  return index;
123 
124 }