ATLAS Offline Software
Loading...
Searching...
No Matches
TileCellTools.py
Go to the documentation of this file.
1#!/bin/env python
2
3# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4# TileCellTools.py
5# Alexander Solodkov <Sanya.Solodkov@cern.ch>, 2014-11-01
6
7
8import bisect
9
11 """
12 This class ised to convert cell hash to cell name
13 """
14 #____________________________________________________________________
15 def __init__(self, geometry='Default', cabling='RUN2'):
16
17 #=== initialize all arrays
18 self._geometry=geometry
19 self._cabling=cabling
20 if geometry == "UpgradeABC":
22 ["A-1","A-2","A-3","B-1","C-1","A-4","A-5","A-6","A-7","B-2","C-2","A-8","A-9","D-1","A-10","A-11","B-3","C-3","A-12","A-13","A-14","A-15","B-4","C-4",
23 "A-16","A-17","D-2","A-18","A-19","B-5","C-5","A-20","A-21","A-22","A-23","B-6","C-6","A-24","A-25","D-3","A-26","A-27","B-7","C-7","A-28","A-29","A-30",
24 "A-31","B-8","C-8","A-32","A-33","A-34","A-35","B-9","A-36","A-37","A-38","A-39","A-40"],
25 ["A+1","D*0","A+2","A+3","B+1","C+1","A+4","A+5","A+6","A+7","B+2","C+2","A+8","A+9","D+1","A+10","A+11","B+3","C+3","A+12","A+13","A+14","A+15","B+4","C+4",
26 "A+16","A+17","D+2","A+18","A+19","B+5","C+5","A+20","A+21","A+22","A+23","B+6","C+6","A+24","A+25","D+3","A+26","A+27","B+7","C+7","A+28","A+29","A+30",
27 "A+31","B+8","C+8","A+32","A+33","A+34","A+35","B+9","A+36","A+37","A+38","A+39","A+40"],
28 ["D-5","A-42","B-11","A-44","A-45","A-46","A-47","B-12","A-48","A-49","D-6","A-50","A-51","B-13","A-52","A-53","A-54","A-55","B-14","A-56","A-57","A-58","A-59","B-15",
29 "A-60","A-61","A-62","A-63","A-64"],
30 ["D+5","A+42","B+11","A+44","A+45","A+46","A+47","B+12","A+48","A+49","D+6","A+50","A+51","B+13","A+52","A+53","A+54","A+55","B+14","A+56","A+57","A+58","A+59","B+15",
31 "A+60","A+61","A+62","A+63","A+64"],
32 ["D-4","C-10","E-1","E-2","E-3","E-4","spD-4","spC-10","spD-40","spE-1","mbE-1","e4E-1"],
33 ["D+4","C+10","E+1","E+2","E+3","E+4","spD+4","spC+10","spD+40","spE+1","mbE+1","e4E+1"]
34 ]
35 self._nCellsModule = [60,61,29,29,6,6]
36
37 elif geometry == "UpgradeBC":
38 self._cellNames=[
39 ["A-1","B-1","C-1","A-2","B-2","C-2","A-3","B-3","C-3","D-1","A-4","B-4","C-4","A-5","B-5","C-5","D-2","A-6","B-6","C-6","A-7","B-7","C-7",
40 "D-3","A-8","B-8","C-8","A-9","B-9","A-10"],
41 ["A+1","B+1","C+1","D*0","A+2","B+2","C+2","A+3","B+3","C+3","D+1","A+4","B+4","C+4","A+5","B+5","C+5","D+2","A+6","B+6","C+6","A+7","B+7","C+7",
42 "D+3","A+8","B+8","C+8","A+9","B+9","A+10"],
43 ["B-11","D-5","A-12","B-12","A-13","B-13","D-6","A-14","B-14","A-15","B-15","A-16"],
44 ["B+11","D+5","A+12","B+12","A+13","B+13","D+6","A+14","B+14","A+15","B+15","A+16"],
45 ["D-4","C-10","E-1","E-2","E-3","E-4","spD-4","spC-10","spD-40","spE-1","mbE-1","e4E-1"],
46 ["D+4","C+10","E+1","E+2","E+3","E+4","spD+4","spC+10","spD+40","spE+1","mbE+1","e4E+1"]
47 ]
48 self._nCellsModule = [30,31,12,12,6,6]
49
50 elif geometry == "UpgradeA":
51 self._cellNames=[
52 ["A-1","A-2","A-3","B-1","A-4","A-5","A-6","A-7","B-2","A-8","A-9","D-1","A-10","A-11","B-3","A-12","A-13","A-14","A-15","B-4","A-16","A-17","D-2","A-18",
53 "A-19","B-5","A-20","A-21","A-22","A-23","B-6","A-24","A-25","D-3","A-26","A-27","B-7","A-28","A-29","A-30","A-31","B-8","A-32","A-33","A-34",
54 "A-35","B-9","A-36","A-37","A-38","A-39","A-40"],
55 ["A+1","D*0","A+2","A+3","B+1","A+4","A+5","A+6","A+7","B+2","A+8","A+9","D+1","A+10","A+11","B+3","A+12","A+13","A+14","A+15","B+4","A+16","A+17","D+2","A+18",
56 "A+19","B+5","A+20","A+21","A+22","A+23","B+6","A+24","A+25","D+3","A+26","A+27","B+7","A+28","A+29","A+30","A+31","B+8","A+32","A+33","A+34",
57 "A+35","B+9","A+36","A+37","A+38","A+39","A+40"],
58 ["D-5","A-42","B-11","A-44","A-45","A-46","A-47","B-12","A-48","A-49","D-6","A-50","A-51","B-13","A-52","A-53","A-54","A-55","B-14","A-56","A-57","A-58","A-59","B-15",
59 "A-60","A-61","A-62","A-63","A-64"],
60 ["D+5","A+42","B+11","A+44","A+45","A+46","A+47","B+12","A+48","A+49","D+6","A+50","A+51","B+13","A+52","A+53","A+54","A+55","B+14","A+56","A+57","A+58","A+59","B+15",
61 "A+60","A+61","A+62","A+63","A+64"],
62 ["D-4","C-10","E-1","E-2","E-3","E-4","spD-4","spC-10","spD-40","spE-1","mbE-1","e4E-1"],
63 ["D+4","C+10","E+1","E+2","E+3","E+4","spD+4","spC+10","spD+40","spE+1","mbE+1","e4E+1"]
64 ]
65 self._nCellsModule = [52,53,29,29,6,6]
66
67 else:
68 self._geometry="Default"
69 self._cellNames=[
70 ["A-1","B-1","A-2","B-2","A-3","B-3","D-1","A-4","B-4","A-5","B-5","D-2","A-6","B-6","A-7","B-7","D-3","A-8","B-8","A-9","B-9","A-10"],
71 ["A+1","B+1","D*0","A+2","B+2","A+3","B+3","D+1","A+4","B+4","A+5","B+5","D+2","A+6","B+6","A+7","B+7","D+3","A+8","B+8","A+9","B+9","A+10"],
72 ["B-11","D-5","A-12","B-12","A-13","B-13","D-6","A-14","B-14","A-15","B-15","A-16"],
73 ["B+11","D+5","A+12","B+12","A+13","B+13","D+6","A+14","B+14","A+15","B+15","A+16"],
74 ["D-4","C-10","E-1","E-2","E-3","E-4","spD-4","spC-10","spD-40","spE-1","mbE-1","e4E-1"],
75 ["D+4","C+10","E+1","E+2","E+3","E+4","spD+4","spC+10","spD+40","spE+1","mbE+1","e4E+1"]
76 ]
77 self._nCellsModule = [22,23,12,12,6,6]
78
79 self._partNames=["LBC","LBA","EBC","EBA","EBC","EBA"]
80 self._nModules = 64
81 self._nCellsPart = [0]
82 self._nHashMax=0
83 for p in range(6):
84 self._nHashMax+=self._nCellsModule[p]*self._nModules
85 self._nCellsPart.append(self._nHashMax)
86
87 #____________________________________________________________________
88 def getGeometry(self):
89 """
90 return geometry name
91 """
92 return self._geometry
93
94 #____________________________________________________________________
95 def getHashMax(self):
96 """
97 return max hash value
98 """
99 return self._nHashMax
100
101 #____________________________________________________________________
102 def getNames(self, hash):
103 """
104 return module name and cell name for given hash
105 """
106 if hash>=self._nHashMax or hash<0:
107 return (None,None)
108
109 part=bisect.bisect(self._nCellsPart,hash)-1
110 module=(hash-self._nCellsPart[part])//self._nCellsModule[part]+1
111 modName="%s%02d" % (self._partNames[part],module)
112 index=(hash-self._nCellsPart[part])%self._nCellsModule[part]
113 if part>=4:
114 if index==0 and ((part==4 and module==18) or (part==5 and module==15)):
115 index+=8
116 if index==0 and (module==14 or module==15 or module==18 or module==19):
117 index+=6
118 if index==1 and ((module>=39 and module<=42) or (module>=55 and module<=58)):
119 index+=6
120 if index==2 and (self._cabling=='RUN2' or self._cabling=='RUN2a' or self._cabling=='RUN3'):
121 if part==4 and (self._cabling=='RUN2' or self._cabling=='RUN2a'): # E4' in EBC
122 if module==28 or module==31 or module==35 or module==38:
123 index+=7 # E1m
124 if module==29 or module==32 or module==34 or module==37:
125 index+=9 # E4'
126 if module==7 or module==25 or module==44 or module==53:
127 index+=7 # E1m
128 if module==8 or module==24 or module==43 or module==54:
129 index+=8 # MBTS
130 if self._cabling=='RUN2a' or self._cabling=='RUN3':
131 if part==5: # EBA
132 if module==4 or module==21 or module==47 or module==60:
133 index+=7 # E1m
134 if module==3 or module==20 or module==46 or module==59:
135 index+=8 # MBTS
136 if part==4: # EBC
137 if module==4 or module==18 or module==47 or module==60:
138 index+=7 # E1m
139 if module==3 or module==19 or module==46 or module==59:
140 index+=8 # MBTS
141
142 return (modName,self._cellNames[part][index])
143
144 #____________________________________________________________________
145 def cellName(self, hash):
146 """
147 return cell name for given hash
148 """
149 if hash>=self._nHashMax or hash<0:
150 return None
151
152 part=bisect.bisect(self._nCellsPart,hash)-1
153 module=(hash-self._nCellsPart[part])//self._nCellsModule[part]+1
154 index=(hash-self._nCellsPart[part])%self._nCellsModule[part]
155 if part>=4:
156 if index==0 and ((part==4 and module==18) or (part==5 and module==15)):
157 index+=8
158 if index==0 and (module>=15 and module<=18):
159 index+=6
160 if index==1 and ((module>=39 and module<=42) or (module>=55 and module<=58)):
161 index+=6
162 if index==2 and (self._cabling=='RUN2' or self._cabling=='RUN2a' or self._cabling=='RUN3'):
163 if part==4 and (self._cabling=='RUN2' or self._cabling=='RUN2a'): # E4' in EBC
164 if module==28 or module==29 or module==31 or module==32 or module==35 or module==34 or module==38 or module==37:
165 index+=7 # E1m or E4'
166 if module==7 or module==8 or module==25 or module==24 or module==44 or module==43 or module==53 or module==54:
167 index+=7 # E1m or MBTS
168 if self._cabling=='RUN2a' or self._cabling=='RUN3':
169 if part==5: # EBA
170 if module==4 or module==3 or module==21 or module==20 or module==47 or module==46 or module==60 or module==59:
171 index+=7 # E1m or MBTS
172 if part==4: # EBC
173 if module==4 or module==3 or module==18 or module==19 or module==47 or module==46 or module==60 or module==59:
174 index+=7 # E1m or MBTS
175
176 return self._cellNames[part][index]
177
178 #____________________________________________________________________
179 def moduleName(self, hash):
180 """
181 return module name for given hash
182 """
183 if hash>=self._nHashMax or hash<0:
184 return None
185
186 part=bisect.bisect(self._nCellsPart,hash)-1
187 module=(hash-self._nCellsPart[part])//self._nCellsModule[part]+1
188 modName="%s%02d" % (self._partNames[part],module)
189
190 return modName
__init__(self, geometry='Default', cabling='RUN2')