ATLAS Offline Software
TreeAccessor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include "LArSamplesMon/Data.h"
8 #include "LArCafJobs/EventData.h"
9 #include "LArCafJobs/RunData.h"
13 #include "TObjString.h"
14 #include "TFile.h"
15 #include "TTree.h"
16 #include "TSystem.h"
17 #include "TString.h"
18 #include <iostream>
19 #include <fstream>
20 #include <iomanip>
21 
22 using std::cout;
23 using std::endl;
24 
25 using namespace LArSamples;
26 
27 
29 {
30  TFile* file = TFile::Open(fileName);
31  if (!file) return nullptr;
32  if (!file->IsOpen()) { delete file; return nullptr; }
33  TTree* cellTree = (TTree*)file->Get("cells");
34  if (!cellTree) return nullptr;
35  TTree* eventTree = (TTree*)file->Get("events");
36  if (!eventTree) return nullptr;
37  TTree* runTree = (TTree*)file->Get("runs");
39  return accessor;
40 }
41 
42 
43 const CellInfo* TreeAccessor::getCellInfo(unsigned int i) const
44 {
45  const HistoryContainer* cont = historyContainer(i);
46  if (!cont || !cont->cellInfo()) return nullptr;
47  return new CellInfo(*cont->cellInfo());
48 }
49 
50 
51 const History* TreeAccessor::getCellHistory(unsigned int i) const
52 {
53  //cout << "A" << endl;
54  if (i >= cellTree().GetEntries()) return nullptr;
55  //cout << "---> TTree::GetEntry " << i << endl;
56  getCellEntry(i);
57  //cout << "---> done TTree::GetEntry" << endl;
58 
59  //cout << "B " << currentContainer()->nDataContainers() << endl;
60  std::vector<const EventData*> eventDatas;
61 
62  for (unsigned int k = 0; k < currentContainer()->nDataContainers(); k++) {
63  const EventData* evtData = eventData(currentContainer()->dataContainer(k)->eventIndex());
64  EventData* newEvtData = (evtData ? new EventData(*evtData) : nullptr);
65  eventDatas.push_back(newEvtData);
66  }
67  //cout << "C" << endl;
68  //cout << "---> TreeAcc : make new hist" << endl;
69  return (currentContainer()->cellInfo() ? new History(*currentContainer(), eventDatas, i) : nullptr);
70 }
71 
72 
73 TreeAccessor* TreeAccessor::merge(const std::vector<const Accessor*>& accessors,
74  const TString& fileName)
75 {
76  cout << "Merging to " << fileName << endl;
77  TreeAccessor* newAcc = new TreeAccessor(fileName);
78  unsigned int size = 0;
79  CellInfo* info = nullptr;
80 
81  int evtIndex = 0, runIndex = 0;
82  std::map<std::pair<int, int>, int> evtMap;
83  std::map<int, int> runMap;
84 
85  cout << "Merging runs" << endl;
86  for (const Accessor* accessor : accessors) {
87  if (!accessor) {
88  cout << "Cannot merge: one of the inputs is null!" << endl;
89  return nullptr;
90  }
91  for (unsigned int i = 0; i < accessor->nRuns(); i++) {
92  int run = accessor->runData(i)->run();
93  if (runMap.find(run) != runMap.end()) continue;
94  runMap[run] = runIndex;
95  RunData* newRun = new RunData(*accessor->runData(i));
96  newAcc->addRun(newRun);
97  delete newRun;
98  runIndex++;
99  }
100  }
101 
102  cout << "Merging events" << endl;
103  unsigned int nEventsTotal = 0, iEvt = 0;
104  for (const Accessor* accessor : accessors)
105  nEventsTotal += accessor->nEvents();
106  for (const Accessor* accessor : accessors) {
107  for (unsigned int i = 0; i < accessor->nEvents(); i++) {
108  iEvt++;
109  if (iEvt % 100000 == 0) cout << "Merging event " << iEvt << "/" << nEventsTotal << endl;
110  std::pair<int, int> evtId(accessor->eventData(i)->run(), accessor->eventData(i)->event());
111  if (evtMap.find(evtId) != evtMap.end()) continue;
112  evtMap[evtId] = evtIndex;
113  std::map<int, int>::const_iterator idx = runMap.find(accessor->eventData(i)->run());
114  int newRunIndex = (idx == runMap.end() ? -999 : idx->second);
115  //cout << "Storing eventData for run " << accessor->eventData(i)->run() << " at index " << newRunIndex << " instead of " << accessor->eventData(i)->runIndex() << endl;
116  EventData* newEvent = new EventData(*accessor->eventData(i), newRunIndex);
117  newAcc->addEvent(newEvent);
118  delete newEvent;
119  evtIndex++;
120  }
121  }
122 
123  for (unsigned int i = 0; i < newAcc->nChannels(); i++) {
124  if (i % 10000 == 0) {
125  cout << "Merging channel " << i << "/" << newAcc->nChannels() << " (current size = " << size << ")" << endl;
126  //ClassCounts::printCountsTable();
127  }
129  for (const Accessor* accessor : accessors) {
130  const History* history = accessor->cellHistory(i);
131  if (!history || !history->isValid()) continue;
132  if (!historyContainer) {
133  info = new CellInfo(*history->cellInfo());
135  }
136  for (unsigned int j = 0; j < history->nData(); j++) {
137  DataContainer* newDC = new DataContainer(history->data(j)->container());
138  std::map<std::pair<int, int>, int>::const_iterator newIndex
139  = evtMap.find(std::make_pair(history->data(j)->run(), history->data(j)->event()));
140  if (newIndex == evtMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
141  newDC->setEventIndex(newIndex != evtMap.end() ? newIndex->second : -1);
142  historyContainer->add(newDC);
143  if (!info->shape(history->data(j)->gain())) {
144  const ShapeInfo* shape = history->cellInfo()->shape(history->data(j)->gain());
145  if (!shape)
146  cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << Data::gainStr(history->data(j)->gain()) << endl;
147  info->setShape(history->data(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
148  }
149  }
150  }
152  newAcc->add(historyContainer);
153  delete historyContainer;
154  }
155 
156  cout << "Merging done, final size = " << size << endl;
157  newAcc->save();
158  return newAcc;
159 }
160 
161 
162 TreeAccessor* TreeAccessor::merge(const std::vector<const Accessor*>& accessors,const TString& fileName,const TString& LBFile)
163 {
164  // O.Simard - 01.07.2011
165  // Alternative version with LB cleaning.
166 
167  bool kBadLB=false;
168  std::vector<unsigned int> LBList;
169  std::ifstream infile(LBFile.Data());
170  std::string line;
171  // assume single-line format with coma-separated LBs (from python)
172  std::getline(infile,line,'\n');
173  TString filter(line.c_str());
174  TObjArray* list = filter.Tokenize(", "); // coma\space delimiters
175  if(list->GetEntries() == 0){
176  printf("No LB filtering specified, or bad format. Exiting.\n");
177  delete list;
178  return nullptr;
179  }
180 
181  for(int k = 0; k < list->GetEntries(); k++){
182  TObjString* tobs = (TObjString*)(list->At(k));
183  LBList.push_back((unsigned int)(tobs->String()).Atoi());
184  }
185  delete list;
186  printf("LB List: %d\n",(int)LBList.size());
187 
188 
189  // from here it is similar to other functions of this class
190  TreeAccessor* newAcc = new TreeAccessor(fileName);
191  unsigned int size = 0;
192  CellInfo* info = nullptr;
193 
194  int evtIndex = 0, runIndex = 0;
195  std::map<std::pair<int, int>, int> evtMap;
196  std::map<int, int> runMap;
197 
198  cout << "Merging runs" << endl;
199  for (const Accessor* accessor : accessors) {
200  if (!accessor) {
201  cout << "Cannot merge: one of the inputs is null!" << endl;
202  return nullptr;
203  }
204  for (unsigned int i = 0; i < accessor->nRuns(); i++) {
205  int run = accessor->runData(i)->run();
206  if (runMap.find(run) != runMap.end()) continue;
207  runMap[run] = runIndex;
208  RunData* newRun = new RunData(*accessor->runData(i));
209  newAcc->addRun(newRun);
210  delete newRun;
211  runIndex++;
212  }
213  }
214 
215  cout << "Merging events" << endl;
216  unsigned int nEventsTotal = 0, iEvt = 0;
217  for (const Accessor* accessor : accessors)
218  nEventsTotal += accessor->nEvents();
219  for (const Accessor* accessor : accessors) {
220  for (unsigned int i = 0; i < accessor->nEvents(); i++) {
221  iEvt++;
222  if (iEvt % 100000 == 0) cout << "Merging event " << iEvt << "/" << nEventsTotal << endl;
223 
224  // ----
225  // skip LBs which are found in the list
226  kBadLB=false;
227  for(unsigned int ilb = 0 ; ilb < LBList.size() ; ilb++){
228  if(LBList.at(ilb)==accessor->eventData(i)->lumiBlock()){
229  kBadLB=true;
230  //printf(" == Rejecting Event in LB %4d\n",accessor->eventData(i)->lumiBlock());
231  break;
232  }
233  }
234  if(kBadLB) continue;
235  // ----
236 
237  std::pair<int, int> evtId(accessor->eventData(i)->run(), accessor->eventData(i)->event());
238  if (evtMap.find(evtId) != evtMap.end()) continue;
239  evtMap[evtId] = evtIndex;
240  std::map<int, int>::const_iterator idx = runMap.find(accessor->eventData(i)->run());
241  int newRunIndex = (idx == runMap.end() ? -999 : idx->second);
242  EventData* newEvent = new EventData(*accessor->eventData(i), newRunIndex);
243  newAcc->addEvent(newEvent);
244  delete newEvent;
245  evtIndex++;
246  }
247  }
248 
249  for (unsigned int i = 0; i < newAcc->nChannels(); i++) {
250  if (i % 10000 == 0) {
251  cout << "Merging channel " << i << "/" << newAcc->nChannels() << " (current size = " << size << ")" << endl;
252  //ClassCounts::printCountsTable();
253  }
255  for (const Accessor* accessor : accessors) {
256  const History* history = accessor->cellHistory(i);
257  if (!history || !history->isValid()) continue;
258  if (!historyContainer) {
259  info = new CellInfo(*history->cellInfo());
261  }
262  for (unsigned int j = 0; j < history->nData(); j++) {
263  DataContainer* newDC = new DataContainer(history->data(j)->container());
264  std::map<std::pair<int, int>, int>::const_iterator newIndex
265  = evtMap.find(std::make_pair(history->data(j)->run(), history->data(j)->event()));
266  //if (newIndex == evtMap.end()) cout << "Event not found for cell " << i << ", data " << j << "." << endl;
267  newDC->setEventIndex(newIndex != evtMap.end() ? newIndex->second : -1);
268  historyContainer->add(newDC);
269  if (!info->shape(history->data(j)->gain())) {
270  const ShapeInfo* shape = history->cellInfo()->shape(history->data(j)->gain());
271  if (!shape)
272  cout << "Shape not filled for hash = " << i << ", index = " << j << ", gain = " << Data::gainStr(history->data(j)->gain()) << endl;
273  info->setShape(history->data(j)->gain(), (shape ? new ShapeInfo(*shape) : nullptr));
274  }
275  }
276  }
277  if(historyContainer){
279  }
280  newAcc->add(historyContainer);
281  delete historyContainer;
282  historyContainer=nullptr;
283  //}
284  }
285 
286  cout << "Merging done, final size = " << size << endl;
287  newAcc->save();
288  return newAcc;
289 }
290 
291 
293  const FilterParams& filterParams,
294  const TString& fileName,
295  const DataTweaker& tweaker)
296 {
297  FilterList filterList; filterList.add(filterParams, fileName);
298  std::vector<TreeAccessor*> result = filter(accessor, filterList, tweaker);
299  return (!result.empty() ? result[0] : nullptr);
300 }
301 
302 std::vector<TreeAccessor*>
304  const FilterList& filterList,
305  const DataTweaker& tweaker)
306 {
307  if (filterList.size() == 0) {
308  cout << "No filter categories specified, done! (?)" << endl;
309  return std::vector<TreeAccessor*>();
310  }
311 
312  for (unsigned int f = 0; f < filterList.size(); f++) {
313  cout << "Skimming to " << filterList.fileName(f) << endl;
314  if (!gSystem->AccessPathName(filterList.fileName(f))) {
315  cout << "File already exists, exiting." << endl;
316  return std::vector<TreeAccessor*>();
317  }
318  }
319 
320  std::vector<TreeAccessor*> newAccessors;
321  for (unsigned int f = 0; f < filterList.size(); f++)
322  newAccessors.push_back(new TreeAccessor(filterList.fileName(f)));
323  std::map<std::pair<unsigned int, unsigned int>, unsigned int> eventIndices;
324  std::vector< std::map<unsigned int, unsigned int> > eventsToKeep(filterList.size());
325  std::vector< std::map<unsigned int, unsigned int> > runsToKeep(filterList.size());
326 
327  double nTot = 0, nPass = 0;
328 
329  for (unsigned int i = 0; i < accessor.nEvents(); i++) {
330  const EventData* eventData = accessor.eventData(i);
331  eventIndices[std::pair<unsigned int, unsigned int>(eventData->run(), eventData->event())] = i;
332  }
333 
334  for (unsigned int i = 0; i < accessor.nChannels(); i++) {
335  if (i % 25000 == 0) {
336  cout << "Filtering " << i << "/" << accessor.nChannels()
337  << " (passing so far = " << nPass << ", total seen = " << nTot << ")" << endl;
338  //ClassCounts::printCountsTable();
339  }
340  bool first = true;
341 
342  const History* history = nullptr;
343  for (unsigned int f = 0; f < filterList.size(); f++) {
344  history = accessor.pass(i, filterList.filterParams(f));
345  if (history) break;
346  }
347  for (unsigned int f = 0; f < filterList.size(); f++) {
348  if (!history || !history->cellInfo() || !filterList.filterParams(f).passCell(*history->cellInfo())) {
350  newAccessors[f]->add(newHist);
351  delete newHist;
352  continue;
353  }
354  if (first) { nTot += history->nData(); first = false; }
355  HistoryContainer* newHist = new HistoryContainer(new CellInfo(*history->cellInfo()));
356  for (unsigned int k = 0; k < history->nData(); k++) {
357  if (!filterList.filterParams(f).passEvent(*history->data(k))) continue;
358  const EventData* eventData = history->data(k)->eventData();
359  std::map<std::pair<unsigned int, unsigned int>, unsigned int>::const_iterator findIndex =
360  eventIndices.find(std::pair<unsigned int, unsigned int>(eventData->run(), eventData->event()));
361  if (findIndex == eventIndices.end()) {
362  cout << "Inconsistent event numbering!!!" << endl;
363  delete newHist;
364  return std::vector<TreeAccessor*>();
365  }
366  int oldEvtIndex = findIndex->second;
367  bool isNewEvt = (eventsToKeep[f].find(oldEvtIndex) == eventsToKeep[f].end());
368  unsigned int newEvtIndex = (isNewEvt ? eventsToKeep[f].size() : eventsToKeep[f][oldEvtIndex]);
369  if (isNewEvt) eventsToKeep[f][oldEvtIndex] = newEvtIndex;
370 
371  int oldRunIndex = history->data(k)->eventData()->runIndex();
372  bool isNewRun = (runsToKeep[f].find(oldRunIndex) == runsToKeep[f].end());
373  unsigned int newRunIndex = (isNewRun ? runsToKeep[f].size() : runsToKeep[f][oldRunIndex]);
374  if (isNewRun) runsToKeep[f][oldRunIndex] = newRunIndex;
375 
376  Data* newData = tweaker.tweak(*history->data(k), newEvtIndex);
377  if (!newData) {
378  cout << "Filtering failed on data " << k << " of cell " << i << ", aborting" << endl;
379  delete newHist;
380  for (unsigned int f = 0; f < filterList.size(); f++) delete newAccessors[f];
381  return std::vector<TreeAccessor*>();
382  }
383  nPass++;
384  newHist->add(newData->dissolve());
385  }
386  newAccessors[f]->add(newHist);
387  delete newHist;
388  }
389  }
390 
391  for (unsigned int f = 0; f < filterList.size(); f++) {
392  cout << "Adding runs..." << endl;
393  std::vector<unsigned int> runsToKeep_ordered(runsToKeep[f].size());
394  for (const auto& runIndex : runsToKeep[f])
395  runsToKeep_ordered[runIndex.second] = runIndex.first;
396 
397  for (unsigned int runIndex : runsToKeep_ordered) {
398  RunData* newRun = new RunData(*accessor.runData(runIndex));
399  newAccessors[f]->addRun(newRun);
400  delete newRun;
401  }
402  cout << "Adding events..." << endl;
403  std::vector<unsigned int> eventsToKeep_ordered(eventsToKeep[f].size());
404  for (const auto& eventIndex : eventsToKeep[f])
405  eventsToKeep_ordered[eventIndex.second] = eventIndex.first;
406 
407  for (unsigned int eventIndex : eventsToKeep_ordered) {
408  std::map<unsigned int, unsigned int>::const_iterator idx = runsToKeep[f].find(accessor.eventData(eventIndex)->runIndex());
409  int newRunIndex = (idx == runsToKeep[f].end() ? 0 : idx->second);
410  EventData* newEvent = tweaker.tweak(*accessor.eventData(eventIndex), newRunIndex);
411  newAccessors[f]->addEvent(newEvent);
412  delete newEvent;
413  }
414  }
415  cout << "Filtering done! final size = " << nPass << endl;
416  //ClassCounts::printCountsTable();
417  for (unsigned int f = 0; f < filterList.size(); f++) {
418  cout << "Saving " << newAccessors[f]->fileName() << endl;
419  newAccessors[f]->save();
420  }
421  return newAccessors;
422 }
423 
424 
426 {
427  TreeAccessor* newAccessor = new TreeAccessor(fileName);
428 
429  std::vector<short> samples(5, 0);
430  std::vector<float> autoCorrs(4, 0);
431 
432  RunData* dummyRun = new RunData(0);
433  newAccessor->addRun(dummyRun);
434  delete dummyRun;
435 
436  EventData* dummyEvent = new EventData(0, 0, 0, 0);
437  newAccessor->addEvent(dummyEvent);
438  delete dummyEvent;
439 
440  for (unsigned int i = 0; i < accessor.nChannels(); i++) {
441  if (i % 25000 == 0)
442  cout << "Templating " << i << "/" << accessor.nChannels() << endl;
443  const History* history = accessor.cellHistory(i);
444  if (!history || !history->cellInfo()) {
446  newAccessor->add(newHist);
447  delete newHist;
448  continue;
449  }
450  HistoryContainer* newHist = new HistoryContainer(new CellInfo(*history->cellInfo()));
451  DataContainer* dataContainer = new DataContainer(CaloGain::LARHIGHGAIN, samples, 0, 0, 0, 0, autoCorrs);
452  newHist->add(dataContainer);
453  newAccessor->add(newHist);
454  delete newHist;
455  }
456 
457  newAccessor->save();
458  return newAccessor;
459 }
460 
461 bool TreeAccessor::writeToFile(const TString& fileName) const
462 {
463  TFile* newFile = new TFile(fileName, "RECREATE");
464  if (newFile && !newFile->IsOpen()) { delete newFile; newFile = nullptr; }
465  if (!newFile) return false;
466 
467  cellTree().Write();
468  eventTree().Write();
469 
470  delete newFile;
471 
472  return true;
473 }
grepfile.info
info
Definition: grepfile.py:38
LArSamples::FilterParams::passCell
bool passCell(const CellInfo &info) const
Definition: FilterParams.cxx:482
RunData.h
LArSamples::FilterParams::passEvent
bool passEvent(const Data &data) const
Definition: FilterParams.cxx:427
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
checkFileSG.line
line
Definition: checkFileSG.py:75
LArSamples::Data::container
const DataContainer & container() const
Definition: Data.h:161
get_generator_info.result
result
Definition: get_generator_info.py:21
LArSamples::PersistentAccessor::currentContainer
HistoryContainer * currentContainer() const
Definition: PersistentAccessor.h:62
run.infile
string infile
Definition: run.py:13
LArSamples::FilterParams
Definition: FilterParams.h:50
LArSamples::EventData::event
int event() const
Definition: LArCalorimeter/LArCafJobs/LArCafJobs/EventData.h:44
LArSamples::History::cellInfo
const CellInfo * cellInfo() const
Definition: History.h:61
LArSamples::Accessor
A base class for accessing ntuple data.
Definition: LArCalorimeter/LArSamplesMon/LArSamplesMon/Accessor.h:24
LArSamples::History
Definition: History.h:40
checkCorrelInHIST.ilb
ilb
Definition: checkCorrelInHIST.py:563
ClassCounts.h
LArSamples::FilterList::filterParams
const FilterParams & filterParams(unsigned int i) const
Definition: FilterList.h:30
LArSamples::Data::run
int run() const
Definition: Data.cxx:27
run
int run(int argc, char *argv[])
Definition: ttree2hdf5.cxx:28
LArSamples
Definition: AbsShape.h:24
TreeAccessor.h
LArSamples::EventData::runIndex
int runIndex() const
Definition: LArCalorimeter/LArCafJobs/LArCafJobs/EventData.h:53
FilterParams.h
LArSamples::PersistentAccessor::runTree
const TTree & runTree() const
Definition: PersistentAccessor.h:45
LArSamples::ShapeInfo
Definition: ShapeInfo.h:24
LArSamples::PersistentAccessor::addEvent
void addEvent(EventData *eventData)
Definition: PersistentAccessor.cxx:149
LArSamples::TreeAccessor::getCellInfo
const CellInfo * getCellInfo(unsigned int i) const
Definition: TreeAccessor.cxx:43
LArSamples::FilterList::add
void add(const FilterParams &params, const TString &fileName)
Definition: FilterList.h:27
LArSamples::Data::event
int event() const
Definition: Data.cxx:28
DataTweaker.h
LArSamples::PersistentAccessor::file
TFile * file() const
Definition: PersistentAccessor.h:47
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
LArSamples::RunData
Definition: RunData.h:21
LArSamples::History::data
const Data * data(unsigned int i) const
Definition: History.cxx:88
LArSamples::TreeAccessor::getCellHistory
const History * getCellHistory(unsigned int i) const
Definition: TreeAccessor.cxx:51
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
lumiFormat.i
int i
Definition: lumiFormat.py:92
LArSamples::Data::gainStr
static TString gainStr(CaloGain::CaloGain gain)
Definition: Data.cxx:502
01SubmitToGrid.samples
samples
Definition: 01SubmitToGrid.py:58
LArSamples::CellInfo::shape
const ShapeInfo * shape(CaloGain::CaloGain gain) const
Definition: CellInfo.cxx:78
MakeNewFileFromOldAndSubstitution.newHist
dictionary newHist
Definition: ICHEP2016/MakeNewFileFromOldAndSubstitution.py:96
LArSamples::TreeAccessor::makeTemplate
static TreeAccessor * makeTemplate(const Accessor &accessor, const TString &fileName)
Definition: TreeAccessor.cxx:425
LArSamples::EventData::run
int run() const
Definition: EventData.cxx:59
ITk::EventData
InDet::SiSpacePointsSeedMakerEventData EventData
Definition: ITkSiSpacePointsSeedMaker.h:63
run
Definition: run.py:1
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
LArSamples::DataTweaker
Definition: DataTweaker.h:23
LArSamples::History::nData
unsigned int nData() const
Definition: History.h:56
LArSamples::TreeAccessor::merge
static TreeAccessor * merge(const std::vector< const Accessor * > &accessors, const TString &fileName="")
Definition: TreeAccessor.cxx:73
EventData.h
LArSamples::TreeAccessor::eventData
const EventData * eventData(unsigned int i) const
Definition: TreeAccessor.h:64
LArSamples::FilterList
Definition: FilterList.h:21
LArSamples::DataTweaker::tweak
Data * tweak(const Data &data, int evtIndex=-1) const
Definition: DataTweaker.cxx:47
LArSamples::PersistentAccessor::getCellEntry
int getCellEntry(unsigned int i) const
Definition: PersistentAccessor.h:67
LArSamples::PersistentAccessor::cellTree
const TTree & cellTree() const
Definition: PersistentAccessor.h:43
LArSamples::Data
Definition: Data.h:77
LArSamples::FilterList::fileName
const TString & fileName(unsigned int i) const
Definition: FilterList.h:31
LArSamples::TreeAccessor::TreeAccessor
TreeAccessor(TTree &cellTree, TTree &eventTree, TTree *runTree, TFile *file)
Constructor
Definition: TreeAccessor.h:37
LArSamples::Data::dissolve
const DataContainer * dissolve()
Definition: Data.cxx:56
LArSamples::Data::gain
CaloGain::CaloGain gain() const
Definition: Data.h:90
CaloGain::LARHIGHGAIN
@ LARHIGHGAIN
Definition: CaloGain.h:18
LArSamples::CellInfo
Definition: CellInfo.h:31
xAOD::JetAttributeAccessor::accessor
const AccessorWrapper< T > * accessor(xAOD::JetAttribute::AttributeID id)
Returns an attribute accessor corresponding to an AttributeID.
Definition: JetAccessorMap.h:26
LArSamples::HistoryContainer::cellInfo
const CellInfo * cellInfo() const
Definition: HistoryContainer.h:43
LArSamples::PersistentAccessor::save
bool save() const
Definition: PersistentAccessor.cxx:165
LArSamples::TreeAccessor::filter
static TreeAccessor * filter(const Accessor &accessor, const FilterParams &filterParams, const TString &fileName, const DataTweaker &tweaker)
Definition: TreeAccessor.cxx:292
LArSamples::DataContainer
Definition: DataContainer.h:25
LArSamples::HistoryContainer
Definition: HistoryContainer.h:29
LArSamples::HistoryContainer::add
void add(const DataContainer *data)
append data (takes ownership)
Definition: HistoryContainer.h:46
DeMoScan.first
bool first
Definition: DeMoScan.py:534
generate::GetEntries
double GetEntries(TH1D *h, int ilow, int ihi)
Definition: rmsFrac.cxx:20
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
LArSamples::PersistentAccessor::eventTree
const TTree & eventTree() const
Definition: PersistentAccessor.h:44
LArSamples::TreeAccessor::writeToFile
bool writeToFile(const TString &fileName) const
Definition: TreeAccessor.cxx:461
Data.h
xAODRootTest.accessors
dictionary accessors
Definition: xAODRootTest.py:67
LArSamples::PersistentAccessor::addRun
void addRun(RunData *runData)
Definition: PersistentAccessor.cxx:157
LArSamples::TreeAccessor::add
void add(HistoryContainer *cont)
Definition: TreeAccessor.h:69
LArSamples::PersistentAccessor::historyContainer
const HistoryContainer * historyContainer(unsigned int i) const
Definition: PersistentAccessor.cxx:99
LArSamples::Data::eventData
const EventData * eventData() const
Definition: Data.h:100
LArSamples::History::isValid
bool isValid() const
Definition: History.cxx:149
LArSamples::TreeAccessor
Definition: TreeAccessor.h:32
LArSamples::FilterList::size
unsigned int size() const
Definition: FilterList.h:29
LArSamples::EventData
Definition: LArCalorimeter/LArCafJobs/LArCafJobs/EventData.h:29
LArSamples::PersistentAccessor::fileName
TString fileName() const
Definition: PersistentAccessor.cxx:135
LArSamples::DataContainer::setEventIndex
void setEventIndex(int index)
Definition: DataContainer.h:92
LArSamples::AbsLArCells::nChannels
virtual unsigned int nChannels() const
Definition: AbsLArCells.h:34
fitman.k
k
Definition: fitman.py:528
LArSamples::TreeAccessor::open
static TreeAccessor * open(const TString &fileName)
Definition: TreeAccessor.cxx:28
LArSamples::HistoryContainer::nDataContainers
unsigned int nDataContainers() const
Definition: HistoryContainer.h:40
EventInfoCnvParams::eventIndex
thread_local event_number_t eventIndex
Definition: IEvtIdModifierSvc.h:34