From 860a0bf55753e4f7709a04ba85e02fb623ed1127 Mon Sep 17 00:00:00 2001 From: mstahl <marian.stahl@cern.ch> Date: Fri, 25 Mar 2022 11:02:48 -0400 Subject: [PATCH] [charm/prod_xsec] drop charm builders --- .../python/Hlt2Conf/lines/charm/prod_xsec.py | 639 ++++++++++-------- 1 file changed, 349 insertions(+), 290 deletions(-) diff --git a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/prod_xsec.py b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/prod_xsec.py index 4240ae42631..e78c2bd8348 100644 --- a/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/prod_xsec.py +++ b/Hlt/Hlt2Conf/python/Hlt2Conf/lines/charm/prod_xsec.py @@ -83,21 +83,19 @@ four-body lines: ''' import math +import Functors as F +from Functors.math import in_range from GaudiKernel.SystemOfUnits import MeV, picosecond, GeV, mm, mrad - from PyConf import configurable from Moore.config import register_line_builder from Moore.lines import Hlt2Line -import Functors as F from RecoConf.reconstruction_objects import make_pvs from Hlt2Conf.standard_particles import ( make_long_pions, make_has_rich_long_pions, make_has_rich_down_pions, make_has_rich_long_kaons, make_has_rich_long_protons) -from Hlt2Conf.algorithms_thor import ParticleCombiner, ParticleFilter, require_all +from Hlt2Conf.algorithms_thor import ParticleFilter, ParticleCombiner, require_all from Hlt2Conf.algorithms import ParticleContainersMerger from .prefilters import charm_prefilters -from .builders import (filter_particles, combine_2body, combine_3body, - combine_4body) from .particle_properties import _PION_M, _D0_M, _DP_M, _DS_M, _KS_M ################################################################################# @@ -105,53 +103,70 @@ from .particle_properties import _PION_M, _D0_M, _DP_M, _DS_M, _KS_M ################################################################################# -def xsec_make_loose_long_pions_from_d(): - return filter_particles( +def _xsec_make_loose_long_pions_from_d(): + return ParticleFilter( make_has_rich_long_pions(), - pvs=make_pvs(), - pt_min=200 * MeV, - mipchi2_min=4., - p_min=2 * GeV, - dllk_max=5.) + F.FILTER( + require_all( + F.PT > 200 * MeV, + F.MINIPCHI2CUT(IPChi2Cut=4., Vertices=make_pvs()), + F.P > 2 * GeV, + F.PID_K < 5., + ), ), + ) -def xsec_make_long_pions_from_d(): - return filter_particles( +def _xsec_make_long_pions_from_d(): + return ParticleFilter( make_has_rich_long_pions(), - pvs=make_pvs(), - pt_min=250 * MeV, - mipchi2_min=16., - p_min=2 * GeV, - dllk_max=5.) + F.FILTER( + require_all( + F.PT > 250 * MeV, + F.MINIPCHI2CUT(IPChi2Cut=16., Vertices=make_pvs()), + F.P > 2 * GeV, + F.PID_K < 5., + ), ), + ) -def xsec_make_loose_long_kaons_from_d(): - return filter_particles( +def _xsec_make_loose_long_kaons_from_d(): + return ParticleFilter( make_has_rich_long_kaons(), - pvs=make_pvs(), - pt_min=200 * MeV, - mipchi2_min=4., - p_min=2 * GeV, - dllk_min=5.) + F.FILTER( + require_all( + F.PT > 200 * MeV, + F.MINIPCHI2CUT(IPChi2Cut=4., Vertices=make_pvs()), + F.P > 2 * GeV, + F.PID_K > 5., + ), ), + ) -def xsec_make_long_kaons_from_d(): - return filter_particles( +def _xsec_make_long_kaons_from_d(): + return ParticleFilter( make_has_rich_long_kaons(), - pvs=make_pvs(), - pt_min=250 * MeV, - mipchi2_min=16., - p_min=2 * GeV, - dllk_min=5.) + F.FILTER( + require_all( + F.PT > 250 * MeV, + F.MINIPCHI2CUT(IPChi2Cut=16., Vertices=make_pvs()), + F.P > 2 * GeV, + F.PID_K > 5., + ), ), + ) -def xsec_make_long_soft_pions_from_d(): - return filter_particles( - make_long_pions(), pt_min=100 * MeV, p_min=1.5 * GeV) +def _xsec_make_long_soft_pions_from_d(): + return ParticleFilter( + make_long_pions(), + F.FILTER(require_all( + F.PT > 100 * MeV, + F.P > 1.5 * GeV, + ), ), + ) @configurable -def xsec_make_dzeros_Kpi( +def _xsec_make_dzeros_Kpi( comb_m_window=90 * MeV, m_window=80 * MeV, # TODO: not present in Run2 but certainly good, also think of HLT1 @@ -162,26 +177,28 @@ def xsec_make_dzeros_Kpi( # TODO: this cut essentially controls rate bpvfdchi2_min=49., bpvdira_min=math.cos(17 * mrad)): - return combine_2body( - xsec_make_long_kaons_from_d(), - xsec_make_long_pions_from_d(), - "[D0 -> K- pi+]cc", - pvs=make_pvs(), + return ParticleCombiner( + [_xsec_make_long_kaons_from_d(), + _xsec_make_long_pions_from_d()], + DecayDescriptor="[D0 -> K- pi+]cc", name="Charm_XSec_D0_KmPip", - comb_m_min=_D0_M - comb_m_window, - comb_m_max=_D0_M + comb_m_window, - m_min=_D0_M - m_window, - m_max=_D0_M + m_window, - max_pt_min=max_pt_min, - doca_max=doca_max, - vchi2dof_max=vchi2dof_max, - bpvfdchi2_min=bpvfdchi2_min, - bpvdira_min=bpvdira_min) + CombinationCut=require_all( + in_range(_D0_M - comb_m_window, F.MASS, _D0_M + comb_m_window), + F.MAXDOCACUT(doca_max), + F.MAX(F.PT) > max_pt_min, + ), + CompositeCut=require_all( + in_range(_D0_M - m_window, F.MASS, _D0_M + m_window), + F.CHI2DOF < vchi2dof_max, + F.BPVFDCHI2(make_pvs()) > bpvfdchi2_min, + F.BPVDIRA(make_pvs()) > bpvdira_min, + ), + ) # FIXME: make a 2 or 3 out of 4 track req in IPCHI2 @configurable -def xsec_make_dzeros_Kpipipi( +def _xsec_make_dzeros_Kpipipi( comb_m_window=90 * MeV, m_window=80 * MeV, # TODO: design better PT cut strategy @@ -192,32 +209,34 @@ def xsec_make_dzeros_Kpipipi( vchi2dof_max=25., bpvfdchi2_min=16., bpvdira_min=math.cos(20 * mrad)): - - comb123_m_max = _D0_M + comb_m_window - _PION_M - comb12_m_max = _D0_M + comb_m_window - 2 * _PION_M - return combine_4body( - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_pions_from_d(), - xsec_make_loose_long_pions_from_d(), - xsec_make_loose_long_pions_from_d(), - "[D0 -> K- pi- pi+ pi+]cc", - pvs=make_pvs(), + # TODO: design better PT cut strategy + return ParticleCombiner( + [ + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_pions_from_d(), + _xsec_make_loose_long_pions_from_d(), + _xsec_make_loose_long_pions_from_d() + ], + DecayDescriptor="[D0 -> K- pi- pi+ pi+]cc", name="Charm_XSec_D0_KmPimPipPip", - comb_m_min=_D0_M - comb_m_window, - comb_m_max=_D0_M + comb_m_window, - m_min=_D0_M - m_window, - m_max=_D0_M + m_window, - max_mipchi2_min=max_mipchi2_min, - docachi2_max=docachi2_max, - comb123_m_max=comb123_m_max, - comb12_m_max=comb12_m_max, - vchi2dof_max=vchi2dof_max, - bpvfdchi2_min=bpvfdchi2_min, - bpvdira_min=bpvdira_min) + Combination12Cut=F.MASS < _D0_M + comb_m_window - 2 * _PION_M, + Combination123Cut=F.MASS < _D0_M + comb_m_window - _PION_M, + CombinationCut=require_all( + in_range(_D0_M - comb_m_window, F.MASS, _D0_M + comb_m_window), + F.MAXDOCACHI2CUT(docachi2_max), + F.MAX(F.MINIPCHI2(make_pvs())) > max_mipchi2_min, + ), + CompositeCut=require_all( + in_range(_D0_M - m_window, F.MASS, _D0_M + m_window), + F.CHI2DOF < vchi2dof_max, + F.BPVFDCHI2(make_pvs()) > bpvfdchi2_min, + F.BPVDIRA(make_pvs()) > bpvdira_min, + ), + ) @configurable -def xsec_make_dplus_Kpipi( +def _xsec_make_dplus_Kpipi( comb_m_window=90 * MeV, m_window=80 * MeV, # TODO: too hard? depends on HLT1 @@ -230,32 +249,33 @@ def xsec_make_dplus_Kpipi( bpvfdchi2_min=16., bpvltime_min=0.15 * picosecond, bpvdira_min=math.cos(35 * mrad)): - - comb12_m_max = _DP_M + comb_m_window - _PION_M - return combine_3body( - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_pions_from_d(), - xsec_make_loose_long_pions_from_d(), - "[D+ -> K- pi+ pi+]cc", - pvs=make_pvs(), + return ParticleCombiner( + [ + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_pions_from_d(), + _xsec_make_loose_long_pions_from_d() + ], + DecayDescriptor="[D+ -> K- pi+ pi+]cc", name="Charm_XSec_Dp_KmPipPip", - comb_m_min=_DP_M - comb_m_window, - comb_m_max=_DP_M + comb_m_window, - m_min=_DP_M - m_window, - m_max=_DP_M + m_window, - max_pt_min=max_pt_min, - max_mipchi2_min=max_mipchi2_min, - trk_2of3_pt_min=trk_2of3_pt_min, - trk_2of3_mipchi2_min=trk_2of3_mipchi2_min, - comb12_m_max=comb12_m_max, - vchi2dof_max=vchi2dof_max, - bpvfdchi2_min=bpvfdchi2_min, - bpvltime_min=bpvltime_min, - bpvdira_min=bpvdira_min) + Combination12Cut=F.MASS < _DP_M + comb_m_window - _PION_M, + CombinationCut=require_all( + in_range(_DP_M - comb_m_window, F.MASS, _DP_M + comb_m_window), + F.MAX(F.PT) > max_pt_min, + F.SUM(F.PT > trk_2of3_pt_min) > 1, + F.MAX(F.MINIPCHI2(make_pvs())) > max_mipchi2_min, + F.SUM(F.MINIPCHI2(make_pvs()) > trk_2of3_mipchi2_min) > 1, + ), + CompositeCut=require_all( + in_range(_DP_M - m_window, F.MASS, _DP_M + m_window), + F.CHI2DOF < vchi2dof_max, + F.BPVFDCHI2(make_pvs()) > bpvfdchi2_min, + F.BPVLTIME(make_pvs()) > bpvltime_min, + F.BPVDIRA(make_pvs()) > bpvdira_min, + ), + ) -@configurable -def xsec_make_dplus_KKpi( +def _xsec_make_dplus_KKpi( comb_m_window=90 * MeV, m_window=80 * MeV, # TODO: too hard? @@ -269,31 +289,34 @@ def xsec_make_dplus_KKpi( bpvltime_min=0.15 * picosecond, bpvdira_min=math.cos(35 * mrad)): - comb12_m_max = _DP_M + comb_m_window - _PION_M - return combine_3body( - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_pions_from_d(), - "[D+ -> K- K+ pi+]cc", - pvs=make_pvs(), + return ParticleCombiner( + [ + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_pions_from_d() + ], + DecayDescriptor="[D+ -> K- K+ pi+]cc", name="Charm_XSec_Dp_KmKpPip", - comb_m_min=_DP_M - comb_m_window, - comb_m_max=_DP_M + comb_m_window, - m_min=_DP_M - m_window, - m_max=_DP_M + m_window, - max_pt_min=max_pt_min, - max_mipchi2_min=max_mipchi2_min, - trk_2of3_pt_min=trk_2of3_pt_min, - trk_2of3_mipchi2_min=trk_2of3_mipchi2_min, - comb12_m_max=comb12_m_max, - vchi2dof_max=vchi2dof_max, - bpvfdchi2_min=bpvfdchi2_min, - bpvltime_min=bpvltime_min, - bpvdira_min=bpvdira_min) + Combination12Cut=F.MASS < _DP_M + comb_m_window - _PION_M, + CombinationCut=require_all( + in_range(_DP_M - comb_m_window, F.MASS, _DP_M + comb_m_window), + # TODO: too hard? + F.MAX(F.PT) > max_pt_min, + F.SUM(F.PT > trk_2of3_pt_min) > 1, + F.MAX(F.MINIPCHI2(make_pvs())) > max_mipchi2_min, + F.SUM(F.MINIPCHI2(make_pvs()) > trk_2of3_mipchi2_min) > 1, + ), + CompositeCut=require_all( + in_range(_DP_M - m_window, F.MASS, _DP_M + m_window), + F.CHI2DOF < vchi2dof_max, + F.BPVFDCHI2(make_pvs()) > bpvfdchi2_min, + F.BPVLTIME(make_pvs()) > bpvltime_min, + F.BPVDIRA(make_pvs()) > bpvdira_min, + ), + ) -@configurable -def xsec_make_d_splus_KKpi( +def _xsec_make_d_splus_KKpi( comb_m_window=90 * MeV, m_window=80 * MeV, # TODO: too hard? @@ -307,45 +330,51 @@ def xsec_make_d_splus_KKpi( bpvfdchi2_min=16., bpvltime_min=0.15 * picosecond, bpvdira_min=math.cos(35 * mrad)): - - comb12_m_max = _DS_M + comb_m_window - _PION_M - return combine_3body( - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_kaons_from_d(), - xsec_make_loose_long_pions_from_d(), - "[D_s+ -> K- K+ pi+]cc", - pvs=make_pvs(), + return ParticleCombiner( + [ + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_kaons_from_d(), + _xsec_make_loose_long_pions_from_d() + ], + DecayDescriptor="[D_s+ -> K- K+ pi+]cc", name="Charm_XSec_Dsp_KmKpPip", - comb_m_min=_DS_M - comb_m_window, - comb_m_max=_DS_M + comb_m_window, - m_min=_DS_M - m_window, - m_max=_DS_M + m_window, - max_pt_min=max_pt_min, - max_mipchi2_min=max_mipchi2_min, - trk_2of3_pt_min=trk_2of3_pt_min, - trk_2of3_mipchi2_min=trk_2of3_mipchi2_min, - comb12_m_max=comb12_m_max, - vchi2dof_max=vchi2dof_max, - bpvfdchi2_min=bpvfdchi2_min, - bpvltime_min=bpvltime_min, - bpvdira_min=bpvdira_min) + Combination12Cut=F.MASS < _DS_M + comb_m_window - _PION_M, + CombinationCut=require_all( + in_range(_DS_M - comb_m_window, F.MASS, _DS_M + comb_m_window), + F.MAX(F.PT) > max_pt_min, + F.SUM(F.PT > trk_2of3_pt_min) > 1, + F.MAX(F.MINIPCHI2(make_pvs())) > max_mipchi2_min, + F.SUM(F.MINIPCHI2(make_pvs()) > trk_2of3_mipchi2_min) > 1, + ), + CompositeCut=require_all( + in_range(_DS_M - m_window, F.MASS, _DS_M + m_window), + F.CHI2DOF < vchi2dof_max, + F.BPVFDCHI2(make_pvs()) > bpvfdchi2_min, + F.BPVLTIME(make_pvs()) > bpvltime_min, + F.BPVDIRA(make_pvs()) > bpvdira_min, + ), + ) -@configurable -def xsec_make_dstars_D0pi(make_dzeros, - comb_delta_m_min=130 * MeV - _PION_M, - comb_delta_m_max=165 * MeV - _PION_M, - delta_m_max=160 * MeV - _PION_M, - vchi2dof_max=25.): - return combine_2body( - make_dzeros(), - xsec_make_long_soft_pions_from_d(), - "[D*(2010)+ -> D0 pi+]cc", +def _xsec_make_dstars_D0pi(dzeros, + pions, + comb_delta_m_min=130 * MeV, + comb_delta_m_max=165 * MeV, + delta_m_max=160 * MeV, + vchi2dof_max=25.): + return ParticleCombiner( + [dzeros, pions], + DecayDescriptor="[D*(2010)+ -> D0 pi+]cc", name="Charm_XSec_Dstp_D0pip", - comb_delta_m_min=comb_delta_m_min, - comb_delta_m_max=comb_delta_m_max, - delta_m_max=delta_m_max, - vchi2dof_max=vchi2dof_max) + CombinationCut=require_all( + F.MASS - F.CHILD(1, F.MASS) > comb_delta_m_min, + F.MASS - F.CHILD(1, F.MASS) < comb_delta_m_max, + ), + CompositeCut=require_all( + F.MASS - F.CHILD(1, F.MASS) < delta_m_max, + F.CHI2DOF < vchi2dof_max, + ), + ) all_lines = {} @@ -355,7 +384,7 @@ all_lines = {} @register_line_builder(all_lines) def dzero2kpi_line(name='Hlt2Charm_D0ToKmPip_XSec_Line', prescale=1.): - dzeros = xsec_make_dzeros_Kpi() + dzeros = _xsec_make_dzeros_Kpi() return Hlt2Line( name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -364,15 +393,19 @@ def dzero2kpi_line(name='Hlt2Charm_D0ToKmPip_XSec_Line', prescale=1.): @register_line_builder(all_lines) def dstarp2dzeropip_dzero2kmpip_line( name='Hlt2Charm_DstpToD0Pip_D0ToKmPip_XSec_Line', prescale=1.): - dstars = xsec_make_dstars_D0pi(xsec_make_dzeros_Kpi) + dzeros = _xsec_make_dzeros_Kpi() + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @register_line_builder(all_lines) def dzero2k3pi_line(name='Hlt2Charm_D0ToKmPimPipPip_XSec_Line', prescale=1.): - dzeros = xsec_make_dzeros_Kpipipi() + dzeros = _xsec_make_dzeros_Kpipipi() return Hlt2Line( name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -381,15 +414,19 @@ def dzero2k3pi_line(name='Hlt2Charm_D0ToKmPimPipPip_XSec_Line', prescale=1.): @register_line_builder(all_lines) def dstarp2dzeropip_dzero2k3pi_line( name='Hlt2Charm_DstpToD0Pip_D0ToKmPimPipPip_XSec_Line', prescale=1.): - dstars = xsec_make_dstars_D0pi(xsec_make_dzeros_Kpipipi) + dzeros = _xsec_make_dzeros_Kpipipi() + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @register_line_builder(all_lines) def dplus2kpipi_line(name='Hlt2Charm_DpToKmPipPip_XSec_Line', prescale=1.): - dpluses = xsec_make_dplus_Kpipi() + dpluses = _xsec_make_dplus_Kpipi() return Hlt2Line( name=name, algs=charm_prefilters() + [dpluses], prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -397,7 +434,7 @@ def dplus2kpipi_line(name='Hlt2Charm_DpToKmPipPip_XSec_Line', prescale=1.): @register_line_builder(all_lines) def dplus2kkpi_line(name='Hlt2Charm_DpToKmKpPip_XSec_Line', prescale=1.): - dpluses = xsec_make_dplus_KKpi() + dpluses = _xsec_make_dplus_KKpi() return Hlt2Line( name=name, algs=charm_prefilters() + [dpluses], prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -405,7 +442,7 @@ def dplus2kkpi_line(name='Hlt2Charm_DpToKmKpPip_XSec_Line', prescale=1.): @register_line_builder(all_lines) def dsplus2kkpi_line(name='Hlt2Charm_DspToKmKpPip_XSec_Line', prescale=1.): - dspluses = xsec_make_d_splus_KKpi() + dspluses = _xsec_make_d_splus_KKpi() return Hlt2Line( name=name, algs=charm_prefilters() + [dspluses], prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -422,7 +459,7 @@ def xsec_make_protons_from_baryons( p_min=10 * GeV, mipchi2_min=6.0, dllp_min=5.0, - #dllp_m_dllk_min=5.0 + #dllp_m_dllk_min > 5.0 ): pvs = make_pvs() return ParticleFilter( @@ -445,30 +482,39 @@ def xsec_make_kaons_from_baryons( trchi2dof_max=3.0, dllk_min=5.0, ): - return filter_particles( + pvs = make_pvs() + return ParticleFilter( make_has_rich_long_kaons(), - pvs=make_pvs(), - pt_min=pt_min, - p_min=p_min, - mipchi2_min=mipchi2_min, - trchi2dof_max=trchi2dof_max, - dllk_min=dllk_min) + F.FILTER( + require_all( + F.PT > pt_min, + F.P > p_min, + F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs), + F.CHI2DOF < trchi2dof_max, + F.PID_K > dllk_min, + ), ), + ) -@configurable -def xsec_make_pions_from_baryons(pt_min=200 * MeV, - p_min=1 * GeV, - mipchi2_min=6.0, - trchi2dof_max=3.0, - dllk_max=5.0): - return filter_particles( +def xsec_make_pions_from_baryons( + pt_min=200 * MeV, + p_min=1 * GeV, + mipchi2_min=6.0, + trchi2dof_max=3.0, + dllk_max=5.0, +): + pvs = make_pvs() + return ParticleFilter( make_has_rich_long_pions(), - pvs=make_pvs(), - pt_min=pt_min, - p_min=p_min, - mipchi2_min=mipchi2_min, - trchi2dof_max=trchi2dof_max, - dllk_max=dllk_max) + F.FILTER( + require_all( + F.PT > pt_min, + F.P > p_min, + F.MINIPCHI2CUT(IPChi2Cut=mipchi2_min, Vertices=pvs), + F.CHI2DOF < trchi2dof_max, + F.PID_K < dllk_max, + ), ), + ) @configurable @@ -647,9 +693,9 @@ def xsec_make_double_charm(charm_hadrons, descriptor): def xsec_make_charm_hadron_container(): - dzeros = xsec_make_dzeros_Kpi() - dplus = xsec_make_dplus_Kpipi() - d_splus = xsec_make_d_splus_KKpi() + dzeros = _xsec_make_dzeros_Kpi() + dplus = _xsec_make_dplus_Kpipi() + d_splus = _xsec_make_d_splus_KKpi() lcps = xsec_make_lcp_pKpi() return ParticleContainersMerger([dzeros, dplus, d_splus, lcps], name="Charm_XSec_DoubleCharm_Merger") @@ -740,40 +786,50 @@ def xsec_make_long_pions_from_ks(): """Return maker for pions filtered by thresholds common to LL kshort decay product selections. """ - return filter_particles( + return ParticleFilter( make_has_rich_long_pions(), - pvs=make_pvs(), - mipchi2_min=36., - dllk_max=5.) + F.FILTER( + require_all( + F.MINIPCHI2CUT(IPChi2Cut=36., Vertices=make_pvs()), + F.PID_K < 5.), ), + ) def xsec_make_down_pions_from_ks(): """Return maker for pions filtered by thresholds common to DD kshort decay product selections. """ - return filter_particles( + return ParticleFilter( make_has_rich_down_pions(), - pt_min=175 * MeV, - p_min=3000 * MeV, - dllk_max=5.) + F.FILTER( + require_all( + F.PT > 175 * MeV, + F.P > 3000 * MeV, + F.PID_K < 5., + ), ), + ) def xsec_make_KSLL_from_d(): """ Returns KS0 -> pi+ pi- constructed with two long pions """ - return combine_2body( - xsec_make_long_pions_from_ks(), - xsec_make_long_pions_from_ks(), - decay_descriptor="KS0 -> pi+ pi-", - pvs=make_pvs(), + return ParticleCombiner( + [xsec_make_long_pions_from_ks(), + xsec_make_long_pions_from_ks()], + DecayDescriptor="KS0 -> pi+ pi-", name="Charm_XSec_Ks0LL_PipPim", - comb_m_min=_KS_M - 50 * MeV, - comb_m_max=_KS_M + 50 * MeV, - vchi2dof_max=30., - bpvltime_min=2 * picosecond, - m_min=_KS_M - 35 * MeV, - m_max=_KS_M + 35 * MeV) + CombinationCut=require_all( + F.MASS > _KS_M - 50 * MeV, + F.MASS < _KS_M + 50 * MeV, + ), + CompositeCut=require_all( + F.MASS > _KS_M - 35 * MeV, + F.MASS < _KS_M + 35 * MeV, + F.CHI2DOF < 30., + F.BPVLTIME(make_pvs()) > 2 * picosecond, + ), + ) def xsec_make_KSDD_from_d(): @@ -782,18 +838,21 @@ def xsec_make_KSDD_from_d(): Only the standard particles-maker cuts are applied """ - return combine_2body( - xsec_make_down_pions_from_ks(), - xsec_make_down_pions_from_ks(), - decay_descriptor="KS0 -> pi+ pi-", - pvs=make_pvs(), + return ParticleCombiner( + [xsec_make_down_pions_from_ks(), + xsec_make_down_pions_from_ks()], + DecayDescriptor="KS0 -> pi+ pi-", name="Charm_XSec_Ks0DD_PipPim", - comb_m_min=_KS_M - 80 * MeV, - comb_m_max=_KS_M + 80 * MeV, - vchi2dof_max=30., - bpvvdz_min=400 * mm, - m_min=_KS_M - 64 * MeV, - m_max=_KS_M + 64 * MeV, + CombinationCut=require_all( + F.MASS > _KS_M - 80 * MeV, + F.MASS < _KS_M + 80 * MeV, + ), + CompositeCut=require_all( + F.MASS > _KS_M - 64 * MeV, + F.CHI2DOF < 30., + F.BPVVDZ(make_pvs()) > 400 * mm, + F.MASS < _KS_M + 64 * MeV, + ), ) @@ -829,64 +888,24 @@ def xsec_make_dzero_Kshh(kshort, Remaining parameters define thresholds for the selection. """ - return combine_3body( - kshort, - hadron1, - hadron2, - descriptor, - pvs=make_pvs(), + return ParticleCombiner( + [kshort, hadron1, hadron2], + DecayDescriptor=descriptor, name="Charm_XSec_D0_Ks0hh", - comb_m_min=comb_m_min, - comb_m_max=comb_m_max, - sum_pt_min=sum_pt_min, - doca23_max=doca23_max, - comb12_m_max=comb12_m_max, - pt_min=pt_min, - bpvdira_min=bpvdira_min, - vchi2dof_max=vchi2dof_max, - bpvltime_min=bpvltime_min, - m_min=m_min, - m_max=m_max) - - -def xsec_make_dzero_KSLLpipi(): - """ - D0 --> KS0(LL) pi+ pi- maker. - """ - return xsec_make_dzero_Kshh(xsec_make_KSLL_from_d(), - xsec_make_long_pions_from_d(), - xsec_make_long_pions_from_d(), - "D0 -> KS0 pi+ pi-") - - -def xsec_make_dzero_KSDDpipi(): - """ - D0 --> KS0(DD) pi+ pi- maker. - """ - return xsec_make_dzero_Kshh(xsec_make_KSDD_from_d(), - xsec_make_long_pions_from_d(), - xsec_make_long_pions_from_d(), - "D0 -> KS0 pi+ pi-") - - -def xsec_make_dzero_KSLLKK(): - """ - D0 --> KS0(LL) K+ K- maker. - """ - return xsec_make_dzero_Kshh(xsec_make_KSLL_from_d(), - xsec_make_long_kaons_from_d(), - xsec_make_long_kaons_from_d(), - "D0 -> KS0 K+ K-") - - -def xsec_make_dzero_KSDDKK(): - """ - D0 --> KS0(DD) K+ K- maker. - """ - return xsec_make_dzero_Kshh(xsec_make_KSDD_from_d(), - xsec_make_long_kaons_from_d(), - xsec_make_long_kaons_from_d(), - "D0 -> KS0 K+ K-") + Combination12Cut=F.MASS < comb12_m_max, + CombinationCut=require_all( + in_range(comb_m_min, F.MASS, comb_m_max), + F.SUM(F.PT) > sum_pt_min, + F.DOCA(2, 3) < doca23_max, + ), + CompositeCut=require_all( + in_range(m_min, F.MASS, m_max), + F.PT > pt_min, + F.CHI2DOF < vchi2dof_max, + F.BPVDIRA(make_pvs()) > bpvdira_min, + F.BPVLTIME(make_pvs()) > bpvltime_min, + ), + ) ## D0 -> h+ h- KS0 Line builders @@ -897,9 +916,13 @@ def dzero2ksLLpipi_line(name='Hlt2Charm_D0ToKsPimPip_LL_XSec_Line', """ D0 --> KS0(LL) pi+ pi- line maker """ - dzeros = xsec_make_dzero_KSLLpipi() + kshorts = xsec_make_KSLL_from_d() + pions = _xsec_make_long_pions_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, pions, pions, "D0 -> KS0 pi+ pi-") return Hlt2Line( - name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -909,9 +932,13 @@ def dzero2ksDDpipi_line(name='Hlt2Charm_D0ToKsPimPip_DD_XSec_Line', """ D0 --> KS0(DD) pi+ pi- line maker """ - dzeros = xsec_make_dzero_KSDDpipi() + kshorts = xsec_make_KSDD_from_d() + pions = _xsec_make_long_pions_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, pions, pions, "D0 -> KS0 pi+ pi-") return Hlt2Line( - name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -920,9 +947,13 @@ def dzero2ksLLkk_line(name='Hlt2Charm_D0ToKsKmKp_LL_XSec_Line', prescale=1.): """ D0 --> KS0(DD) K+ K- line maker """ - dzeros = xsec_make_dzero_KSLLKK() + kshorts = xsec_make_KSLL_from_d() + kaons = _xsec_make_long_kaons_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, kaons, kaons, "D0 -> KS0 K+ K-") return Hlt2Line( - name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -931,9 +962,13 @@ def dzero2ksDDkk_line(name='Hlt2Charm_D0ToKsKmKp_DD_XSec_Line', prescale=1.): """ D0 --> KS0(DD) K+ K- line maker """ - dzeros = xsec_make_dzero_KSDDKK() + kshorts = xsec_make_KSDD_from_d() + kaons = _xsec_make_long_kaons_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, kaons, kaons, "D0 -> KS0 K+ K-") return Hlt2Line( - name=name, algs=charm_prefilters() + [dzeros], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -945,9 +980,15 @@ def dstar2dzeropi_dzero2ksLLpipi_line( Used for D0-D0bar tagging """ - dstars = xsec_make_dstars_D0pi(xsec_make_dzero_KSLLpipi) + kshorts = xsec_make_KSLL_from_d() + pions = _xsec_make_long_pions_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, pions, pions, "D0 -> KS0 pi+ pi-") + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -959,9 +1000,15 @@ def dstar2dzeropi_dzero2ksDDpipi_line( Used for D0-D0bar tagging """ - dstars = xsec_make_dstars_D0pi(xsec_make_dzero_KSDDpipi) + kshorts = xsec_make_KSDD_from_d() + pions = _xsec_make_long_pions_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, pions, pions, "D0 -> KS0 pi+ pi-") + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -973,9 +1020,15 @@ def dstar2dzeropi_dzero2ksLLkk_line( Used for D0-D0bar tagging """ - dstars = xsec_make_dstars_D0pi(xsec_make_dzero_KSLLKK) + kshorts = xsec_make_KSLL_from_d() + kaons = _xsec_make_long_kaons_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, kaons, kaons, "D0 -> KS0 K+ K-") + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") @@ -987,7 +1040,13 @@ def dstar2dzeropi_dzero2ksDDkk_line( Used for D0-D0bar tagging """ - dstars = xsec_make_dstars_D0pi(xsec_make_dzero_KSDDKK) + kshorts = xsec_make_KSDD_from_d() + kaons = _xsec_make_long_kaons_from_d() + dzeros = xsec_make_dzero_Kshh(kshorts, kaons, kaons, "D0 -> KS0 K+ K-") + dstars = _xsec_make_dstars_D0pi(dzeros, + _xsec_make_long_soft_pions_from_d()) return Hlt2Line( - name=name, algs=charm_prefilters() + [dstars], prescale=prescale) + name=name, + algs=charm_prefilters() + [kshorts, dzeros, dstars], + prescale=prescale) #hlt1_filter_code="HLT_PASS_RE('SuperDooperLineDecision')") -- GitLab