ATLAS Offline Software
CalibrationDataInterfaceTester.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CalibrationDataInterfaceTester.cxx, (c) ATLAS Detector software
8 
9 
11 #include "JetEvent/JetCollection.h"
12 #include "JetEvent/Jet.h"
13 #include "JetTagInfo/TruthInfo.h"
14 #include "AsgTools/AnaToolHandle.h"
15 #include <algorithm>
16 #include <utility>
17 #include <cctype>
18 
19 using std::string;
21 
22 //================ Constructor =================================================
23 
25  : AthAlgorithm(name, pSvcLocator)
26 {
27  // template for property declaration
28  declareProperty("JetCollection", m_jetCollection, "name of the jet collection to be used");
29  declareProperty("Tagger", m_tagger, "name of the tagging algorithm to be used");
30  declareProperty("OperatingPoint", m_operatingPoint, "name of the tagging algorithm operating point to be used");
31  declareProperty("CalibrationUncertainty", m_calibrationUncertainty, "calibration uncertainty result");
32  declareProperty("CalibrationInterface", m_calibrationInterface, "interface tool instance name");
33 }
34 
35 //================ Initialisation =================================================
36 
38 {
39 
40 
41  ATH_CHECK(m_JetCollectionKey.initialize());
42 
43  StatusCode sc = m_calibrationInterface.retrieve();
44  if (sc.isFailure()) {
45  ATH_MSG_ERROR("initialize() in " << name() << ": unable to retrieve "
46  << "calibration interface tool!");
47  return sc;
48  }
49 
50  std::transform(m_calibrationUncertainty.begin(), m_calibrationUncertainty.end(),
51  m_calibrationUncertainty.begin(), tolower);
52  if (m_calibrationUncertainty.find("total") != string::npos) {
53  m_uncertaintyType = CalibrationDataInterfaceTool::Total;
54  } else if (m_calibrationUncertainty.find("syst") != string::npos) {
55  m_uncertaintyType = CalibrationDataInterfaceTool::Systematic;
56  } else if (m_calibrationUncertainty.find("stat") != string::npos) {
58  } else {
59  m_uncertaintyType = CalibrationDataInterfaceTool::None;
60  }
61 
62  ATH_MSG_INFO("initialize() successful in " << name());
63  return StatusCode::SUCCESS;
64 }
65 
66 //================ Execution ====================================================
67 
69 {
70  // Code entered here will be executed once per event
71 
72  // retrieve the desired jet collection
73  EventContext& ctx = Gaudi::Hive::currentContext();
74  SG::ReadHandle<JetCollection> jets(m_JetCollectionKey, ctx);
75  ATH_CHECK(jets.isValid());
76 
77  int njtag = (*jets).size();
78  ATH_MSG_INFO("JetCollection " << m_jetCollection
79  << " found with " << njtag << " jets.");
80 
81  for (auto jetItr : jets) {
82  // --- get btagging weight for the tagger under consideration
83  double weight = (*jetItr)->getFlavourTagWeight(m_tagger);
84 
85  // --- get the true label of the jet from MC Truth:
86  const Analysis::TruthInfo* mcinfo = (*jetItr)->tagInfo<Analysis::TruthInfo>("TruthInfo");
87  if (! mcinfo) {
88  ATH_MSG_DEBUG("could not find TruthInfo for matching jet");
89  continue;
90  }
91  string label = mcinfo->jetTruthLabel();
92 
93  std::pair<double, double> sfResult =
94  m_calibrationInterface->getScaleFactor(**jetItr, label, m_operatingPoint, m_uncertaintyType);
95  std::pair<double, double> effResult =
96  m_calibrationInterface->getEfficiency(**jetItr, label, m_operatingPoint, m_uncertaintyType);
97 
98  ATH_MSG_DEBUG("Jet with " << m_tagger << " weight: " << weight);
99  ATH_MSG_DEBUG(" label: " << label);
100  ATH_MSG_DEBUG(" SF (unc.): " << sfResult.first
101  << "(" << sfResult.second << ")");
102  ATH_MSG_DEBUG(" eff (unc.): " << effResult.first << "(" << effResult.second << ")");
103 
104  }
105 
106  return StatusCode::SUCCESS;
107 }
108 
109 //============================================================================================
110 
Analysis::CalibrationDataInterfaceTester::initialize
StatusCode initialize() override
standard Athena-Algorithm method
Definition: CalibrationDataInterfaceTester.cxx:37
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
CalibrationDataInterfaceTester.h
Analysis::CalibrationDataInterfaceTester::m_operatingPoint
Gaudi::Property m_operatingPoint
tagger operating point
Definition: CalibrationDataInterfaceTester.h:54
Analysis::ICalibrationDataInterfaceTool::Statistical
@ Statistical
Definition: ICalibrationDataInterfaceTool.h:28
Analysis::CalibrationDataInterfaceTester::m_tagger
Gaudi::Property m_tagger
tagger name
Definition: CalibrationDataInterfaceTester.h:51
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
Analysis::CalibrationDataInterfaceTester::m_calibrationUncertainty
std::string m_calibrationUncertainty
calibration uncertainty result
Definition: CalibrationDataInterfaceTester.h:57
Analysis::CalibrationDataInterfaceTester::m_jetCollection
Gaudi::Property m_jetCollection
jet collection name
Definition: CalibrationDataInterfaceTester.h:48
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Analysis::CalibrationDataInterfaceTester::execute
StatusCode execute() override
standard Athena-Algorithm method
Definition: CalibrationDataInterfaceTester.cxx:68
JetCollection.h
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
Analysis::CalibrationDataInterfaceTester::CalibrationDataInterfaceTester
CalibrationDataInterfaceTester(const std::string &name, ISvcLocator *pSvcLocator)
Standard Athena-Algorithm Constructor.
Definition: CalibrationDataInterfaceTester.cxx:24
tolower
void tolower(std::string &s)
Definition: AthenaSummarySvc.cxx:113
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthAlgorithm
Definition: AthAlgorithm.h:47
AnaToolHandle.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TruthInfo.h
Analysis::ICalibrationDataInterfaceTool::None
@ None
Definition: ICalibrationDataInterfaceTool.h:28
Analysis::TruthInfo::jetTruthLabel
const std::string & jetTruthLabel() const
return the truth label
Definition: TruthInfo.h:79
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
Analysis::TruthInfo
Class TruthInfo: Class to store more truth information about a JetTag (e.g.
Definition: TruthInfo.h:19
Jet.h
Analysis::ICalibrationDataInterfaceTool::Total
@ Total
Definition: ICalibrationDataInterfaceTool.h:28
Analysis::ICalibrationDataInterfaceTool::Systematic
@ Systematic
Definition: ICalibrationDataInterfaceTool.h:28
Analysis::CalibrationDataInterfaceTool
Definition: CalibrationDataInterfaceTool.h:66
Analysis::CalibrationDataInterfaceTester::m_calibrationInterface
ToolHandle< ICalibrationDataInterfaceTool > m_calibrationInterface
pointer to the CalibrationDataInterfaceTool
Definition: CalibrationDataInterfaceTester.h:61