def rm_Dpipi_fill(t, h, mode): for ientry in xrange(t.GetEntries()): t.GetEntry(ientry) if abs(t.m_rawm_D - 1.86965 ) < width(ecms) / 2. and t.m_n_p == 0 and t.m_n_pbar == 0: if not (t.m_n_othertrks <= 3 and t.m_n_othershws <= 6): continue discarded = False for iTrk in range(3): if abs(t.m_Vxy_Dtrks[iTrk]) > 0.55: discarded = True if abs(t.m_Vz_Dtrks[iTrk]) > 3.0: discarded = True if abs(t.m_cos_theta_Dtrks[iTrk]) > 0.93: discarded = True if abs(t.m_Vxy_pip) > 0.55: discarded = True if abs(t.m_Vxy_pim) > 0.55: discarded = True if abs(t.m_Vz_pip) > 3.: discarded = True if abs(t.m_Vz_pim) > 3.: discarded = True if abs(t.m_cos_theta_pip) > 0.93: discarded = True if abs(t.m_cos_theta_pim) > 0.93: discarded = True if mode == 'bkg': if discarded: h.Fill(t.m_rm_Dpipi) if mode == 'after': if not discarded: h.Fill(t.m_rm_Dpipi)
def plot(path, pt_title, ecms): try: f_data = TFile(path[0]) f_sigMC = TFile(path[1]) t_data = f_data.Get('save') t_sigMC = f_sigMC.Get('save') entries_data = t_data.GetEntries() entries_sigMC = t_sigMC.GetEntries() logging.info('data entries :' + str(entries_data)) logging.info('MC(DDPI) entries :' + str(entries_sigMC)) except: logging.error('Files are invalid!') sys.exit() mbc = TCanvas('mbc', 'mbc', 800, 600) set_canvas_style(mbc) if not os.path.exists('./figs/'): os.makedirs('./figs/') h_FOM = cal_significance(t_data, t_sigMC) h_FOM.Draw('col') pt = TPaveText(0.6, 0.6, 0.85, 0.85, "BRNDC") set_pavetext(pt) pt.Draw() pt.AddText(pt_title) D0_W = width('D0') Dm_W = width('Dm') Arr_Dm = TArrow(Dm_W, 0, Dm_W, 0.35, 0.01, '') set_arrow(Arr_Dm, 1) Arr_Dm.Draw() Arr_D0 = TArrow(0, D0_W, 0.3, D0_W, 0.01, '') set_arrow(Arr_D0, 1) Arr_D0.Draw() mbc.RedrawAxis() mbc.Update() mbc.SaveAs('./figs/opt_' + str(ecms) + '_2D.pdf') raw_input('Enter anything to end...')
def rm_Dpipi_fill(t, h, ecms, mode): for ientry in xrange(t.GetEntries()): t.GetEntry(ientry) if abs(t.m_rawm_D - 1.86965) < width(ecms) / 2.: if mode == 'bkg': if t.m_n_p == 0 and t.m_n_pbar == 0: continue if mode == 'after': if not (t.m_n_p == 0 and t.m_n_pbar == 0): continue h.Fill(t.m_rm_Dpipi)
def m_Dm_fill(t, h, Dm_k, D0_k): D0_W = width('D0') D0_signal_low = 1.86483 - D0_W/2. D0_signal_up = 1.86483 + D0_W/2. count = 0 for ientry in xrange(t.GetEntries()): t.GetEntry(ientry) if t.m_Dm_mode == Dm_k and t.m_D0_mode == D0_k: if not (t.m_D0_mass > D0_signal_low and t.m_D0_mass < D0_signal_up): continue h.Fill(t.m_Dm_mass) count += 1 return count
def rm_Dpipi_fill(t, h, mode): for ientry in xrange(t.GetEntries()): t.GetEntry(ientry) if abs(t.m_rawm_D - 1.86965 ) < width(ecms) / 2. and t.m_n_p == 0 and t.m_n_pbar == 0: if mode == 'bkg': if (t.m_n_othertrks <= 3 and t.m_n_othershws <= 6): continue h.Fill(t.m_rm_Dpipi) if mode == 'after': if not (t.m_n_othertrks <= 3 and t.m_n_othershws <= 6): continue h.Fill(t.m_rm_Dpipi)
def save(f_in, t, cms, mode): m_runNo = array('i', [0]) m_evtNo = array('i', [0]) m_indexmc = array('i', [0]) m_trkidx = array('i', 100 * [0]) m_motheridx = array('i', 100 * [0]) m_motherid = array('i', 100 * [0]) m_pdgid = array('i', 100 * [0]) m_D0_mode = array('d', [0]) m_D0_type = array('d', [0]) m_D0_charge = array('i', [0]) m_D0_charm = array('d', [0]) m_D0_numofchildren = array('d', [0]) m_D0_mass = array('d', [0]) m_p_D0 = array('d', [0]) m_E_D0 = array('d', [0]) m_n_D0trks = array('i', [0]) m_n_D0shws = array('i', [0]) m_Dm_mode = array('d', [0]) m_Dm_type = array('d', [0]) m_Dm_charge = array('i', [0]) m_Dm_charm = array('d', [0]) m_Dm_numofchildren = array('d', [0]) m_Dm_mass = array('d', [0]) m_p_Dm = array('d', [0]) m_E_Dm = array('d', [0]) m_n_Dmtrks = array('i', [0]) m_n_Dmshws = array('i', [0]) m_chi2_4c = array('d', [0.]) m_chi2_vf = array('d', [0.]) m_m_D0 = array('d', [0]) m_m_Dm = array('d', [0]) m_chi2_6c = array('d', [0.]) m_m_D0Dm = array('d', [0]) m_m_D0pip = array('d', [0]) m_m_Dmpip = array('d', [0]) m_rm_D0pip = array('d', [0]) m_rm_Dmpip = array('d', [0]) m_p4_D0 = array('d', 4 * [0]) m_p4_Dm = array('d', 4 * [0]) m_p4_pip = array('d', 4 * [0]) m_Rxy_D0trks = array('d', 10 * [999.]) m_Rz_D0trks = array('d', 10 * [999.]) m_cos_D0trks = array('d', 10 * [999.]) m_E_D0shws = array('d', 10 * [999.]) m_dang_D0shws = array('d', 10 * [999.]) m_module_D0shws = array('d', 10 * [999.]) m_T_D0shws = array('d', 10 * [999.]) m_Rxy_Dmtrks = array('d', 10 * [999.]) m_Rz_Dmtrks = array('d', 10 * [999.]) m_cos_Dmtrks = array('d', 10 * [999.]) m_E_Dmshws = array('d', 10 * [999.]) m_dang_Dmshws = array('d', 10 * [999.]) m_module_Dmshws = array('d', 10 * [999.]) m_T_Dmshws = array('d', 10 * [999.]) m_Rxy_pip = array('d', [999.]) m_Rz_pip = array('d', [999.]) m_cos_pip = array('d', [999.]) m_n_pi0 = array('i', [0]) m_n_othershws = array('i', [0]) m_matched_D0trks = array('i', [999]) m_matched_D0shws = array('i', [999]) m_matched_Dmtrks = array('i', [999]) m_matched_Dmshws = array('i', [999]) m_matched_pip = array('i', [999]) m_m_delta = array('d', [0]) m_p_pip = array('d', [0]) m_chi2_svf_D0 = array('d', [999.]) m_ctau_svf_D0 = array('d', [999.]) m_L_svf_D0 = array('d', [999.]) m_Lerr_svf_D0 = array('d', [999.]) m_Lxy_svf_D0 = array('d', [999.]) m_chi2_svf_Dm = array('d', [999.]) m_ctau_svf_Dm = array('d', [999.]) m_L_svf_Dm = array('d', [999.]) m_Lerr_svf_Dm = array('d', [999.]) m_Lxy_svf_Dm = array('d', [999.]) t.Branch('runNo', m_runNo, 'm_runNo/I') t.Branch('evtNo', m_evtNo, 'm_evtNo/I') t.Branch('indexmc', m_indexmc, 'indexmc/I') t.Branch('trkidx', m_trkidx, 'trkidx[100]/I') t.Branch('motheridx', m_motheridx, 'motheridx[100]/I') t.Branch('motherid', m_motherid, 'motherid[100]/I') t.Branch('pdgid', m_pdgid, 'pdgid[100]/I') t.Branch('D0_mode', m_D0_mode, 'm_D0_mode/D') t.Branch('D0_type', m_D0_type, 'm_D0_type/D') t.Branch('D0_charge', m_D0_charge, 'm_D0_charge/I') t.Branch('D0_charm', m_D0_charm, 'm_D0_charm/D') t.Branch('D0_numofchildren', m_D0_numofchildren, 'm_D0_numofchildren/D') t.Branch('D0_mass', m_D0_mass, 'm_D0_mass/D') t.Branch('p_D0', m_p_D0, 'm_p_D0/D') t.Branch('E_D0', m_E_D0, 'm_E_D0/D') t.Branch('n_D0trks', m_n_D0trks, 'm_n_D0trks/D') t.Branch('n_D0shws', m_n_D0shws, 'm_n_D0shws/D') t.Branch('Dm_mode', m_Dm_mode, 'm_Dm_mode/D') t.Branch('Dm_type', m_Dm_type, 'm_Dm_type/D') t.Branch('Dm_charge', m_Dm_charge, 'm_Dm_charge/I') t.Branch('Dm_charm', m_Dm_charm, 'm_Dm_charm/D') t.Branch('Dm_numofchildren', m_Dm_numofchildren, 'm_Dm_numofchildren/D') t.Branch('Dm_mass', m_Dm_mass, 'm_Dm_mass/D') t.Branch('p_Dm', m_p_Dm, 'm_p_Dm/D') t.Branch('E_Dm', m_E_Dm, 'm_E_Dm/D') t.Branch('n_Dmtrks', m_n_Dmtrks, 'm_n_Dmtrks/D') t.Branch('n_Dmshws', m_n_Dmshws, 'm_n_Dmshws/D') t.Branch('chi2_4c', m_chi2_4c, 'm_chi2_4c/D') t.Branch('chi2_vf', m_chi2_vf, 'm_chi2_vf/D') t.Branch('m_D0', m_m_D0, 'm_m_D0/D') t.Branch('m_Dm', m_m_Dm, 'm_m_Dm/D') t.Branch('chi2_6c', m_chi2_6c, 'm_chi2_6c/D') t.Branch('m_D0Dm', m_m_D0Dm, 'm_m_D0Dm/D') t.Branch('m_D0pip', m_m_D0pip, 'm_m_D0pip/D') t.Branch('m_Dmpip', m_m_Dmpip, 'm_m_Dmpip/D') t.Branch('rm_D0pip', m_rm_D0pip, 'm_rm_D0pip/D') t.Branch('rm_Dmpip', m_rm_Dmpip, 'm_rm_Dmpip/D') t.Branch('p4_D0', m_p4_D0, 'm_p4_D0[4]/D') t.Branch('p4_Dm', m_p4_Dm, 'm_p4_Dm[4]/D') t.Branch('p4_pip', m_p4_pip, 'm_p4_pip[4]/D') t.Branch('Rxy_D0trks', m_Rxy_D0trks, 'm_Rxy_D0trks[10]/D') t.Branch('Rz_D0trks', m_Rz_D0trks, 'm_Rz_D0trks[10]/D') t.Branch('cos_D0trks', m_cos_D0trks, 'm_cos_D0trks[10]/D') t.Branch('E_D0shws', m_E_D0shws, 'm_E_D0shws[10]/D') t.Branch('dang_D0shws', m_dang_D0shws, 'm_dang_D0shws[10]/D') t.Branch('module_D0shws', m_module_D0shws, 'm_module_D0shws[10]/D') t.Branch('T_D0shws', m_T_D0shws, 'm_T_D0shws[10]/D') t.Branch('Rxy_Dmtrks', m_Rxy_Dmtrks, 'm_Rxy_Dmtrks[10]/D') t.Branch('Rz_Dmtrks', m_Rz_Dmtrks, 'm_Rz_Dmtrks[10]/D') t.Branch('cos_Dmtrks', m_cos_Dmtrks, 'm_cos_Dmtrks[10]/D') t.Branch('E_Dmshws', m_E_Dmshws, 'm_E_Dmshws[10]/D') t.Branch('dang_Dmshws', m_dang_Dmshws, 'm_dang_Dmshws[10]/D') t.Branch('module_Dmshws', m_module_Dmshws, 'm_module_Dmshws[10]/D') t.Branch('T_Dmshws', m_T_Dmshws, 'm_T_Dmshws[10]/D') t.Branch('Rxy_pip', m_Rxy_pip, 'm_Rxy_pip/D') t.Branch('Rz_pip', m_Rz_pip, 'm_Rz_pip/D') t.Branch('cos_pip', m_cos_pip, 'm_cos_pip/D') t.Branch('n_pi0', m_n_pi0, 'm_n_pi0/I') t.Branch('n_othershws', m_n_othershws, 'm_n_othershws/I') t.Branch('matched_D0trks', m_matched_D0trks, 'm_matched_D0trks/I') t.Branch('matched_D0shws', m_matched_D0shws, 'm_matched_D0shws/I') t.Branch('matched_Dmtrks', m_matched_Dmtrks, 'm_matched_Dmtrks/I') t.Branch('matched_Dmshws', m_matched_Dmshws, 'm_matched_Dmshws/I') t.Branch('matched_pip', m_matched_pip, 'm_matched_pip/I') t.Branch('m_delta', m_m_delta, 'm_m_delta/D') t.Branch('p_pip', m_p_pip, 'm_p_pip/D') t.Branch('chi2_svf_D0', m_chi2_svf_D0, 'm_chi2_svf_D0/D') t.Branch('ctau_svf_D0', m_ctau_svf_D0, 'm_ctau_svf_D0/D') t.Branch('L_svf_D0', m_L_svf_D0, 'm_L_svf_D0/D') t.Branch('Lerr_svf_D0', m_Lerr_svf_D0, 'm_Lerr_svf_D0/D') t.Branch('Lxy_svf_D0', m_Lxy_svf_D0, 'm_Lxy_svf_D0/D') t.Branch('chi2_svf_Dm', m_chi2_svf_Dm, 'm_chi2_svf_Dm/D') t.Branch('ctau_svf_Dm', m_ctau_svf_Dm, 'm_ctau_svf_Dm/D') t.Branch('L_svf_Dm', m_L_svf_Dm, 'm_L_svf_Dm/D') t.Branch('Lerr_svf_Dm', m_Lerr_svf_Dm, 'm_Lerr_svf_Dm/D') t.Branch('Lxy_svf_Dm', m_Lxy_svf_Dm, 'm_Lxy_svf_Dm/D') M_Dm = 1.86965 M_D0 = 1.86483 if mode == 'signal': t_dtd = f_in.Get('DTD_signal') if mode == 'side1_low': t_dtd = f_in.Get('DTD_side1_low') if mode == 'side1_up': t_dtd = f_in.Get('DTD_side1_up') if mode == 'side2_low': t_dtd = f_in.Get('DTD_side2_low') if mode == 'side2_up': t_dtd = f_in.Get('DTD_side2_up') if mode == 'side3_low': t_dtd = f_in.Get('DTD_side3_low') if mode == 'side3_up': t_dtd = f_in.Get('DTD_side3_up') if mode == 'side4_low': t_dtd = f_in.Get('DTD_side4_low') if mode == 'side4_up': t_dtd = f_in.Get('DTD_side4_up') nentries = t_dtd.GetEntries() for ientry in range(nentries): t_dtd.GetEntry(ientry) if t_dtd.D0_mode != 0 and t_dtd.D0_mode != 1 and t_dtd.D0_mode != 3: continue if t_dtd.Dm_mode != 200 and t_dtd.Dm_mode != 201 and t_dtd.Dm_mode != 202 and t_dtd.Dm_mode != 203 and t_dtd.Dm_mode != 204: continue ppip_raw = TLorentzVector(0, 0, 0, 0) ppip_raw.SetPxPyPzE(t_dtd.rawp4_tagPi[0], t_dtd.rawp4_tagPi[1], t_dtd.rawp4_tagPi[2], t_dtd.rawp4_tagPi[3]) E_Dm = 0 pDm_raw = TLorentzVector(0, 0, 0, 0) m_matched_Dmtrks[0] = 1 for iTrk in range(t_dtd.n_Dmtrks): ptrack_raw = TLorentzVector(0, 0, 0, 0) ptrack_raw.SetPxPyPzE(t_dtd.rawp4_Dmtrks[iTrk * 8 + 0], t_dtd.rawp4_Dmtrks[iTrk * 8 + 1], t_dtd.rawp4_Dmtrks[iTrk * 8 + 2], t_dtd.rawp4_Dmtrks[iTrk * 8 + 3]) pDm_raw += ptrack_raw E_Dm += t_dtd.rawp4_Dmtrks[iTrk * 8 + 3] if not t_dtd.rawp4_Dmtrks[iTrk * 8 + 6] == 1: m_matched_Dmtrks[0] = 0 if t_dtd.n_Dmshws == 0: m_matched_Dmshws[0] = 0 else: m_matched_Dmshws[0] = 1 for iShw in range(t_dtd.n_Dmshws): pshower_raw = TLorentzVector(0, 0, 0, 0) pshower_raw.SetPxPyPzE(t_dtd.rawp4_Dmshws[iShw * 6 + 0], t_dtd.rawp4_Dmshws[iShw * 6 + 1], t_dtd.rawp4_Dmshws[iShw * 6 + 2], t_dtd.rawp4_Dmshws[iShw * 6 + 3]) pDm_raw += pshower_raw E_Dm += t_dtd.rawp4_Dmshws[iShw * 6 + 3] if not t_dtd.rawp4_Dmshws[iShw * 6 + 4] == 1: m_matched_Dmshws[0] = 0 E_D0 = 0 pD0_raw = TLorentzVector(0, 0, 0, 0) m_matched_D0trks[0] = 1 for iTrk in range(t_dtd.n_D0trks): ptrack_raw = TLorentzVector(0, 0, 0, 0) ptrack_raw.SetPxPyPzE(t_dtd.rawp4_D0trks[iTrk * 8 + 0], t_dtd.rawp4_D0trks[iTrk * 8 + 1], t_dtd.rawp4_D0trks[iTrk * 8 + 2], t_dtd.rawp4_D0trks[iTrk * 8 + 3]) pD0_raw += ptrack_raw E_D0 += t_dtd.rawp4_D0trks[iTrk * 8 + 3] if not t_dtd.rawp4_D0trks[iTrk * 8 + 6] == 1: m_matched_D0trks[0] = 0 if t_dtd.n_D0shws == 0: m_matched_D0shws[0] = 0 else: m_matched_D0shws[0] = 1 for iShw in range(t_dtd.n_D0shws): pshower_raw = TLorentzVector(0, 0, 0, 0) pshower_raw.SetPxPyPzE(t_dtd.rawp4_D0shws[iShw * 6 + 0], t_dtd.rawp4_D0shws[iShw * 6 + 1], t_dtd.rawp4_D0shws[iShw * 6 + 2], t_dtd.rawp4_D0shws[iShw * 6 + 3]) pD0_raw += pshower_raw E_D0 += t_dtd.rawp4_D0shws[iShw * 6 + 3] if not t_dtd.rawp4_D0shws[iShw * 6 + 4] == 1: m_matched_D0shws[0] = 0 m_matched_pip[0] = 1 if not t_dtd.rawp4_tagPi[4] == 1: m_matched_pip[0] = 0 pD0_4c = TLorentzVector(0, 0, 0, 0) pDm_4c = TLorentzVector(0, 0, 0, 0) ppip_4c = TLorentzVector(0, 0, 0, 0) ppip_raw = TLorentzVector(0, 0, 0, 0) ppip_raw.SetPxPyPzE(t_dtd.rawp4_tagPi[0], t_dtd.rawp4_tagPi[1], t_dtd.rawp4_tagPi[2], t_dtd.rawp4_tagPi[3]) pD0_4c.SetPxPyPzE(t_dtd.p4_D0_4c[0], t_dtd.p4_D0_4c[1], t_dtd.p4_D0_4c[2], t_dtd.p4_D0_4c[3]) pDm_4c.SetPxPyPzE(t_dtd.p4_Dm_4c[0], t_dtd.p4_Dm_4c[1], t_dtd.p4_Dm_4c[2], t_dtd.p4_Dm_4c[3]) ppip_4c.SetPxPyPzE(t_dtd.p4_pip_4c[0], t_dtd.p4_pip_4c[1], t_dtd.p4_pip_4c[2], t_dtd.p4_pip_4c[3]) m_runNo[0] = t_dtd.runNo m_evtNo[0] = t_dtd.evtNo m_indexmc[0] = t_dtd.indexmc for i in range(t_dtd.indexmc): m_motheridx[i] = t_dtd.motheridx[i] m_motherid[i] = t_dtd.motherid[i] m_pdgid[i] = t_dtd.pdgid[i] m_trkidx[i] = t_dtd.trkidx[i] m_D0_mode[0] = t_dtd.D0_mode m_D0_type[0] = t_dtd.D0_type m_D0_charge[0] = t_dtd.D0_dcharge m_D0_charm[0] = t_dtd.D0_charm m_D0_numofchildren[0] = t_dtd.D0_numofchildren m_D0_mass[0] = t_dtd.D0_mass m_p_D0[0] = pD0_raw.P() m_E_D0[0] = E_D0 m_n_D0trks[0] = t_dtd.n_D0trks m_n_D0shws[0] = t_dtd.n_D0shws m_Dm_mode[0] = t_dtd.Dm_mode m_Dm_type[0] = t_dtd.Dm_type m_Dm_charge[0] = t_dtd.Dm_dcharge m_Dm_charm[0] = t_dtd.Dm_charm m_Dm_numofchildren[0] = t_dtd.Dm_numofchildren m_Dm_mass[0] = t_dtd.Dm_mass m_p_Dm[0] = pDm_raw.P() m_E_Dm[0] = E_Dm m_n_Dmtrks[0] = t_dtd.n_Dmtrks m_n_Dmshws[0] = t_dtd.n_Dmshws m_chi2_4c[0] = t_dtd.chisq_4c m_m_D0[0] = pD0_4c.M() m_m_Dm[0] = pDm_4c.M() m_rm_D0pip[0] = (cms - pD0_4c - ppip_4c).M() m_rm_Dmpip[0] = (cms - pDm_4c - ppip_4c).M() for i in range(4): m_p4_D0[i] = t_dtd.p4_D0_6c[i] m_p4_Dm[i] = t_dtd.p4_Dm_6c[i] m_p4_pip[i] = t_dtd.p4_pip_6c[i] m_Rxy_pip[0] = t_dtd.vtx_tagPi[0] m_Rz_pip[0] = t_dtd.vtx_tagPi[1] m_cos_pip[0] = t_dtd.vtx_tagPi[2] for itrk in xrange(t_dtd.n_D0trks): m_Rxy_D0trks[itrk] = abs(t_dtd.vtx_D0trks[itrk * 3 + 0]) m_Rz_D0trks[itrk] = abs(t_dtd.vtx_D0trks[itrk * 3 + 1]) m_cos_D0trks[itrk] = abs(t_dtd.vtx_D0trks[itrk * 3 + 2]) for ishw in xrange(t_dtd.n_D0shws): m_E_D0shws[ishw] = abs(t_dtd.vtx_D0shws[ishw * 6 + 0]) m_dang_D0shws[ishw] = abs(t_dtd.vtx_D0shws[ishw * 6 + 3]) m_module_D0shws[ishw] = abs(t_dtd.vtx_D0shws[ishw * 6 + 4]) m_T_D0shws[ishw] = abs(t_dtd.vtx_D0shws[ishw * 6 + 5]) for itrk in xrange(t_dtd.n_Dmtrks): m_Rxy_Dmtrks[itrk] = abs(t_dtd.vtx_Dmtrks[itrk * 3 + 0]) m_Rz_Dmtrks[itrk] = abs(t_dtd.vtx_Dmtrks[itrk * 3 + 1]) m_cos_Dmtrks[itrk] = abs(t_dtd.vtx_Dmtrks[itrk * 3 + 2]) for ishw in xrange(t_dtd.n_Dmshws): m_E_Dmshws[ishw] = abs(t_dtd.vtx_Dmshws[ishw * 6 + 0]) m_dang_Dmshws[ishw] = abs(t_dtd.vtx_Dmshws[ishw * 6 + 3]) m_module_Dmshws[ishw] = abs(t_dtd.vtx_Dmshws[ishw * 6 + 4]) m_T_Dmshws[ishw] = abs(t_dtd.vtx_Dmshws[ishw * 6 + 5]) m_n_pi0[0] = t_dtd.n_pi0 shw_status = True n_othershws = 0 for iShw in range(t_dtd.n_othershws): if abs(t_dtd.vtx_othershws[iShw * 6 + 3]) < 10.: shw_status = False if t_dtd.vtx_othershws[iShw * 6 + 5] < 0. or t_dtd.vtx_othershws[iShw * 6 + 5] > 14: shw_status = False if t_dtd.vtx_othershws[iShw * 6 + 4] == 1 and t_dtd.vtx_othershws[iShw * 6 + 0] < 0.025: shw_status = False if (t_dtd.vtx_othershws[iShw * 6 + 4] == 0 or t_dtd.vtx_othershws[iShw * 6 + 4] == 2) and t_dtd.vtx_othershws[iShw * 6 + 0] < 0.05: shw_status = False if shw_status: n_othershws += 1 m_n_othershws[0] = n_othershws D0_W = width('D0') Dm_W = width('Dm') D0_signal_low = 1.86483 - D0_W / 2. D0_signal_up = 1.86483 + D0_W / 2. D0_sidebandlow_up = D0_signal_low - D0_W D0_sidebandlow_low = D0_signal_low - 2. * D0_W D0_sidebandup_low = D0_signal_up + D0_W D0_sidebandup_up = D0_signal_up + 2. * D0_W Dm_signal_low = 1.86965 - Dm_W / 2. Dm_signal_up = 1.86965 + Dm_W / 2. Dm_sidebandlow_up = Dm_signal_low - Dm_W Dm_sidebandlow_low = Dm_signal_low - 2. * Dm_W Dm_sidebandup_low = Dm_signal_up + Dm_W Dm_sidebandup_up = Dm_signal_up + 2. * Dm_W if mode == 'signal': M_D0 = (D0_signal_low + D0_signal_up) / 2. M_Dm = (Dm_signal_low + Dm_signal_up) / 2. if mode == 'side1_low': M_D0 = (D0_signal_low + D0_signal_up) / 2. M_Dm = (Dm_sidebandlow_low + Dm_sidebandlow_up) / 2. if mode == 'side1_up': M_D0 = (D0_signal_low + D0_signal_up) / 2. M_Dm = (Dm_sidebandup_low + Dm_sidebandup_up) / 2. if mode == 'side2_low': M_D0 = (D0_sidebandlow_low + D0_sidebandlow_up) / 2. M_Dm = (Dm_signal_low + Dm_signal_up) / 2. if mode == 'side2_up': M_D0 = (D0_sidebandup_low + D0_sidebandup_up) / 2. M_Dm = (Dm_signal_low + Dm_signal_up) / 2. if mode == 'side3_low': M_D0 = (D0_sidebandlow_low + D0_sidebandlow_up) / 2. M_Dm = (Dm_sidebandlow_low + Dm_sidebandlow_up) / 2. if mode == 'side3_up': M_D0 = (D0_sidebandlow_low + D0_sidebandlow_up) / 2. M_Dm = (Dm_sidebandup_low + Dm_sidebandup_up) / 2. if mode == 'side4_low': M_D0 = (D0_sidebandup_low + D0_sidebandup_up) / 2. M_Dm = (Dm_sidebandlow_low + Dm_sidebandlow_up) / 2. if mode == 'side4_up': M_D0 = (D0_sidebandup_low + D0_sidebandup_up) / 2. M_Dm = (Dm_sidebandup_low + Dm_sidebandup_up) / 2. m_m_delta[0] = abs(t_dtd.D0_mass - M_D0) + abs(t_dtd.Dm_mass - M_Dm) pD0_6c = TLorentzVector(0, 0, 0, 0) pDm_6c = TLorentzVector(0, 0, 0, 0) ppip_6c = TLorentzVector(0, 0, 0, 0) pD0_6c.SetPxPyPzE(t_dtd.p4_D0_6c[0], t_dtd.p4_D0_6c[1], t_dtd.p4_D0_6c[2], t_dtd.p4_D0_6c[3]) pDm_6c.SetPxPyPzE(t_dtd.p4_Dm_6c[0], t_dtd.p4_Dm_6c[1], t_dtd.p4_Dm_6c[2], t_dtd.p4_Dm_6c[3]) ppip_6c.SetPxPyPzE(t_dtd.p4_pip_6c[0], t_dtd.p4_pip_6c[1], t_dtd.p4_pip_6c[2], t_dtd.p4_pip_6c[3]) m_chi2_6c[0] = t_dtd.chisq_6c m_chi2_vf[0] = t_dtd.chisq_vf m_m_D0Dm[0] = (pD0_6c + pDm_6c).M() m_m_D0pip[0] = (pD0_6c + ppip_6c).M() m_m_Dmpip[0] = (pDm_6c + ppip_6c).M() m_p_pip[0] = ppip_raw.P() m_chi2_svf_D0[0] = t_dtd.chisq_svf_D0 m_ctau_svf_D0[0] = t_dtd.ctau_svf_D0 m_L_svf_D0[0] = t_dtd.L_svf_D0 m_Lerr_svf_D0[0] = t_dtd.Lerr_svf_D0 m_Lxy_svf_D0[0] = sqrt((t_dtd.vtx[0] - t_dtd.cp_D0[0])**2 + (t_dtd.vtx[1] - t_dtd.cp_D0[1])**2) m_chi2_svf_Dm[0] = t_dtd.chisq_svf_Dm m_ctau_svf_Dm[0] = t_dtd.ctau_svf_Dm m_L_svf_Dm[0] = t_dtd.L_svf_Dm m_Lerr_svf_Dm[0] = t_dtd.Lerr_svf_Dm m_Lxy_svf_Dm[0] = sqrt((t_dtd.vtx[0] - t_dtd.cp_Dm[0])**2 + (t_dtd.vtx[1] - t_dtd.cp_Dm[1])**2) t.Fill()
def main(): args = sys.argv[1:] if len(args) < 8: return usage() dst_path = args[0] sample = args[1] decay = args[2] mode = args[3] type = args[4] ecms = args[5] cms = args[6] dst_num = args[7] sys.stdout.write('Scanning %s...\n' % dst_path) dst_list = [] print '***************************************start to search***************************************' dst_list = search(dst_list, dst_path, '.dst') print '***************************************searching ending**************************************' dst_list_groups = group_files_by_num(dst_list, dst_num) i = 0 for dst_list_fill in dst_list_groups: file_name = sample + '_' + decay + '_' + mode + '_' + ecms + '_' + str( i) + '.txt' f = open(file_name, 'w') f.write('#include "$ROOTIOROOT/share/jobOptions_ReadRec.txt"\n') f.write('#include "$MAGNETICFIELDROOT/share/MagneticField.txt"\n') f.write('#include "$DTAGALGROOT/share/jobOptions_dTag.txt"\n') f.write('#include "$DDECAYALGROOT/share/jobOptions_DDecay.txt"\n') f.write('#include "$MEASUREDECMSSVCROOT/share/anaOptions.txt"\n') f.write('DDecay.IsMonteCarlo = true;\n') f.write('DDecay.Ecms = ' + str(float(cms) / 1000.) + ';\n') f.write('DDecay.W_m_Kpipi = ' + str(width(ecms[0:4])) + ';\n') f.write('DDecay.W_rm_Dpipi = ' + str(window(ecms[0:4])) + ';\n') f.write('\n') f.write('DTag.NeutralDReconstruction = true;\n') f.write('DTag.ChargedDReconstruction = true;\n') f.write('DTag.DsReconstruction = true;\n') f.write('\n') f.write('NeutralDSelector.UseMbcCuts = false;\n') f.write('eutralDSelector.UseDeltaECuts = false;\n') f.write('NeutralDSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('ChargedDSelector.UseMbcCuts = false;\n') f.write('ChargedDSelector.UseDeltaECuts = false;\n') f.write('ChargedDSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('DsSelector.UseMbcCuts = false;\n') f.write('DsSelector.UseDeltaECuts = false;\n') f.write('DsSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('// Input REC or DST file name\n') f.write('EventCnvSvc.digiRootInputFile = {\n') for dst in dst_list_fill: if dst != dst_list_fill[-1]: temp = '"' + dst + '",\n' f.write(temp) if dst == dst_list_fill[-1]: temp = '"' + dst + '"\n' f.write(temp) f.write('};\n') f.write('\n') f.write( '// Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )\n' ) f.write('MessageSvc.OutputLevel =6;\n') f.write('\n') f.write('// Number of events to be processed (default is 10)\n') f.write('ApplicationMgr.EvtMax = -1;\n') f.write('\n') f.write('ApplicationMgr.HistogramPersistency = "ROOT";\n') f.write( 'NTupleSvc.Output = {\"FILE1 DATAFILE=\'/scratchfs/bes/$USER/bes/DDPIPI/v0.2/' + sample + '/' + type + '/' + ecms + '/sys_err/psipp_shape/rootfile/' + sample + '_' + decay + '_' + mode + '_' + ecms + '_' + str(i) + '.root' + '\' OPT=\'NEW\' TYP=\'ROOT\'\"};\n') f.close() i = i + 1 print 'All done!'
def plot(path, leg_title, ecms, xmin, xmax, ymin, ymax, bins): try: f_data = TFile(path[0]) t_data = f_data.Get('save') entries_data = t_data.GetEntries() logging.info('data entries :'+str(entries_data)) except: logging.error(path[0] + ' is invalid!') sys.exit() set_pub_style() set_prelim_style() from ROOT import gStyle colors = array('i', 7*[0]) for i in range(7): colors[i] = 18 - i gStyle.SetPalette(7, colors) mbc = TCanvas('mbc', 'mbc', 800, 600) xtitle = 'M(K^{-}#pi^{+}#pi^{+}) (GeV)/c^{2}' ytitle = 'RM(D^{+}#pi_{d}^{+}#pi_{d}^{-}) (GeV)/c^{2}' h_data = TH2F('scatter_data', 'scatter plot of M(Kpipi) and Rm(Dpipi)', bins, xmin, xmax, bins, ymin, ymax) format_data_hist(h_data) name_axis(h_data, xtitle, ytitle) fill(t_data, h_data) h_data.SetMarkerSize(0.2) # h_data.Draw('box') h_data.Draw('COLZ') x_move = width(ecms) y_move = window(ecms) x_offset = width(ecms) y_offset = window(ecms) x0 = 1.86965 - 5/2. * x_move y0 = 1.86965 + 5/2. * y_move mats = make_matrix(3, 3, (x0, y0), x_move, x_offset, y_move, y_offset) VarsManager = locals() for i, mat in enumerate(mats): x_list = [] y_list = [] for point in mat: x, y = point x_list.append(x) y_list.append(y) x, y = array('d', x_list), array('d', y_list) VarsManager['box_' + str(i)] = TPolyLine(5, x, y) if i == 4: color = ROOT.kRed else: color = ROOT.kBlue VarsManager['box_' + str(i)].SetLineColor(color) VarsManager['box_' + str(i)].SetLineWidth(4) if i == 1 or i == 3 or i == 5 or i == 7: VarsManager['box_' + str(i)].SetLineStyle(9) if i == 0 or i == 2 or i == 6 or i == 8: VarsManager['box_' + str(i)].SetLineStyle(2) VarsManager['box_' + str(i)].Draw('same') # if i == 0: left, right, bottom, top = position_convert(min(x), xmin, xmax) + 0.0045, position_convert(max(x), xmin, xmax) + 0.025, position_convert(min(y), ymin, ymax) + 0.0045, position_convert(max(y), ymin, ymax) + 0.025 # elif i == 1 or i == 2: left, right, bottom, top = position_convert(min(x), xmin, xmax), position_convert(max(x), xmin, xmax) + 0.025, position_convert(min(y), ymin, ymax), position_convert(max(y), ymin, ymax) + 0.025 # elif i == 3: left, right, bottom, top = position_convert(min(x), xmin, xmax) + 0.0045, position_convert(max(x), xmin, xmax), position_convert(min(y), ymin, ymax) + 0.0045, position_convert(max(y), ymin, ymax) # elif i == 6: left, right, bottom, top = position_convert(min(x), xmin, xmax) + 0.0045, position_convert(max(x), xmin, xmax) - 0.025, position_convert(min(y), ymin, ymax) + 0.0045, position_convert(max(y), ymin, ymax) - 0.025 # elif i == 6 or i == 7 or i == 8: left, right, bottom, top = position_convert(min(x), xmin, xmax), position_convert(max(x), xmin, xmax) - 0.025, position_convert(min(y), ymin, ymax), position_convert(max(y), ymin, ymax) - 0.025 # else: left, right, bottom, top = position_convert(min(x), xmin, xmax), position_convert(max(x), xmin, xmax), position_convert(min(y), ymin, ymax), position_convert(max(y), ymin, ymax) # VarsManager['pt_' + str(i)] = TPaveText(left, bottom, right, top, "BRNDC") # set_pavetext(VarsManager['pt_' + str(i)]) # VarsManager['pt_' + str(i)].SetTextSize(0.06) # VarsManager['pt_' + str(i)].Draw() # if i == 0: VarsManager['pt_' + str(i)].AddText('(-1, 1)') # if i == 1: VarsManager['pt_' + str(i)].AddText(' (0, 1) ') # if i == 2: VarsManager['pt_' + str(i)].AddText(' (1, 1) ') # if i == 3: VarsManager['pt_' + str(i)].AddText('(-1, 0)') # if i == 4: VarsManager['pt_' + str(i)].AddText(' (0, 0) ') # if i == 5: VarsManager['pt_' + str(i)].AddText(' (1, 0) ') # if i == 6: VarsManager['pt_' + str(i)].AddText('(-1, -1)') # if i == 7: VarsManager['pt_' + str(i)].AddText(' (0, -1)') # if i == 8: VarsManager['pt_' + str(i)].AddText(' (1, -1)') # VarsManager['pt_' + str(i)].SetTextColor(color) pt = TPaveText(0.75, 0.77, 0.85, 0.87, "BRNDC") set_pavetext(pt) pt.Draw() pt.AddText(leg_title) if not os.path.exists('./figs/'): os.makedirs('./figs/') mbc.SaveAs('./figs/scatter_m_Kpipi_rm_Dpipi_'+str(ecms)+'.pdf') raw_input('Press <Enter> to end...')
def write_file(ecms, cms, runNo, dst_list, file_num=-1): if file_num == -1: file_name = 'data' + str(runNo) + '.txt' else: file_name = 'data' + str(runNo) + '-' + str(file_num) + '.txt' f = open(file_name, 'w') f.write('#include "$ROOTIOROOT/share/jobOptions_ReadRec.txt"\n') f.write('#include "$MAGNETICFIELDROOT/share/MagneticField.txt"\n') f.write('#include "$DTAGALGROOT/share/jobOptions_dTag.txt"\n') f.write('#include "$DDECAYALGROOT/share/jobOptions_DDecay.txt"\n') f.write('#include "$MEASUREDECMSSVCROOT/share/anaOptions.txt"\n') f.write('DDecay.IsMonteCarlo = false;\n') f.write('DDecay.Ecms = ' + str(float(cms) / 1000.) + ';\n') f.write('DDecay.W_m_Kpipi = ' + str(width(ecms[0:4])) + ';\n') f.write('DDecay.W_rm_Dpipi = ' + str(window(ecms[0:4])) + ';\n') f.write('\n') f.write('DTag.NeutralDReconstruction = true;\n') f.write('DTag.ChargedDReconstruction = true;\n') f.write('DTag.DsReconstruction = true;\n') f.write('\n') f.write('NeutralDSelector.UseMbcCuts = false;\n') f.write('eutralDSelector.UseDeltaECuts = false;\n') f.write('NeutralDSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('ChargedDSelector.UseMbcCuts = false;\n') f.write('ChargedDSelector.UseDeltaECuts = false;\n') f.write('ChargedDSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('DsSelector.UseMbcCuts = false;\n') f.write('DsSelector.UseDeltaECuts = false;\n') f.write('DsSelector.UseDeltaMassCuts = true;\n') f.write('\n') f.write('// Input REC or DST file name\n') f.write('EventCnvSvc.digiRootInputFile = {\n') print 'processing runNo: ' + str(runNo) + ' with ' + str( len(dst_list)) + ' dst files(' + str(file_num) + ')...' for dst in dst_list: if dst != dst_list[-1]: temp = '"' + dst + '",\n' f.write(temp) if dst == dst_list[-1]: temp = '"' + dst + '"\n' f.write(temp) f.write('};\n') f.write('\n') f.write( '// Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL )\n' ) f.write('MessageSvc.OutputLevel =6;\n') f.write('\n') f.write('// Number of events to be processed (default is 10)\n') f.write('ApplicationMgr.EvtMax = -1;\n') f.write('\n') f.write('ApplicationMgr.HistogramPersistency = "ROOT";\n') if file_num == -1: f.write( 'NTupleSvc.Output = {\"FILE1 DATAFILE=\'/scratchfs/bes/$USER/bes/DDPIPI/v0.2/data/' + ecms + '/' + 'data' + str(runNo) + '.root\' OPT=\'NEW\' TYP=\'ROOT\'\"};\n') else: f.write( 'NTupleSvc.Output = {\"FILE1 DATAFILE=\'/scratchfs/bes/$USER/bes/DDPIPI/v0.2/data/' + ecms + '/' + 'data' + str(runNo) + '_' + str(file_num) + '.root\' OPT=\'NEW\' TYP=\'ROOT\'\"};\n') f.close()
def rm_Dpipi_fill(t, h, window_low, window_up): for ientry in xrange(int(t.GetEntries())): t.GetEntry(ientry) if fabs(t.m_rawm_D - 1.86965) < width(ecms) / 2.: h.Fill(t.m_rm_Dpipi)
def plot(data_path, pt_title, ecms, xmin, xmax, xbins): try: f_data = TFile(data_path) t_data = f_data.Get('save') entries_data = t_data.GetEntries() logging.info('data entries :' + str(entries_data)) except: logging.error('File paths are invalid!') sys.exit() set_pub_style() set_prelim_style() width_low = 1.86965 - width(ecms) / 2. width_up = 1.86965 + width(ecms) / 2. width_side_low_up = width_low - (width_up - width_low) width_side_low_low = width_side_low_up - (width_up - width_low) width_side_up_low = width_up + (width_up - width_low) width_side_up_up = width_side_up_low + (width_up - width_low) mbc = TCanvas('mbc', 'mbc', 800, 600) content = (xmax - xmin) / xbins * 1000 ytitle = 'Events/%.1f MeV/c^{2}' % content xtitle = 'M(K^{-}#pi^{+}#pi^{+}) (GeV/c^{2})' h_data = TH1F('data', 'data', xbins, xmin, float(xmax)) format_data_hist(h_data) if ecms == 4420 or ecms == 4680: h_data.GetYaxis().SetTitleOffset(1.15) name_axis(h_data, xtitle, ytitle) rawm_D_fill(t_data, h_data, width_low, width_up) if not os.path.exists('./figs/'): os.makedirs('./figs/') h_data.Draw('E1') if ecms == 4420: low = 100 elif ecms == 4230: low = 0 elif ecms == 4680: low = 400 else: low = 0 top = h_data.GetMaximum() arrow1 = TArrow(width_low, low, width_low, 0.8 * top, 0.02, '<-') set_arrow(arrow1, ROOT.kRed) arrow1.SetLineStyle(2) arrow1.Draw() arrow2 = TArrow(width_up, low, width_up, 0.8 * top, 0.02, '<-') set_arrow(arrow2, ROOT.kRed) arrow2.SetLineStyle(2) arrow2.Draw() arrow3 = TArrow(width_side_low_low, low, width_side_low_low, 0.8 * top, 0.02, '<-') set_arrow(arrow3, ROOT.kBlue) arrow3.Draw() arrow4 = TArrow(width_side_low_up, low, width_side_low_up, 0.8 * top, 0.02, '<-') set_arrow(arrow4, ROOT.kBlue) arrow4.Draw() arrow5 = TArrow(width_side_up_low, low, width_side_up_low, 0.8 * top, 0.02, '<-') set_arrow(arrow5, ROOT.kBlue) arrow5.Draw() arrow6 = TArrow(width_side_up_up, low, width_side_up_up, 0.8 * top, 0.02, '<-') set_arrow(arrow6, ROOT.kBlue) arrow6.Draw() leg = TLegend(position_convert(0.8 * (xmax - xmin) + xmin, xmin, xmax), position_convert(0.8 * (top - low) + low, low, top), position_convert(0.95 * (xmax - xmin) + xmin, xmin, xmax), position_convert((top - low) + low, low, top), 'BRNDC') set_legend(leg, h_data, 'Data', pt_title) leg.Draw() h_data.Draw('sameE1') mbc.SaveAs('./figs/m_Kpipi_' + str(ecms) + '.pdf') raw_input('Enter anything to end...')
def save(file_in, file_out, sample, mode): try: chain = TChain('save') chain.Add(file_in) except: logging.error(file_in + ' is invalid!') sys.exit() cut = '' D0_W = width('D0') Dm_W = width('Dm') D0_signal_low = 1.86483 - D0_W/2. D0_signal_up = 1.86483 + D0_W/2. D0_sidebandlow_up = D0_signal_low - D0_W D0_sidebandlow_low = D0_signal_low - 2. * D0_W D0_sidebandup_low = D0_signal_up + D0_W D0_sidebandup_up = D0_signal_up + 2. * D0_W Dm_signal_low = 1.86965 - Dm_W/2. Dm_signal_up = 1.86965 + Dm_W/2. Dm_sidebandlow_up = Dm_signal_low - Dm_W Dm_sidebandlow_low = Dm_signal_low - 2. * Dm_W Dm_sidebandup_low = Dm_signal_up + Dm_W Dm_sidebandup_up = Dm_signal_up + 2. * Dm_W if mode == 'after_mass': if sample == 'signal': cut_D0Dm = '(m_m_D0 > ' + str(D0_signal_low) + ' && m_m_D0 < ' + str(D0_signal_up) + ' && m_m_Dm > ' + str(Dm_signal_low) + ' && m_m_Dm < ' + str(Dm_signal_up) + ')' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side1_low': cut_D0Dm = '(m_m_D0 > ' + str(D0_signal_low) + ' && m_m_D0 < ' + str(D0_signal_up) + ' && (m_m_Dm > ' + str(Dm_sidebandlow_low) + ' && m_m_Dm < ' + str(Dm_sidebandlow_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side1_up': cut_D0Dm = '(m_m_D0 > ' + str(D0_signal_low) + ' && m_m_D0 < ' + str(D0_signal_up) + ' && (m_m_Dm > ' + str(Dm_sidebandup_low) + ' && m_m_Dm < ' + str(Dm_sidebandup_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side2_low': cut_D0Dm = '(m_m_Dm > ' + str(Dm_signal_low) + ' && m_m_Dm < ' + str(Dm_signal_up) + ' && (m_m_D0 > ' + str(D0_sidebandlow_low) + ' && m_m_D0 < ' + str(D0_sidebandlow_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side2_up': cut_D0Dm = '(m_m_Dm > ' + str(Dm_signal_low) + ' && m_m_Dm < ' + str(Dm_signal_up) + ' && (m_m_D0 > ' + str(D0_sidebandup_low) + ' && m_m_D0 < ' + str(D0_sidebandup_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side3_low': cut_D0Dm = '(m_m_D0 > ' + str(D0_sidebandlow_low) + ' && m_m_D0 < ' + str(D0_sidebandlow_up) + ' && (m_m_Dm > ' + str(Dm_sidebandlow_low) + ' && m_m_Dm < ' + str(Dm_sidebandlow_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side3_up': cut_D0Dm = '(m_m_D0 > ' + str(D0_sidebandlow_low) + ' && m_m_D0 < ' + str(D0_sidebandlow_up) + ' && (m_m_Dm > ' + str(Dm_sidebandup_low) + ' && m_m_Dm < ' + str(Dm_sidebandup_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side4_low': cut_D0Dm = '(m_m_D0 > ' + str(D0_sidebandup_low) + ' && m_m_D0 < ' + str(D0_sidebandup_up) + ' && (m_m_Dm > ' + str(Dm_sidebandlow_low) + ' && m_m_Dm < ' + str(Dm_sidebandlow_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if sample == 'side4_up': cut_D0Dm = '(m_m_D0 > ' + str(D0_sidebandup_low) + ' && m_m_D0 < ' + str(D0_sidebandup_up) + ' && (m_m_Dm > ' + str(Dm_sidebandup_low) + ' && m_m_Dm < ' + str(Dm_sidebandup_up) + '))' cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_D0Dm + ' && ' + cut_DstD + ' && ' + cut_chi2 if mode == 'before_mass': cut_DstD = '(m_m_D0pip - m_m_D0 + 1.86483 > 2.030)' cut_chi2 = '(m_chi2_4c < 60)' cut = cut_DstD + ' && ' + cut_chi2 t = chain.CopyTree(cut) t.SaveAs(file_out)