ATLAS Offline Software
TrigComboHypoTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef TRIGCOMBOHYPO_TRIGCOMBOHYPOTOOL_H
6 #define TRIGCOMBOHYPO_TRIGCOMBOHYPOTOOL_H
7 
8 
9 
11 
13 
16 
19 
20 #include <string>
21 #include <vector>
22 #include <tuple>
23 #include <limits>
24 
35 
36  public:
37  enum ComboHypoVars { UNDEF=-1, DR=0, DPHI, INVM, MT, DETA};
38 
39  TrigComboHypoTool(const std::string& type,
40  const std::string& name,
41  const IInterface* parent);
42 
43  virtual ~TrigComboHypoTool() {};
44  virtual StatusCode initialize() override;
45 
46  private:
47 
48  static constexpr float FLOATDEFAULT = std::numeric_limits<float>::lowest();
49 
51  struct VarInfo {
52  std::string varTag{""};
54  size_t index{0};
55  std::string monToolName{""};
56 
57  bool useMin{false};
59  bool useMax{false};
61 
62  bool legA_is_MET{false};
64  bool legB_is_MET{false};
66  bool legsAreEqual{false};
67 
69  bool validate(std::string& errmsg) const;
71  std::string rangeStr() const {
72  return (useMin ? std::to_string(varMin) + " < " : "") + varTag + (useMax ? " < " + std::to_string(varMax): "");
73  }
74  bool test(float value) const {
75  return (useMin ? value > varMin : true) && (useMax ? value < varMax : true);
76  }
77 
78  };
79 
81  typedef std::tuple<float,float,float> KineInfo;
82  typedef std::vector<Combo::LegDecision> Combination;
83 
86  StatusCode decide(Combo::LegDecisionsMap& passingLegs, const EventContext& /*ctx*/) const final;
87 
89  bool executeAlgStep(const Combination& combination, const VarInfo&, std::vector<float>& values) const;
91  float compute(const std::pair<KineInfo,KineInfo>& kinepair, ComboHypoVars var) const;
92 
96  bool fillLegDecisions_sameLeg(std::pair<Combo::LegDecision,Combo::LegDecision>& legpair, const Combination& combination, uint32_t leg) const;
97  bool fillLegDecisions_diffLeg(std::pair<Combo::LegDecision,Combo::LegDecision>& legpair, const Combination& combination, uint32_t legA, uint32_t legB) const;
98  bool fillPairKinematics(std::pair<KineInfo,KineInfo>& kinepair, const Combination& combination, const VarInfo& varInfo) const;
99  bool fillKineInfo(KineInfo& kinematics, Combo::LegDecision decision, bool isMET) const;
100 
102  // flags
103  Gaudi::Property<std::vector<std::string>> m_varTag_vec {this, "Variables" , {""}, "Variables to cut on"};
104  Gaudi::Property<std::vector<bool> > m_useMin_vec {this, "UseMinVec" , {false}, "Array with the apply_min_cut setting"};
105  Gaudi::Property<std::vector<bool> > m_useMax_vec {this, "UseMaxVec" , {false}, "Array with the apply_max_cut setting"};
106 
107  //legs
108  Gaudi::Property<std::vector<uint32_t>> m_legA_vec {this, "LegAVec" , {0}, "Array with the first Leg ID"};
109  Gaudi::Property<std::vector<uint32_t>> m_legB_vec {this, "LegBVec" , {0}, "Array with the second Leg ID"};
110  Gaudi::Property<std::vector< bool >> m_isLegA_MET_vec {this, "IsLegA_METVec", {false}, "Array with the first Leg MET identifier"};
111  Gaudi::Property<std::vector< bool >> m_isLegB_MET_vec {this, "IsLegB_METVec", {false}, "Array with the second Leg MET identifier"};
112  Gaudi::Property<bool> m_skipLegCheck {this, "SkipLegCheck" , {false}, "Ignore leg IDs for chains with only one leg"};
113 
114  // cuts
115  Gaudi::Property<std::vector<float>> m_varMin_vec {this, "LowerCutVec", {FLOATDEFAULT}, "Array with the lower cut for legs pair"};
116  Gaudi::Property<std::vector<float>> m_varMax_vec {this, "UpperCutVec", {FLOATDEFAULT}, "Array with the upper cut for legs pair"};
117 
118  // monitoring
119  ToolHandleArray<GenericMonitoringTool> m_monTool_vec {this, "MonTools", {}, "Monitoring tools" };
120 
122  std::vector<VarInfo> m_varInfo_vec;
123 
124 }; // TRIGCOMBOHYPO_TRIGCOMBOHYPOTOOL_H
125 #endif
126 
127 
128 
TrigComboHypoTool::m_legB_vec
Gaudi::Property< std::vector< uint32_t > > m_legB_vec
Definition: TrigComboHypoTool.h:109
TrigComboHypoTool::VarInfo
Organise info per var selection in a struct.
Definition: TrigComboHypoTool.h:51
beamspotnt.var
var
Definition: bin/beamspotnt.py:1393
TrigComboHypoTool::m_monTool_vec
ToolHandleArray< GenericMonitoringTool > m_monTool_vec
Definition: TrigComboHypoTool.h:119
TrigComboHypoTool::m_varMax_vec
Gaudi::Property< std::vector< float > > m_varMax_vec
Definition: TrigComboHypoTool.h:116
TrigComboHypoTool::VarInfo::test
bool test(float value) const
Definition: TrigComboHypoTool.h:74
TrigComboHypoTool::UNDEF
@ UNDEF
Definition: TrigComboHypoTool.h:37
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TrigComboHypoTool::initialize
virtual StatusCode initialize() override
Definition: TrigComboHypoTool.cxx:62
TrigComboHypoTool::fillPairKinematics
bool fillPairKinematics(std::pair< KineInfo, KineInfo > &kinepair, const Combination &combination, const VarInfo &varInfo) const
Definition: TrigComboHypoTool.cxx:445
index
Definition: index.py:1
TrigComboHypoTool::~TrigComboHypoTool
virtual ~TrigComboHypoTool()
Definition: TrigComboHypoTool.h:43
TrigComboHypoTool::decide
StatusCode decide(Combo::LegDecisionsMap &passingLegs, const EventContext &) const final
Override the ComboHypoToolBase::decide in order to optimise combination generation This is to avoid e...
Definition: TrigComboHypoTool.cxx:129
TrigComboHypoTool::MT
@ MT
Definition: TrigComboHypoTool.h:37
TrigComboHypoTool::DPHI
@ DPHI
Definition: TrigComboHypoTool.h:37
TrigComboHypoTool::m_isLegB_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegB_MET_vec
Definition: TrigComboHypoTool.h:111
TrigComboHypoTool
TrigComboHypoTool is a ComboHypoTool that calculates topological quantities between two particles and...
Definition: TrigComboHypoTool.h:34
athena.value
value
Definition: athena.py:124
TrigComboHypoTool::m_varTag_vec
Gaudi::Property< std::vector< std::string > > m_varTag_vec
Gaudi configuration hooks.
Definition: TrigComboHypoTool.h:103
TrigComboHypoTool::VarInfo::monToolName
std::string monToolName
Definition: TrigComboHypoTool.h:55
ComboHypoToolBase
Base class for tools which cut on properties of multi-object or multi-leg chains. User should derive ...
Definition: ComboHypoToolBase.h:26
Combo::LegDecisionsMap
std::map< TrigCompositeUtils::DecisionID, std::vector< ElementLink< TrigCompositeUtils::DecisionContainer > > > LegDecisionsMap
LegDecisionsMap For a given chain leg key, this map holds all Decision Objects which are active on th...
Definition: IComboHypoTool.h:28
MuonR4::to_string
std::string to_string(const SectorProjector proj)
Definition: MsTrackSeeder.cxx:66
TrigComboHypoTool::VarInfo::legB
uint32_t legB
Definition: TrigComboHypoTool.h:65
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
TrigComboHypoTool::ComboHypoVars
ComboHypoVars
Definition: TrigComboHypoTool.h:37
TrigComboHypoTool::INVM
@ INVM
Definition: TrigComboHypoTool.h:37
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:808
TrigComboHypoTool::VarInfo::legB_is_MET
bool legB_is_MET
Definition: TrigComboHypoTool.h:64
TrigComboHypoTool::Combination
std::vector< Combo::LegDecision > Combination
Definition: TrigComboHypoTool.h:82
TrigCompositeUtils.h
TrigComboHypoTool::VarInfo::varMax
float varMax
Definition: TrigComboHypoTool.h:60
GenericMonitoringTool.h
TrigComboHypoTool::fillKineInfo
bool fillKineInfo(KineInfo &kinematics, Combo::LegDecision decision, bool isMET) const
Definition: TrigComboHypoTool.cxx:470
TrigComboHypoTool::VarInfo::legA
uint32_t legA
Definition: TrigComboHypoTool.h:63
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:392
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
IParticleContainer.h
TrigComboHypoTool::m_isLegA_MET_vec
Gaudi::Property< std::vector< bool > > m_isLegA_MET_vec
Definition: TrigComboHypoTool.h:110
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TrigComboHypoTool::FLOATDEFAULT
static constexpr float FLOATDEFAULT
Definition: TrigComboHypoTool.h:48
compute_lumi.leg
leg
Definition: compute_lumi.py:95
TrigComboHypoTool::executeAlgStep
bool executeAlgStep(const Combination &combination, const VarInfo &, std::vector< float > &values) const
Implementation of selection on individual variables.
Definition: TrigComboHypoTool.cxx:349
TrigComboHypoTool::TrigComboHypoTool
TrigComboHypoTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TrigComboHypoTool.cxx:34
TrigComboHypoTool::KineInfo
std::tuple< float, float, float > KineInfo
Typedef for convenience, will contain eta/phi/pt info.
Definition: TrigComboHypoTool.h:81
TrigComboHypoTool::DR
@ DR
Definition: TrigComboHypoTool.h:37
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
TrigComboHypoTool::m_varInfo_vec
std::vector< VarInfo > m_varInfo_vec
Internal variables for more efficient config lookup.
Definition: TrigComboHypoTool.h:122
ComboHypoToolBase.h
TrigComboHypoTool::compute
float compute(const std::pair< KineInfo, KineInfo > &kinepair, ComboHypoVars var) const
Computation of the variables from the specified kinematics.
Definition: TrigComboHypoTool.cxx:498
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TrigComboHypoTool::VarInfo::rangeStr
std::string rangeStr() const
Generate range string for printing.
Definition: TrigComboHypoTool.h:71
TrigComboHypoTool::m_useMax_vec
Gaudi::Property< std::vector< bool > > m_useMax_vec
Definition: TrigComboHypoTool.h:105
TrigComboHypoTool::VarInfo::varMin
float varMin
Definition: TrigComboHypoTool.h:58
TrigComboHypoTool::m_varMin_vec
Gaudi::Property< std::vector< float > > m_varMin_vec
Definition: TrigComboHypoTool.h:115
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:417
TrigComboHypoTool::VarInfo::varTag
std::string varTag
Definition: TrigComboHypoTool.h:52
HLTIdentifier.h
TrigComboHypoTool::VarInfo::legA_is_MET
bool legA_is_MET
Definition: TrigComboHypoTool.h:62
TrigComboHypoTool::VarInfo::legsAreEqual
bool legsAreEqual
Definition: TrigComboHypoTool.h:66
TrigComboHypoTool::VarInfo::useMax
bool useMax
Definition: TrigComboHypoTool.h:59
TrigComboHypoTool::m_skipLegCheck
Gaudi::Property< bool > m_skipLegCheck
Definition: TrigComboHypoTool.h:112
TrigComboHypoTool::VarInfo::useMin
bool useMin
Definition: TrigComboHypoTool.h:57
TrigComboHypoTool::m_useMin_vec
Gaudi::Property< std::vector< bool > > m_useMin_vec
Definition: TrigComboHypoTool.h:104
TrigComboHypoTool::DETA
@ DETA
Definition: TrigComboHypoTool.h:37
TrigComboHypoTool::VarInfo::var
ComboHypoVars var
Definition: TrigComboHypoTool.h:53
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:41
TrigComboHypoTool::m_legA_vec
Gaudi::Property< std::vector< uint32_t > > m_legA_vec
Definition: TrigComboHypoTool.h:108