ATLAS Offline Software
dqt_zlumi_pandas.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 
4 import numpy as np
5 import csv
6 from array import array
7 import ROOT
8 import sys, os
9 import logging
10 import argparse
11 import math
12 from DQUtils import fetch_iovs
13 from DQUtils.iov_arrangement import inverse_lblb
14 import ZLumiScripts.tools.zlumi_alleff as dq_eff
15 import ZLumiScripts.tools.zlumi_mc_cf as dq_cf
16 
17 
18 from DataQualityUtils import doZLumi
19 
20 # testing toy sampling
21 import ZLumiScripts.tools.toys as toys
22 
23 ROOT.gROOT.SetBatch(ROOT.kTRUE)
24 ROOT.gStyle.SetOptStat(0)
25 
26 logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
27 
28 parser = argparse.ArgumentParser()
29 parser.add_argument('--infile', type=str, help='input HIST file')
30 parser.add_argument('--grl', type=str, help='Specify an input GRL')
31 parser.add_argument('--tag', type=str, help='Lumi tag', default='OflLumiAcct-Run3-003')
32 parser.add_argument('--useofficial', action='store_true', help='Use official lumi folder (otherwise, use OflLumiAcct')
33 parser.add_argument('--lumifolder', type=str, help='Lumi folder', default='/TRIGGER/OFLLUMI/OflPrefLumi')
34 parser.add_argument('--lumitag', type=str, help='Lumi tag', default='OflLumi-Run3-003')
35 parser.add_argument('--outdir', type=str, help='Directory to dump plots', default='plots')
36 parser.add_argument('--dblivetime', action='store_true', help='Look up livetime from DB')
37 parser.add_argument('--campaign', type=str, help='mc16a/d/e, mc21, mc23a')
38 
39 args = parser.parse_args()
40 campaign = args.campaign
41 
42 ZPURITYFACTOR = 0.9935
43 if args.campaign in ["mc21", "mc23a"]:
44  ZXSEC = 2.0675
45 else:
46  ZXSEC = 1.929
47 
48 zee_missing_lbs = []
49 zmumu_missing_lbs = []
50 
51 ntoys = 10000000
52 do_toys = False
53 
54 fin = ROOT.TFile.Open(args.infile)
55 runname = None
56 for key in fin.GetListOfKeys():
57  if key.GetName().startswith('run_'):
58  runname = key.GetName()
59  runnumber = int(runname.replace('run_',''))
60  break
61 
62 if not runname:
63  logging.critical("Can't find run_* directory in input file %s", args.infile)
64  sys.exit(1)
65 
66 print("Starting HIST to CSV conversion for Run ", runnumber)
67 
68 if args.outdir:
69  out_dir = args.outdir
70  os.system("mkdir -p " + out_dir)
71  out_dir += "/" + runname + ".csv"
72 else:
73  out_dir = runname + ".csv"
74 
75 if args.campaign in ["mc21", "mc23a"]:
76  lb_length_name = '%s/GLOBAL/DQTGlobalWZFinder/duration_vs_LB' % runname
77  livetime_name = '%s/GLOBAL/DQTGlobalWZFinder/avgLiveFrac_vs_LB' % runname
78 else:
79  lb_length_name = '%s/GLOBAL/DQTGlobalWZFinder/m_lblength_lb' % runname
80  livetime_name = '%s/GLOBAL/DQTGlobalWZFinder/m_livetime_lb' % runname
81 
82 
83 if args.grl:
84  grlReader = ROOT.Root.TGoodRunsListReader(args.grl)
85  grlReader.Interpret()
86  grl = grlReader.GetMergedGRLCollection()
87 else:
88  grlname = 'grl_'+str(runnumber)+'.xml'
89  grl_file = doZLumi.makeGRL(runnumber, 'PHYS_StandardGRL_All_Good', grlname)
90 
91 lb_length_old = fin.Get(lb_length_name)
92 lbmin, lbmax = lb_length_old.FindFirstBinAbove(0, 1, 0, -1), lb_length_old.FindLastBinAbove(0, 1, 0, -1)
93 lb_length = ROOT.TProfile('lb_length', 'LB length', int(lbmax-lbmin), lbmin, lbmax)
94 
95 for i in range(lbmin, lbmax):
96  lb_length.Fill(i, lb_length_old.GetBinContent(i))
97 
98 logging.info('low, high LBs: %s, %s', lbmin, lbmax)
99 
100 if args.dblivetime:
101  logging.info('Starting livetime lookup ... (remove when we have a proper in-file implementation ...)')
102  livetime = ROOT.TProfile('livetime', 'Livetime', int(lbmax-lbmin), lbmin, lbmax)
103 else:
104  livetime = fin.Get(livetime_name)
105 
106 official_lum_zero = ROOT.TProfile('official_lum_zero', 'official inst luminosity', int(lbmax-lbmin), lbmin, lbmax)
107 official_mu = ROOT.TProfile('official_mu', 'official mu', int(lbmax-lbmin), lbmin, lbmax)
108 
109 lblb = fetch_iovs("LBLB", runs=runnumber)
110 lbtime = inverse_lblb(lblb)
111 iovs_acct = fetch_iovs('COOLOFL_TRIGGER::/TRIGGER/OFLLUMI/LumiAccounting', lbtime.first.since, lbtime.last.until, tag=args.tag)
112 
113 if args.useofficial:
114  print("Using official lumitag", args.lumitag)
115  iovs_lum = fetch_iovs('COOLOFL_TRIGGER::%s' % args.lumifolder, lblb.first.since, lblb.last.until, tag=args.lumitag, channels=[0])
116 
117 lb_start_end = {}
118 lb_lhcfill = {}
119 for iov in lblb:
120  lb_start_end[iov.since & 0xffffffff] = (iov.StartTime/1e9, iov.EndTime/1e9)
121 
122 for iov in iovs_acct:
123  if not lbmin-1 < iov.LumiBlock < lbmax:
124  continue
125  lb_lhcfill[iov.LumiBlock] = iov.FillNumber
126  if args.dblivetime:
127  livetime.Fill(iov.LumiBlock, iov.LiveFraction)
128 
129  if not args.useofficial:
130  official_lum_zero.Fill(iov.LumiBlock, iov.InstLumi/1e3)
131  official_mu.Fill(iov.LumiBlock, iov.AvEvtsPerBX)
132  else:
133  offlumiov = [_ for _ in iovs_lum if _.since.lumi==iov.LumiBlock]
134  if len(offlumiov) != 1:
135  print('MAJOR PROBLEM, LUMI IOV MISMATCH', iov.LumiBlock)
136  continue
137 
138  offlumiov = offlumiov[0]
139  official_lum_zero.Fill(iov.LumiBlock, offlumiov.LBAvInstLumi/1e3)
140  official_mu.Fill(iov.LumiBlock, offlumiov.LBAvEvtsPerBX)
141 
142 lb_full = lb_length.Clone('lb_full').ProjectionX()
143 divisor = lb_length.Clone('divisor').ProjectionX()
144 px = livetime.ProjectionX()
145 divisor.Multiply(px)
146 
147 # Get run-wise electron channel histos outside of loop
148 # Also do the container efficiency bkg fit here as it is done
149 # once per run, then normalised to the ratio of LB/run in the function
150 # container_efficiency
151 hto = fin.Get('%s/GLOBAL/DQTGlobalWZFinder/m_ele_template_os' % (runname))
152 hts = fin.Get('%s/GLOBAL/DQTGlobalWZFinder/m_ele_template_ss' % (runname))
153 
154 # ==== Set signal region == 0, then fit ====
155 # hphotontotal = fin.Get("%s/GLOBAL/DQTGlobalWZFinder/m_elContainertp_nomatch" % (runname))
156 # hphotontotal.GetXaxis().SetRangeUser(66000, 250000)
157 # h_fit = hphotontotal.Clone()
158 # for xbin in range(1, h_fit.GetNbinsX()+1):
159 # mass = h_fit.GetBinLowEdge(xbin)
160 # if mass > 75000 and mass < 100000:
161 # h_fit.SetBinContent(xbin, 0)
162 # h_fit.SetBinError(xbin, 0)
163 # h_fit.Fit("pol2", "q")
164 
165 
166 o_recoeff_fit = {}
167 o_recoerr_fit = {}
168 # Do electron channel reco eff calculation once,
169 # then apply iterative correction to bkg subtraction in the main loop
170 lb_minus_one_reco_eff = [1.0, 1.0, 1.0]
171 for ibin in range(1, int(lbmax-lbmin)+1):
172  this_lb = int(lb_full.GetBinCenter(ibin))
173  lb = "lb_" + str(this_lb)
174  pileup = round(official_mu[ibin])
175 
176  hmo = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_good_os' % (runname, lb))
177  hms = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_good_ss' % (runname, lb))
178  hno = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_bad_os' % (runname, lb))
179  hns = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_bad_ss' % (runname, lb))
180 
181  try:
182  eff, err = dq_eff.template_method(hmo, hms, hno, hns, hto, hts, False, lb_minus_one_reco_eff) # do_scale set to false here as we are calculating it, when applying set True (next loop)
183  lb_minus_one_reco_eff = [eff, err, this_lb]
184  except AttributeError:
185  eff = 0
186  err = 0
187 
188  if err != 0 and eff != 0:
189  weight = 1/pow(err, 2)
190  if pileup not in o_recoeff_fit:
191  o_recoeff_fit[pileup] = weight * eff
192  o_recoerr_fit[pileup] = weight
193  else:
194  o_recoeff_fit[pileup] += weight * eff
195  o_recoerr_fit[pileup] += weight
196 
197 arr_rec_eff = array('d')
198 arr_rec_err = array('d')
199 arr_mu = array('d')
200 
201 for pileup in o_recoeff_fit:
202  arr_mu.append(float(pileup))
203  arr_rec_eff.append(o_recoeff_fit[pileup]/o_recoerr_fit[pileup])
204  arr_rec_err.append(1/pow(o_recoerr_fit[pileup], 0.5))
205 
206 # If no pileup data is available, add dummy entry with all parameters set to 1
207 
208 if len(arr_mu) == 0:
209  arr_mu.append(1)
210  arr_rec_eff.append(1)
211  arr_rec_err.append(1)
212 
213 tg_fit = ROOT.TGraphErrors(len(arr_mu), arr_mu, arr_rec_eff, ROOT.nullptr, arr_rec_err)
214 if len(o_recoeff_fit) == 0 or len(o_recoeff_fit) == 1:
215  fit_type = "pol0"
216 elif len(o_recoeff_fit) == 2:
217  fit_type = "pol1"
218 elif len(o_recoeff_fit) > 2:
219  fit_type = "pol2"
220 
221 tg_fit.Fit(fit_type, "q")
222 
223 csvfile = open(out_dir, 'w')
224 csvwriter = csv.writer(csvfile, delimiter=',')
225 csvwriter.writerow(['FillNum','RunNum','LBNum','LBStart','LBEnd','LBLive','LBFull','OffLumi','OffMu', 'PassGRL',
226  'ZeeRaw','ZeeRawErr','ZeeN1','ZeeN2','ZeeEffTrig','ZeeErrTrig','ZeeEffReco','ZeeErrReco','ZeeEffComb','ZeeErrComb','ZeeEffAComb','ZeeErrAComb','ZeeDefTrig','ZeeDefReco','ZeeLumi','ZeeLumiErr','ZeeRate',
227  'ZmumuRaw','ZmumuRawErr','ZmumuN1','ZmumuN2','ZmumuEffTrig','ZmumuErrTrig','ZmumuEffReco','ZmumuErrReco','ZmumuEffComb','ZmumuErrComb','ZmumuEffAComb','ZmumuErrAComb','ZmumuDefTrig','ZmumuDefReco','ZmumuLumi','ZmumuLumiErr','ZmumuRate',
228  'ZllLumi','ZllLumiErr'])
229 
230 lb_minus_one_reco_eff = {}
231 lb_minus_one_reco_eff["Zee"] = [1.0, 1.0, 1]
232 lb_minus_one_reco_eff["Zmumu"] = [1.0, 1.0, 1]
233 
234 lb_minus_one_trig_eff = {}
235 lb_minus_one_trig_eff["Zee"] = [1.0, 1.0, 1]
236 lb_minus_one_trig_eff["Zmumu"] = [1.0, 1.0, 1]
237 
238 bad_database = False
239 
240 for ibin in range(1, int(lbmax-lbmin)+1):
241  out_dict = {}
242  out_dict["Zee"] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
243  out_dict["Zmumu"] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
244 
245  this_lb = int(lb_full.GetBinCenter(ibin))
246  loclivetime = divisor[ibin]
247  # some ad-hoc Run 2 corrections
248  if runnumber == 302831 and this_lb < 11:
249  loclivetime = 0
250  elif runnumber == 329835 and this_lb < 554:
251  loclivetime = 0
252  elif runnumber == 310247 and (this_lb == 442 or this_lb == 462):
253  loclivetime = 0
254  elif runnumber == 281385 and this_lb < 197:
255  loclivetime *= 4.0/6.0
256  elif runnumber == 281385 and this_lb < 375:
257  loclivetime *= 5.0/6.0
258  elif runnumber == 286367:
259  loclivetime *= 5.0/6.0
260 
261  try:
262  this_fill = lb_lhcfill[this_lb]
263  except KeyError:
264  bad_database = True
265  this_fill = "NA"
266 
267  passgrl = 1
268  for channel in ["Zee", "Zmumu"]:
269  if grl and not grl.HasRunLumiBlock(runnumber, this_lb):
270  passgrl = 0
271  continue
272  # at less than 9s LB livetime: all Z counting zeroed
273  if loclivetime < 9:
274  continue
275 
276  lb = "lb_" + str(this_lb)
277  if channel == 'Zee':
278  # Nominal signal histogram
279  hname = runname + '/lb_'+str(int(ibin+lbmin-0.5))+'/GLOBAL/DQTGlobalWZFinder/m_Z_mass_opsele'
280 
281  # Tag-and-probe histos
282  h = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_eltrigtp_matches_os' % (runname, lb))
283  hmo = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_good_os' % (runname, lb))
284  hms = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_good_ss' % (runname, lb))
285  hno = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_bad_os' % (runname, lb))
286  hns = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_bad_ss' % (runname, lb))
287  #hphoton = fin.Get("%s/%s/GLOBAL/DQTGlobalWZFinder/m_elContainertp_nomatch" % (runname, lb))
288  #hpass = fin.Get("%s/%s/GLOBAL/DQTGlobalWZFinder/m_ele_tight_passkine" % (runname, lb))
289  #hphoton.GetXaxis().SetRangeUser(66000, 250000)
290  #hpass.GetXaxis().SetRangeUser(66000, 250000)
291  if args.campaign in ["mc21", "mc23a"]:
292  ACCEPTANCE = 0.2971
293  else:
294  ACCEPTANCE = 0.2996
295  elif channel == 'Zmumu':
296  # Nominal signal histogram
297  hname = runname + '/lb_'+str(int(ibin+lbmin-0.5))+'/GLOBAL/DQTGlobalWZFinder/m_Z_mass_opsmu'
298 
299  # Tag-and-probe histos
300  h = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_mutrigtp_matches' % (runname, lb))
301  hmo = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_match_os' % (runname, lb))
302  hms = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_match_ss' % (runname, lb))
303  hno = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_nomatch_os' % (runname, lb))
304  hns = fin.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_nomatch_ss' % (runname, lb))
305  if args.campaign in ["mc21", "mc23a"]:
306  ACCEPTANCE = 0.3292
307  else:
308  ACCEPTANCE = 0.3323224
309 
310  try:
311  z_m = fin.Get(hname).Integral()
312  z_merr = math.sqrt(z_m)
313  except AttributeError:
314  if channel == "Zee":
315  zee_missing_lbs.append(this_lb)
316  elif channel == "Zmumu":
317  zmumu_missing_lbs.append(this_lb)
318 
319  continue
320 
321 
322  N1 = N2 = 0
323  try:
324  N1 = h.GetBinContent(2)
325  N2 = h.GetBinContent(3)
326  if do_toys:
327  eff_trig, err_trig, arr_trig, arr_NZ = toys.toy_trigeff(N1, N2, ntoys)
328  else:
329  eff_trig, err_trig = dq_eff.trig_tag_and_probe(h, lb_minus_one_trig_eff[channel])
330  except TypeError:
331  eff_trig, err_trig = 0.0, 0.0
332  except AttributeError:
333  eff_trig, err_trig = 0.0, 0.0
334  if channel == "Zmumu":
335  try:
336  bin1 = hmo.GetXaxis().FindBin(86000)
337  bin2 = hmo.GetXaxis().FindBin(95000)
338  if do_toys:
339  eff_reco, err_reco, arr_reco = toys.muon_toy_recoeff(hmo.Integral(bin1, bin2), hms.Integral(bin1, bin2), hno.Integral(bin1, bin2), hns.Integral(bin1, bin2), ntoys)
340  else:
341  eff_reco, err_reco = dq_eff.reco_tag_and_probe(hmo, hms, hno, hns, lb_minus_one_reco_eff[channel])
342  except TypeError:
343  eff_reco, err_reco = 0.0, 0.0
344  except AttributeError:
345  eff_reco, err_reco = 0.0, 0.0
346  elif channel == "Zee":
347  try:
348  if do_toys:
349  bin1 = hmo.GetXaxis().FindBin(75000)
350  bin2 = hmo.GetXaxis().FindBin(104000)
351  bin3 = hmo.GetXaxis().FindBin(120000)
352  bin4 = hmo.GetXaxis().FindBin(250000)
353  matchos_peak = hmo.Integral(bin1, bin2)
354  matchos_tail = hmo.Integral(bin3, bin4)
355  matchss_tail = hms.Integral(bin3, bin4)
356  nomatchos_peak = hno.Integral(bin1, bin2)
357  nomatchos_tail = hno.Integral(bin3, bin4)
358  templateos_peak = hto.Integral(bin1, bin2)
359  templateos_tail = hto.Integral(bin3, bin4)
360  templatess_tail = hts.Integral(bin3, bin4)
361  eff_reco, err_reco, arr_reco = toys.electron_toy_recoeff(matchos_peak, matchos_tail, matchss_tail, nomatchos_peak, nomatchos_tail, templateos_peak, templateos_tail, templatess_tail, ntoys)
362  else:
363  eff_reco, err_reco = dq_eff.template_method(hmo, hms, hno, hns, hto, hts, True, lb_minus_one_reco_eff[channel], tg_fit.GetFunction(fit_type).Eval(official_mu[ibin]))
364 
365  except TypeError:
366  eff_reco, err_reco = 0.0, 0.0
367  except AttributeError:
368  eff_reco, err_reco = 0.0, 0.0
369 
370  #dq_eff.container_efficiency(hphoton, hphotontotal, h_fit, hpass, hto, hts)
371 
372 
373  defaulted_reco_eff = 0
374  defaulted_trig_eff = 0
375  if eff_reco == lb_minus_one_reco_eff[channel][0]:
376  defaulted_reco_eff = 1
377  if eff_trig == lb_minus_one_trig_eff[channel][0]:
378  defaulted_trig_eff = 1
379 
380  if eff_reco != 0.0:
381  lb_minus_one_reco_eff[channel] = [eff_reco, err_reco, this_lb]
382  if eff_trig != 0.0:
383  lb_minus_one_trig_eff[channel] = [eff_trig, err_trig, this_lb]
384 
385  if do_toys:
386  arr_comb = (1.0 - (1.0 - arr_trig)**2) * (arr_reco)**2
387  nonan_arr_comb = arr_comb[~np.isnan(arr_comb)]
388  eff_comb = np.median(nonan_arr_comb)
389  err_comb = nonan_arr_comb.std()
390  else:
391  eff_comb = (1-(1-eff_trig)**2)*(eff_reco)**2
392  err_comb = ((eff_reco**2*2*(1-eff_trig)*err_trig)**2+(2*eff_reco*(1-(1-eff_trig)**2)*err_reco)**2)**.5
393 
394  eff_Acomb = ACCEPTANCE * eff_comb
395  err_Acomb = ACCEPTANCE * err_comb
396 
397  if do_toys:
398  effcy = arr_comb * dq_cf.correction(official_mu[ibin], channel, campaign, runnumber)
399  else:
400  effcy = eff_comb * dq_cf.correction(official_mu[ibin], channel, campaign, runnumber)
401  effcyerr = err_comb * dq_cf.correction(official_mu[ibin], channel, campaign, runnumber)
402 
403  zlumi = zlumistat = zrate = 0.0
404  CORRECTIONS = ZPURITYFACTOR/ACCEPTANCE/ZXSEC
405 
406  if do_toys and loclivetime != 0.0:
407  arr_zlumi = np.divide(arr_NZ, effcy) * (CORRECTIONS)/loclivetime
408  arr_zlumi = arr_zlumi[~np.isnan(arr_zlumi)]
409  zlumi = np.median(arr_zlumi)
410  zlumistat = arr_zlumi.std()
411  zrate = zlumi / CORRECTIONS
412  elif (loclivetime != 0.0 and effcy != 0.0):
413  zlumi = (z_m/effcy)*(CORRECTIONS)/loclivetime
414  zlumistat = math.sqrt(pow(z_merr/effcy, 2) + pow(z_m/effcy**2*effcyerr, 2))*CORRECTIONS/loclivetime
415  zrate = zlumi / CORRECTIONS
416 
417 
418  out_dict[channel] = [z_m, z_merr, N1, N2, eff_trig, err_trig, eff_reco, err_reco, eff_comb, err_comb, eff_Acomb, err_Acomb, defaulted_trig_eff, defaulted_reco_eff, zlumi, zlumistat, zrate]
419 
420  lumi_index = len(out_dict['Zee'])-3
421  error_index = len(out_dict['Zee'])-2
422  zll_lumi = (out_dict['Zee'][lumi_index] + out_dict['Zmumu'][lumi_index])/2
423  zll_lumi_err = 0.5 * math.sqrt( pow(out_dict['Zee'][error_index], 2) + pow(out_dict['Zmumu'][error_index], 2) )
424  try:
425  lb_start, lb_end = lb_start_end[this_lb][0], lb_start_end[this_lb][1]
426  except KeyError:
427  lb_start, lb_end = 0, 0
428  print("WARNING: database not filled completely for LB", this_lb)
429  out_write = [this_fill, runnumber, this_lb, lb_start, lb_end, loclivetime, lb_full[ibin], official_lum_zero[ibin], official_mu[ibin], passgrl] + out_dict["Zee"] + out_dict["Zmumu"] + [zll_lumi, zll_lumi_err]
430  csvwriter.writerow(out_write)
431 
432 if (len(zee_missing_lbs) > 0 or len(zmumu_missing_lbs) > 0):
433  print("Missing LBs in Zee channel: ", zee_missing_lbs)
434  print("Missing LBs in Zmumu channel: ", zmumu_missing_lbs)
435 
436 if bad_database:
437  print("WARNING: There was an error retrieving information from the lumi database, likely need to update the tags.")
438 
439 csvfile.close()
python.iov_arrangement.inverse_lblb
def inverse_lblb(iovs)
Definition: iov_arrangement.py:34
python.db.fetch_iovs
def fetch_iovs(folder_name, since=None, until=None, channels=None, tag="", what="all", max_records=-1, with_channel=True, loud=False, database=None, convert_time=False, named_channels=False, selection=None, runs=None, with_time=False, unicode_strings=False)
Definition: DQUtils/python/db.py:67
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
RootHelpers::FindBin
Int_t FindBin(const TAxis *axis, const double x)
Definition: RootHelpers.cxx:14
MuonGM::round
float round(const float toRound, const unsigned int decimals)
Definition: Mdt.cxx:27
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
array
Trk::open
@ open
Definition: BinningType.h:40
str
Definition: BTagTrackIpAccessor.cxx:11
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
readCCLHist.float
float
Definition: readCCLHist.py:83