Commit e8862e26 authored by Olga Igonkina's avatar Olga Igonkina Committed by Graeme Stewart
Browse files

adding TrigMultiTrkFex (TrigBphysHypo-00-05-09)

	* Adding TrigMultiTrkFex for bPhi, trkTau
	* allow to modify Bphys collection in TrigEFMultiMuHypo
	* TrigBphysHypo-00-05-09


Former-commit-id: 8234832d
parent d9c67c16
......@@ -13,12 +13,13 @@ atlas_depends_on_subdirs( PRIVATE
Control/StoreGate
DetectorDescription/GeoPrimitives
Event/EventInfo
Event/FourMomUtils
Event/xAOD/xAODEventInfo
Event/xAOD/xAODBase
Event/xAOD/xAODMuon
Event/xAOD/xAODTracking
Event/xAOD/xAODTrigBphys
Event/xAOD/xAODTrigMuon
Event/xAOD/xAODTrigger
GaudiKernel
Generators/GeneratorObjects
InnerDetector/InDetConditions/InDetBeamSpotService
......
......@@ -17,7 +17,6 @@ use TrigSteeringEvent TrigSteeringEvent-* Trigger/TrigEven
use TrigT1Interfaces TrigT1Interfaces-* Trigger/TrigT1
use TrigNavigation TrigNavigation-* Trigger/TrigEvent
use xAODTrigMuon xAODTrigMuon-* Event/xAOD
use xAODTrigger xAODTrigger-* Event/xAOD
#private
use TrigTimeAlgs TrigTimeAlgs-* Trigger/TrigTools
use TrkTrack TrkTrack-* Tracking/TrkEvent
......@@ -39,6 +38,8 @@ use TrkVKalVrtFitter TrkVKalVrtFitter-* Tracking/TrkVert
use VxVertex VxVertex-* Tracking/TrkEvent
use xAODEventInfo xAODEventInfo-* Event/xAOD
use xAODTracking xAODTracking-* Event/xAOD
use FourMomUtils FourMomUtils-* Event
use xAODBase xAODBase-* Event/xAOD
end_private
......
......@@ -73,6 +73,7 @@ class EFMultiMuFex_Upsi (TrigEFMultiMuFex):
self.AthenaMonTools = [ validation, online, time ]
# this clas is identical to Tau3. In future we want to use Tau3 for clarity, but keep this one a bit for backward compatibility
class EFMultiMuFex_Tau (TrigEFMultiMuFex):
__slots__ = []
def __init__(self, name = "EFMultiMuFex_Tau"):
......@@ -98,6 +99,31 @@ class EFMultiMuFex_Tau (TrigEFMultiMuFex):
self.AthenaMonTools = [ validation, online, time ]
class EFMultiMuFex_Tau3 (TrigEFMultiMuFex):
__slots__ = []
def __init__(self, name = "EFMultiMuFex_Tau3"):
super( TrigEFMultiMuFex, self ).__init__( name )
# AcceptAll flag: if true take events regardless of cuts
self.AcceptAll = False
# L2 Bmumu cuts
self.LowerMassCut = 0.
self.UpperMassCut = 2900.
self.OppositeSign = False
self.MuonAlgo = "TrigMuSuperEF"
self.NMassMuon = 3
self.CheckNinputTE = False
from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
time = TrigTimeHistToolConfig("Time")
from TrigBphysHypo.TrigEFMultiMuFexMonitoring import TrigEFMultiMuFexValidationMonitoring
validation = TrigEFMultiMuFexValidationMonitoring()
from TrigBphysHypo.TrigEFMultiMuFexMonitoring import TrigEFMultiMuFexOnlineMonitoring
online = TrigEFMultiMuFexOnlineMonitoring()
self.AthenaMonTools = [ validation, online, time ]
class EFMultiMuFex_Tau2 (TrigEFMultiMuFex):
__slots__ = []
def __init__(self, name = "EFMultiMuFex_Tau2"):
......
......@@ -88,9 +88,9 @@ class EFMultiMuHypo_Upsi (TrigEFMultiMuHypo):
online = TrigEFMultiMuHypoOnlineMonitoring()
self.AthenaMonTools = [ validation, online, time ]
class EFMultiMuHypo_Tau (TrigEFMultiMuHypo):
class EFMultiMuHypo_2700 (TrigEFMultiMuHypo):
__slots__ = []
def __init__(self, name = "EFMultiMuHypo_Tau"):
def __init__(self, name = "EFMultiMuHypo_2700"):
super( TrigEFMultiMuHypo, self ).__init__( name )
# AcceptAll flag: if true take events regardless of cuts
......@@ -103,6 +103,7 @@ class EFMultiMuHypo_Tau (TrigEFMultiMuHypo):
self.UpperMassCut = 2700.
self.ApplyChi2Cut = True
self.Chi2VtxCut = 50.
self.bphysCollectionKey = "MultiTrkFex"
from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
time = TrigTimeHistToolConfig("Time")
......@@ -111,19 +112,20 @@ class EFMultiMuHypo_Tau (TrigEFMultiMuHypo):
online = TrigEFMultiMuHypoOnlineMonitoring()
self.AthenaMonTools = [ validation, online, time ]
class EFMultiMuHypo_Tau2 (TrigEFMultiMuHypo):
class EFMultiMuHypo_Phi (TrigEFMultiMuHypo):
__slots__ = []
def __init__(self, name = "EFMultiMuHypo_Tau2"):
def __init__(self, name = "EFMultiMuHypo_Phi"):
super( TrigEFMultiMuHypo, self ).__init__( name )
# AcceptAll flag: if true take events regardless of cuts
self.AcceptAll = False
# EF bTau cuts
# EF bPhi cuts
self.OppositeSign = False
self.ApplyUpperMassCut = True
self.LowerMassCut = 0.
self.UpperMassCut = 2700.
self.LowerMassCut = 940.
self.UpperMassCut = 1100.
self.ApplyChi2Cut = True
self.Chi2VtxCut = 10.
......
# 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 TrigMultiTrkFex
from AthenaCommon.AppMgr import ToolSvc
from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig
from TrigBphysHypo.TrigMultiTrkFexMonitoring import TrigMultiTrkFexValidationMonitoring
from TrigBphysHypo.TrigMultiTrkFexMonitoring import TrigMultiTrkFexOnlineMonitoring
class TrigMultiTrkFexPy (TrigMultiTrkFex):
__slots__ = []
def __init__(self, name = "MultiTrkFexPy"):
super( TrigMultiTrkFex, self ).__init__( name )
# AcceptAll flag: if true take events regardless of cuts
self.AcceptAll = False
def setTrackThresholds(self, thresholds) :
print thresholds
if len(thresholds) > self.nTrk :
print "ERROR: TrigMultiTrkFex.setTrackThresholds - too many thresholds requested" , thresholds, " expecting only ", self.nTrk
self.ptTrkMin = [] # reset, use thresholds from trigger name
for thr in thresholds : self.ptTrkMin.append( thr )
while len(self.ptTrkMin) < self.nTrk :
self.ptTrkMin.append(900.)
def setEFMuonThresholds(self, thresholds) :
if len(thresholds) > self.nEfMuon :
print "ERROR: TrigMultiTrkFex.setEFMuonThresholds - too many thresholds requested"
self.ptMuonMin = [] # reset, use thresholds from trigger name
for thr in thresholds : self.ptMuonMin.append( thr )
while len(self.ptMuonMin) < self.nEfMuon :
self.ptMuonMin.append(2000.) # lower pt cut makes no sense at trigger
def setL2CombMuonThresholds(self, thresholds) :
if len(thresholds) > self.nL2CombMuon :
print "ERROR: TrigMultiTrkFex.setL2CombMuonThresholds - too many thresholds requested"
self.ptMuonMin = [] # reset, use thresholds from trigger name
for thr in thresholds : self.ptMuonMin.append( thr )
while len(self.ptMuonMin) < self.nL2CombMuon :
self.ptMuonMin.append(2000.) # lower pt cut makes no sense at trigger
def setL2SAMuonThresholds(self, thresholds) :
print thresholds
# in case of L2SA limits, take only 1 muon with lowest threshold
if len(thresholds) > self.nL2SAMuon :
print "ERROR: TrigMultiTrkFex.setL2SAMuonThresholds - too many thresholds requested: ", thresholds, " expecting only ", self.nL2SAMuon
self.ptMuonMin = [] # reset, use thresholds from trigger name
for thr in thresholds : self.ptMuonMin.append( thr )
while len(self.ptMuonMin) < self.nL2SAMuon :
self.ptMuonMin.append(2000.) # lower pt cut makes no sense at trigger
######################################
# trkPhi selects 2 OS tracks pt>X,X GeV with M in [0.840,1.240] GeV
######################################
class TrigMultiTrkFex_trkPhi (TrigMultiTrkFexPy):
__slots__ = []
def __init__(self, name = "MultiTrkFex_trkPhi"):
super( TrigMultiTrkFexPy, self ).__init__( name )
#self.trackCollectionKey = "'
self.nTrk = 2
self.nTrkCharge = 0
self.nTrkMassMin = [840.]
self.nTrkMassMax = [1240.]
self.ptTrkMin = [4000., 4000. ] # set minimal pt of tracks for Phi+Pi
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 ]
###################################################################################
# trkPhiX selects 3 tracks pt>X,X,1 GeV M<2.9GeV and OS pair, M in [0.840,1.240] GeV
#####################################################################################
class TrigMultiTrkFex_trkPhiX (TrigMultiTrkFexPy):
__slots__ = []
def __init__(self, name = "MultiTrkFex_trkPhiX"):
super( TrigMultiTrkFexPy, self ).__init__( name )
#self.trackCollectionKey = "'
self.nTrk = 3
self.nTrkCharge = 1
self.ptTrkMin = [4000., 4000., 1000. ] # set minimal pt of tracks for Phi+Pi
self.diTrkMassMin = [840.] # phi window
self.diTrkMassMax = [1240.]
self.diTrkCharge = 0
self.nTrkMassMin = [0.]
self.nTrkMassMax = [2900.] # cut away J/psi
# 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 ]
###################################################################################
# trkPhiXTight selects 3 tracks pt>X,X,1 GeV M [1.5,2.5]GeV and OS pair, M in [0.840,1.240] GeV
#####################################################################################
class TrigMultiTrkFex_trkPhiXTight (TrigMultiTrkFexPy):
__slots__ = []
def __init__(self, name = "MultiTrkFex_trkPhiXTight"):
super( TrigMultiTrkFexPy, self ).__init__( name )
self.nTrk = 3
self.nTrkCharge = 1
self.nTrkMassMin = [1500.]
self.nTrkMassMax = [2500.]
self.ptTrkMin = [4000., 4000., 1000. ] # set minimal pt of tracks for Phi+Pi
self.diTrkMassMin = [840.] # phi window
self.diTrkMassMax = [1240.]
self.diTrkCharge = 0
# 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 ]
class TrigMultiTrkFex_trkTau (TrigMultiTrkFexPy):
__slots__ = []
def __init__(self, name = "MultiTrkFex_trkTau"):
super( TrigMultiTrkFexPy, self ).__init__( name )
# AcceptAll flag: if true take events regardless of cuts
self.AcceptAll = False
#self.trackCollectionKey = "'
self.nTrk = 3
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.diTrkMassMin = [] # no sub-resonances
self.diTrkMassMax = []
# muons are not matched to tracks, but still require to be present in TE
self.nEfMuon = 0
self.nL2CombMuon = 0
self.nL2SAMuon = 0
self.ptMuonMin = [] #3600., 3600.]
#self.overlapdR = 0.005
time = TrigTimeHistToolConfig("Time")
validation = TrigMultiTrkFexValidationMonitoring()
online = TrigMultiTrkFexOnlineMonitoring()
self.AthenaMonTools = [ validation, online, time ]
# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig
ERROR_labels = ' No_EventInfo : WrongNum_Input_TE : BphysColl_Fails '
ERROR_number = 3
ACCEPTANCE_labels = ' Input : HltExecute : PassNL2SAMuons : PassNL2CombMuons : PassNEFMuons : PassNTracks : HighPtTrack : NTrkCharge : NTrkMass : PairCharge : PairMass : RecordedCollection '
ACCEPTANCE_number = 12
class TrigMultiTrkFexValidationMonitoring(TrigGenericMonitoringToolConfig):
def __init__ (self, name="TrigMultiTrkFexValidationMonitoring"):
super(TrigMultiTrkFexValidationMonitoring, self).__init__(name)
self.defineTarget("Validation")
self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F',
title = 'MultiTrkFex - Algorithm errors ; ; # Events / Candidates',
xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5,
labels = ERROR_labels ) ]
self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F',
title = 'MultiTrkFex - Reached steps - acceptance ; ; # Events / Candidates',
xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5,
labels = ACCEPTANCE_labels ) ]
self.Histograms += [ defineHistogram('NTrkMass', type='TH1F', title="Inv.mass(mumu) [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrkFitMass', type='TH1F', title=" FitBMass [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrkChi2', type='TH1F', title="Chi2 of vertex fit",
xbins=100, xmin=0., xmax=10.) ]
self.Histograms += [ defineHistogram('PairMass', type='TH1F', title="Inv.mass(mumu) [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrk_all', type='TH1F', title="Number of tracks",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NTrk_highpt', type='TH1F', title="Number of high pt tracks",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NTrkHighPt_accepted', type='TH1F', title="Number of high pt tracks in accepted events",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NPair_all', type='TH1F', title="Number of hight pt pairs",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NPair_accepted', type='TH1F', title="Number of hight pt pairs (accepted)",
xbins=100, xmin=0., xmax=100.) ]
class TrigMultiTrkFexOnlineMonitoring(TrigGenericMonitoringToolConfig):
def __init__ (self, name="TrigMultiTrkFexOnlineMonitoring"):
super(TrigMultiTrkFexOnlineMonitoring, self).__init__(name)
self.defineTarget("Online")
self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F',
title = 'MultiTrkFex - Algorithm errors ; ; # Events / Candidates',
xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5,
labels = ERROR_labels ) ]
self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F',
title = 'MultiTrkFex - Reached steps - acceptance ; ; # Events / Candidates',
xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5,
labels = ACCEPTANCE_labels ) ]
self.Histograms += [ defineHistogram('NTrkMass', type='TH1F', title="Inv.mass(mumu) [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrkFitMass', type='TH1F', title=" FitBMass [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrkChi2', type='TH1F', title="Chi2 of vertex fit",
xbins=100, xmin=0., xmax=10.) ]
self.Histograms += [ defineHistogram('PairMass', type='TH1F', title="Inv.mass(mumu) [GeV]",
xbins=100, xmin=0., xmax=13.) ]
self.Histograms += [ defineHistogram('NTrk_all', type='TH1F', title="Number of tracks",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NTrk_highpt', type='TH1F', title="Number of high pt tracks",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NTrkHighPt_accepted', type='TH1F', title="Number of high pt tracks (accepted)",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NPair_all', type='TH1F', title="Number of hight pt pairs",
xbins=100, xmin=0., xmax=100.) ]
self.Histograms += [ defineHistogram('NPair_all', type='TH1F', title="Number of hight pt pairs (accepted)",
xbins=100, xmin=0., xmax=100.) ]
......@@ -459,6 +459,71 @@ StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result,
return StatusCode::SUCCESS;
} //vertexFit
StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result,
const std::vector<const xAOD::TrackParticle*> &trks,
std::vector<double>& inputMasses) { // inputmasses not const, as vertex code doesn't allowit
if ( msg().level() <= MSG::DEBUG ) msg() << MSG::DEBUG << "In vertexFit" << endmsg;
if (!result) {
if ( msg().level() <= MSG::DEBUG ) msg() << MSG::DEBUG << "Need to provide valid TrigBphys object" << endmsg;
return StatusCode::FAILURE;
}
if (trks.size() != inputMasses.size()) {
if ( msg().level() <= MSG::WARNING ) msg() << MSG::WARNING << "Mismatch in particle and mass vector sizes" << endmsg;
return StatusCode::FAILURE;
}
bool doFit(true); // set false if problematic TP
const Amg::Vector3D startingPoint(0.,0.,0.); // #FIXME use beamline for starting point?
//const Trk::Vertex startingPoint(Amg::Vector3D(0.,0.,0.)); // #FIXME use beamline for starting point?
xAOD::Vertex * vx(0);
if (doFit) vx = m_fitterSvc->fit(trks,startingPoint);
if (!vx){
if ( msg().level() <= MSG::DEBUG ) msg() << MSG::DEBUG << "No Vertex returned from fit / fitting not allowed" << endmsg;
result->setFitmass (-9999);
result->setFitchi2 (-9999);
result->setFitndof (-9999);
result->setFitx (-9999);
result->setFity (-9999);
result->setFitz (-9999);
} else {
std::vector<int> trkIndices(trks.size(),1);
double invariantMass(0.), invariantMassError(0.); // #FIXME what about the input masses?
m_VKVFitter->setMassInputParticles( inputMasses); // give input tracks muon mass
if (!(m_VKVFitter->VKalGetMassError(trkIndices,invariantMass,invariantMassError).isSuccess())) {
if ( msg().level() <= MSG::DEBUG ) msg()<<MSG::DEBUG<<"Warning from VKaVrt - cannot calculate uncertainties!"<<endmsg;
invariantMass = -9999.;
} // if
result->setFitmass (invariantMass);
result->setFitchi2 (vx->chiSquared());
result->setFitndof (vx->numberDoF());
result->setFitx (vx->x());
result->setFity (vx->y());
result->setFitz (vx->z());
delete vx; vx = 0;
} // if vx
if ( msg().level() <= MSG::DEBUG ) msg() << MSG::DEBUG <<
"Print for obj: " << result << "\n\t " <<
"roiId: " << result->roiId() << "\n\t " <<
"particleType: " << result->particleType() << "\n\t " <<
"level: " << result->level() << "\n\t " <<
"eta: " << result->eta() << "\n\t " <<
"phi: " << result->phi() << "\n\t " <<
"mass: " << result->mass() << "\n\t " <<
"fitmass: " << result->fitmass() << "\n\t " <<
"fitchi2: " << result->fitchi2() << "\n\t " <<
"fitndof: " << result->fitndof() << "\n\t " <<
"fitx: " << result->fitx() << "\n\t " <<
"fity: " << result->fity() << "\n\t " <<
"fitz: " << result->fitz() << "\n\t " << endmsg;
return StatusCode::SUCCESS;
} //vertexFit
double TrigBphysHelperUtilsTool::invariantMass(const xAOD::IParticle *p1, const xAOD::IParticle* p2, double m1, double m2) const {
......
///////////////////////// -*- C++ -*- /////////////////////////////
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
///////////////////////// -*- C++ -*- /////////////////////////////
// TrigBphysHelperUtilsTool.h
// Header file for class TrigBphysHelperUtilsTool
// Author: S.Binet<binet@cern.ch>
......@@ -91,7 +91,13 @@ class TrigBphysHelperUtilsTool: virtual public ::AthAlgTool
StatusCode vertexFit(xAOD::TrigBphys * result,
const std::vector<ElementLink<xAOD::TrackParticleContainer> > &particles,
std::vector<double>& inputMasses);
std::vector<double>& inputMasses);
StatusCode vertexFit(xAOD::TrigBphys * result,
const std::vector<const xAOD::TrackParticle*> &trks,
std::vector<double>& inputMasses);
// simplify this using templates perhaps?
double invariantMass(const xAOD::IParticle *p1, const xAOD::IParticle* p2, double m1, double m2) const;
double invariantMassIP(const std::vector<const xAOD::IParticle*>&ptls, const std::vector<double> & masses) const;
......
......@@ -56,6 +56,7 @@ TrigEFMultiMuHypo::TrigEFMultiMuHypo(const std::string & name, ISvcLocator* pSvc
// Read cuts
declareProperty("AcceptAll", m_acceptAll=true);
declareProperty("bphysCollectionKey", m_bphysCollectionKey = "EFMultiMuFex" );
declareProperty("OppositeSign", m_oppositeCharge=true);
declareProperty("LowerMassCut", m_lowerMassCut=4000.0);
declareProperty("UpperMassCut", m_upperMassCut=6000.0);
......@@ -80,6 +81,7 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltInitialize()
msg() << MSG::DEBUG << "AcceptAll = "
<< (m_acceptAll==true ? "True" : "False") << endmsg;
msg() << MSG::DEBUG << "TrigBphys collection " << m_bphysCollectionKey << endmsg;
msg() << MSG::DEBUG << "OppositeCharge = "
<< (m_oppositeCharge==true ? "True" : "False") << endmsg;
msg() << MSG::DEBUG << "LowerMassCut = " << m_lowerMassCut << endmsg;
......@@ -178,7 +180,7 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltExecute(const HLT::TriggerElement* outputTE
// const TrigEFBContainer* trigBphysColl = 0;
// const VxContainer* VertexColl;
HLT::ErrorCode status = getFeature(outputTE, trigBphysColl, "EFMultiMuFex");
HLT::ErrorCode status = getFeature(outputTE, trigBphysColl, m_bphysCollectionKey );
if ( status != HLT::OK ) {
if ( msgLvl() <= MSG::WARNING) {
......@@ -234,9 +236,9 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltExecute(const HLT::TriggerElement* outputTE
if(!thisPassedBsMass && !thisPassedChi2Cut)
if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG << "Did not pass mass & chi2 cuts < "<< endmsg;
if( thisPassedBsMass ) PassedBsMass = true;
if( thisPassedBsMass && thisPassedChi2Cut )
{
PassedBsMass = true;
PassedChi2Cut = true;
//HLT::markPassing(bits, *bphysIter, trigBphysColl);
xBits->markPassing((*bphysIter),trigBphysColl,true);
......@@ -287,6 +289,7 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltExecute(const HLT::TriggerElement* outputTE
m_lastEventPassed=IdEvent;
}
pass=true;
if(msgLvl() <= MSG::DEBUG) msg() << MSG::DEBUG << " accepting event" << endmsg;
}
// store result
......
......@@ -56,6 +56,7 @@ class TrigEFMultiMuHypo: public HLT::HypoAlgo {
// to set Accept-All mode: should be done with force-accept when possible
bool m_acceptAll;
std::string m_bphysCollectionKey;
//Counters
......
This diff is collapsed.
/*
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
*/
/**************************************************************************
**
** File: Trigger/TrigHypothesis/TrigBphysHypo/TrigMultiTrkFex.h
**
**
** Author:Olya Igonkina
**
** Created: 15/07/2016
** Modified:
**
**************************************************************************/
#ifndef TRIG_TrigMultiTrk_H
#define TRIG_TrigMultiTrk_H
// standard stuff
#include <string>
#include <map>
#include <cmath>
#include <algorithm>
#include "TrigInterfaces/AllTEAlgo.h"
#include "xAODTrigBphys/TrigBphysContainer.h"
class TrigBphysHelperUtilsTool;
class TrigTimer;
class TrigMultiTrkFex: public HLT::AllTEAlgo {
public:
TrigMultiTrkFex(const std::string & name, ISvcLocator* pSvcLocator);