def decaytime(pf): print("Adding decay time branch...") PV_pos = TVector3Array(pf.pv_x,pf.pv_y,pf.pv_z) jpsiVertex_pos = TVector3Array(pf.jpsivtx_vtx_x,pf.jpsivtx_vtx_y,pf.jpsivtx_vtx_z) dist1 = (PV_pos - jpsiVertex_pos).mag decay_time1 = dist1 * 6.276 / (pf.Bpt_reco * 2.998e+10) #pf.copy() pf['decay_time'] = decay_time1 return pf
def decaytime(pf): print("Adding decay time branch...") PV_pos = TVector3Array(pf.pv_x,pf.pv_y,pf.pv_z) jpsiVertex_pos1 = TVector3Array(pf.mu1_vx,pf.mu1_vy,pf.mu1_vz) jpsiVertex_pos2 = TVector3Array(pf.mu2_vx,pf.mu2_vy,pf.mu2_vz) dist1 = (PV_pos - jpsiVertex_pos1).mag dist2 = (PV_pos - jpsiVertex_pos2).mag decay_time1 = dist1 * 6.276 / (pf.Bpt_reco * 2.998e+10) decay_time2 = dist2 * 6.276 / (pf.Bpt_reco * 2.998e+10) pf.copy() pf['decay_time1'] = decay_time1 pf['decay_time2'] = decay_time2 return pf
def mcor(pf): #https://cds.cern.ch/record/2697350/files/1910.13404.pdf #only for bto3mu and bto2mutrk print("Adding mcor variable...") b_dir_vec = TVector3Array(pf.jpsivtx_vtx_x - pf.pv_x,pf.jpsivtx_vtx_y - pf.pv_y,pf.jpsivtx_vtx_z - pf.pv_z ) b_dir = b_dir_vec/np.sqrt(b_dir_vec.mag2) jpsimu_p4 = TLorentzVectorArray.from_ptetaphim(pf.Bpt,pf.Beta,pf.Bphi,pf.Bmass) jpsimu_p3 = jpsimu_p4.p3 p_parallel = jpsimu_p3.dot(b_dir) p_perp = np.sqrt(jpsimu_p3.mag2 - p_parallel * p_parallel) mcor = np.sqrt(pf.Bmass * pf.Bmass + p_perp* p_perp) + p_perp pf['mcor'] = mcor return pf