diff --git a/Hlt/Hlt2Lines/doc/release.notes b/Hlt/Hlt2Lines/doc/release.notes index f9d8e97aadd26ed9bf96ed196939a6827fdf6ca1..580bff46adcf0fa43a298ba91195ce0161a2c092 100644 --- a/Hlt/Hlt2Lines/doc/release.notes +++ b/Hlt/Hlt2Lines/doc/release.notes @@ -8,6 +8,9 @@ ! !---------------------------------------------------------------------------- +! 2016-05-15 - Sascha Stahl + - Add Hlt2 lines for semileptonic B decays. All lines go to Turbo. + ! 2016-05-15 - Jessica Prisciandaro - ProbNNe added to StrangeLFVMuonElectronSoft diff --git a/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Inputs.py b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Inputs.py new file mode 100644 index 0000000000000000000000000000000000000000..dbb490a1684bfdc79d55e10419d258889b60e678 --- /dev/null +++ b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Inputs.py @@ -0,0 +1,5 @@ +from HltTracking.Hlt2TrackingConfigurations import Hlt2BiKalmanFittedForwardTracking +from Hlt2SharedParticles.TrackFittedBasicParticles import BiKalmanFittedMuons as Hlt2LooseMuons +from Hlt2SharedParticles.TrackFittedBasicParticles import BiKalmanFittedRichPions as Hlt2LoosePions +from Hlt2SharedParticles.TrackFittedBasicParticles import BiKalmanFittedPions as Hlt2NoPIDPions +from Hlt2SharedParticles.TrackFittedBasicParticles import BiKalmanFittedRichKaons as Hlt2LooseKaons diff --git a/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Lines.py b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Lines.py new file mode 100644 index 0000000000000000000000000000000000000000..8c481faffa131dad4be0997f41e71f8060d282bf --- /dev/null +++ b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Lines.py @@ -0,0 +1,93 @@ +""" +Module for the selection of semileptonic B decays going to the Turbo stream. +""" +__author__ = "Sascha Stahl sascha.stahl@cern.ch" + +from GaudiKernel.SystemOfUnits import GeV, MeV, mm +from Hlt2Lines.Utilities.Hlt2LinesConfigurableUser import Hlt2LinesConfigurableUser +_local_m_pip = 139.57018 * MeV +class SLBLines(Hlt2LinesConfigurableUser) : + __slots__ = { + 'Prescale' : {}, + 'Postscale' : {}, + 'Common' : { 'TisTosSpec' : [], + 'Had_GHOSTPROB_MAX' : 1.0, + 'Had_PT_MIN' : 200.0*MeV, + 'Had_P_MIN' : 2000.0*MeV, + 'Had_MIPCHI2DV_MIN' : 9.0, + 'Mu_GHOSTPROB_MAX' : 1.0, + 'Mu_PT_MIN' : 1000.0*MeV, + 'Mu_P_MIN' : 3000.0*MeV, + 'Mu_MIPCHI2DV_MIN' : 9.0, + 'Mu_PIDMU_MIN' : 0.0, + 'D0_VCHI2PDOF_MAX' : 25.0, + 'D0_AMassWin' : 100.0 *MeV, + 'D0_MassWin' : 90.0 *MeV, + 'D0_BPVVDCHI2_MIN' : 9.0, + 'D0_VCHI2PDOF_MAX' : 9.0, + 'B_Mass_MIN' : 2.3*GeV, + 'B_Mass_MAX' : 10.0*GeV, + 'B_CorrMass_MIN' : 2.8*GeV, + 'B_CorrMass_MAX' : 8.5*GeV, + 'B_DocaChi2_MAX' : 10.0, + 'B_DIRA_MIN' : 0.999, + 'B_D_DZ_MIN' : -0.05*mm, + 'B_VCHI2PDOF_MAX' : 9.0 + }, + 'SLB_SlowPionTag': { "Pi_PT_MIN" : 150.0*MeV, + "Pi_P_MIN" : 2000.0*MeV, + "Pi_GHOSTPROB_MAX" : 0.3, + "Tag_VCHI2PDOF_MAX" : 16.0, + 'Q_AM_MIN' : 130.0 * MeV - _local_m_pip, + 'Q_M_MIN' : 130.0 * MeV - _local_m_pip, + 'Q_AM_MAX' : 165.0 * MeV - _local_m_pip, + 'Q_M_MAX' : 160.0 * MeV - _local_m_pip + }, + 'SLB_D02KmPip' : { "K_PIDK_MIN" : 5., + "Pi_PIDK_MAX" : 0. + }, + 'SLB_D02KmKp' : { "K_PIDK_MIN" : 5.}, + 'SLB_D02PimPip' : { "Pi_PIDK_MAX" : 0.}, + 'PersistReco' : { 'B2D0Mu_D02KmPipTurbo' : False, + 'B2D0Mu_D02KmKpTurbo' : False, + 'B2D0Mu_D02PimPipTurbo' : False, + } + } + + def stages(self, nickname = ""): + if hasattr(self, '_stages') and self._stages: + if nickname: + return self._stages[nickname] + else: + return self._stages + + + from Stages import (SLB_B2D0Mu_D0ToKmPip, SLB_B2D0Mu_D0ToKmKp, SLB_B2D0Mu_D0ToPimPip,SLB_D02HH_D0ToKmPip, + SLB_B2DstMu_D0ToKmPip,SLB_B2DstMu_D0ToKmKp,SLB_B2DstMu_D0ToPimPip) + self._stages = {"B2D0Mu_D02KmPipTurbo" : [SLB_B2D0Mu_D0ToKmPip], + "B2D0Mu_D02PimPipTurbo" : [SLB_B2D0Mu_D0ToPimPip], + "B2D0Mu_D02KmKpTurbo" : [SLB_B2D0Mu_D0ToKmKp], + "B2DstMu_D02KmPipTurbo" : [SLB_B2DstMu_D0ToKmPip], + "B2DstMu_D02KmKpTurbo" : [SLB_B2DstMu_D0ToKmKp], + "B2DstMu_D02PimPipTurbo" : [SLB_B2DstMu_D0ToPimPip], + } + + if nickname: + return self._stages[nickname] + else: + return self._stages + + + def __apply_configuration__(self) : + from HltLine.HltLine import Hlt2Line + from Configurables import HltANNSvc + stages = self.stages() + for (nickname, algos) in self.algorithms(stages): + linename = 'SLB_' + nickname if nickname != 'SLB_' else nickname + if "Turbo" in nickname : + Hlt2Line(linename, prescale = self.prescale, + algos = algos, postscale = self.postscale, Turbo = True, + PersistReco=self.getProps()['PersistReco'].get(nickname, False)) + else: + Hlt2Line(linename, prescale = self.prescale, + algos = algos, postscale = self.postscale) diff --git a/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Stages.py b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Stages.py new file mode 100644 index 0000000000000000000000000000000000000000..42e642cb20a2d63d04d46c44967d1c78a3328df2 --- /dev/null +++ b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/Stages.py @@ -0,0 +1,162 @@ +from Hlt2Lines.Utilities.Hlt2Combiner import Hlt2Combiner +from Inputs import Hlt2LoosePions, Hlt2LooseKaons, Hlt2LooseMuons,Hlt2NoPIDPions + +class SLB_D02HH(Hlt2Combiner) : + def __init__(self, name, decay, inputs, nickname = None, shared = False) : + + dc = { } + children = [] + for d in decay: + if d.find("K-") !=-1 or d.find("K+") != -1: + children += ["K+"] + if d.find("pi-") !=-1 or d.find("pi+") != -1: + children += ["pi+"] + for child in children : + dc[child] = ( "(PT > %(Had_PT_MIN)s)" + + "& (P > %(Had_P_MIN)s)" + + "& (MIPCHI2DV(PRIMARY) > %(Had_MIPCHI2DV_MIN)s)"+ + "& (TRGHOSTPROB < %(Had_GHOSTPROB_MAX)s)" ) + if child == 'pi+': + dc["pi+"] = dc["pi+"] + "& (PIDK < %(Pi_PIDK_MAX)s)" + if child == 'K+': + dc["K+"] = dc["K+"] + "& (PIDK > %(K_PIDK_MIN)s)" + + + combCut = ( "(ADAMASS('D0') < %(D0_AMassWin)s)" ) + + parentCut = ( "(VFASPF(VCHI2PDOF) < %(D0_VCHI2PDOF_MAX)s)" + + "& (BPVVDCHI2 > %(D0_BPVVDCHI2_MIN)s)" + + "& (ADMASS('D0') < %(D0_MassWin)s)" ) + + from HltTracking.HltPVs import PV3D + Hlt2Combiner.__init__( self, name, decay, inputs, + dependencies = [PV3D('Hlt2')], + nickname = nickname, + shared = shared, + DaughtersCuts = dc, + CombinationCut = combCut, + MotherCut = parentCut, + Preambulo = [] ) + +class SLB_DstTag(Hlt2Combiner) : + def __init__(self, name, decay, inputs, nickname = None, shared = False) : + + dc = { } + for child in ["pi+"] : + dc[child] = ( "(PT > %(Pi_PT_MIN)s)" + + "& (P > %(Pi_P_MIN)s)" + + "& (TRGHOSTPROB < %(Pi_GHOSTPROB_MAX)s)" ) + + combCut = ( 'in_range( %(Q_AM_MIN)s, (AM - AM1 - AM2), %(Q_AM_MAX)s )' ) + parentCut = ( "(VFASPF(VCHI2PDOF) < %(Tag_VCHI2PDOF_MAX)s)" + + "& in_range( %(Q_M_MIN)s, (M - M1 - M2), %(Q_M_MAX)s )" ) + + + from HltTracking.HltPVs import PV3D + Hlt2Combiner.__init__( self, name, decay, inputs, + dependencies = [PV3D('Hlt2')], + nickname = nickname, + shared = shared, + DaughtersCuts = dc, + CombinationCut = combCut, + MotherCut = parentCut, + Preambulo = [] ) + +class SLB_B2D0Mu(Hlt2Combiner) : + def __init__(self, name, decay, inputs, nickname = None, shared = False) : + + dc = { } + for child in ['mu-'] : + dc[child] = ( "(PT > %(Mu_PT_MIN)s)" + + "& (P > %(Mu_P_MIN)s)" + + "& (MIPCHI2DV(PRIMARY) > %(Mu_MIPCHI2DV_MIN)s)"+ + "& (TRGHOSTPROB < %(Mu_GHOSTPROB_MAX)s)" + + "& (PIDmu > %(Mu_PIDMU_MIN)s)" ) + + combCut = ( "(in_range(%(B_Mass_MIN)s,AM,%(B_Mass_MAX)s))"+ + "& (ADOCACHI2CUT( %(B_DocaChi2_MAX)s, ''))" ) + + parentCut = ( "(in_range(%(B_Mass_MIN)s,M,%(B_Mass_MAX)s))" + + "&(in_range(%(B_CorrMass_MIN)s,BPVCORRM,%(B_CorrMass_MAX)s))" + + "& (VFASPF(VCHI2PDOF) < %(B_VCHI2PDOF_MAX)s)" + + "& (BPVDIRA> %(B_DIRA_MIN)s)" ) + + from HltTracking.HltPVs import PV3D + Hlt2Combiner.__init__( self, name, decay, inputs, + dependencies = [PV3D('Hlt2')], + tistos = 'TisTosSpec', + nickname = nickname, + shared = shared, + DaughtersCuts = dc, + CombinationCut = combCut, + MotherCut = parentCut, + Preambulo = [] ) + +SLB_D02HH_D0ToKmPip = SLB_D02HH( 'SLB_D02HH_D0ToKmPip' + , decay = ["[D0 -> K- pi+]cc"] + , inputs = [ Hlt2LoosePions, Hlt2LooseKaons, Hlt2LooseMuons ] + , nickname = 'SLB_D02KmPip' + , shared = True) + +SLB_B2D0Mu_D0ToKmPip = SLB_B2D0Mu( 'SLB_B2D0Mu_D0ToKmPip' + , decay = ['[B- -> D0 mu-]cc','[B+ -> D0 mu+]cc'] + , inputs = [ SLB_D02HH_D0ToKmPip, Hlt2LooseMuons ] + ) + +SLB_DstToD0pi_D0ToKmPip = SLB_DstTag( 'SLB_B2D0Mu_D0ToKmPip' + , decay = [ "[D*(2010)+ -> D0 pi+]cc", "[D*(2010)- -> D0 pi-]cc" ] + , inputs = [ SLB_D02HH_D0ToKmPip, Hlt2LoosePions ] + , nickname = 'SLB_SlowPionTag' + ) + +SLB_B2DstMu_D0ToKmPip = SLB_B2D0Mu( 'SLB_B2DstMu_D0ToKmPip' + , decay = [ '[B~0 -> D*(2010)+ mu-]cc' ] + , inputs = [ SLB_DstToD0pi_D0ToKmPip, Hlt2LooseMuons ] + ) + +SLB_D02HH_D0ToKmKp = SLB_D02HH( 'SLB_D02HH_D0ToKmKp' + , decay = ["D0 -> K- K+"] + , inputs = [ Hlt2LooseKaons , Hlt2LooseMuons ] + , nickname = 'SLB_D02KmKp' + , shared = True) +SLB_B2D0Mu_D0ToKmKp = SLB_B2D0Mu( 'SLB_B2D0Mu_D0ToKmKp' + , decay = ['B- -> D0 mu-','B+ -> D0 mu+'] + , inputs = [ SLB_D02HH_D0ToKmKp, Hlt2LooseMuons ] + ) +SLB_DstToD0pi_D0ToKmKp = SLB_DstTag( 'SLB_B2D0Mu_D0ToKmKp' + , decay = [ "D*(2010)+ -> D0 pi+","D*(2010)- -> D0 pi-" ] + , inputs = [ SLB_D02HH_D0ToKmKp, Hlt2LoosePions ] + , nickname = 'SLB_SlowPionTag' + ) + +SLB_B2DstMu_D0ToKmKp = SLB_B2D0Mu( 'SLB_B2DstMu_D0ToKmKp' + , decay = [ '[B~0 -> D*(2010)+ mu-]cc' ] + , inputs = [ SLB_DstToD0pi_D0ToKmKp, Hlt2LooseMuons ] + ) + + +SLB_D02HH_D0ToPimPip = SLB_D02HH( 'SLB_D02HH_D0ToPimPip' + , decay = ["D0 -> pi- pi+"] + , inputs = [ Hlt2LoosePions, Hlt2LooseMuons ] + , nickname = 'SLB_D02PimPip' + , shared = True) +SLB_B2D0Mu_D0ToPimPip = SLB_B2D0Mu( 'SLB_B2D0Mu_D0ToPimPip' + , decay = ['B- -> D0 mu-','B+ -> D0 mu+'] + , inputs = [ SLB_D02HH_D0ToPimPip, Hlt2LooseMuons ] + ) + +SLB_DstToD0pi_D0ToPimPip = SLB_DstTag( 'SLB_B2D0Mu_D0ToPimPip' + , decay = ["D*(2010)+ -> D0 pi+","D*(2010)- -> D0 pi-"] + , inputs = [ SLB_D02HH_D0ToPimPip, Hlt2LoosePions ] + , nickname = 'SLB_SlowPionTag' + ) + +SLB_B2DstMu_D0ToPimPip = SLB_B2D0Mu( 'SLB_B2DstMu_D0ToPimPip' + , decay = [ '[B~0 -> D*(2010)+ mu-]cc' ] + , inputs = [ SLB_DstToD0pi_D0ToPimPip, Hlt2LooseMuons ] + ) + + + + + diff --git a/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/__init__.py b/Hlt/Hlt2Lines/python/Hlt2Lines/SLB/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Hlt/HltSettings/doc/release.notes b/Hlt/HltSettings/doc/release.notes index 3bc832a6b64db75f3b88fa910b79cc6ded31bcad..111925d8ba616023e2c9d7cec3d065a56448add2 100644 --- a/Hlt/HltSettings/doc/release.notes +++ b/Hlt/HltSettings/doc/release.notes @@ -4,6 +4,9 @@ ! Purpose : All trigger threshold settings !----------------------------------------------------------------------------- +! 2016-05-15 - Sascha Stahl + - Add settings directory for semilpetonic B decays (SLB). Added configuration + of these lines to Physics_pp_Draft2016. ! 2016-05-16 - Stefanie Reichert - Added Phi settings for new Phi2EE lines diff --git a/Hlt/HltSettings/python/HltSettings/Physics_pp_Draft2016.py b/Hlt/HltSettings/python/HltSettings/Physics_pp_Draft2016.py index d67c386ee99f8df3b1f6eab47541568323d44065..5357de22c147d32bca10c4707200c065788db078 100644 --- a/Hlt/HltSettings/python/HltSettings/Physics_pp_Draft2016.py +++ b/Hlt/HltSettings/python/HltSettings/Physics_pp_Draft2016.py @@ -59,7 +59,7 @@ class Physics_pp_Draft2016( object ): return {'Draft2016': ['CcDiHadron', 'DPS', 'Bc2JpsiX','Bottomonium','B2HH','B2Kpi0','BHad','CharmHad','DiElectron','Exotica', 'Jets','LFV','LowMult','PID','Phi','Radiative','RareCharm','EW', 'Topo','TrackEffDiMuon','DisplVertices','XcMuXForTau','Technical','TrackEff', - 'DiMuon', 'SingleMuon','Majorana','RareStrange','TriMuon','Strange']} + 'DiMuon', 'SingleMuon','Majorana','RareStrange','TriMuon','Strange','SLB']} def Thresholds(self) : """ diff --git a/Hlt/HltSettings/python/HltSettings/SLB/SLB_25ns_Draft2016.py b/Hlt/HltSettings/python/HltSettings/SLB/SLB_25ns_Draft2016.py new file mode 100644 index 0000000000000000000000000000000000000000..c3563a9d2c258a9e5826a4934b9f0eeae737f862 --- /dev/null +++ b/Hlt/HltSettings/python/HltSettings/SLB/SLB_25ns_Draft2016.py @@ -0,0 +1,88 @@ +from GaudiKernel.SystemOfUnits import GeV, mm, MeV + +class SLB_25ns_Draft2016(object) : + """ + Threshold settings for Hlt2 SLB lines + + @author Sascha Stahl + """ + + __all__ = ( 'ActiveHlt2Lines' ) + + def ActiveHlt2Lines(self) : + """ + Returns a list of active lines + """ + + lines = [ + # D0 mu decays + 'Hlt2SLB_B2D0Mu_D02KmPipTurbo', + 'Hlt2SLB_B2D0Mu_D02PimPipTurbo', + 'Hlt2SLB_B2D0Mu_D02KmKpTurbo', + # Dstar mu decays + 'Hlt2SLB_B2DstMu_D02KmPipTurbo', + 'Hlt2SLB_B2DstMu_D02PimPipTurbo', + 'Hlt2SLB_B2DstMu_D02KmKpTurbo' + ] + return lines + + + def Thresholds(self) : + """ + Returns a dictionary of cuts + """ + + # keep pass through thresholds + d = { } + + from Hlt2Lines.SLB.Lines import SLBLines + _local_m_pip = 139.57018 * MeV + d.update({SLBLines : { + 'Prescale' : {}, + 'Postscale' : {}, + 'Common' : { 'TisTosSpec' : [], + 'Had_GHOSTPROB_MAX' : 1.0, + 'Had_PT_MIN' : 200.0*MeV, + 'Had_P_MIN' : 2000.0*MeV, + 'Had_MIPCHI2DV_MIN' : 9.0, + 'Mu_GHOSTPROB_MAX' : 1.0, + 'Mu_PT_MIN' : 1000.0*MeV, + 'Mu_P_MIN' : 3000.0*MeV, + 'Mu_MIPCHI2DV_MIN' : 9.0, + 'Mu_PIDMU_MIN' : 0.0, + 'D0_VCHI2PDOF_MAX' : 25.0, + 'D0_AMassWin' : 100.0 *MeV, + 'D0_MassWin' : 90.0 *MeV, + 'D0_BPVVDCHI2_MIN' : 9.0, + 'D0_VCHI2PDOF_MAX' : 9.0, + 'B_Mass_MIN' : 2.3*GeV, + 'B_Mass_MAX' : 10.0*GeV, + 'B_CorrMass_MIN' : 2.8*GeV, + 'B_CorrMass_MAX' : 8.5*GeV, + 'B_DocaChi2_MAX' : 10.0, + 'B_DIRA_MIN' : 0.999, + 'B_D_DZ_MIN' : -0.05*mm, + 'B_VCHI2PDOF_MAX' : 9.0 + }, + 'SLB_SlowPionTag': { "Pi_PT_MIN" : 150.0*MeV, + "Pi_P_MIN" : 2000.0*MeV, + "Pi_PIDK_MAX" : 2.0, + "Pi_GHOSTPROB_MAX" : 0.3, + "Tag_VCHI2PDOF_MAX" : 16.0, + 'Q_AM_MIN' : 130.0 * MeV - _local_m_pip, + 'Q_M_MIN' : 130.0 * MeV - _local_m_pip, + 'Q_AM_MAX' : 165.0 * MeV - _local_m_pip, + 'Q_M_MAX' : 160.0 * MeV - _local_m_pip + }, + 'SLB_D02KmPip' : { "K_PIDK_MIN" : 5., + "Pi_PIDK_MAX" : 0. + }, + 'SLB_D02KmKp' : { "K_PIDK_MIN" : 5.}, + 'SLB_D02PimPip' : { "Pi_PIDK_MAX" : 0.}, + 'PersistReco' : { 'B2D0Mu_D02KmPipTurbo' : False, + 'B2D0Mu_D02KmKpTurbo' : False, + 'B2D0Mu_D02PimPipTurbo' : False, + } + }}) + + return d diff --git a/Hlt/HltSettings/python/HltSettings/SLB/__init__.py b/Hlt/HltSettings/python/HltSettings/SLB/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391