ATLAS Offline Software
L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 // TopoCore
5 //
6 
7 
8 
10 #include "L1TopoCommon/Exception.h"
11 #include "L1TopoInterfaces/Count.h"
13 
14 #include "L1TopoEvent/TOBArray.h"
17 
18 #include <cmath>
19 
20 
21 REGISTER_ALG_TCS(cTauMultiplicity)
22 
24  setNumberOutputBits(12); //To-Do: Make this flexible to adapt to the menu. Each counting requires more than one bit
25 }
26 
27 
29 
30 
32  m_threshold = dynamic_cast<const TrigConf::L1Threshold_cTAU*>(getThreshold());
33  if (not m_threshold){
34  TRG_MSG_ERROR("Dynamic cast failed in TCS::cTauMultiplicity::initialize");
35  return StatusCode::FAILURE;
36  }
37 
38  m_extraInfo = m_threshold->getExtraInfo();
39 
40  // book histograms
41  std::string hname_accept = "cTauMultiplicity_accept_EtaPt_"+m_threshold->name();
42  bookHistMult(m_histAccept, hname_accept, "Mult_"+m_threshold->name(), "#eta#times40", "E_{t} [GeV]", 200, -200, 200, 100, 0, 100);
43 
44  hname_accept = "cTauMultiplicity_accept_counts_"+m_threshold->name();
45  bookHistMult(m_histAccept, hname_accept, "Mult_"+m_threshold->name(), "counts", 15, 0, 15);
46 
47  // cTau TOB monitoring histograms
48  bookHistMult(m_histcTauEt, "cTauTOBEt", "Matched cTau TOB Et", "E_{t} [GeV]", 200, 0, 400);
49  bookHistMult(m_histcTauPhiEta, "cTauTOBPhiEta", "Matched cTau TOB location", "#eta#times40", "#phi#times20", 200, -200, 200, 128, 0, 128);
50  bookHistMult(m_histcTauEtEta, "cTauTOBEtEta", "Matched cTau TOB Et vs eta", "#eta#times40", "E_{t} [GeV]", 200, -200, 200, 200, 0, 400);
51  bookHistMult(m_histcTauPartialIsoLoose, "cTauTOBPartialIsoLoose", "Matched cTau Loose partial isolation", "Loose isolation", 200, 0, 10);
52  bookHistMult(m_histcTauPartialIsoMedium, "cTauTOBPartialIsoMedium", "Matched cTau Medium partial isolation", "Medium isolation", 200, 0, 10);
53  bookHistMult(m_histcTauPartialIsoMedium12, "cTauTOBPartialIsoMedium12", "Matched cTau Medium12 partial isolation", "Medium12 isolation", 200, 0, 10);
54  bookHistMult(m_histcTauPartialIsoMedium20, "cTauTOBPartialIsoMedium20", "Matched cTau Medium20 partial isolation", "Medium20 isolation", 200, 0, 10);
55  bookHistMult(m_histcTauPartialIsoMedium30, "cTauTOBPartialIsoMedium30", "Matched cTau Medium30 partial isolation", "Medium30 isolation", 200, 0, 10);
56  bookHistMult(m_histcTauPartialIsoMedium35, "cTauTOBPartialIsoMedium35", "Matched cTau Medium35 partial isolation", "Medium35 isolation", 200, 0, 10);
57  bookHistMult(m_histcTauPartialIsoTight, "cTauTOBPartialIsoTight", "Matched cTau Tight partial isolation", "Tight isolation", 200, 0, 10);
58  bookHistMult(m_histcTauIsoMatchedPass, "cTauTOBIsoMatchedPass", "Matched cTau isolation pass", "isolation pass", 2, 0, 2);
59 
60  return StatusCode::SUCCESS;
61 }
62 
63 
64 // To be implemented
66 {
67  return process(input, count);
68 }
69 
70 
71 
73 {
74  const cTauTOBArray& cTaus = dynamic_cast<const cTauTOBArray&>(input);
75 
76  int counting = 0;
77  // Loop over eTau candidates
78  for(cTauTOBArray::const_iterator etauCand = cTaus.begin(); etauCand != cTaus.end(); ++etauCand ) {
79 
80  if((*etauCand)->tobType() != TCS::ETAU) continue;
81 
82  bool accept = false; // accept = true if (isMatched==true && isIsolated==true) || (isMatched==false)
83  bool isMatched = false; // Is the eTau matched to a jTau?
84  bool isIsolated = false; // If matched: does the resulting cTau pass the isolation cut?
85  float isolation_partial_loose = 0; // cTau Loose partial isolation (0 if no match is found)
86  float isolation_partial_medium = 0; // cTau Medium partial isolation (0 if no match is found)
87  float isolation_partial_medium12 = 0; // cTau Medium12 partial isolation (0 if no match is found)
88  float isolation_partial_medium20 = 0; // cTau Medium20 partial isolation (0 if no match is found)
89  float isolation_partial_medium30 = 0; // cTau Medium30 partial isolation (0 if no match is found)
90  float isolation_partial_medium35 = 0; // cTau Medium35 partial isolation (0 if no match is found)
91  float isolation_partial_tight = 0; // cTau Tight partial isolation (0 if no match is found)
92 
93  // Loop over jTau candidates
94  for(cTauTOBArray::const_iterator jtauCand = cTaus.begin(); jtauCand != cTaus.end(); ++jtauCand) {
95 
96  if((*jtauCand)->tobType() != TCS::JTAU) continue;
97 
98  isMatched = cTauMatching(*etauCand, *jtauCand);
99 
100  if(isMatched) {
101  float etauCand_et = static_cast<float>((*etauCand)->Et());
102  float etauCand_eta = static_cast<float>((*etauCand)->etaDouble());
103  float jtauCand_et = static_cast<float>((*jtauCand)->Et());
104  float jtauCand_etIso = static_cast<float>((*jtauCand)->EtIso());
105  // Updated isolation condition, WP-dependent (ATR-28641)
106  // "Partial" isolation formula: I = (E_T^{jTAU Iso} + jTAUCoreScale * E_T^{jTAU Core}) / E_T^{eTAU}
107  // This formula is missing the eTAU Core substraction from the numerator, grouped with the isolation cut value
108  isolation_partial_loose = (jtauCand_etIso + m_extraInfo->isolation(WP::LOOSE, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
109  isolation_partial_loose = (jtauCand_etIso + m_extraInfo->isolation(WP::MEDIUM, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
110  isolation_partial_medium12 = (jtauCand_etIso + m_extraInfo->isolation(WP::MEDIUM12, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
111  isolation_partial_medium20 = (jtauCand_etIso + m_extraInfo->isolation(WP::MEDIUM20, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
112  isolation_partial_medium30 = (jtauCand_etIso + m_extraInfo->isolation(WP::MEDIUM30, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
113  isolation_partial_medium35 = (jtauCand_etIso + m_extraInfo->isolation(WP::MEDIUM35, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
114  isolation_partial_tight = (jtauCand_etIso + m_extraInfo->isolation(WP::TIGHT, etauCand_eta).isolation_jTAUCoreScale_fw()/1024.0 * jtauCand_et) / etauCand_et; // Internal variable for monitoring
115  // Old isolation condition coded as in firmware: https://indico.cern.ch/event/1079697/contributions/4541419/attachments/2315137/3940824/cTAU_FirmwareAlgoProposal.pdf page 8
116 
117  isIsolated = checkIsolationWP(*etauCand, *jtauCand);
118 
119  break; // Break loop when a match is found
120  }
121 
122  } // End of jTau loop
123 
124  // Fill cTau TOB histograms before threshold cuts (matched cTaus only)
125  if(isMatched) {
126  fillHist1D(m_histcTauEt[0], (*etauCand)->EtDouble());
127  fillHist2D(m_histcTauPhiEta[0], (*etauCand)->eta(), (*etauCand)->phi());
128  fillHist2D(m_histcTauEtEta[0], (*etauCand)->eta(), (*etauCand)->EtDouble());
129  fillHist1D(m_histcTauPartialIsoLoose[0], isolation_partial_loose);
130  fillHist1D(m_histcTauPartialIsoMedium[0], isolation_partial_medium);
131  fillHist1D(m_histcTauPartialIsoMedium12[0], isolation_partial_medium12);
132  fillHist1D(m_histcTauPartialIsoMedium20[0], isolation_partial_medium20);
133  fillHist1D(m_histcTauPartialIsoMedium30[0], isolation_partial_medium30);
134  fillHist1D(m_histcTauPartialIsoMedium35[0], isolation_partial_medium35);
135  fillHist1D(m_histcTauPartialIsoTight[0], isolation_partial_tight);
136  fillHist1D(m_histcTauIsoMatchedPass[0], isMatched && isIsolated);
137  }
138 
139  if(isMatched && isIsolated) accept = true; // This is a good matched cTau
140  if(!isMatched) accept = true; // This is a non-matched eTau
141 
142  if(!checkeTAUWP(*etauCand)) accept = false; // Check eTAU rCore/BDT and rHad WP
143 
144  // Menu threshold uses 0.1 eta granularity but eFex objects have 0.025 eta granularity
145  // eFex eta is calculated as 4*eta_tower (0.1 gran.) + seed (0.025 gran.), eta from -25 to 24
146  int eta_thr;
147  if((*etauCand)->eta()%4 >= 0) eta_thr = (*etauCand)->eta() - (*etauCand)->eta()%4;
148  else eta_thr = (*etauCand)->eta() - (*etauCand)->eta()%4 - 4;
149 
150  accept = accept && (*etauCand)->Et() > m_threshold->thrValue100MeV(eta_thr/4); // Convert eta_thr to units of 0.1 to pass as an argument
151 
152  if(accept) {
153  counting++;
154  fillHist2D(m_histAccept[0], (*etauCand)->eta(), (*etauCand)->EtDouble());
155  }
156 
157  } // End of eTau loop
158 
159  fillHist1D(m_histAccept[1], counting);
160 
161  // Pass counting to TCS::Count object - output bits are composed there
162 
163  count.setSizeCount(counting);
164 
166 
167 }
168 
169 
170 bool TCS::cTauMultiplicity::checkIsolationWP(const TCS::cTauTOB* etauCand, const TCS::cTauTOB* jtauCand) const {
171  if(m_threshold->isolation() == WP::NONE) return true;
172  auto iso_wp = m_extraInfo->isolation(m_threshold->isolation(), etauCand->etaDouble());
173  return jtauCand->EtIso()*1024 + jtauCand->Et()*iso_wp.isolation_jTAUCoreScale_fw() < etauCand->Et()*iso_wp.isolation_fw();
174 }
175 
176 
178  if(m_threshold->isolation() == WP::NONE) return true;
179  auto iso_wp = m_extraInfo->isolation(m_threshold->isolation(), etauCand->etaDouble());
180  return etauCand->RCore() >= iso_wp.eTAU_rCoreMin_WP_fw() && etauCand->RHad() >= iso_wp.eTAU_rHadMin_WP_fw();
181 }
182 
183 
184 bool TCS::cTauMultiplicity::cTauMatching(const TCS::cTauTOB* etauCand, const TCS::cTauTOB* jtauCand) const {
185 
186  bool matching = false;
187 
188  // Matching is done comparing eta_tower and phi_tower (granularity = 0.1)
189  // These coordinates represent the lower edge of the towers (both for eFEX and jFEX)
190 
191  // eTau eta = 4*eta_tower + seed, eta from -25 to 24
192  int eTauEtaTower;
193  if(etauCand->eta()%4 >= 0 ) eTauEtaTower = etauCand->eta() - etauCand->eta()%4;
194  else eTauEtaTower = etauCand->eta() - etauCand->eta()%4 - 4;
195  int jTauEtaTower;
196  if (jtauCand->eta()%4 >= 0 ) jTauEtaTower = jtauCand->eta() - jtauCand->eta()%4;
197  else jTauEtaTower = jtauCand->eta() - jtauCand->eta()%4 - 4;
198 
199  //int jTauEtaTower = jtauCand->eta(); // jTau eta = 4*eta_tower
200  unsigned int eTauPhiTower = etauCand->phi() >> 1; // eTau phi = 2*phi_tower
201  unsigned int jTauPhiTower = jtauCand->phi() >> 1; // jTau phi = 2*phi_tower + 1 (jTau coordinates are at center of tower)
202 
203  matching = (eTauEtaTower == jTauEtaTower) && (eTauPhiTower == jTauPhiTower);
204 
205  return matching;
206 
207 }
208 
209 // Functions used by the HLT seeding
210 
211 #ifndef TRIGCONF_STANDALONE
213 
214  // Return the index of the matched jTau if existent (otherwise return std::numeric_limits<size_t>::max())
215  size_t i_matched{std::numeric_limits<size_t>::max()};
216  size_t i_jTau{0};
217 
218  int eTauEtaTower;
219  if(eTau.iEtaTopo()%4 >= 0 ) eTauEtaTower = eTau.iEtaTopo() - eTau.iEtaTopo()%4;
220  else eTauEtaTower = eTau.iEtaTopo() - eTau.iEtaTopo()%4 - 4;
221 
222  for(const xAOD::jFexTauRoI* jTau : jTauRoIs) {
223 
224  // eFEX: etaTower = iEta, phiTower = iPhi
225  // jFEX: etaTower = globalEta, phiTower = globalPhi
226 
227  int jTauEtaTopo = TSU::toTopoEta(jTau->eta());
228  int jTauEtaTower;
229  if(jTauEtaTopo%4 >= 0 ) jTauEtaTower = jTauEtaTopo - jTauEtaTopo%4;
230  else jTauEtaTower = jTauEtaTopo - jTauEtaTopo%4 - 4;
231 
232  unsigned int jTauPhiTower = TSU::toTopoPhi(jTau->phi()) >> 1; //ignore lowest bit as jTau coordinates are taken at tower center
233  unsigned int eTauPhiTower = static_cast<unsigned int>(eTau.iPhiTopo()) >> 1; //shift eTau location in the same way to stay consistent
234  bool matching = ( eTauEtaTower == jTauEtaTower ) && ( eTauPhiTower == jTauPhiTower );
235 
236  if(matching) {
237  i_matched = i_jTau;
238  break; // Break the loop when a match is found
239  }
240  ++i_jTau;
241  }
242 
243  return i_matched;
244 
245 }
246 
247 
249 
250  // eFEX: etaTower = iEta, phiTower = iPhi
251  // jFEX: etaTower = globalEta, phiTower = globalPhi
252 
253  int eTauEtaTower;
254  if(eTau.iEtaTopo()%4 >= 0 ) eTauEtaTower = eTau.iEtaTopo() - eTau.iEtaTopo()%4;
255  else eTauEtaTower = eTau.iEtaTopo() - eTau.iEtaTopo()%4 - 4;
256 
257  int jTauEtaTopo = TSU::toTopoEta(jTau.eta());
258  int jTauEtaTower;
259  if(jTauEtaTopo%4 >= 0 ) jTauEtaTower = jTauEtaTopo - jTauEtaTopo%4;
260  else jTauEtaTower = jTauEtaTopo - jTauEtaTopo%4 - 4;
261 
262  unsigned int jTauPhiTower = TSU::toTopoPhi(jTau.phi()) >> 1; //ignore lowest bit as jTau coordinates are taken at tower center
263  unsigned int eTauPhiTower = static_cast<unsigned int>(eTau.iPhiTopo()) >> 1; //shift eTau location in the same way to stay consistent
264 
265  bool matching = ( eTauEtaTower == jTauEtaTower ) && ( eTauPhiTower == jTauPhiTower );
266  return matching;
267 
268 }
269 
270 
272  if(thr.isolation() == WP::NONE) return true;
273  auto iso_wp = thr.getExtraInfo()->isolation(thr.isolation(), eTau.eta());
274  return jTau.tobIso()*2*1024 + jTau.tobEt()*2*iso_wp.isolation_jTAUCoreScale_fw() < eTau.etTOB()*iso_wp.isolation_fw();
275 }
276 
277 
279  if(thr.isolation() == WP::NONE) return true;
280  auto iso_wp = thr.getExtraInfo()->isolation(thr.isolation(), eTau.eta());
281  return eTau.tauOneThresholds() >= iso_wp.eTAU_rCoreMin_WP_fw() && eTau.tauTwoThresholds() >= iso_wp.eTAU_rHadMin_WP_fw();
282 }
283 
284 #endif
TCS::cTauMultiplicity::initialize
virtual StatusCode initialize() override
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:31
NONE
@ NONE
Definition: sTGCenumeration.h:13
TRG_MSG_ERROR
#define TRG_MSG_ERROR(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:29
xAOD::jFexTauRoI_v1
Class describing properties of a LVL1 jFEX global Trigger Object (TOB) in the xAOD format.
Definition: jFexTauRoI_v1.h:22
TrigConf::L1Threshold_cTAU
Definition: L1Threshold.h:255
xAOD::eFexTauRoI_v1::iEtaTopo
int iEtaTopo() const
Getter for integer phi index (0-63)
Definition: eFexTauRoI_v1.cxx:280
TCS::cTauTOB::EtIso
unsigned int EtIso() const
Definition: cTauTOB.h:44
TCS::StatusCode::SUCCESS
@ SUCCESS
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
max
#define max(a, b)
Definition: cfImp.cxx:41
xAOD::jFexTauRoI_v1::eta
float eta() const
TCS::DataArrayImpl< cTauTOB >::const_iterator
data_t::const_iterator const_iterator
Definition: DataArrayImpl.h:18
TCS::StatusCode::FAILURE
@ FAILURE
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:17
xAOD::eFexTauRoI_v1::eta
float eta() const
setter for the above
TCS::cTauTOB::RCore
unsigned int RCore() const
Definition: cTauTOB.h:41
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
xAOD::eFexTauRoI_v1::tauTwoThresholds
unsigned int tauTwoThresholds() const
Tau Condition 2 (generic) results.
Definition: eFexTauRoI_v1.cxx:205
TSU::toTopoEta
int toTopoEta(float eta)
Definition: Conversions.cxx:27
xAOD::jFexTauRoI_v1::tobIso
uint16_t tobIso() const
InDetSecVtxTruthMatchUtils::isMatched
bool isMatched(int matchInfo)
Definition: InDetSecVtxTruthMatchTool.h:48
EMAmbiguityType::LOOSE
@ LOOSE
Definition: EMAmbiguityToolDefs.h:12
TCS::cTauTOB::etaDouble
double etaDouble() const
Definition: cTauTOB.h:38
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
TCS::cTauTOBArray
Definition: L1Topo/L1TopoEvent/L1TopoEvent/cTauTOBArray.h:14
SUSY_SimplifiedModel_PostInclude.process
string process
Definition: SUSY_SimplifiedModel_PostInclude.py:42
TCS::DataArrayImpl::end
iterator end()
Definition: DataArrayImpl.h:43
Conversions.h
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
xAOD::eFexTauRoI_v1::tauOneThresholds
unsigned int tauOneThresholds() const
Tau Condition 1 (generic) results.
Definition: eFexTauRoI_v1.cxx:201
xAOD::eFexTauRoI_v1::iPhiTopo
int iPhiTopo() const
Return phi index in the range used by L1Topo (0->127)
Definition: eFexTauRoI_v1.cxx:272
xAOD::jFexTauRoI_v1::tobEt
uint16_t tobEt() const
xAOD::eFexTauRoI_v1
Class describing a LVL1 eFEX tau region of interest.
Definition: eFexTauRoI_v1.h:29
Count.h
TCS::InputTOBArray
Definition: InputTOBArray.h:15
TrigConf::L1Threshold_cTAU::getExtraInfo
const std::shared_ptr< L1ThrExtraInfo_cTAU > getExtraInfo() const
Definition: L1Threshold.cxx:188
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
TCS::cTauMultiplicity::checkIsolationWP
static bool checkIsolationWP(const xAOD::eFexTauRoI &eTau, const xAOD::jFexTauRoI &jTau, const TrigConf::L1Threshold_cTAU &thr)
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:271
cTauMultiplicity.h
TCS::cTauTOB::phi
unsigned int phi() const
Definition: cTauTOB.h:35
xAOD::jFexTauRoI_v1::phi
float phi() const
TOBArray.h
TCS::cTauMultiplicity::checkeTAUWP
static bool checkeTAUWP(const xAOD::eFexTauRoI &eTau, const TrigConf::L1Threshold_cTAU &thr)
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:278
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
TCS::cTauTOB::eta
int eta() const
Definition: cTauTOB.h:34
REGISTER_ALG_TCS
#define REGISTER_ALG_TCS(CLASS)
Definition: AlgFactory.h:62
TCS::cTauMultiplicity::cTauMatching
static size_t cTauMatching(const xAOD::eFexTauRoI &eTau, const xAOD::jFexTauRoIContainer &jTauRoIs)
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:212
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
TCS::cTauTOB::Et
unsigned int Et() const
Definition: cTauTOB.h:33
EMAmbiguityType::MEDIUM
@ MEDIUM
Definition: EMAmbiguityToolDefs.h:18
TCS::DataArrayImpl::begin
iterator begin()
Definition: DataArrayImpl.h:40
TCS::cTauMultiplicity::processBitCorrect
virtual StatusCode processBitCorrect(const TCS::InputTOBArray &input, Count &count) override final
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:65
TCS::cTauMultiplicity::~cTauMultiplicity
virtual ~cTauMultiplicity()
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:28
xAOD::eFexTauRoI_v1::etTOB
unsigned int etTOB() const
Cluster ET (TOB ET scale, 100 MeV/count)
Definition: eFexTauRoI_v1.cxx:155
TCS::Count
Definition: L1Topo/L1TopoInterfaces/L1TopoInterfaces/Count.h:20
TCS::cTauMultiplicity
Definition: L1Topo/L1TopoAlgorithms/L1TopoAlgorithms/cTauMultiplicity.h:28
TCS
Definition: Global/GlobalSimulation/src/IO/Decision.h:18
TCS::cTauTOB::RHad
unsigned int RHad() const
Definition: cTauTOB.h:42
getThreshold
CP::CorrectionCode getThreshold(Int_t &threshold, const std::string &trigger)
Definition: MuonTriggerSFRootCoreTest.cxx:48
TCS::ETAU
@ ETAU
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/Types.h:22
TCS::JTAU
@ JTAU
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/Types.h:13
TCS::cTauTOB
Definition: cTauTOB.h:13
TrigConf::L1Threshold_cTAU::isolation
Selection::WP isolation() const
Definition: L1Threshold.h:262
TCS::cTauMultiplicity::process
virtual StatusCode process(const TCS::InputTOBArray &input, Count &count) override final
Definition: L1Topo/L1TopoAlgorithms/Root/cTauMultiplicity.cxx:72
Exception.h
TCS::CountingAlg
Definition: CountingAlg.h:25
L1ThrExtraInfo.h
TCS::StatusCode
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/StatusCode.h:15
TSU::toTopoPhi
unsigned int toTopoPhi(float phi)
Definition: Conversions.cxx:20
cTauTOBArray.h