ATLAS Offline Software
Namespaces | Functions
testEgEfficiencyCorr.cxx File Reference
#include "ElectronEfficiencyCorrection/AsgElectronEfficiencyCorrectionTool.h"
#include "SFHelpers.h"
#include <memory>
#include <TFile.h>
#include "xAODRootAccess/Init.h"
#include "xAODRootAccess/TEvent.h"
#include "xAODRootAccess/TStore.h"
#include "xAODEgamma/Electron.h"
#include "xAODEgamma/ElectronContainer.h"
#include "AsgMessaging/MessageCheck.h"
#include "AsgMessaging/MsgStream.h"
#include "AsgTools/StandaloneToolHandle.h"
#include "xAODRootAccess/tools/TFileAccessTracer.h"

Go to the source code of this file.

Namespaces

 asg
 

Functions

int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 33 of file testEgEfficiencyCorr.cxx.

34 {
35 
37  // The application's name:
38  const char* APP_NAME = argv[0];
39 
40  using namespace asg::testEgEfficiencyCorr;
41  ANA_CHECK_SET_TYPE(int);
42  MSG::Level mylevel = MSG::INFO;
43  setMsgLevel(mylevel);
44  msg().setName(APP_NAME);
45 
46  // Check if we received a file name:
47  if (argc < 2) {
48  ANA_MSG_ERROR(APP_NAME << "No file name received!");
50  APP_NAME
51  << " Usage: <<APP_NAME << [xAOD file name] [Num of events to use]");
52  return 1;
53  }
54 
55  // Initialise the application:
57 
58  // Open the input file:
59  const TString fileName = argv[1];
60  ANA_MSG_INFO("Opening file: " << fileName.Data());
61  std::unique_ptr<TFile> ifile(TFile::Open(fileName, "READ"));
62  ANA_CHECK(ifile.get());
63 
64  // Create a TEvent object:
67 
68  // Then the tools
70  ElEffCorrectionTool(
71  "AsgElectronEfficiencyCorrectionTool/ElEffCorrectionTool");
72  ANA_CHECK(ElEffCorrectionTool.setProperty("IdKey", "Medium"));
73  ANA_CHECK(ElEffCorrectionTool.setProperty("ForceDataType", 1));
74  ANA_CHECK(ElEffCorrectionTool.setProperty("OutputLevel", mylevel));
75  ANA_CHECK(ElEffCorrectionTool.setProperty("CorrelationModel", "FULL"));
76  ANA_CHECK(ElEffCorrectionTool.setProperty("UseRandomRunNumber", false));
77  ANA_CHECK(ElEffCorrectionTool.initialize());
78 
79  // Then open the file(s)
80  ANA_CHECK(event.readFrom(ifile.get()));
81  ANA_MSG_INFO("Number of available events to read in: "
82  << static_cast<long long int>(event.getEntries()));
83 
84  // Decide how many events to run over:
85  long long int entries = event.getEntries();
86  if (argc > 2) {
87  const long long int e = atoll(argv[2]);
88  if (e < entries) {
89  entries = e;
90  }
91  }
92  ANA_MSG_INFO("Number actual events to read in: " << entries);
93 
94  // Loop over the events:
95  for (long long int entry = 0; entry < entries; ++entry) {
96  event.getEntry(entry);
97  ANA_MSG_INFO(" \n ==> Event " << entry);
98 
99  const xAOD::ElectronContainer* electrons = nullptr;
100  ANA_CHECK(event.retrieve(electrons, "Electrons"));
101 
102  for (const xAOD::Electron* el : *electrons) {
103  const xAOD::CaloCluster* cluster = el->caloCluster();
104  if (!cluster) {
105  ANA_MSG_ERROR("ERROR no cluster associated to the Electron \n");
107  }
108  if (el->pt() < 7000)
109  continue; // skip electrons outside of recommendations
110  if (std::abs(cluster->etaBE(2)) >= 2.47) {
111  continue;
112  }
113 
114  int index = ElEffCorrectionTool->systUncorrVariationIndex(*el);
115  /*
116  * Set up the systematic variations
117  */
118  bool isToys = false;
119  double nominalSF{};
120  double totalNeg{};
121  double totalPos{};
122  ANA_CHECK(
124  ElEffCorrectionTool, *el, nominalSF, totalPos, totalNeg, isToys) ==
125  0);
126 
127  ANA_MSG_INFO("===> electron : Pt = "
128  << el->pt() << " : eta = " << el->eta()
129  << " : Bin index = " << index << " : SF = " << nominalSF
130  << " + " << totalPos << " - " << totalNeg << " <===");
131  }
132  }
133 
134  ANA_MSG_INFO("===> DONE <===\n");
135  return 0;
136 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
SGTest::store
TestStore store
Definition: TestStore.cxx:23
index
Definition: index.py:1
SFHelpers::result
int result(asg::StandaloneToolHandle< IAsgElectronEfficiencyCorrectionTool > &tool, const xAOD::Electron &el, double &nominalSF, double &totalPos, double &totalNeg, const bool isToys)
Definition: SFHelpers.cxx:20
xAOD::TFileAccessTracer::enableDataSubmission
static void enableDataSubmission(::Bool_t value)
Function for turning data submission on/off.
Definition: TFileAccessTracer.cxx:281
ANA_MSG_ERROR
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:294
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
xAOD::CaloCluster_v1::etaBE
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
Definition: CaloCluster_v1.cxx:628
CP::CorrectionCode::Error
@ Error
Some error happened during the object correction.
Definition: CorrectionCode.h:36
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:62
POOL::TEvent::readFrom
StatusCode readFrom(TFile *file)
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:133
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
POOL::TEvent::getEntries
long getEntries()
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:124
asg::StandaloneToolHandle
an "initializing" ToolHandle for stand-alone applications
Definition: StandaloneToolHandle.h:44
LArCellNtuple.argv
argv
Definition: LArCellNtuple.py:152
ANA_MSG_INFO
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:290
APP_NAME
#define APP_NAME
Definition: BoostedXbbTag.cxx:23
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:19
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
xAOD::Electron_v1
Definition: Electron_v1.h:34
xAOD::TStore
A relatively simple transient store for objects created in analysis.
Definition: TStore.h:47
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
ANA_CHECK_SET_TYPE
#define ANA_CHECK_SET_TYPE(TYPE)
set the type for ANA_CHECK to report failures
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:314
POOL::TEvent::retrieve
StatusCode retrieve(const T *&obj)
Definition: PhysicsAnalysis/POOLRootAccess/POOLRootAccess/TEvent.h:74
entries
double entries
Definition: listroot.cxx:49
LArCellNtuple.ifile
string ifile
Definition: LArCellNtuple.py:133
jobOptions.fileName
fileName
Definition: jobOptions.SuperChic_ALP2.py:39
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
xAOD::TEvent
Tool for accessing xAOD files outside of Athena.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:85
xAOD::Init
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition: Init.cxx:31