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("^(perf|idperf|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 // Override for the old trigger names
90 if(tau_id == "RNN") {
91 if(type == "tracktwoMVA") tau_id = "DeepSet";
92 if(type == "tracktwoLLP" || type == "trackLRT") tau_id = "RNNLLP";
93 }
94
95 // Replacements (this is temprary, the entire TrigTauInfo class will be removed soon, and all this will be handled centrally in Python using the already available infrastructure)
96 if(tau_id == "DS") tau_id = "DeepSet";
97 else if(tau_id == "GNT") tau_id = "GNTau";
98
99 for(size_t j = 0; j < multiplicity; j++) {
100 m_HLTThr.push_back(threshold);
101 m_HLTTauTypes.push_back(type);
102 m_HLTTauIDs.push_back(tau_id);
103 }
104 } else if(std::regex_match(leg[0], match, elec_rgx)) {
105 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
106 unsigned int threshold = std::stoi(match[2].str());
107 for(size_t j = 0; j < multiplicity; j++) m_HLTElecThr.push_back(threshold);
108 } else if(std::regex_match(leg[0], match, muon_rgx)) {
109 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
110 unsigned int threshold = std::stoi(match[2].str());
111 for(size_t j = 0; j < multiplicity; j++) m_HLTMuonThr.push_back(threshold);
112 } else if(std::regex_match(leg[0], match, gamma_rgx)) {
113 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
114 unsigned int threshold = std::stoi(match[2].str());
115 for(size_t j = 0; j < multiplicity; j++) m_HLTGammaThr.push_back(threshold);
116 } else if(std::regex_match(leg[0], match, jet_rgx)) {
117 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
118 unsigned int threshold = std::stoi(match[2].str());
119 for(size_t j = 0; j < multiplicity; j++) m_HLTJetThr.push_back(threshold);
120 } else if(std::regex_match(leg[0], match, met_rgx)) {
121 unsigned int threshold = std::stoi(match[2].str());
122 m_HLTMETThr.push_back(threshold);
123 } else if(std::regex_match(leg[0], match, noalg_rgx)) {
124 m_isStreamer = true;
125 } else if (std::regex_match(leg[0], match, ditauomni_rgx)) {
126 m_HLTBoostedDitauName.push_back(leg[0]);
127 } else if(std::regex_match(leg[0], l1_rgx)){ // Treat the L1 items as a leg
128 for(size_t j = 0; j < leg.size(); j++) {
129 if(std::regex_match(leg[j], topo_rgx)) continue; // Remove HLT topo sections, not part of the L1 item
130
131 // L1Topo items (they all include a "-" in the name, or have a separate "##DETA/PHI##_" prefix):
132 if(leg[j].find('-') != std::string::npos || std::regex_match(leg[j], l1_toposeparate_rgx)) {
133 // We only keep information from the legacy L1Topo item, from which we will not always use all thresholds
134 // Since we won't be adding any more Legacy thresholds, let's hard-code it...
135 if(leg[0] == "L1TAU60" && leg[j] == "DR-TAU12ITAU12I") leg[j] = "TAU12IM"; // L1_TAU60_DR-TAU20ITAU12I, uses "TAU12IM" threshold from the L1Topo item
136 else if(leg.size() == 1 && (leg[0] == "L1DR-TAU20ITAU12I" || leg[0] == "L1DR-TAU20ITAU12I-J25")) {
137 // Uses both TAU items, in the M isolation threshold
138 leg[0] = "L1TAU20IM";
139 leg.push_back("TAU12IM");
140 // Even on combined chains using jets, we don't use the jets threshold
141 }
142 else continue; // Remove the Phase 1 L1Topo items, since we always use a multiplicity threshold
143 }
144
145 m_L1Items.push_back(j == 0 ? leg[j].substr(2, leg[j].size()) : leg[j]); // Remove the "L1" prefix on the first L1 item
146 }
147 }
148
149 // Start a new leg
150 leg = {};
151 }
152 }
153
154 if(!m_L1Items.empty()) {
155 // Build the full L1 string
156 m_L1Item = m_L1Items[0];
157 for(size_t j = 1; j < m_L1Items.size(); j++) m_L1Item += "_" + m_L1Items[j];
158
159 // Get all individual L1 TAU items
160 std::regex_token_iterator<std::string::iterator> rgx_iter(m_L1Item.begin(), m_L1Item.end(), l1_tau_rgx);
161 while(rgx_iter != rend) {
162 const std::string & s = *rgx_iter;
163 if (std::regex_match(s, match, l1_tau_rgx)){
164 size_t multiplicity = match[1].str() == "" ? 1 : std::stoi(match[1].str());
165 std::string item_type = match[2].str(); // e, j, c, or ""
166 int threshold = std::stoi(match[3].str());
167 std::string item_isolation = match[4].str(); // "", L, M, T, HL, HM, HT, IM, H
168
169 // Set the Phase 1 thresholds to -1
170 if(remove_L1_phase1_thresholds && (item_type == "e" || item_type == "j" || item_type == "c")) threshold = -1;
171
172 for(size_t j = 0; j < multiplicity; j++) {
173 m_tauL1Items.push_back(s.substr(match[1].str().size()));
174 m_tauL1Thr.push_back(threshold);
175 m_tauL1Type.push_back(item_type + "TAU");
176 m_tauL1Iso.push_back(item_isolation);
177 m_tauL1ThresholdPattern.push_back(-1);
178 }
179 }
180 rgx_iter++;
181 }
182
183 m_L1Item = "L1" + m_L1Items[0];
184 }
185}
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 214 of file TrigTauInfo.cxx.

215{
216 parseTriggerString(false);
217
218 // Correct the Phase 1 thresholds:
219 for(size_t i = 0; i < m_tauL1Items.size(); i++) {
220 const std::string& item_type = m_tauL1Type.at(i);
221 if(item_type == "eTAU" || item_type == "cTAU") {
222 m_tauL1Thr[i] = L1Phase1ThrMap_eTAU.at(m_tauL1Thr.at(i));
223 } else if(item_type == "jTAU") {
224 m_tauL1Thr[i] = L1Phase1ThrMap_jTAU.at(m_tauL1Thr.at(i));
225 }
226 }
227}

◆ parseTriggerString() [3/4]

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

Definition at line 187 of file TrigTauInfo.cxx.

188{
190
191 for(size_t i = 0; i < m_tauL1Items.size(); i++) {
192 if(m_tauL1Type.at(i) == "TAU") continue; // Skip the legacy items
193
194 const std::string& item = m_tauL1Items.at(i);
195
196 m_tauL1Thr[i] = L1Phase1_thresholds.at(item);
197 }
198}

◆ 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 200 of file TrigTauInfo.cxx.

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

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: