ATLAS Offline Software
TrigComboHypoTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TrigComboHypoTool.h"
6 #include "GaudiKernel/SystemOfUnits.h"
7 #include <Math/Vector4D.h> // for LorentzVector
8 #include <Math/Vector4Dfwd.h> // PtEtaPhiM typedef
9 #include <Math/Vector2D.h> // for DisplacementVector
10 #include <Math/Vector2Dfwd.h> // Polar2DVectorF typedef
11 
14 
15 #include <vector>
16 #include <algorithm>
17 #include <cmath>
18 
19 constexpr float invGeV = 1. / Gaudi::Units::GeV;
20 
21 using namespace TrigCompositeUtils;
22 
23 // Translate strings into enum values
24 const std::map<std::string, TrigComboHypoTool::ComboHypoVars> VarMap = {
25  {"dR", TrigComboHypoTool::ComboHypoVars::DR},
26  {"invm", TrigComboHypoTool::ComboHypoVars::INVM},
27  {"dphi", TrigComboHypoTool::ComboHypoVars::DPHI},
29  {"deta", TrigComboHypoTool::ComboHypoVars::DETA}
30 };
31 
33  const std::string& name,
34  const IInterface* parent)
36 {}
37 
38 
39 bool TrigComboHypoTool::VarInfo::validate(std::string& errmsg) const {
40  if (legA==0){
41  errmsg = "legA ID not set!";
42  return false;
43  }
44  if (legB==0){
45  errmsg="legB ID not set!";
46  return false;
47  }
48  if ((!useMin) && (!useMax)){
49  errmsg="Trying to configure the Tool without setting at least one of UseMin or UseMax!";
50  return false;
51  }
52  if (legA==legB && (legA_is_MET || legB_is_MET)) {
53  errmsg = "Cannot specify the same MET leg for both sides!";
54  return false;
55  }
56  return true;
57 }
58 
59 
61 {
62  ATH_MSG_DEBUG("Variable = " << m_varTag_vec );
63  ATH_MSG_DEBUG("UseCut min = " << m_useMin_vec );
64  ATH_MSG_DEBUG("UseCut max = " << m_useMax_vec );
65  ATH_MSG_DEBUG("varCut min = " << m_varMin_vec );
66  ATH_MSG_DEBUG("varCut max = " << m_varMax_vec );
67  ATH_MSG_DEBUG("LegA = " << m_legA_vec );
68  ATH_MSG_DEBUG("LegB = " << m_legB_vec );
69 
70  ATH_CHECK( m_monTool_vec.retrieve() );
71 
72  if (m_legA_vec.size() != m_legB_vec.size()) {
73  ATH_MSG_ERROR("Trying to configure the Tool with legA and legB vectors of different size!");
74  return StatusCode::FAILURE;
75  }
76  if (m_useMin_vec.size() != m_useMax_vec.size()) {
77  ATH_MSG_ERROR("Trying to configure the Tool with UseMin and UseMax vectors of different size!");
78  return StatusCode::FAILURE;
79  }
80  if (m_legA_vec.size() != m_useMax_vec.size()) {
81  ATH_MSG_ERROR("Trying to configure the Tool with legA/B and UseMax/Min vectors of different size!");
82  return StatusCode::FAILURE;
83  }
84  if (m_varTag_vec.size() != m_useMax_vec.size()) {
85  ATH_MSG_ERROR("Trying to configure the Tool with varTag and UseMax/Min(LegA/B) vectors of different size!");
86  return StatusCode::FAILURE;
87  }
88 
89  for (size_t i=0; i<m_varTag_vec.size(); ++i){
90  VarInfo info;
91  info.index = i;
92  if(!m_monTool_vec.empty()) {
93  info.monToolName = m_monTool_vec[i].name();
94  }
95  if (VarMap.find(m_varTag_vec[i]) == VarMap.end()){
96  ATH_MSG_ERROR("The variable is not present in the ComboHypoVars list");
97  return StatusCode::FAILURE;
98  }
99  info.varTag = (m_varTag_vec[i]);
100  info.var = VarMap.at(m_varTag_vec[i]);
101  //
102  info.useMin = m_useMin_vec[i];
103  if(info.useMin) {info.varMin=m_varMin_vec[i];}
104  info.useMax = m_useMax_vec[i];
105  if(info.useMax) {info.varMax=m_varMax_vec[i];}
106  //
107  info.legA = m_legA_vec[i];
108  info.legA_is_MET = m_isLegA_MET_vec[i];
109  info.legB = m_legB_vec[i];
110  info.legB_is_MET = m_isLegB_MET_vec[i];
111  info.legsAreEqual = info.legA==info.legB;
112 
113  std::string validmsg{""};
114  if(!info.validate(validmsg)) {
115  ATH_MSG_ERROR(validmsg);
116  return StatusCode::FAILURE;
117  }
118 
119  m_varInfo_vec.push_back(info);
120  }
121  ATH_MSG_DEBUG("Initialization completed successfully");
122 
123  return StatusCode::SUCCESS;
124 }
125 
126 
127 bool TrigComboHypoTool::executeAlg(const Combination& combination) const {
128  //loop over all the hypos
129  bool lastDecision(true);
130  std::vector<float> values;
131  values.reserve(m_varInfo_vec.size());
132 
133  for (auto varInfo = m_varInfo_vec.cbegin(); varInfo!=m_varInfo_vec.cend() && lastDecision; ++varInfo){
134  lastDecision = executeAlgStep(combination, *varInfo, values);
135  }
136 
137  // Monitoring of variables for only accepted events
138  if(lastDecision && !m_monTool_vec.empty()) {
139  for (auto varInfo = m_varInfo_vec.cbegin(); varInfo!=m_varInfo_vec.cend(); ++varInfo){
140  float value = values[varInfo->index];
141  auto varOfAccepted = Monitored::Scalar(m_varTag_vec[varInfo->index]+"OfAccepted", value );//varInfo->monToolName+"OfAccepted", value );
142  auto monitorIt = Monitored::Group (m_monTool_vec[varInfo->index], varOfAccepted);
143  ATH_MSG_DEBUG( varInfo->varTag << " = " << value << " is in range " << varInfo->rangeStr() << ".");
144  ATH_MSG_DEBUG("m_varTag_vec = "<< m_varTag_vec<<", values = "<<values << ", valIndex = "<< varInfo->index <<", monToolName = " << varInfo->monToolName << ", monToolVec = "<< m_monTool_vec);
145  }
146  }
147  return lastDecision;
148 }
149 
150 
151 bool TrigComboHypoTool::executeAlgStep(const Combination& combination, const VarInfo& varInfo, std::vector<float> &vals) const {
152  ATH_MSG_DEBUG("Executing selection " << varInfo.index << " of " << m_varInfo_vec.size() << ": " << varInfo.rangeStr());
153 
154  std::pair<KineInfo,KineInfo> kinepair;
155  if(!fillPairKinematics(kinepair, combination, varInfo)) {
156  ATH_MSG_ERROR("Failed to extract kinematics of feature pair!");
157  return false;
158  }
159 
160  if(msgLvl(MSG::DEBUG)) {
161  float eta_check, phi_check, pt_check;
162  std::tie(eta_check,phi_check,pt_check) = kinepair.first;
163  msg() << MSG::DEBUG << "Test filled legA kinematics: pt " << pt_check*invGeV << ", eta " << eta_check << ", phi " << phi_check << endmsg;
164 
165  std::tie(eta_check,phi_check,pt_check) = kinepair.second;
166  msg() << MSG::DEBUG << "Test filled legB kinematics: pt " << pt_check*invGeV << ", eta " << eta_check << ", phi " << phi_check << endmsg;
167  }
168 
169  // apply the cut
170  float value = compute(kinepair,varInfo.var);
171  if(!m_monTool_vec.empty()) {
172  auto varOfProcessed = Monitored::Scalar(m_varTag_vec[varInfo.index]+"OfProcessed" , value );
173  auto monitorIt = Monitored::Group (m_monTool_vec[varInfo.index], varOfProcessed);
174  }
175  vals.push_back(value);
176  bool pass = varInfo.test(value);
177 
178  ATH_MSG_DEBUG("Found a combination with " << value);
179  if(!pass) {
180  ATH_MSG_DEBUG("Combination failed var cut: " << varInfo.varTag << " = " << value << " not in range " << varInfo.rangeStr());
181  }
182  return pass;
183 }
184 
185 
187 bool testLegId(const Combo::LegDecision& d, uint32_t targetleg) {
188  auto combId = HLT::Identifier(d.first);
189  if(!TrigCompositeUtils::isLegId(combId)) return false;
190  return combId.numeric() == targetleg;
191 }
192 
193 
194 bool TrigComboHypoTool::fillLegDecisions_sameLeg(std::pair<Combo::LegDecision,Combo::LegDecision>& legpair, const Combination& combination, uint32_t leg) const {
195  Combination leg_features;
196  if(m_skipLegCheck) {
197  // If there is only one leg, the decision IDs don't have a leg ID
198  std::copy(combination.begin(),combination.end(),std::back_inserter(leg_features));
199  } else {
200  // Extract the features matching the legs
201  // We take all of them, so as to be able to check if there is any ambiguity
202  auto isMyLeg = [&leg](const Combo::LegDecision& d) { return testLegId(d,leg); };
203  std::copy_if(combination.begin(),combination.end(),std::back_inserter(leg_features),isMyLeg);
204  }
205 
206  if (leg_features.size()==2) {
207  legpair.first = leg_features[0];
208  legpair.second = leg_features[1];
209  } else {
210  ATH_MSG_ERROR(leg_features.size() << " Decision Objects supplied on leg " << leg
211  << ", must be 2 for same-leg topo selection!");
212  return false;
213  }
214 
215  return true;
216 }
217 
218 
219 bool TrigComboHypoTool::fillLegDecisions_diffLeg(std::pair<Combo::LegDecision,Combo::LegDecision>& legpair, const Combination& combination, uint32_t legA, uint32_t legB) const {
220  // Extract the features matching the legs
221  // We take all of them, so as to be able to check if there is any ambiguity
222  auto isLegA = [&legA](const Combo::LegDecision& d) { return testLegId(d,legA); };
223  auto isLegB = [&legB](const Combo::LegDecision& d) { return testLegId(d,legB); };
224  Combination legA_features, legB_features;
225 
226  std::copy_if(combination.begin(),combination.end(),std::back_inserter(legA_features),isLegA);
227  if(legA_features.size()!=1) {
228  ATH_MSG_ERROR(legA_features.size() << " Decision Objects supplied on leg " << legA
229  << ", must be 1 for different-leg topo selection!");
230  return false;
231  }
232 
233  std::copy_if(combination.begin(),combination.end(),std::back_inserter(legB_features),isLegB);
234  if (legB_features.size()!=1) {
235  ATH_MSG_ERROR(legB_features.size() << " Decision Objects supplied on leg " << legB
236  << ", must be 1 for different-leg topo selection!");
237  return false;
238  }
239 
240  legpair.first = legA_features[0];
241  legpair.second = legB_features[0];
242 
243  return true;
244 }
245 
246 
247 bool TrigComboHypoTool::fillPairKinematics(std::pair<KineInfo,KineInfo>& kinepair, const Combination& combination, const VarInfo& varInfo) const {
248  ATH_MSG_DEBUG("Decision objects available = "<< combination);
249  // Check that there are enough features
250  size_t nFeatures(combination.size());
251  if (nFeatures < 2){
252  ATH_MSG_ERROR("Number of Decision Objects passed is less than 2! Sum over decision objects on all legs = " << combination.size() );
253  return false;
254  }
255  std::pair<Combo::LegDecision,Combo::LegDecision> legpair;
256  if (varInfo.legsAreEqual) {fillLegDecisions_sameLeg(legpair,combination,varInfo.legA);}
257  else {fillLegDecisions_diffLeg(legpair,combination,varInfo.legA,varInfo.legB);}
258  ATH_MSG_DEBUG("Fill leg A kinematics");
259  if(!fillKineInfo(kinepair.first,legpair.first,varInfo.legA_is_MET)) {
260  ATH_MSG_ERROR("Failed to extract requisite kinematic info from leg " << varInfo.legA << "!");
261  return false;
262  }
263  ATH_MSG_DEBUG("Fill leg B kinematics");
264  if(!fillKineInfo(kinepair.second,legpair.second,varInfo.legB_is_MET)) {
265  ATH_MSG_ERROR("Failed to extract requisite kinematic info from leg " << varInfo.legB << "!");
266  return false;
267  }
268  return true;
269  }
270 
271 
273  float eta, phi, pt;
274  if (isMET) {
275  auto pLink = TrigCompositeUtils::findLink<xAOD::TrigMissingETContainer>( *decision.second, featureString() ).link;
276  if (!pLink.isValid()){
277  ATH_MSG_ERROR("link for MET not valid");
278  return false;
279  }
280  ROOT::Math::XYVectorF metv((*pLink)->ex(),(*pLink)->ey());
281  eta = FLOATDEFAULT;
282  phi = metv.phi();
283  pt = metv.r();
284  } else {
285  auto pLink = TrigCompositeUtils::findLink<xAOD::IParticleContainer>( *decision.second, featureString() ).link;
286  if (!pLink.isValid()){
287  ATH_MSG_ERROR("link for IParticle not valid");
288  return false;
289  }
290  eta = (*pLink)->p4().Eta();
291  phi = (*pLink)->p4().Phi();
292  pt = (*pLink)->p4().Pt();
293  }
294  ATH_MSG_DEBUG("Filled kinematics with pt " << pt*invGeV << ", eta " << eta << ", phi " << phi);
295  kinematics = std::make_tuple(eta,phi,pt);
296  return true;
297 }
298 
299 
300 float TrigComboHypoTool::compute(const std::pair<KineInfo,KineInfo>& kinepair, ComboHypoVars var) const {
301  const auto& [legA_kine,legB_kine] = kinepair;
302  const auto& [eta1,phi1,pt1] = legA_kine;
303  const auto& [eta2,phi2,pt2] = legB_kine;
304 
305  ATH_MSG_DEBUG("Leg A has pt " << pt1*invGeV << ", eta " << eta1 << ", phi " << phi1);
306  ATH_MSG_DEBUG("Leg B has pt " << pt2*invGeV << ", eta " << eta2 << ", phi " << phi2);
307 
308  float value(0);
309  switch(var) {
310  case ComboHypoVars::DR:
311  {
312  value = xAOD::P4Helpers::deltaR(eta1,phi1,eta2,phi2);
313  break;
314  }
315  case ComboHypoVars::DPHI:
316  {
317  value = std::fabs(xAOD::P4Helpers::deltaPhi(phi1,phi2));
318  break;
319  }
320  case ComboHypoVars::INVM:
321  {
322  ROOT::Math::PtEtaPhiMVector p1(pt1,eta1,phi1,0.), p2(pt2,eta2,phi2,0.);
323  value = (p1+p2).M()*invGeV; // Convert to GeV
324  break;
325  }
326  case ComboHypoVars::MT:
327  {
328  //Transverse mass defined for semi-visible decays in hadron colliders. See PDG 49.6, section on kinematics
329  value = std::sqrt(2*pt1*pt2*(1-std::cos(xAOD::P4Helpers::deltaPhi(phi1,phi2) ) ) )*invGeV; // Convert to GeV
330  break;
331  }
332  case ComboHypoVars::DETA:
333  {
334  value = std::fabs(eta2-eta1);
335  break;
336  }
337  default:
338  {
339  ATH_MSG_ERROR("Undefined variable requested -- should never happen!");
340  }
341  }
342  return value;
343 }
grepfile.info
info
Definition: grepfile.py:38
TrigComboHypoTool::m_legB_vec
Gaudi::Property< std::vector< uint32_t > > m_legB_vec
Definition: TrigComboHypoTool.h:108
TrigComboHypoTool::VarInfo
Organise info per var selection in a struct.
Definition: TrigComboHypoTool.h:50
beamspotnt.var
var
Definition: bin/beamspotnt.py:1394
TrigComboHypoTool::m_monTool_vec
ToolHandleArray< GenericMonitoringTool > m_monTool_vec
Definition: TrigComboHypoTool.h:118
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
TrigDefs::Group
Group
Properties of a chain group.
Definition: GroupProperties.h:13
TrigComboHypoTool::m_varMax_vec
Gaudi::Property< std::vector< float > > m_varMax_vec
Definition: TrigComboHypoTool.h:115
TrigComboHypoTool::VarInfo::test
bool test(float value) const
Definition: TrigComboHypoTool.h:73
ParticleGun_SamplingFraction.eta2
eta2
Definition: ParticleGun_SamplingFraction.py:96
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TrigComboHypoTool::initialize
virtual StatusCode initialize() override
Definition: TrigComboHypoTool.cxx:60
TrigComboHypoTool::fillPairKinematics
bool fillPairKinematics(std::pair< KineInfo, KineInfo > &kinepair, const Combination &combination, const VarInfo &varInfo) const
Definition: TrigComboHypoTool.cxx:247
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
xAODP4Helpers.h
hist_file_dump.d
d
Definition: hist_file_dump.py:137
invGeV
constexpr float invGeV
Definition: TrigComboHypoTool.cxx:19
TrigComboHypoTool::VarInfo::index
size_t index
Definition: TrigComboHypoTool.h:53
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
TrigComboHypoTool::m_isLegB_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegB_MET_vec
Definition: TrigComboHypoTool.h:110
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: xAODP4Helpers.h:69
athena.value
value
Definition: athena.py:124
xAOD::eta1
setEt setPhi setE277 setWeta2 eta1
Definition: TrigEMCluster_v1.cxx:41
TrigComboHypoTool::m_varTag_vec
Gaudi::Property< std::vector< std::string > > m_varTag_vec
Gaudi configuration hooks.
Definition: TrigComboHypoTool.h:102
ComboHypoToolBase
Base class for tools which cut on properties of multi-object or multi-leg chains. User should derive ...
Definition: ComboHypoToolBase.h:26
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
TrigComboHypoTool::executeAlg
virtual bool executeAlg(const Combination &combination) const override
Top-level function to make chain-level decision This applies the AND of all configured var selections...
Definition: TrigComboHypoTool.cxx:127
TrigComboHypoTool::VarInfo::legB
uint32_t legB
Definition: TrigComboHypoTool.h:64
TrigComboHypoTool::ComboHypoVars
ComboHypoVars
Definition: TrigComboHypoTool.h:36
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:805
TrigComboHypoTool::VarInfo::legB_is_MET
bool legB_is_MET
Definition: TrigComboHypoTool.h:63
LVL1::MT
LVL1::L1CaloFcal23Cells2RxMappingTool::mapType MT
Definition: L1CaloFcal23Cells2RxMappingTool.cxx:14
TrigComboHypoTool::Combination
std::vector< Combo::LegDecision > Combination
Definition: TrigComboHypoTool.h:81
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigComboHypoTool::fillKineInfo
bool fillKineInfo(KineInfo &kinematics, Combo::LegDecision decision, bool isMET) const
Definition: TrigComboHypoTool.cxx:272
TrigComboHypoTool::VarInfo::legA
uint32_t legA
Definition: TrigComboHypoTool.h:62
TrigComboHypoTool::fillLegDecisions_sameLeg
bool fillLegDecisions_sameLeg(std::pair< Combo::LegDecision, Combo::LegDecision > &legpair, const Combination &combination, uint32_t leg) const
Helpers to extract kinematics from the specified legs of the chain Specialised for two cases – exactl...
Definition: TrigComboHypoTool.cxx:194
TrigComboHypoTool.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
xAOD::P4Helpers::deltaR
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
Definition: xAODP4Helpers.h:150
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigComboHypoTool::m_isLegA_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegA_MET_vec
Definition: TrigComboHypoTool.h:109
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TrigComboHypoTool::FLOATDEFAULT
static constexpr float FLOATDEFAULT
Definition: TrigComboHypoTool.h:47
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
compute_lumi.leg
leg
Definition: compute_lumi.py:95
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrigMissingETContainer.h
TrigComboHypoTool::executeAlgStep
bool executeAlgStep(const Combination &combination, const VarInfo &, std::vector< float > &values) const
Implementation of selection on individual variables.
Definition: TrigComboHypoTool.cxx:151
TrigComboHypoTool::TrigComboHypoTool
TrigComboHypoTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TrigComboHypoTool.cxx:32
TrigComboHypoTool::KineInfo
std::tuple< float, float, float > KineInfo
Typedef for convenience, will contain eta/phi/pt info.
Definition: TrigComboHypoTool.h:80
HLT::Identifier
Definition: TrigCompositeUtils/TrigCompositeUtils/HLTIdentifier.h:20
TrigComboHypoTool::m_varInfo_vec
std::vector< VarInfo > m_varInfo_vec
Internal variables for more efficient config lookup.
Definition: TrigComboHypoTool.h:121
TrigCompositeUtils::featureString
const std::string & featureString()
Definition: TrigCompositeUtilsRoot.cxx:884
TrigComboHypoTool::compute
float compute(const std::pair< KineInfo, KineInfo > &kinepair, ComboHypoVars var) const
Computation of the variables from the specified kinematics.
Definition: TrigComboHypoTool.cxx:300
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
TrigComboHypoTool::VarInfo::rangeStr
std::string rangeStr() const
Generate range string for printing.
Definition: TrigComboHypoTool.h:70
TrigComboHypoTool::m_useMax_vec
Gaudi::Property< std::vector< bool > > m_useMax_vec
Definition: TrigComboHypoTool.h:104
TrigCompositeUtils::isLegId
bool isLegId(const HLT::Identifier &legIdentifier)
Recognise whether the chain ID is a leg ID.
Definition: TrigCompositeUtilsRoot.cxx:204
TrigComboHypoTool::m_varMin_vec
Gaudi::Property< std::vector< float > > m_varMin_vec
Definition: TrigComboHypoTool.h:114
TrigComboHypoTool::fillLegDecisions_diffLeg
bool fillLegDecisions_diffLeg(std::pair< Combo::LegDecision, Combo::LegDecision > &legpair, const Combination &combination, uint32_t legA, uint32_t legB) const
Definition: TrigComboHypoTool.cxx:219
TrigComboHypoTool::VarInfo::varTag
std::string varTag
Definition: TrigComboHypoTool.h:51
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
TrigComboHypoTool::VarInfo::legA_is_MET
bool legA_is_MET
Definition: TrigComboHypoTool.h:61
TrigComboHypoTool::VarInfo::legsAreEqual
bool legsAreEqual
Definition: TrigComboHypoTool.h:65
TrigComboHypoTool::VarInfo::useMax
bool useMax
Definition: TrigComboHypoTool.h:58
TrigCompositeUtils
Definition: Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:19
TrigComboHypoTool::m_skipLegCheck
Gaudi::Property< bool > m_skipLegCheck
Definition: TrigComboHypoTool.h:111
TrigComboHypoTool::VarInfo::useMin
bool useMin
Definition: TrigComboHypoTool.h:56
calibdata.copy
bool copy
Definition: calibdata.py:27
VarMap
const std::map< std::string, TrigComboHypoTool::ComboHypoVars > VarMap
Definition: TrigComboHypoTool.cxx:24
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
testLegId
bool testLegId(const Combo::LegDecision &d, uint32_t targetleg)
Test function to compare decision ID with the legs to be used in var computation.
Definition: TrigComboHypoTool.cxx:187
TrigComboHypoTool::m_useMin_vec
Gaudi::Property< std::vector< bool > > m_useMin_vec
Definition: TrigComboHypoTool.h:103
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
TrigComboHypoTool::VarInfo::var
ComboHypoVars var
Definition: TrigComboHypoTool.h:52
Combo::LegDecision
std::pair< TrigCompositeUtils::DecisionID, ElementLink< TrigCompositeUtils::DecisionContainer > > LegDecision
LegDecision keeps a given Decision Object associated with a specific leg when being used inside a sin...
Definition: IComboHypoTool.h:33
TrigComboHypoTool::VarInfo::validate
bool validate(std::string &errmsg) const
Check consistency of single var config.
Definition: TrigComboHypoTool.cxx:39
PlotCalibFromCool.vals
vals
Definition: PlotCalibFromCool.py:474
TrigComboHypoTool::m_legA_vec
Gaudi::Property< std::vector< uint32_t > > m_legA_vec
Definition: TrigComboHypoTool.h:107