diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterConfig.py new file mode 100644 index 0000000000000000000000000000000000000000..13ed7a6415d3b9a413b35d115a9dde78b3ab7c37 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterConfig.py @@ -0,0 +1,47 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +# include the python fragment to set up the default bphysics vertex fitter +from TrigBphysHypo import TrigBphysVertexingConfig + +from TrigBphysHypo.TrigBphysHypoConf import TrigBphysMuonCounter + +from AthenaCommon.AppMgr import ToolSvc + +from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig +from TrigBphysHypo.TrigBphysMuonCounterMonitoring import TrigBphysMuonCounterValidationMonitoring +from TrigBphysHypo.TrigBphysMuonCounterMonitoring import TrigBphysMuonCounterOnlineMonitoring + + +class TrigBphysMuonCounterPy (TrigBphysMuonCounter): + __slots__ = [] + def __init__(self, name = "MultiTrkFexPy"): + super( TrigBphysMuonCounterPy, self ).__init__( name ) + + def setEFMuonThresholds(self, thresholds) : + self.ptMuonMin = [] # reset, use thresholds from trigger name + for thr in sorted(thresholds) : # should should have lowest pt first, which is what we want + if len(self.ptMuonMin) < self.nEfMuon : + self.ptMuonMin.append( thr ) + while len(self.ptMuonMin) < self.nEfMuon : + self.ptMuonMin.append(2000.) # lower pt cut makes no sense at trigger + + + +################################################################################### +class TrigBphysMuonCounter_bNmu (TrigBphysMuonCounterPy): + __slots__ = [] + # lets force name setting, as it needs to match pt cuts + def __init__(self, name, ptMuonMin ): + super( TrigBphysMuonCounter_bNmu, self ).__init__( name ) + + self.nEfMuon = len(ptMuonMin) + self.ptMuonMin = [] + for thr in ptMuonMin : + self.ptMuonMin.append(thr) + + time = TrigTimeHistToolConfig("Time") + validation = TrigBphysMuonCounterValidationMonitoring() + online = TrigBphysMuonCounterOnlineMonitoring() + + self.AthenaMonTools = [ validation, online, time ] + diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterMonitoring.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterMonitoring.py new file mode 100644 index 0000000000000000000000000000000000000000..82cd0f12e923e3ec0012bf9deac98a41cb170e7e --- /dev/null +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigBphysMuonCounterMonitoring.py @@ -0,0 +1,32 @@ +# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + +from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig + +ACCEPTANCE_labels = ' HltExecute : PassNEFMuons' +ACCEPTANCE_number = 2 + +class TrigBphysMuonCounterValidationMonitoring(TrigGenericMonitoringToolConfig): + def __init__ (self, name="TrigBphysMuonCounterValidationMonitoring"): + super(TrigBphysMuonCounterValidationMonitoring, self).__init__(name) + self.defineTarget("Validation") + self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', + title = 'BphysMuonCounter - Reached steps - acceptance ; # Events ; step', + xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, + labels = ACCEPTANCE_labels ) ] + self.Histograms += [ defineHistogram('nEFMuons', type='TH1F', title="Number of EF muons", + xbins=100, xmin=0., xmax=13.) ] + + + + +class TrigBphysMuonCounterOnlineMonitoring(TrigGenericMonitoringToolConfig): + def __init__ (self, name="TrigBphysMuonCounterOnlineMonitoring"): + super(TrigBphysMuonCounterOnlineMonitoring, self).__init__(name) + self.defineTarget("Online") + self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', + title = 'BphysMuonCounter - Reached steps - acceptance ; # Events ; step', + xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, + labels = ACCEPTANCE_labels ) ] + self.Histograms += [ defineHistogram('nEFMuons', type='TH1F', title="Number of EF muons", + xbins=100, xmin=0., xmax=13.) ] + diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkFexConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkFexConfig.py index 70977304c8cbc88cba53f5863e5a3689530ec6b0..31c89865baa2a18e9d0df0fa15a39c684c4ba40a 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkFexConfig.py +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigMultiTrkFexConfig.py @@ -69,7 +69,7 @@ class TrigMultiTrkFex_trkPhi (TrigMultiTrkFexPy): self.nTrkCharge = 0 self.nTrkMassMin = [840.] self.nTrkMassMax = [1240.] - self.ptTrkMin = [4000., 4000. ] # set minimal pt of tracks for Phi+Pi + self.ptTrkMin = [3750., 3750. ] # set minimal pt of tracks for Phi+Pi self.diTrkMassMin = [] # phi window self.diTrkMassMax = [] self.diTrkCharge = -1 @@ -98,7 +98,7 @@ class TrigMultiTrkFex_trkPhiX (TrigMultiTrkFexPy): self.nTrk = 3 self.trkMass = 105.6583745 # looking for di-muon resonances self.nTrkCharge = 1 - self.ptTrkMin = [4000., 4000., 1000. ] # set minimal pt of tracks for Phi+Pi + self.ptTrkMin = [3750., 3750., 1000. ] # set minimal pt of tracks for Phi+Pi self.diTrkMassMin = [840.] # phi window self.diTrkMassMax = [1240.] self.diTrkCharge = 0 @@ -130,7 +130,7 @@ class TrigMultiTrkFex_trkPhiXTight (TrigMultiTrkFexPy): self.nTrkCharge = 1 self.nTrkMassMin = [1500.] self.nTrkMassMax = [2500.] - self.ptTrkMin = [4000., 4000., 1000. ] # set minimal pt of tracks for Phi+Pi + self.ptTrkMin = [3750., 3750., 1000. ] # set minimal pt of tracks for Phi+Pi self.diTrkMassMin = [840.] # phi window self.diTrkMassMax = [1240.] self.diTrkCharge = 0 @@ -148,6 +148,7 @@ class TrigMultiTrkFex_trkPhiXTight (TrigMultiTrkFexPy): self.AthenaMonTools = [ validation, online, time ] +################################################################################### class TrigMultiTrkFex_trkTau (TrigMultiTrkFexPy): __slots__ = [] @@ -159,11 +160,11 @@ class TrigMultiTrkFex_trkTau (TrigMultiTrkFexPy): #self.trackCollectionKey = "' self.trkMass = 105.6583745 # looking for di-muon resonances - self.nTrk = 3 + self.nTrk = 2 self.nTrkMassMin = [0.] self.nTrkMassMax = [2900.] # cut away J/psi - self.nTrkCharge = 1 - self.ptTrkMin = [4000., 4000., 1000. ] # set minimal pt of tracks for Phi+Pi + self.nTrkCharge = -1 + self.ptTrkMin = [3750., 1000. ] # set minimal pt of tracks for Phi+Pi self.diTrkMassMin = [] # no sub-resonances self.diTrkMassMax = [] # muons are not matched to tracks, but still require to be present in TE @@ -180,6 +181,41 @@ class TrigMultiTrkFex_trkTau (TrigMultiTrkFexPy): self.AthenaMonTools = [ validation, online, time ] +################################################################################### +class TrigMultiTrkFex_bNmu (TrigMultiTrkFexPy): + __slots__ = [] + # lets force name setting, as it needs to match pt cuts + def __init__(self, name, ptMuonMin ): + super( TrigMultiTrkFex_bNmu, self ).__init__( name ) + + # AcceptAll flag: if true take events regardless of cuts + self.AcceptAll = False + + #self.trackCollectionKey = "' + self.trkMass = 105.6583745 # looking for di-muon resonances + self.nTrk = -1 # no cut + self.nTrkMassMin = [] + self.nTrkMassMax = [] # cut away J/psi + self.nTrkCharge = -1 + self.ptTrkMin = [] # set minimal pt of tracks for Phi+Pi + self.diTrkMassMin = [] # no sub-resonances + self.diTrkMassMax = [] + # muons are not matched to tracks, but still could be required to be present in TE + self.nL2CombMuon = 0 + self.nL2SAMuon = 0 + + # these are 2 cuts that matters. Set to the softest + self.nEfMuon = len(ptMuonMin) + self.ptMuonMin = [] + for thr in ptMuonMin : + self.ptMuonMin.append(thr) + + time = TrigTimeHistToolConfig("Time") + validation = TrigMultiTrkFexValidationMonitoring() + online = TrigMultiTrkFexOnlineMonitoring() + + self.AthenaMonTools = [ validation, online, time ] + ################################################################################### @@ -277,7 +313,7 @@ class TrigMultiTrkFex_DiMu (TrigMultiTrkFexPy): self.nTrkCharge = 0 self.nTrkMassMin = [100.] self.nTrkMassMax = [15000.] - self.ptTrkMin = [4000., 4000. ] # set minimal pt of tracks for 2mu passing L1 + self.ptTrkMin = [3750., 3750. ] # set minimal pt of tracks for 2mu passing L1 self.diTrkMassMin = [] # phi window self.diTrkMassMax = [] self.diTrkCharge = -1 @@ -321,3 +357,33 @@ class TrigMultiTrkFex_DiMu_noVtx_noM_SS (TrigMultiTrkFex_DiMu): self.nTrkVertexChi2 = -1 self.nTrkMassMin = [0.] # OI not sure if this will work... self.nTrkMassMax = [1e+8] # should be safe at LHC, no? + + +############################################################################# +class TrigMultiTrkFex_Jpsi (TrigMultiTrkFexPy): + __slots__ = [] + def __init__(self, name = "MultiTrkFex_Jpsi"): + super( TrigMultiTrkFex_Jpsi, self ).__init__( name ) + self.nTrk = 2 + self.trkMass = 105.6583745 # looking for di-muon resonances + self.nTrkVertexChi2 = 20 + self.nTrkCharge = 0 + self.nTrkMassMin = [2600.] + self.nTrkMassMax = [3600.] + self.ptTrkMin = [3500., 3500. ] # set minimal pt of tracks for 2mu passing L1 + self.diTrkMassMin = [] # phi window + self.diTrkMassMax = [] + self.diTrkCharge = -1 + + # muons are not matched to tracks, but still require to be present in TE + self.nEfMuon = 0 + self.nL2CombMuon = 0 + self.nL2SAMuon = 0 # as we run on muon RoIs all necessary muons are already requested. + self.ptMuonMin = [] #[3600.] + #self.overlapdR = 0.005 + + time = TrigTimeHistToolConfig("Time") + validation = TrigMultiTrkFexValidationMonitoring() + online = TrigMultiTrkFexOnlineMonitoring() + + self.AthenaMonTools = [ validation, online, time ] diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx new file mode 100644 index 0000000000000000000000000000000000000000..6b1839b2b5c911ca1d60fe470957987d5a67aa19 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx @@ -0,0 +1,141 @@ +// -*- C++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/************************************************************************** + ** + ** File: Trigger/TrigHypothesis/TrigBphysHypo/TrigBphysMuonCounter + ** + ** Description: algo to count muons in whole event + ** + ** author Olya Igonkina + ** + **************************************************************************/ + +#include "TrigBphysMuonCounter.h" + +#include "xAODMuon/MuonContainer.h" +#include "TrigTimeAlgs/TrigTimerSvc.h" +#include "FourMomUtils/P4Helpers.h" + + +// Define the bins for acceptance-monitoring histogram +#define ACCEPT_hltExecute 0 +#define ACCEPT_PassNEFMuons 1 + + +TrigBphysMuonCounter::TrigBphysMuonCounter(const std::string & name, ISvcLocator* pSvcLocator): + HLT::AllTEAlgo(name, pSvcLocator) + ,m_BmmHypTot(0) + + , m_nEfMuon(0) + , m_ptMuonMin() + , m_mindR(0.005) + //counters + , m_countTotalEvents(0) + , m_countPassedEvents(0) + +{ + + // Read cuts + + declareProperty("nEfMuon" , m_nEfMuon = 0 ); + declareProperty("ptMuonMin" , m_ptMuonMin ); + declareProperty("overlapdR" , m_mindR = 0.01 ); + + declareMonitoredStdContainer("Acceptance" , m_mon_Acceptance , AutoClear); + declareMonitoredVariable( "nEFMuons", m_mon_nEFMuons); +} + +TrigBphysMuonCounter::~TrigBphysMuonCounter() +{ } + + + + +HLT::ErrorCode TrigBphysMuonCounter::hltInitialize() +{ + m_countTotalEvents = 0; + m_countPassedEvents = 0; + + std::sort(m_ptMuonMin.begin(),m_ptMuonMin.end(), std::greater<float>()); + + if (msgLvl() <= MSG::INFO) { + + msg() << MSG::INFO << "require at least "<< m_nEfMuon <<" EF Muons" << endmsg; + msg() << MSG::INFO << " Muons should have pts "; + for(float pt : m_ptMuonMin) msg() << MSG::INFO << pt <<", "; + msg() << MSG::INFO << endmsg; + + } + if (msgLvl() <= MSG::INFO) { + msg() << MSG::INFO << " Overlap removal dR<"<<m_mindR<< endmsg; + } + + if ( timerSvc() ) { + m_BmmHypTot = addTimer("TrigBphysMuonCounter"); + } + + return HLT::OK; +} + +HLT::ErrorCode TrigBphysMuonCounter::hltFinalize() +{ + msg() << MSG::INFO << "in finalize()" << endmsg; + MsgStream log(msgSvc(), name()); + + msg() << MSG::INFO << "|----------------------- SUMMARY FROM TrigBphysMuonCounter -------------|" << endmsg; + msg() << MSG::INFO << "Run on events " << m_countTotalEvents << endmsg; + msg() << MSG::INFO << "Passed events " << m_countPassedEvents<< endmsg; + + return HLT::OK; +} + + + +HLT::ErrorCode TrigBphysMuonCounter::hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& inputTE, unsigned int output) +{ + // start monitoring + beforeExecMonitors().ignore(); + m_countTotalEvents++; + m_mon_Acceptance.clear(); + + m_mon_Acceptance.push_back( ACCEPT_hltExecute ); + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << " In TrigBphysMuonCounter hltExecute" << endmsg; + + + //======== check if we have enough EF muons : ===================== + std::vector<ElementLink<xAOD::MuonContainer> > efmuons; // just a collection of pointers, not copies + bool passMuon = passNObjects<xAOD::MuonContainer, + std::vector<ElementLink<xAOD::MuonContainer> > >( m_nEfMuon, m_ptMuonMin, + inputTE, efmuons, "", m_mindR); + if( !passMuon ){ + if ( timerSvc() ) m_BmmHypTot->stop(); + if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG << "Found "<<efmuons.size() <<" EF muons - fail (either number or pts are insufficient)"<< endmsg; + afterExecMonitors().ignore(); + return HLT::OK; + }else{ + if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG << "Found "<<efmuons.size() <<" EF muons, require "<<m_nEfMuon<<" - accept "<< endmsg; + } + m_mon_Acceptance.push_back( ACCEPT_PassNEFMuons ); + m_mon_nEFMuons = m_nEfMuon; + + + // record collection now + if ( timerSvc() ) m_BmmHypTot->stop(); + + HLT::TriggerElement* outputTE = addRoI(output); + outputTE->setActiveState(true); + m_countPassedEvents++; + + + // stop monitoring + afterExecMonitors().ignore(); + return HLT::OK; +} + + + + diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h new file mode 100644 index 0000000000000000000000000000000000000000..6782e70f806495880da0030035908af4a4356898 --- /dev/null +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h @@ -0,0 +1,144 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/************************************************************************** + ** + ** File: Trigger/TrigHypothesis/TrigBphysHypo/TrigBphysMuonCounter.h + ** + ** this algo just counts number of (EF) muons in the whole event and rejects if insufficient + ** + ** Author:Olya Igonkina + ** + ** Created: 28/03/2017 + ** Modified: + ** + **************************************************************************/ + +#ifndef TRIG_TrigBphysMuonCounter_H +#define TRIG_TrigBphysMuonCounter_H + +// standard stuff +#include <string> +#include <map> +#include <cmath> +#include <algorithm> + +#include "TrigInterfaces/AllTEAlgo.h" + +class TrigTimer; + +class TrigBphysMuonCounter: public HLT::AllTEAlgo { + + public: + TrigBphysMuonCounter(const std::string & name, ISvcLocator* pSvcLocator); + ~TrigBphysMuonCounter(); + HLT::ErrorCode hltInitialize(); + HLT::ErrorCode hltFinalize(); + + HLT::ErrorCode hltExecute(std::vector<std::vector<HLT::TriggerElement*> >& inputTEs, unsigned int output); + + private: + + + + template<class Tin, class Tout> bool passNObjects(int nObjMin, + const std::vector<float>& ptObjMin, + std::vector<std::vector<HLT::TriggerElement*> >& inputTE , + Tout & outVec, + //std::string printTag, + const std::string& collectionKey, + float mindR) ; + + + TrigTimer* m_BmmHypTot; + + int m_nEfMuon ; // muons have to be present in TE, but are not required to match to tracks + std::vector<float> m_ptMuonMin; + float m_mindR; + // OI: should we check for CB flag? + + //Counters + uint32_t m_countTotalEvents; + uint32_t m_countPassedEvents; + + + //Monitored variables + std::vector<int> m_mon_Acceptance; + float m_mon_nEFMuons; +}; + + +template<class Tin, class Tout> bool TrigBphysMuonCounter::passNObjects(int nObjMin, + const std::vector<float>& ptObjMin, + std::vector<std::vector<HLT::TriggerElement*> >& inputTE , + Tout & outVec, + //std::string printTag, + const std::string& collectionKey, + float mindR) +{ + if( nObjMin <= 0 ) return true; + ElementLinkVector<Tin> inVecColl; + outVec.clear(); + std::vector<float> pts; + + float mindR2 = mindR*mindR; + + unsigned int nTEs = inputTE.size(); + for ( unsigned int i=0; i < nTEs; ++i) { + unsigned int mTEs = inputTE[i].size(); + for ( unsigned int j=0; j < mTEs; ++j) { + if(getFeaturesLinks<Tin,Tin>(inputTE[i][j], inVecColl, collectionKey)==HLT::OK ) { + for( const auto& efmu : inVecColl){ + // check for overlap + bool found = false; + for(const auto& part : outVec ){ + double deta = (*part)->eta() - (*efmu)->eta(); + double dphi = (*part)->phi() - (*efmu)->phi(); + double deltaR2 = deta*deta +dphi*dphi; + if( deltaR2 <= mindR2) found = true; + } + if( !found ){ + float pt = fabs((*efmu)->pt()) ; + // check if value in GeV or MeV, if it was >350 GeV and multiplied by 1000, it does not matter + if( pt < 350. && pt>0.01 ) pt *= 1000.; + pts.push_back(pt); + outVec.push_back(efmu); + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Found muon, pt= " << pt << endmsg; + } + }//}// end loop over muons in one TE + } // end getFeaturesLinks + }} // end loop over all TEs + + //=== check if it is enough muons + if( (int)outVec.size() < nObjMin ) { + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Rejecting: " + <<" #muons= " << outVec.size() + << " while need "<< nObjMin << endmsg; + return false; + } + //== check that muons have correct pts + std::sort(pts.begin(), pts.end(), std::greater<float>()); + + std::cout << " OI check pt \n"; + for( float pt: pts ) std::cout << pt << " " ; + std::cout<< std::endl; + + unsigned int Ncheck = std::min( nObjMin, int(ptObjMin.size()) ); + bool failMuonPt = false; + for ( unsigned int ipt=0; ipt < Ncheck; ++ipt) { + if( pts[ipt] < ptObjMin[ipt] ) + failMuonPt = true; + } + if( failMuonPt ){ + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Fail muon pt cut" << endmsg; + return false; + } + // here would be good to limit number of objects to the minimum + + return true; + +} + + +#endif diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx index 85a12d52f6b9007f208c0d9bc3289e8791489735..5e3e47bdfb7179d7569d00ffa4912208eb7a0cc9 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx @@ -828,14 +828,18 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge int mu1_TE=-1; int mu2_TE=-1; if (!m_FTK) { + if ( inputTE.size() != 2 ) { - msg() << MSG::ERROR << "Got different than 2 number of input TEs: " << inputTE.size() << endmsg; - m_mon_Errors.push_back(ERROR_Not_2_InputTEs); - if ( timerSvc() ) m_TotTimer->stop(); - return HLT::BAD_JOB_SETUP; + msg() << MSG::DEBUG << "Got different than 2 number of input TEs: " << inputTE.size() << endmsg; + //m_mon_Errors.push_back(ERROR_Not_2_InputTEs); + //if ( timerSvc() ) m_TotTimer->stop(); + //return HLT::BAD_JOB_SETUP; + mu1_TE=0; + mu2_TE=0; + }else{ + mu1_TE=0; + mu2_TE=1; } - mu1_TE=0; - mu2_TE=1; } else { if ( inputTE.size() != 3 ) { msg() << MSG::ERROR << "FTK mode expect 3 input TEs, got : " << inputTE.size() << endmsg; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx index f49d8f1693c3c25a9bd630c62936309b9063d42e..8209a0ef9ea5b36ec0413a014f58c0a724a5006c 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx @@ -129,9 +129,12 @@ bool TrigMultiTrkFex::passNTracks(int nObjMin, unsigned int nTEs = inputTE.size(); for ( unsigned int i=0; i < nTEs; ++i) { - unsigned int mTEs = inputTE[i].size(); + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << " TE input array " << i << endmsg; + unsigned int mTEs = inputTE[i].size(); for ( unsigned int j=0; j < mTEs; ++j) { + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << " TE input " << j << endmsg; if(getFeaturesLinks<xAOD::TrackParticleContainer,xAOD::TrackParticleContainer>(inputTE[i][j], inVecColl, collectionKey)==HLT::OK ) { + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "got track container " << inVecColl.size() << endmsg; for( const auto & efmu : inVecColl){ //auto const & inVec: inVecColl ) // check for overlap bool found = false; @@ -140,7 +143,14 @@ bool TrigMultiTrkFex::passNTracks(int nObjMin, double deta = (*part)->eta() - (*efmu)->eta(); double dphi = (*part)->phi() - (*efmu)->phi(); double deltaR2 = deta*deta +dphi*dphi; - if( deltaR2 <= mindR2) found = true; + if( deltaR2 <= mindR2){ + found = true; + if ( msgLvl() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Duplicated track pt/eta/phi/q " + << (*efmu)->pt()<< " / " + << (*efmu)->eta()<< " / " + << (*efmu)->phi()<< " / " + << (*efmu)->charge()<< " skip " <<deltaR2 << endmsg; + } } if( !found ) { outVec.push_back(efmu); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx index dc4e588e20cf64b6746e0f95630daaa010922410..48bc5a47c8371f13ea505185bf4b068815487477 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx @@ -20,6 +20,7 @@ #include "../TrigL2TrkMassHypo.h" #include "../TrigEFTrkMassHypo.h" #include "../TrigMultiTrkFex.h" +#include "../TrigBphysMuonCounter.h" //#include "../TrigL2LooseMuonHypo.h" @@ -56,6 +57,7 @@ DECLARE_TOOL_FACTORY( TrigBphysHelperUtilsTool ) DECLARE_ALGORITHM_FACTORY( TrigEFBMuMuFex ) DECLARE_ALGORITHM_FACTORY( TrigEFMultiMuFex ) DECLARE_ALGORITHM_FACTORY( TrigMultiTrkFex ) +DECLARE_ALGORITHM_FACTORY( TrigBphysMuonCounter ) DECLARE_ALGORITHM_FACTORY( TrigEFTrkMassFex ) //DECLARE_ALGORITHM_FACTORY( TrigBphysL1DiMuComboFex ) @@ -86,6 +88,7 @@ DECLARE_FACTORY_ENTRIES( TrigBphysHypo ) { DECLARE_ALGORITHM( TrigEFBMuMuFex ) DECLARE_ALGORITHM( TrigEFMultiMuFex ) DECLARE_ALGORITHM( TrigMultiTrkFex ) + DECLARE_ALGORITHM( TrigBphysMuonCounter ) DECLARE_ALGORITHM( TrigEFTrkMassFex ) // DECLARE_ALGORITHM( TrigBphysL1DiMuComboFeX ) diff --git a/Trigger/TriggerCommon/TriggerMenu/python/bphysics/generateBPhysicsChainDefs.py b/Trigger/TriggerCommon/TriggerMenu/python/bphysics/generateBPhysicsChainDefs.py index 9d46f03550a9e943e2a1023b5874827efa9593c7..cb7908b36c6ba6c51227e50d5cdf358ed5d066e8 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/bphysics/generateBPhysicsChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/bphysics/generateBPhysicsChainDefs.py @@ -13,25 +13,60 @@ log = logging.getLogger(__name__) from TriggerMenu.menu.MenuUtils import setupTopoStartFrom from TrigInDetConf.TrigInDetSequence import TrigInDetSequence + +log.bphysTrigWarning = True + + ########################################################################### ########################################################################### def generateChainDefs(chainDict): from TriggerMenu.muon.generateMuonChainDefs import generateChainDefs as genMuonChainDefs - theChainDef = genMuonChainDefs(chainDict) + + from TriggerJobOpts.TriggerFlags import TriggerFlags + if TriggerFlags.run2Config=='2016': + thisIsBphysChain = False + else : + thisIsBphysChain = True + + + # OI - this is really should be managed in RunTier0Tests and not here!! + menu_name = TriggerFlags.triggerMenuSetup() + if 'MC_pp_v6' in menu_name and TriggerFlags.run2Config!='2016' and log.bphysTrigWarning : + log.warning(menu_name+" is used with run2Config = "+str(TriggerFlags.run2Config)+" will use Bphys trigger config for 2016!!") + thisIsBphysChain = False + log.bphysTrigWarning = False + + elif log.bphysTrigWarning : + log.bphysTrigWarning = False + log.info( "Bphys trigger will be setup for run2config = "+str(TriggerFlags.run2Config)+" as requested") + + + if "bBmumuxv3" in chainDict['chainName'] : # OI this mc 2016 chain was never enabled, and is not needed in future + thisIsBphysChain = False + if 'legacyVtx' in chainDict['chainName'] : # OI Drell-Yan chains are not migrated + thisIsBphysChain = False + if 'invm' in chainDict['chainName'] : # OI Drell-Yan chains are not migrated + thisIsBphysChain = False + + + theChainDef = genMuonChainDefs(chainDict, thisIsBphysChain) if not chainDict["topo"]: log.error( "No topo given -> not a bphysics chain...") else: - theChainDef = _addTopoInfo(theChainDef,chainDict) + if thisIsBphysChain : # new setup + theChainDef = _addTopoInfo(theChainDef,chainDict, doL2MultiTrack = True) + else : + theChainDef = _addTopoInfo(theChainDef,chainDict, doL2MultiTrack = False) return theChainDef ########################################################################### ########################################################################### -def _addTopoInfo(theChainDef,chainDict,doAtL2AndEF=True): +def _addTopoInfo(theChainDef,chainDict,doAtL2AndEF=True, doL2MultiTrack = False): maxL2SignatureIndex = -1 for signatureIndex,signature in enumerate(theChainDef.signatureList): @@ -45,44 +80,34 @@ def _addTopoInfo(theChainDef,chainDict,doAtL2AndEF=True): SameConfigTopos = ['bJpsi', 'bDimu', 'bTau', 'bTauTrk', 'trkTau', 'bDsPhiXtight','bDsPhiX', 'bPhi', - 'bBmumu', 'bJpsimumu', 'bUpsimumu', 'Zmumu','bUpsi'] + 'bBmumu', 'bJpsimumu', 'bUpsimumu', 'Zmumu','bUpsi', + 'bNocut'] ntopos = len(topoAlgs) topoThresh = chainDict['topoThreshold'] topoStartFrom = setupTopoStartFrom(topoThresh,theChainDef) if topoThresh else None - + + if ('bBmumux' in topoAlgs) | ('bBmumuxv2' in topoAlgs) | ('bBmumuxv3' in topoAlgs): - theChainDef = bBmumuxTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom) + theChainDef = bBmumuxTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack) elif ('Trkloose' in topoAlgs): theChainDef = bMuTrack(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom) + elif ('TrkPEB' in topoAlgs): + theChainDef = bMuTrackPEB(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom) elif (ntopos ==1) & (topoAlgs[0] in SameConfigTopos): - theChainDef = bSingleOptionTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom) + theChainDef = bSingleOptionTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack) else: - theChainDef = bMultipleOptionTopos(theChainDef,chainDict,inputTEsL2, inputTEsEF, topoStartFrom) + theChainDef = bMultipleOptionTopos(theChainDef,chainDict,inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack) return theChainDef ################################################################################### -################################################################################### - -def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom): - topoAlgs = chainDict["topo"] - mtopo = topoAlgs[0] - # TE naming deifnition - TEname = findL2teBaseName(chainDict['chainName'],topoAlgs) - L2TEname = "L2_" + TEname+'_'+mtopo+'_'+chainDict['L1item'] - EFTEname = "EF_" + chainDict['chainName'] - topo2StartFrom = None - if topoStartFrom: - L2TEname = "L2_" + TEname+'_'+mtopo+'_tsf_'+chainDict['L1item'] - topo2StartFrom = L2TEname - - chainParts = chainDict['chainParts'] +def getBphysThresholds(chainDict) : mult = 0 trkmuons = [] fexNameExt = "" - for part in chainParts : + for part in chainDict['chainParts'] : mult = mult + int(part['multiplicity']) for dictpart in chainDict['chainParts']: if 'mu' in dictpart['trigType']: @@ -104,36 +129,81 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart thr = 900. trkmuons.append(thr) fexNameExt = fexNameExt + "_"+str(int(dictpart['threshold'])) + return fexNameExt, trkmuons, mult + +################################################################################### + +def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack = False): + topoAlgs = chainDict["topo"] + mtopo = topoAlgs[0] + # TE naming deifnition + TEname = findL2teBaseName(chainDict['chainName'],topoAlgs) + L2TEname = "L2_" + TEname+'_'+mtopo+'_'+chainDict['L1item'] + EFTEname = "EF_" + chainDict['chainName'] + topo2StartFrom = None + if topoStartFrom: + L2TEname = "L2_" + TEname+'_'+mtopo+'_tsf_'+chainDict['L1item'] + topo2StartFrom = L2TEname + + chainParts = chainDict['chainParts'] - if (mtopo == 'bJpsi'): - from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_Jpsi - from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_Jpsi + fexNameExt,trkmuons, mult = getBphysThresholds(chainDict) + + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu,TrigMultiTrkFex_DiMu_noCut,TrigMultiTrkFex_DiMu_noVtx_noOS,TrigMultiTrkFex_DiMu_noVtx_noM_SS + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu_noCut,EFMultiMuHypo_DiMu_noVtx,EFMultiMuHypo_DiMu,EFMultiMuHypo_BMeson,EFMultiMuHypo_Jpsi,EFMultiMuHypo_Upsi,EFMultiMuHypo_2700 + if (mtopo == 'bJpsi'): + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_Jpsi + from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_Jpsi + L2Fex = L2MultiMuFex_Jpsi() + L2Hypo = L2MultiMuHypo_Jpsi() + from TrigBphysHypo.TrigEFMultiMuFexConfig import EFMultiMuFex_Jpsi from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_Jpsi - L2Fex = L2MultiMuFex_Jpsi() - L2Hypo = L2MultiMuHypo_Jpsi() EFFex = EFMultiMuFex_Jpsi() EFHypo = EFMultiMuHypo_Jpsi() elif (mtopo =='bDimu'): import re if ('3mu' in chainDict['chainName'] or re.search('2mu[0-9]+_mu[0-9]+',chainDict['chainName']) or re.search('mu[0-9]+_2mu[0-9]+',chainDict['chainName'])): - from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_DiMu - from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_DiMu + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_DiMu + from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_DiMu + L2Fex = L2MultiMuFex_DiMu() + L2Hypo = L2MultiMuHypo_DiMu() + from TrigBphysHypo.TrigEFMultiMuFexConfig import EFMultiMuFex_DiMu from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu - L2Fex = L2MultiMuFex_DiMu() - L2Hypo = L2MultiMuHypo_DiMu() EFFex = EFMultiMuFex_DiMu() EFHypo = EFMultiMuHypo_DiMu() else: #This is a di-muon chain - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu + L2Fex = L2BMuMuFex_DiMu() + L2Hypo = L2BMuMuHypo_DiMu() + from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu - L2Fex = L2BMuMuFex_DiMu() - L2Hypo = L2BMuMuHypo_DiMu() EFFex = EFBMuMuFex_DiMu() EFHypo = EFBMuMuHypo_DiMu() elif (mtopo == 'bTauTrk'): @@ -157,6 +227,20 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart EFHypo = EFMultiMuHypo_2700("EFMultiMuHypo_Tau3") EFHypo.bphysCollectionKey = "EFMultiMuFex" + elif (mtopo == 'bNocut'): + + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu_noCut + from TrigBphysHypo.TrigBphysMuonCounterConfig import TrigBphysMuonCounter_bNmu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu_noCut + # at level 2 just check that there is at least 2 tracks. One could cut this more down with multiplicity cut for 3mu_bNocut + # but because of 3mu_bJpsi items we will not gain anything + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + + EFFex = TrigBphysMuonCounter_bNmu("TrigBphysMuonCounter"+fexNameExt, trkmuons) + EFHypo = None + elif (mtopo == 'bTau'): from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_trkTau @@ -164,8 +248,15 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart from TrigBphysHypo.TrigEFMultiMuFexConfig import EFMultiMuFex_Tau2 from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_2700 - L2Fex = None - L2Hypo = None + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_trkTau + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_trkTau() + L2Hypo = EFMultiMuHypo_2700("L2MultiMuHypo_bTau") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : # in 2016 there was no L2 part + L2Fex = None + L2Hypo = None if mult == 2 : EFFex = EFMultiMuFex_Tau2() @@ -243,42 +334,72 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart elif (mtopo == 'bUpsi'): - from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_Upsi - from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_Upsi + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Upsi("L2MultiMuTrkHypo_Upsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else: + from TrigBphysHypo.TrigL2MultiMuFexConfig import L2MultiMuFex_Upsi + from TrigBphysHypo.TrigL2MultiMuHypoConfig import L2MultiMuHypo_Upsi + L2Fex = L2MultiMuFex_Upsi() + L2Hypo = L2MultiMuHypo_Upsi() + from TrigBphysHypo.TrigEFMultiMuFexConfig import EFMultiMuFex_Upsi from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_Upsi - L2Fex = L2MultiMuFex_Upsi() - L2Hypo = L2MultiMuHypo_Upsi() EFFex = EFMultiMuFex_Upsi() EFHypo = EFMultiMuHypo_Upsi() elif (mtopo == 'bBmumu'): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_B - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_B + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_BMeson + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_BMeson("L2MultiMuTrkHypo_BMeson") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_B + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_B + L2Fex = L2BMuMuFex_B() + L2Hypo = L2BMuMuHypo_B() from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_B from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_B - L2Fex = L2BMuMuFex_B() - L2Hypo = L2BMuMuHypo_B() EFFex = EFBMuMuFex_B() EFHypo = EFBMuMuHypo_B() elif (mtopo == 'bJpsimumu'): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_Jpsi - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_Jpsi + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi + L2Fex = L2BMuMuFex_Jpsi() + L2Hypo = L2BMuMuHypo_Jpsi() + from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Jpsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Jpsi - L2Fex = L2BMuMuFex_Jpsi() - L2Hypo = L2BMuMuHypo_Jpsi() EFFex = EFBMuMuFex_Jpsi() EFHypo = EFBMuMuHypo_Jpsi() elif (mtopo == 'bUpsimumu'): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_Upsi - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Upsi + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Upsi("L2MultiMuTrkHypo_Upsi") + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_Upsi + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Upsi + L2Fex = L2BMuMuFex_Upsi() + L2Hypo = L2BMuMuHypo_Upsi() + from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Upsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Upsi - L2Fex = L2BMuMuFex_Upsi() - L2Hypo = L2BMuMuHypo_Upsi() EFFex = EFBMuMuFex_Upsi() EFHypo = EFBMuMuHypo_Upsi() @@ -298,7 +419,10 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart if L2Fex != None : theChainDef.addSequence([L2Fex, L2Hypo], inputTEsL2, L2TEname, topo_start_from = topoStartFrom) theChainDef.addSignatureL2([L2TEname]) - theChainDef.addSequence([EFFex, EFHypo],inputTEsEF, EFTEname, topo_start_from=topo2StartFrom) + if EFHypo != None : + theChainDef.addSequence([EFFex, EFHypo],inputTEsEF, EFTEname, topo_start_from=topo2StartFrom) + else : + theChainDef.addSequence([EFFex],inputTEsEF, EFTEname, topo_start_from=topo2StartFrom) theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, [EFTEname]) if 'idperf' in chainDict['chainName']: @@ -313,7 +437,7 @@ def bSingleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStart ################################################################################### ################################################################################### -def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom): +def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack = False): topoAlgs = chainDict["topo"] TEname = findL2teBaseName(chainDict['chainName'],topoAlgs) @@ -331,31 +455,65 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta + #from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + #from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu,TrigMultiTrkFex_DiMu_noCut,TrigMultiTrkFex_DiMu_noVtx_noOS,TrigMultiTrkFex_DiMu_noVtx_noM_SS + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu_noCut,EFMultiMuHypo_DiMu_noVtx,EFMultiMuHypo_DiMu,EFMultiMuHypo_BMeson,EFMultiMuHypo_Jpsi,EFMultiMuHypo_Upsi,EFMultiMuHypo_2700,EFMultiMuHypo_BMeson + if ('7invm9' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' not in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_7invm9_noOS - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_7invm9 + #if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_7invm9_noOS + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_7invm9 + L2Fex = L2BMuMuFex_DiMu_7invm9_noOS() + L2Hypo = L2BMuMuHypo_DiMu_7invm9() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu_7invm9_noVtx") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 7000. + ## L2Hypo.UpperMassCut= 9000. + from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_7invm9_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_7invm9 - L2Fex = L2BMuMuFex_DiMu_7invm9_noOS() - L2Hypo = L2BMuMuHypo_DiMu_7invm9() EFFex = EFBMuMuFex_DiMu_7invm9_noOS() EFHypo = EFBMuMuHypo_DiMu_7invm9() elif ('7invm9' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_7invm9_noOS - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_7invm9_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_7invm9_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_7invm9_noVtx - L2Fex = L2BMuMuFex_DiMu_7invm9_noOS() - L2Hypo = L2BMuMuHypo_DiMu_7invm9_noVtx() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_7invm9_noOS + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_7invm9_noVtx + L2Fex = L2BMuMuFex_DiMu_7invm9_noOS() + L2Hypo = L2BMuMuHypo_DiMu_7invm9_noVtx() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu_noVtx("L2MultiMuTrkHypo_DiMu_noVtx_7invm9") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 7000. + ## L2Hypo.UpperMassCut= 9000. + EFFex = EFBMuMuFex_DiMu_7invm9_noOS() EFHypo = EFBMuMuHypo_DiMu_7invm9_noVtx() elif ('18invm60' in topoAlgs) & ('noos' in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_18invm60_noOS - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_18invm60_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_18invm60_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_18invm60_noVtx - L2Fex = L2BMuMuFex_DiMu_18invm60_noOS() - L2Hypo = L2BMuMuHypo_DiMu_18invm60_noVtx() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_18invm60_noOS + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_18invm60_noVtx + L2Fex = L2BMuMuFex_DiMu_18invm60_noOS() + L2Hypo = L2BMuMuHypo_DiMu_18invm60_noVtx() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu_18invm60") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 18000. + ## L2Hypo.UpperMassCut= 60000. EFFex = EFBMuMuFex_DiMu_18invm60_noOS() EFHypo = EFBMuMuHypo_DiMu_18invm60_noVtx() elif ('11invm60' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' not in topoAlgs): @@ -363,8 +521,17 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_11invm60 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_11invm60_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_11invm60 - L2Fex = L2BMuMuFex_DiMu_11invm60_noOS() - L2Hypo = L2BMuMuHypo_DiMu_11invm60() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_11invm60_noOS() + L2Hypo = L2BMuMuHypo_DiMu_11invm60() + ## else: + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu_11invm60") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 11000. + ## L2Hypo.UpperMassCut= 60000. EFFex = EFBMuMuFex_DiMu_11invm60_noOS() EFHypo = EFBMuMuHypo_DiMu_11invm60() elif ('11invm24' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' not in topoAlgs): @@ -372,8 +539,18 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_11invm24 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_11invm24_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_11invm24 - L2Fex = L2BMuMuFex_DiMu_11invm24_noOS() - L2Hypo = L2BMuMuHypo_DiMu_11invm24() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_11invm24_noOS() + L2Hypo = L2BMuMuHypo_DiMu_11invm24() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu_11invm24") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 11000. + ## L2Hypo.UpperMassCut= 24000. + EFFex = EFBMuMuFex_DiMu_11invm24_noOS() EFHypo = EFBMuMuHypo_DiMu_11invm24() elif ('24invm60' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' not in topoAlgs): @@ -381,8 +558,17 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_24invm60 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_24invm60_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_24invm60 - L2Fex = L2BMuMuFex_DiMu_24invm60_noOS() - L2Hypo = L2BMuMuHypo_DiMu_24invm60() + ## if doL2MultiTrack : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu_24invm60") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 24000. + ## L2Hypo.UpperMassCut= 60000. + ## else : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_24invm60_noOS() + L2Hypo = L2BMuMuHypo_DiMu_24invm60() EFFex = EFBMuMuFex_DiMu_24invm60_noOS() EFHypo = EFBMuMuHypo_DiMu_24invm60() elif ('11invm60' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' in topoAlgs): @@ -390,8 +576,17 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_11invm60_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_11invm60_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_11invm60_noVtx - L2Fex = L2BMuMuFex_DiMu_11invm60_noOS() - L2Hypo = L2BMuMuHypo_DiMu_11invm60_noVtx() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_11invm60_noOS() + L2Hypo = L2BMuMuHypo_DiMu_11invm60_noVtx() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu_noVtx("L2MultiMuTrkHypo_DiMu_noVtx_11invm60") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 11000. + ## L2Hypo.UpperMassCut= 60000. EFFex = EFBMuMuFex_DiMu_11invm60_noOS() EFHypo = EFBMuMuHypo_DiMu_11invm60_noVtx() elif ('11invm24' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' in topoAlgs): @@ -399,8 +594,18 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_11invm24_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_11invm24_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_11invm24_noVtx - L2Fex = L2BMuMuFex_DiMu_11invm24_noOS() - L2Hypo = L2BMuMuHypo_DiMu_11invm24_noVtx() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_11invm24_noOS() + L2Hypo = L2BMuMuHypo_DiMu_11invm24_noVtx() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu_noVtx("L2MultiMuTrkHypo_DiMu_noVtx_11invm24") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 11000. + ## L2Hypo.UpperMassCut= 24000. + EFFex = EFBMuMuFex_DiMu_11invm24_noOS() EFHypo = EFBMuMuHypo_DiMu_11invm24_noVtx() elif ('24invm60' in topoAlgs) & ('noos' in topoAlgs) & ('novtx' in topoAlgs): @@ -408,8 +613,17 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_24invm60_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_24invm60_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_24invm60_noVtx - L2Fex = L2BMuMuFex_DiMu_24invm60_noOS() - L2Hypo = L2BMuMuHypo_DiMu_24invm60_noVtx() +# if not doL2MultiTrack : + # OI do MultiTrk is not working yet for invm chains + if 1 : + L2Fex = L2BMuMuFex_DiMu_24invm60_noOS() + L2Hypo = L2BMuMuHypo_DiMu_24invm60_noVtx() + ## else : + ## L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + ## L2Hypo = EFMultiMuHypo_DiMu_noVtx("L2MultiMuTrkHypo_DiMu_noVtx_24invm60") + ## L2Hypo.bphysCollectionKey = "MultiTrkFex" + ## L2Hypo.LowerMassCut= 24000. + ## L2Hypo.UpperMassCut= 60000. EFFex = EFBMuMuFex_DiMu_24invm60_noOS() EFHypo = EFBMuMuHypo_DiMu_24invm60_noVtx() @@ -436,32 +650,47 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta EFHypo.bphysCollectionKey = "EFMultiMuFex" elif ('bDimu' in topoAlgs) & ('novtx' in topoAlgs) & ('noos' in topoAlgs) & ('noL2' in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_passL2 - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_noVtx - L2Fex = L2BMuMuFex_DiMu_passL2() - L2Hypo = L2BMuMuHypo_DiMu_passL2() + if not doL2MultiTrack : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_passL2 + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 + L2Fex = L2BMuMuFex_DiMu_passL2() + L2Hypo = L2BMuMuHypo_DiMu_passL2() + else : + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_DiMu_noOS() EFHypo = EFBMuMuHypo_DiMu_noVtx() elif ('bDimu' in topoAlgs) & ('novtx' in topoAlgs) & ('noos' in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_noOS - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_noVtx + if not doL2MultiTrack : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_noOS + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_noVtx + L2Fex = L2BMuMuFex_DiMu_noOS() + L2Hypo = L2BMuMuHypo_DiMu_noVtx() + else : + L2Fex = TrigMultiTrkFex_DiMu_noVtx_noOS() + L2Hypo = EFMultiMuHypo_DiMu_noVtx("L2MultiMuTrkHypo_noVtx") + L2Hypo.bphysCollectionKey = "MultiTrkFex" from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_noOS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_noVtx - L2Fex = L2BMuMuFex_DiMu_noOS() - L2Hypo = L2BMuMuHypo_DiMu_noVtx() EFFex = EFBMuMuFex_DiMu_noOS() EFHypo = EFBMuMuHypo_DiMu_noVtx() elif ('bDimu' in topoAlgs) & ('noinvm' in topoAlgs) & ('novtx' in topoAlgs) & ('ss' in topoAlgs): - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_noinvm_SS - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_noinvm_noVtx from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu_noinvm_SS from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_noinvm_noVtx - L2Fex = L2BMuMuFex_DiMu_noinvm_SS() - L2Hypo = L2BMuMuHypo_DiMu_noinvm_noVtx() + if not doL2MultiTrack : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_noinvm_SS + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_noinvm_noVtx + L2Fex = L2BMuMuFex_DiMu_noinvm_SS() + L2Hypo = L2BMuMuHypo_DiMu_noinvm_noVtx() + else : + L2Fex = TrigMultiTrkFex_DiMu_noVtx_noM_SS() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_DiMu_noinvm_SS() - EFHypo = EFBMuMuHypo_DiMu_noinvm_noVtx() + EFHypo = EFBMuMuHypo_DiMu_noinvm_noVtx() elif ('bJpsimumu' in topoAlgs) & ('noid' in topoAlgs): from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_noId from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi_noId @@ -476,8 +705,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu - L2Fex = L2BMuMuFex_DiMu_passL2() - L2Hypo = L2BMuMuHypo_DiMu_passL2() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_DiMu_passL2() + L2Hypo = L2BMuMuHypo_DiMu_passL2() + else : + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_DiMu() EFHypo = EFBMuMuHypo_DiMu() if ('nscan' in chainDict['chainName'] ): # do not do L2 at all; expect one TE @@ -490,8 +724,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi_passL2 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Jpsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Jpsi - L2Fex = L2BMuMuFex_Jpsi_passL2() - L2Hypo = L2BMuMuHypo_Jpsi_passL2() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_Jpsi_passL2() + L2Hypo = L2BMuMuHypo_Jpsi_passL2() + else : + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_Jpsi() EFHypo = EFBMuMuHypo_Jpsi() if ('nscan' in chainDict['chainName'] ): # do not do L2 at all; expect one TE @@ -504,8 +743,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_B from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_B - L2Fex = L2BMuMuFex_DiMu_passL2() - L2Hypo = L2BMuMuHypo_DiMu_passL2() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_DiMu_passL2() + L2Hypo = L2BMuMuHypo_DiMu_passL2() + else : + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_B() EFHypo = EFBMuMuHypo_B() elif ('bDimu' in topoAlgs) & ('noEFbph' in topoAlgs): @@ -513,8 +757,14 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_passEF from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_passEF - L2Fex = L2BMuMuFex_DiMu() - L2Hypo = L2BMuMuHypo_DiMu() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_DiMu() + L2Hypo = L2BMuMuHypo_DiMu() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + EFFex = EFBMuMuFex_passEF() EFHypo = EFBMuMuHypo_passEF() elif ('bJpsimumu' in topoAlgs) & ('noEFbph' in topoAlgs): @@ -522,8 +772,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_passEF from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_passEF - L2Fex = L2BMuMuFex_Jpsi() - L2Hypo = L2BMuMuHypo_Jpsi() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_Jpsi() + L2Hypo = L2BMuMuHypo_Jpsi() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_passEF() EFHypo = EFBMuMuHypo_passEF() # Tight Chi2 variants @@ -532,8 +787,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Jpsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Jpsi_tightChi2 - L2Fex = L2BMuMuFex_Jpsi() - L2Hypo = L2BMuMuHypo_Jpsi() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_Jpsi() + L2Hypo = L2BMuMuHypo_Jpsi() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_Jpsi() EFHypo = EFBMuMuHypo_Jpsi_tightChi2() elif ('bDimu' in topoAlgs) & ('tightChi2' in topoAlgs): @@ -541,8 +801,14 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_tightChi2 - L2Fex = L2BMuMuFex_DiMu() - L2Hypo = L2BMuMuHypo_DiMu() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_DiMu() + L2Hypo = L2BMuMuHypo_DiMu() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + EFFex = EFBMuMuFex_DiMu() EFHypo = EFBMuMuHypo_DiMu_tightChi2() elif ('bBmumu' in topoAlgs) & ('tightChi2' in topoAlgs): @@ -550,8 +816,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_B from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_B from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_B_tightChi2 - L2Fex = L2BMuMuFex_B() - L2Hypo = L2BMuMuHypo_B() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_B() + L2Hypo = L2BMuMuHypo_B() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_BMeson("L2MultiMuTrkHypo_BMeson") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_B() EFHypo = EFBMuMuHypo_B_tightChi2() elif ('bUpsimumu' in topoAlgs) & ('tightChi2' in topoAlgs): @@ -559,8 +830,14 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Upsi from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Upsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Upsi_tightChi2 - L2Fex = L2BMuMuFex_Upsi() - L2Hypo = L2BMuMuHypo_Upsi() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_Upsi() + L2Hypo = L2BMuMuHypo_Upsi() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Upsi("L2MultiMuTrkHypo_Upsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + EFFex = EFBMuMuFex_Upsi() EFHypo = EFBMuMuHypo_Upsi_tightChi2() # Lxy > 0 variants @@ -569,8 +846,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_Jpsi from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Jpsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Jpsi_Lxy0 - L2Fex = L2BMuMuFex_Jpsi() - L2Hypo = L2BMuMuHypo_Jpsi() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_Jpsi() + L2Hypo = L2BMuMuHypo_Jpsi() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_Jpsi() EFHypo = EFBMuMuHypo_Jpsi_Lxy0() elif ('bDimu' in topoAlgs) & ('Lxy0' in topoAlgs): @@ -578,8 +860,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_DiMu from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_DiMu_Lxy0 - L2Fex = L2BMuMuFex_DiMu() - L2Hypo = L2BMuMuHypo_DiMu() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_DiMu() + L2Hypo = L2BMuMuHypo_DiMu() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_DiMu("L2MultiMuTrkHypo_DiMu") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_DiMu() EFHypo = EFBMuMuHypo_DiMu_Lxy0() elif ('bBmumu' in topoAlgs) & ('Lxy0' in topoAlgs): @@ -587,8 +874,13 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_B from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_B from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_B_Lxy0 - L2Fex = L2BMuMuFex_B() - L2Hypo = L2BMuMuHypo_B() + if not doL2MultiTrack : + L2Fex = L2BMuMuFex_B() + L2Hypo = L2BMuMuHypo_B() + else : + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_BMeson("L2MultiMuTrkHypo_BMeson") + L2Hypo.bphysCollectionKey = "MultiTrkFex" EFFex = EFBMuMuFex_B() EFHypo = EFBMuMuHypo_B_Lxy0() # legacy vertexing @@ -615,6 +907,58 @@ def bMultipleOptionTopos(theChainDef, chainDict, inputTEsL2, inputTEsEF, topoSta ################################################################################### +################################################################################### +def bMuTrackPEB(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): + + EFChainName = "EF_" + chainDict['chainName'] + topoAlgs = chainDict["topo"] + + mtopo = topoAlgs[0] + TEname = findL2teBaseName(chainDict['chainName'],topoAlgs) + L2TEname = "L2_" + TEname+'_'+mtopo+'_'+chainDict['L1item'] + + #--- 1: L2 first add large cone before duing superEF + #[trkfast, trkprec] = TrigInDetSequence("Bphysics", "bphysics", "IDTrig").getSequence() + [trkfast, trkprec] = TrigInDetSequence("BphysHighPt", "bphysHighPt", "IDTrig").getSequence() + L2TEcount = 0; L2outTEsfast = []; L2outTEsprec = []; + for L2inputTE in inputTEsL2: + L2TEcount = L2TEcount + 1 + L2outputTEfast = L2inputTE+'_idfast_'+str(L2TEcount) + L2outTEsfast.append(L2outputTEfast) + theChainDef.addSequence(trkfast,L2inputTE, L2outputTEfast) + if not "L2Trk2" in chainDict['chainName'] : + L2outputTEprec = L2inputTE+'_idprec_'+str(L2TEcount) + L2outTEsprec.append(L2outputTEprec) + theChainDef.addSequence(trkprec,L2outputTEfast, L2outputTEprec) + + theChainDef.addSignatureL2( L2outTEsfast) + theChainDef.addSignatureL2( L2outTEsprec) + theChainDef.addSequence([L2outTEsfast,L2outTEsprec],L2outputTEprec, L2TEname+"Trk") + + + #--- 2: then add L2 multi trk fex+hypo for Jpsi + + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_Jpsi + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_Jpsi + L2Fex = TrigMultiTrkFex_Jpsi() + #L2Fex.trackCollectionKey = "InDetTrigTrackingxAODCnv_Bphysics_IDTrig" + L2Hypo = EFMultiMuHypo_Jpsi("L2MultiMuTrkHypo_Jpsi") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + theChainDef.addSequence([L2Fex, L2Hypo], L2outTEsprec , L2TEname+"MultiTrk") + theChainDef.addSignatureL2([L2TEname+"MultiTrk"]) + + + #---- 3 : last step - setup PEB + from TrigDetCalib.TrigDetCalibConfig import TrigCheckForMuons_peb075 + bphysROBWriter = TrigCheckForMuons_peb075("bphysROBWriter_peb075") + + EFTEname = "EF_" + chainDict['chainName']+"_1" + inputTEsEF = theChainDef.signatureList[-1]['listOfTriggerElements'] + theChainDef.addSequence([bphysROBWriter],inputTEsEF, EFTEname) + theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, [EFTEname]) + + return theChainDef + ################################################################################### def bMuTrack(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): @@ -626,7 +970,7 @@ def bMuTrack(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): if ('bJpsi' in topoAlgs) & ('Trkloose' in topoAlgs): from TrigBphysHypo.TrigEFTrkMassFexConfig import EFTrkMassFex_Jpsimumu_loose - from TrigBphysHypo.TrigEFTrkMassHypoConfig import EFTrkMassHypo_Jpsimumu_loose + from TrigBphysHypo.TrigEFTrkMassHypoConfig import EFTrkMassHypo_Jpsimumu_loose EFFex = EFTrkMassFex_Jpsimumu_loose() EFHypo = EFTrkMassHypo_Jpsimumu_loose() @@ -639,31 +983,30 @@ def bMuTrack(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): # L2TEcount = L2TEcount+1 # L2outputTE = L2inputTE+'_idl2fast_'+str(L2TEcount) # L2outTEs.append(L2outputTE) - # #theChainDef.addSequence([theTrigIdscan],L2inputTE, L2outputTE) - # theChainDef.addSequence(trkfast,L2inputTE, L2outputTE) + # #theChainDef.addSequence([theTrigIdscan],L2inputTE, L2outputTE) # theChainDef.addSignatureL2(L2outTEs) - # + # # theChainDef.addSequence( [L2Fex, L2Hypo], L2outTEs, L2ChainName) ## theChainDef.addSequence( [L2Fex, L2Hypo], inputTEsL2, L2ChainName) # theChainDef.addSignatureL2([L2ChainName]) # # # - # EFTEcount = 0; EFoutTEsprec = []; + # EFTEcount = 0; EFoutTEsprec = []; # for EFinputTE in inputTEsEF: - # EFTEcount = EFTEcount + 1 + # EFTEcount = EFTEcount + 1 # EFoutputTEprec = EFinputTE+'_idefprec_'+str(EFTEcount) # EFoutTEsprec.append(EFoutputTEprec) # theChainDef.addSequence(trkprec,EFinputTE, EFoutputTEprec) # theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, EFoutTEsprec) # # theChainDef.addSequence([EFFex, EFHypo],EFoutTEsprec,EFChainName) - # theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, [EFChainName]) + # theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, [EFChainName]) # Sequence where only the EF mu+track stage is run. FTF+prec tracking run first #------- EF Sequences ------- - EFTEcount = 0; EFoutTEsfast = []; + EFTEcount = 0; EFoutTEsfast = []; for EFinputTE in inputTEsEF: EFTEcount = EFTEcount + 1 EFoutputTEfast = EFinputTE+'_idfast_'+str(EFTEcount) @@ -671,10 +1014,10 @@ def bMuTrack(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): theChainDef.addSequence(trkfast,EFinputTE, EFoutputTEfast) theChainDef.addSignature(theChainDef.signatureList[-1]['signature_counter']+1, EFoutTEsfast) - - EFTEcount = 0; EFoutTEsprec = []; + + EFTEcount = 0; EFoutTEsprec = []; for EFinputTE in inputTEsEF: - EFTEcount = EFTEcount + 1 + EFTEcount = EFTEcount + 1 EFinputTEprec = EFinputTE+'_idfast_'+str(EFTEcount) EFoutputTEprec = EFinputTE+'_idprec_'+str(EFTEcount) EFoutTEsprec.append(EFoutputTEprec) @@ -691,7 +1034,7 @@ def bMuTrack(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): ################################################################################### ################################################################################### -def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): +def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom, doL2MultiTrack = False): L2ChainName = "L2_" + chainDict['chainName'] EFChainName = "EF_" + chainDict['chainName'] topoAlgs = chainDict["topo"] @@ -708,6 +1051,8 @@ def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): L2TEname = "L2_" + TEname+myTopoString+'_tsf_'+chainDict['L1item'] topo2StartFrom = L2TEname + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu,TrigMultiTrkFex_DiMu_noCut,TrigMultiTrkFex_DiMu_noVtx_noOS,TrigMultiTrkFex_DiMu_noVtx_noM_SS + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_DiMu_noCut,EFMultiMuHypo_DiMu_noVtx,EFMultiMuHypo_DiMu,EFMultiMuHypo_BMeson,EFMultiMuHypo_Jpsi,EFMultiMuHypo_Upsi,EFMultiMuHypo_2700, EFMultiMuHypo_Bmumux # replace L2 Te (and EF tsf) with bBmumuxv2 naming # same underlying sequence is used # Warning if ever switch to v3 implementation -- this should be changed / tested @@ -742,55 +1087,40 @@ def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): # from InDetTrigRecExample.EFInDetConfig import * # theTrigEFIDInsideOut = TrigEFIDInsideOut_Bphysics().getSequence() - #JWW: Remove Bmumux L2 Fex and Hypo. Use a simple BMuMu Fex and Hypo instead - #from TrigBphysHypo.TrigL2BMuMuXHypoConfig import L2BMuMuXHypo_1 - #L2Hypo = L2BMuMuXHypo_1() if 'BcmumuDsloose' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_BcMuMuDs from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_BcMuMuDs from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_BcMuMuDs - #L2Fex = L2BMuMuXFex_BcMuMuDs() EFFex = EFBMuMuXFex_BcMuMuDs() EFHypo = EFBMuMuXHypo_BcMuMuDs() elif 'LbmumuLambda' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_BcMuMuDs from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_LbMuMuLambda from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_LbMuMuLambda - #L2Fex = L2BMuMuXFex_BcMuMuDs() EFFex = EFBMuMuXFex_LbMuMuLambda() EFHypo = EFBMuMuXHypo_LbMuMuLambda() elif 'BpmumuKp' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_BplusMuMuKplus from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_BplusMuMuKplus from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_BplusMuMuKplus - #L2Fex = L2BMuMuXFex_BplusMuMuKplus() EFFex = EFBMuMuXFex_BplusMuMuKplus() EFHypo = EFBMuMuXHypo_BplusMuMuKplus() elif 'BsmumuPhi' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_BplusMuMuKplus from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_BsMuMuPhi from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_BsMuMuPhi - #L2Fex = L2BMuMuXFex_BplusMuMuKplus() EFFex = EFBMuMuXFex_BsMuMuPhi() EFHypo = EFBMuMuXHypo_BsMuMuPhi() elif 'BsJpsiPhi' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_BplusMuMuKplus from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_BsJpsiPhi from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_BsJpsiPhi - #L2Fex = L2BMuMuXFex_BplusMuMuKplus() EFFex = EFBMuMuXFex_BsJpsiPhi() EFHypo = EFBMuMuXHypo_BsJpsiPhi() elif 'Taumumux' in topoAlgs: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_TauMuMuX from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_TauMuMuX from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_TauMuMuX - #L2Fex = L2BMuMuXFex_TauMuMuX() EFFex = EFBMuMuXFex_TauMuMuX() EFHypo = EFBMuMuXHypo_TauMuMuX() @@ -808,12 +1138,8 @@ def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): EFFex = EFBMuMuXFex_FTK() EFHypo = EFBMuMuXHypo_FTK() else: - #from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_1 - #from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_1 from TrigBphysHypo.TrigEFBMuMuXFexConfig import EFBMuMuXFex_1 from TrigBphysHypo.TrigEFBMuMuXHypoConfig import EFBMuMuXHypo_1 - #L2Fex = L2BMuMuFex_1() - #L2Hypo = L2BMuMuHypo_1() EFFex = EFBMuMuXFex_1() EFHypo = EFBMuMuXHypo_1() # legacy vertexing @@ -822,41 +1148,54 @@ def bBmumuxTopos(theChainDef,chainDict, inputTEsL2, inputTEsEF, topoStartFrom): EFFex = EFBMuMuXFex_1_legacyVtx() elif 'bBmumuxv3' in topoAlgs: - print 'MOOOO in bBmumuxv3' +# print 'MOOOO in bBmumuxv3' from TrigBphysHypo.TrigL2BMuMuXHypoConfig import L2BMuMuXHypo_EF from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_EF EFFex = L2BMuMuXFex_EF() EFHypo = L2BMuMuXHypo_EF() else: - #from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_1 from TrigBphysHypo.TrigEFBMuMuFexConfig import EFBMuMuFex_Jpsi from TrigBphysHypo.TrigEFBMuMuHypoConfig import EFBMuMuHypo_Jpsi - #L2Fex = L2BMuMuXFex_1() EFFex = EFBMuMuFex_Jpsi() EFHypo = EFBMuMuHypo_Jpsi() + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_Bmumux # Use simple di-muon fex/hypo for L2 # Note - may need to change oppsign and vtx requirements - if 'bBmumuxv3' in topoAlgs: - print 'MOOOO2 in bBmumuxv3' + # noL2 option to skip dimuon selection at L2 + + if 'noL2' in topoAlgs: + if doL2MultiTrack : + L2Fex = TrigMultiTrkFex_DiMu_noCut() + L2Hypo = EFMultiMuHypo_DiMu_noCut("L2MultiMuTrkHypo_DiMu_noCut") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_passL2 + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 + L2Fex = L2BMuMuFex_DiMu_passL2() + L2Hypo = L2BMuMuHypo_DiMu_passL2() + elif 'bBmumuxv3' in topoAlgs: +# print 'MOOOO2 in bBmumuxv3' from TrigBphysHypo.TrigL2BMuMuXHypoConfig import L2BMuMuXHypo_1 from TrigBphysHypo.TrigL2BMuMuXFexConfig import L2BMuMuXFex_1 L2Fex = L2BMuMuXFex_1() L2Hypo = L2BMuMuXHypo_1() - else: - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_1 - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_1 - L2Fex = L2BMuMuFex_1() - L2Hypo = L2BMuMuHypo_1() + + else : + if doL2MultiTrack : + from TrigBphysHypo.TrigMultiTrkFexConfig import TrigMultiTrkFex_DiMu + from TrigBphysHypo.TrigEFMultiMuHypoConfig import EFMultiMuHypo_Bmumux + L2Fex = TrigMultiTrkFex_DiMu() + L2Hypo = EFMultiMuHypo_Bmumux("EFMultiMuHypo_Bmumux") + L2Hypo.bphysCollectionKey = "MultiTrkFex" + else : + from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_1 + from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_1 + L2Fex = L2BMuMuFex_1() + L2Hypo = L2BMuMuHypo_1() - # noL2 option to skip dimuon selection at L2 - if 'noL2' in topoAlgs: - from TrigBphysHypo.TrigL2BMuMuFexConfig import L2BMuMuFex_DiMu_passL2 - from TrigBphysHypo.TrigL2BMuMuHypoConfig import L2BMuMuHypo_DiMu_passL2 - L2Fex = L2BMuMuFex_DiMu_passL2() - L2Hypo = L2BMuMuHypo_DiMu_passL2() if 'bBmumuxv3' in topoAlgs: L2TEcount = 0; L2outTEs = [] diff --git a/Trigger/TriggerCommon/TriggerMenu/python/menu/MC_pp_v7.py b/Trigger/TriggerCommon/TriggerMenu/python/menu/MC_pp_v7.py index 7584b1c9bb34c687191a40a9f4e7d5a046eb9bf7..fe4c89e40ca188659cb28c7f744b75b195c9842d 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/menu/MC_pp_v7.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/menu/MC_pp_v7.py @@ -1298,6 +1298,17 @@ def setupMenu(): ['2mu4_wOvlpRm_bBmumuxv2', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu6_wOvlpRm_bDimu', 'L1_3MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['2mu4_wOvlpRm_bDimu_noinvm_novtx_ss', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + + # chains with smart overlap removal , based on EF muons + ['mu4_bNocut', 'L1_MU4', [], [PhysicsStream], ['RATE:SingleMuon', 'BW:Muon'], -1], + ['2mu4_bNocut', 'L1_2MU4', [], [PhysicsStream], ['RATE:MultiMuon', 'BW:Muon'], -1], + ['3mu4_bNocut', 'L1_3MU4', [], [PhysicsStream], ['RATE:MultiMuon', 'BW:Muon'], -1], + ['3mu4_mu2noL1_bNocut', 'L1_3MU4', ['L1_3MU4',''], [PhysicsStream], ['RATE:MultiMuon','BW:Muon'], -1,['serial',-1,['3mu4','mu2noL1']]], + ['2mu4_mu3_mu2noL1_bNocut_L13MU4', 'L1_3MU4', ['L1_2MU4','L1_MU4',''], [PhysicsStream], ['RATE:MultiMuon','BW:Muon'], -1,['serial',-1,['2mu4','mu3','mu2noL1']]], + ['3mu3_mu3noL1_bNocut_L13MU4', 'L1_3MU4', ['L1_3MU4',''], [PhysicsStream], ['RATE:MultiMuon','BW:Muon'], -1,['serial',-1,['3mu3','mu3noL1']]], + ['3mu4_mu4noL1_bNocut', 'L1_3MU4', ['L1_3MU4',''], [PhysicsStream], ['RATE:MultiMuon','BW:Muon'], -1,['serial',-1,['3mu4','mu4noL1']]], + ['4mu4_bNocut', 'L1_4MU4', ['L1_4MU4',''], [PhysicsStream], ['RATE:MultiMuon','BW:Muon'], -1,['serial',-1,['4mu4','']]], + # chains with EF B-physics selection skipped ['2mu4_bJpsimumu_noEFbph', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], @@ -1473,8 +1484,8 @@ def setupMenu(): ['mu6_mu4_bJpsimumu_noL2', 'L1_MU6_2MU4', ['L1_MU6','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['2mu6_bDimu_noL2', 'L1_2MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['2mu6_bJpsimumu_noL2', 'L1_2MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], - ## moved to phys (ATR-14352) ['mu11_nomucomb_2mu4noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu11_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','2mu4noL1_nscan03']]], - ## moved to phys (ATR-14352) ['mu11_nomucomb_mu6noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu6_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03']]], + ## moved to phys (ATR-14352) ['mu11_2mu4noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu11'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','2mu4noL1_nscan03']]], + ## moved to phys (ATR-14352) ['mu11_mu6noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1_nscan03']]], # L1 topo # Simple OneBarrel and BarrelOnly # @@ -1571,6 +1582,7 @@ def setupMenu(): ['2mu6_bBmumux_BcmumuDsloose_noL2_L12MU6-BO', 'L1_2MU6-BO', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], + # # L1Topo nominal @@ -1654,9 +1666,9 @@ def setupMenu(): ['mu6_mu4_bDimu_L1BPH-2M9-MU6MU4_BPH-0DR15-MU6MU4','L1_BPH-2M9-MU6MU4_BPH-0DR15-MU6MU4', ['L1_MU6','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], ['mu6_mu4_bDimu_novtx_noos_L1BPH-2M9-MU6MU4_BPH-0DR15-MU6MU4','L1_BPH-2M9-MU6MU4_BPH-0DR15-MU6MU4', ['L1_MU6','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], - ['2mu6_nomucomb_L1LFV-MU6_bTau_delayed', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], - ['2mu6noL1_nomucomb_nscan03_L1LFV-MU6_bTau_delayed', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], - ['2mu6_nomucomb_L1LFV-MU6_bPhi', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], + ['2mu6_bTau_L1LFV-MU6_delayed', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], + ['2mu6noL1_bTau_L1LFV-MU6_delayed', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], + ['2mu6_bPhi_L1LFV-MU6', 'L1_LFV-MU6', ['L1_2MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], ### ATR-15263 ['2mu4_bBmumux_LbmumuLambda', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], diff --git a/Trigger/TriggerCommon/TriggerMenu/python/menu/Physics_pp_v7.py b/Trigger/TriggerCommon/TriggerMenu/python/menu/Physics_pp_v7.py index 7b1a6b2e1ef9e2869820c75d07b57aa56b2f60b2..da55ccb70ce5a6ab2f4e432cd6ba00bad9043881 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/menu/Physics_pp_v7.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/menu/Physics_pp_v7.py @@ -1840,15 +1840,14 @@ def setupMenu(): TriggerFlags.BphysicsSlice.signatures = [ - ['2mu6_nomucomb_bPhi', 'L1_2MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], - ['mu11_nomucomb_mu6_nomucomb_bPhi', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6_nomucomb_bPhi']]], - ['mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bPhi', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03_bPhi']]], + ['2mu6_bPhi', 'L1_2MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bPhi', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','mu6_bPhi']]], + ['mu11_mu6noL1_bPhi_L1MU11_2MU6', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1_bPhi']]], ['mu6_mu4_bBmumux_BsmumuPhi_delayed', 'L1_MU6_2MU4', ['L1_MU6','L1_MU4'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['2mu6_bBmumux_BsmumuPhi_delayed', 'L1_2MU6', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['mu10_mu6_bBmumux_BsmumuPhi_delayed', 'L1_MU10_2MU6', ['L1_MU10','L1_MU6'],['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], - ['3mu4_nomucomb_bTau', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics', 'BW:Bphys'], -1], ['2mu4_bDimu', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['2mu4_bDimu_noinvm_novtx_ss', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['2mu4_bDimu_novtx_noos', 'L1_2MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], @@ -1894,8 +1893,9 @@ def setupMenu(): ['3mu4_bDimu', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu4_bJpsi', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu4_bTau', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['3mu4_nomucomb_bTau', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu4_bUpsi', 'L1_3MU4', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], - + ['3mu6_bDimu', 'L1_3MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu6_bJpsi', 'L1_3MU6', [], [PhysicsStream, 'express'], ['RATE:Bphysics','BW:Bphys'], -1], ['3mu6_bTau', 'L1_3MU6', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], @@ -1959,14 +1959,14 @@ def setupMenu(): ['2mu10_bUpsimumu', 'L1_2MU10', [], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], - ['mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau', 'L1_MU11_2MU6', ['L1_MU11','L2_mu11_nomucomb'], [PhysicsStream, 'express'], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','2mu4noL1_nscan03']]], - ['mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03']]], - ['mu20_nomucomb_mu6noL1_nscan03_bTau', 'L1_MU20', ['L1_MU20','L2_mu20_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu20_nomucomb','mu6noL1_nscan03']]], + ['mu11_2mu4noL1_bTau_L1MU11_2MU6', 'L1_MU11_2MU6', ['L1_MU11','L2_mu11'], [PhysicsStream, 'express'], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','2mu4noL1']]], + ['mu11_mu6noL1_bTau_L1MU11_2MU6', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1']]], + ['mu20_mu6noL1_bTau', 'L1_MU20', ['L1_MU20','L2_mu20'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu20','mu6noL1']]], ## LFV topo based nscan (ATR-14352) - ['mu11_nomucomb_2mu4noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu11_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','2mu4noL1_nscan03']]], + ['mu11_2mu4noL1_bTau_L1LFV-MU', 'L1_LFV-MU', ['L1_MU10','L2_mu11'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','2mu4noL1']]], - ['mu6_nomucomb_2mu4_nomucomb_bTau_L1MU6_3MU4' , 'L1_MU6_3MU4', ['L1_MU6','L1_2MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], - ['2mu6_nomucomb_mu4_nomucomb_bTau_L12MU6_3MU4', 'L1_2MU6_3MU4', ['L1_2MU6','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu6_2mu4_bTau_L1MU6_3MU4' , 'L1_MU6_3MU4', ['L1_MU6','L1_2MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['2mu6_mu4_bTau_L12MU6_3MU4', 'L1_2MU6_3MU4', ['L1_2MU6','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], ['mu6_iloose_mu6_24invm60_noos_L1DY-BOX-2MU6', 'L1_DY-BOX-2MU6', ['L1_MU6','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1, False], ['mu4_iloose_mu4_11invm60_noos_L1MU6_2MU4', 'L1_MU6_2MU4', ['L1_MU4','L1_MU4'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], @@ -2159,17 +2159,29 @@ def setupMenu(): ['3mu4_bUpsi_delayed', 'L1_3MU4', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['mu6_2mu4_bJpsi_delayed', 'L1_MU6_3MU4', ['L1_MU6','L1_3MU4'], ['BphysDelayed'], ['RATE:BphysDelayed', 'BW:Bphys'], -1], ['mu6_2mu4_bUpsi_delayed', 'L1_MU6_3MU4', ['L1_MU6','L1_3MU4'], ['BphysDelayed'], ['RATE:BphysDelayed', 'BW:Bphys'], -1], - ['mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau_delayed', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6_nomucomb'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03']]], - #moved to muons slice ['mu6_nomucomb_2mu4_nomucomb_delayed_L1MU6_3MU4', 'L1_MU6_3MU4', ['L1_MU6','L1_2MU4'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], + ['mu11_mu6noL1_bTau_L1MU11_2MU6_delayed', 'L1_MU11_2MU6', ['L1_MU11','L2_mu6'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1']]], + #moved to muons slice ['mu6_2mu4_delayed_L1MU6_3MU4', 'L1_MU6_3MU4', ['L1_MU6','L1_2MU4'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['2mu10_bBmumux_BcmumuDsloose_delayed', 'L1_2MU10', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['2mu10_bJpsimumu_delayed', 'L1_2MU10', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['2mu10_bUpsimumu_delayed', 'L1_2MU10', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ['2mu10_bBmumuxv2_delayed', 'L1_2MU10', [], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1], ## LFV topo based *delayed* nscan (ATR-14352) - ## original proposed item: ['mu11_nomucomb_mu6noL1_nscan03_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu6_nomucomb'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03']]], - ['mu11_nomucomb_mu6noL1_nscan03_L1LFV-MU_bTau_delayed', 'L1_LFV-MU', ['L1_MU10','L2_mu6_nomucomb'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1,['serial',-1,['mu11_nomucomb','mu6noL1_nscan03']]], - ] + ## original proposed item: ['mu11_mu6noL1_L1LFV-MU_bTau', 'L1_LFV-MU', ['L1_MU10','L2_mu6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1']]], + ['mu11_mu6noL1_bTau_L1LFV-MU_delayed', 'L1_LFV-MU', ['L1_MU10','L2_mu6'], ['BphysDelayed'], ['RATE:BphysDelayed','BW:Bphys'], -1,['serial',-1,['mu11','mu6noL1']]], + + + # new baseline triggers, ATR-15503 + ['mu11_mu6_bBmumuxv2', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bBmumux_BcmumuDsloose', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bBmumux_BpmumuKp', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bJpsimumu_Lxy0', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bJpsimumu', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bUpsimumu', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bDimu_noinvm_novtx_ss', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + ['mu11_mu6_bDimu_novtx_noos', 'L1_MU11_2MU6', ['L1_MU11','L1_MU6'], [PhysicsStream], ['RATE:Bphysics','BW:Bphys'], -1], + + ] TriggerFlags.CombinedSlice.signatures = [ diff --git a/Trigger/TriggerCommon/TriggerMenu/python/menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenu/python/menu/SignatureDicts.py index 87f31fce9cff570972233bc417915e7ff73c2037..7cc30a669d1a16498fbb6892e6d858e4c0d51a87 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/menu/SignatureDicts.py @@ -54,7 +54,7 @@ ChainDictTemplate = { AllowedTopos_e = ["Jpsiee","Zeg","Zee","Heg"] AllowedTopos_mu = ['Jpsimumu'] AllowedTopos_xe = ['1dphi10', '2dphi05', '6dphi05', '6dphi15', '2dphi05', '2dphi15', 'mt25', 'mt35', 'razor140', 'razor170', 'razor200','razor220','razor100','razor185','razor195'] -AllowedTopos_bphys = ['bJpsi', 'bTau', 'bDimu', +AllowedTopos_bphys = ['bJpsi', 'bTau', 'bDimu', 'bNocut', 'bJpsimumu', 'bUpsimumu', 'bBmumu', 'bBmumux', 'bBmumuxv2', 'bBmumuxv3', @@ -62,7 +62,7 @@ AllowedTopos_bphys = ['bJpsi', 'bTau', 'bDimu', 'BcmumuDs' , 'BcmumuDsloose' , '7invm9', 'noos', 'noid', 'novtx', '11invm60','18invm60', 'bUpsi', - 'Trkloose', 'Zmumu', 'noL2', 'noEFbph', + 'Trkloose', 'TrkPEB', 'Zmumu', 'noL2', 'noEFbph', 'noinvm', 'ss', 'BpmumuKp', 'Taumumux', 'Dsmumux', 'LbmumuLambda', 'trkTau', 'bTauTrk', 'bDsPhiX', 'bPhi','bDsPhiXtight', '11invm24', '24invm60', @@ -243,11 +243,13 @@ MuonChainParts_Default = { BphysicsChainParts = deepcopy(MuonChainParts) #BphysicsChainParts['bTracking'] = ['FTK'] BphysicsChainParts['signature'] = ['Bphysics'] +BphysicsChainParts['peb'] = ['peb075'] BphysicsChainParts['topo'] = AllowedTopos_bphys # ---- Bphysics Dictinary of default Values ---- BphysicsChainParts_Default = deepcopy(MuonChainParts_Default) BphysicsChainParts_Default['signature'] = ['Bphysics'] BphysicsChainParts_Default['topo'] = [] +BphysicsChainParts['peb'] = [] BphysicsChainParts_Default['overlapRemoval'] = ['noOvlpRm'] #========================================================== diff --git a/Trigger/TriggerCommon/TriggerMenu/python/menu/StreamInfo.py b/Trigger/TriggerCommon/TriggerMenu/python/menu/StreamInfo.py index f5eb3c833cb02bc738f314d7975faf1a17b41b67..22e8da8d8e63250da86f2a7d2b665872a5233f1d 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/menu/StreamInfo.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/menu/StreamInfo.py @@ -58,7 +58,8 @@ calibStreams = [ 'IDFwd', 'BeamSpot', 'zdcCalib', - 'AFP' + 'AFP', + 'BphysPEB' ] ##NOTE: DataScouting_xx_NAME: diff --git a/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py b/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py index adae3518e4d20c05eabe59a0f94bc2c5a2ed642c..06902b099744bc191e05b9f100e2a1319524a926 100755 --- a/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/muon/MuonDef.py @@ -49,7 +49,7 @@ class L2EFChain_mu(L2EFChainDef): fullScanSeqMap = getFullScanCaloSequences() # ---------------------------------------------------------------- - def __init__(self, chainDict, asymDiMuonChain = False, AllMuons = []): + def __init__(self, chainDict, asymDiMuonChain = False, AllMuons = [], thisIsBphysChain=False): self.L2sequenceList = [] self.EFsequenceList = [] self.L2signatureList = [] @@ -79,6 +79,9 @@ class L2EFChain_mu(L2EFChainDef): # --- used to configure hypos for FS muon chains self.allMuThrs=AllMuons + # --- used to set default for Bphys chains + self.thisIsBphysChain = thisIsBphysChain + # --- when to run with ovlp removal --- self.ovlpRm = self.chainPart['overlapRemoval'] self.asymDiMuonChain = asymDiMuonChain @@ -90,7 +93,7 @@ class L2EFChain_mu(L2EFChainDef): self.setup_muXX_noL1FTK() elif (self.mult > 1) & ('wOvlpRm' in self.ovlpRm): self.doOvlpRm = True - elif "bJpsi" in self.chainName or "bDimu" in self.chainName or "bUpsi" in self.chainName : + elif "bJpsi" in self.chainName or "bDimu" in self.chainName or "bUpsi" in self.chainName or self.thisIsBphysChain : self.doOvlpRm = False elif (self.asymDiMuonChain) and (self.mult > 1) and not self.chainPart['extra'] and not self.chainPart['reccalibInfo'] : self.doOvlpRm = True @@ -102,7 +105,8 @@ class L2EFChain_mu(L2EFChainDef): and not self.chainPart['FSinfo'] \ and not self.chainPart['hypoInfo'] \ and not self.chainPart['reccalibInfo'] \ - and "cosmicEF" not in self.chainPart['addInfo']: + and "cosmicEF" not in self.chainPart['addInfo'] \ + and not self.thisIsBphysChain : self.setup_muXX_ID() elif "muL2" in self.chainPart['reccalibInfo']: self.setup_muXX_muL2() @@ -132,6 +136,8 @@ class L2EFChain_mu(L2EFChainDef): elif self.chainPart['reccalibInfo'] == "muoncalib" and "cosmicEF" not in self.chainPart['addInfo'] \ and "ds3" in self.chainPart['addInfo'] : self.setup_muXX_muoncalib_ds3() + elif self.thisIsBphysChain and "cosmicEF" not in self.chainPart['addInfo'] : ## Keep this at the end, in case non-default chain is requested + self.setup_muXX_nomucomb() elif "cosmicEF" in self.chainPart['addInfo']: self.setup_muXX_cosmicEF() elif "mucombTag" in self.chainPart['reccalibInfo'] and "noEF" in self.chainPart['addInfo'] : @@ -2127,17 +2133,12 @@ class L2EFChain_mu(L2EFChainDef): [theTrigMuSuperEF, theTrigMuonEFCombinerHypoConfig], 'EF_mu_step2']] - self.EFsequenceList += [[['EF_mu_step2'], - [theTrigMuonIDTrackMultiHypoConfig_Muon], - 'EF_mu_step3']] - self.L2signatureList += [ [['L2_mu_step1']*self.mult] ] self.L2signatureList += [ [['L2_mu_step2']*self.mult] ] self.L2signatureList += [ [['L2_mu_step3'] ] ] self.EFsignatureList += [ [['EF_mu_step1']*self.mult] ] self.EFsignatureList += [ [['EF_mu_step2']*self.mult] ] - self.EFsignatureList += [ [['EF_mu_step3'] ] ] self.TErenamingDict = { 'L2_mu_step1': mergeRemovingOverlap('L2_mu_SA_', L2AlgName+muFastThresh+'_'+self.L2InputTE), @@ -2149,6 +2150,16 @@ class L2EFChain_mu(L2EFChainDef): #--> replaced 'EF_mu_step3': mergeRemovingOverlap('EF_mutrkmulti_', idmulti+'_'+self.chainPartNameNoMult+'_'+self.L2InputTE), 'EF_mu_step1': mergeRemovingOverlap('EF_EFIDInsideOut_', idmulti+'_'+self.chainPartNameNoMult.replace(self.chainPart['specialStream'], '')+'_'+self.L2InputTE).replace('__', '_'), 'EF_mu_step2': mergeRemovingOverlap('EF_SuperEF_', idmulti+'_'+self.chainPartNameNoMult.replace(self.chainPart['specialStream'], '')+'_'+self.L2InputTE).replace('__', '_'), - 'EF_mu_step3': mergeRemovingOverlap('EF_mutrkmulti_', idmulti+'_'+self.chainPartNameNoMult.replace(self.chainPart['specialStream'], '')+'_'+self.L2InputTE).replace('__', '_'), } + + # OI this makes no sense , as we already cut on good tracks at L2, there is no rejection, skip it (at least in 2017) + from TriggerJobOpts.TriggerFlags import TriggerFlags + if TriggerFlags.run2Config=='2016': + self.EFsequenceList += [[['EF_mu_step2'], + [theTrigMuonIDTrackMultiHypoConfig_Muon], + 'EF_mu_step3']] + self.EFsignatureList += [ [['EF_mu_step3'] ] ] + self.TErenamingDict += { + 'EF_mu_step3': mergeRemovingOverlap('EF_mutrkmulti_', idmulti+'_'+self.chainPartNameNoMult.replace(self.chainPart['specialStream'], '')+'_'+self.L2InputTE).replace('__', '_'), + } diff --git a/Trigger/TriggerCommon/TriggerMenu/python/muon/generateMuonChainDefs.py b/Trigger/TriggerCommon/TriggerMenu/python/muon/generateMuonChainDefs.py index 12eee488766a92bbf7e6defe65b64d1b82456a8a..f2f778cecb89abcb3efc75c17059839c62d03449 100644 --- a/Trigger/TriggerCommon/TriggerMenu/python/muon/generateMuonChainDefs.py +++ b/Trigger/TriggerCommon/TriggerMenu/python/muon/generateMuonChainDefs.py @@ -40,7 +40,7 @@ def GetAllMuonThresholds(chainDict): return muons -def generateChainDefs(chainDict): +def generateChainDefs(chainDict, thisIsBphysChain=False): listOfChainDicts = splitChainDict(chainDict) listOfChainDefs = [] @@ -62,7 +62,7 @@ def generateChainDefs(chainDict): else: AllMuons=[] - Muon = L2EFChain_mu(subChainDict, asymDiMuonChain, AllMuons) + Muon = L2EFChain_mu(subChainDict, asymDiMuonChain, AllMuons, thisIsBphysChain) listOfChainDefs += [Muon.generateHLTChainDef()]