7 from array 
import array
 
    9 import python_tools 
as pt
 
   11 parser = argparse.ArgumentParser()
 
   12 parser.add_argument(
'--infile', type=str, help=
'input file')
 
   13 parser.add_argument(
'--outdir', type=str, help=
'output directory')
 
   14 parser.add_argument(
'--usemu', action=
'store_true', help=
'Plot vs. mu. Default == LB')
 
   16 args = parser.parse_args()
 
   17 infilename = args.infile
 
   25     dfz = pd.read_csv(infilename, delimiter=
",")
 
   27         print(
'No data in file', infilename, 
', exiting.')
 
   30     run_number = dfz.RunNum[0]
 
   31     lhc_fill   = dfz.FillNum[0]
 
   33     EffTrig = channel + 
'EffTrig' 
   34     EffReco = channel + 
'EffReco' 
   35     ErrTrig = channel + 
'ErrTrig' 
   36     ErrReco = channel + 
'ErrReco' 
   38     dfz = dfz.drop(dfz[(dfz[channel+
'Lumi'] == 0)].index)
 
   39     dfz = dfz.drop(dfz[(dfz[
'LBLive']<pt.lblivetimecut) | (dfz[
'PassGRL']==0)].index)
 
   41         print(
"No valid LBs found. Exiting")
 
   45         channel_string = 
"Z#kern[-0.5]{ }#rightarrow#kern[-0.5]{ }ee" 
   47         leg = R.TLegend(0.7, 0.7, 0.85, 0.9)
 
   50     elif channel == 
"Zmumu": 
 
   51         channel_string = 
"Z#kern[-0.5]{ }#rightarrow#kern[-0.5]{ }#mu#mu" 
   55         leg = R.TLegend(0.7, 0.55, 0.85, 0.75)
 
   57         print(
"Wrong channel, exit.")
 
   66     for index, event 
in dfz.iterrows():
 
   68             pileup = 
int(event.OffMu)
 
   70             pileup = (event.LBNum // 20)*20
 
   72         if event[ErrTrig] == 0.0 
or event[ErrReco] == 0.0: 
 
   75         weight_trig = 1/
pow(event[ErrTrig], 2)
 
   76         weight_reco = 1/
pow(event[ErrReco], 2)
 
   77         if pileup 
not in dict_mu: 
 
   78             dict_mu[pileup] = pileup
 
   79             dict_trig[pileup] = weight_trig * event[EffTrig]
 
   80             dict_reco[pileup] = weight_reco * event[EffReco]
 
   81             dict_trig_err[pileup] = weight_trig 
 
   82             dict_reco_err[pileup] = weight_reco 
 
   84             dict_trig[pileup] += weight_trig * event[EffTrig]
 
   85             dict_reco[pileup] += weight_reco * event[EffReco]
 
   86             dict_trig_err[pileup] += weight_trig 
 
   87             dict_reco_err[pileup] += weight_reco 
 
   90     vec_trig_err = 
array(
'd')
 
   92     vec_reco_err = 
array(
'd')
 
   96         print(
"File "+infilename+ 
" has no filled lumi blocks!")
 
   99     for pileup 
in dict_mu:
 
  100         trig_weighted_average = dict_trig[pileup]/dict_trig_err[pileup]
 
  101         trig_error = sqrt(1/dict_trig_err[pileup])
 
  102         vec_trig.append(trig_weighted_average)
 
  103         vec_trig_err.append(trig_error)
 
  105         reco_weighted_average = dict_reco[pileup]/dict_reco_err[pileup]
 
  106         reco_error = sqrt(1/dict_reco_err[pileup])
 
  107         vec_reco.append(reco_weighted_average)
 
  108         vec_reco_err.append(reco_error)
 
  110         vec_mu.append(pileup)
 
  112     trig_graph = R.TGraphErrors(len(vec_trig), vec_mu, vec_trig, R.nullptr, vec_trig_err)
 
  113     trig_graph.GetHistogram().SetYTitle(
"Efficiency")
 
  114     trig_graph.GetHistogram().GetYaxis().SetRangeUser(ymin, 1.0)
 
  115     trig_graph.SetMarkerSize(1)
 
  117     reco_graph = R.TGraphErrors(len(vec_reco), vec_mu, vec_reco, R.nullptr, vec_reco_err)
 
  118     reco_graph.GetHistogram().GetYaxis().SetRangeUser(ymin, 1.0)
 
  119     reco_graph.SetMarkerSize(1)
 
  120     reco_graph.SetMarkerStyle(21)
 
  121     reco_graph.SetMarkerColor(R.kRed)
 
  122     reco_graph.SetLineColor(R.kRed)
 
  125     leg.SetTextSize(0.07)
 
  126     leg.AddEntry(reco_graph, 
"#varepsilon_{reco}^{single-"+lep+
"}", 
"ep")
 
  127     leg.AddEntry(trig_graph, 
"#varepsilon_{trig}^{single-"+lep+
"}", 
"ep")
 
  130     trig_graph.Draw(
"ap")
 
  133     pt.drawAtlasLabel(0.2, ylabel, 
"Internal")
 
  134     pt.drawText(0.2, ylabel-0.05, pt.get_yearsqrtstxt(run_number), size=22)
 
  135     pt.drawText(0.2, ylabel-0.1, 
"LHC Fill " + 
str(lhc_fill), size=22)
 
  136     pt.drawText(0.2, ylabel-0.15, channel_string + 
" counting", size=22)
 
  140         trig_graph.GetHistogram().SetXTitle(
"<#mu>")
 
  141         c1.SaveAs(outdir+
"/"+channel+
"_eff_vs_mu.pdf")
 
  143         trig_graph.GetHistogram().SetXTitle(
"Luminosity Block Number")
 
  144         c1.SaveAs(outdir+
"/"+channel+
"_eff_vs_lb.pdf")
 
  146 if __name__ == 
"__main__":
 
  147     R.gROOT.SetBatch(R.kTRUE)