diff --git a/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/StrippingExotica.py b/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/StrippingExotica.py index e73ee74dfaab914239df21f82833f78dc4a2a26f..9a5ea1990f75f9c177bc5cbb67c28542f417f8a9 100755 --- a/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/StrippingExotica.py +++ b/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/StrippingExotica.py @@ -1,6 +1,6 @@ #!/usr/bin/env python ############################################################################### -# (c) Copyright 2000-2019 CERN for the benefit of the LHCb Collaboration # +# (c) Copyright 2000-2023 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". # @@ -24,7 +24,9 @@ Hlt2ExoticaDisplDiMuonNoPoint Hlt2ExoticaPrmptDiMuonTurbo Hlt2ExoticaPrmptDiMuonSSTurbo Hlt2ExoticaPrmptDiMuonHighMass - +Hlt2ExoticaDisplDiELowMass +Hlt2ExoticaPi0ToDiEGamma +Hlt2ExoticaEtaToDiEGamma """ from GaudiKernel.SystemOfUnits import MeV, GeV, mm, picosecond @@ -55,6 +57,11 @@ default_config = { 'StrippingExoticaDisplDiELine', 'StrippingExoticaDisplDiEHighMassLine', ], + 'Leptonic': [ + 'StrippingExoticaDisplDiELowMassMicroLine', + 'StrippingExoticaPi0ToDiEGammaMicroLine', + 'StrippingExoticaEtaToDiEGammaMicroLine' + ], 'Dimuon': [ 'StrippingExoticaDisplDiMuonLine', 'StrippingExoticaDisplDiMuonHighMassLine', @@ -73,6 +80,9 @@ default_config = { 'DiRHNu' : 1.0, 'DisplDiE' : 1.0, 'DisplDiEHighMass' : 1.0, + 'DisplDiELowMassMicro': 1.0, + 'Pi0ToDiEGammaMicro' : 1.0, + 'EtaToDiEGammaMicro' : 1.0, 'DisplDiMuon' : 1.0, 'DisplDiMuonHighMass' : 1.0, 'DisplDiMuonNoPoint' : 1.0, @@ -156,6 +166,47 @@ default_config = { 'FDChi2' : 0, 'TAU' : 1*picosecond, }, + 'DisplDiELowMassMicro' : { + 'L0FILTER' : None, #"L0_CHANNEL('Photon')|L0_CHANNEL('Electron') + 'HLT1FILTER' : "HLT_PASS_RE('Hlt1DiElectronLowMassDecision')", + 'HLT2FILTER' : None, + 'TisTosSpec' : None, + 'EProbNNe' : 0.1, + 'EIPChi2' : 4, + 'PT' : 1000*MeV, + 'MMIN' : 5*MeV, + 'MMAX' : 300*MeV + }, + 'Pi0ToDiEGammaMicro' : { + 'input' : 'Phys/StdLooseAllPhotons/Particles', + 'L0FILTER' : None, + 'HLT1FILTER' : "HLT_PASS_RE('Hlt1DiElectronLowMass.*Decision')", + 'HLT2FILTER' : None, + 'TisTosSpec' : None, + 'EProbNNe' : 0.1, + 'EIPChi2' : -1, + 'EEPT' : 1000*MeV, + 'GPT' : 500*MeV, + 'GCL' : 0.2, + 'PT' : 1000*MeV, + 'MMIN' : 0*MeV, + 'MMAX' : 300*MeV + }, + 'EtaToDiEGammaMicro' : { + 'input' : 'Phys/StdLooseAllPhotons/Particles', + 'L0FILTER' : None, + 'HLT1FILTER' : "HLT_PASS_RE('Hlt1DiElectronLowMass.*Decision')", + 'HLT2FILTER' : None, + 'TisTosSpec' : None, + 'EProbNNe' : 0.1, + 'EIPChi2' : -1, + 'EEPT' : 1000*MeV, + 'GPT' : 500*MeV, + 'GCL' : 0.2, + 'PT' : 1000*MeV, + 'MMIN' : 400*MeV, + 'MMAX' : 700*MeV + }, 'DisplDiMuon': { # 'TOS_HLT2' : 'Hlt2ExoticaDisplDiMuonDecision', 'MuProbNNmu': 0.5, @@ -364,6 +415,40 @@ def DisplDiE( conf, name, sharedDiE ): return SimpleSelection( name, FilterDesktop, sharedDiE, Code=code) +def DisplDiELowMass( conf, name, sharedDiE ): + + code = ("(MINTREE('e+'==ABSID,BPVIPCHI2()) > %(EIPChi2)s)" + "& (MINTREE('e+'==ABSID,PROBNNe) > %(EProbNNe)s)" + "& (PT > %(PT)s)" + "& (HASVERTEX)" + "& (M > %(MMIN)s) & (M < %(MMAX)s)")%conf + + return SimpleSelection( name, FilterDesktop, sharedDiE, Code=code) + +def DiEGamma(conf, name, sharedDiE ): + + inputs = [ AutomaticData(Location=conf['input']) ] + sharedDiE + + dc = {} + dc['KS0'] = ("(MINTREE('e+'==ABSID,BPVIPCHI2()) > %(EIPChi2)s)" + "& (MINTREE('e+'==ABSID,PROBNNe) > %(EProbNNe)s)" + "& (PT > %(EEPT)s)" + "& (HASVERTEX)")%conf + + dc['gamma'] = '(PT > %(GPT)s) & (CL > %(GCL)s)'%conf + + cc = "(APT > %(PT)s) & (AM > %(MMIN)s) & (AM < %(MMAX)s)"%conf + mc = "(PT > %(PT)s) & (M > %(MMIN)s) & (M < %(MMAX)s)"%conf + + + + return SimpleSelection( name, CombineParticles, inputs, + DecayDescriptor = "rho(770)0 -> KS0 gamma", + DaughtersCuts = dc, + CombinationCut = cc, + MotherCut = mc, + ) + def DisplDiMuon( conf, name, sharedDiMuon ): code = ("(MINTREE('mu+'==ABSID,BPVIPCHI2()) > %(MuIPChi2)s)" "& (MINTREE('mu+'==ABSID,PROBNNmu) > %(MuProbNNmu)s)" @@ -439,6 +524,36 @@ class ExoticaConf(LineBuilder): __configuration_keys__ = default_config['CONFIG'].keys() # Legacy field + ################################################################################################################################# + def _storeInputBremPhotons( self, linename, outputlocprefix = "Leptonic/Phys/", photonloc = "Phys/StdVeryLooseAllPhotons/Particles" ): + from PhysSelPython.Wrappers import FilterSelection, DataOnDemand, SelectionSequence + from Configurables import ( CopyParticles, ParticleCloner, + ProtoParticleCloner, CaloHypoCloner, + CaloClusterCloner, GaudiSequencer ) + + cloner = CopyParticles( name = "BremPhotonClonerFor%s"%linename ) + cloner.OutputPrefix = outputlocprefix+linename + cloner.InputLocation = photonloc + + cloner.addTool(ParticleCloner, name="ParticleCloner") + cloner.ParticleCloner.ICloneProtoParticle = "ProtoParticleCloner" + + cloner.addTool(ProtoParticleCloner,name="ProtoParticleCloner") + + cloner.addTool(CaloHypoCloner,name="CaloHypoCloner") + cloner.CaloHypoCloner.CloneClustersNeuP = True + cloner.CaloHypoCloner.CloneDigitsNeuP = True + + cloner.addTool(CaloClusterCloner,name="CaloClusterCloner") + cloner.CaloClusterCloner.CloneEntriesNeuP = True + + ############################################################ + makePhotons = GaudiSequencer("For%sBremPhotonMakerAlg"%linename) + makePhotons.Members += [cloner] + + return makePhotons + ##################################################### + def __init__(self, name, config): LineBuilder.__init__(self, name, config) @@ -486,6 +601,33 @@ class ExoticaConf(LineBuilder): prescale = prescales['DisplDiEHighMass'], )) + self.registerLine(StrippingLine( name+'DisplDiELowMassMicroLine', + selection = DisplDiELowMass(config['DisplDiELowMassMicro'], 'DisplDiELowMassMicro', sharedDiE), + prescale = prescales['DisplDiELowMassMicro'], + L0DU= config['DisplDiELowMassMicro']['L0FILTER'], + HLT1= config['DisplDiELowMassMicro']['HLT1FILTER'], + HLT2= config['DisplDiELowMassMicro']['HLT2FILTER'], + postselalg = self._storeInputBremPhotons(name+'DisplDiELowMassMicroLine', outputlocprefix="Leptonic/Phys/"), + )) + + self.registerLine(StrippingLine( name+'Pi0ToDiEGammaMicroLine', + selection = DiEGamma(config['Pi0ToDiEGammaMicro'], 'Pi0ToDiEGammaMicro', sharedDiE), + prescale = prescales['Pi0ToDiEGammaMicro'], + L0DU= config['Pi0ToDiEGammaMicro']['L0FILTER'], + HLT1= config['Pi0ToDiEGammaMicro']['HLT1FILTER'], + HLT2= config['Pi0ToDiEGammaMicro']['HLT2FILTER'], + postselalg = self._storeInputBremPhotons(name+'Pi0ToDiEGammaMicroLine', outputlocprefix="Leptonic/Phys/"), + )) + + self.registerLine(StrippingLine( name+'EtaToDiEGammaMicroLine', + selection = DiEGamma(config['EtaToDiEGammaMicro'], 'EtaToDiEGammaMicro', sharedDiE), + prescale = prescales['EtaToDiEGammaMicro'], + L0DU= config['EtaToDiEGammaMicro']['L0FILTER'], + HLT1= config['EtaToDiEGammaMicro']['HLT1FILTER'], + HLT2= config['EtaToDiEGammaMicro']['HLT2FILTER'], + postselalg = self._storeInputBremPhotons(name+'EtaToDiEGammaMicroLine', outputlocprefix="Leptonic/Phys/"), + )) + self.registerLine(StrippingLine( name+'DisplDiMuonLine', selection = DisplDiMuon(config['DisplDiMuon'], 'DisplDiMuon', sharedDiMuon), diff --git a/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/__init__.py b/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/__init__.py index 71c658b7ec4f40c340ced7e4948bbb240a692e50..4b6401dad5313a19224698d8610c30a7e52cd365 100644 --- a/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/__init__.py +++ b/Phys/StrippingSelections/python/StrippingSelections/StrippingQEE/__init__.py @@ -9,7 +9,7 @@ # or submit itself to any jurisdiction. # ############################################################################### -_selections = ('StrippingB2EHNLLines', 'StrippingB2MuHNLLines', 'StrippingLambdaDecaysDM', 'StrippingLLP2Hadrons', 'StrippingALP2TauTau', 'StrippingLLP2HH') +_selections = ('StrippingB2EHNLLines', 'StrippingB2MuHNLLines', 'StrippingLambdaDecaysDM', 'StrippingLLP2Hadrons', 'StrippingALP2TauTau', 'StrippingLLP2HH', 'StrippingExotica') for _sel in _selections : try :