ATLAS Offline Software
Loading...
Searching...
No Matches
LArSamples::TreeAccessor Class Reference

#include <TreeAccessor.h>

Inheritance diagram for LArSamples::TreeAccessor:
Collaboration diagram for LArSamples::TreeAccessor:

Public Member Functions

 TreeAccessor (TTree &cellTree, TTree &scTree, TTree &eventTree, TTree *runTree, TFile *file)
 Constructor.
 TreeAccessor (const TString &fileName)
virtual ~TreeAccessor ()
bool writeToFile (const TString &fileName) const
unsigned int historySize (unsigned int i) const
unsigned int historySizeSC (unsigned int i) const
unsigned int nEvents () const
const EventDataeventData (unsigned int i) const
unsigned int nRuns () const
const RunDatarunData (unsigned int i) const
void add (HistoryContainer *cont)
const HistorygetCellHistory (unsigned int i) const
const HistorygetSCHistory (unsigned int i) const
const CellInfogetCellInfo (unsigned int i) const
const CellInfogetSCInfo (unsigned int i) const
virtual const HistorynewCellHistory (unsigned int i) const
virtual const HistorycellHistory (unsigned int i) const
virtual const CellInfocellInfo (unsigned int i) const
virtual unsigned int nChannels () const
virtual unsigned int nChannelsSC () const
virtual void resetCache () const
const CellInfocellInfoCache (unsigned int i) const
const Historypass (unsigned int i, const FilterParams &f) const
const HistorycellCache () const
unsigned int cachePos () const
void resetCellInfoCache ()
bool save () const
const TTree & cellTree () const
const TTree & SCTree () const
const TTree & eventTree () const
const TTree & runTree () const
TFile * file () const
TString fileName () const
const HistoryContainerhistoryContainer (unsigned int i) const
const HistoryContainerhistoryContainerSC (unsigned int i) const
void addSC (HistoryContainer *cont)
void addEvent (EventData *eventData)
void addRun (RunData *runData)
HistoryContainercurrentContainer () const
HistoryContainercurrentContainerSC () const
int getCellEntry (unsigned int i) const
int getSCEntry (unsigned int i) const

Static Public Member Functions

static TreeAccessoropen (const TString &fileName)
static TreeAccessormerge (const std::vector< const Accessor * > &accessors, const TString &fileName="")
static TreeAccessormerge (const std::vector< const Accessor * > &accessors, const TString &fileName, const TString &LBFile)
static TreeAccessorfilter (const Accessor &accessor, const FilterParams &filterParams, const TString &fileName, const DataTweaker &tweaker)
static std::vector< TreeAccessor * > filter (const Accessor &accessor, const FilterList &filterList, const DataTweaker &tweaker)
static TreeAccessormakeTemplate (const Accessor &accessor, const TString &fileName)
static PersistentAccessormerge (const std::vector< const PersistentAccessor * > &accessors, const TString &fileName)
static PersistentAccessormerge (const std::vector< TString > &inputFiles, const TString &fileName)

Private Attributes

unsigned int m_pos
const Historym_cellCache
std::vector< CellInfo * > m_cellInfoCache
TTree * m_cellTree
TTree * m_SCTree
TTree * m_eventTree
TTree * m_runTree
TFile * m_file
HistoryContainerm_historyCont
HistoryContainerm_historyContSC
EventDatam_eventData
RunDatam_runData
std::map< unsigned int, const RunData * > m_runCache

Friends

class Interface

Detailed Description

Definition at line 32 of file TreeAccessor.h.

Constructor & Destructor Documentation

◆ TreeAccessor() [1/2]

LArSamples::TreeAccessor::TreeAccessor ( TTree & cellTree,
TTree & scTree,
TTree & eventTree,
TTree * runTree,
TFile * file )
inline

Constructor.

Definition at line 37 of file TreeAccessor.h.

PersistentAccessor(TTree &cellTree, TTree &SCTree, TTree &eventTree, TTree *runTree, TFile *file)
Constructor.

◆ TreeAccessor() [2/2]

LArSamples::TreeAccessor::TreeAccessor ( const TString & fileName)
inline

Definition at line 40 of file TreeAccessor.h.

◆ ~TreeAccessor()

virtual LArSamples::TreeAccessor::~TreeAccessor ( )
inlinevirtual

Definition at line 44 of file TreeAccessor.h.

44{ resetCache(); }
virtual void resetCache() const

Member Function Documentation

◆ add()

void LArSamples::TreeAccessor::add ( HistoryContainer * cont)
inline

Definition at line 70 of file TreeAccessor.h.

void add(HistoryContainer *cont)

◆ addEvent()

void PersistentAccessor::addEvent ( EventData * eventData)
inherited

Definition at line 175 of file PersistentAccessor.cxx.

176{
178 m_eventTree->Fill();
179 m_eventData = nullptr;
180}
const EventData * eventData(unsigned int i) const

◆ addRun()

void PersistentAccessor::addRun ( RunData * runData)
inherited

Definition at line 183 of file PersistentAccessor.cxx.

184{
186 m_runTree->Fill();
187 m_runData = nullptr;
188}
const RunData * runData(unsigned int i) const

◆ addSC()

void PersistentAccessor::addSC ( HistoryContainer * cont)
inherited

Definition at line 167 of file PersistentAccessor.cxx.

168{
169 m_historyContSC = cont;
170 m_SCTree->Fill();
171 m_historyContSC = nullptr;
172}

◆ cachePos()

unsigned int LArSamples::AbsLArCells::cachePos ( ) const
inlineinherited

Definition at line 48 of file AbsLArCells.h.

48{ return m_pos; }

◆ cellCache()

const History * LArSamples::AbsLArCells::cellCache ( ) const
inlineinherited

Definition at line 47 of file AbsLArCells.h.

47{ return m_cellCache; }
const History * m_cellCache
Definition AbsLArCells.h:55

◆ cellHistory()

const History * AbsLArCells::cellHistory ( unsigned int i) const
virtualinherited

Reimplemented in LArSamples::Interface.

Definition at line 59 of file AbsLArCells.cxx.

60{
61 if (m_pos == i) return m_cellCache;
62 resetCache();
63 const History* history = newCellHistory(i);
64 if (!history) return nullptr;
65 m_cellCache = history;
66 m_pos = i;
67 return m_cellCache;
68}
virtual const History * newCellHistory(unsigned int i) const

◆ cellInfo()

const CellInfo * AbsLArCells::cellInfo ( unsigned int i) const
virtualinherited

Definition at line 71 of file AbsLArCells.cxx.

72{
73 const CellInfo* info = cellInfoCache(i);
74 if (info) return (info->isValid() ? new CellInfo(*info) : nullptr);
75 info = getCellInfo(i);
76 if (info) m_cellInfoCache[i] = new CellInfo(*info, false);
77 //m_cellInfoCache[i] = (info ? new CellInfo(*info, false) : new CellInfo());
78 return info;
79}
std::vector< CellInfo * > m_cellInfoCache
Definition AbsLArCells.h:56
virtual const CellInfo * getCellInfo(unsigned int i) const
const CellInfo * cellInfoCache(unsigned int i) const

◆ cellInfoCache()

const CellInfo * AbsLArCells::cellInfoCache ( unsigned int i) const
inherited

Definition at line 82 of file AbsLArCells.cxx.

83{
84 return m_cellInfoCache[i];
85}

◆ cellTree()

const TTree & LArSamples::PersistentAccessor::cellTree ( ) const
inlineinherited

Definition at line 44 of file PersistentAccessor.h.

◆ currentContainer()

HistoryContainer * LArSamples::PersistentAccessor::currentContainer ( ) const
inlineinherited

Definition at line 66 of file PersistentAccessor.h.

66{ return m_historyCont; }

◆ currentContainerSC()

HistoryContainer * LArSamples::PersistentAccessor::currentContainerSC ( ) const
inlineinherited

Definition at line 67 of file PersistentAccessor.h.

67{ return m_historyContSC; }

◆ eventData()

const EventData * LArSamples::TreeAccessor::eventData ( unsigned int i) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 65 of file TreeAccessor.h.

◆ eventTree()

const TTree & LArSamples::PersistentAccessor::eventTree ( ) const
inlineinherited

Definition at line 46 of file PersistentAccessor.h.

46{ return *m_eventTree; }

◆ file()

TFile * LArSamples::PersistentAccessor::file ( ) const
inlineinherited

Definition at line 49 of file PersistentAccessor.h.

◆ fileName()

TString PersistentAccessor::fileName ( ) const
inherited

Definition at line 154 of file PersistentAccessor.cxx.

155{
156 return (m_file ? m_file->GetName() : "");
157}

◆ filter() [1/2]

std::vector< TreeAccessor * > TreeAccessor::filter ( const Accessor & accessor,
const FilterList & filterList,
const DataTweaker & tweaker )
static

Definition at line 362 of file TreeAccessor.cxx.

365{
366 if (filterList.size() == 0) {
367 cout << "No filter categories specified, done! (?)" << endl;
368 return std::vector<TreeAccessor*>();
369 }
370
371 for (unsigned int f = 0; f < filterList.size(); f++) {
372 cout << "Skimming to " << filterList.fileName(f) << endl;
373 if (!gSystem->AccessPathName(filterList.fileName(f))) {
374 cout << "File already exists, exiting." << endl;
375 return std::vector<TreeAccessor*>();
376 }
377 }
378
379 std::vector<TreeAccessor*> newAccessors;
380 for (unsigned int f = 0; f < filterList.size(); f++)
381 newAccessors.push_back(new TreeAccessor(filterList.fileName(f)));
382 std::map<std::pair<unsigned int, unsigned int>, unsigned int> eventIndices;
383 std::vector< std::map<unsigned int, unsigned int> > eventsToKeep(filterList.size());
384 std::vector< std::map<unsigned int, unsigned int> > runsToKeep(filterList.size());
385
386 double nTot = 0, nPass = 0;
387
388 for (unsigned int i = 0; i < accessor.nEvents(); i++) {
389 const EventData* eventData = accessor.eventData(i);
390 eventIndices[std::pair<unsigned int, unsigned int>(eventData->run(), eventData->event())] = i;
391 }
392
393 for (unsigned int i = 0; i < accessor.nChannels(); i++) {
394 if (i % 25000 == 0) {
395 cout << "Filtering " << i << "/" << accessor.nChannels()
396 << " (passing so far = " << nPass << ", total seen = " << nTot << ")" << endl;
397 //ClassCounts::printCountsTable();
398 }
399 bool first = true;
400
401 const History* history = nullptr;
402 for (unsigned int f = 0; f < filterList.size(); f++) {
403 history = accessor.pass(i, filterList.filterParams(f));
404 if (history) break;
405 }
406 for (unsigned int f = 0; f < filterList.size(); f++) {
407 if (!history || !history->cellInfo() || !filterList.filterParams(f).passCell(*history->cellInfo())) {
408 HistoryContainer* newHist = new HistoryContainer();
409 newAccessors[f]->add(newHist);
410 delete newHist;
411 continue;
412 }
413 if (first) { nTot += history->nData(); first = false; }
414 HistoryContainer* newHist = new HistoryContainer(new CellInfo(*history->cellInfo()));
415 for (unsigned int k = 0; k < history->nData(); k++) {
416 if (!filterList.filterParams(f).passEvent(*history->data(k))) continue;
417 const EventData* eventData = history->data(k)->eventData();
418 std::map<std::pair<unsigned int, unsigned int>, unsigned int>::const_iterator findIndex =
419 eventIndices.find(std::pair<unsigned int, unsigned int>(eventData->run(), eventData->event()));
420 if (findIndex == eventIndices.end()) {
421 cout << "Inconsistent event numbering!!!" << endl;
422 delete newHist;
423 return std::vector<TreeAccessor*>();
424 }
425 int oldEvtIndex = findIndex->second;
426 bool isNewEvt = (eventsToKeep[f].find(oldEvtIndex) == eventsToKeep[f].end());
427 unsigned int newEvtIndex = (isNewEvt ? eventsToKeep[f].size() : eventsToKeep[f][oldEvtIndex]);
428 if (isNewEvt) eventsToKeep[f][oldEvtIndex] = newEvtIndex;
429
430 int oldRunIndex = history->data(k)->eventData()->runIndex();
431 bool isNewRun = (runsToKeep[f].find(oldRunIndex) == runsToKeep[f].end());
432 unsigned int newRunIndex = (isNewRun ? runsToKeep[f].size() : runsToKeep[f][oldRunIndex]);
433 if (isNewRun) runsToKeep[f][oldRunIndex] = newRunIndex;
434
435 Data* newData = tweaker.tweak(*history->data(k), newEvtIndex);
436 if (!newData) {
437 cout << "Filtering failed on data " << k << " of cell " << i << ", aborting" << endl;
438 delete newHist;
439 for (unsigned int f = 0; f < filterList.size(); f++) delete newAccessors[f];
440 return std::vector<TreeAccessor*>();
441 }
442 nPass++;
443 newHist->add(newData->dissolve());
444 }
445 newAccessors[f]->add(newHist);
446 delete newHist;
447 }
448 }
449
450 for (unsigned int f = 0; f < filterList.size(); f++) {
451 cout << "Adding runs..." << endl;
452 std::vector<unsigned int> runsToKeep_ordered(runsToKeep[f].size());
453 for (const auto& runIndex : runsToKeep[f])
454 runsToKeep_ordered[runIndex.second] = runIndex.first;
455
456 for (unsigned int runIndex : runsToKeep_ordered) {
457 RunData* newRun = new RunData(*accessor.runData(runIndex));
458 newAccessors[f]->addRun(newRun);
459 delete newRun;
460 }
461 cout << "Adding events..." << endl;
462 std::vector<unsigned int> eventsToKeep_ordered(eventsToKeep[f].size());
463 for (const auto& eventIndex : eventsToKeep[f])
464 eventsToKeep_ordered[eventIndex.second] = eventIndex.first;
465
466 for (unsigned int eventIndex : eventsToKeep_ordered) {
467 std::map<unsigned int, unsigned int>::const_iterator idx = runsToKeep[f].find(accessor.eventData(eventIndex)->runIndex());
468 int newRunIndex = (idx == runsToKeep[f].end() ? 0 : idx->second);
469 EventData* newEvent = tweaker.tweak(*accessor.eventData(eventIndex), newRunIndex);
470 newAccessors[f]->addEvent(newEvent);
471 delete newEvent;
472 }
473 }
474 cout << "Filtering done! final size = " << nPass << endl;
475 //ClassCounts::printCountsTable();
476 for (unsigned int f = 0; f < filterList.size(); f++) {
477 cout << "Saving " << newAccessors[f]->fileName() << endl;
478 newAccessors[f]->save();
479 }
480 return newAccessors;
481}
@ Data
Definition BaseObject.h:11
Data * tweak(const Data &data, int evtIndex=-1) const
const EventData * eventData() const
Definition Data.h:95
const DataContainer * dissolve()
Definition Data.cxx:56
unsigned int size() const
Definition FilterList.h:29
const FilterParams & filterParams(unsigned int i) const
Definition FilterList.h:30
const TString & fileName(unsigned int i) const
Definition FilterList.h:31
bool passCell(const CellInfo &info) const
bool passEvent(const Data &data) const
const CellInfo * cellInfo() const
Definition History.h:56
const Data * data(unsigned int i) const
Definition History.cxx:91
unsigned int nData() const
Definition History.h:51
const EventData * eventData(unsigned int i) const
TreeAccessor(TTree &cellTree, TTree &scTree, TTree &eventTree, TTree *runTree, TFile *file)
Constructor.
bool first
Definition DeMoScan.py:534
thread_local event_number_t eventIndex
const AccessorWrapper< T > * accessor(xAOD::JetAttribute::AttributeID id)
Returns an attribute accessor corresponding to an AttributeID.

◆ filter() [2/2]

TreeAccessor * TreeAccessor::filter ( const Accessor & accessor,
const FilterParams & filterParams,
const TString & fileName,
const DataTweaker & tweaker )
static

Definition at line 351 of file TreeAccessor.cxx.

355{
356 FilterList filterList; filterList.add(filterParams, fileName);
357 std::vector<TreeAccessor*> result = filter(accessor, filterList, tweaker);
358 return (!result.empty() ? result[0] : nullptr);
359}
void add(const FilterParams &params, const TString &fileName)
Definition FilterList.h:27
static TreeAccessor * filter(const Accessor &accessor, const FilterParams &filterParams, const TString &fileName, const DataTweaker &tweaker)

◆ getCellEntry()

int LArSamples::PersistentAccessor::getCellEntry ( unsigned int i) const
inlineinherited

Definition at line 72 of file PersistentAccessor.h.

72{ return m_cellTree->GetEntry(i); }

◆ getCellHistory()

const History * TreeAccessor::getCellHistory ( unsigned int i) const
virtual

Implements LArSamples::AbsLArCells.

Definition at line 62 of file TreeAccessor.cxx.

63{
64 if (i >= cellTree().GetEntries()) return nullptr;
65 getCellEntry(i);
66
67 std::vector<const EventData*> eventDatas;
68
69 for (unsigned int k = 0; k < currentContainer()->nDataContainers(); k++) {
70 const EventData* evtData = eventData(currentContainer()->dataContainer(k)->eventIndex());
71 EventData* newEvtData = (evtData ? new EventData(*evtData) : nullptr);
72 eventDatas.push_back(newEvtData);
73 }
74 return (currentContainer()->cellInfo() ? new History(*currentContainer(), eventDatas, i) : nullptr);
75}
TGraphErrors * GetEntries(TH2F *histo)
virtual const CellInfo * cellInfo(unsigned int i) const
unsigned int nDataContainers() const
HistoryContainer * currentContainer() const
int getCellEntry(unsigned int i) const

◆ getCellInfo()

const CellInfo * TreeAccessor::getCellInfo ( unsigned int i) const
virtual

Reimplemented from LArSamples::AbsLArCells.

Definition at line 47 of file TreeAccessor.cxx.

48{
49 const HistoryContainer* cont = historyContainer(i);
50 if (!cont || !cont->cellInfo()) return nullptr;
51 return new CellInfo(*cont->cellInfo());
52}
const CellInfo * cellInfo() const
const HistoryContainer * historyContainer(unsigned int i) const

◆ getSCEntry()

int LArSamples::PersistentAccessor::getSCEntry ( unsigned int i) const
inlineinherited

Definition at line 73 of file PersistentAccessor.h.

73{ return m_SCTree->GetEntry(i); }

◆ getSCHistory()

const History * TreeAccessor::getSCHistory ( unsigned int i) const
virtual

Implements LArSamples::AbsLArCells.

Definition at line 77 of file TreeAccessor.cxx.

78{
79 if (i >= SCTree().GetEntries()) return nullptr;
80 getSCEntry(i);
81
82 std::vector<const EventData*> eventDatas;
83
84 for (unsigned int k = 0; k < currentContainerSC()->nDataContainers(); k++) {
85 const EventData* evtData = eventData(currentContainerSC()->dataContainer(k)->eventIndex());
86 EventData* newEvtData = (evtData ? new EventData(*evtData) : nullptr);
87 eventDatas.push_back(newEvtData);
88 }
89 return (currentContainerSC()->cellInfo() ? new History(*currentContainerSC(), eventDatas, i) : nullptr);
90}
HistoryContainer * currentContainerSC() const
int getSCEntry(unsigned int i) const

◆ getSCInfo()

const CellInfo * TreeAccessor::getSCInfo ( unsigned int i) const

Definition at line 54 of file TreeAccessor.cxx.

55{
56 const HistoryContainer* cont = historyContainerSC(i);
57 if (!cont || !cont->cellInfo()) return nullptr;
58 return new CellInfo(*cont->cellInfo());
59}
const HistoryContainer * historyContainerSC(unsigned int i) const

◆ historyContainer()

const HistoryContainer * PersistentAccessor::historyContainer ( unsigned int i) const
inherited

Definition at line 106 of file PersistentAccessor.cxx.

107{
108 m_cellTree->GetEntry(i);
109 return m_historyCont;
110}

◆ historyContainerSC()

const HistoryContainer * PersistentAccessor::historyContainerSC ( unsigned int i) const
inherited

Definition at line 112 of file PersistentAccessor.cxx.

113{
114 m_SCTree->GetEntry(i);
115 return m_historyContSC;
116}

◆ historySize()

unsigned int LArSamples::TreeAccessor::historySize ( unsigned int i) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 61 of file TreeAccessor.h.

unsigned int historySize(unsigned int i) const

◆ historySizeSC()

unsigned int LArSamples::TreeAccessor::historySizeSC ( unsigned int i) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 62 of file TreeAccessor.h.

unsigned int historySizeSC(unsigned int i) const

◆ makeTemplate()

TreeAccessor * TreeAccessor::makeTemplate ( const Accessor & accessor,
const TString & fileName )
static

Definition at line 484 of file TreeAccessor.cxx.

485{
486 TreeAccessor* newAccessor = new TreeAccessor(fileName);
487
488 std::vector<short> samples(5, 0);
489 std::vector<float> autoCorrs(4, 0);
490
491 RunData* dummyRun = new RunData(0);
492 newAccessor->addRun(dummyRun);
493 delete dummyRun;
494
495 EventData* dummyEvent = new EventData(0, 0, 0, 0);
496 newAccessor->addEvent(dummyEvent);
497 delete dummyEvent;
498
499 for (unsigned int i = 0; i < accessor.nChannels(); i++) {
500 if (i % 25000 == 0)
501 cout << "Templating " << i << "/" << accessor.nChannels() << endl;
502 const History* history = accessor.cellHistory(i);
503 if (!history || !history->cellInfo()) {
504 HistoryContainer* newHist = new HistoryContainer();
505 newAccessor->add(newHist);
506 delete newHist;
507 continue;
508 }
509 HistoryContainer* newHist = new HistoryContainer(new CellInfo(*history->cellInfo()));
510 DataContainer* dataContainer = new DataContainer(CaloGain::LARHIGHGAIN, samples, 0, 0, 0, 0, autoCorrs);
511 newHist->add(dataContainer);
512 newAccessor->add(newHist);
513 delete newHist;
514 }
515
516 newAccessor->save();
517 return newAccessor;
518}
void addEvent(EventData *eventData)
void add(HistoryContainer *cont)
@ LARHIGHGAIN
Definition CaloGain.h:18

◆ merge() [1/4]

PersistentAccessor * PersistentAccessor::merge ( const std::vector< const PersistentAccessor * > & accessors,
const TString & fileName )
staticinherited

Definition at line 209 of file PersistentAccessor.cxx.

211{
213 unsigned int size = 0;
214 CellInfo* info = nullptr;
215
216 int evtIndex = 0, runIndex = 0;
217 std::map<std::pair<int, int>, int> evtMap;
218 std::map<int, int> runMap;
219 std::map< std::pair<const PersistentAccessor*, int>, int > evtAccMap;
220
221 cout << "Merging runs" << endl;
222 for (const PersistentAccessor* accessor : accessors) {
223 if (!accessor) {
224 cout << "Cannot merge: one of the inputs is null!" << endl;
225 delete newAcc;
226 return nullptr;
227 }
228 for (unsigned int i = 0; i < accessor->nRuns(); i++) {
229 int run = accessor->runData(i)->run();
230 if (runMap.find(run) != runMap.end()) continue;
231 runMap[run] = runIndex;
232 RunData* newRun = new RunData(*accessor->runData(i));
233 newAcc->addRun(newRun);
234 delete newRun;
235 runIndex++;
236 }
237 }
238
239 cout << "Merging events" << endl;
240 unsigned int nEventsTotal = 0, iEvt = 0;
241 for (const PersistentAccessor* accessor : accessors) {
242 nEventsTotal += accessor->nEvents();
243 }
244 for (const PersistentAccessor* accessor : accessors) {
245 for (unsigned int i = 0; i < accessor->nEvents(); i++) {
246 iEvt++;
247 if (iEvt % 100000 == 0) cout << "Merging event " << iEvt << "/" << nEventsTotal << endl;
248 std::pair<int, int> evtId(accessor->eventData(i)->run(), accessor->eventData(i)->event());
249 std::pair<const PersistentAccessor*, int> evtAccId(accessor, i);
250 if (evtMap.find(evtId) != evtMap.end()) {
251 cout << "ERROR: Skipping duplicate entry for run " << accessor->eventData(i)->run() << ", event " << accessor->eventData(i)->event() << endl;
252 continue;
253 }
254 evtAccMap[evtAccId] = evtIndex;
255 evtMap[evtId] = evtIndex;
256 std::map<int, int>::const_iterator idx = runMap.find(accessor->eventData(i)->run());
257 int newRunIndex = (idx == runMap.end() ? -999 : idx->second);
258 //cout << "Storing eventData for run " << accessor->eventData(i)->run() << " at index " << newRunIndex << " instead of " << accessor->eventData(i)->runIndex() << endl;
259 EventData* newEvent = new EventData(*accessor->eventData(i), newRunIndex);
260 newAcc->addEvent(newEvent);
261 delete newEvent;
262 evtIndex++;
263 }
264 }
265
266 cout << "Merging cells" << endl;
267 for (unsigned int i = 0; i < Definitions::nChannels; i++) {
268 if (i % 10000 == 0) {
269 cout << "Merging channel " << i << "/" << Definitions::nChannels << " (current size = " << size << ")" << endl;
270 //ClassCounts::printCountsTable();
271 }
272 HistoryContainer* newHistory = nullptr;
273 for (const PersistentAccessor* accessor : accessors) {
274 const HistoryContainer* history = accessor->historyContainer(i);
275 if (!history || !history->isValid()) continue;
276 if (!newHistory) {
277 info = new CellInfo(*history->cellInfo());
278 newHistory = new HistoryContainer(info);
279 }
280 for (unsigned int j = 0; j < history->nDataContainers(); j++) {
281 DataContainer* newDC = new DataContainer(*history->dataContainer(j));
282 std::map<std::pair<const PersistentAccessor*, int>, int>::const_iterator newIndex
283 = evtAccMap.find(std::make_pair(accessor, history->dataContainer(j)->eventIndex()));
284 if (newIndex == evtAccMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
285 newDC->setEventIndex(newIndex != evtAccMap.end() ? newIndex->second : -1);
286 newHistory->add(newDC);
287 if (!info->shape(history->dataContainer(j)->gain())) {
288 const ShapeInfo* shape = history->cellInfo()->shape(history->dataContainer(j)->gain());
289 //if (!shape)
290 // cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << history->dataContainer(j)->gain() << endl;
291 info->setShape(history->dataContainer(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
292 }
293 }
294 }
295 if (newHistory) size += newHistory->nDataContainers();
296 newAcc->add(newHistory);
297 delete newHistory;
298 }
299
300
301 cout << "Merging SC" << endl;
302 size=0;
303 for (unsigned int i = 0; i < Definitions::nChannelsSC; i++) {
304 if (i % 10000 == 0) {
305 cout << "Merging channel " << i << "/" << Definitions::nChannelsSC << " (current size = " << size << ")" << endl;
306 //ClassCounts::printCountsTable();
307 }
308 HistoryContainer* newHistory = nullptr;
309 for (const PersistentAccessor* accessor : accessors) {
310 const HistoryContainer* history = accessor->historyContainerSC(i);
311 if (!history || !history->isValid()) continue;
312 if (!newHistory) {
313 info = new CellInfo(*history->cellInfo());
314 newHistory = new HistoryContainer(info);
315 }
316 for (unsigned int j = 0; j < history->nDataContainers(); j++) {
317 DataContainer* newDC = new DataContainer(*history->dataContainer(j));
318 std::map<std::pair<const PersistentAccessor*, int>, int>::const_iterator newIndex
319 = evtAccMap.find(std::make_pair(accessor, history->dataContainer(j)->eventIndex()));
320 if (newIndex == evtAccMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
321 newDC->setEventIndex(newIndex != evtAccMap.end() ? newIndex->second : -1);
322 newHistory->add(newDC);
323 if (!info->shape(history->dataContainer(j)->gain())) {
324 const ShapeInfo* shape = history->cellInfo()->shape(history->dataContainer(j)->gain());
325 //if (!shape)
326 // cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << history->dataContainer(j)->gain() << endl;
327 info->setShape(history->dataContainer(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
328 }
329 }
330 }
331 if (newHistory) size += newHistory->nDataContainers();
332 newAcc->addSC(newHistory);
333 delete newHistory;
334 }
335
336
337 cout << "Merging done, final size = " << size << endl;
338 newAcc->save();
339 return newAcc;
340}
const ShapeInfo * shape(CaloGain::CaloGain gain) const
Definition CellInfo.cxx:78
CaloGain::CaloGain gain() const
void setEventIndex(int index)
void add(const DataContainer *data)
append data (takes ownership)
const DataContainer * dataContainer(unsigned int i) const
void addSC(HistoryContainer *cont)

◆ merge() [2/4]

PersistentAccessor * PersistentAccessor::merge ( const std::vector< TString > & inputFiles,
const TString & fileName )
staticinherited

Definition at line 343 of file PersistentAccessor.cxx.

344{
345 std::vector<const PersistentAccessor*> accessors;
346 for (const TString& inputFile : inputFiles) {
347 PersistentAccessor* accessor = open(inputFile);
348 if (!accessor) {
349 cout << "ERROR : could not open file " << inputFile << endl;
350 return nullptr;
351 }
352 accessors.push_back(accessor);
353 }
355 for (const PersistentAccessor* accessor : accessors) {
356 delete accessor;
357 }
358 return result;
359}
static PersistentAccessor * open(const TString &fileName)
static PersistentAccessor * merge(const std::vector< const PersistentAccessor * > &accessors, const TString &fileName)

◆ merge() [3/4]

TreeAccessor * TreeAccessor::merge ( const std::vector< const Accessor * > & accessors,
const TString & fileName,
const TString & LBFile )
static

Definition at line 182 of file TreeAccessor.cxx.

183{
184 // O.Simard - 01.07.2011
185 // Alternative version with LB cleaning.
186
187 bool kBadLB=false;
188 std::vector<unsigned int> LBList;
189 std::ifstream infile(LBFile.Data());
190 std::string line;
191 // assume single-line format with coma-separated LBs (from python)
192 std::getline(infile,line,'\n');
193 TString filter(line.c_str());
194 TObjArray* list = filter.Tokenize(", "); // coma\space delimiters
195 if(list->GetEntries() == 0){
196 printf("No LB filtering specified, or bad format. Exiting.\n");
197 delete list;
198 return nullptr;
199 }
200
201 for(int k = 0; k < list->GetEntries(); k++){
202 TObjString* tobs = (TObjString*)(list->At(k));
203 LBList.push_back((unsigned int)(tobs->String()).Atoi());
204 }
205 delete list;
206 printf("LB List: %d\n",(int)LBList.size());
207
208
209 // from here it is similar to other functions of this class
210 TreeAccessor* newAcc = new TreeAccessor(fileName);
211 unsigned int size = 0;
212 CellInfo* info = nullptr;
213
214 int evtIndex = 0, runIndex = 0;
215 std::map<std::pair<int, int>, int> evtMap;
216 std::map<int, int> runMap;
217
218 cout << "Merging runs" << endl;
219 for (const Accessor* accessor : accessors) {
220 if (!accessor) {
221 cout << "Cannot merge: one of the inputs is null!" << endl;
222 delete newAcc;
223 return nullptr;
224 }
225 for (unsigned int i = 0; i < accessor->nRuns(); i++) {
226 int run = accessor->runData(i)->run();
227 if (runMap.find(run) != runMap.end()) continue;
228 runMap[run] = runIndex;
229 RunData* newRun = new RunData(*accessor->runData(i));
230 newAcc->addRun(newRun);
231 delete newRun;
232 runIndex++;
233 }
234 }
235
236 cout << "Merging events" << endl;
237 unsigned int nEventsTotal = 0, iEvt = 0;
238 for (const Accessor* accessor : accessors)
239 nEventsTotal += accessor->nEvents();
240 for (const Accessor* accessor : accessors) {
241 for (unsigned int i = 0; i < accessor->nEvents(); i++) {
242 iEvt++;
243 if (iEvt % 100000 == 0) cout << "Merging event " << iEvt << "/" << nEventsTotal << endl;
244
245 // ----
246 // skip LBs which are found in the list
247 kBadLB=false;
248 for(unsigned int ilb = 0 ; ilb < LBList.size() ; ilb++){
249 if(LBList.at(ilb)==accessor->eventData(i)->lumiBlock()){
250 kBadLB=true;
251 //printf(" == Rejecting Event in LB %4d\n",accessor->eventData(i)->lumiBlock());
252 break;
253 }
254 }
255 if(kBadLB) continue;
256 // ----
257
258 std::pair<int, int> evtId(accessor->eventData(i)->run(), accessor->eventData(i)->event());
259 if (evtMap.find(evtId) != evtMap.end()) continue;
260 evtMap[evtId] = evtIndex;
261 std::map<int, int>::const_iterator idx = runMap.find(accessor->eventData(i)->run());
262 int newRunIndex = (idx == runMap.end() ? -999 : idx->second);
263 EventData* newEvent = new EventData(*accessor->eventData(i), newRunIndex);
264 newAcc->addEvent(newEvent);
265 delete newEvent;
266 evtIndex++;
267 }
268 }
269
270 cout << "Merging cells" << endl;
271 for (unsigned int i = 0; i < newAcc->nChannels(); i++) {
272 if (i % 10000 == 0) {
273 cout << "Merging channel " << i << "/" << newAcc->nChannels() << " (current size = " << size << ")" << endl;
274 //ClassCounts::printCountsTable();
275 }
276 HistoryContainer* historyContainer = nullptr;
277 for (const Accessor* accessor : accessors) {
278 const History* history = accessor->cellHistory(i);
279 if (!history || !history->isValid()) continue;
280 if (!historyContainer) {
281 info = new CellInfo(*history->cellInfo());
282 historyContainer = new HistoryContainer(info);
283 }
284 for (unsigned int j = 0; j < history->nData(); j++) {
285 DataContainer* newDC = new DataContainer(history->data(j)->container());
286 std::map<std::pair<int, int>, int>::const_iterator newIndex
287 = evtMap.find(std::make_pair(history->data(j)->run(), history->data(j)->event()));
288 //if (newIndex == evtMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
289 newDC->setEventIndex(newIndex != evtMap.end() ? newIndex->second : -1);
290 historyContainer->add(newDC);
291 if (!info->shape(history->data(j)->gain())) {
292 const ShapeInfo* shape = history->cellInfo()->shape(history->data(j)->gain());
293 if (!shape)
294 cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << Data::gainStr(history->data(j)->gain()) << endl;
295 info->setShape(history->data(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
296 }
297 }
298 }
300 size += historyContainer->nDataContainers();
301 }
302 newAcc->add(historyContainer);
303 delete historyContainer;
304 historyContainer=nullptr;
305 //}
306 }
307
308 cout << "Merging SC" << endl;
309 for (unsigned int i = 0; i < newAcc->nChannelsSC(); i++) {
310 if (i % 10000 == 0) {
311 cout << "Merging channel " << i << "/" << newAcc->nChannelsSC() << " (current size = " << size << ")" << endl;
312 }
313 HistoryContainer* historyContainer = nullptr;
314 for (const Accessor* accessor : accessors) {
315 const History* history = accessor->getSCHistory(i);
316 if (!history || !history->isValid()) continue;
317 if (!historyContainer) {
318 info = new CellInfo(*history->cellInfo());
319 historyContainer = new HistoryContainer(info);
320 }
321 for (unsigned int j = 0; j < history->nData(); j++) {
322 DataContainer* newDC = new DataContainer(history->data(j)->container());
323 std::map<std::pair<int, int>, int>::const_iterator newIndex
324 = evtMap.find(std::make_pair(history->data(j)->run(), history->data(j)->event()));
325 //if (newIndex == evtMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
326 newDC->setEventIndex(newIndex != evtMap.end() ? newIndex->second : -1);
327 historyContainer->add(newDC);
328 if (!info->shape(history->data(j)->gain())) {
329 const ShapeInfo* shape = history->cellInfo()->shape(history->data(j)->gain());
330 if (!shape)
331 cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << Data::gainStr(history->data(j)->gain()) << endl;
332 info->setShape(history->data(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
333 }
334 }
335 }
337 size += historyContainer->nDataContainers();
338 }
339 newAcc->addSC(historyContainer);
340 delete historyContainer;
341 historyContainer=nullptr;
342 //}
343 }
344
345 cout << "Merging done, final size = " << size << endl;
346 newAcc->save();
347 return newAcc;
348}
virtual unsigned int nChannels() const
Definition AbsLArCells.h:34
virtual unsigned int nChannelsSC() const
Definition AbsLArCells.h:35
CaloGain::CaloGain gain() const
Definition Data.h:85
static TString gainStr(CaloGain::CaloGain gain)
Definition Data.cxx:505
const DataContainer & container() const
Definition Data.h:156
int event() const
Definition Data.cxx:28
int run() const
Definition Data.cxx:27
bool isValid() const
Definition History.cxx:152
list(name, path='/')
Definition histSizes.py:38
str infile
Definition run.py:13

◆ merge() [4/4]

TreeAccessor * TreeAccessor::merge ( const std::vector< const Accessor * > & accessors,
const TString & fileName = "" )
static

Definition at line 92 of file TreeAccessor.cxx.

94{
95 cout << "Merging to " << fileName << endl;
96 TreeAccessor* newAcc = new TreeAccessor(fileName);
97 unsigned int size = 0;
98 CellInfo* info = nullptr;
99
100 int evtIndex = 0, runIndex = 0;
101 std::map<std::pair<int, int>, int> evtMap;
102 std::map<int, int> runMap;
103
104 cout << "Merging runs" << endl;
105 for (const Accessor* accessor : accessors) {
106 if (!accessor) {
107 cout << "Cannot merge: one of the inputs is null!" << endl;
108 delete newAcc;
109 return nullptr;
110 }
111 for (unsigned int i = 0; i < accessor->nRuns(); i++) {
112 int run = accessor->runData(i)->run();
113 if (runMap.find(run) != runMap.end()) continue;
114 runMap[run] = runIndex;
115 RunData* newRun = new RunData(*accessor->runData(i));
116 newAcc->addRun(newRun);
117 delete newRun;
118 runIndex++;
119 }
120 }
121
122 cout << "Merging events" << endl;
123 unsigned int nEventsTotal = 0, iEvt = 0;
124 for (const Accessor* accessor : accessors)
125 nEventsTotal += accessor->nEvents();
126 for (const Accessor* accessor : accessors) {
127 for (unsigned int i = 0; i < accessor->nEvents(); i++) {
128 iEvt++;
129 if (iEvt % 100000 == 0) cout << "Merging event " << iEvt << "/" << nEventsTotal << endl;
130 std::pair<int, int> evtId(accessor->eventData(i)->run(), accessor->eventData(i)->event());
131 if (evtMap.find(evtId) != evtMap.end()) continue;
132 evtMap[evtId] = evtIndex;
133 std::map<int, int>::const_iterator idx = runMap.find(accessor->eventData(i)->run());
134 int newRunIndex = (idx == runMap.end() ? -999 : idx->second);
135 //cout << "Storing eventData for run " << accessor->eventData(i)->run() << " at index " << newRunIndex << " instead of " << accessor->eventData(i)->runIndex() << endl;
136 EventData* newEvent = new EventData(*accessor->eventData(i), newRunIndex);
137 newAcc->addEvent(newEvent);
138 delete newEvent;
139 evtIndex++;
140 }
141 }
142
143 for (unsigned int i = 0; i < newAcc->nChannels(); i++) {
144 if (i % 10000 == 0) {
145 cout << "Merging channel " << i << "/" << newAcc->nChannels() << " (current size = " << size << ")" << endl;
146 //ClassCounts::printCountsTable();
147 }
148 HistoryContainer* historyContainer = nullptr;
149 for (const Accessor* accessor : accessors) {
150 const History* history = accessor->cellHistory(i);
151 if (!history || !history->isValid()) continue;
152 if (!historyContainer) {
153 info = new CellInfo(*history->cellInfo());
154 historyContainer = new HistoryContainer(info);
155 }
156 for (unsigned int j = 0; j < history->nData(); j++) {
157 DataContainer* newDC = new DataContainer(history->data(j)->container());
158 std::map<std::pair<int, int>, int>::const_iterator newIndex
159 = evtMap.find(std::make_pair(history->data(j)->run(), history->data(j)->event()));
160 if (newIndex == evtMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
161 newDC->setEventIndex(newIndex != evtMap.end() ? newIndex->second : -1);
162 historyContainer->add(newDC);
163 if (!info->shape(history->data(j)->gain())) {
164 const ShapeInfo* shape = history->cellInfo()->shape(history->data(j)->gain());
165 if (!shape)
166 cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << Data::gainStr(history->data(j)->gain()) << endl;
167 info->setShape(history->data(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
168 }
169 }
170 }
171 if (historyContainer) size += historyContainer->nDataContainers();
172 newAcc->add(historyContainer);
173 delete historyContainer;
174 }
175
176 cout << "Merging done, final size = " << size << endl;
177 newAcc->save();
178 return newAcc;
179}

◆ nChannels()

virtual unsigned int LArSamples::AbsLArCells::nChannels ( ) const
inlinevirtualinherited

Reimplemented in LArSamples::MonitorBase.

Definition at line 34 of file AbsLArCells.h.

34{ return Definitions::nChannels; }

◆ nChannelsSC()

virtual unsigned int LArSamples::AbsLArCells::nChannelsSC ( ) const
inlinevirtualinherited

Definition at line 35 of file AbsLArCells.h.

◆ nEvents()

unsigned int LArSamples::TreeAccessor::nEvents ( ) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 64 of file TreeAccessor.h.

◆ newCellHistory()

const History * AbsLArCells::newCellHistory ( unsigned int i) const
virtualinherited

Definition at line 44 of file AbsLArCells.cxx.

45{
46 const History* history = getCellHistory(i);
47 if (!history) return nullptr;
48 if (!m_cellInfoCache[i]) {
49 const CellInfo* ci=history->cellInfo();
50 if (ci) {
51 m_cellInfoCache[i]=new CellInfo(*ci,false);
52 }
53 }
54 // m_cellInfoCache[i] = (history->cellInfo() ? new CellInfo(*history->cellInfo(), false) : new CellInfo());
55 return history;
56}
virtual const History * getCellHistory(unsigned int i) const =0

◆ nRuns()

unsigned int LArSamples::TreeAccessor::nRuns ( ) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 67 of file TreeAccessor.h.

◆ open()

TreeAccessor * TreeAccessor::open ( const TString & fileName)
static

Definition at line 30 of file TreeAccessor.cxx.

31{
32 TFile* file = TFile::Open(fileName);
33 if (!file) return nullptr;
34 if (!file->IsOpen()) { delete file; return nullptr; }
35 TTree* cellTree = (TTree*)file->Get("cells");
36 if (!cellTree) return nullptr;
37 TTree* scTree = (TTree*)file->Get("SC");
38 if (!scTree) return nullptr;
39 TTree* eventTree = (TTree*)file->Get("events");
40 if (!eventTree) return nullptr;
41 TTree* runTree = (TTree*)file->Get("runs");
43 return accessor;
44}

◆ pass()

const History * AbsLArCells::pass ( unsigned int i,
const FilterParams & f ) const
inherited

Definition at line 99 of file AbsLArCells.cxx.

100{
101 //std::cout << "Called AbsLArCells with hash " << i << std::endl;
102 if (!f.passHash(i)) return nullptr;
103 const CellInfo* info = cellInfo(i);
104 if (!info) {
105 return nullptr;
106 }
107 //std::cout << "Called AbsLArCells::pass on a cell belonging to " << Id::str(info->calo()) << std::endl;
108 bool result = f.passCell(*info);
109 delete info;
110 return result ? cellHistory(i) : nullptr;
111}
virtual const History * cellHistory(unsigned int i) const

◆ resetCache()

void AbsLArCells::resetCache ( ) const
virtualinherited

Definition at line 34 of file AbsLArCells.cxx.

35{
36 if (m_cellCache) {
37 delete m_cellCache;
38 m_cellCache = nullptr;
39 }
40 m_pos = nChannels() + 1;
41}

◆ resetCellInfoCache()

void AbsLArCells::resetCellInfoCache ( )
inherited

Definition at line 114 of file AbsLArCells.cxx.

115{
116 unsigned int i = 0;
117 for (std::vector<CellInfo*>::iterator cellInfo = m_cellInfoCache.begin();
118 cellInfo != m_cellInfoCache.end(); ++cellInfo, i++)
119 if (*cellInfo) {
120 delete *cellInfo;
121 *cellInfo = 0;
122 }
123}

◆ runData()

const RunData * LArSamples::TreeAccessor::runData ( unsigned int i) const
inlinevirtual

Implements LArSamples::Accessor.

Definition at line 68 of file TreeAccessor.h.

68{ return PersistentAccessor::runData(i); }

◆ runTree()

const TTree & LArSamples::PersistentAccessor::runTree ( ) const
inlineinherited

Definition at line 47 of file PersistentAccessor.h.

47{ return *m_runTree; }

◆ save()

bool PersistentAccessor::save ( ) const
inherited

Definition at line 191 of file PersistentAccessor.cxx.

192{
193 if (!m_file) return 0;
194 m_file->cd();
195 cout << "Writing " << m_runTree->GetEntries() << " run(s)..." << endl;
196 m_runTree->Write();
197 cout << "Writing " << m_eventTree->GetEntries() << " event(s)..." << endl;
198 m_eventTree->Write();
199 cout << "Writing " << m_cellTree->GetEntries() << " cell(s)..." << endl;
200 m_cellTree->Write();
201 cout << "Writing " << m_SCTree->GetEntries() << " SC(s)..." << endl;
202 m_SCTree->Write();
203 m_file->Flush();
204 cout << "Writing done!" << endl;
205 return true;
206}

◆ SCTree()

const TTree & LArSamples::PersistentAccessor::SCTree ( ) const
inlineinherited

Definition at line 45 of file PersistentAccessor.h.

45{ return *m_SCTree; }

◆ writeToFile()

bool TreeAccessor::writeToFile ( const TString & fileName) const
virtual

Implements LArSamples::Accessor.

Definition at line 520 of file TreeAccessor.cxx.

521{
522 TFile* newFile = new TFile(fileName, "RECREATE");
523 if (newFile && !newFile->IsOpen()) { delete newFile; newFile = nullptr; }
524 if (!newFile) return false;
525
526 cellTree().Write();
527 eventTree().Write();
528
529 delete newFile;
530
531 return true;
532}

◆ Interface

friend class Interface
friend

Definition at line 55 of file TreeAccessor.h.

Member Data Documentation

◆ m_cellCache

const History* LArSamples::AbsLArCells::m_cellCache
mutableprivateinherited

Definition at line 55 of file AbsLArCells.h.

◆ m_cellInfoCache

std::vector<CellInfo*> LArSamples::AbsLArCells::m_cellInfoCache
mutableprivateinherited

Definition at line 56 of file AbsLArCells.h.

◆ m_cellTree

TTree* LArSamples::PersistentAccessor::m_cellTree
privateinherited

Definition at line 77 of file PersistentAccessor.h.

◆ m_eventData

EventData* LArSamples::PersistentAccessor::m_eventData
mutableprivateinherited

Definition at line 81 of file PersistentAccessor.h.

◆ m_eventTree

TTree * LArSamples::PersistentAccessor::m_eventTree
privateinherited

Definition at line 77 of file PersistentAccessor.h.

◆ m_file

TFile* LArSamples::PersistentAccessor::m_file
mutableprivateinherited

Definition at line 78 of file PersistentAccessor.h.

◆ m_historyCont

HistoryContainer* LArSamples::PersistentAccessor::m_historyCont
mutableprivateinherited

Definition at line 79 of file PersistentAccessor.h.

◆ m_historyContSC

HistoryContainer* LArSamples::PersistentAccessor::m_historyContSC
mutableprivateinherited

Definition at line 80 of file PersistentAccessor.h.

◆ m_pos

unsigned int LArSamples::AbsLArCells::m_pos
mutableprivateinherited

Definition at line 54 of file AbsLArCells.h.

◆ m_runCache

std::map<unsigned int, const RunData*> LArSamples::PersistentAccessor::m_runCache
mutableprivateinherited

Definition at line 83 of file PersistentAccessor.h.

◆ m_runData

RunData* LArSamples::PersistentAccessor::m_runData
mutableprivateinherited

Definition at line 82 of file PersistentAccessor.h.

◆ m_runTree

TTree * LArSamples::PersistentAccessor::m_runTree
privateinherited

Definition at line 77 of file PersistentAccessor.h.

◆ m_SCTree

TTree * LArSamples::PersistentAccessor::m_SCTree
privateinherited

Definition at line 77 of file PersistentAccessor.h.


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