ATLAS Offline Software
Loading...
Searching...
No Matches
testEgEfficiencyCorrFwd.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5// package includes
7#include "SFHelpers.h"
8// System include(s):
9#include <memory>
10// ROOT include(s):
11#include <TFile.h>
12// Infrastructure include(s):
13#include "xAODRootAccess/Init.h"
16
17// EDM include(s):
18#include "xAODEgamma/Electron.h"
20
24// To disable sending data
26
27namespace asg {
28ANA_MSG_HEADER(testEgEfficiencyCorrFwd)
29ANA_MSG_SOURCE(testEgEfficiencyCorrFwd, "")
30}
31
32int
33main(int argc, char* argv[])
34{
35
37 // The application's name:
38 const char* APP_NAME = argv[0];
39 using namespace asg::testEgEfficiencyCorrFwd;
41 MSG::Level mylevel = MSG::INFO;
42 setMsgLevel(mylevel);
43 msg().setName(APP_NAME);
44
45 // Check if we received a file name:
46 if (argc < 2) {
47 ANA_MSG_ERROR(APP_NAME << "No file name received!");
50 << " Usage: <<APP_NAME << [xAOD file name] [Num of events to use]");
51 return 1;
52 }
53
54 // Initialise the application:
56
57 // Open the input file:
58 const TString fileName = argv[1];
59 ANA_MSG_INFO("Opening file: " << fileName.Data());
60 std::unique_ptr<TFile> ifile(TFile::Open(fileName, "READ"));
61 ANA_CHECK(ifile.get());
62
63 // Create a TEvent object:
64 xAOD::TEvent event;
65
66 // Then the tools
67 std::vector<std::string> id_configFiles{
68 "ElectronEfficiencyCorrection/2012/offline/"
69 "efficiencySF.offline.FwdTight.2012.8TeV.rel17p2.GEO21.v02.root"
70 }; // we don't support keys for fwd electrons, yet. Our latest file is 2012,
71 // still
73 "AsgElectronEfficiencyCorrectionTool/ElEffCorrectionTool");
75 ElEffCorrectionTool.setProperty("CorrectionFileNameList", id_configFiles));
76 ANA_CHECK(ElEffCorrectionTool.setProperty("ForceDataType", 1));
77 ANA_CHECK(ElEffCorrectionTool.setProperty("OutputLevel", mylevel));
78 ANA_CHECK(ElEffCorrectionTool.setProperty("CorrelationModel", "FULL"));
79 ANA_CHECK(ElEffCorrectionTool.setProperty("UseRandomRunNumber", false));
80 ANA_CHECK(ElEffCorrectionTool.initialize());
81
82 // Then open the file(s)
83 ANA_CHECK(event.readFrom(ifile.get()));
84 ANA_MSG_INFO("Number of available events to read in: "
85 << static_cast<long long int>(event.getEntries()));
86
87 // Decide how many events to run over:
88 long long int entries = event.getEntries();
89 if (argc > 2) {
90 const long long int e = atoll(argv[2]);
91 if (e < entries) {
92 entries = e;
93 }
94 }
95 ANA_MSG_INFO("Number actual events to read in: " << entries);
96
97 // Loop over the events:
98 for (long long int entry = 0; entry < entries; ++entry) {
99 event.getEntry(entry);
100 ANA_MSG_INFO(" \n ==> Event " << entry);
101
102 const xAOD::ElectronContainer* electrons = nullptr;
103 ANA_CHECK(event.retrieve(electrons, "ForwardElectrons"));
104
105 for (const xAOD::Electron* el : *electrons) {
106 if (el->pt() < 20000)
107 continue; // skip electrons outside of recommendations
108 if (fabs(el->caloCluster()->eta()) < 2.5)
109 continue; // skip electrons outside of recommendations
110 int index = ElEffCorrectionTool->systUncorrVariationIndex(*el);
111 /*
112 * Set up the systematic variations
113 */
114 bool isToys = false;
115 double nominalSF{};
116 double totalNeg{};
117 double totalPos{};
118 ANA_CHECK(
120 ElEffCorrectionTool, *el, nominalSF, totalPos, totalNeg, isToys) ==
121 0);
122
123 ANA_MSG_INFO("===> electron : Pt = "
124 << el->pt() << " : eta = " << el->eta()
125 << " : Bin index = " << index << " : SF = " << nominalSF
126 << " + " << totalPos << " - " << totalNeg << " <===");
127 }
128 }
129
130 ANA_MSG_INFO("===> DONE <===\n");
131 return 0;
132}
#define APP_NAME
macros for messaging and checking status codes
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
#define ANA_CHECK(EXP)
check whether the given expression was successful
#define ANA_MSG_HEADER(NAME)
for standalone code this creates a new message category
#define ANA_MSG_SOURCE(NAME, TITLE)
the source code part of ANA_MSG_SOURCE
#define ANA_CHECK_SET_TYPE(TYPE)
set the type for ANA_CHECK to report failures
an "initializing" ToolHandle for stand-alone applications
StatusCode setProperty(const std::string &name, T2 &&value)
StatusCode initialize()
initialize the tool, will fail if the tool was already initialized
Tool for accessing xAOD files outside of Athena.
static void enableDataSubmission(::Bool_t value)
Function for turning data submission on/off.
int main()
Definition hello.cxx:18
double entries
Definition listroot.cxx:49
int result(asg::StandaloneToolHandle< IAsgElectronEfficiencyCorrectionTool > &tool, const xAOD::Electron &el, double &nominalSF, double &totalPos, double &totalNeg, const bool isToys)
Definition SFHelpers.cxx:20
Definition index.py:1
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition Init.cxx:31
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
Electron_v1 Electron
Definition of the current "egamma version".
MsgStream & msg
Definition testRead.cxx:32