48{
50 using namespace asg::testEgChargeCorr;
52 MSG::Level mylevel=MSG::INFO;
53 setMsgLevel(mylevel);
55
56
57 if (argc < 3) {
60 " Usage: %s [xAOD file name] [Correction File name]",
62 return 1;
63 }
64
65 double SF_chargeID = 0;
66 int SF_nevents = 0;
67
68 double n_chargeID = 0;
69 double n_chargeMisID = 0;
70
71
73
74
76 const TString corrFileName =
argv[2];
77
79 std::unique_ptr<TFile>
ifile(TFile::Open(fileName,
"READ"));
81
82
83
87 "Number of events in the file: %i",
88 static_cast<int>(
event.getEntries()));
89
90 std::cout << "==" << std::endl;
91
92
93 Long64_t
entries =
event.getEntries();
94 if (argc > 2) {
95 const Long64_t
e = atoll(argv[2]);
98 }
99 }
100
101
103 ANA_CHECK(myEgCorrections.setProperty(
"OutputLevel", mylevel));
104
106 corrFileName.Data();
107 ANA_CHECK(myEgCorrections.setProperty(
"CorrectionFileName", inputFile));
108 ANA_CHECK(myEgCorrections.setProperty(
"ForceDataType", 1));
109
110 ANA_CHECK(myEgCorrections.setProperty(
"DefaultRandomRunNumber",
111 (unsigned int)311481));
112 ANA_CHECK(myEgCorrections.setProperty(
"UseRandomRunNumber",
false));
114
118 m_LHToolTight->setProperty("primaryVertexContainer", "PrimaryVertices"));
119 m_LHToolTight
120 ->setProperty("ConfigFile",
121 "ElectronPhotonSelectorTools/offline/mc15_20160512/"
122 "ElectronLikelihoodLooseOfflineConfig2016_CutBL_Smooth.conf")
123 .ignore();
125
126
128
129
130
131
132 std::cout << "==" << std::endl;
133
134
136
139
140
141 event.getEntry(entry);
142
143 if (entry < 10)
144 std::cout << "=================NEXT EVENT=========================="
145 << std::endl;
147
150
153
154
155 std::pair<xAOD::ElectronContainer*, xAOD::ShallowAuxContainer*>
157
158
162
164
167 for (; el_it != el_it_last; ++el_it, ++
i) {
168
170 if (
el->pt() < 20000)
171 continue;
172
173 bool LHacc{ m_LHToolTight->
accept(el) };
174 std::cout << "acc: " << LHacc << std::endl;
175 if (!m_LHToolTight->
accept(el))
176 continue;
177 double clusAbsEta = std::abs(
el->caloCluster()->etaBE(2));
178 if ( clusAbsEta > 1.37 && (clusAbsEta < 1.52 || clusAbsEta > 2.47) )
179 continue;
180
181 SF_nevents++;
182
184
185 if (myEgCorrections.getEfficiencyScaleFactor(*el, SF) !=
188 return EXIT_FAILURE;
189 }
190
191 if (myEgCorrections.applyEfficiencyScaleFactor(*el) !=
194 return EXIT_FAILURE;
195 }
196
197 Info(
APP_NAME,
"===>>> Resulting SF (from get function) %f, (from apply function) %f",
198 SF, sfAcc(*el));
199
200 SF_chargeID = SF_chargeID +
SF;
201
202 for (const auto& sys : recSysts) {
203 double systematic = 0;
204
205
206 ANA_CHECK(myEgCorrections.applySystematicVariation({ sys }));
207
208 if (myEgCorrections.getEfficiencyScaleFactor(*el, systematic) ==
211 "%f Result %f Systematic value %f ",
212 SF,
213 systematic,
214 systematic - SF);
215 }
216 }
217 ANA_CHECK(myEgCorrections.applySystematicVariation({}));
218
219
220 int truthcharge = false;
222 if (
el->charge() * truthcharge < 0) {
224 } else
226 }
227
228
229 }
230 Info(
APP_NAME,
"===>>> done processing event #%lld ", entry);
231 Info(
APP_NAME,
"===>>> processed #%d electrons", SF_nevents);
232 Info(
APP_NAME,
"===>>> compared to #%f (from Charge MisId SF)", SF_chargeID);
233 Info(
APP_NAME,
"===>>> compared to #%f and #%f ", n_chargeID, n_chargeMisID);
234
235
236 return 0;
237}
@ Ok
The correction was done successfully.
Class to wrap a set of SystematicVariations.
DataModel_detail::iterator< DataVector > iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Helper class to provide constant type-safe access to aux data.
Tool for accessing xAOD files outside of Athena.
@ kClassAccess
Access auxiliary data using the aux containers.
CP::CorrectionCode getEleTruthCharge(const xAOD::Electron &ele, int &truthcharge)
Get the charge of the original electron.
Error
The different types of error that can be flagged in the L1TopoRDO.
const float SF[NF]
Cross sections for Fluor.
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.
Electron_v1 Electron
Definition of the current "egamma version".