diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkComboHypoConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkComboHypoConfig.py index ad44bd84c216e79b58e86c5d105e41984b855d9a..2eaa15627f28ed3695d46f1a6cb129a5e98e06a6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkComboHypoConfig.py +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkComboHypoConfig.py @@ -18,6 +18,7 @@ trigMultiTrkComboHypoToolDict = { 'bBmumu' : { 'massRange' : (4000., 8500.), 'chi2' : 20. }, 'bPhi' : { 'massRange' : ( 940., 1100.), 'chi2' : 10. }, 'bTau' : { 'massRange' : ( 0., 2700.), 'chi2' : 50. }, + 'b3mu' : { 'massRange' : ( 100., 10000.), 'chi2' : 30., 'nTrk' : 3, 'charge' : 1 }, 'bBeeM6000' : { 'massRange' : ( 100., 6000.), 'chi2' : 20. }, 'b0dRAB12vtx20' : { 'massRange' : ( 0., 999999999.), 'chi2' : 20., 'deltaRMax' : 1.2 } } @@ -64,7 +65,9 @@ def StreamerDimuEFComboHypoCfg(name): trigSequenceName = 'StreamerDimu', trigLevel = 'EF') hypo.chi2 = 20. + hypo.nTracks = [ 2 ] hypo.massRange = [ (100., 6000.) ] + hypo.trackPtThresholds = [ [ 100., 100. ] ] return hypo def StreamerDiElecFastComboHypoCfg(name): @@ -129,6 +132,7 @@ def BmutrkComboHypoCfg(name): outputTrigBphysCollection = 'HLT_Bmutrk') hypo.isMuTrkMode = True hypo.chi2 = 20. + hypo.nTracks = [ 2 ] hypo.massRange = [ (2500., 4400.) ] hypo.trackPtThresholds = [ [ 10000., 3000. ] ] return hypo @@ -187,8 +191,9 @@ class TrigMultiTrkComboHypoConfig(object): name = baseName+'ComboHypo', isStreamer = isStreamer, trigLevel = trigLevel, - nTracks = [ 2 ], - massRange = [ (100., 20000.) ], + nTracks = [ 2, 3 ], + massRange = [ (100., 20000.), (100., 11000.) ], + trackPtThresholds = [ [ 3650., 3650. ], [ 3650., 3650., 3650. ] ], TrackCollectionKey = trackCollection, TrigBphysCollectionKey = outputTrigBphysCollection, VertexFitter = VertexFitter, @@ -207,7 +212,8 @@ class TrigMultiTrkComboHypoConfig(object): value = trigMultiTrkComboHypoToolDict[topo] tool.massRange = value['massRange'] tool.chi2 = value['chi2'] - tool.totalCharge = 0 + tool.nTrk = value['nTrk'] if 'nTrk' in value else 2 + tool.totalCharge = value['charge'] if 'charge' in value else 0 if 'deltaRMin' in value: tool.deltaRMin = value['deltaRMin'] if 'deltaRMax' in value: diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx index 5ed2ad89cf90f801c24906544bb03034b8655686..2de54e1e1ba3a9cd16a096aff0664d7cd3790ad3 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx @@ -500,7 +500,7 @@ StatusCode TrigMultiTrkComboHypo::filterTrackCombinations(TrigMultiTrkStateBase& auto mass = (std::accumulate(p.begin(), p.end(), xAOD::TrackParticle::GenVecFourMom_t())).M(); ATH_MSG_DEBUG( "invariant mass: " << mass ); - if (!isInMassRange(mass)) continue; + if (!isInMassRange(mass, iTrk)) continue; auto fitterState = m_vertexFitter->makeState(state.context()); auto vertex = fit(tracklist, m_trkMass[iTrk], *fitterState); @@ -618,7 +618,7 @@ StatusCode TrigMultiTrkComboHypo::findMultiLeptonCandidates(TrigMultiTrkState<T> mon_nCombination++; trkMassBeforeFit.push_back(mass * 0.001); - if (!isInMassRange(mass)) continue; + if (!isInMassRange(mass, iTrk)) continue; mon_nCombinationBeforeFit++; auto fitterState = m_vertexFitter->makeState(state.context()); @@ -748,7 +748,7 @@ StatusCode TrigMultiTrkComboHypo::findMuTrkCandidates(TrigMultiTrkState<xAOD::Mu if (track->pt() < m_trkPt[0][1] || isIdenticalTracks(track, muonInDetTrack)) continue; auto trackMomentum = track->genvecP4(); trackMomentum.SetM(PDG::mMuon); - if (!isInMassRange((muonMomentum + trackMomentum).M())) continue; + if (!isInMassRange((muonMomentum + trackMomentum).M(), 0)) continue; tracklist[1] = ViewHelper::makeLink<xAOD::TrackParticleContainer>(view, tracksHandle, idx); @@ -977,14 +977,8 @@ float TrigMultiTrkComboHypo::Lxy(const xAOD::TrigBphys& vertex, const Amg::Vecto } -bool TrigMultiTrkComboHypo::isInMassRange(double mass) const { +bool TrigMultiTrkComboHypo::isInMassRange(double mass, size_t idx) const { - bool result = false; - for (const auto& range : m_massRange) { - if (mass > range.first && mass < range.second) { - result = true; - break; - } - } - return result; + const auto& range = m_massRange[idx]; + return (mass > range.first && mass < range.second); } diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.h index e20fd423349ba4d2acd1a76e97ba65964e370fa8..d750a089b9ddbe00a9c934684b817bddcdc9a9b6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.h @@ -215,7 +215,7 @@ class TrigMultiTrkComboHypo: public ::ComboHypo { bool isIdenticalTracks(const xAOD::TrackParticle* lhs, const xAOD::TrackParticle* rhs) const; bool isIdenticalTracks(const xAOD::Muon* lhs, const xAOD::Muon* rhs) const; bool isIdenticalTracks(const xAOD::Electron* lhs, const xAOD::Electron* rhs) const; - bool isInMassRange(double mass) const; + bool isInMassRange(double mass, size_t idx) const; float Lxy(const xAOD::TrigBphys& vertex, const Amg::Vector3D& beamSpot) const; SG::ReadHandleKey<xAOD::TrackParticleContainer> diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref index dd2d5b9501e7c3764294d0e130acfb3fb06128d1..371b5ef828332a30706f954ee004934f6329855e 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref @@ -1082,9 +1082,9 @@ HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r85_L1J45p0ETA21_3J15p0ETA25: 0: 12 1: 20 2: 7 -HLT_3mu4_L1BPH-0M10-3MU3V: +HLT_3mu4_b3mu_L1BPH-0M10C-3MU3V: eventCount: 0 -HLT_3mu4_L1BPH-0M10C-3MU3V: +HLT_3mu4_b3mu_noos_L1BPH-0M10-3MU3V: eventCount: 0 HLT_3mu4_bDimu2700_L13MU3V: eventCount: 0 diff --git a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref index bf81dd5537598b5e7c5cd6b3c3fed7f443ddf671..64693e261e3d01c6ba2ea43688ae4bc9e72aaf55 100644 --- a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref +++ b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref @@ -442,9 +442,9 @@ HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r77_L1J45p0ETA21_3J15p0ETA25: eventCount: 0 HLT_3j65_0eta290_020jvt_pf_ftf_bdl1r85_L1J45p0ETA21_3J15p0ETA25: eventCount: 0 -HLT_3mu4_L1BPH-0M10-3MU3V: +HLT_3mu4_b3mu_L1BPH-0M10C-3MU3V: eventCount: 0 -HLT_3mu4_L1BPH-0M10C-3MU3V: +HLT_3mu4_b3mu_noos_L1BPH-0M10-3MU3V: eventCount: 0 HLT_3mu4_bDimu2700_L13MU3V: eventCount: 0 diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bphysics/BphysicsChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bphysics/BphysicsChainConfiguration.py index fad7b3f3c3aa8263831a7635e3558512cb0b500e..71f779ebebb6338f31fe3596802a9ff46a17693a 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bphysics/BphysicsChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Bphysics/BphysicsChainConfiguration.py @@ -86,6 +86,7 @@ class BphysicsChainConfiguration(MuonChainConfiguration): 'bDimu6000' : 'dimu', 'bPhi' : 'dimu', 'bTau' : 'dimu', + 'b3mu' : 'dimu', 'bBmumux' : 'bmumux', 'b0dRAB12vtx20' : 'dimu' } diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index 81e48b68c0dcaa5ea2efc62b6902dae7da65b8c2..06bf6e68e52f4462920a72df1e514f3dc792420e 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -154,10 +154,6 @@ def setupMenu(): ChainProp(name='HLT_mu24_ivarmedium_mu6_ivarmedium_probe_L1MU14FCH', l1SeedThresholds=['MU14FCH','PROBEMU3V'], groups=MultiMuonGroup), ChainProp(name='HLT_mu24_ivarmedium_mu6_ivarperf_probe_L1MU14FCH', l1SeedThresholds=['MU14FCH','PROBEMU3V'], groups=MultiMuonGroup), - # 3mu inv mass (ATR-19355, ATR-19638), TODO: HLT invm to be added and moved to BLS signature - ChainProp(name='HLT_3mu4_L1BPH-0M10-3MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), - ChainProp(name='HLT_3mu4_L1BPH-0M10C-3MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), - # ATR-22782 ChainProp(name='HLT_2mu4_L1BPH-0M16-20DR99-2MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), ChainProp(name='HLT_2mu4_L1BPH-0M16-15DR99-2MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), @@ -995,6 +991,11 @@ def setupMenu(): ChainProp(name='HLT_mu6_mu4_bJpsimumu_L1BPH-2M9-0DR15-C-MU5VFMU3V', l1SeedThresholds=['MU5VF','MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), ChainProp(name='HLT_mu6_mu4_bJpsimumu_Lxy0_L1BPH-2M9-0DR15-C-MU5VFMU3V', l1SeedThresholds=['MU5VF','MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), ChainProp(name='HLT_mu6_mu4_bBmumu_Lxy0_L1BPH-2M9-0DR15-C-MU5VFMU3V', l1SeedThresholds=['MU5VF','MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), + + # 3mu inv mass (ATR-19355, ATR-19638) + ChainProp(name='HLT_3mu4_b3mu_noos_L1BPH-0M10-3MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), + ChainProp(name='HLT_3mu4_b3mu_L1BPH-0M10C-3MU3V', l1SeedThresholds=['MU3V'], stream=["BphysDelayed"], groups=BphysicsGroup), + #ATR-21566, di-muon TLA ChainProp(name='HLT_2mu4_b0dRAB12vtx20_L1BPH-0DR12C-2MU3V', l1SeedThresholds=['MU3V'],stream=["BphysDelayed"], groups=BphysicsGroup), ] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py index fca230c209978547e0475ec10a110c755b8ac826..b1cf61daebff0359bcc1e9587ced73fbaecf0e22 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py @@ -361,8 +361,8 @@ MuonChainParts_Default = { # Bphysics #========================================================== AllowedTopos_Bphysics = [ - 'bJpsimumu','bJpsi','bJpsimutrk','bUpsimumu','bUpsi','bBmumu','bDimu','bDimu2700','bDimu6000','bPhi','bTau', - 'Lxy0', + 'bJpsimumu','bJpsi','bJpsimutrk','bUpsimumu','bUpsi','bBmumu','bDimu','bDimu2700','bDimu6000','bPhi','bTau','b3mu', + 'Lxy0','noos','nocut', 'bBmumux','BpmumuKp','BcmumuPi','BsmumuPhi','BdmumuKst','LbPqKm', 'BcmumuDsloose', 'BcmumuDploose', 'b0dRAB12vtx20' ]