ATLAS Offline Software
Loading...
Searching...
No Matches
Root::TElectronEfficiencyCorrectionTool Class Reference

#include <TElectronEfficiencyCorrectionTool.h>

Inheritance diagram for Root::TElectronEfficiencyCorrectionTool:
Collaboration diagram for Root::TElectronEfficiencyCorrectionTool:

Classes

struct  Result
struct  HistEdge

Public Types

using HistArray = std::vector<std::unique_ptr<TH1>>

Public Member Functions

 TElectronEfficiencyCorrectionTool (const char *name="TElectronEfficiencyCorrectionTool")
 Standard constructor.
 ~TElectronEfficiencyCorrectionTool ()=default
 Standard destructor.
void addFileName (const std::string &val)
 This is more of an utility so the initialize is different wrt to an athena component.
void bookToyMCScaleFactors (const int nToyMC)
 Running these before the initialize will setup the booking of toys.
void bookCombToyMCScaleFactors (const int nToyMC)
int initialize ()
 Initialize this class.
int calculate (const PATCore::ParticleDataType::DataType dataType, const unsigned int runnumber, const double cluster_eta, const double et, Result &result, const bool onlyTotal=false) const
 The main calculate method: dataType PATCore::ParticleDataType::DataType (e.g DATA,FULL etc) @ runnumber the run number.
int getNbins (std::map< float, std::vector< float > > &ptEta) const
 Helpers to get the binning of the uncertainties in a std::map (pt, eta).
int getNSyst () const
 get number of systematics
void setSeed (const unsigned long int seed)
 Set the Random Seed.
bool uncorrEmpty (const PATCore::ParticleDataType::DataType dataType)
 Check if stat+uncorr has input.
void setLevel (MSG::Level lvl)
 Change the current logging level.
Functions providing the same interface as AthMessaging
bool msgLvl (const MSG::Level lvl) const
 Test the output level of the object.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.

Private Member Functions

int getHistograms ()
 Load all histograms from the input file(s).
int setupHistogramsInFolder (const TObjArray &dirNameArray, int lastIdx)
bool setupUncorrToySyst (std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, std::vector< std::vector< HistArray > > &uncorrToyMCSyst)
std::vector< HistArraybuildToyMCTable (const std::vector< TH1 * > &sf, const std::vector< TH1 * > &eig, const std::vector< TH1 * > &stat, const std::vector< TH1 * > &uncorr, const std::vector< std::vector< TH1 * > > &corr)
std::vector< TH2 * > buildSingleToyMC (const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, int &randomCounter)
TH2 * buildSingleCombToyMC (const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, const int nSys, int &randomCounter)
void setupTempMapsHelper (TH1 *obj, std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, int &seenSystematics)
int setup (const std::vector< TH1 * > &hists, std::vector< HistArray > &histList, std::vector< unsigned int > &beginRunNumberList, std::vector< unsigned int > &endRunNumberList, const int runNumBegin, const int runNumEnd) const
 Fill and interpret the setup, depending on which histograms are found in the input file(s).
void initMessaging () const
 Initialize our message level and MessageSvc.

Static Private Member Functions

static void fillHistEdges (const std::vector< HistArray > &sfPerPeriodHist, std::vector< std::vector< HistEdge > > &sfPerPeriodEdges)

Private Attributes

bool m_doToyMC
 Flag to control Toys.
bool m_doCombToyMC
int m_nToyMC
 The number of toys.
unsigned long int m_seed
 The Random seed.
int m_nSysMax
 Maximum number of systematics.
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFull
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFast
std::vector< std::string > m_corrFileNameList
 The list of file name(s).
std::vector< unsigned int > m_begRunNumberList
 List of run numbers where histograms become valid for full simulation.
std::vector< unsigned int > m_endRunNumberList
 List of run numbers where histograms stop being valid for full simulation.
std::vector< unsigned int > m_begRunNumberListFastSim
 List of run numbers where histograms become valid for fast simulation.
std::vector< unsigned int > m_endRunNumberListFastSim
 List of run numbers where histograms stop being valid for fast simulation.
std::vector< std::vector< HistArray > > m_histList
 List of histograms for full Geant4 simulation.
std::vector< std::vector< HistEdge > > m_histEdges
std::vector< std::vector< HistArray > > m_sysList
std::vector< std::vector< HistArray > > m_fastHistList
 List of histograms for fast simulation.
std::vector< std::vector< HistEdge > > m_fastHistEdges
std::vector< std::vector< HistArray > > m_fastSysList
TRandom3 m_Rndm
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels).
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging).

Detailed Description

Definition at line 35 of file TElectronEfficiencyCorrectionTool.h.

Member Typedef Documentation

◆ HistArray

using Root::TElectronEfficiencyCorrectionTool::HistArray = std::vector<std::unique_ptr<TH1>>

Definition at line 39 of file TElectronEfficiencyCorrectionTool.h.

Constructor & Destructor Documentation

◆ TElectronEfficiencyCorrectionTool()

TElectronEfficiencyCorrectionTool::TElectronEfficiencyCorrectionTool ( const char * name = "TElectronEfficiencyCorrectionTool")

Standard constructor.

Definition at line 72 of file TElectronEfficiencyCorrectionTool.cxx.

74 : asg::AsgMessaging(std::string(name))
75 , m_doToyMC(false)
76 , m_doCombToyMC(false)
77 , m_nToyMC(0)
78 , m_seed(0)
79 , m_nSysMax(0)
82 , m_Rndm()
83{
84}
std::vector< std::vector< HistArray > > m_fastHistList
List of histograms for fast simulation.
std::vector< std::vector< HistArray > > m_histList
List of histograms for full Geant4 simulation.

◆ ~TElectronEfficiencyCorrectionTool()

Root::TElectronEfficiencyCorrectionTool::~TElectronEfficiencyCorrectionTool ( )
default

Standard destructor.

Member Function Documentation

◆ addFileName()

void Root::TElectronEfficiencyCorrectionTool::addFileName ( const std::string & val)
inline

This is more of an utility so the initialize is different wrt to an athena component.

Add an input file with the auxiliary measurement needed before we call initialize

Definition at line 66 of file TElectronEfficiencyCorrectionTool.h.

66 {
67 m_corrFileNameList.push_back(val);
68 }
std::vector< std::string > m_corrFileNameList
The list of file name(s).

◆ bookCombToyMCScaleFactors()

void Root::TElectronEfficiencyCorrectionTool::bookCombToyMCScaleFactors ( const int nToyMC)
inline

Definition at line 75 of file TElectronEfficiencyCorrectionTool.h.

75 {
76 m_doCombToyMC = true;
77 m_nToyMC = nToyMC;
78 }

◆ bookToyMCScaleFactors()

void Root::TElectronEfficiencyCorrectionTool::bookToyMCScaleFactors ( const int nToyMC)
inline

Running these before the initialize will setup the booking of toys.

Definition at line 71 of file TElectronEfficiencyCorrectionTool.h.

71 {
72 m_doToyMC = true;
73 m_nToyMC = nToyMC;
74 }

◆ buildSingleCombToyMC()

TH2 * TElectronEfficiencyCorrectionTool::buildSingleCombToyMC ( const TH1 * sf,
const TH1 * stat,
const TH1 * uncorr,
const std::vector< TH1 * > & corr,
const int nSys,
int & randomCounter )
private

Definition at line 438 of file TElectronEfficiencyCorrectionTool.cxx.

445{
446
447 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
448 << "Entering function buildSingleCombToyMC");
449
450 TH2* tmpHist;
451 const int nBins = (stat->GetNbinsX() + 2) * (stat->GetNbinsY() + 2);
452 tmpHist = (TH2*)corr.at(0)->Clone();
453 // Create random numbers for the corr. uncertainties
454 std::vector<double> rnd(nSys, 0);
455 for (int s = 0; s < nSys; ++s) {
456 rnd[s] = m_Rndm.Gaus(0, 1);
457 randomCounter++;
458 }
459 // Loop over all bins
460 for (int bin = 0; bin < nBins; ++bin) {
461 double val = stat->GetBinContent(bin);
462
463 // Add uncorrelated systematics
464 if (uncorr != nullptr) {
465 double valAdd = uncorr->GetBinContent(bin);
466 val = sqrt(val * val + valAdd * valAdd);
467 }
468 val = val * m_Rndm.Gaus(0, 1);
469 randomCounter++;
470 // Add larger correlated systematics
471 for (int s = 0; s < nSys; ++s) {
472 if (corr.at(s) != nullptr) {
473 val += static_cast<TH2*>(corr.at(s))->GetBinContent(bin) * rnd[s];
474 }
475 }
476 tmpHist->SetBinContent(bin, val + sf->GetBinContent(bin));
477 }
478 tmpHist->SetDirectory(nullptr);
479 return tmpHist;
480}
#define ATH_MSG_DEBUG(x)
static TRandom * rnd
tmpHist(what, wmin=-1e10, wmax=+1e10)
Definition fitman.py:146

◆ buildSingleToyMC()

std::vector< TH2 * > TElectronEfficiencyCorrectionTool::buildSingleToyMC ( const TH1 * sf,
const TH1 * stat,
const TH1 * uncorr,
const std::vector< TH1 * > & corr,
int & randomCounter )
private

Definition at line 398 of file TElectronEfficiencyCorrectionTool.cxx.

404{
405 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")! "
406 << "Entering function buildSingleToyMC");
407 std::vector<TH2*> tmpHists;
408 int nBins = (stat->GetNbinsX() + 2) * (stat->GetNbinsY() + 2);
409 tmpHists.reserve(m_nToyMC);
410 for (int toy = 0; toy < m_nToyMC; toy++) {
411 tmpHists.push_back((TH2*)corr.at(0)->Clone());
412 }
413 // Loop over all bins
414 for (int bin = 0; bin < nBins; bin++) {
415 double val = stat->GetBinContent(bin);
416
417 // Add uncorrelated systematics
418 if (uncorr != nullptr) {
419 double valAdd = uncorr->GetBinContent(bin);
420 val = sqrt(val * val + valAdd * valAdd);
421 }
422 for (int toy = 0; toy < m_nToyMC; toy++) {
423 tmpHists.at(toy)->SetBinContent(
424 bin, (val * m_Rndm.Gaus(0, 1)) + sf->GetBinContent(bin));
425 randomCounter++;
426 tmpHists.at(toy)->SetDirectory(nullptr);
427 }
428 }
429 return tmpHists;
430}

◆ buildToyMCTable()

std::vector< Root::TElectronEfficiencyCorrectionTool::HistArray > TElectronEfficiencyCorrectionTool::buildToyMCTable ( const std::vector< TH1 * > & sf,
const std::vector< TH1 * > & eig,
const std::vector< TH1 * > & stat,
const std::vector< TH1 * > & uncorr,
const std::vector< std::vector< TH1 * > > & corr )
private

Definition at line 485 of file TElectronEfficiencyCorrectionTool.cxx.

491{
492
493 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
494 << "Entering function buildToyMCTable");
495
496 int nSys{};
497 int randomCounter(0);
498 std::vector<HistArray> tmpVec;
499 const int stat_entries = stat.size();
500 if (m_doCombToyMC) {
501 for (int toyMC = 0; toyMC < m_nToyMC; toyMC++) {
502 HistArray tmpArray;
503 for (int i = 0; i < stat_entries; ++i) {
504 if (!eig.empty() && !uncorr.empty()) {
505 nSys = (eig.at(i))->GetNbinsX() - 1;
506 tmpArray.emplace_back(buildSingleCombToyMC(sf.at(i),
507 stat.at(i),
508 uncorr.at(i),
509 corr.at(i),
510 nSys,
511 randomCounter));
512 } else {
513 tmpArray.emplace_back(buildSingleCombToyMC(sf.at(i),
514 stat.at(i),
515 nullptr,
516 corr.at(i),
517 nSys,
518 randomCounter));
519 }
520 }
521 tmpVec.emplace_back(std::move(tmpArray));
522 }
523 } else {
524 std::vector<std::vector<TH2*>> tmpVec2;
525 for (int i = 0; i < stat_entries; ++i) {
526 nSys = (eig.at(i))->GetNbinsX() - 1;
527 tmpVec2.push_back(buildSingleToyMC(sf.at(i),
528 stat.at(i),
529 uncorr.at(i),
530 corr.at(i),
531 randomCounter));
532 }
533 for (int toy = 0; toy < m_nToyMC; toy++) {
534 HistArray tmpArray;
535 for (auto& i : tmpVec2) {
536 tmpArray.emplace_back(i.at(toy));
537 }
538 tmpVec.emplace_back(std::move(tmpArray));
539 }
540 }
541 return tmpVec;
542}
TH2 * buildSingleCombToyMC(const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, const int nSys, int &randomCounter)
std::vector< TH2 * > buildSingleToyMC(const TH1 *sf, const TH1 *stat, const TH1 *uncorr, const std::vector< TH1 * > &corr, int &randomCounter)

◆ calculate()

int TElectronEfficiencyCorrectionTool::calculate ( const PATCore::ParticleDataType::DataType dataType,
const unsigned int runnumber,
const double cluster_eta,
const double et,
Result & result,
const bool onlyTotal = false ) const

The main calculate method: dataType PATCore::ParticleDataType::DataType (e.g DATA,FULL etc) @ runnumber the run number.

1st dimension of the stored measurements @ cluster_eta the cluster eta. 2nd dimension of the stored measurements @ electron et. third dimension of the stored measurments @ result struct filled with SF, Total uncertainty, Stat uncertainty, Uncorr uncertainty @ onlyTotal do only the "total" systematic returns 0 in failure

Toy production is controlled by internal flags set by the Asg Tool. As toys are special.

Definition at line 160 of file TElectronEfficiencyCorrectionTool.cxx.

167{
168 // Set up the non-0 defaults
169 result.SF = -999;
170 result.Total = 1;
171 /*
172 * Determine Simulation flavour and find the run period
173 */
174 const bool isFastSim = dataType == PATCore::ParticleDataType::Fast;
175 int runnumberIndex = -1;
176 if (isFastSim) {
177 for (unsigned int i = 0; i < m_begRunNumberListFastSim.size(); ++i) {
180 runnumberIndex = i;
181 break;
182 }
183 }
184 } else {
185 for (unsigned int i = 0; i < m_begRunNumberList.size(); ++i) {
186 if (m_begRunNumberList[i] <= runnumber &&
188 runnumberIndex = i;
189 break;
190 }
191 }
192 }
193 if (runnumberIndex < 0) {
194 return 0;
195 }
196 /* What we have is a vector<vector<HistArray>> acting as a map:
197 * Key/Index is SF,Stat,Eigen,UnCorr
198 * The Entry in this index is a vector<HistArray>
199 * Each vector<HistArray> has as many entries as supported Run periods.
200 * Each HistArray has 2D histos (could be standard, low-et, or forward
201 * electrons) The 2D Histo then has the number we want. What follows is the
202 * logic to get to this number.
203 */
204 const auto& currentmap = (isFastSim) ? m_fastHistList : m_histList;
205 const std::vector<HistArray>& sfVector = currentmap.at(mapkey::sf);
206 /*
207 * See if we can find a vector for key SF in the map
208 * and then if we can get the corresponding HisArray
209 * for the run period.
210 */
211 if (sfVector.empty() || runnumberIndex >= static_cast<int>(sfVector.size())) {
212 return 0;
213 }
214 /*
215 * At this stage we have found the relevant period
216 * So we need to locate the right histogram.
217 */
218 const HistArray& sfObjectArray = sfVector[runnumberIndex];
219 const auto& edges = (isFastSim) ? m_fastHistEdges[runnumberIndex]
220 : m_histEdges[runnumberIndex];
221 const int entries = edges.size();
222 /*
223 * Now the logic of finding the histogram
224 * Some parts of the code can be perhaps improved ...
225 */
226 double xValue(et);
227 double yValue(cluster_eta);
228 int smallEt(0);
229 int etaCov(0);
230 int nSF(0);
231 bool invalid = false;
232 bool changedEt = false;
233 int index = -1;
234
235 for (int i = 0; i < entries; ++i) {
236 invalid = false;
237 const HistEdge& histEdge = edges[i];
238 // invalid if we are below minimum et
239 if (et < histEdge.etMin) {
240 smallEt++;
241 invalid = true;
242 }
243
244 // invalid if we are above max eta
245 if (std::abs(yValue) >= histEdge.etaMax) {
246 etaCov++;
247 invalid = true;
248 }
249 // invalid if we are less than minimum eta (forward electrons)
250 if (std::abs(yValue) < histEdge.etaMin) {
251 etaCov++;
252 invalid = true;
253 }
254 /*
255 * Invalid if above max et and is a low Et histogram.
256 * If not low Et histogram then change the xValue to the maximum
257 * availabe Et of ths histogram. As we assume that the SF stays the same
258 * for very high Et
259 */
260 if (et > histEdge.etMax) {
261 if (histEdge.isLowPt) {
262 invalid = true;
263 } else {
264 xValue = histEdge.etMax - 1000 ; //1000 is 1 GeV
265 changedEt = true;
266 }
267 }
268 /*
269 * Get the histogram index in the TObjArray
270 * Also mark how many times we found something
271 * as SF should be unique
272 */
273 if (!invalid) {
274 index = i;
275 if (!changedEt) {
276 nSF++;
277 }
278 }
279 }
280 if (smallEt == entries) {
281 return 0;
282 }
283 if (etaCov == entries) {
284 return 0;
285 }
286 if (nSF > 1) {
287 ATH_MSG_WARNING("More than 1 SF found for eta="
288 << yValue << " , et = " << et << " , run number = "
289 << runnumber << ". Please check your input files!");
290 }
291 if (index < 0) {
292 return 0;
293 }
294
295 /*
296 * Now we have the index of the histogram
297 */
298 const HistEdge& currentEdge = edges[index];
299 /*
300 * If SF is only given in Abs(eta) convert eta input to std::abs()
301 */
302 constexpr double epsilon = 1e-6;
303 if (currentEdge.etaMin >= (0 - epsilon)) {
304 yValue = std::abs(yValue);
305 }
306
307 const TH2* currentHist = static_cast<TH2*>(sfObjectArray[index].get()) ;
308 const int globalBinNumber = currentHist->FindFixBin(xValue, yValue);
309 const double scaleFactor = currentHist->GetBinContent(globalBinNumber);
310 const double scaleFactorErr = currentHist->GetBinError(globalBinNumber);
311 /*
312 * Write the retrieved values to the output
313 */
314 result.SF= scaleFactor;
315 result.Total = scaleFactorErr;
316 result.histIndex = index;
317 result.histBinNum = globalBinNumber;
318 /*
319 * if we only wanted the Total we can exit here
320 */
321 if (onlyTotal) {
322 return 1;
323 }
324 /*
325 * Do the stat error using the available info from the above (SF)
326 */
327 double statErr = -999;
328 const std::vector<HistArray>& statVector = currentmap.at(mapkey::stat);
329 if (runnumberIndex < static_cast<int> (statVector.size())) {
330 if (!statVector[runnumberIndex].empty()) {
331 statErr = static_cast<TH1*>(statVector[runnumberIndex][index].get())
332 ->GetBinContent(globalBinNumber);
333 result.Stat = statErr;
334 }
335 }
336 /*
337 * Do the Uncorr uncertainty
338 */
339 double val = statErr;
340 const std::vector<HistArray>& uncorrVector = currentmap.at(mapkey::uncorr);
341 if (runnumberIndex < static_cast<int>(uncorrVector.size())) {
342 if (!uncorrVector.at(runnumberIndex).empty()) {
343 const double valAdd =
344 static_cast<TH1*>(uncorrVector[runnumberIndex][index].get())
345 ->GetBinContent(globalBinNumber);
346 val = sqrt(val * val + valAdd * valAdd);
347 }
348 }
349 result.UnCorr = val;
350 /*
351 * Do the correlated part
352 * For the N~16 systematic variations
353 * we keep them in a vector of vector of HistArray
354 * The first vector index being the runnumber
355 * The second the systematic
356 * And them the HistArray for high low etc.
357 */
358 result.Corr.resize(m_nSysMax);
359 const std::vector<std::vector<HistArray>>& sysList =
360 (isFastSim) ? m_fastSysList : m_sysList;
361 if (sysList.size() > static_cast<unsigned int>(index)) {
362 if (sysList.at(index).size() > static_cast<unsigned int>(runnumberIndex)) {
363 const int sys_entries = sysList.at(index).at(runnumberIndex).size();
364 for (int sys = 0; sys < sys_entries; ++sys) {
365 double sysVal =
366 static_cast<TH2*>(sysList[index][runnumberIndex][sys].get())
367 ->GetBinContent(globalBinNumber);
368 result.Corr[sys] = sysVal;
369 }
370 }
371 }
372 /*
373 * Do the toys if requested
374 */
375 if (m_doToyMC || m_doCombToyMC) {
376 result.toys.resize(static_cast<size_t>(m_nToyMC));
377 const std::vector<std::vector<HistArray>>& toyMCList =
379 if (toyMCList.size() > (unsigned int)runnumberIndex) {
380 for (int toy = 0; toy < m_nToyMC; ++toy) {
381 if (toyMCList[runnumberIndex][toy].size() >
382 static_cast<unsigned int>(index)) {
383 result.toys[toy] =
384 static_cast<TH2*>(toyMCList[runnumberIndex][toy][index].get())
385 ->GetBinContent(globalBinNumber);
386 }
387 }
388 }
389 }
390 return 1;
391}
#define ATH_MSG_WARNING(x)
float et(const xAOD::jFexSRJetRoI *j)
size_t size() const
Number of registered mappings.
static const Attributes_t empty
std::vector< unsigned int > m_begRunNumberList
List of run numbers where histograms become valid for full simulation.
std::vector< std::vector< HistEdge > > m_fastHistEdges
std::vector< std::vector< HistArray > > m_fastSysList
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFull
std::vector< unsigned int > m_begRunNumberListFastSim
List of run numbers where histograms become valid for fast simulation.
std::vector< unsigned int > m_endRunNumberListFastSim
List of run numbers where histograms stop being valid for fast simulation.
std::vector< std::vector< HistArray > > m_sysList
std::vector< unsigned int > m_endRunNumberList
List of run numbers where histograms stop being valid for full simulation.
std::vector< std::vector< HistEdge > > m_histEdges
std::vector< std::vector< HistArray > > m_uncorrToyMCSystFast
static std::vector< uint32_t > runnumber
Definition iLumiCalc.h:37
double entries
Definition listroot.cxx:49
str index
Definition DeMoScan.py:362

◆ fillHistEdges()

void TElectronEfficiencyCorrectionTool::fillHistEdges ( const std::vector< HistArray > & sfPerPeriodHist,
std::vector< std::vector< HistEdge > > & sfPerPeriodEdges )
staticprivate

Definition at line 964 of file TElectronEfficiencyCorrectionTool.cxx.

966 {
967
968 for (const auto& vec : sfPerPeriodHist) {
969 const size_t vecSize = vec.size();
970 std::vector<HistEdge> periodVec;
971 periodVec.reserve(vecSize);
972 for (size_t i = 0; i < vecSize; ++i) {
973 const auto* tmpHist = static_cast<TH2*>(vec[i].get());
974 const auto* const xAxis = tmpHist->GetXaxis();
975 const auto* yAxis = tmpHist->GetYaxis();
976 HistEdge histEdge;
977 histEdge.etaMax = yAxis->GetXmax();
978 histEdge.etaMin = yAxis->GetXmin();
979 histEdge.etMax = xAxis->GetXmax();
980 histEdge.etMin = xAxis->GetXmin();
981 histEdge.isLowPt =
982 (std::strstr(tmpHist->GetName(), LowPt_string) != nullptr);
983
984 periodVec.emplace_back(histEdge);
985 }
986 sfPerPeriodEdges.emplace_back(std::move(periodVec));
987 }
988}
std::vector< size_t > vec

◆ getHistograms()

int TElectronEfficiencyCorrectionTool::getHistograms ( )
private

Load all histograms from the input file(s).

Definition at line 588 of file TElectronEfficiencyCorrectionTool.cxx.

589{
590 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
591 << "Entering function getHistograms");
592 // Cache the current directory in the root file
593 TDirectory* origDir = gDirectory;
594 /*
595 * Get the name of the first input ROOT file and
596 * interpret from that what we have:
597 * efficiency vs. efficiencySF; offline vs. trigger; medium, loose,...
598 */
599 if (!m_corrFileNameList.empty()) {
600 TString firstFileNameAndPath = m_corrFileNameList[0].c_str();
601 std::unique_ptr<TObjArray> myStringList(firstFileNameAndPath.Tokenize("/"));
602 int lastIdx = myStringList->GetLast();
603 TString fileName = ((TObjString*)myStringList->At(lastIdx))->GetString();
604 std::unique_ptr<TObjArray> myFileNameTokensList(fileName.Tokenize("."));
605
606 if (myFileNameTokensList->GetLast() < 3) {
607 ATH_MSG_ERROR("input file name has wrong format!");
608 return 0;
609 }
610 }
611 /*
612 * Get all ROOT files and histograms
613 */
614 for (auto& ifile : m_corrFileNameList) {
615 // Load the ROOT file
616 const std::unique_ptr<char[]> fname(gSystem->ExpandPathName(ifile.c_str()));
617 std::unique_ptr<TFile> rootFile(TFile::Open(fname.get(), "READ"));
618 if (!rootFile) {
619 ATH_MSG_ERROR("No ROOT file found here: " << ifile);
620 return 0;
621 }
622 // Loop over all directories inside the root file (correspond to the run
623 // number ranges
624 TIter nextdir(rootFile->GetListOfKeys());
625 TKey* dir = nullptr;
626 TObject* obj = nullptr;
627 while ((dir = (TKey*)nextdir())) {
628 obj = dir->ReadObj();
629 if (obj->IsA()->InheritsFrom("TDirectory")) {
630 // splits string by delimiter --> e.g RunNumber1_RunNumber2
631 std::unique_ptr<TObjArray> dirNameArray(
632 TString(obj->GetName()).Tokenize("_"));
633 // returns index of last string --> if one, the directory name does not
634 // contain any run numbers
635 int lastIdx = dirNameArray->GetLast();
636 if (lastIdx != 1) {
638 "The folder name seems to have the wrong format! Directory name:"
639 << obj->GetName());
640 return 0;
641 }
642 rootFile->cd(obj->GetName());
643 if (0 == this->setupHistogramsInFolder(*dirNameArray, lastIdx)) {
644 ATH_MSG_ERROR("Unable to setup the histograms in directory "
645 << dir->GetName() << "in file " << ifile);
646 return 0;
647 }
648 } else {
649 ATH_MSG_ERROR("Wrong file content! Expected only Directories "
650 << gDirectory->cd());
651 return 0;
652 }
653 // Return to the original ROOT directory
655 } // End: directory loop
656 } // End: file loop
657
658 // SF Histogram edges caching
660 size_t histListSize = m_histList.at(mapkey::sf).size();
661 size_t edgeListSize = m_histEdges.size();
662 if (histListSize != edgeListSize) {
663 ATH_MSG_ERROR("Histo List and Edge List differ in Run period entries "
664 << histListSize << " vs " << edgeListSize);
665 return 0;
666 }
667 for (size_t i = 0; i < histListSize; ++i) {
668 if (m_histList.at(mapkey::sf).at(i).size() != m_histEdges.at(i).size()) {
670 "Histo List and Edge List differ for the Run period in entry" << i);
671 return 0;
672 }
673 }
674
675 // Caching of Bin edges for Fast simul SF
677 histListSize = m_fastHistList.at(mapkey::sf).size();
678 edgeListSize = m_fastHistEdges.size();
679 if (histListSize != edgeListSize) {
680 ATH_MSG_ERROR("Fast Histo List and Edge List differ in Run period entries "
681 << histListSize << " vs " << edgeListSize);
682 return 0;
683 }
684 for (size_t i = 0; i < histListSize; ++i) {
685 if (m_fastHistList.at(mapkey::sf).at(i).size() !=
686 m_fastHistEdges.at(i).size()) {
688 "Fast Histo List and Edge List differ for the Run period in entry"
689 << i);
690 return 0;
691 }
692 }
693
694 return 1;
695}
#define ATH_MSG_ERROR(x)
static void fillHistEdges(const std::vector< HistArray > &sfPerPeriodHist, std::vector< std::vector< HistEdge > > &sfPerPeriodEdges)
int setupHistogramsInFolder(const TObjArray &dirNameArray, int lastIdx)

◆ getNbins()

int TElectronEfficiencyCorrectionTool::getNbins ( std::map< float, std::vector< float > > & ptEta) const

Helpers to get the binning of the uncertainties in a std::map (pt, eta).

Definition at line 547 of file TElectronEfficiencyCorrectionTool.cxx.

549{
550 // Get sf histograms
551 const std::vector<HistArray>& tmpVec = (!m_histList[mapkey::sf].empty())
554
555 int nbinsTotal = 0;
556 pt_eta1.clear();
557 std::vector<float> eta1;
558 eta1.clear();
559
560 // Loop over the different Run range (one TObjeArray for each)
561 for (const auto& ikey : tmpVec) {
562 // Loop over the histograms for a given run numbers
563 for (const auto& entries : ikey) {
564 eta1.clear();
565 // Get number of bins
566 TH2* h_tmp = ((TH2*)entries.get());
567 int nbinsX = h_tmp->GetNbinsX();
568 int nbinsY = h_tmp->GetNbinsY();
569 // fill in the eta pushing back
570 for (int biny = 1; biny <= nbinsY; ++biny) {
571 eta1.push_back(h_tmp->GetYaxis()->GetBinLowEdge(biny));
572 }
573 // associate each pt (bin) with the corresponding/available eta ones
574 for (int binx = 1; binx <= nbinsX; ++binx) {
575 pt_eta1[h_tmp->GetXaxis()->GetBinLowEdge(binx)] = eta1;
576 }
577 }
578 }
579 for (auto& i : pt_eta1) {
580 nbinsTotal += i.second.size();
581 }
582 return nbinsTotal;
583}
setEt setPhi setE277 setWeta2 eta1

◆ getNSyst()

int Root::TElectronEfficiencyCorrectionTool::getNSyst ( ) const
inline

get number of systematics

Definition at line 107 of file TElectronEfficiencyCorrectionTool.h.

107{ return m_nSysMax; }

◆ initialize()

int TElectronEfficiencyCorrectionTool::initialize ( )

Initialize this class.

Definition at line 87 of file TElectronEfficiencyCorrectionTool.cxx.

88{
89 // use an int as a StatusCode
90 int sc(1);
91 // Check if files are present
92 if (m_corrFileNameList.empty()) {
93 ATH_MSG_ERROR(" No file added!");
94 return 0;
95 }
96 ATH_MSG_DEBUG("Initializing tool with " << m_corrFileNameList.size()
97 << " configuration file(s)");
98
99 if (m_doToyMC && m_doCombToyMC) {
100 ATH_MSG_ERROR(" Both regular and combined toy MCs booked!"
101 << " Only use one!");
102 return 0;
103 }
104 /*
105 * initialize the random number generator if toyMC propagation booked
106 * Use the 1st 4 bytes of the CheckSum of the reccomendation file as seed
107 */
108 if (m_doToyMC || m_doCombToyMC) {
109 if (m_seed == 0) {
110 // Use the name of the correction for auto-setting of the seed based on
111 // the md5-sum of the file
112 const std::unique_ptr<char[]> fname(
113 gSystem->ExpandPathName(m_corrFileNameList[0].c_str()));
114 std::unique_ptr<TMD5> tmd = std::make_unique<TMD5>();
115 const char* tmd_as_string = TMD5::FileChecksum(fname.get())->AsString();
116 m_seed = *(reinterpret_cast<const unsigned long int*>(tmd_as_string));
117 ATH_MSG_DEBUG("Seed (automatically) set to " << m_seed);
118 } else {
119 ATH_MSG_DEBUG("Seed set to " << m_seed);
120 }
121 m_Rndm = TRandom3(m_seed);
122 }
123 /*
124 * Load the needed histograms
125 */
126 if (0 == getHistograms()) {
127 ATH_MSG_ERROR(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
128 << "! Problem when calling getHistograms()");
129 return 0;
130 }
131 const unsigned int nRunNumbersFull = m_begRunNumberList.size();
132 const unsigned int nRunNumbersFast = m_begRunNumberListFastSim.size();
133
134 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
135 << "Found " << nRunNumbersFast
136 << " run number ranges for fast sim with a total of "
138 << " scale factor histograms.");
139
140 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
141 << "Found " << nRunNumbersFull
142 << " run number ranges for full sim with a total of "
144 << " scale factor histograms.");
145
146 ATH_MSG_DEBUG("Tool succesfully initialized!");
147
148 return sc;
149}
static Double_t sc
int getHistograms()
Load all histograms from the input file(s).

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ msg() [1/2]

MsgStream & asg::AsgMessaging::msg ( ) const
inherited

The standard message stream.

Returns
A reference to the default message stream of this object.

Definition at line 49 of file AsgMessaging.cxx.

49 {
50#ifndef XAOD_STANDALONE
51 return ::AthMessaging::msg();
52#else // not XAOD_STANDALONE
53 return m_msg;
54#endif // not XAOD_STANDALONE
55 }

◆ msg() [2/2]

MsgStream & asg::AsgMessaging::msg ( const MSG::Level lvl) const
inherited

The standard message stream.

Parameters
lvlThe message level to set the stream to
Returns
A reference to the default message stream, set to level "lvl"

Definition at line 57 of file AsgMessaging.cxx.

57 {
58#ifndef XAOD_STANDALONE
59 return ::AthMessaging::msg( lvl );
60#else // not XAOD_STANDALONE
61 m_msg << lvl;
62 return m_msg;
63#endif // not XAOD_STANDALONE
64 }

◆ msgLvl()

bool asg::AsgMessaging::msgLvl ( const MSG::Level lvl) const
inherited

Test the output level of the object.

Parameters
lvlThe message level to test against
Returns
boolean Indicting if messages at given level will be printed
true If messages at level "lvl" will be printed

Definition at line 41 of file AsgMessaging.cxx.

41 {
42#ifndef XAOD_STANDALONE
43 return ::AthMessaging::msgLvl( lvl );
44#else // not XAOD_STANDALONE
45 return m_msg.msgLevel( lvl );
46#endif // not XAOD_STANDALONE
47 }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setSeed()

void Root::TElectronEfficiencyCorrectionTool::setSeed ( const unsigned long int seed)
inline

◆ setup()

int TElectronEfficiencyCorrectionTool::setup ( const std::vector< TH1 * > & hists,
std::vector< HistArray > & histList,
std::vector< unsigned int > & beginRunNumberList,
std::vector< unsigned int > & endRunNumberList,
const int runNumBegin,
const int runNumEnd ) const
private

Fill and interpret the setup, depending on which histograms are found in the input file(s).

Definition at line 925 of file TElectronEfficiencyCorrectionTool.cxx.

932{
933 if (hists.empty()) {
934 ATH_MSG_ERROR("! Could NOT find histogram with name *_sf in folder");
935 return 0;
936 }
937 TH1* tmpHist(nullptr);
938 HistArray tmpArray;
939 for (const auto& hist : hists) {
940 tmpHist = static_cast<TH1*>(hist);
941 tmpHist->SetDirectory(nullptr);
942 tmpArray.emplace_back(tmpHist);
943 }
944 histList.emplace_back(std::move(tmpArray));
945 // Now, we have all the needed info. Fill the vectors accordingly
946 if (!beginRunNumberList.empty()) {
947 if (runNumBegin != (int)beginRunNumberList.back()) {
948 beginRunNumberList.push_back(runNumBegin);
949 }
950 } else {
951 beginRunNumberList.push_back(runNumBegin);
952 }
953 if (!endRunNumberList.empty()) {
954 if (runNumEnd != (int)endRunNumberList.back()) {
955 endRunNumberList.push_back(runNumEnd);
956 }
957 } else {
958 endRunNumberList.push_back(runNumEnd);
959 }
960 return 1;
961}
histList
Loop plots to adjust each plotopts First, loop all TDirectories.

◆ setupHistogramsInFolder()

int TElectronEfficiencyCorrectionTool::setupHistogramsInFolder ( const TObjArray & dirNameArray,
int lastIdx )
private

setup obj arrays at specific indices

Definition at line 700 of file TElectronEfficiencyCorrectionTool.cxx.

703{
704
705 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
706 << "Entering funtion setupHistogramsInFolder");
707
708 int runNumBegin(-1);
709 TString myBegRunNumString =
710 ((TObjString*)dirNameArray.At(lastIdx - 1))->GetString();
711 if (myBegRunNumString.IsDigit()) {
712 runNumBegin = myBegRunNumString.Atoi();
713 }
714 int runNumEnd(-1);
715 TString myEndRunNumString =
716 ((TObjString*)dirNameArray.At(lastIdx))->GetString();
717 if (myEndRunNumString.IsDigit()) {
718 runNumEnd = myEndRunNumString.Atoi();
719 }
720 if (runNumBegin < 0 || runNumEnd < 0 || runNumEnd < runNumBegin) {
721 ATH_MSG_ERROR(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
722 << "Could NOT interpret the run number range: "
723 << runNumBegin << " - " << runNumEnd);
724 return 0;
725 }
727 //--> e.g. "sf" index 0 ,
728 std::vector<std::vector<TH1*>> objsFull(mapkey::end);
729 std::vector<std::vector<TH1*>> objsFast(mapkey::end);
730 // Vector to hold the N~16 systematic variations
731 std::vector<std::vector<TH1*>> sysObjsFull;
732 std::vector<std::vector<TH1*>> sysObjsFast;
733 TIter nextkey(gDirectory->GetListOfKeys());
734 TKey* key = nullptr;
735 TObject* obj = nullptr;
736 int seenSystematics = 0;
737 // Loop of the keys
738 while ((key = (TKey*)nextkey())) {
739 obj = key->ReadObj();
740 if (obj->IsA()->InheritsFrom("TH1")) {
741 // The histogram containing the scale factors need to end with _sf and
742 // need to contain either the string "FullSim" or "AtlFast"!
743 if (std::strstr(obj->GetName(), "FullSim") != nullptr) {
745 static_cast<TH1*>(obj), objsFull, sysObjsFull, seenSystematics);
746 } else if (std::strstr(obj->GetName(), "AtlFast") != nullptr) {
748 static_cast<TH1*>(obj), objsFast, sysObjsFast, seenSystematics);
749 } else {
750 ATH_MSG_ERROR("Could NOT interpret if the histogram: "
751 << obj->GetName() << " is full or fast simulation!");
752 return 0;
753 }
754 }
755 }
756 ATH_MSG_DEBUG(" (file: " << __FILE__ << ", line: " << __LINE__ << ")\n"
757 << "Setting up histograms for Run range "
758 << runNumEnd);
759 // Copy from the temporaries to the actual member variables
760 // via the setup function
761 for (int key : s_keys) {
762 if (!objsFull.at(key).empty()) {
763 if (0 == setup(objsFull.at(key),
764 m_histList[key],
767 runNumBegin,
768 runNumEnd)) {
769 ATH_MSG_ERROR("! Could NOT setup histogram " << key
770 << " for full sim!");
771 return 0;
772 }
773 }
774 if (!objsFast.at(key).empty()) {
775 if (0 == setup(objsFast.at(key),
776 m_fastHistList[key],
779 runNumBegin,
780 runNumEnd)) {
781 ATH_MSG_ERROR("! Could NOT setup histogram " << key << " for fast sim");
782 return 0;
783 }
784 }
785 }
786 m_fastSysList.resize(sysObjsFast.size());
787 for (unsigned int sys = 0; sys < sysObjsFast.size(); sys++) {
788 if (0 == setup(sysObjsFast.at(sys),
789 m_fastSysList[sys],
792 runNumBegin,
793 runNumEnd)) {
794 ATH_MSG_ERROR("! Could NOT setup systematic histograms for fast sim");
795 return 0;
796 }
797 }
798 m_sysList.resize(sysObjsFull.size());
799 for (unsigned int sys = 0; sys < sysObjsFull.size(); sys++) {
800 if (0 == setup(sysObjsFull.at(sys),
801 m_sysList[sys],
804 runNumBegin,
805 runNumEnd)) {
806 ATH_MSG_ERROR("! Could NOT setup systematic histograms for fast sim");
807 return 0;
808 }
809 }
810
811 // Toys
812 if (m_doToyMC || m_doCombToyMC) {
813 bool fullToysBooked =
814 setupUncorrToySyst(objsFull, sysObjsFull, m_uncorrToyMCSystFull);
815 bool fastToysBooked =
816 setupUncorrToySyst(objsFast, sysObjsFast, m_uncorrToyMCSystFast);
817 if (fullToysBooked || fastToysBooked) {
818 if (m_doToyMC) {
819 ATH_MSG_DEBUG("Created tables for " << m_nToyMC
820 << " ToyMC systematics ");
821 }
822 if (m_doCombToyMC) {
823 ATH_MSG_DEBUG("Created tables for " << m_nToyMC
824 << " combined ToyMC systematics ");
825 }
826 }
827 }
828 return 1;
829}
bool setupUncorrToySyst(std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, std::vector< std::vector< HistArray > > &uncorrToyMCSyst)
int setup(const std::vector< TH1 * > &hists, std::vector< HistArray > &histList, std::vector< unsigned int > &beginRunNumberList, std::vector< unsigned int > &endRunNumberList, const int runNumBegin, const int runNumEnd) const
Fill and interpret the setup, depending on which histograms are found in the input file(s).
void setupTempMapsHelper(TH1 *obj, std::vector< std::vector< TH1 * > > &objs, std::vector< std::vector< TH1 * > > &sysObjs, int &seenSystematics)

◆ setupTempMapsHelper()

void TElectronEfficiencyCorrectionTool::setupTempMapsHelper ( TH1 * obj,
std::vector< std::vector< TH1 * > > & objs,
std::vector< std::vector< TH1 * > > & sysObjs,
int & seenSystematics )
private

Definition at line 835 of file TElectronEfficiencyCorrectionTool.cxx.

840{
841 // Add all except the correlated
842 for (int key : s_keys) {
843 if (TString(obj->GetName())
844 .EndsWith("_" + TString(mapkey::keytostring(key)))) {
845 objs.at(key).emplace_back(obj);
846 }
847 }
848
849 const TString tmpName(obj->GetName());
850 // Special treatment , this is only for photons
851 if (tmpName.EndsWith("_sys")) {
852 objs.at(mapkey::sys).emplace_back(obj);
853 std::vector<TH1*> tmpArray;
854 // clone
855 tmpArray.emplace_back(static_cast<TH1*>(obj->Clone()));
856 sysObjs.emplace_back(tmpArray);
857 seenSystematics++;
858 }
859 // See if we are dealing with correlated
860 if (tmpName.Contains("_corr")) {
861 /*
862 * corr0 in the name triggers a few things
863 * We assume that 0 is the 1st
864 * histogram in a series of corr(i) that
865 * we see for each of the vector entries that
866 * can be one for LowPt,Standard,Forward etc
867 */
868 if (tmpName.EndsWith("corr0")) {
869 // 1st create a TObjectArray
870 std::vector<TH1*> tmpArray;
871 // Register it to the vector
872 sysObjs.emplace_back(tmpArray);
873 // Reset the counter here
874 seenSystematics = 0;
875 }
876 /*
877 * Now we can add to the TObjeArray
878 * This can be Low Pt or high Pt
879 */
880 sysObjs.back().emplace_back(obj);
881 //Increase the counter
882 seenSystematics++;
883 }
884
885 if (seenSystematics > m_nSysMax) {
886 m_nSysMax = seenSystematics;
887 }
888}
const char * keytostring(int input)

◆ setupUncorrToySyst()

bool TElectronEfficiencyCorrectionTool::setupUncorrToySyst ( std::vector< std::vector< TH1 * > > & objs,
std::vector< std::vector< TH1 * > > & sysObjs,
std::vector< std::vector< HistArray > > & uncorrToyMCSyst )
private

Definition at line 893 of file TElectronEfficiencyCorrectionTool.cxx.

897{
898 bool toysBooked = false;
899 if (!m_histList[mapkey::sf].empty()) {
900 if (objs.at(mapkey::eig).empty() || objs.at(mapkey::stat).empty() ||
901 objs.at(mapkey::uncorr).empty()) {
902
903 if (objs.at(mapkey::stat).size() > 1 || objs.at(mapkey::sys).size() > 1) {
904
905 uncorrToyMCSyst.push_back(buildToyMCTable(
906 objs.at(mapkey::sf), {}, objs.at(mapkey::stat), {}, sysObjs));
907 toysBooked = true;
908 }
909 } else {
910 uncorrToyMCSyst.push_back(buildToyMCTable(objs.at(mapkey::sf),
911 objs.at(mapkey::eig),
912 objs.at(mapkey::stat),
914 sysObjs));
915 toysBooked = true;
916 }
917 }
918 return toysBooked;
919}
std::vector< HistArray > buildToyMCTable(const std::vector< TH1 * > &sf, const std::vector< TH1 * > &eig, const std::vector< TH1 * > &stat, const std::vector< TH1 * > &uncorr, const std::vector< std::vector< TH1 * > > &corr)

◆ uncorrEmpty()

bool TElectronEfficiencyCorrectionTool::uncorrEmpty ( const PATCore::ParticleDataType::DataType dataType)

Check if stat+uncorr has input.

Definition at line 151 of file TElectronEfficiencyCorrectionTool.cxx.

152{
153 const bool isFastSim = dataType == PATCore::ParticleDataType::Fast;
154 const auto& currentmap = (isFastSim) ? m_fastHistList : m_histList;
155
156 return currentmap.at(mapkey::stat).empty() && currentmap.at(mapkey::uncorr).empty();
157}

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging).

Definition at line 141 of file AthMessaging.h.

◆ m_begRunNumberList

std::vector<unsigned int> Root::TElectronEfficiencyCorrectionTool::m_begRunNumberList
private

List of run numbers where histograms become valid for full simulation.

Definition at line 186 of file TElectronEfficiencyCorrectionTool.h.

◆ m_begRunNumberListFastSim

std::vector<unsigned int> Root::TElectronEfficiencyCorrectionTool::m_begRunNumberListFastSim
private

List of run numbers where histograms become valid for fast simulation.

Definition at line 191 of file TElectronEfficiencyCorrectionTool.h.

◆ m_corrFileNameList

std::vector<std::string> Root::TElectronEfficiencyCorrectionTool::m_corrFileNameList
private

The list of file name(s).

Definition at line 184 of file TElectronEfficiencyCorrectionTool.h.

◆ m_doCombToyMC

bool Root::TElectronEfficiencyCorrectionTool::m_doCombToyMC
private

Definition at line 173 of file TElectronEfficiencyCorrectionTool.h.

◆ m_doToyMC

bool Root::TElectronEfficiencyCorrectionTool::m_doToyMC
private

Flag to control Toys.

Definition at line 172 of file TElectronEfficiencyCorrectionTool.h.

◆ m_endRunNumberList

std::vector<unsigned int> Root::TElectronEfficiencyCorrectionTool::m_endRunNumberList
private

List of run numbers where histograms stop being valid for full simulation.

Definition at line 189 of file TElectronEfficiencyCorrectionTool.h.

◆ m_endRunNumberListFastSim

std::vector<unsigned int> Root::TElectronEfficiencyCorrectionTool::m_endRunNumberListFastSim
private

List of run numbers where histograms stop being valid for fast simulation.

Definition at line 194 of file TElectronEfficiencyCorrectionTool.h.

◆ m_fastHistEdges

std::vector<std::vector<HistEdge> > Root::TElectronEfficiencyCorrectionTool::m_fastHistEdges
private

Definition at line 201 of file TElectronEfficiencyCorrectionTool.h.

◆ m_fastHistList

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_fastHistList
private

List of histograms for fast simulation.

Definition at line 200 of file TElectronEfficiencyCorrectionTool.h.

◆ m_fastSysList

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_fastSysList
private

Definition at line 202 of file TElectronEfficiencyCorrectionTool.h.

◆ m_histEdges

std::vector<std::vector<HistEdge> > Root::TElectronEfficiencyCorrectionTool::m_histEdges
private

Definition at line 197 of file TElectronEfficiencyCorrectionTool.h.

◆ m_histList

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_histList
private

List of histograms for full Geant4 simulation.

Definition at line 196 of file TElectronEfficiencyCorrectionTool.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels).

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_nSysMax

int Root::TElectronEfficiencyCorrectionTool::m_nSysMax
private

Maximum number of systematics.

Definition at line 179 of file TElectronEfficiencyCorrectionTool.h.

◆ m_nToyMC

int Root::TElectronEfficiencyCorrectionTool::m_nToyMC
private

The number of toys.

Definition at line 175 of file TElectronEfficiencyCorrectionTool.h.

◆ m_Rndm

TRandom3 Root::TElectronEfficiencyCorrectionTool::m_Rndm
private

Definition at line 204 of file TElectronEfficiencyCorrectionTool.h.

◆ m_seed

unsigned long int Root::TElectronEfficiencyCorrectionTool::m_seed
private

The Random seed.

Definition at line 177 of file TElectronEfficiencyCorrectionTool.h.

◆ m_sysList

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_sysList
private

Definition at line 198 of file TElectronEfficiencyCorrectionTool.h.

◆ m_uncorrToyMCSystFast

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_uncorrToyMCSystFast
private

Definition at line 182 of file TElectronEfficiencyCorrectionTool.h.

◆ m_uncorrToyMCSystFull

std::vector<std::vector<HistArray> > Root::TElectronEfficiencyCorrectionTool::m_uncorrToyMCSystFull
private

Definition at line 181 of file TElectronEfficiencyCorrectionTool.h.


The documentation for this class was generated from the following files: