ATLAS Offline Software
LArRunFormat.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 
5 from CoolConvUtilities.AtlCoolLib import indirectOpen
6 from functools import cache
7 
8 
9 class LArRunInfo:
10  "Wrapper class to hold LAr run configuration information"
11  def __init__(self,nSamples,gainType,latency,firstSample,format,runType):
12  self._nSamples = nSamples
13  self._gainType = gainType
14  self._latency = latency
15  self._firstSample = firstSample
16  self._format = format
17  self._runType = runType
18 
19  def nSamples(self):
20  "Number of samples readout from FEB"
21  return self._nSamples
22 
23  def gainType(self):
24  "gainType: 0=auto,1=L,2=M,3=H,4=LM,5=LH,6=ML,7=MH,8=HL,9=HM,10=LMH,11=LHM,12=MLH,13=MHL,14=HLM,15=HML"
25  return self._gainType
26 
27  def latency(self):
28  "latency between l1 trigger and readout"
29  return self._latency
30 
31  def firstSample(self):
32  "firstsample"
33  return self._firstSample
34 
35  def format(self):
36  "format:0=Transparent, 1=Format 1, 2=Format 2"
37  return self._format
38 
39  def runType(self):
40  "runType: 0=RawData, 1=RawDataResult, 2=Result"
41  return self._runType
42 
43  def stringFormat(self):
44  if (self._format == 0) :
45  return 'transparent'
46  if (self._format == 1) :
47  return 'Format1'
48  if (self._format == 2) :
49  return 'Format2'
50 
51  def stringRunType(self):
52  if (self._runType ==0) :
53  return 'RawData'
54  if (self._runType ==1) :
55  return 'RawDataResult'
56  if (self._runType ==2) :
57  return 'Result'
58 
59 @cache
60 def getLArFormatForRun(run,quiet=False,connstring="COOLONL_LAR/CONDBR2"):
61  from AthenaCommon.Logging import logging
62  mlog_LRF = logging.getLogger( 'getLArRunFormatForRun' )
63 
64  mlog_LRF.info("Connecting to database %s", connstring)
65 
66  runDB=indirectOpen(connstring)
67  if (runDB is None):
68  mlog_LRF.error("Cannot connect to database %s",connstring)
69  raise RuntimeError("getLArFormatForRun ERROR: Cannot connect to database %s",connstring)
70  format=None
71  nSamples=None
72  gainType=None
73  runType=None
74  latency=None
75  firstSample=None
76  try:
77  folder=runDB.getFolder('/LAR/Configuration/RunLog')
78  runiov=run << 32
79  obj=folder.findObject(runiov,0)
80  payload=obj.payload()
81  format=payload['format']
82  nSamples=ord(payload['nbOfSamples'])
83  gainType=payload['gainType']
84  runType=payload['runType']
85  latency=ord(payload['l1aLatency'])
86  firstSample=ord(payload['firstSample'])
87  except Exception:
88  mlog_LRF.warning("No information in /LAR/Configuration/RunLog for run %i", run)
89  #mlog_LRF.warning(e)
90  return None
91  runDB.closeDatabase()
92  return LArRunInfo(nSamples,gainType,latency,firstSample,format,runType)
93 
95  "Wrapper class to hold LAr DT run configuration information"
96  def __init__(self,streamTypes, streamLengths, streamTypesPEB, streamLengthsPEB, timing, adccalib, fw):
97  self._sTypes = streamTypes
98  self._sLengths = streamLengths
99  self._sTypesPEB = streamTypesPEB
100  self._sLengthsPEB = streamLengthsPEB
101  self._tim = timing
102  self._adcc = adccalib
103  self._fwversion = fw
104 
105  def streamTypes(self):
106  return self._sTypes
107 
108  def streamLengths(self):
109  return self._sLengths
110 
111  def streamTypesPEB(self):
112  return self._sTypesPEB
113 
114  def streamLengthsPEB(self):
115  return self._sLengthsPEB
116 
117  def timing(self):
118  return self._tim
119 
120  def ADCCalib(self):
121  return self._adcc
122 
123  def FWversion(self):
124  return self._fwversion
125 
126 def parse_recipe(recipe,mux,mlog):
127  # parse recipe string of the type at0_bcX-at1_bcY...
128  typesMap={0:"ADC", 1:"RawADC", 2:"Energy", 3:"SelectedEnergy",15:"Invalid"}
129  sTypes=[]
130  sLengths=[]
131  for s,m in ["at0_bc",0],["at1_bc",1]:
132  pos=recipe.find(s)
133  if pos >=0:
134  n=-1
135  try:
136  n=int(recipe[pos+6:pos+8])
137  except Exception:
138  try:
139  n=int(recipe[pos+6:pos+7])
140  except Exception:
141  mlog.warning("could not decode %s",recipe[pos+6:])
142  if n>=0:
143  sLengths.append(n)
144  if mux[m] in typesMap.keys():
145  sTypes.append(typesMap[mux[m]])
146  else:
147  sTypes.append(15)
148  pass
149  pass
150  return (sTypes,sLengths)
151 
152 @cache
153 def getLArDTInfoForRun(run,quiet=False,connstring="COOLONL_LAR/CONDBR2"):
154  from AthenaCommon.Logging import logging
155  mlog_LRF = logging.getLogger( 'getLArDTRunInfoForRun' )
156  mlog_LRF.info("Connecting to database %s", connstring)
157 
158  runDB=indirectOpen(connstring)
159  if (runDB is None):
160  mlog_LRF.error("Cannot connect to database %s",connstring)
161  raise RuntimeError("getLArFormatForRun ERROR: Cannot connect to database %s",connstring)
162 
163  timing="LAR"
164  adccalib=0
165  mux=[]
166  fw=0
167  try:
168  folder=runDB.getFolder('/LAR/Configuration/RunLogDT')
169  runiov=run << 32
170  obj=folder.findObject(runiov,0)
171  payload=obj.payload()
172  timing=payload['timing_configuration']
173  recipe=payload['recipe_tdaq_A']
174  recipePEB=payload['recipe_tdaq_B']
175  mux.append(ord(payload['mux_setting_0_tdaq']))
176  mux.append(ord(payload['mux_setting_1_tdaq']))
177  adccalib=ord(payload['ADCCalibMode'])
178  if run > 493743: # hardcoded, first run when this info was filled
179  fw=ord(payload['ttype_mask_A'])
180  except Exception:
181  mlog_LRF.warning("No information in /LAR/Configuration/RunLogDT for run %i", run)
182  mlog_LRF.warning("Using defaults: MUX0: ADC MUX1: ET_ID receipe: at0_bc5-at1_bc1_ts1-q")
183  recipe="at0_bc5-at1_bc1_ts1-q"
184  recipePEB=''
185  mux.append(0)
186  mux.append(3)
187 
188  runDB.closeDatabase()
189  sTypes, sLengths = parse_recipe(recipe,mux,mlog_LRF)
190  sTypesPEB, sLengthsPEB = parse_recipe(recipePEB,mux,mlog_LRF)
191  return LArDTRunInfo(sTypes, sLengths, sTypesPEB, sLengthsPEB, timing, adccalib, fw)
192 
193 # command line driver for convenience
194 if __name__=='__main__':
195  import sys
196  if len(sys.argv)!=2:
197  print("Syntax",sys.argv[0],'<run>')
198  sys.exit(-1)
199  run=int(sys.argv[1])
200  myformat=getLArFormatForRun(run, connstring="COOLONL_LAR/CONDBR2")
201  if (myformat is not None):
202  print(" LAr run configuration: Nsamples:%d GainType:%d Latency:%d FirstSample:%d Format:%s runType:%s" % (myformat.nSamples(),myformat.gainType(),myformat.latency(),myformat.firstSample(),myformat.stringFormat(),myformat.stringRunType()))
203  else:
204  print(" LAr run information not available")
205 
206  myformat1=getLArDTInfoForRun(run, connstring="COOLONL_LAR/CONDBR2")
207  if (myformat1 is not None):
208  print(" LAr DT run configuration: timing:%s adccalib:%d" % (myformat1.timing(),myformat1.ADCCalib()))
209  for i in range(0,len(myformat1.streamTypes())):
210  print(" stream: %s size: %d" % (myformat1.streamTypes()[i], myformat1.streamLengths()[i]))
211  else:
212  print(" LAr DT run information not available")
python.LArRunFormat.LArDTRunInfo._fwversion
_fwversion
Definition: LArRunFormat.py:103
python.LArRunFormat.LArDTRunInfo._adcc
_adcc
Definition: LArRunFormat.py:102
python.LArRunFormat.LArRunInfo.nSamples
def nSamples(self)
Definition: LArRunFormat.py:19
python.LArRunFormat.LArRunInfo._runType
_runType
Definition: LArRunFormat.py:17
python.LArRunFormat.LArDTRunInfo.FWversion
def FWversion(self)
Definition: LArRunFormat.py:123
python.LArRunFormat.LArRunInfo.gainType
def gainType(self)
Definition: LArRunFormat.py:23
python.LArRunFormat.LArDTRunInfo
Definition: LArRunFormat.py:94
python.LArRunFormat.LArDTRunInfo._sLengthsPEB
_sLengthsPEB
Definition: LArRunFormat.py:100
python.LArRunFormat.LArDTRunInfo._tim
_tim
Definition: LArRunFormat.py:101
python.LArRunFormat.LArRunInfo.firstSample
def firstSample(self)
Definition: LArRunFormat.py:31
python.LArRunFormat.LArDTRunInfo.streamTypes
def streamTypes(self)
Definition: LArRunFormat.py:105
python.LArRunFormat.LArDTRunInfo.streamLengthsPEB
def streamLengthsPEB(self)
Definition: LArRunFormat.py:114
python.LArRunFormat.LArRunInfo
Definition: LArRunFormat.py:9
python.LArRunFormat.LArDTRunInfo.streamLengths
def streamLengths(self)
Definition: LArRunFormat.py:108
python.LArRunFormat.LArRunInfo.stringRunType
def stringRunType(self)
Definition: LArRunFormat.py:51
python.LArRunFormat.LArDTRunInfo.timing
def timing(self)
Definition: LArRunFormat.py:117
python.LArRunFormat.getLArDTInfoForRun
def getLArDTInfoForRun(run, quiet=False, connstring="COOLONL_LAR/CONDBR2")
Definition: LArRunFormat.py:153
python.LArRunFormat.LArRunInfo.runType
def runType(self)
Definition: LArRunFormat.py:39
python.LArRunFormat.LArRunInfo.stringFormat
def stringFormat(self)
Definition: LArRunFormat.py:43
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.LArRunFormat.LArRunInfo._latency
_latency
Definition: LArRunFormat.py:14
python.LArRunFormat.LArDTRunInfo.ADCCalib
def ADCCalib(self)
Definition: LArRunFormat.py:120
python.LArRunFormat.LArDTRunInfo._sTypes
_sTypes
Definition: LArRunFormat.py:97
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
python.LArRunFormat.parse_recipe
def parse_recipe(recipe, mux, mlog)
Definition: LArRunFormat.py:126
python.LArRunFormat.LArRunInfo.latency
def latency(self)
Definition: LArRunFormat.py:27
python.LArRunFormat.LArDTRunInfo._sTypesPEB
_sTypesPEB
Definition: LArRunFormat.py:99
python.LArRunFormat.getLArFormatForRun
def getLArFormatForRun(run, quiet=False, connstring="COOLONL_LAR/CONDBR2")
Definition: LArRunFormat.py:60
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.LArRunFormat.LArRunInfo._firstSample
_firstSample
Definition: LArRunFormat.py:15
python.LArRunFormat.LArRunInfo._format
_format
Definition: LArRunFormat.py:16
python.LArRunFormat.LArRunInfo.format
def format(self)
Definition: LArRunFormat.py:35
python.LArRunFormat.LArRunInfo._nSamples
_nSamples
Definition: LArRunFormat.py:12
python.LArRunFormat.LArRunInfo._gainType
_gainType
Definition: LArRunFormat.py:13
python.AtlCoolLib.indirectOpen
def indirectOpen(coolstr, readOnly=True, debug=False)
Definition: AtlCoolLib.py:129
python.LArRunFormat.LArDTRunInfo.streamTypesPEB
def streamTypesPEB(self)
Definition: LArRunFormat.py:111
python.LArRunFormat.LArDTRunInfo._sLengths
_sLengths
Definition: LArRunFormat.py:98
python.LArRunFormat.LArRunInfo.__init__
def __init__(self, nSamples, gainType, latency, firstSample, format, runType)
Definition: LArRunFormat.py:11
python.LArRunFormat.LArDTRunInfo.__init__
def __init__(self, streamTypes, streamLengths, streamTypesPEB, streamLengthsPEB, timing, adccalib, fw)
Definition: LArRunFormat.py:96