ATLAS Offline Software
LArExtendedFTGrouping.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 
3 
5  def __init__(self):
6  self._EMBC=range(3,35)#+[1006]
7  self._EMBA=range(35,67)#+[1005]
8  self._EMBCPS=range(117,149)#+[]
9  self._EMBAPS=range(149,181)#+[]
10 
11  #List of EMEC OW channels (C-side)
12  EMEC=(67, 68, 69, 71, 72, 74, 75, 76, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 90, 91)
13  self._EMECC=EMEC+(231,233,235,237) # EMEC C OW + IW
14  self._EMECA=()
15  for i in EMEC: #EMECA OW is EMECC OW +25
16  self._EMECA+=(i+25,)
17  self._EMECA+=(232,234,236,238) #EMECA OW + EMECA IW
18 
19  self._EMECCPS=()
20  self._EMECAPS=()
21  for i in EMEC:
22  self._EMECCPS+=(i+114,)
23  self._EMECAPS+=(i+139,)
24 
25  self._HECC=(70,77,83,89)
26  self._HECA=()
27  for i in self._HECC:
28  self._HECA+=(i+25,)
29 
30  self._FCALC=(73,)
31  self._FCALA=(73+25,)
32 
33  self._emptyC=(184,187,191,197,203)
34  self._emptyA=(209,212,216,222,228)
35  self._empty=self._emptyC + self._emptyA
36 
37  self._withCorr=True
38 
39  #Build dictionary:
40  self._partitions=dict()
41  self._partitions['EMBAPS'] = self._EMBAPS
42  self._partitions['EMBCPS'] = self._EMBCPS
43  self._partitions['EMECAPS'] = self._EMECAPS
44  self._partitions['EMECCPS'] = self._EMECCPS
45  self._partitions['EMBA'] = self._EMBA
46  self._partitions['EMBC'] = self._EMBC
47  self._partitions['EMECA']= self._EMECA
48  self._partitions['EMECC'] = self._EMECC
49  self._partitions['HECA'] = self._HECA
50  self._partitions['HECC'] = self._HECC
51  self._partitions['FCALA'] = self._FCALA
52  self._partitions['FCALC'] = self._FCALC
53  self._partitions['EMPTYA'] = self._emptyA
54  self._partitions['EMPTYC'] = self._emptyC
55 
56  #Correction Channels:
57  self._corr=dict()
58  self._corr['EMBAPS'] = 1001
59  self._corr['EMBCPS'] = 1002
60  self._corr['EMECAPS'] = 1003
61  self._corr['EMECCPS'] = 1004
62  self._corr['EMBA'] = 1005
63  self._corr['EMBC'] = 1006
64  self._corr['EMECA'] = 1007
65  self._corr['EMECC'] = 1008
66  self._corr['HECA'] = 1009
67  self._corr['HECC'] = 1010
68  self._corr['FCALA'] = 1011
69  self._corr['FCALC'] = 1012
70 
71  #Lookup-dict indexed by channel (partition is the payload)
72  self._revLookup=dict()
73  for (p, chs) in self._partitions.iteritems():
74  for c in chs:
75  self._revLookup[c]=p
76 
77 
78  def setWithCorr(self,val):
79  self._withCorr=val
80 
81  def Print(self):
82  print(self._EMBC)
83  print(self._EMBA)
84 
85 
86  def getChannelList(self,partitions,gains=[0]):
87  chans=list()
88  for g in gains:
89  if g<0 or g>2:
90  print("ERROR: Unkown gain",g)
91  return None
92 
93  extPart=list()
94  for partition in partitions:
95  p=partition.upper()
96  if (p=="ECC"):
97  extPart+=["EMECCPS","EMECC","HECC","FCALC"]
98  elif (p=="ECA"):
99  extPart+=["EMECAPS","EMECA","HECA","FCALA"]
100  elif (p=="EC"):
101  extPart+=["EMECAPS","EMECA","HECA","FCALA",
102  "EMECCPS","EMECC","HECC","FCALC"]
103  elif (p=="EMB"):
104  extPart+=["EMBA","EMBAPS","EMBC","EMBCPS"]
105  else:
106  extPart+=[p]
107 
108  for p in extPart:
109  if p in self._partitions:
110  for g in gains:
111  for c in self._partitions[p]:
112  chans+=[c+(g*236)]
113  if (self._withCorr):
114  for g in gains:
115  chans+=[self._corr[p]+g*12]
116  else:
117  print("ERROR: Unkown partition '",partition,"'")
118 
119  return chans
120 
121  def makeRange(self,chans):
122  chans.sort()
123  retVal=""
124  if (len(chans)==0):
125  return retVal
126  retVal=str(chans[0])
127  c1=chans[0]
128  series=False
129  for c2 in chans[1:]:
130  if c1 == c2:
131  print("Duplicated entry",c2)
132  continue
133  if c2-1 == c1 or c2-1 in self._empty:
134  series=True
135  else:
136  if series:
137  retVal+=":"+str(c1)+","+str(c2)
138  series=False
139  else:
140  retVal+=","+str(c2)
141 # print ("c1=",c1,"c2=",c2,"sep=",sep)
142  c1=c2
143  if series: retVal+=":"+str(c1)
144  return retVal
145 
146 
147 
148  def getChannelSelection(self,partitions,gains):
149  return self.makeRange(self.getChannelList(partitions,gains))
150 
151  def getChannelSelectionAllGains(self,partitions):
152  chans=list()
153  for p in partitions:
154  chans+=self.getChannelList([p],[0,1,2])
155  return self.makeRange(chans)
156 
157 
158  def getGain(self,c):
159  if c<2:
160  return (0,None)
161  if c<239:
162  return (0,c)
163  if c<475:
164  return (1,c-236)
165  if c<711:
166  return (2,c-472)
167  if c<1001:
168  return (0,None)
169  if c<1013:
170  return (0,c)
171  if c<1025:
172  return (1,c-12)
173  if c<1037:
174  return (2,c-24)
175  return (0,None)
176 
177 
178  def channelsPerPartition(self,chans,show=True):
179  class counterElem:
180  def __init__(self,l,n):
181  self.size=l
182  self.name=n
183  self.counts=[0,0,0]
184  def inc(self,g):
185  self.counts[g]=1+self.counts[g]
186 
187  def show(self):
188  print("%7s: " % self.name, end="")
189  print("HIGH:%2i/%2i" % (self.counts[0],self.size),)
190  if self.counts[0] != self.size:
191  print ("* ",end="")
192  else:
193  print (" ",end="")
194  print ("MED:%2i/%2i" % (self.counts[1],self.size),)
195  if self.counts[1] != self.size:
196  print ("* ",end="")
197  else:
198  print (" ",end="")
199  print ("LOW:%2i/%2i" % (self.counts[2],self.size),)
200  if self.counts[2] != self.size:
201  print ("* ")
202  else:
203  print (" ")
204 
205  partCounter=dict()
206  for (p, chs) in self._partitions.iteritems():
207  partCounter[p]=counterElem(len(chs),p)
208 
209  for c in chans:
210  (gain,cs)=self.getGain(c)
211  if cs is None:
212  print("ERROR: Unkown channel",c)
213  else:
214  if (c<711):
215  p=self._revLookup[cs]
216  partCounter[p].inc(gain)
217 
218  return partCounter
219 
220 
python.Bindings.iteritems
iteritems
Definition: Control/AthenaPython/python/Bindings.py:823
python.LArExtendedFTGrouping.LArExtendedFTGrouping.size
size
Definition: LArExtendedFTGrouping.py:181
python.LArExtendedFTGrouping.LArExtendedFTGrouping.makeRange
def makeRange(self, chans)
Definition: LArExtendedFTGrouping.py:121
python.LArExtendedFTGrouping.LArExtendedFTGrouping._partitions
_partitions
Definition: LArExtendedFTGrouping.py:40
python.LArExtendedFTGrouping.LArExtendedFTGrouping._empty
_empty
Definition: LArExtendedFTGrouping.py:35
python.LArExtendedFTGrouping.LArExtendedFTGrouping._HECC
_HECC
Definition: LArExtendedFTGrouping.py:25
python.LArExtendedFTGrouping.LArExtendedFTGrouping._withCorr
_withCorr
Definition: LArExtendedFTGrouping.py:37
python.LArExtendedFTGrouping.LArExtendedFTGrouping._corr
_corr
Definition: LArExtendedFTGrouping.py:57
python.LArExtendedFTGrouping.LArExtendedFTGrouping._FCALA
_FCALA
Definition: LArExtendedFTGrouping.py:31
python.LArExtendedFTGrouping.LArExtendedFTGrouping.getChannelSelectionAllGains
def getChannelSelectionAllGains(self, partitions)
Definition: LArExtendedFTGrouping.py:151
python.LArExtendedFTGrouping.LArExtendedFTGrouping.getChannelSelection
def getChannelSelection(self, partitions, gains)
Definition: LArExtendedFTGrouping.py:148
python.LArExtendedFTGrouping.LArExtendedFTGrouping._FCALC
_FCALC
Definition: LArExtendedFTGrouping.py:30
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMBAPS
_EMBAPS
Definition: LArExtendedFTGrouping.py:9
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMECC
_EMECC
Definition: LArExtendedFTGrouping.py:13
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMECA
_EMECA
Definition: LArExtendedFTGrouping.py:14
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMBC
_EMBC
Definition: LArExtendedFTGrouping.py:6
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMBA
_EMBA
Definition: LArExtendedFTGrouping.py:7
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.LArExtendedFTGrouping.LArExtendedFTGrouping._emptyA
_emptyA
Definition: LArExtendedFTGrouping.py:34
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMECAPS
_EMECAPS
Definition: LArExtendedFTGrouping.py:20
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.LArExtendedFTGrouping.LArExtendedFTGrouping.Print
def Print(self)
Definition: LArExtendedFTGrouping.py:81
python.LArExtendedFTGrouping.LArExtendedFTGrouping.setWithCorr
def setWithCorr(self, val)
Definition: LArExtendedFTGrouping.py:78
python.LArExtendedFTGrouping.LArExtendedFTGrouping.getGain
def getGain(self, c)
Definition: LArExtendedFTGrouping.py:158
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMECCPS
_EMECCPS
Definition: LArExtendedFTGrouping.py:19
python.LArExtendedFTGrouping.LArExtendedFTGrouping
Definition: LArExtendedFTGrouping.py:4
python.LArExtendedFTGrouping.LArExtendedFTGrouping.counts
counts
Definition: LArExtendedFTGrouping.py:183
python.LArExtendedFTGrouping.LArExtendedFTGrouping._EMBCPS
_EMBCPS
Definition: LArExtendedFTGrouping.py:8
python.LArExtendedFTGrouping.LArExtendedFTGrouping.__init__
def __init__(self)
Definition: LArExtendedFTGrouping.py:5
python.LArExtendedFTGrouping.LArExtendedFTGrouping._HECA
_HECA
Definition: LArExtendedFTGrouping.py:26
python.LArExtendedFTGrouping.LArExtendedFTGrouping.getChannelList
def getChannelList(self, partitions, gains=[0])
Definition: LArExtendedFTGrouping.py:86
python.LArExtendedFTGrouping.LArExtendedFTGrouping._revLookup
_revLookup
Definition: LArExtendedFTGrouping.py:72
str
Definition: BTagTrackIpAccessor.cxx:11
python.LArExtendedFTGrouping.LArExtendedFTGrouping.channelsPerPartition
def channelsPerPartition(self, chans, show=True)
Definition: LArExtendedFTGrouping.py:178
python.LArExtendedFTGrouping.LArExtendedFTGrouping._emptyC
_emptyC
Definition: LArExtendedFTGrouping.py:33
python.LArExtendedFTGrouping.LArExtendedFTGrouping.name
name
Definition: LArExtendedFTGrouping.py:182