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:
66 
67  // Then the tools
69  ElEffCorrectionTool(
70  "AsgElectronEfficiencyCorrectionTool/ElEffCorrectionTool");
71  ANA_CHECK(ElEffCorrectionTool.setProperty("IdKey", "Medium"));
72  ANA_CHECK(ElEffCorrectionTool.setProperty("ForceDataType", 1));
73  ANA_CHECK(ElEffCorrectionTool.setProperty("OutputLevel", mylevel));
74  ANA_CHECK(ElEffCorrectionTool.setProperty("CorrelationModel", "FULL"));
75  ANA_CHECK(ElEffCorrectionTool.setProperty("UseRandomRunNumber", false));
76  ANA_CHECK(ElEffCorrectionTool.initialize());
77 
78  // Then open the file(s)
79  ANA_CHECK(event.readFrom(ifile.get()));
80  ANA_MSG_INFO("Number of available events to read in: "
81  << static_cast<long long int>(event.getEntries()));
82 
83  // Decide how many events to run over:
84  long long int entries = event.getEntries();
85  if (argc > 2) {
86  const long long int e = atoll(argv[2]);
87  if (e < entries) {
88  entries = e;
89  }
90  }
91  ANA_MSG_INFO("Number actual events to read in: " << entries);
92 
93  // Loop over the events:
94  for (long long int entry = 0; entry < entries; ++entry) {
95  event.getEntry(entry);
96  ANA_MSG_INFO(" \n ==> Event " << entry);
97 
98  const xAOD::ElectronContainer* electrons = nullptr;
99  ANA_CHECK(event.retrieve(electrons, "Electrons"));
100 
101  for (const xAOD::Electron* el : *electrons) {
102  const xAOD::CaloCluster* cluster = el->caloCluster();
103  if (!cluster) {
104  ANA_MSG_ERROR("ERROR no cluster associated to the Electron \n");
106  }
107  if (el->pt() < 7000)
108  continue; // skip electrons outside of recommendations
109  if (std::abs(cluster->etaBE(2)) >= 2.47) {
110  continue;
111  }
112 
113  int index = ElEffCorrectionTool->systUncorrVariationIndex(*el);
114  /*
115  * Set up the systematic variations
116  */
117  bool isToys = false;
118  double nominalSF{};
119  double totalNeg{};
120  double totalPos{};
121  ANA_CHECK(
123  ElEffCorrectionTool, *el, nominalSF, totalPos, totalNeg, isToys) ==
124  0);
125 
126  ANA_MSG_INFO("===> electron : Pt = "
127  << el->pt() << " : eta = " << el->eta()
128  << " : Bin index = " << index << " : SF = " << nominalSF
129  << " + " << totalPos << " - " << totalNeg << " <===");
130  }
131  }
132 
133  ANA_MSG_INFO("===> DONE <===\n");
134  return 0;
135 }
TestSUSYToolsAlg.ifile
ifile
Definition: TestSUSYToolsAlg.py:92
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
LArCellConditions.argv
argv
Definition: LArCellConditions.py:112
xAOD::CaloCluster_v1::etaBE
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
Definition: CaloCluster_v1.cxx:644
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:59
POOL::TEvent::readFrom
StatusCode readFrom(TFile *file)
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:132
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
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:123
asg::StandaloneToolHandle
an "initializing" ToolHandle for stand-alone applications
Definition: StandaloneToolHandle.h:44
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:20
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
xAOD::Electron_v1
Definition: Electron_v1.h:34
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
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:73
entries
double entries
Definition: listroot.cxx:49
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:81
xAOD::Init
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition: Init.cxx:31