Skip to content
Snippets Groups Projects

B PV association

Merged Abhijit Mathad requested to merge pv into master
3 unresolved threads
6 files
+ 892
0
Compare changes
  • Side-by-side
  • Inline
Files
6
pvassoc/dv.py 0 → 100755
+ 398
0
###############################################################################
# (c) Copyright 2024 CERN for the benefit of the LHCb Collaboration #
# #
# This software is distributed under the terms of the GNU General Public #
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
# #
# In applying this licence, CERN does not waive the privileges and immunities #
# granted to it by virtue of its status as an Intergovernmental Organization #
# or submit itself to any jurisdiction. #
###############################################################################
from PyConf.reading import get_pvs, get_particles # type: ignore[import]
import Functors as F # type: ignore[import]
from FunTuple import FunTuple_Event # type: ignore[import]
from DaVinci.algorithms import create_lines_filter # type: ignore[import]
import FunTuple.functorcollections as FC # type: ignore[import]
from DaVinciMCTools import MCTruthAndBkgCat # type: ignore[import]
from Hlt2Conf.algorithms_thor import ParticleFilter # type: ignore[import]
from PyConf.Algorithms import VoidFilter # type: ignore[import]
import Functors.math as fmath # type: ignore[import]
from PyConf.Algorithms import FlattenDecayTree # type: ignore[import]
from GaudiKernel import SystemOfUnits # type: ignore[import]
from RecoConf.reconstruction_objects import make_tracks # type: ignore[import]
#Variables for pvs
ALLPV_KEY = lambda Vertices: F.MAP(F.OBJECT_KEY) @ F.TES(Vertices)
ALLPV_CHI2 = lambda Vertices: F.MAP(F.CHI2) @ F.TES(Vertices)
ALLPV_NDOF = lambda Vertices: F.MAP(F.NDOF) @ F.TES(Vertices) # Can infer nVelo tracks from this
ALLPV_X = lambda Vertices: F.MAP(F.X_COORDINATE @ F.POSITION) @ F.TES(Vertices)
ALLPV_Y = lambda Vertices: F.MAP(F.Y_COORDINATE @ F.POSITION) @ F.TES(Vertices)
ALLPV_Z = lambda Vertices: F.MAP(F.Z_COORDINATE @ F.POSITION) @ F.TES(Vertices)
ALLPV_POSERR = lambda Vertices, indx_i: F.MAP(fmath.sqrt(F.CALL(indx_i, indx_i)) @ F.POS_COV_MATRIX) @ F.TES(Vertices)
#Variables for particles
ALLPART_KEY = lambda particles: F.MAP(F.VALUE_OR(-1) @ F.OBJECT_KEY) @ F.TES(particles) #to differentiate from particles forming B candidate
ALLPART_Q = lambda particles: F.MAP(F.CHARGE) @ F.TES(particles)
ALLPART_PX = lambda particles: F.MAP(F.PX) @ F.TES(particles)
ALLPART_PY = lambda particles: F.MAP(F.PY) @ F.TES(particles)
ALLPART_PZ = lambda particles: F.MAP(F.PZ) @ F.TES(particles)
ALLPART_MOMERR = lambda particles, indx_i: F.MAP(F.CALL(indx_i, indx_i) @ F.THREE_MOM_COV_MATRIX) @ F.TES(particles)
ALLPART_ENERGY = lambda particles: F.MAP(F.ENERGY) @ F.TES(particles)
ALLPART_MASS = lambda particles: F.MAP(F.MASS) @ F.TES(particles)
ALLPART_ETA = lambda particles: F.MAP(F.ETA) @ F.TES(particles)
ALLPART_PHI = lambda particles: F.MAP(F.PHI) @ F.TES(particles)
ALLPART_PIDPI = lambda particles: F.MAP(F.PID_PI) @ F.TES(particles)
ALLPART_PIDK = lambda particles: F.MAP(F.PID_K) @ F.TES(particles)
ALLPART_PIDP = lambda particles: F.MAP(F.PID_P) @ F.TES(particles)
ALLPART_PIDE = lambda particles: F.MAP(F.PID_E) @ F.TES(particles)
ALLPART_PIDMU = lambda particles: F.MAP(F.PID_MU) @ F.TES(particles)
#P -> Proto -> Track
ALLPART_TRACK_CHI2 = lambda particles: F.MAP(F.CHI2 @ F.TRACK) @ F.TES(particles)
ALLPART_TRACK_NDOF = lambda particles: F.MAP(F.VALUE_OR(-1) @ F.NDOF @ F.TRACK) @ F.TES(particles)
ALLPART_TRACK_TYPE = lambda particles: F.MAP(F.VALUE_OR(-1) @ F.CAST_TO_INT @ F.TRACKTYPE @ F.TRACK) @ F.TES(particles)
ALLPART_TRACK_GHOSTPROB= lambda particles: F.MAP(F.GHOSTPROB) @ F.TES(particles)
#get the BPV information for particles
ALLPART_BPV_KEY = lambda particles, pvs: F.MAP(F.VALUE_OR(-1) @ F.OBJECT_KEY @ F.BPV(pvs)) @ F.TES(particles)
ALLPART_BPV_X = lambda particles, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVX(pvs)) @ F.TES(particles)
ALLPART_BPV_Y = lambda particles, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVY(pvs)) @ F.TES(particles)
ALLPART_BPV_Z = lambda particles, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVZ(pvs)) @ F.TES(particles)
ALLPART_BPV_IP = lambda particles, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVIP(pvs)) @ F.TES(particles)
ALLPART_BPV_IPCHI2 = lambda particles, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVIPCHI2(pvs)) @ F.TES(particles)
## particle has track but not a closest to beam state, so throws an error (Should this be an error at all?)
ALLPART_CLOSESTTOBEAM_X = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.X_COORDINATE @ F.POSITION @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_CLOSESTTOBEAM_Y = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.Y_COORDINATE @ F.POSITION @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_CLOSESTTOBEAM_TX = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TX @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_CLOSESTTOBEAM_TY = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TY @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_CLOSESTTOBEAM_QOP = lambda particles:F.MAP(F.VALUE_OR(F.NaN) @ F.QOVERP @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_CLOSESTTOBEAM_STATEERR = lambda particles, indx_i: F.MAP(F.VALUE_OR(F.NaN) @ F.CALL(indx_i, indx_i) @ F.TRACK_COVARIANCE @ F.STATE_AT("ClosestToBeam") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_X = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.X_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_Y = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.Y_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_Z = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.Z_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_TX = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TX @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_TY = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TY @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_QOP = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.QOVERP @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
ALLPART_FIRSTMEAS_STATEERR = lambda particles, indx_i: F.MAP(F.VALUE_OR(F.NaN) @ F.CALL(indx_i, indx_i) @ F.TRACK_COVARIANCE @ F.STATE_AT("FirstMeasurement") @ F.TRACK) @ F.TES(particles)
### particle has no endut state, so throws an error (should this be an error at all?)
#ALLPART_ENDUT_X = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.X_COORDINATE @ F.POSITION @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_Y = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.Y_COORDINATE @ F.POSITION @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_Z = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.Z_COORDINATE @ F.POSITION @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_TX = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TX @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_TY = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.TY @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_QOP = lambda particles: F.MAP(F.VALUE_OR(F.NaN) @ F.QOVERP @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#ALLPART_ENDUT_STATEERR = lambda particles, indx_i: F.MAP(F.VALUE_OR(F.NaN) @ F.CALL(indx_i, indx_i) @ F.TRACK_COVARIANCE @ F.STATE_AT("EndUT") @ F.TRACK) @ F.TES(particles)
#P -> MCP
ALLPART_MC_ISPROMPT = lambda particles, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.MC_ISPROMPT())) @ F.TES(particles)
ALLPART_TRUE_PV_X = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VX)) @ F.TES(particles) #for association of PV <-> MCPV
ALLPART_TRUE_PV_Y = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VY)) @ F.TES(particles)
ALLPART_TRUE_PV_Z = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VZ)) @ F.TES(particles)
#P -> LONG LIVED ANCESTOR (Helpful to find which PV has produced B using MCPV <-> PV association)
## 10^-15 seconds is between the lifetimes of the pi0 (considered prompt) and the tau (nonprompt).
LONGLIVED_ANCESTOR = F.MC_FIRST_LONGLIVED_ANCESTOR(MinLifetime=1e-7 * SystemOfUnits.ns)
ALLPART_LONGLIVED_ANCESTOR_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID @ LONGLIVED_ANCESTOR)) @ F.TES(particles)
ALLPART_LONGLIVED_ANCESTOR_KEY = lambda particles, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.OBJECT_KEY @ LONGLIVED_ANCESTOR)) @ F.TES(particles)
#the following we don't need (but keep commented out in case we do)
#ALLPART_LONGLIVED_ANCESTOR_PVX = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VX @ LONGLIVED_ANCESTOR)) @ F.TES(particles)
#ALLPART_LONGLIVED_ANCESTOR_PVY = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VY @ LONGLIVED_ANCESTOR)) @ F.TES(particles)
#ALLPART_LONGLIVED_ANCESTOR_PVZ = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VZ @ LONGLIVED_ANCESTOR)) @ F.TES(particles)
ALLPART_TRUE_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID)) @ F.TES(particles)
ALLPART_TRUE_KEY = lambda particles, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.OBJECT_KEY)) @ F.TES(particles)
ALLPART_TRUE_PX = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.PX)) @ F.TES(particles)
ALLPART_TRUE_PY = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.PY)) @ F.TES(particles)
ALLPART_TRUE_PZ = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.PZ)) @ F.TES(particles)
ALLPART_TRUE_ENERGY = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.ENERGY)) @ F.TES(particles)
ALLPART_TRUE_MASS = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MASS)) @ F.TES(particles)
ALLPART_TRUE_ORGIN_KEY = lambda particles, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.OBJECT_KEY @ F.MC_PRIMARYVERTEX)) @ F.TES(particles)
ALLPART_TRUE_ORGIN_X = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.ORIGIN_VX)) @ F.TES(particles)
ALLPART_TRUE_ORGIN_Y = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.ORIGIN_VY)) @ F.TES(particles)
ALLPART_TRUE_ORGIN_Z = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.ORIGIN_VZ)) @ F.TES(particles)
ALLPART_MOTHER_ID = lambda particles, ngen, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.MC_MOTHER(ngen, F.PARTICLE_ID))) @ F.TES(particles)
ALLPART_MOTHER_KEY = lambda particles, ngen, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.MC_MOTHER(ngen, F.OBJECT_KEY))) @ F.TES(particles)
ALLPART_ID = lambda particles: F.MAP(F.VALUE_OR(0) @ F.PARTICLE_ID) @ F.TES(particles)
#ALLPART_HISTORY = lambda particles: F.MAP(F.VALUE_OR(-1) @ F.CAST_TO_INT @ F.TRACKHISTORY @ F.TRACK) @ F.TES(particles)
#ALLPART_FLAG = lambda particles: F.MAP(F.VALUE_OR(-1) @ F.CAST_TO_INT @ F.TRACKFLAG @ F.TRACK) @ F.TES(particles)
#Variables for particles
ALLB_ID = lambda particles: F.MAP(F.PARTICLE_ID) @ F.TES(particles)
ALLB_KEY = lambda particles: F.MAP(F.OBJECT_KEY) @ F.TES(particles)
ALLB_ENDVTX_CHI2 = lambda particles: F.MAP(F.CHI2 @ F.ENDVERTEX) @ F.TES(particles)
ALLB_ENDVTX_NDOF = lambda particles: F.MAP(F.NDOF @ F.ENDVERTEX) @ F.TES(particles)
ALLB_ENDVTX_X = lambda particles: F.MAP(F.END_VX) @ F.TES(particles)
ALLB_ENDVTX_Y = lambda particles: F.MAP(F.END_VY) @ F.TES(particles)
ALLB_ENDVTX_Z = lambda particles: F.MAP(F.END_VZ) @ F.TES(particles)
ALLB_ENDVTX_POSERR = lambda particles, indx_i: F.MAP(fmath.sqrt(F.CALL(indx_i, indx_i)) @ F.POS_COV_MATRIX @ F.ENDVERTEX) @ F.TES(particles)
ALLB_PX = lambda particles: F.MAP(F.PX) @ F.TES(particles)
ALLB_PY = lambda particles: F.MAP(F.PY) @ F.TES(particles)
ALLB_PZ = lambda particles: F.MAP(F.PZ) @ F.TES(particles)
ALLB_MOMERR = lambda particles, indx_i: F.MAP(F.CALL(indx_i, indx_i) @ F.THREE_MOM_COV_MATRIX) @ F.TES(particles)
ALLB_ENERGY = lambda particles: F.MAP(F.ENERGY) @ F.TES(particles)
ALLB_MASS = lambda particles: F.MAP(F.MASS) @ F.TES(particles)
ALLB_ETA = lambda particles: F.MAP(F.ETA) @ F.TES(particles)
ALLB_PHI = lambda particles: F.MAP(F.PHI) @ F.TES(particles)
#P -> MCP
ALLB_TRUE_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID)) @ F.TES(particles)
ALLB_TRUE_KEY = lambda particles, mctruth: F.MAP(F.VALUE_OR(-1) @ mctruth(F.OBJECT_KEY)) @ F.TES(particles)
ALLB_TRUE_PV_X = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VX)) @ F.TES(particles) #for association of PV <-> MCPV
ALLB_TRUE_PV_Y = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VY)) @ F.TES(particles)
ALLB_TRUE_PV_Z = lambda particles, mctruth: F.MAP(F.VALUE_OR(F.NaN) @ mctruth(F.MC_PV_VZ)) @ F.TES(particles)
#the following we don't need (but keep commented out in case we do)
#ALLB_TRUE_CHILD1_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(1, F.FORWARDARGS)) @ F.TES(particles) #D*-
#ALLB_TRUE_CHILD11_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(1, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS)) @ F.TES(particles) #D0
#ALLB_TRUE_CHILD12_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(2, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS)) @ F.TES(particles) #pi
#ALLB_TRUE_CHILD111_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(1, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS)) @ F.TES(particles) #K
#ALLB_TRUE_CHILD112_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(2, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS) @ F.CHILD(1, F.FORWARDARGS)) @ F.TES(particles) #pi
#ALLB_TRUE_CHILD2_ID = lambda particles, mctruth: F.MAP(F.VALUE_OR(0) @ mctruth(F.PARTICLE_ID) @ F.CHILD(2, F.FORWARDARGS)) @ F.TES(particles) #mu
#velo tracks
ALLVELOTRACKS_ETA = lambda tracks: F.MAP(F.ETA) @ F.TES(tracks)
ALLVELOTRACKS_PHI = lambda tracks: F.MAP(F.PHI) @ F.TES(tracks)
ALLVELOTRACKS_X = lambda tracks: F.MAP(F.X_COORDINATE @ F.POSITION) @ F.TES(tracks)
ALLVELOTRACKS_Y = lambda tracks: F.MAP(F.Y_COORDINATE @ F.POSITION) @ F.TES(tracks)
ALLVELOTRACKS_Z = lambda tracks: F.MAP(F.Z_COORDINATE @ F.POSITION) @ F.TES(tracks)
ALLVELOTRACKS_TX = lambda tracks: F.MAP(F.TX) @ F.TES(tracks)
ALLVELOTRACKS_TY = lambda tracks: F.MAP(F.TY) @ F.TES(tracks)
ALLVELOTRACKS_BPV_KEY= lambda tracks, pvs: F.MAP(F.VALUE_OR(-1) @ F.OBJECT_KEY @ F.BPV(pvs)) @ F.TES(tracks)
ALLVELOTRACKS_BPV_X = lambda tracks, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVX(pvs)) @ F.TES(tracks)
ALLVELOTRACKS_BPV_Y = lambda tracks, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVY(pvs)) @ F.TES(tracks)
ALLVELOTRACKS_BPV_Z = lambda tracks, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVZ(pvs)) @ F.TES(tracks)
ALLVELOTRACKS_BPV_IP = lambda tracks, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVIP(pvs)) @ F.TES(tracks)
ALLVELOTRACKS_BPV_IPCHI2 = lambda tracks, pvs: F.MAP(F.VALUE_OR(F.NaN) @ F.BPVIPCHI2(pvs)) @ F.TES(tracks)
##throw as error about pointers
#ALLVELOTRACKS_FIRSTMEAS_X = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.X_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement")) @ F.TES(tracks)
#ALLVELOTRACKS_FIRSTMEAS_Y = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.Y_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement")) @ F.TES(tracks)
#ALLVELOTRACKS_FIRSTMEAS_Z = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.Z_COORDINATE @ F.POSITION @ F.STATE_AT("FirstMeasurement")) @ F.TES(tracks)
#ALLVELOTRACKS_POSERR = lambda tracks, indx_i: F.MAP(F.VALUE_OR(F.NaN) @ F.CALL(indx_i, indx_i) @ F.TRACK_COVARIANCE @ F.STATE_AT("FirstMeasurement")) @ F.TES(tracks)
#ALLVELOTRACKS_ENDVELO_X = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.X_COORDINATE @ F.POSITION @ F.STATE_AT("EndVelo")) @ F.TES(tracks)
#ALLVELOTRACKS_ENDVELO_Y = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.Y_COORDINATE @ F.POSITION @ F.STATE_AT("EndVelo")) @ F.TES(tracks)
#ALLVELOTRACKS_ENDVELO_Z = lambda tracks: F.MAP(F.VALUE_OR(F.NaN) @ F.Z_COORDINATE @ F.POSITION @ F.STATE_AT("EndVelo")) @ F.TES(tracks)
#ALLVELOTRACKS_ENDVELO_POSERR = lambda tracks, indx_i: F.MAP(F.VALUE_OR(F.NaN) @ F.CALL(indx_i, indx_i) @ F.TRACK_COVARIANCE @ F.STATE_AT("EndVelo")) @ F.TES(tracks)
def get_all_part_vars(evt_vars, particles, pvs, MCTRUTH_parts, index_name, suffix = 'PARTS', is_long = False):
evt_vars[f'ALL{suffix}_ID[{index_name}]'] = ALLPART_ID(particles)
evt_vars[f'ALL{suffix}_KEY[{index_name}]'] = ALLPART_KEY(particles)
evt_vars[f'ALL{suffix}_Q[{index_name}]'] = ALLPART_Q(particles)
evt_vars[f'ALL{suffix}_PX[{index_name}]'] = ALLPART_PX(particles)
evt_vars[f'ALL{suffix}_PY[{index_name}]'] = ALLPART_PY(particles)
evt_vars[f'ALL{suffix}_PZ[{index_name}]'] = ALLPART_PZ(particles)
evt_vars[f'ALL{suffix}_PXERR[{index_name}]'] = ALLPART_MOMERR(particles, 0)
evt_vars[f'ALL{suffix}_PYERR[{index_name}]'] = ALLPART_MOMERR(particles, 1)
evt_vars[f'ALL{suffix}_PZERR[{index_name}]'] = ALLPART_MOMERR(particles, 2)
evt_vars[f'ALL{suffix}_MASS[{index_name}]'] = ALLPART_MASS(particles)
evt_vars[f'ALL{suffix}_ENERGY[{index_name}]'] = ALLPART_ENERGY(particles)
evt_vars[f'ALL{suffix}_ETA[{index_name}]'] = ALLPART_ETA(particles)
evt_vars[f'ALL{suffix}_PHI[{index_name}]'] = ALLPART_PHI(particles)
evt_vars[f'ALL{suffix}_PIDPI[{index_name}]'] = ALLPART_PIDPI(particles)
evt_vars[f'ALL{suffix}_PIDK[{index_name}]'] = ALLPART_PIDK(particles)
evt_vars[f'ALL{suffix}_PIDP[{index_name}]'] = ALLPART_PIDP(particles)
evt_vars[f'ALL{suffix}_PIDE[{index_name}]'] = ALLPART_PIDE(particles)
evt_vars[f'ALL{suffix}_PIDMU[{index_name}]'] = ALLPART_PIDMU(particles)
#P -> Proto -> Track
evt_vars[f'ALL{suffix}_TRACK_CHI2[{index_name}]'] = ALLPART_TRACK_CHI2(particles)
evt_vars[f'ALL{suffix}_TRACK_NDOF[{index_name}]'] = ALLPART_TRACK_NDOF(particles)
evt_vars[f'ALL{suffix}_TRACK_TYPE[{index_name}]'] = ALLPART_TRACK_TYPE(particles)
evt_vars[f'ALL{suffix}_TRACK_GHOSTPROB[{index_name}]'] = ALLPART_TRACK_GHOSTPROB(particles)
# BPV information
evt_vars[f'ALL{suffix}_BPV_KEY[{index_name}]'] = ALLPART_BPV_KEY(particles, pvs)
evt_vars[f'ALL{suffix}_BPV_X[{index_name}]'] = ALLPART_BPV_X(particles, pvs)
evt_vars[f'ALL{suffix}_BPV_Y[{index_name}]'] = ALLPART_BPV_Y(particles, pvs)
evt_vars[f'ALL{suffix}_BPV_Z[{index_name}]'] = ALLPART_BPV_Z(particles, pvs)
evt_vars[f'ALL{suffix}_BPV_IP[{index_name}]'] = ALLPART_BPV_IP(particles, pvs)
evt_vars[f'ALL{suffix}_BPV_IPCHI2[{index_name}]'] = ALLPART_BPV_IPCHI2(particles, pvs)
# particle has track but not a closest to beam state, so throws an error (Should this be an error at all?)
if is_long:
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_X[{index_name}]'] = ALLPART_CLOSESTTOBEAM_X(particles)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_Y[{index_name}]'] = ALLPART_CLOSESTTOBEAM_Y(particles)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_TX[{index_name}]'] = ALLPART_CLOSESTTOBEAM_TX(particles)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_TY[{index_name}]'] = ALLPART_CLOSESTTOBEAM_TY(particles)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_QOP[{index_name}]'] = ALLPART_CLOSESTTOBEAM_QOP(particles)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_XERR[{index_name}]'] = ALLPART_CLOSESTTOBEAM_STATEERR(particles, 0)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_YERR[{index_name}]'] = ALLPART_CLOSESTTOBEAM_STATEERR(particles, 1)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_TXERR[{index_name}]'] = ALLPART_CLOSESTTOBEAM_STATEERR(particles, 2)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_TYERR[{index_name}]'] = ALLPART_CLOSESTTOBEAM_STATEERR(particles, 3)
evt_vars[f'ALL{suffix}_CLOSESTTOBEAM_QOPERR[{index_name}]'] = ALLPART_CLOSESTTOBEAM_STATEERR(particles, 4)
# store first measurement
evt_vars[f'ALL{suffix}_FIRSTMEAS_X[{index_name}]'] = ALLPART_FIRSTMEAS_X(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_Y[{index_name}]'] = ALLPART_FIRSTMEAS_Y(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_Z[{index_name}]'] = ALLPART_FIRSTMEAS_Z(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_TX[{index_name}]'] = ALLPART_FIRSTMEAS_TX(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_TY[{index_name}]'] = ALLPART_FIRSTMEAS_TY(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_QOP[{index_name}]'] = ALLPART_FIRSTMEAS_QOP(particles)
evt_vars[f'ALL{suffix}_FIRSTMEAS_XERR[{index_name}]'] = ALLPART_FIRSTMEAS_STATEERR(particles, 0)
evt_vars[f'ALL{suffix}_FIRSTMEAS_YERR[{index_name}]'] = ALLPART_FIRSTMEAS_STATEERR(particles, 1)
evt_vars[f'ALL{suffix}_FIRSTMEAS_TXERR[{index_name}]'] = ALLPART_FIRSTMEAS_STATEERR(particles, 2)
evt_vars[f'ALL{suffix}_FIRSTMEAS_TYERR[{index_name}]'] = ALLPART_FIRSTMEAS_STATEERR(particles, 3)
evt_vars[f'ALL{suffix}_FIRSTMEAS_QOPERR[{index_name}]'] = ALLPART_FIRSTMEAS_STATEERR(particles, 4)
#P -> MCP
evt_vars[f'ALL{suffix}_TRUE_ID[{index_name}]'] = ALLPART_TRUE_ID(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_KEY[{index_name}]'] = ALLPART_TRUE_KEY(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PX[{index_name}]'] = ALLPART_TRUE_PX(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PY[{index_name}]'] = ALLPART_TRUE_PY(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PZ[{index_name}]'] = ALLPART_TRUE_PZ(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_ENERGY[{index_name}]'] = ALLPART_TRUE_ENERGY(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_MASS[{index_name}]'] = ALLPART_TRUE_MASS(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MC_ISPROMPT[{index_name}]'] = ALLPART_MC_ISPROMPT(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PV_X[{index_name}]'] = ALLPART_TRUE_PV_X(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PV_Y[{index_name}]'] = ALLPART_TRUE_PV_Y(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_PV_Z[{index_name}]'] = ALLPART_TRUE_PV_Z(particles, MCTRUTH_parts)
#P -> LONG LIVED ANCESTOR
evt_vars[f'ALL{suffix}_LONGLIVED_ANCESTOR_ID[{index_name}]'] = ALLPART_LONGLIVED_ANCESTOR_ID(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_LONGLIVED_ANCESTOR_KEY[{index_name}]'] = ALLPART_LONGLIVED_ANCESTOR_KEY(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_ORGIN_KEY[{index_name}]'] = ALLPART_TRUE_ORGIN_KEY(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_ORGIN_X[{index_name}]'] = ALLPART_TRUE_ORGIN_X(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_ORGIN_Y[{index_name}]'] = ALLPART_TRUE_ORGIN_Y(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_TRUE_ORGIN_Z[{index_name}]'] = ALLPART_TRUE_ORGIN_Z(particles, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_1_ID[{index_name}]'] = ALLPART_MOTHER_ID(particles, 1, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_1_KEY[{index_name}]'] = ALLPART_MOTHER_KEY(particles, 1, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_2_ID[{index_name}]'] = ALLPART_MOTHER_ID(particles, 2, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_2_KEY[{index_name}]'] = ALLPART_MOTHER_KEY(particles, 2, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_3_ID[{index_name}]'] = ALLPART_MOTHER_ID(particles, 3, MCTRUTH_parts)
evt_vars[f'ALL{suffix}_MOTHER_3_KEY[{index_name}]'] = ALLPART_MOTHER_KEY(particles, 3, MCTRUTH_parts)
#evt_vars[f'ALL{suffix}_HISTORY[{index_name}]'] = ALLPART_HISTORY(particles)
#evt_vars[f'ALL{suffix}_FLAG[{index_name}]'] = ALLPART_FLAG(particles)
def get_user_algs(decay_channel):
"""
decay_channel: decay channel to be used in the lines.
Options: DstMu, DstTau_Lep, DstTau_Had, JpsiK_E, JpsiK_Mu
"""
#line name
line_name = f'Hlt2SLB_BTo{decay_channel}'
#Run over events that have fired the line
my_filter = create_lines_filter(name="Filter", lines=[line_name])
#get Bs and particles
Bs = get_particles(f"/Event/HLT2/{line_name}/Particles")
long_particles = get_particles(f"/Event/HLT2/{line_name}/ExtraLongPions/Particles")
down_particles = get_particles(f"/Event/HLT2/{line_name}/ExtraDownPions/Particles")
up_particles = get_particles(f"/Event/HLT2/{line_name}/ExtraUpPions/Particles")
#get MCTRUTH for Bs
MCTRUTH_Bs = MCTruthAndBkgCat(Bs, name='MCTRUTH_Bs')
#get MCTRUTH for particles
MCTRUTH_long_parts = MCTruthAndBkgCat(long_particles, name='MCTRUTHLONG_extra')
MCTRUTH_down_parts = MCTruthAndBkgCat(down_particles, name='MCTRUTHDOWN_extra')
MCTRUTH_up_parts = MCTruthAndBkgCat(up_particles, name='MCTRUTHUP_extra')
#get true id of B candidate (hepful to run over events that have a true Bcand)
if decay_channel == 'DstMu' or decay_channel == 'DstTau_Lep':
#Bd -> D*- mu+ nu; D*- -> D0 pi-; D0 -> K pi
#Bd -> D*- tau+ nu; D*- -> D0 pi-; D0 -> K pi and tau -> mu nu nu
B_ID = 511
elif decay_channel == 'D0Tau_Had' or decay_channel == 'JpsiK_E' or decay_channel == 'JpsiK_Mu':
#Bu -> D*- tau+ nu; D*- -> D0 pi-; D0 -> K pi and tau -> 3pi
#Bu -> Jpsi K; Jpsi -> mu mu
B_ID = 521
else:
raise ValueError(f"Invalid decay channel {decay_channel}")
#run over events that have a true Bcand
cut_event = F.MAP_ANY_OF(F.VALUE_OR(0) @ MCTRUTH_Bs(F.ABS @ F.PARTICLE_ID) == B_ID) @ F.TES(Bs)
truth_filter_event = VoidFilter(name='EventTruthFilter', Cut=cut_event)
#filter Bcands
cut_B = F.VALUE_OR(0) @ MCTRUTH_Bs(F.ABS @ F.PARTICLE_ID) == B_ID
Bcands = ParticleFilter(Input=Bs, Cut=F.FILTER(cut_B), name='signalB') #filter the B candidates
#get TES location of all descendants
all_descendants = FlattenDecayTree(InputParticles=Bcands, name="FlattenedDecayTree").OutputParticles
all_basics = ParticleFilter(all_descendants, F.FILTER(F.ISBASICPARTICLE), name = "AllBasics")
#get velo tracks
velo_tracks = make_tracks('VeloTracks')
#get pvs
pvs = get_pvs()
#get global event variables
evt_vars = FC.RecSummary()
#get pv variables
evt_vars['ALLPV_CHI2[pv_indx]'] = ALLPV_CHI2(pvs)
evt_vars['ALLPV_NDOF[pv_indx]'] = ALLPV_NDOF(pvs)
evt_vars['ALLPV_X[pv_indx]'] = ALLPV_X(pvs)
evt_vars['ALLPV_Y[pv_indx]'] = ALLPV_Y(pvs)
evt_vars['ALLPV_Z[pv_indx]'] = ALLPV_Z(pvs)
evt_vars['ALLPV_XERR[pv_indx]'] = ALLPV_POSERR(pvs, 0)
evt_vars['ALLPV_YERR[pv_indx]'] = ALLPV_POSERR(pvs, 1)
evt_vars['ALLPV_ZERR[pv_indx]'] = ALLPV_POSERR(pvs, 2)
#get long/down/up type particle variables
get_all_part_vars(evt_vars, long_particles, pvs, MCTRUTH_long_parts, index_name='long_indx', suffix="LONGPART", is_long=True)
get_all_part_vars(evt_vars, down_particles, pvs, MCTRUTH_down_parts, index_name='down_indx', suffix="DOWNPART")
get_all_part_vars(evt_vars, up_particles, pvs, MCTRUTH_up_parts, index_name='up_indx', suffix="UPPART")
#get Bcand variables
evt_vars['ALLB_ID[bcand_indx]'] = ALLB_ID(Bcands)
evt_vars['ALLB_KEY[bcand_indx]'] = ALLB_KEY(Bcands)
evt_vars['ALLB_ENDVTX_CHI2[bcand_indx]'] = ALLB_ENDVTX_CHI2(Bcands)
evt_vars['ALLB_ENDVTX_NDOF[bcand_indx]'] = ALLB_ENDVTX_NDOF(Bcands)
evt_vars['ALLB_ENDVTX_X[bcand_indx]'] = ALLB_ENDVTX_X(Bcands)
evt_vars['ALLB_ENDVTX_Y[bcand_indx]'] = ALLB_ENDVTX_Y(Bcands)
evt_vars['ALLB_ENDVTX_Z[bcand_indx]'] = ALLB_ENDVTX_Z(Bcands)
evt_vars['ALLB_ENDVTX_XERR[bcand_indx]'] = ALLB_ENDVTX_POSERR(Bcands, 0)
evt_vars['ALLB_ENDVTX_YERR[bcand_indx]'] = ALLB_ENDVTX_POSERR(Bcands, 1)
evt_vars['ALLB_ENDVTX_ZERR[bcand_indx]'] = ALLB_ENDVTX_POSERR(Bcands, 2)
evt_vars['ALLB_PX[bcand_indx]'] = ALLB_PX(Bcands)
evt_vars['ALLB_PY[bcand_indx]'] = ALLB_PY(Bcands)
evt_vars['ALLB_PZ[bcand_indx]'] = ALLB_PZ(Bcands)
evt_vars['ALLB_PXERR[bcand_indx]'] = ALLB_MOMERR(Bcands, 0)
evt_vars['ALLB_PYERR[bcand_indx]'] = ALLB_MOMERR(Bcands, 1)
evt_vars['ALLB_PZERR[bcand_indx]'] = ALLB_MOMERR(Bcands, 2)
evt_vars['ALLB_ENERGY[bcand_indx]'] = ALLB_ENERGY(Bcands)
evt_vars['ALLB_MASS[bcand_indx]'] = ALLB_MASS(Bcands)
evt_vars['ALLB_ETA[bcand_indx]'] = ALLB_ETA(Bcands)
evt_vars['ALLB_PHI[bcand_indx]'] = ALLB_PHI(Bcands)
#P -> MCP
evt_vars['ALLB_TRUE_ID[bcand_indx]'] = ALLB_TRUE_ID(Bcands, MCTRUTH_Bs)
evt_vars['ALLB_TRUE_KEY[bcand_indx]'] = ALLB_TRUE_KEY(Bcands, MCTRUTH_Bs)
evt_vars['ALLB_TRUE_PV_X[bcand_indx]'] = ALLB_TRUE_PV_X(Bcands, MCTRUTH_Bs)
evt_vars['ALLB_TRUE_PV_Y[bcand_indx]'] = ALLB_TRUE_PV_Y(Bcands, MCTRUTH_Bs)
evt_vars['ALLB_TRUE_PV_Z[bcand_indx]'] = ALLB_TRUE_PV_Z(Bcands, MCTRUTH_Bs)
##evt_vars['ALLB_TRUE_B0[bcand_indx]'] = ALLB_TRUE_ID(Bcands, MCTRUTH_Bs)
##evt_vars['ALLB_TRUE_DST[bcand_indx]'] = ALLB_TRUE_CHILD1_ID(Bcands, MCTRUTH_Bs) #D*-
##evt_vars['ALLB_TRUE_MU[bcand_indx]'] = ALLB_TRUE_CHILD2_ID(Bcands, MCTRUTH_Bs) #mu
##evt_vars['ALLB_TRUE_D0[bcand_indx]'] = ALLB_TRUE_CHILD11_ID(Bcands, MCTRUTH_Bs) #D0
##evt_vars['ALLB_TRUE_PI1[bcand_indx]'] = ALLB_TRUE_CHILD12_ID(Bcands, MCTRUTH_Bs) #pi
##evt_vars['ALLB_TRUE_K[bcand_indx]'] = ALLB_TRUE_CHILD111_ID(Bcands, MCTRUTH_Bs) #K
##evt_vars['ALLB_TRUE_PI2[bcand_indx]'] = ALLB_TRUE_CHILD112_ID(Bcands, MCTRUTH_Bs) #pi
##all basic particles of Bcands
get_all_part_vars(evt_vars, all_basics, pvs, MCTRUTH_Bs, index_name='basics_indx', suffix="BASICS")
#get velo tracks variables
evt_vars['ALLVELOTRACKS_ETA[velo_trk_indx]'] = ALLVELOTRACKS_ETA(velo_tracks)
evt_vars['ALLVELOTRACKS_PHI[velo_trk_indx]'] = ALLVELOTRACKS_PHI(velo_tracks)
#FirstState
evt_vars['ALLVELOTRACKS_X[velo_trk_indx]'] = ALLVELOTRACKS_X(velo_tracks)
evt_vars['ALLVELOTRACKS_Y[velo_trk_indx]'] = ALLVELOTRACKS_Y(velo_tracks)
evt_vars['ALLVELOTRACKS_Z[velo_trk_indx]'] = ALLVELOTRACKS_Z(velo_tracks)
evt_vars['ALLVELOTRACKS_TX[velo_trk_indx]'] = ALLVELOTRACKS_TX(velo_tracks)
evt_vars['ALLVELOTRACKS_TY[velo_trk_indx]'] = ALLVELOTRACKS_TY(velo_tracks)
#velo BPV information
evt_vars['ALLVELOTRACKS_BPV_KEY[velo_trk_indx]'] = ALLVELOTRACKS_BPV_KEY(velo_tracks, pvs)
evt_vars['ALLVELOTRACKS_BPV_X[velo_trk_indx]'] = ALLVELOTRACKS_BPV_X(velo_tracks, pvs)
evt_vars['ALLVELOTRACKS_BPV_Y[velo_trk_indx]'] = ALLVELOTRACKS_BPV_Y(velo_tracks, pvs)
evt_vars['ALLVELOTRACKS_BPV_Z[velo_trk_indx]'] = ALLVELOTRACKS_BPV_Z(velo_tracks, pvs)
evt_vars['ALLVELOTRACKS_BPV_IP[velo_trk_indx]'] = ALLVELOTRACKS_BPV_IP(velo_tracks, pvs)
evt_vars['ALLVELOTRACKS_BPV_IPCHI2[velo_trk_indx]'] = ALLVELOTRACKS_BPV_IPCHI2(velo_tracks, pvs)
#throws error about pointer
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_X[velo_trk_indx]'] = ALLVELOTRACKS_FIRSTMEAS_X(velo_tracks)
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_Y[velo_trk_indx]'] = ALLVELOTRACKS_FIRSTMEAS_Y(velo_tracks)
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_Z[velo_trk_indx]'] = ALLVELOTRACKS_FIRSTMEAS_Z(velo_tracks)
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_XERR[velo_trk_indx]'] = ALLVELOTRACKS_POSERR(velo_tracks, 0)
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_YERR[velo_trk_indx]'] = ALLVELOTRACKS_POSERR(velo_tracks, 1)
#evt_vars['ALLVELOTRACKS_FIRSTMEAS_ZERR[velo_trk_indx]'] = ALLVELOTRACKS_POSERR(velo_tracks, 2)
#evt_vars['ALLVELOTRACKS_ENDVELO_X[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_X(velo_tracks)
#evt_vars['ALLVELOTRACKS_ENDVELO_Y[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_Y(velo_tracks)
#evt_vars['ALLVELOTRACKS_ENDVELO_Z[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_Z(velo_tracks)
#evt_vars['ALLVELOTRACKS_ENDVELO_XERR[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_POSERR(velo_tracks, 0)
#evt_vars['ALLVELOTRACKS_ENDVELO_YERR[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_POSERR(velo_tracks, 1)
#evt_vars['ALLVELOTRACKS_ENDVELO_ZERR[velo_trk_indx]'] = ALLVELOTRACKS_ENDVELO_POSERR(velo_tracks, 2)
# define tupling algorithm
tuple_file = FunTuple_Event(name="Tuple", tuple_name="EventInfo", variables=evt_vars)
#define algorithms
user_algorithms = {}
user_algorithms['Alg'] = [my_filter, truth_filter_event, tuple_file]
return user_algorithms
\ No newline at end of file
Loading