ATLAS Offline Software
JetCleaningTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /******************************************************************************
6 Name: JetCleaningTool
7 
8 Author: Zach Marshall
9 Created: Feb 2014
10 
11 Description: Class for selecting jets that pass some cleaning cuts
12 ******************************************************************************/
13 
16 
17 // This class header and package headers
20 
21 // xAOD/ASG includes
23 
24 // STL includes
25 #include <iostream>
26 #include <cmath>
27 #include <cfloat>
28 #include <stdexcept>
29 #include <utility>
30 // ROOT includes
31 #include "TEnv.h"
32 
33 //=============================================================================
34 // Constructors
35 //=============================================================================
36 namespace JCT
37 {
38 class HotCell : public asg::AsgMessaging
39 {
40  public:
41  HotCell(const int layer, const float etaMin, const float etaMax, const float phiMin, const float phiMax);
42  virtual ~HotCell() {}
43  bool jetAffectedByHotCell(const xAOD::Jet& jet) const;
44  private:
45  const int m_layer;
46  const float m_etaMin;
47  const float m_etaMax;
48  const float m_phiMin;
49  const float m_phiMax;
51 };
52 
53 HotCell::HotCell(const int layer, const float etaMin, const float etaMax, const float phiMin, const float phiMax)
54  : asg::AsgMessaging("HotCell")
55  , m_layer(layer)
56  , m_etaMin(etaMin)
57  , m_etaMax(etaMax)
58  , m_phiMin(phiMin)
59  , m_phiMax(phiMax) { }
60 
62 {
63  // First check if the jet points to the cell
64  const float eta = jet.eta();
65  const float phi = jet.phi();
66  if ( (m_etaMin < eta && eta < m_etaMax) && (m_phiMin < phi && phi < m_phiMax) )
67  {
68  // It points to the cell, now check if the maximum layer is the hot cell or if at least 40% of the energy is the hot cell
69  const int fmaxIndex = jet.getAttribute<int>(xAOD::JetAttribute::FracSamplingMaxIndex);
70  float ePerSamp = 0;
71  if( m_ePerSamp.isAvailable(jet) )
72  ePerSamp = m_ePerSamp(jet).at(m_layer)/jet.e();
73  else
74  ATH_MSG_WARNING("Could not retrieve EnergyPerSampling from jet, cleaning performance may be reduced");
75 
76  if (fmaxIndex == m_layer || ePerSamp > 0.4)
77  return true;
78  }
79  return false;
80 }
81 
82 } // end JCT namespace
83 
84 
85 
86 //=============================================================================
87 // Constructors
88 //=============================================================================
90  : asg::AsgTool(name) {}
92 JetCleaningTool::JetCleaningTool(const CleaningLevel alevel, const bool doUgly)
93  : JetCleaningTool( "JetCleaningTool_"+getCutName(alevel) )
94 {
95  m_cutLevel=alevel;
96  m_doUgly = doUgly;
97 }
98 
100 JetCleaningTool::JetCleaningTool(const std::string& name , const CleaningLevel alevel, const bool doUgly)
102 {
103  m_cutLevel=alevel;
104  m_doUgly = doUgly;
105 }
106 
107 
108 //=============================================================================
109 // Destructor
110 //=============================================================================
112 
113 //=============================================================================
114 // Initialize
115 //=============================================================================
117 {
118  if (UnknownCut==m_cutLevel){
119  ATH_MSG_ERROR( "Tool initialized with unknown cleaning level." );
120  return StatusCode::FAILURE;
121  }
122 
124  ATH_MSG_INFO( "Configured with cut level " << getCutName( m_cutLevel ) );
125  std::string jetCleanDFName = "DFCommonJets_jetClean_"+getCutName(m_cutLevel);
126  m_acc_jetClean = jetCleanDFName;
128 
129  ATH_MSG_DEBUG( "Initialized decorator name: " << jetCleanDFName );
130 
131  m_accept.addCut( "Cleaning", "Cleaning of the jet" );
132 
133  // Read in the map of runNumbers to bad cells
135 
136  ATH_CHECK(m_jetCleanKey.initialize(!m_jetContainerName.empty()));
137 
138  return StatusCode::SUCCESS;
139 }
140 //===============================================================
141 // Calculate the accept from the DFCommonJets_jetClean decorator
142 //===============================================================
143 asg::AcceptData JetCleaningTool::accept( const int isJetClean, const int fmaxIndex ) const
144 {
145  asg::AcceptData acceptData (&m_accept);
146  acceptData.setCutResult( "Cleaning", false );
147 
148  //=============================================================
149  //Run-II ugly cuts
150  //=============================================================
151  if(m_doUgly && fmaxIndex==17) return acceptData;
152 
153  //=============================================================
154  //Loose/tight cleaning taken from decoration
155  //=============================================================
156  if(isJetClean==0) return acceptData;
157  else{
158  acceptData.setCutResult( "Cleaning", true );
159  return acceptData;
160  }
161 
162  // We should never arrive here!
163  ATH_MSG_ERROR( "Unknown cut name: " << getCutName( m_cutLevel ) << " in JetCleaningTool" );
164  return acceptData;
165 
166 }
167 //===============================================================
168 // Calculate tight cleaning from loose decoration + variables
169 //===============================================================
171  const double sumpttrk, //in MeV, same as sumpttrk
172  const double fmax,
173  const double eta,
174  const double pt,
175  const int fmaxIndex
176  ) const
177 {
178  asg::AcceptData acceptData (&m_accept);
179  acceptData.setCutResult( "Cleaning", false );
180  const double chf=sumpttrk/pt;
181 
182  //=============================================================
183  //Run-II ugly cuts
184  //=============================================================
185  if(m_doUgly && fmaxIndex==17) return acceptData;
186 
187  //=============================================================
188  //Tight cleaning taken from decoration
189  //=============================================================
190  if(isJetClean==0) return acceptData; //fails Loose cleaning
191  else if (fmax<DBL_MIN) return acceptData;
192  else if(std::fabs(eta)<2.4 && chf/fmax<0.1) return acceptData;
193  else{
194  acceptData.setCutResult( "Cleaning", true );
195  return acceptData;
196  }
197 
198  // We should never arrive here!
199  ATH_MSG_ERROR( "Unknown cut name: " << getCutName( m_cutLevel ) << " in JetCleaningTool" );
200  return acceptData;
201 
202 }
203 
204 //=============================================================================
205 // Calculate the actual accept of each cut individually.
206 //=============================================================================
208  const double hecf,
209  const double larq,
210  const double hecq,
211  //const double time, //in ns
212  const double sumpttrk, //in MeV, same as sumpttrk
213  const double eta, //emscale Eta
214  const double pt, //in MeV, same as sumpttrk
215  const double fmax,
216  const double negE , //in MeV
217  const double AverageLArQF,
218  const int fmaxIndex
219  ) const
220 {
221  asg::AcceptData acceptData (&m_accept);
222  acceptData.setCutResult( "Cleaning", false );
223 
224  // -----------------------------------------------------------
225  // Do the actual selection
226  if (pt<DBL_MIN) return acceptData;
227  const double chf=sumpttrk/pt;
228 
229  //=============================================================
230  //Run-II ugly cuts
231  //=============================================================
232  if(m_doUgly && fmaxIndex==17) return acceptData;
233 
234  //=============================================================
235  //Run-II very loose LLP cuts
236  // From https://indico.cern.ch/event/642438/contributions/2704590/attachments/1514445/2362870/082117a_HCW_NCB_LLP.pdf
237  //=============================================================
238  if (VeryLooseBadLLP == m_cutLevel){
239  if (fmax>0.80) return acceptData;
240  if (emf>0.96) return acceptData;
241  acceptData.setCutResult( "Cleaning", true );
242  return acceptData;
243  }
244 
245  //=============================================================
246  //Run-II loose cuts
247  //=============================================================
248  //Non-collision background & cosmics
249  const bool useLLP = (LooseBadLLP == m_cutLevel); // LLP cleaning cannot use emf...
250  const bool isTrigger = (LooseBadTrigger == m_cutLevel); // trigger cannot use chf
251  const bool useSuperLLP = (SuperLooseBadLLP == m_cutLevel); // other LLP cleaning...
252  if (!useLLP && !useSuperLLP) {
253  if(!isTrigger && emf<0.05 && chf<0.05 && std::fabs(eta)<2) return acceptData;
254  if(emf<0.05 && std::fabs(eta)>=2) return acceptData;
255  }
256  if(fmax>0.99 && std::fabs(eta)<2) return acceptData;
257  //HEC spike-- gone as of 2017!
258  if(hecf>0.5 && std::fabs(hecq)>0.5 && AverageLArQF/65535>0.8) return acceptData;
259  //EM calo noise
260  if(emf>0.95 && std::fabs(larq)>0.8 && std::fabs(eta)<2.8 && AverageLArQF/65535>0.8) return acceptData;
261  // LLP cleaning uses negative energy cut
262  // (https://indico.cern.ch/event/472320/contribution/8/attachments/1220731/1784456/JetTriggerMeeting_20160102.pdf)
263  if (useLLP && std::fabs(negE*0.001)>4 && fmax >0.85) return acceptData;
264  // another LLP cleaning cutting softer on negative energy
265  if (useSuperLLP && std::fabs(negE*0.001)>60) return acceptData;
266 
268  acceptData.setCutResult( "Cleaning", true );
269  return acceptData;
270  }
271 
272  //=============================================================
273  //Run-II tight cuts
274  //=============================================================
275  // NCB monojet-style cut in central, EMF cut in forward
276  if (fmax<DBL_MIN) return acceptData;
277  if(std::fabs(eta)<2.4 && chf/fmax<0.1) return acceptData;
278  //if(std::fabs(eta)>=2.4 && emf<0.1) return acceptData;
279  if(TightBad==m_cutLevel){
280  acceptData.setCutResult( "Cleaning", true );
281  return acceptData;
282  }
283 
284  // We should never arrive here!
285  ATH_MSG_ERROR( "Unknown cut name: " << getCutName( m_cutLevel ) << " in JetCleaningTool" );
286  return acceptData;
287 }
288 
289 
290 void JetCleaningTool::missingVariable(const std::string& varName) const
291 {
292  ATH_MSG_FATAL(Form("JetCleaningTool failed to retrieve a required variable - please confirm that the xAOD::Jet being passed contains the variable named %s",varName.c_str()));
293  throw std::runtime_error(Form("JetCleaningTool failed to retrieve a required variable - please confirm that the xAOD::Jet being passed contains the variable named %s",varName.c_str()));
294 }
295 
297 {
298  std::vector<float> sumPtTrkvec;
299  jet.getAttribute( xAOD::JetAttribute::SumPtTrkPt500, sumPtTrkvec );
300  double sumpttrk = 0;
301  if( ! sumPtTrkvec.empty() ) sumpttrk = sumPtTrkvec[0];
302  // fmax index is not necessarily required
303  // This is only used if doUgly is set
304  // Handle it gracefully if the variable is not present but doUgly is false
305  int FracSamplingMaxIndex = -1;
306  if (!jet.getAttribute(xAOD::JetAttribute::FracSamplingMaxIndex,FracSamplingMaxIndex) && m_doUgly)
307  missingVariable("FracSamplingMaxIndex");
308  // get tight cleaning variables
309  float FracSamplingMax = 0;
310  if (!jet.getAttribute(xAOD::JetAttribute::FracSamplingMax,FracSamplingMax))
311  missingVariable("FracSamplingMax");
312 
313  //start jet cleaning
314  int isJetClean = 0;
315  if( m_useDecorations && m_acc_jetClean.isAvailable(jet) ) { //decoration is already available for all jets
316  isJetClean = m_acc_jetClean(jet);
317  return accept (isJetClean, FracSamplingMaxIndex);
318  }
319  else{ //running over AOD, need to use all variables
320  ATH_MSG_DEBUG("DFCommon jet cleaning variable not available ... Using jet cleaning tool");
321  // Get all of the required variables
322  // Do it this way so we can gracefully handle missing variables (rather than segfaults)
323 
324  float EMFrac = 0;
325  if (!jet.getAttribute(xAOD::JetAttribute::EMFrac,EMFrac))
326  missingVariable("EMFrac");
327 
328  float HECFrac = 0;
329  if (!jet.getAttribute(xAOD::JetAttribute::HECFrac,HECFrac))
330  missingVariable("HECFrac");
331 
332  float LArQuality = 0;
333  if (!jet.getAttribute(xAOD::JetAttribute::LArQuality,LArQuality))
334  missingVariable("LArQuality");
335 
336 
337  float HECQuality = 0;
338  if (!jet.getAttribute(xAOD::JetAttribute::HECQuality,HECQuality))
339  missingVariable("HECQuality");
340 
341 
342  float NegativeE = 0;
343  if (!jet.getAttribute(xAOD::JetAttribute::NegativeE,NegativeE))
344  missingVariable("NegativeE");
345 
346 
347 
348  float AverageLArQF = 0;
349  if (!jet.getAttribute(xAOD::JetAttribute::AverageLArQF,AverageLArQF))
350  missingVariable("AverageLArQF");
351 
352  return accept (EMFrac,
353  HECFrac,
354  LArQuality,
355  HECQuality,
356  sumpttrk,
357  jet.eta(),
358  jet.pt(),
359  FracSamplingMax,
360  NegativeE,
361  AverageLArQF,
362  FracSamplingMaxIndex);}
363 }
364 
366 {
367  ATH_MSG_DEBUG(" Decorating jets with jet cleaning decoration : " << m_jetCleanKey.key());
368 
370 
371  for (const xAOD::Jet *jet : jets) {
372  cleanHandle(*jet) = accept(*jet).getCutResult("Cleaning");
373  }
374 
375  return StatusCode::SUCCESS;
376 
377 }
378 
380 bool JetCleaningTool::containsHotCells( const xAOD::Jet& jet, const unsigned int runNumber) const
381 {
382  // Check if the runNumber contains bad cells
383  std::unordered_map<unsigned int, std::vector<std::unique_ptr<JCT::HotCell>>>::const_iterator hotCells = m_hotCellsMap.find(runNumber);
384  if (hotCells != m_hotCellsMap.end())
385  {
386  // The run contains hot cells
387  // Check if the jet is affected by one of the hot cells
388  for (const std::unique_ptr<JCT::HotCell>& cell : hotCells->second)
389  if (cell->jetAffectedByHotCell(jet))
390  return true;
391  }
392  return false;
393 }
394 
397 {
398  if (s=="SuperLooseBadLLP") return SuperLooseBadLLP;
399  if (s=="VeryLooseBadLLP") return VeryLooseBadLLP;
400  if (s=="LooseBad") return LooseBad;
401  if (s=="LooseBadLLP") return LooseBadLLP;
402  if (s=="LooseBadTrigger") return LooseBadTrigger;
403  if (s=="TightBad") return TightBad;
404  ATH_MSG_ERROR( "Unknown cut level requested: " << s );
405  return UnknownCut;
406 }
407 
408 std::string JetCleaningTool::getCutName( const CleaningLevel c) const
409 {
410  if (c==SuperLooseBadLLP) return "SuperLooseBadLLP";
411  if (c==VeryLooseBadLLP) return "VeryLooseBadLLP";
412  if (c==LooseBad) return "LooseBad";
413  if (c==LooseBadLLP) return "LooseBadLLP";
414  if (c==LooseBadTrigger) return "LooseBadTrigger";
415  if (c==TightBad) return "TightBad";
416  return "UnknownCut";
417 }
418 
419 
422 {
423  if (m_hotCellsFile.empty()) return StatusCode::SUCCESS;
424 
425  // Ensure that the file exists
427  {
428  ATH_MSG_ERROR("Failed to find hot cells file: " << m_hotCellsFile);
429  return StatusCode::FAILURE;
430  }
431 
432  // Now parse the file
433  TEnv readCells;
434  if (readCells.ReadFile(m_hotCellsFile.value().c_str(),kEnvGlobal))
435  {
436  ATH_MSG_ERROR("Cannot read hot cells file: " << m_hotCellsFile);
437  return StatusCode::FAILURE;
438  }
439 
440  // Get the list of run numbers
441  const TString runNumbersString = readCells.GetValue("RunNumbers","");
442  if (runNumbersString=="")
443  {
444  ATH_MSG_ERROR("No RunNumbers field was specified in the hot cells file: " << m_hotCellsFile);
445  return StatusCode::FAILURE;
446  }
447 
448  // Convert into a vector
449  std::vector<unsigned int> runNumbers = JCT::utils::vectorize<unsigned int>(runNumbersString,", ");
450  if (!runNumbers.size())
451  {
452  ATH_MSG_ERROR("RunNumbers field specified, but value is empty or not unsigned ints for hot cells file: " << m_hotCellsFile);
453  return StatusCode::FAILURE;
454  }
455 
456  // Loop over the run numbers
457  for (unsigned int run : runNumbers){
458  std::vector<std::unique_ptr<JCT::HotCell>>& cellVec = m_hotCellsMap[run];
459 
460  // The number of hot cells should be below 100 for a given run...
461  for (size_t iCell = 0; iCell < 100; ++iCell)
462  {
463  const TString baseName = Form("Run%u.Cell%zu.",run,iCell);
464 
465  // Read the cell info
466  const int layer = readCells.GetValue(baseName+"Layer", -1 );
467  const float minEta = readCells.GetValue(baseName+"EtaMin",-10.);
468  const float maxEta = readCells.GetValue(baseName+"EtaMax", 10.);
469  const float minPhi = readCells.GetValue(baseName+"PhiMin",-10.);
470  const float maxPhi = readCells.GetValue(baseName+"PhiMax", 10.);
471 
472  // Check that the input makes sense
473  if (layer < 0 && minEta < -5 && maxEta > 5 && minPhi < -5 && maxPhi > 5)
474  continue;
475  if (layer < 0 || minEta < -5 || maxEta > 5 || minPhi < -5 || maxPhi > 5)
476  {
477  ATH_MSG_ERROR("Partially specified cell - please check the file: " << m_hotCellsFile);
478  ATH_MSG_ERROR(Form("Got Layer=%d, EtaMin=%f, EtaMax=%f, PhiMin=%f, PhiMax=%f",layer,minEta,maxEta,minPhi,maxPhi));
479  return StatusCode::FAILURE;
480  }
481  cellVec.emplace_back(std::make_unique<JCT::HotCell>(layer,minEta,maxEta,minPhi,maxPhi));
482  }
483 
484  // Ensure we found the expected run
485  if (cellVec.empty())
486  {
487  ATH_MSG_ERROR("Specified that Run# " << run << " contains hot cells, but did not find any corresponding cells in the file: " << m_hotCellsFile);
488  return StatusCode::FAILURE;
489  }
490  }
491 
492  // Done
493  return StatusCode::SUCCESS;
494 }
JetCleaningTool::m_jetCleanKey
SG::WriteDecorHandleKey< xAOD::JetContainer > m_jetCleanKey
Definition: JetCleaningTool.h:128
python.selector.AtlRunQuerySelectorLhcOlc.runNumbers
string runNumbers
Definition: AtlRunQuerySelectorLhcOlc.py:586
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
ReadCellNoiseFromCool.cell
cell
Definition: ReadCellNoiseFromCool.py:53
xAOD::JetAttribute::LArQuality
@ LArQuality
Definition: JetAttributes.h:83
JetCleaningTool::TightBad
@ TightBad
Definition: JetCleaningTool.h:53
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::JetAttribute::FracSamplingMax
@ FracSamplingMax
Definition: JetAttributes.h:116
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JetCleaningTool::accept
asg::AcceptData accept(const int isJetClean, const int fmaxIndex) const
The DFCommonJets decoration accept method.
Definition: JetCleaningTool.cxx:143
Helpers.h
JetCleaningTool::m_hotCellsFile
Gaudi::Property< std::string > m_hotCellsFile
Hot cells caching.
Definition: JetCleaningTool.h:132
JetCleaningTool::m_acc_jetClean
SG::AuxElement::ConstAccessor< char > m_acc_jetClean
Definition: JetCleaningTool.h:124
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
JetCleaningTool::initialize
virtual StatusCode initialize() override
Initialize method.
Definition: JetCleaningTool.cxx:116
JCT::HotCell::HotCell
HotCell(const int layer, const float etaMin, const float etaMax, const float phiMin, const float phiMax)
Definition: JetCleaningTool.cxx:60
JetCleaningTool::VeryLooseBadLLP
@ VeryLooseBadLLP
Definition: JetCleaningTool.h:49
JetCleaningTool
Class for selecting jets that pass cleaning cuts.
Definition: JetCleaningTool.h:40
JetCleaningTool::decorate
virtual StatusCode decorate(const xAOD::JetContainer &jets) const override
Decorate a jet collection without otherwise modifying it.
Definition: JetCleaningTool.cxx:365
asg
Definition: DataHandleTestTool.h:28
test_pyathena.pt
pt
Definition: test_pyathena.py:11
run
int run(int argc, char *argv[])
Definition: ttree2hdf5.cxx:28
JetCleaningTool::LooseBad
@ LooseBad
Definition: JetCleaningTool.h:50
xAOD::etaMax
etaMax
Definition: HIEventShape_v2.cxx:46
JetCleaningTool::LooseBadTrigger
@ LooseBadTrigger
Definition: JetCleaningTool.h:52
JetCleaningTool::JetCleaningTool
JetCleaningTool(const std::string &name="JetCleaningTool")
Standard constructor.
Definition: JetCleaningTool.cxx:89
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
JCT::utils::fileExists
bool fileExists(const TString &fileName)
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/Root/Helpers.cxx:91
JetCleaningTool::UnknownCut
@ UnknownCut
Definition: JetCleaningTool.h:54
JetCleaningTool::m_jetContainerName
Gaudi::Property< std::string > m_jetContainerName
Definition: JetCleaningTool.h:127
JetCleaningTool::m_doUgly
Gaudi::Property< bool > m_doUgly
Definition: JetCleaningTool.h:121
JetCleaningTool::CleaningLevel
CleaningLevel
Levels of cut.
Definition: JetCleaningTool.h:47
PUfitVar::maxEta
constexpr float maxEta
Definition: GepMETPufitAlg.cxx:13
JCT::HotCell::m_etaMin
const float m_etaMin
Definition: JetCleaningTool.cxx:60
AsgMessaging.h
JetCleaningTool::~JetCleaningTool
virtual ~JetCleaningTool()
Standard destructor.
xAOD::JetAttribute::HECQuality
@ HECQuality
Definition: JetAttributes.h:80
JCT::HotCell::~HotCell
virtual ~HotCell()
Definition: JetCleaningTool.cxx:56
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
JetCleaningTool::m_cutName
Gaudi::Property< std::string > m_cutName
Name of the cut.
Definition: JetCleaningTool.h:119
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::JetAttribute::EMFrac
@ EMFrac
Definition: JetAttributes.h:112
PixelAthClusterMonAlgCfg.varName
string varName
end cluster ToT and charge
Definition: PixelAthClusterMonAlgCfg.py:117
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
JCT::HotCell::m_ePerSamp
SG::AuxElement::ConstAccessor< std::vector< float > > m_ePerSamp
Definition: JetCleaningTool.cxx:64
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
JetCleaningTool.h
SG::WriteDecorHandle
Handle class for adding a decoration to an object.
Definition: StoreGate/StoreGate/WriteDecorHandle.h:99
JCT
Definition: PhysicsAnalysis/JetMissingEtID/JetSelectorTools/JetSelectorTools/Helpers.h:22
JetCleaningTool::m_accept
asg::AcceptInfo m_accept
Definition: JetCleaningTool.h:129
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
run
Definition: run.py:1
JetCleaningTool::LooseBadLLP
@ LooseBadLLP
Definition: JetCleaningTool.h:51
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
WriteDecorHandle.h
Handle class for adding a decoration to an object.
JetCleaningTool::containsHotCells
bool containsHotCells(const xAOD::Jet &jet, const unsigned int runNumber) const
Hot cell checks.
Definition: JetCleaningTool.cxx:380
JCT::HotCell::jetAffectedByHotCell
bool jetAffectedByHotCell(const xAOD::Jet &jet) const
Definition: JetCleaningTool.cxx:68
xAOD::JetAttribute::AverageLArQF
@ AverageLArQF
Definition: JetAttributes.h:85
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
asg::AsgMessaging
Class mimicking the AthMessaging class from the offline software.
Definition: AsgMessaging.h:40
xAOD::JetAttribute::SumPtTrkPt500
@ SumPtTrkPt500
Definition: JetAttributes.h:108
JCT::HotCell::m_layer
const int m_layer
Definition: JetCleaningTool.cxx:59
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
JCT::HotCell::m_etaMax
const float m_etaMax
Definition: JetCleaningTool.cxx:61
LArCellBinning.etaMin
etaMin
Definition: LArCellBinning.py:84
asg::AcceptData::setCutResult
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:134
asg::AcceptData::getCutResult
bool getCutResult(const std::string &cutName) const
Get the result of a cut, based on the cut name (safer)
Definition: AcceptData.h:98
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ReadDecorHandle.h
Handle class for reading a decoration on an object.
JetCleaningTool::m_cutLevel
CleaningLevel m_cutLevel
Definition: JetCleaningTool.h:120
JCT::HotCell::m_phiMin
const float m_phiMin
Definition: JetCleaningTool.cxx:62
JetCleaningTool::getCutLevel
CleaningLevel getCutLevel(const std::string &) const
Helpers for cut names.
Definition: JetCleaningTool.cxx:396
JCT::HotCell::m_phiMax
const float m_phiMax
Definition: JetCleaningTool.cxx:63
xAOD::JetAttribute::HECFrac
@ HECFrac
Definition: JetAttributes.h:113
JetCleaningTool::readHotCells
StatusCode readHotCells()
Hot cells reading helper.
Definition: JetCleaningTool.cxx:421
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
JetCleaningTool::m_hotCellsMap
std::unordered_map< unsigned int, std::vector< std::unique_ptr< JCT::HotCell > > > m_hotCellsMap
Definition: JetCleaningTool.h:133
xAOD::JetAttribute::FracSamplingMaxIndex
@ FracSamplingMaxIndex
Definition: JetAttributes.h:117
JetCleaningTool::missingVariable
void missingVariable(const std::string &varName) const
Definition: JetCleaningTool.cxx:290
asg::AcceptData
Definition: AcceptData.h:30
python.compressB64.c
def c
Definition: compressB64.py:93
JetCleaningTool::getCutName
std::string getCutName(const CleaningLevel) const
Definition: JetCleaningTool.cxx:408
xAOD::JetAttribute::NegativeE
@ NegativeE
Definition: JetAttributes.h:84
JetCleaningTool::m_useDecorations
Gaudi::Property< bool > m_useDecorations
Definition: JetCleaningTool.h:122
JetCleaningTool::SuperLooseBadLLP
@ SuperLooseBadLLP
Definition: JetCleaningTool.h:48
asg::AcceptInfo::addCut
int addCut(const std::string &cutName, const std::string &cutDescription)
Add a cut; returning the cut position.
Definition: AcceptInfo.h:53