Esempio n. 1
0
def q2mumu(args, figname):
    datatype = args[0]
    label = args[1]
    test = get_options(args, "test")
    batch = get_options(args, "batch")

    if batch:
        cmd = create_batch_cmd()
        bashname = "%s.sh" % figname
        bashfile = create_bashfile_cmd(cmd, bashname, label, test=test)
        logfile = set_logfile("fig", datatype, label, figname)
        jobname = "effq2mm"
        bsub_jobs(logfile, jobname, bashfile, test)
        return

    figfile = set_figfile(figname, label, ".pdf", test=test)
    rootfile = atr.rootfile(datatype, label, test=test)
    obj = atr.root_tree_obj(datatype, label)
    chain = root_chain(rootfile, obj)

    canvas = TCanvas("aCanvas", "Canvas", 600, 600)
    # h_mm_gen = TH1F('mumumass_gen', '#mu^{+} #mu^{-} mass', 100, 0, 25)
    # h_mm_reco = TH1F('mumumass_reco', '#mu^{+} #mu^{-} mass', 100, 0, 25)
    lower = array("f", [0, 2, 4.3, 8.68, 10.09, 12.86, 14.18, 16, 19, 25])

    h_mm_gen = TH1F("mumumass_gen", "#mu^{+} #mu^{-} mass", 9, lower)
    h_mm_reco = TH1F("mumumass_reco", "#mu^{+} #mu^{-} mass", 9, lower)

    if "B2KstarMuMu/RECO_100M_v1.1" in label:
        Gen_muonPos_P4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("Gen_muonPos_P4", AddressOf(Gen_muonPos_P4_))
        Gen_muonNeg_P4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("Gen_muonNeg_P4", AddressOf(Gen_muonNeg_P4_))

        MuPP4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("MuPP4", AddressOf(MuPP4_))
        MuMP4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("MuMP4", AddressOf(MuMP4_))

        KstarP4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("KstarP4", AddressOf(KstarP4_))

    elif (
        "B2KstarMuMu/RECO_100M_v1.2" in label
        or "B2KstarMuMu/RECO_100M_v1.4" in label
        or "B2KstarMuMu/RECO_100M_v1.5" in label
    ):
        Gen_muonPos_P4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("Gen_muonPos_P4", AddressOf(Gen_muonPos_P4_))
        Gen_muonNeg_P4_ = TClonesArray("TLorentzVector")
        chain.SetBranchAddress("Gen_muonNeg_P4", AddressOf(Gen_muonNeg_P4_))

        reco_mup_p4_ = TLorentzVector()
        chain.SetBranchAddress("reco_mup_p4", AddressOf(reco_mup_p4_))

        reco_mum_p4_ = TLorentzVector()
        chain.SetBranchAddress("reco_mum_p4", AddressOf(reco_mum_p4_))

    else:
        raise NameError(label)

    ntot = chain.GetEntries()
    if test:
        ntot = 1000

    if (
        "B2KstarMuMu/RECO_100M_v1.2" in label
        or "B2KstarMuMu/RECO_100M_v1.4" in label
        or "B2KstarMuMu/RECO_100M_v1.5" in label
    ):
        cuts_label = "5ifbv2.6.2"
        cuts = select_b0s(cuts_label)

    sys.stdout.write("Processing %s events ...\n" % ntot)
    sys.stdout.flush()

    nfill_gen = 0
    nfill_reco = 0

    for i in xrange(ntot):
        chain.LoadTree(i)
        chain.GetEntry(i)

        if len(chain.Gen_muonPos_P4) > 0:
            mup4_gen = chain.Gen_muonPos_P4[0]
            mum4_gen = chain.Gen_muonNeg_P4[0]
            try:
                mumu_gen = mup4_gen + mum4_gen
            except TypeError:

                continue
            h_mm_gen.Fill(mumu_gen.M2())
            nfill_gen += 1

        if "/HLT" in label and not cuts.pass_trigger(chain):
            continue

        if "OfflineHLT" in label and not chain.offline_hlt_passed:
            continue

        if "MCmatched" in label and not chain.mc_matched:
            continue

        if "B2KstarMuMu/RECO_100M_v1.1" in label and chain.nXcand > 0:
            if label in ["B2KstarMuMu/RECO_100M_v1.1/Kstar"] and not cuts.pass_kstarmass(chain, 0):
                continue

            if label in ["B2KstarMuMu/RECO_100M_v1.1/lxysig"] and not cuts.pass_lxysig(chain, 0):
                continue

            mup4 = chain.MuPP4[0]
            mum4 = chain.MuMP4[0]
            mumu = mup4 + mum4
            h_mm_reco.Fill(mumu.M2())
            nfill_reco += 1

        if "B2KstarMuMu/RECO_100M_v1.2" in label:
            mup4 = chain.reco_mup_p4
            mum4 = chain.reco_mum_p4
            mumu = mup4 + mum4
            h_mm_reco.Fill(mumu.M2())
            nfill_reco += 1

        if "B2KstarMuMu/RECO_100M_v1.4" in label or "B2KstarMuMu/RECO_100M_v1.5" in label:
            h_mm_reco.Fill(mumu_gen.M2())
            nfill_reco += 1

    sys.stdout.write("Filled events: GEN: %s, RECO: %s. \n" % (nfill_gen, nfill_reco))

    hist = h_mm_reco
    hist.Divide(h_mm_gen)

    hist.SetTitle("RECO Efficiency")
    hist.GetXaxis().SetTitle("q^{2} (GeV^{2}/c^{2})")
    hist.Draw()
    canvas.SaveAs(figfile)
    hist.Delete()
Esempio n. 2
0
def q2mumu(args, figname):
    datatype = args[0]
    label = args[1]
    test = get_options(args, 'test')
    batch = get_options(args, 'batch')

    if batch:
        cmd = create_batch_cmd()
        bashname = '%s.sh' % figname
        bashfile = create_bashfile_cmd(cmd, bashname, label, test=test)
        logfile = set_logfile('fig', datatype, label, figname)
        jobname = 'effq2mm'
        bsub_jobs(logfile, jobname, bashfile, test)
        return

    figfile = set_figfile(figname, label, '.pdf', test=test)
    rootfile = atr.rootfile(datatype, label, test=test)
    obj = atr.root_tree_obj(datatype, label)
    chain = root_chain(rootfile, obj)

    canvas = TCanvas("aCanvas", "Canvas", 600, 600)
    #h_mm_gen = TH1F('mumumass_gen', '#mu^{+} #mu^{-} mass', 100, 0, 25)
    #h_mm_reco = TH1F('mumumass_reco', '#mu^{+} #mu^{-} mass', 100, 0, 25)
    lower = array('f', [0, 2, 4.3, 8.68, 10.09, 12.86, 14.18, 16, 19, 25])

    h_mm_gen = TH1F('mumumass_gen', '#mu^{+} #mu^{-} mass', 9, lower)
    h_mm_reco = TH1F('mumumass_reco', '#mu^{+} #mu^{-} mass', 9, lower)

    if 'B2KstarMuMu/RECO_100M_v1.1' in label:
        Gen_muonPos_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonPos_P4', AddressOf(Gen_muonPos_P4_))
        Gen_muonNeg_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonNeg_P4', AddressOf(Gen_muonNeg_P4_))

        MuPP4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('MuPP4', AddressOf(MuPP4_))
        MuMP4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('MuMP4', AddressOf(MuMP4_))

        KstarP4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('KstarP4', AddressOf(KstarP4_))

    elif 'B2KstarMuMu/RECO_100M_v1.2' in label or \
        'B2KstarMuMu/RECO_100M_v1.4' in label or \
        'B2KstarMuMu/RECO_100M_v1.5' in label:
        Gen_muonPos_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonPos_P4', AddressOf(Gen_muonPos_P4_))
        Gen_muonNeg_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonNeg_P4', AddressOf(Gen_muonNeg_P4_))

        reco_mup_p4_ = TLorentzVector()
        chain.SetBranchAddress('reco_mup_p4', AddressOf(reco_mup_p4_))

        reco_mum_p4_ = TLorentzVector()
        chain.SetBranchAddress('reco_mum_p4', AddressOf(reco_mum_p4_))

    else:
        raise NameError(label)

    ntot = chain.GetEntries()
    if test:
        ntot = 1000

    if  'B2KstarMuMu/RECO_100M_v1.2' in label or \
        'B2KstarMuMu/RECO_100M_v1.4' in label or \
        'B2KstarMuMu/RECO_100M_v1.5' in label:
        cuts_label = '5ifbv2.6.2'
        cuts = select_b0s(cuts_label)

    sys.stdout.write('Processing %s events ...\n' % ntot)
    sys.stdout.flush()

    nfill_gen = 0
    nfill_reco = 0

    for i in xrange(ntot):
        chain.LoadTree(i)
        chain.GetEntry(i)

        if len(chain.Gen_muonPos_P4) > 0:
            mup4_gen = chain.Gen_muonPos_P4[0]
            mum4_gen = chain.Gen_muonNeg_P4[0]
            try:
                mumu_gen = mup4_gen + mum4_gen
            except TypeError:

                continue
            h_mm_gen.Fill(mumu_gen.M2())
            nfill_gen += 1

        if '/HLT' in label and not cuts.pass_trigger(chain):
            continue

        if 'OfflineHLT' in label and not chain.offline_hlt_passed:
            continue

        if 'MCmatched' in label and not chain.mc_matched:
            continue

        if 'B2KstarMuMu/RECO_100M_v1.1' in label and chain.nXcand > 0:
            if label in ['B2KstarMuMu/RECO_100M_v1.1/Kstar'] and \
                not cuts.pass_kstarmass(chain, 0):
                continue

            if label in ['B2KstarMuMu/RECO_100M_v1.1/lxysig'] and \
                not cuts.pass_lxysig(chain, 0):
                continue

            mup4 = chain.MuPP4[0]
            mum4 = chain.MuMP4[0]
            mumu = mup4 + mum4
            h_mm_reco.Fill(mumu.M2())
            nfill_reco += 1

        if 'B2KstarMuMu/RECO_100M_v1.2' in label:
            mup4 = chain.reco_mup_p4
            mum4 = chain.reco_mum_p4
            mumu = mup4 + mum4
            h_mm_reco.Fill(mumu.M2())
            nfill_reco += 1

        if 'B2KstarMuMu/RECO_100M_v1.4' in label or \
            'B2KstarMuMu/RECO_100M_v1.5' in label:
            h_mm_reco.Fill(mumu_gen.M2())
            nfill_reco += 1

    sys.stdout.write('Filled events: GEN: %s, RECO: %s. \n' %
                     (nfill_gen, nfill_reco))

    hist = h_mm_reco
    hist.Divide(h_mm_gen)

    hist.SetTitle('RECO Efficiency')
    hist.GetXaxis().SetTitle('q^{2} (GeV^{2}/c^{2})')
    hist.Draw()
    canvas.SaveAs(figfile)
    hist.Delete()
Esempio n. 3
0
def output_evt_mass_b0(chain, datatype, label, job, test=False, pbar=False):
    selfile = set_selfile(datatype, label, 'tree', job=job, test=test)

    f = TFile.Open(selfile, 'RECREATE')
    t = TTree('sel', 'sel')

    s = SelTree(t)

    cuts = select_b0s(label)

    pass_trigger = cuts.pass_trigger  
    pass_b0s = cuts.pass_b0s
    pass_jpsimass = cuts.pass_jpsimass
    pass_psi2smass = cuts.pass_psi2smass

    nsel = 0 
    ntot = 0

    xp4_ = TClonesArray('TLorentzVector')
    chain.SetBranchAddress('xP4', AddressOf(xp4_))

    kstarp4_ = TClonesArray('TLorentzVector')
    chain.SetBranchAddress('KstarP4', AddressOf(kstarp4_))

    entries = chain.GetEntries()
    if test:
        entries = 3000

    if pbar:
        pb = get_progressbar(maxval=entries)

    for i in xrange(entries):
        ntot += 1
        if pbar:
            pb.update(i+1)
            
        ientry = chain.LoadTree(i)
        if ientry < 0:
            break

        nb = chain.GetEntry(i)
        if nb <= 0:
            continue

        if not pass_trigger(chain):
            continue

        chain.LoadTree(i)
        chain.GetEntry(i)

        b0s = pass_b0s(chain)
        if b0s == []:
            continue

        s.run[0] = chain.runNb
        s.event[0] = chain.eventNb

        #nb0 = 0
        #nj = 0
        #np = 0 
        #nout = 0 
        for i in b0s:
            #nb0 += 1 
            b0p4 = chain.xP4[i]
            kstarp4 = chain.KstarP4[i]
            oniap4 = b0p4 - kstarp4

            s.b0mass[0] = b0p4.M()
            s.oniamass[0] = oniap4.M()

            s.b0massinjpsi[0] = 0 
            s.b0massinpsi2s[0] = 0
            s.b0massout[0] = 0
            
            if pass_jpsimass(oniap4.M()):
                s.b0massinjpsi[0] = b0p4.M()
                #nj += 1 
            elif pass_psi2smass(oniap4.M()):
                s.b0massinpsi2s[0] = b0p4.M()
                #np += 1
            else:
                s.b0massout[0] = b0p4.M()
                #nout += 1

        #print '%s + %s + %s = %s' %(nj, np, nout, nb0)

        t.Fill()
        nsel += 1
        if nsel > 100 and test:
            break

    f.Write()
    f.Close()

    if pbar:
        pb.finish()

    return ntot, nsel, selfile 
Esempio n. 4
0
def mup(args, figname):
    datatype = args[0]
    label = args[1]
    test = get_options(args, 'test')
    batch = get_options(args, 'batch')

    if batch:
        cmd = create_batch_cmd()
        bashname = '%s.sh' %figname
        bashfile = create_bashfile_cmd(cmd, bashname, label, test=test)
        logfile = set_logfile('fig', datatype, label, figname)
        jobname = 'figptmu'
        bsub_jobs(logfile, jobname, bashfile, test)
        return

    figfile = set_figfile(figname, label, '.pdf', test=test)
    rootfile = atr.rootfile(datatype, label, test=test)

    obj = atr.root_tree_obj(datatype, label)
    chain = root_chain(rootfile, obj)

    canvas = TCanvas("aCanvas", "Canvas", 600, 600)
    hist = TH1F('mupt', '#mu^{+} p_{T}', 100, 0, 20)

    if  'B2KstarMuMu/RECO_100M_v1.1' in label or \
        'B2KstarMuMu/RECO_100M_v1.2' in label:
        Gen_muonPos_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonPos_P4', AddressOf(Gen_muonPos_P4_))
        
        MuPP4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('MuPP4', AddressOf(MuPP4_))

    if 'B2KstarMuMu/RECO_100M_v1.3' in label or \
        'B2KstarMuMu/RECO_100M_v1.4' in label or \
        'B2KstarMuMu/RECO_100M_v1.5' in label:
        Gen_muonPos_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonPos_P4', AddressOf(Gen_muonPos_P4_))
        Gen_muonNeg_P4_ = TClonesArray('TLorentzVector')
        chain.SetBranchAddress('Gen_muonNeg_P4', AddressOf(Gen_muonNeg_P4_))

        reco_mup_p4_ = TLorentzVector()
        chain.SetBranchAddress('reco_mup_p4', AddressOf(reco_mup_p4_))

        reco_mum_p4_ = TLorentzVector()
        chain.SetBranchAddress('reco_mum_p4', AddressOf(reco_mum_p4_))
    
    ntot = chain.GetEntries()
    if test:
        ntot = 1000

    if label in ['B2KstarMuMu/RECO_100M_v1.1/HLT',
                 'B2KstarMuMu/RECO_100M_v1.2/HLT',
                 'B2KstarMuMu/RECO_100M_v1.3/HLT',
                 'B2KstarMuMu/RECO_100M_v1.3/MCmatched/HLT',
                 'B2KstarMuMu/RECO_100M_v1.4/MCmatched/HLT',
                 'B2KstarMuMu/RECO_100M_v1.5/MCmatched/OfflineHLT',
                 ]:
        cuts_label = '5ifbv2.6.2'
        cuts = select_b0s(cuts_label)
        
    sys.stdout.write('Processing %s events ...\n' %ntot)
    sys.stdout.flush()
    nfill = 0 
    for i in xrange(ntot):
        chain.LoadTree(i)
        chain.GetEntry(i)

        if label in ['B2KstarMuMu/RECO_100M_v1.1/HLT',
                     'B2KstarMuMu/RECO_100M_v1.2/HLT',
                     'B2KstarMuMu/RECO_100M_v1.3/HLT',
                     'B2KstarMuMu/RECO_100M_v1.3/MCmatched/HLT', 
                     'B2KstarMuMu/RECO_100M_v1.4/MCmatched/HLT',
                     ] and \
                     not cuts.pass_trigger(chain):
           continue

        if label in ['B2KstarMuMu/RECO_100M_v1.5/MCmatched/OfflineHLT',
                     ] and \
                     not chain.offline_hlt_passed:
           continue

        if 'GEN' in label:
            if 'B2KstarMuMu/RECO_100M_v1.5' in label:
                # need others if necessary for backward compatibility.
                mup4 = chain.Gen_muonPos_P4[0]
            elif 'B2KstarMuMu/RECO_100M_v1.6' in label:
                mup4 = TVector3(chain.genMupPx, chain.genMupPy, chain.genMupPz)

            else:
                raise NameError(label)
                
            
        if 'MCmatched' in label and not chain.mc_matched:
            continue

        if 'B2KstarMuMu/RECO_100M_v1.1' in label:
            if chain.nXcand <= 0:
                continue
            mup4 = chain.MuPP4[0]
            
        if 'B2KstarMuMu/RECO_100M_v1.2' in label or \
            'B2KstarMuMu/RECO_100M_v1.3' in label or \
            'B2KstarMuMu/RECO_100M_v1.4' in label or \
            'B2KstarMuMu/RECO_100M_v1.5' in label:
            mup4 = chain.reco_mup_p4

        hist.Fill(mup4.Pt())
        nfill += 1
        
    sys.stdout.write('Filled %s events. \n' %nfill)
    hist.GetXaxis().SetTitle('p_{T} (GeV/c)')
    hist.Draw()
    canvas.SaveAs(figfile)
    hist.Delete()