diff --git a/DataQuality/DataQualityTools/scripts/dqt_zlumi_alleff_HIST.py b/DataQuality/DataQualityTools/scripts/dqt_zlumi_alleff_HIST.py deleted file mode 100755 index 8682ab42229a547f1f313b944e91a7b6fa61b933..0000000000000000000000000000000000000000 --- a/DataQuality/DataQualityTools/scripts/dqt_zlumi_alleff_HIST.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -import sys, glob -import ROOT - -ROOT.gStyle.SetOptStat(0) - -ACCEPTANCE = 3.173927e-01 - -import argparse -parser = argparse.ArgumentParser() -parser.add_argument('infile', type=str, help='input HIST file') -parser.add_argument('--out', type=str, help='output ROOT file') - -args = parser.parse_args() - -infilename = args.infile -infile = ROOT.TFile.Open(infilename, 'READ') - -rundir = None -for k in infile.GetListOfKeys(): - if k.GetName().startswith('run_'): - rundir = k.GetName() - break -if not rundir: - print 'Cannot find run directory in input file' - sys.exit(1) -else: - print 'Found rundir', rundir - -lbdirs = [] -for k in infile.Get(rundir).GetListOfKeys(): - if k.GetName().startswith('lb_'): - lbdirs.append(k.GetName()) - -print 'Now to dump' -lbnums = sorted([int(_[3:]) for _ in lbdirs]) - -effcyt = ROOT.TH1F('effcyt', 'Trigger efficiency', lbnums[-1]-lbnums[0]+1, lbnums[0]-0.5, - lbnums[-1]+0.5) -effcyr = ROOT.TH1F('effcyr', 'Loose muon reco efficiency', lbnums[-1]-lbnums[0]+1, lbnums[0]-0.5, - lbnums[-1]+0.5) -effcya = ROOT.TH1F('effcya', 'Combined acc x efficiency', lbnums[-1]-lbnums[0]+1, lbnums[0]-0.5, - lbnums[-1]+0.5) -effcydir = ROOT.TH1F('effcydir', 'Direct acc x efficiency', lbnums[-1]-lbnums[0]+1, lbnums[0]-0.5, - lbnums[-1]+0.5) - -from array import array -fout = ROOT.TFile(args.out if args.out else '%s_all.root' % rundir[4:], 'RECREATE') -o_run = array('I', [0]) -o_lb = array('I', [0]) -o_lbwhen = array('d', [0., 0.]) -o_z_one = array('f', [0.]) -o_z_two = array('f', [0.]) -o_trigeff = array('f', [0.]) -o_trigeffstat = array('f', [0.]) -o_recoeff = array('f', [0.]) -o_recoeffstat = array('f', [0.]) -o_alleff = array('f', [0.]) -o_alleffstat = array('f', [0.]) -o_ae = array('f', [0.]) -o_aestat = array('f', [0.]) -tl = ROOT.TTree( 'lumitree', 'Luminosity tree' ) -tl.Branch('run', o_run, 'run/i') -tl.Branch('lb', o_lb, 'lb/i') -tl.Branch('lbwhen', o_lbwhen, 'lbwhen[2]/D') -tl.Branch('z_one', o_z_one, 'z_one/F') -tl.Branch('z_two', o_z_two, 'z_two/F') -tl.Branch('trigeff', o_trigeff, 'trigeff/F') -tl.Branch('trigeffstat', o_trigeffstat, 'trigeffstat/F') -tl.Branch('recoeff', o_recoeff, 'recoeff/F') -tl.Branch('recoeffstat', o_recoeffstat, 'recoeffstat/F') -tl.Branch('alleff', o_alleff, 'alleff/F') -tl.Branch('alleffstat', o_alleffstat, 'alleffstat/F') -tl.Branch('ae', o_ae, 'ae/F') -tl.Branch('aestat', o_aestat, 'aestat/F') - - -from DQUtils import fetch_iovs -#rset=set(_[0] for _ in rlb) -#print rset -lblb = fetch_iovs("LBLB", runs=int(rundir[4:])).by_run -for lb in sorted(lbdirs): - h = infile.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_mutrigtp_matches' % (rundir, lb)) - hmo = infile.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_match_os' % (rundir, lb)) - hms = infile.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_match_ss' % (rundir, lb)) - hno = infile.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_nomatch_os' % (rundir, lb)) - hns = infile.Get('%s/%s/GLOBAL/DQTGlobalWZFinder/m_muloosetp_nomatch_ss' % (rundir, lb)) - lbnum = int(lb[3:]) - yld = (h[2], h[3]) - ylderr = (h.GetBinError(2), h.GetBinError(3)) - #print yld, ylderr - A, B = yld - o_z_one[0], o_z_two[0] = yld - if B == 0: continue - eff = 1./(float(A)/B/2.+1.) - inverrsq = ((1/2./B)*ylderr[0])**2+((A/2./B**2)*ylderr[1])**2 - o_trigeff[0] = eff - o_trigeffstat[0] = (inverrsq**.5)*(eff**2) - o_run[0], o_lb[0] = int(rundir[4:]), lbnum - try: - iov = lblb[int(rundir[4:])][lbnum-1] - o_lbwhen[0], o_lbwhen[1] = iov.StartTime/1e9, iov.EndTime/1e9 - except Exception, e: - o_lbwhen[0], o_lbwhen[1] = 0, 0 - effcyt.SetBinContent(lbnum-lbnums[0]+1, eff) - effcyt.SetBinError(lbnum-lbnums[0]+1, o_trigeffstat[0]) - - def extract(histogram): - dbl = ROOT.Double() - rv1 = histogram.IntegralAndError(21, 30, dbl) - return (rv1, float(dbl)) - matchos, matchoserr = extract(hmo) - matchss, matchsserr = extract(hms) - nomatchos, nomatchoserr = extract(hno) - nomatchss, nomatchsserr = extract(hns) - print lb - print ' ->', matchos, matchoserr - print ' ->', matchss, matchsserr - print ' ->', nomatchos, nomatchoserr - print ' ->', nomatchss, nomatchsserr - A = float(matchos-matchss) - Aerr = (matchoserr**2+matchsserr**2)**.5 - B = float(nomatchos-nomatchss) - Berr = (nomatchoserr**2+nomatchsserr**2)**.5 - if B == 0: Berr = 1. - if A == 0: - eff = 1. - inverrsq = 1. - else: - eff = 1./(1.+B/A) - inverrsq = ((-B/A**2)*Aerr)**2+((1./A)*Berr)**2 - o_recoeff[0] = eff - o_recoeffstat[0] = (inverrsq**.5)*(eff**2) - effcyr.SetBinContent(lbnum-lbnums[0]+1, eff) - effcyr.SetBinError(lbnum-lbnums[0]+1, o_recoeffstat[0]) - - o_ae[0] = ACCEPTANCE*(1-(1-o_trigeff[0])**2)*(o_recoeff[0])**2 - o_aestat[0] = ACCEPTANCE*((o_recoeff[0]**2*2*(1-o_trigeff[0])*o_trigeffstat[0])**2+(2*o_recoeff[0]*(1-(1-o_trigeff[0])**2)*o_recoeffstat[0])**2)**.5 - o_alleff[0] = (1-(1-o_trigeff[0])**2)*(o_recoeff[0])**2 - o_alleffstat[0] = ((o_recoeff[0]**2*2*(1-o_trigeff[0])*o_trigeffstat[0])**2+(2*o_recoeff[0]*(1-(1-o_trigeff[0])**2)*o_recoeffstat[0])**2)**.5 - effcya.SetBinContent(lbnum-lbnums[0]+1, o_ae[0]) - effcya.SetBinError(lbnum-lbnums[0]+1, o_aestat[0]) - - - tl.Fill() -tl.Write() -print 'Done' - -c1 = ROOT.TCanvas() -effcya.SetMarkerStyle(21) -effcya.SetMarkerColor(ROOT.kBlue) -effcya.GetYaxis().SetRangeUser(0.27,0.29) -effcya.Draw('PE') -c1.Print('%s_combined_efficiency.eps' % rundir) -fout.WriteTObject(effcya) -fout.Close() - -sumweights = infile.Get('%s/GLOBAL/DQTDataFlow/m_sumweights' % rundir) -ctr = infile.Get('%s/GLOBAL/DQTGlobalWZFinder/m_Z_Counter_mu' % rundir) -if sumweights: - for ibin in xrange(1,sumweights.GetNbinsX()+1): - o_lb[0] = int(sumweights.GetBinCenter(ibin)) - ctrbin = ctr.FindBin(o_lb[0]) - print ibin, o_lb[0], sumweights[ibin], ctr[ctrbin] - if sumweights[ibin] == 0: continue - p = ctr[ctrbin]/sumweights[ibin] - o_alleff[0]=p - try: - o_alleffstat[0]=(p*(1-p))**.5*(sumweights.GetBinError(ibin)/sumweights[ibin]) - except ValueError: - o_alleffstat[0]=(sumweights.GetBinError(ibin)/sumweights[ibin]) - effcydir.SetBinContent(effcydir.FindBin(o_lb[0]), p) - effcydir.SetBinError(effcydir.FindBin(o_lb[0]), o_alleffstat[0]) - - effcya.GetYaxis().SetRangeUser(0.27,0.31) - effcya.Draw('PE') - effcydir.SetMarkerStyle(20) - effcydir.SetMarkerColor(ROOT.kRed) - effcydir.Draw('SAME,PE') - leg=ROOT.TLegend(0.65, 0.7, 0.89, 0.89) - leg.AddEntry(effcya, 'Predicted A#epsilon', 'PE') - leg.AddEntry(effcydir, 'Actual A#epsilon', 'PE') - leg.Draw() - c1.Print('%s_tp_comparison.eps' % rundir) - - effcyrat=effcydir.Clone() - effcyrat.Divide(effcya) - effcyrat.SetTitle('MC Correction Factor') - effcyrat.SetXTitle('<#mu>') - effcyrat.Draw('PE') - effcyrat.Fit('pol1') - c1.Print('%s_tp_correction.eps' % rundir) diff --git a/DataQuality/DataQualityTools/scripts/dqt_zlumi_combine_lumi.py b/DataQuality/DataQualityTools/scripts/dqt_zlumi_combine_lumi.py deleted file mode 100755 index 95a5b307bd1f223cd096654011d44205a433a180..0000000000000000000000000000000000000000 --- a/DataQuality/DataQualityTools/scripts/dqt_zlumi_combine_lumi.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -import ROOT -import sys - -import argparse -parser = argparse.ArgumentParser() -parser.add_argument('recofile', type=str, help='File with per-LB yields') -parser.add_argument('efffile', type=str, help='File with efficiencies') -parser.add_argument('outfile', type=str, help='Output file') -parser.add_argument('--nlb', type=int, help='# of LBs to combine', - default=20) -args = parser.parse_args() - -recozfname = args.recofile -effzfname = args.efffile -outfname = args.outfile - -LUMIBLOCKS = args.nlb -ACCEPTANCE = 3.173927e-01 -ZXSEC=1.929 -ZPURITYFACTOR=0.9935 - -def correction(mu): - #return 1.04589-0.000158187*mu - return 1.04524-0.000108956*mu - #return 1.04589-0.000158187*20 - -recozfile = ROOT.TFile.Open(recozfname) -effzfile = ROOT.TFile.Open(effzfname) - -recoztree = recozfile.lumitree -effztree = effzfile.lumitree - -entrydict = {} - -for i in xrange(recoztree.GetEntries()): - recoztree.GetEntry(i) - if not recoztree.pass_grl: continue - # If livetime less than 10 sec, ignore - if recoztree.lblive < 10 : continue - effztree.Draw('alleff:alleffstat', 'run==%s&&lb==%s' % (recoztree.run, recoztree.lb), 'goff') - if effztree.GetSelectedRows() == 0: - print 'Broken for run, lb %s %s' % (recoztree.run, recoztree.lb) - print 'We THINK there are %d events here ...' % (recoztree.zraw) - continue - lbzero = (recoztree.lb // LUMIBLOCKS)*LUMIBLOCKS - run = recoztree.run - if (run, lbzero) not in entrydict: entrydict[(run, lbzero)] = {'zcount': 0., 'zcounterrsq': 0., 'livetime': 0., 'lbwhen': [-1, -1], 'mu': 0., 'offlumi': 0., 'rolleff': 0., 'rollefferrsq': 0., 'lhcfill': recoztree.lhcfill} - thisdict = entrydict[(run, lbzero)] - effcy = (effztree.GetV1()[0]*correction(recoztree.mu)) - #thisdict['zcount'] += recoztree.zraw/effcy - #thisdict['zcounterrsq'] += (1/effcy*recoztree.zrawstat)**2+(recoztree.zraw/effcy**2*effztree.GetV2()[0])**2 - thisdict['zcount'] += recoztree.zraw - thisdict['zcounterrsq'] += recoztree.zrawstat**2 - effcywght = (effztree.GetV2()[0]*correction(recoztree.mu))**2 - thisdict['rolleff'] += effcy/effcywght - thisdict['rollefferrsq'] += 1/effcywght - loclivetime = recoztree.lblive - #loclivetime = (recoztree.lbwhen[1]-recoztree.lbwhen[0]) - thisdict['livetime'] += loclivetime - thisdict['mu'] += recoztree.mu*loclivetime - thisdict['offlumi'] += recoztree.offlumi*loclivetime - if thisdict['lbwhen'][0] > recoztree.lbwhen[0] or thisdict['lbwhen'][0] == -1: - thisdict['lbwhen'][0] = recoztree.lbwhen[0] - if thisdict['lbwhen'][1] < recoztree.lbwhen[1] or thisdict['lbwhen'][1] == -1: - thisdict['lbwhen'][1] = recoztree.lbwhen[1] - -from array import array - -fout = ROOT.TFile.Open(outfname, 'RECREATE') -o_run = array('I', [0]) -o_lb = array('I', [0]) -o_lbwhen = array('d', [0., 0.]) -o_zrate = array('f', [0.]) -o_zratestat = array('f', [0.]) -o_zlumi = array('f', [0.]) -o_zlumistat = array('f', [0.]) -o_mu = array('f', [0.]) -o_alleffcorr = array('f', [0.]) -o_alleffcorrstat = array('f', [0.]) -o_offlumi = array('f', [0.]) -o_lblive = array('f', [0.]) -o_lhcfill = array('I', [0]) -t = ROOT.TTree( 'lumitree', 'Luminosity tree' ) -t.Branch('run', o_run, 'run/i') -t.Branch('lb', o_lb, 'lb/i') -t.Branch('lbwhen', o_lbwhen, 'lbwhen[2]/D') -t.Branch('zrate', o_zrate, 'zrate/F') -t.Branch('zratestat', o_zratestat, 'zratestat/F') -t.Branch('zlumi', o_zlumi, 'zlumi/F') -t.Branch('zlumistat', o_zlumistat, 'zlumistat/F') -t.Branch('offlumi', o_offlumi, 'offlumi/F') -t.Branch('mu', o_mu, 'mu/F') -t.Branch('alleffcorr', o_alleffcorr, 'alleffcorr/F') -t.Branch('alleffcorrstat', o_alleffcorrstat, 'alleffcorrstat/F') -t.Branch('lblive', o_lblive, 'lblive/F') -t.Branch('lhcfill', o_lhcfill, 'lhcfill/i') - -for entry, entryval in sorted(entrydict.items()): - if entryval['livetime'] > 0: - entryval['mu'] /= entryval['livetime'] - entryval['offlumi'] /= entryval['livetime'] - eff = entryval['rolleff']/entryval['rollefferrsq'] - efferr = 1/entryval['rollefferrsq']**.5 - #print 'LIVETIME2', entryval['livetime'] - entryval['zrate'] = entryval['zcount']/eff/entryval['livetime'] - entryval['zratestat'] = (entryval['zcounterrsq']/eff + (entryval['zcount']/eff**2*efferr)**2)**.5/entryval['livetime'] - o_run[0], o_lb[0] = entry - o_lbwhen[0], o_lbwhen[1] = entryval['lbwhen'] - o_zrate[0] = entryval['zrate'] - o_zratestat[0] = entryval['zratestat'] - o_zlumi[0] = o_zrate[0]*ZPURITYFACTOR/ACCEPTANCE/ZXSEC - o_zlumistat[0] = o_zratestat[0]*ZPURITYFACTOR/ACCEPTANCE/ZXSEC - o_mu[0] = entryval['mu'] - o_alleffcorr[0] = eff - o_alleffcorrstat[0] = efferr - o_offlumi[0] = entryval['offlumi'] - o_lblive[0] = entryval['livetime'] - o_lhcfill[0] = entryval['lhcfill'] - if o_zlumi[0] < 4 or o_zlumi[0] > 15: - print o_lb[0], o_zlumi[0], entryval['zcount'], eff, entryval['livetime'] - t.Fill() -t.Write() -fout.Close() - diff --git a/DataQuality/DataQualityTools/scripts/dqt_zlumi_display_z_rate.py b/DataQuality/DataQualityTools/scripts/dqt_zlumi_display_z_rate.py deleted file mode 100755 index 145bccccbfda3d22a503976bce0cf2ca4e6a051e..0000000000000000000000000000000000000000 --- a/DataQuality/DataQualityTools/scripts/dqt_zlumi_display_z_rate.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -import ROOT -import sys - -runnum = sys.argv[1].split('_')[0] -f = ROOT.TFile.Open(sys.argv[1], 'UPDATE') -c1 = ROOT.TCanvas() -lumitree = f.lumitree -lumitree.Draw("zrate:lb+10:zratestat", "", "goff") -print 'Selected rows', lumitree.GetSelectedRows() -if lumitree.GetSelectedRows() > 0: - gr = ROOT.TGraphErrors(lumitree.GetSelectedRows(), lumitree.GetV2(), lumitree.GetV1(), ROOT.nullptr, lumitree.GetV3()) - gr.Draw("ap") - gr.GetHistogram().SetXTitle('LB') - gr.GetHistogram().SetYTitle('Fiducial Z yield/second') - gr.SetMarkerStyle(20) - gr.SetTitle('') - f.WriteTObject(gr, 'fid_z_rate') - c1.Update() - c1.Print('%s_fidyield.eps' % runnum) - -# dump CSV -import time -csvout = open('%s_zrate.csv' % runnum, 'w') -lumitree.Draw("zrate:lbwhen[0]:lbwhen[1]:lhcfill:lblive:offlumi", "", "goff,para") -timeformat = '%y/%m/%d %H:%M:%S' -#timeformat = '%m/%d %H:%M:%S' -for i in xrange(lumitree.GetSelectedRows()): - zrate = lumitree.GetV1()[i] - instlumi = lumitree.GetVal(5)[i] - livetime = lumitree.GetVal(4)[i] - print >>csvout, '%d, %s, %s, %6f, %6f, %4f, %6f' % (lumitree.GetV4()[i], - time.strftime(timeformat, time.gmtime(lumitree.GetV2()[i])), - time.strftime(timeformat, time.gmtime(lumitree.GetV3()[i])), - lumitree.GetV1()[i], - instlumi/1e3, - instlumi*livetime/1e3, - lumitree.GetV1()[i]*livetime - ) -csvout.close() - -lumitree.Draw("zlumi:lb+10:zlumistat", "", "goff") -if lumitree.GetSelectedRows() > 0: - gr = ROOT.TGraphErrors(lumitree.GetSelectedRows(), lumitree.GetV2(), lumitree.GetV1(), ROOT.nullptr, lumitree.GetV3()) - gr.Draw("ap") - gr.GetHistogram().SetXTitle('LB') - gr.GetHistogram().SetYTitle('Luminosity (x10^{33})') - gr.SetMarkerStyle(20) - gr.SetTitle('') - f.WriteTObject(gr, 'z_lumi') - lumitree.Draw("offlumi:lb+10", "", "goff") - gr2 = ROOT.TGraphErrors(lumitree.GetSelectedRows(), lumitree.GetV2(), lumitree.GetV1()) - gr2.SetMarkerStyle(21) - gr2.SetMarkerSize(0.5) - gr2.SetMarkerColor(ROOT.kRed) - gr2.Draw('same,pl') - f.WriteTObject(gr, 'official_lumi') - leg = ROOT.TLegend(0.65, 0.7, 0.89, 0.89) - leg.SetBorderSize(0) - leg.AddEntry(gr, 'Z luminosity', 'pl') - leg.AddEntry(gr2, '-005 calibration', 'pl') - leg.Draw() - c1.Update() - c1.Print('%s_lumicomp.eps' % runnum) - f.WriteTObject(c1, 'lumicomp_canvas') diff --git a/DataQuality/DataQualityTools/scripts/dqt_zlumi_compute_lumi.py b/DataQuality/ZLumiScripts/scripts/dqt_zlumi_compute_lumi.py similarity index 100% rename from DataQuality/DataQualityTools/scripts/dqt_zlumi_compute_lumi.py rename to DataQuality/ZLumiScripts/scripts/dqt_zlumi_compute_lumi.py