21#include "Math/GenVector/VectorUtil.h"
38 " " << (
m_totalCharge < 0 ?
"total charge cut is disabled" :
"total charge cut: only right charge combinations") <<
endmsg <<
68 ATH_MSG_DEBUG(
"No GenericMonitoringTool configured: no monitoring histograms will be available" );
71 return StatusCode::SUCCESS;
89 auto mon =
Monitored::Group(
m_monTool, mon_totalCharge, mon_chi2, mon_mass, mon_pT_trk1, mon_pT_trk2, mon_Lxy, mon_D0_trk1, mon_D0_trk2, mon_Eta1, mon_Eta2);
99 mon_Lxy = trigBphys->
lxy();
101 mon_chi2 = trigBphys->
fitchi2();
102 mon_mass = 0.001 * trigBphys->
mass();
126 return StatusCode::SUCCESS;
130 return StatusCode::SUCCESS;
136 for (
size_t i = 0; i <
m_nTrk; ++i) {
142 return StatusCode::SUCCESS;
161 for (
size_t i = 0; i <
m_nTrk; ++i) {
163 ATH_MSG_DEBUG(
"Trigger with symmetric legs didn't pass previous decision" );
167 ATH_MSG_DEBUG(
"Trigger with symmetric legs passed previous decision" );
173 std::iota(
a.begin(),
a.end(), 0);
178 for (
size_t k = 0; k <
m_nTrk; ++k) {
181 if (msgLvl(MSG::DEBUG)) {
182 msg() <<
"combination #" << i++ <<
": { ";
183 std::copy(
a.begin(),
a.begin() +
m_nTrk, std::ostream_iterator<int>(
msg().stream(),
" "));
187 }
while (std::next_permutation(
a.begin(),
a.end()));
188 ATH_MSG_DEBUG(
"Trigger with asymmetric legs " << (
result ?
"passed" :
"didn't pass") <<
" previous decision" );
198 if ( range.first > 0. && mass < range.first )
return false;
199 if ( range.second > 0. && mass > range.second )
return false;
204 if (
m_deltaRMax == std::numeric_limits<float>::max() &&
m_deltaRMin == std::numeric_limits<float>::lowest()) {
208 for (
size_t i = 0 ; i < N; i++) {
210 for (
size_t j = i + 1; j < N; j++) {
212 double deltaR = ROOT::Math::VectorUtil::DeltaR(p1, p2);
223 for (
size_t i = 0 ; i < N; ++i) {
240 ATH_MSG_ERROR(
"executeAlg() is not supported by TrigMultiTrkComboHypoTool" );
Scalar deltaR(const MatrixBase< Derived > &vec) const
#define ATH_CHECK
Evaluate an expression and check for errors.
double charge(const T &p)
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
float d0() const
Returns the parameter.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
GenVecFourMom_t genvecP4() const
The full 4-momentum of the particle : GenVector form.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
size_t nTrackParticles() const
Number of tracks used to make particle.
const xAOD::TrackParticle * trackParticle(size_t i) const
Get the Nth track's pointer.
float fitchi2() const
accessor method: chi2 from vertex fit
float lxy() const
accessor method: lxy
float lxyError() const
accessor method: lxy uncertainty
float mass() const
accessor method: mass
bool hasObjectLink(const std::string &name, const CLID clid=CLID_NULL) const
Check if a link to an object with a given name and type exists. CLID_NULL to not check type.
ElementLink< CONTAINER > objectLink(const std::string &name) const
Get the link with the requested name.
HLT::Identifier createLegName(const HLT::Identifier &chainIdentifier, size_t counter)
Generate the HLT::Identifier which corresponds to a specific leg of a given chain.
xAOD::TrigComposite Decision
const std::string & featureString()
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
std::set< DecisionID > DecisionIDContainer
void addDecisionID(DecisionID id, Decision *d)
Appends the decision (given as ID) to the decision object.
TrigBphysContainer_v1 TrigBphysContainer