ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTauInfo Class Reference

#include <TrigTauInfo.h>

Collaboration diagram for TrigTauInfo:

Public Member Functions

 TrigTauInfo ()
 TrigTauInfo (const std::string &trigger)
 TrigTauInfo (const std::string &trigger, const std::map< std::string, float > &L1Phase1_thresholds)
 TrigTauInfo (const std::string &trigger, const std::map< std::string, float > &L1Phase1_thresholds, const std::map< std::string, uint64_t > &L1Phase1_threshold_patterns)
 TrigTauInfo (const std::string &trigger, const std::map< int, int > &L1Phase1ThrMap_eTAU, const std::map< int, int > &L1Phase1ThrMap_jTAU)
const std::string & getTriggerName () const
bool isStreamer () const
float getHLTTauThreshold () const
const std::vector< float > & getHLTTauThresholds () const
const std::string getHLTTauType () const
const std::vector< std::string > & getHLTTauTypes () const
const std::string getHLTTauID () const
const std::vector< std::string > & getHLTTauIDs () const
const std::string & getTriggerL1Name () const
const std::vector< std::string > & getTriggerL1Items () const
const std::string getL1TauItem () const
const std::vector< std::string > & getL1TauItems () const
float getL1TauThreshold () const
const std::vector< float > & getL1TauThresholds () const
const std::string getL1TauType () const
const std::vector< std::string > & getL1TauTypes () const
const std::string getL1TauIsolation () const
const std::vector< std::string > & getL1TauIsolations () const
bool isL1TauIsolated (const size_t idx=0) const
bool areAnyL1TauIsolated () const
int64_t getL1TauThresholdPattern () const
const std::vector< int64_t > & getL1TauThresholdPatterns () const
const std::vector< std::string > & getHLTBoostedDitauName () const
bool isHLTSingleTau () const
bool isHLTDiTau () const
bool isHLTBoostedDiTau () const
bool isHLTTandP () const
bool isL1TauOnly () const
bool isTauStreamer () const
bool hasHLTElectronLeg () const
bool hasHLTMuonLeg () const
bool hasHLTGammaLeg () const
bool hasHLTJetLeg () const
bool hasHLTMETLeg () const
float getHLTElecThreshold () const
const std::vector< float > & getHLTElecThresholds () const
float getHLTMuonThreshold () const
const std::vector< float > & getHLTMuonThresholds () const
float getHLTGammaThreshold () const
const std::vector< float > & getHLTGammaThresholds () const
float getHLTJetThreshold () const
const std::vector< float > & getHLTJetThresholds () const
float getHLTMETThreshold () const
const std::vector< float > & getHLTMETThresholds () const

Private Member Functions

bool is_number (const std::string &s)
void parseTriggerString (bool remove_L1_phase1_thresholds=true)
void parseTriggerString (const std::map< std::string, float > &L1Phase1_thresholds)
void parseTriggerString (const std::map< std::string, float > &L1Phase1_thresholds, const std::map< std::string, uint64_t > &L1Phase1_threshold_patterns)
void parseTriggerString (const std::map< int, int > &L1Phase1ThrMap_eTAU, const std::map< int, int > &L1Phase1ThrMap_jTAU)

Private Attributes

std::string m_trigger
bool m_isStreamer = false
std::vector< float > m_HLTThr
std::vector< std::string > m_HLTTauTypes
std::vector< std::string > m_HLTTauIDs
std::string m_L1Item
std::vector< std::string > m_L1Items
std::vector< float > m_tauL1Thr
std::vector< std::string > m_tauL1Items
std::vector< std::string > m_tauL1Type
std::vector< std::string > m_tauL1Iso
std::vector< int64_t > m_tauL1ThresholdPattern
std::vector< float > m_HLTElecThr
std::vector< float > m_HLTMuonThr
std::vector< float > m_HLTGammaThr
std::vector< float > m_HLTJetThr
std::vector< float > m_HLTMETThr
std::vector< std::string > m_HLTBoostedDitauName

Detailed Description

Definition at line 15 of file TrigTauInfo.h.

Constructor & Destructor Documentation

◆ TrigTauInfo() [1/5]

TrigTauInfo::TrigTauInfo ( )
inline

Definition at line 17 of file TrigTauInfo.h.

17{} // Required for the dictionary

◆ TrigTauInfo() [2/5]

TrigTauInfo::TrigTauInfo ( const std::string & trigger)

Definition at line 10 of file TrigTauInfo.cxx.

11 : m_trigger{trigger}
12{
14}
std::string m_trigger
Definition TrigTauInfo.h:76
void parseTriggerString(bool remove_L1_phase1_thresholds=true)

◆ TrigTauInfo() [3/5]

TrigTauInfo::TrigTauInfo ( const std::string & trigger,
const std::map< std::string, float > & L1Phase1_thresholds )

Definition at line 16 of file TrigTauInfo.cxx.

17 : m_trigger{trigger}
18{
19 parseTriggerString(L1Phase1_thresholds);
20}

◆ TrigTauInfo() [4/5]

TrigTauInfo::TrigTauInfo ( const std::string & trigger,
const std::map< std::string, float > & L1Phase1_thresholds,
const std::map< std::string, uint64_t > & L1Phase1_threshold_patterns )

Definition at line 22 of file TrigTauInfo.cxx.

23 : m_trigger{trigger}
24{
25 parseTriggerString(L1Phase1_thresholds, L1Phase1_threshold_patterns);
26}

◆ TrigTauInfo() [5/5]

TrigTauInfo::TrigTauInfo ( const std::string & trigger,
const std::map< int, int > & L1Phase1ThrMap_eTAU,
const std::map< int, int > & L1Phase1ThrMap_jTAU )

Definition at line 28 of file TrigTauInfo.cxx.

29 : m_trigger{trigger}
30{
31 parseTriggerString(L1Phase1ThrMap_eTAU, L1Phase1ThrMap_jTAU);
32}

Member Function Documentation

◆ areAnyL1TauIsolated()

bool TrigTauInfo::areAnyL1TauIsolated ( ) const
inline

Definition at line 44 of file TrigTauInfo.h.

44{ for(const std::string& iso : m_tauL1Iso) { if(iso.size()) return true; }; return false; } // Returns true any of the L1 items are isolated
std::vector< std::string > m_tauL1Iso
Definition TrigTauInfo.h:87

◆ getHLTBoostedDitauName()

const std::vector< std::string > & TrigTauInfo::getHLTBoostedDitauName ( ) const
inline

Definition at line 47 of file TrigTauInfo.h.

47{ return m_HLTBoostedDitauName; }
std::vector< std::string > m_HLTBoostedDitauName
Definition TrigTauInfo.h:96

◆ getHLTElecThreshold()

float TrigTauInfo::getHLTElecThreshold ( ) const
inline

Definition at line 64 of file TrigTauInfo.h.

64{ return m_HLTElecThr.size() ? m_HLTElecThr[0] : -1; } // Returns the main leg threshold
std::vector< float > m_HLTElecThr
Definition TrigTauInfo.h:90

◆ getHLTElecThresholds()

const std::vector< float > & TrigTauInfo::getHLTElecThresholds ( ) const
inline

Definition at line 65 of file TrigTauInfo.h.

65{ return m_HLTElecThr; }

◆ getHLTGammaThreshold()

float TrigTauInfo::getHLTGammaThreshold ( ) const
inline

Definition at line 68 of file TrigTauInfo.h.

68{ return m_HLTGammaThr.size() ? m_HLTGammaThr[0] : -1; } // Returns the main leg threshold
std::vector< float > m_HLTGammaThr
Definition TrigTauInfo.h:92

◆ getHLTGammaThresholds()

const std::vector< float > & TrigTauInfo::getHLTGammaThresholds ( ) const
inline

Definition at line 69 of file TrigTauInfo.h.

69{ return m_HLTGammaThr; }

◆ getHLTJetThreshold()

float TrigTauInfo::getHLTJetThreshold ( ) const
inline

Definition at line 70 of file TrigTauInfo.h.

70{ return m_HLTJetThr.size() ? m_HLTJetThr[0] : -1; } // Returns the main leg threshold
std::vector< float > m_HLTJetThr
Definition TrigTauInfo.h:93

◆ getHLTJetThresholds()

const std::vector< float > & TrigTauInfo::getHLTJetThresholds ( ) const
inline

Definition at line 71 of file TrigTauInfo.h.

71{ return m_HLTJetThr; }

◆ getHLTMETThreshold()

float TrigTauInfo::getHLTMETThreshold ( ) const
inline

Definition at line 72 of file TrigTauInfo.h.

72{ return m_HLTMETThr.size() ? m_HLTMETThr[0] : -1; } // Returns the main leg threshold
std::vector< float > m_HLTMETThr
Definition TrigTauInfo.h:94

◆ getHLTMETThresholds()

const std::vector< float > & TrigTauInfo::getHLTMETThresholds ( ) const
inline

Definition at line 73 of file TrigTauInfo.h.

73{ return m_HLTMETThr; }

◆ getHLTMuonThreshold()

float TrigTauInfo::getHLTMuonThreshold ( ) const
inline

Definition at line 66 of file TrigTauInfo.h.

66{ return m_HLTMuonThr.size() ? m_HLTMuonThr[0] : -1; } // Returns the main leg threshold
std::vector< float > m_HLTMuonThr
Definition TrigTauInfo.h:91

◆ getHLTMuonThresholds()

const std::vector< float > & TrigTauInfo::getHLTMuonThresholds ( ) const
inline

Definition at line 67 of file TrigTauInfo.h.

67{ return m_HLTMuonThr; }

◆ getHLTTauID()

const std::string TrigTauInfo::getHLTTauID ( ) const
inline

Definition at line 30 of file TrigTauInfo.h.

30{ return m_HLTTauIDs.size() ? m_HLTTauIDs[0] : ""; } // Returns the main HLT tau leg ID algorithm
std::vector< std::string > m_HLTTauIDs
Definition TrigTauInfo.h:80

◆ getHLTTauIDs()

const std::vector< std::string > & TrigTauInfo::getHLTTauIDs ( ) const
inline

Definition at line 31 of file TrigTauInfo.h.

31{ return m_HLTTauIDs; }

◆ getHLTTauThreshold()

float TrigTauInfo::getHLTTauThreshold ( ) const
inline

Definition at line 26 of file TrigTauInfo.h.

26{ return m_HLTThr.size() ? m_HLTThr[0] : -1; } // Returns the main HLT threshold
std::vector< float > m_HLTThr
Definition TrigTauInfo.h:78

◆ getHLTTauThresholds()

const std::vector< float > & TrigTauInfo::getHLTTauThresholds ( ) const
inline

Definition at line 27 of file TrigTauInfo.h.

27{ return m_HLTThr; }

◆ getHLTTauType()

const std::string TrigTauInfo::getHLTTauType ( ) const
inline

Definition at line 28 of file TrigTauInfo.h.

28{ return m_HLTTauTypes.size() ? m_HLTTauTypes[0] : ""; } // Returns the main HLT tau leg type
std::vector< std::string > m_HLTTauTypes
Definition TrigTauInfo.h:79

◆ getHLTTauTypes()

const std::vector< std::string > & TrigTauInfo::getHLTTauTypes ( ) const
inline

Definition at line 29 of file TrigTauInfo.h.

29{ return m_HLTTauTypes; }

◆ getL1TauIsolation()

const std::string TrigTauInfo::getL1TauIsolation ( ) const
inline

Definition at line 41 of file TrigTauInfo.h.

41{ return m_tauL1Iso.size() ? m_tauL1Iso[0] : ""; } // Returns the main L1 item isolation

◆ getL1TauIsolations()

const std::vector< std::string > & TrigTauInfo::getL1TauIsolations ( ) const
inline

Definition at line 42 of file TrigTauInfo.h.

42{ return m_tauL1Iso; }

◆ getL1TauItem()

const std::string TrigTauInfo::getL1TauItem ( ) const
inline

Definition at line 35 of file TrigTauInfo.h.

35{ return m_tauL1Items.size() ? m_tauL1Items[0] : ""; } // Returns the main L1 tau item
std::vector< std::string > m_tauL1Items
Definition TrigTauInfo.h:85

◆ getL1TauItems()

const std::vector< std::string > & TrigTauInfo::getL1TauItems ( ) const
inline

Definition at line 36 of file TrigTauInfo.h.

36{ return m_tauL1Items; }

◆ getL1TauThreshold()

float TrigTauInfo::getL1TauThreshold ( ) const
inline

Definition at line 37 of file TrigTauInfo.h.

37{ return m_tauL1Thr.size() ? m_tauL1Thr[0] : -1; } // Returns the main L1 item threshold
std::vector< float > m_tauL1Thr
Definition TrigTauInfo.h:84

◆ getL1TauThresholdPattern()

int64_t TrigTauInfo::getL1TauThresholdPattern ( ) const
inline

Definition at line 45 of file TrigTauInfo.h.

45{ return m_tauL1ThresholdPattern.size() ? m_tauL1ThresholdPattern[0] : -1; } // Returns the main L1 item thresholdPattern mask
std::vector< int64_t > m_tauL1ThresholdPattern
Definition TrigTauInfo.h:88

◆ getL1TauThresholdPatterns()

const std::vector< int64_t > & TrigTauInfo::getL1TauThresholdPatterns ( ) const
inline

Definition at line 46 of file TrigTauInfo.h.

◆ getL1TauThresholds()

const std::vector< float > & TrigTauInfo::getL1TauThresholds ( ) const
inline

Definition at line 38 of file TrigTauInfo.h.

38{ return m_tauL1Thr; }

◆ getL1TauType()

const std::string TrigTauInfo::getL1TauType ( ) const
inline

Definition at line 39 of file TrigTauInfo.h.

39{ return m_tauL1Items.size() ? m_tauL1Type[0] : ""; } // Returns the main L1 item type
std::vector< std::string > m_tauL1Type
Definition TrigTauInfo.h:86

◆ getL1TauTypes()

const std::vector< std::string > & TrigTauInfo::getL1TauTypes ( ) const
inline

Definition at line 40 of file TrigTauInfo.h.

40{ return m_tauL1Type; }

◆ getTriggerL1Items()

const std::vector< std::string > & TrigTauInfo::getTriggerL1Items ( ) const
inline

Definition at line 34 of file TrigTauInfo.h.

34{ return m_L1Items; }
std::vector< std::string > m_L1Items
Definition TrigTauInfo.h:83

◆ getTriggerL1Name()

const std::string & TrigTauInfo::getTriggerL1Name ( ) const
inline

Definition at line 33 of file TrigTauInfo.h.

33{ return m_L1Item; }
std::string m_L1Item
Definition TrigTauInfo.h:82

◆ getTriggerName()

const std::string & TrigTauInfo::getTriggerName ( ) const
inline

Definition at line 23 of file TrigTauInfo.h.

23{ return m_trigger; }

◆ hasHLTElectronLeg()

bool TrigTauInfo::hasHLTElectronLeg ( ) const
inline

Definition at line 58 of file TrigTauInfo.h.

58{ return m_HLTElecThr.size() >= 1; }

◆ hasHLTGammaLeg()

bool TrigTauInfo::hasHLTGammaLeg ( ) const
inline

Definition at line 60 of file TrigTauInfo.h.

60{ return m_HLTGammaThr.size() >= 1; }

◆ hasHLTJetLeg()

bool TrigTauInfo::hasHLTJetLeg ( ) const
inline

Definition at line 61 of file TrigTauInfo.h.

61{ return m_HLTJetThr.size() >= 1; }

◆ hasHLTMETLeg()

bool TrigTauInfo::hasHLTMETLeg ( ) const
inline

Definition at line 62 of file TrigTauInfo.h.

62{ return m_HLTMETThr.size() >= 1; }

◆ hasHLTMuonLeg()

bool TrigTauInfo::hasHLTMuonLeg ( ) const
inline

Definition at line 59 of file TrigTauInfo.h.

59{ return m_HLTMuonThr.size() >= 1; }

◆ is_number()

bool TrigTauInfo::is_number ( const std::string & s)
inlineprivate

Definition at line 99 of file TrigTauInfo.h.

99 {
100 return !s.empty() && std::find_if(s.begin(), s.end(), [](unsigned char c) {return !std::isdigit(c);}) == s.end();
101 }

◆ isHLTBoostedDiTau()

bool TrigTauInfo::isHLTBoostedDiTau ( ) const
inline

Definition at line 53 of file TrigTauInfo.h.

53{ return m_HLTBoostedDitauName.size() > 0 && (m_HLTThr.size() + m_HLTElecThr.size() + m_HLTMuonThr.size() + m_HLTGammaThr.size() + m_HLTMETThr.size()) == 0; }

◆ isHLTDiTau()

bool TrigTauInfo::isHLTDiTau ( ) const
inline

Definition at line 52 of file TrigTauInfo.h.

52{ return m_HLTThr.size() > 1 && (m_HLTElecThr.size() + m_HLTMuonThr.size() + m_HLTGammaThr.size() + m_HLTJetThr.size() + m_HLTMETThr.size()) == 0; }

◆ isHLTSingleTau()

bool TrigTauInfo::isHLTSingleTau ( ) const
inline

Definition at line 51 of file TrigTauInfo.h.

51{ return m_HLTThr.size() == 1 && (m_HLTElecThr.size() + m_HLTMuonThr.size() + m_HLTGammaThr.size() + m_HLTJetThr.size() + m_HLTMETThr.size()) == 0; }

◆ isHLTTandP()

bool TrigTauInfo::isHLTTandP ( ) const
inline

Definition at line 54 of file TrigTauInfo.h.

54{ return m_HLTThr.size() == 1 && (m_HLTElecThr.size() + m_HLTMuonThr.size()) == 1 && (m_HLTGammaThr.size() + m_HLTJetThr.size() + m_HLTMETThr.size()) == 0; }

◆ isL1TauIsolated()

bool TrigTauInfo::isL1TauIsolated ( const size_t idx = 0) const
inline

Definition at line 43 of file TrigTauInfo.h.

43{ return idx < m_tauL1Iso.size() ? m_tauL1Iso[idx].size() : false; } // Returns true if the (main by default) L1 item is isolated

◆ isL1TauOnly()

bool TrigTauInfo::isL1TauOnly ( ) const
inline

Definition at line 55 of file TrigTauInfo.h.

55{ return (m_HLTThr.size() + m_HLTElecThr.size() + m_HLTMuonThr.size() + m_HLTGammaThr.size() + m_HLTJetThr.size() + m_HLTMETThr.size()) == 0 && !m_tauL1Items.empty(); }

◆ isStreamer()

bool TrigTauInfo::isStreamer ( ) const
inline

Definition at line 24 of file TrigTauInfo.h.

24{ return m_isStreamer; }
bool m_isStreamer
Definition TrigTauInfo.h:77

◆ isTauStreamer()

bool TrigTauInfo::isTauStreamer ( ) const
inline

Definition at line 56 of file TrigTauInfo.h.

56{ return m_isStreamer && !m_tauL1Items.empty(); }

◆ parseTriggerString() [1/4]

void TrigTauInfo::parseTriggerString ( bool remove_L1_phase1_thresholds = true)
private

Definition at line 34 of file TrigTauInfo.cxx.

35{
36 std::string clean_trigger = m_trigger;
37
38 // Change the "L1_" prefix to "L1" internally, in case the trigger being parsed is a pure L1 trigger with the usual L1 standalone naming scheme
39 if(clean_trigger.size() > 3 && clean_trigger.rfind("L1_", 0) == 0) {
40 clean_trigger = "L1" + clean_trigger.substr(3);
41 }
42
43 std::vector<std::string> sections;
44 for (auto&& subrange : std::views::split(m_trigger, '_')) sections.emplace_back(subrange.begin(), subrange.end());
45
46 std::regex tau_rgx("^(\\d*)tau(\\d+)$");
47 std::regex elec_rgx("^(\\d*)e(\\d+)$");
48 std::regex muon_rgx("^(\\d*)mu(\\d+)$");
49 std::regex gamma_rgx("^(\\d*)g(\\d+)$");
50 std::regex jet_rgx("^(\\d*)j(\\d+)$");
51 std::regex met_rgx("^xe(\\d+)$");
52 std::regex noalg_rgx("^noalg$");
53 std::regex l1_rgx("^L1.*$");
54 std::regex l1_tau_rgx("(\\d*)(e|j|c|)TAU(\\d+)(L|M|T|HL|HM|HT|H|IM|I|)");
55 std::regex l1_toposeparate_rgx("^(\\d{0,2})(DETA|DPHI)(\\d{0,2})$");
56 std::regex topo_rgx("^.*(invm|dR|deta|dphi)AB.*$");
57 std::regex ditauomni_rgx("^ditauOmni(\\d)+Trk(\\d)+$");
58 std::vector<std::regex*> all_regexes = {&tau_rgx, &elec_rgx, &muon_rgx, &gamma_rgx, &jet_rgx, &met_rgx, &l1_rgx, &ditauomni_rgx};
59
60 std::regex tau_type_rgx("^(ptonly|tracktwoMVA|tracktwoMVABDT|tracktwoLLP|trackLRT)$");
61 std::regex tau_ID_rgx("^(idperf|noperf|perfcore|perfiso|perf|veryloose.*|loose.*|medium.*|tight.*)$");
62
63 std::smatch match;
64 std::regex_token_iterator<std::string::iterator> rend;
65
66 // Check each leg
67 std::vector<std::string> leg;
68 for(size_t i = 0; i < sections.size(); i++) {
69 leg.push_back(sections[i]); // Attach to the current leg
70 //Match the beginning of a new leg, or the end of the chain
71 if(i == sections.size() - 1 || (std::any_of(all_regexes.begin(), all_regexes.end(), [&sections, i](const std::regex* rgx) { return std::regex_match(sections[i+1], *rgx); }))) {
72 // Process the previous leg, which starts with the item, multiplicity, and threshold
73 if(std::regex_match(leg[0], match, tau_rgx)) {
74 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
75 unsigned int threshold = std::stoi(match[2].str());
76
77 // HLT Tau sequence
78 auto itr = find_if(leg.begin(), leg.end(), [tau_type_rgx](const std::string& s) { return std::regex_match(s, tau_type_rgx); });
79 std::string type = itr != leg.end() ? *itr : "tracktwoMVA"; // Default to the tracktwoMVA sequence
80
81 // HLT Tau ID
82 itr = find_if(leg.begin(), leg.end(), [tau_ID_rgx](const std::string& s) { return std::regex_match(s, tau_ID_rgx); });
83 std::string tau_id = itr != leg.end() ? *itr : "";
84 if(tau_id.starts_with("veryloose")) tau_id = tau_id.substr(9);
85 else if(tau_id.starts_with("loose")) tau_id = tau_id.substr(5);
86 else if(tau_id.starts_with("medium")) tau_id = tau_id.substr(6);
87 else if(tau_id.starts_with("tight")) tau_id = tau_id.substr(5);
88
89 // The WP is a variation (e.g. "mediumvar2GNTauDev1")
90 if(tau_id.starts_with("var")) {
91 std::size_t i = 3; // Take out the "var" prefix
92
93 // Now find the variation number
94 while(i < tau_id.size() && std::isdigit(static_cast<unsigned char>(tau_id[i]))) i++;
95
96 tau_id = tau_id.substr(i);
97 }
98
99 // Get the perf-selection suffix
100 if(tau_id.starts_with("pc")) tau_id = tau_id.substr(2);
101 else if(tau_id.starts_with("pi")) tau_id = tau_id.substr(2);
102 else if(tau_id.starts_with("np")) tau_id = tau_id.substr(2);
103
104 // Override for the old trigger names
105 if(tau_id == "RNN") {
106 if(type == "tracktwoMVA") tau_id = "DeepSet";
107 if(type == "tracktwoLLP" || type == "trackLRT") tau_id = "RNNLLP";
108 }
109
110 // Replacements (this is temporary, the entire TrigTauInfo class will be removed soon, and all this will be handled centrally in Python using the already available infrastructure)
111 if(tau_id == "DS") tau_id = "DeepSet";
112 else if(tau_id == "GNT") tau_id = "GNTau";
113
114 for(size_t j = 0; j < multiplicity; j++) {
115 m_HLTThr.push_back(threshold);
116 m_HLTTauTypes.push_back(type);
117 m_HLTTauIDs.push_back(tau_id);
118 }
119 } else if(std::regex_match(leg[0], match, elec_rgx)) {
120 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
121 unsigned int threshold = std::stoi(match[2].str());
122 for(size_t j = 0; j < multiplicity; j++) m_HLTElecThr.push_back(threshold);
123 } else if(std::regex_match(leg[0], match, muon_rgx)) {
124 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
125 unsigned int threshold = std::stoi(match[2].str());
126 for(size_t j = 0; j < multiplicity; j++) m_HLTMuonThr.push_back(threshold);
127 } else if(std::regex_match(leg[0], match, gamma_rgx)) {
128 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
129 unsigned int threshold = std::stoi(match[2].str());
130 for(size_t j = 0; j < multiplicity; j++) m_HLTGammaThr.push_back(threshold);
131 } else if(std::regex_match(leg[0], match, jet_rgx)) {
132 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
133 unsigned int threshold = std::stoi(match[2].str());
134 for(size_t j = 0; j < multiplicity; j++) m_HLTJetThr.push_back(threshold);
135 } else if(std::regex_match(leg[0], match, met_rgx)) {
136 unsigned int threshold = std::stoi(match[2].str());
137 m_HLTMETThr.push_back(threshold);
138 } else if(std::regex_match(leg[0], match, noalg_rgx)) {
139 m_isStreamer = true;
140 } else if (std::regex_match(leg[0], match, ditauomni_rgx)) {
141 m_HLTBoostedDitauName.push_back(leg[0]);
142 } else if(std::regex_match(leg[0], l1_rgx)){ // Treat the L1 items as a leg
143 for(size_t j = 0; j < leg.size(); j++) {
144 if(std::regex_match(leg[j], topo_rgx)) continue; // Remove HLT topo sections, not part of the L1 item
145
146 // L1Topo items (they all include a "-" in the name, or have a separate "##DETA/PHI##_" prefix):
147 if(leg[j].find('-') != std::string::npos || std::regex_match(leg[j], l1_toposeparate_rgx)) {
148 // We only keep information from the legacy L1Topo item, from which we will not always use all thresholds
149 // Since we won't be adding any more Legacy thresholds, let's hard-code it...
150 if(leg[0] == "L1TAU60" && leg[j] == "DR-TAU12ITAU12I") leg[j] = "TAU12IM"; // L1_TAU60_DR-TAU20ITAU12I, uses "TAU12IM" threshold from the L1Topo item
151 else if(leg.size() == 1 && (leg[0] == "L1DR-TAU20ITAU12I" || leg[0] == "L1DR-TAU20ITAU12I-J25")) {
152 // Uses both TAU items, in the M isolation threshold
153 leg[0] = "L1TAU20IM";
154 leg.push_back("TAU12IM");
155 // Even on combined chains using jets, we don't use the jets threshold
156 }
157 else continue; // Remove the Phase 1 L1Topo items, since we always use a multiplicity threshold
158 }
159
160 m_L1Items.push_back(j == 0 ? leg[j].substr(2, leg[j].size()) : leg[j]); // Remove the "L1" prefix on the first L1 item
161 }
162 }
163
164 // Start a new leg
165 leg = {};
166 }
167 }
168
169 if(!m_L1Items.empty()) {
170 // Build the full L1 string
171 m_L1Item = m_L1Items[0];
172 for(size_t j = 1; j < m_L1Items.size(); j++) m_L1Item += "_" + m_L1Items[j];
173
174 // Get all individual L1 TAU items
175 std::regex_token_iterator<std::string::iterator> rgx_iter(m_L1Item.begin(), m_L1Item.end(), l1_tau_rgx);
176 while(rgx_iter != rend) {
177 const std::string & s = *rgx_iter;
178 if (std::regex_match(s, match, l1_tau_rgx)){
179 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
180 std::string item_type = match[2].str(); // e, j, c, or ""
181 int threshold = std::stoi(match[3].str());
182 std::string item_isolation = match[4].str(); // "", L, M, T, HL, HM, HT, IM, H
183
184 // Set the Phase 1 thresholds to -1
185 if(remove_L1_phase1_thresholds && (item_type == "e" || item_type == "j" || item_type == "c")) threshold = -1;
186
187 for(size_t j = 0; j < multiplicity; j++) {
188 m_tauL1Items.push_back(s.substr(match[1].str().size()));
189 m_tauL1Thr.push_back(threshold);
190 m_tauL1Type.push_back(item_type + "TAU");
191 m_tauL1Iso.push_back(item_isolation);
192 m_tauL1ThresholdPattern.push_back(-1);
193 }
194 }
195 rgx_iter++;
196 }
197
198 m_L1Item = "L1" + m_L1Items[0];
199 }
200}
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Definition hcg.cxx:357
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ parseTriggerString() [2/4]

void TrigTauInfo::parseTriggerString ( const std::map< int, int > & L1Phase1ThrMap_eTAU,
const std::map< int, int > & L1Phase1ThrMap_jTAU )
private

Definition at line 229 of file TrigTauInfo.cxx.

230{
231 parseTriggerString(false);
232
233 // Correct the Phase 1 thresholds:
234 for(size_t i = 0; i < m_tauL1Items.size(); i++) {
235 const std::string& item_type = m_tauL1Type.at(i);
236 if(item_type == "eTAU" || item_type == "cTAU") {
237 m_tauL1Thr[i] = L1Phase1ThrMap_eTAU.at(m_tauL1Thr.at(i));
238 } else if(item_type == "jTAU") {
239 m_tauL1Thr[i] = L1Phase1ThrMap_jTAU.at(m_tauL1Thr.at(i));
240 }
241 }
242}

◆ parseTriggerString() [3/4]

void TrigTauInfo::parseTriggerString ( const std::map< std::string, float > & L1Phase1_thresholds)
private

Definition at line 202 of file TrigTauInfo.cxx.

203{
205
206 for(size_t i = 0; i < m_tauL1Items.size(); i++) {
207 if(m_tauL1Type.at(i) == "TAU") continue; // Skip the legacy items
208
209 const std::string& item = m_tauL1Items.at(i);
210
211 m_tauL1Thr[i] = L1Phase1_thresholds.at(item);
212 }
213}

◆ parseTriggerString() [4/4]

void TrigTauInfo::parseTriggerString ( const std::map< std::string, float > & L1Phase1_thresholds,
const std::map< std::string, uint64_t > & L1Phase1_threshold_patterns )
private

Definition at line 215 of file TrigTauInfo.cxx.

216{
218
219 for(size_t i = 0; i < m_tauL1Items.size(); i++) {
220 if(m_tauL1Type.at(i) == "TAU") continue; // Skip the legacy items
221
222 const std::string& item = m_tauL1Items.at(i);
223
224 m_tauL1Thr[i] = L1Phase1_thresholds.at(item);
225 m_tauL1ThresholdPattern[i] = L1Phase1_threshold_patterns.at(item);
226 }
227}

Member Data Documentation

◆ m_HLTBoostedDitauName

std::vector<std::string> TrigTauInfo::m_HLTBoostedDitauName
private

Definition at line 96 of file TrigTauInfo.h.

◆ m_HLTElecThr

std::vector<float> TrigTauInfo::m_HLTElecThr
private

Definition at line 90 of file TrigTauInfo.h.

◆ m_HLTGammaThr

std::vector<float> TrigTauInfo::m_HLTGammaThr
private

Definition at line 92 of file TrigTauInfo.h.

◆ m_HLTJetThr

std::vector<float> TrigTauInfo::m_HLTJetThr
private

Definition at line 93 of file TrigTauInfo.h.

◆ m_HLTMETThr

std::vector<float> TrigTauInfo::m_HLTMETThr
private

Definition at line 94 of file TrigTauInfo.h.

◆ m_HLTMuonThr

std::vector<float> TrigTauInfo::m_HLTMuonThr
private

Definition at line 91 of file TrigTauInfo.h.

◆ m_HLTTauIDs

std::vector<std::string> TrigTauInfo::m_HLTTauIDs
private

Definition at line 80 of file TrigTauInfo.h.

◆ m_HLTTauTypes

std::vector<std::string> TrigTauInfo::m_HLTTauTypes
private

Definition at line 79 of file TrigTauInfo.h.

◆ m_HLTThr

std::vector<float> TrigTauInfo::m_HLTThr
private

Definition at line 78 of file TrigTauInfo.h.

◆ m_isStreamer

bool TrigTauInfo::m_isStreamer = false
private

Definition at line 77 of file TrigTauInfo.h.

◆ m_L1Item

std::string TrigTauInfo::m_L1Item
private

Definition at line 82 of file TrigTauInfo.h.

◆ m_L1Items

std::vector<std::string> TrigTauInfo::m_L1Items
private

Definition at line 83 of file TrigTauInfo.h.

◆ m_tauL1Iso

std::vector<std::string> TrigTauInfo::m_tauL1Iso
private

Definition at line 87 of file TrigTauInfo.h.

◆ m_tauL1Items

std::vector<std::string> TrigTauInfo::m_tauL1Items
private

Definition at line 85 of file TrigTauInfo.h.

◆ m_tauL1Thr

std::vector<float> TrigTauInfo::m_tauL1Thr
private

Definition at line 84 of file TrigTauInfo.h.

◆ m_tauL1ThresholdPattern

std::vector<int64_t> TrigTauInfo::m_tauL1ThresholdPattern
private

Definition at line 88 of file TrigTauInfo.h.

◆ m_tauL1Type

std::vector<std::string> TrigTauInfo::m_tauL1Type
private

Definition at line 86 of file TrigTauInfo.h.

◆ m_trigger

std::string TrigTauInfo::m_trigger
private

Definition at line 76 of file TrigTauInfo.h.


The documentation for this class was generated from the following files: