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

#include <MultiTreeAccessor.h>

Inheritance diagram for LArSamples::MultiTreeAccessor:
Collaboration diagram for LArSamples::MultiTreeAccessor:

Public Member Functions

 MultiTreeAccessor (std::vector< std::unique_ptr< const TreeAccessor > > &&accessors)
 Constructor.
virtual ~MultiTreeAccessor ()
unsigned int nEvents () const
unsigned int nRuns () const
const EventDataeventData (unsigned int i) const
const RunDatarunData (unsigned int i) const
unsigned int historySize (unsigned int i) const
unsigned int historySizeSC (unsigned int i) const
bool writeToFile (const TString &fileName) const
const TreeAccessoraccessor (unsigned int i) const
unsigned int nAccessors () const
std::vector< MultiTreeAccessor * > filterComponents (const FilterList &filterList, const DataTweaker &tweaker) 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 ()

Static Public Member Functions

static std::unique_ptr< MultiTreeAccessoropen (const std::vector< TString > &files)
static std::unique_ptr< MultiTreeAccessoropenList (const TString &fileList)
static std::unique_ptr< MultiTreeAccessoropenWild (const TString &wcName)

Protected Member Functions

const HistorygetCellHistory (unsigned int i) const
const HistorygetSCHistory (unsigned int i) const
const CellInfogetCellInfo (unsigned int i) const

Private Attributes

std::vector< std::unique_ptr< const TreeAccessor > > m_accessors
unsigned int m_pos
const Historym_cellCache
std::vector< CellInfo * > m_cellInfoCache

Detailed Description

Definition at line 27 of file MultiTreeAccessor.h.

Constructor & Destructor Documentation

◆ MultiTreeAccessor()

MultiTreeAccessor::MultiTreeAccessor ( std::vector< std::unique_ptr< const TreeAccessor > > && accessors)

Constructor.

Definition at line 26 of file MultiTreeAccessor.cxx.

27 : m_accessors(std::move(accessors))
28{
29}
std::vector< std::unique_ptr< const TreeAccessor > > m_accessors

◆ ~MultiTreeAccessor()

MultiTreeAccessor::~MultiTreeAccessor ( )
virtual

Definition at line 101 of file MultiTreeAccessor.cxx.

102{
103}

Member Function Documentation

◆ accessor()

const TreeAccessor & LArSamples::MultiTreeAccessor::accessor ( unsigned int i) const
inline

Definition at line 51 of file MultiTreeAccessor.h.

51{ return *m_accessors[i]; }

◆ 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 void resetCache() const
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}

◆ eventData()

const EventData * MultiTreeAccessor::eventData ( unsigned int i) const
virtual

Implements LArSamples::Accessor.

Definition at line 106 of file MultiTreeAccessor.cxx.

107{
108 unsigned int nEventsSoFar = 0;
109 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
110 unsigned int n = accessor->nEvents();
111 if (i < nEventsSoFar + n) return accessor->eventData(i - nEventsSoFar);
112 nEventsSoFar += n;
113 }
114 return nullptr;
115}
const TreeAccessor & accessor(unsigned int i) const

◆ filterComponents()

std::vector< MultiTreeAccessor * > MultiTreeAccessor::filterComponents ( const FilterList & filterList,
const DataTweaker & tweaker ) const

Definition at line 268 of file MultiTreeAccessor.cxx.

269{
270 std::vector< std::vector<std::unique_ptr<const TreeAccessor> > > filteredAccessors(filterList.size());
271
272 for (unsigned int i = 0; i < nAccessors(); i++) {
273 const TreeAccessor* treeAcc = dynamic_cast<const TreeAccessor*>(&accessor(i));
274 cout << "Processing data " << i << " of " << nAccessors();
275 if (treeAcc) cout << " (fileName = " << treeAcc->fileName() << ")";
276 cout << endl;
277 FilterList thisFilterList;
278 //
279 for (unsigned int f = 0; f < filterList.size(); f++) {
280 std::string pathname = (string)filterList.fileName(f);
281 if( pathname.find("eos/atlas/") < pathname.length() ){
282 int nslashes = 0, slpos = 0;
283 for( int k1 = 0; k1 < (int)pathname.length(); k1++ ){
284 if( nslashes > 2 )break;
285 if( pathname[k1] != '/' )continue;
286 nslashes++;
287 slpos = k1;
288 }
289 pathname.resize( slpos );
290 }
291 TString thisFN = Form("%s_filter%d.root", pathname.c_str(), i );//filterList.fileName(f).Data(), i);
292 thisFilterList.add(filterList.filterParams(f), thisFN);
293 }
294 std::vector<std::unique_ptr<TreeAccessor> > filteredTreeAccs = TreeAccessor::filter(accessor(i), thisFilterList, tweaker);
295 if (filteredTreeAccs.size() != filterList.size()) {
296 cout << "Filtering failed, exiting" << endl;
297 return std::vector<MultiTreeAccessor*>();
298 }
299 for (unsigned int f = 0; f < filteredTreeAccs.size(); f++) filteredAccessors[f].push_back(std::move(filteredTreeAccs[f]));
300 }
301
302 std::vector<MultiTreeAccessor*> result;
303 for (unsigned int f = 0; f < filteredAccessors.size(); f++) result.push_back(new MultiTreeAccessor(std::move(filteredAccessors[f])));
304 return result;
305}
void add(const FilterParams &params, const TString &fileName)
Definition FilterList.h:27
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
MultiTreeAccessor(std::vector< std::unique_ptr< const TreeAccessor > > &&accessors)
Constructor.
unsigned int nAccessors() const
static std::unique_ptr< TreeAccessor > filter(const Accessor &accessor, const FilterParams &filterParams, const TString &fileName, const DataTweaker &tweaker)

◆ getCellHistory()

const History * MultiTreeAccessor::getCellHistory ( unsigned int i) const
protectedvirtual

Implements LArSamples::AbsLArCells.

Definition at line 171 of file MultiTreeAccessor.cxx.

172{
173 std::unique_ptr<CellInfo> cellInfo;
174 std::vector<const Data*> allData;
175 std::vector<const EventData*> allEventData;
176 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
177 std::unique_ptr<const History> thisHistory (accessor->getCellHistory(i));
178 if (!thisHistory) continue;
179 if (!cellInfo) {
180 cellInfo = std::make_unique<CellInfo>(*thisHistory->cellInfo());
181 }
182 const std::vector<const EventData*>& thisEventData = thisHistory->eventData();
183 std::map<const EventData*, const EventData*> eventMap;
184 for (const EventData* event : thisEventData) {
185 if (eventMap.find(event) != eventMap.end()) continue;
186 auto newED = new EventData(*event);
187 eventMap[event] = newED;
188 allEventData.push_back(newED);
189 }
190
191 for (unsigned int j = 0; j < thisHistory->nData(); j++) {
192 allData.push_back(new Data(*thisHistory->data(j), eventMap[&thisHistory->data(j)->eventData()], nullptr, -1));
193 if (!cellInfo->shape(thisHistory->data(j)->gain())) {
194 const ShapeInfo* thisShape = thisHistory->cellInfo()->shape(thisHistory->data(j)->gain());
195 cellInfo->setShape(thisHistory->data(j)->gain(), thisShape ? new ShapeInfo(*thisShape) : nullptr);
196 }
197 }
198 }
199 //data are copied from cellInfo into History member variable
200 auto * h = cellInfo ? new History(allData, *cellInfo, allEventData, i): nullptr;
201 return h;
202}
@ Data
Definition BaseObject.h:11
virtual const CellInfo * cellInfo(unsigned int i) const
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ getCellInfo()

const CellInfo * MultiTreeAccessor::getCellInfo ( unsigned int i) const
protectedvirtual

Reimplemented from LArSamples::AbsLArCells.

Definition at line 246 of file MultiTreeAccessor.cxx.

247{
248 resetCache();
249 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
250 const HistoryContainer* cont = accessor->historyContainer(i);
251 if (cont && cont->cellInfo()) return new CellInfo(*cont->cellInfo());
252 }
253 return nullptr;
254}
const CellInfo * cellInfo() const

◆ getSCHistory()

const History * MultiTreeAccessor::getSCHistory ( unsigned int i) const
protectedvirtual

Implements LArSamples::AbsLArCells.

Definition at line 204 of file MultiTreeAccessor.cxx.

205{
206 std::unique_ptr<CellInfo> cellInfo;
207 std::vector<const Data*> allData;
208 std::vector<const EventData*> allEventData;
209 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
210 //cout << "---> Getting history for a treeAccessor..." << endl;
211 std::unique_ptr<const History> thisHistory (accessor->getSCHistory(i));
212 //cout << "---> done Getting history for a treeAccessor..." << endl;
213 if (!thisHistory) continue;
214 if (!cellInfo) {
215 cellInfo = std::make_unique<CellInfo>(*thisHistory->cellInfo());
216 //cout << "---> done new cell info" << endl;
217 }
218 //cout << "---> Creating new event data N = " << thisHistory->eventData().size() << endl;
219 const std::vector<const EventData*>& thisEventData = thisHistory->eventData();
220 std::map<const EventData*, const EventData*> eventMap;
221 for (const EventData* event : thisEventData) {
222 if (eventMap.find(event) != eventMap.end()) continue;
223 auto newED = std::make_unique<EventData>(*event);
224 eventMap[event] = newED.get();
225 allEventData.push_back(newED.release());
226 }
227 //cout << "---> Creating new data N = " << thisHistory->nData() << endl;
228
229 for (unsigned int ii = 0; ii < thisHistory->nData(); ii++) {
230 //cout << "------> Creating new data " << i << endl;
231 allData.push_back(new Data(*thisHistory->data(ii), eventMap[&thisHistory->data(ii)->eventData()], nullptr, -1));
232 //cout << "------> done Creating new data " << i << endl;
233 if (!cellInfo->shape(thisHistory->data(ii)->gain())) {
234 const ShapeInfo* thisShape = thisHistory->cellInfo()->shape(thisHistory->data(ii)->gain());
235 cellInfo->setShape(thisHistory->data(ii)->gain(), thisShape ? new ShapeInfo(*thisShape) : nullptr);
236 }
237 //cout << "------> done shape " << i << endl;
238 }
239 //cout << "---> done Creating new data, deleting treeAcc history" << endl;
240 }
241 //cout << "--->returning new history..." << endl;
242 return (cellInfo ? new History(allData, *cellInfo, allEventData, i) : nullptr);
243}

◆ historySize()

unsigned int MultiTreeAccessor::historySize ( unsigned int i) const
virtual

Implements LArSamples::Accessor.

Definition at line 148 of file MultiTreeAccessor.cxx.

149{
150 resetCache();
151 unsigned int size = 0;
152 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
153 const HistoryContainer* cont = accessor->historyContainer(i);
154 if (cont) size += cont->nDataContainers();
155 }
156 return size;
157}
unsigned int nDataContainers() const

◆ historySizeSC()

unsigned int MultiTreeAccessor::historySizeSC ( unsigned int i) const
virtual

Implements LArSamples::Accessor.

Definition at line 159 of file MultiTreeAccessor.cxx.

160{
161 resetCache();
162 unsigned int size = 0;
163 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
164 const HistoryContainer* cont = accessor->historyContainerSC(i);
165 if (cont) size += cont->nDataContainers();
166 }
167 return size;
168}

◆ nAccessors()

unsigned int LArSamples::MultiTreeAccessor::nAccessors ( ) const
inline

Definition at line 52 of file MultiTreeAccessor.h.

52{ return m_accessors.size(); }

◆ nChannels()

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

Reimplemented in LArSamples::MonitorBase.

Definition at line 34 of file AbsLArCells.h.

◆ nChannelsSC()

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

Definition at line 35 of file AbsLArCells.h.

◆ nEvents()

unsigned int MultiTreeAccessor::nEvents ( ) const
virtual

Implements LArSamples::Accessor.

Definition at line 130 of file MultiTreeAccessor.cxx.

131{
132 unsigned int n = 0;
133 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors)
134 n += accessor->nEvents();
135 return n;
136}

◆ 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
const CellInfo * cellInfo() const
Definition History.h:57

◆ nRuns()

unsigned int MultiTreeAccessor::nRuns ( ) const
virtual

Implements LArSamples::Accessor.

Definition at line 139 of file MultiTreeAccessor.cxx.

140{
141 unsigned int n = 0;
142 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors)
143 n += accessor->nRuns();
144 return n;
145}

◆ open()

std::unique_ptr< MultiTreeAccessor > MultiTreeAccessor::open ( const std::vector< TString > & files)
static

Definition at line 32 of file MultiTreeAccessor.cxx.

33{
34 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
35 for (const TString& fileName : files) {
36 std::unique_ptr<const TreeAccessor> accessor = TreeAccessor::open(fileName);
37 if (!accessor) {
38 cout << "Skipping invalid file " << fileName << endl;
39 continue;
40 }
41 accessors.push_back(std::move(accessor));
42 }
43
44 if (accessors.empty()) return nullptr;
45 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
46}
static std::unique_ptr< TreeAccessor > open(const TString &fileName)
std::vector< std::string > files
file names and file pointers
Definition hcg.cxx:50

◆ openList()

std::unique_ptr< MultiTreeAccessor > MultiTreeAccessor::openList ( const TString & fileList)
static

Definition at line 49 of file MultiTreeAccessor.cxx.

50{
51 std::ifstream f(fileList);
52 if (!f) {
53 cout << "file " << fileList << " not accessible" << endl;
54 return nullptr;
55 }
56
57 std::string fileName;
58 unsigned int i = 0;
59
60 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
61
62 while (f >> fileName) {
63 std::unique_ptr<const TreeAccessor> accessor = TreeAccessor::open(fileName.c_str());
64 if (!accessor) {
65 cout << "Skipping invalid file " << fileName << endl;
66 continue;
67 }
68 cout << std::setw(2) << ++i << " - " << fileName << endl;
69 accessors.push_back(std::move(accessor));
70 }
71
72 if (accessors.empty()) return nullptr;
73 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
74}

◆ openWild()

std::unique_ptr< MultiTreeAccessor > MultiTreeAccessor::openWild ( const TString & wcName)
static

Definition at line 77 of file MultiTreeAccessor.cxx.

78{
79 // Piggyback on TChain wildcarding feature...
80 TChain chain("");
81 chain.Add(wcName);
82
83 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
84
85 for (int i = 0; i < chain.GetListOfFiles()->GetEntries(); i++) {
86 std::string fileName = chain.GetListOfFiles()->At(i)->GetTitle();
87 std::unique_ptr<const TreeAccessor> accessor = TreeAccessor::open(fileName.c_str());
88 if (!accessor) {
89 cout << "Skipping invalid file " << fileName << endl;
90 continue;
91 }
92 cout << std::setw(2) << i+1 << " - " << fileName << " , nEvents = " << accessor->nEvents() << ", nRuns = " << accessor->nRuns() << endl;
93 accessors.push_back(std::move(accessor));
94 }
95
96 if (accessors.empty()) return nullptr;
97 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
98}
TGraphErrors * GetEntries(TH2F *histo)

◆ 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}
virtual unsigned int nChannels() const
Definition AbsLArCells.h:34

◆ resetCellInfoCache()

void AbsLArCells::resetCellInfoCache ( )
inherited

Definition at line 114 of file AbsLArCells.cxx.

115{
116 for (std::vector<CellInfo*>::iterator cellInfo = m_cellInfoCache.begin();
118 if (*cellInfo) {
119 delete *cellInfo;
120 *cellInfo = 0;
121 }
122}

◆ runData()

const RunData * MultiTreeAccessor::runData ( unsigned int i) const
virtual

Implements LArSamples::Accessor.

Definition at line 118 of file MultiTreeAccessor.cxx.

119{
120 unsigned int nRunsSoFar = 0;
121 for (const std::unique_ptr<const TreeAccessor>& accessor : m_accessors) {
122 unsigned int n = accessor->nRuns();
123 if (i < nRunsSoFar + n) return accessor->runData(i - nRunsSoFar);
124 nRunsSoFar += n;
125 }
126 return nullptr;
127}

◆ writeToFile()

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

Implements LArSamples::Accessor.

Definition at line 257 of file MultiTreeAccessor.cxx.

258{
259 std::vector<const Accessor*> accessors;
260 for (unsigned int i = 0; i < m_accessors.size(); i++)
261 accessors.push_back(m_accessors[i].get());
262 cout << "Merging data..." << endl;
263 std::unique_ptr<TreeAccessor> singleContainer = TreeAccessor::merge(accessors, fileName);
264 return !!singleContainer;
265}
static std::unique_ptr< TreeAccessor > merge(const std::vector< const Accessor * > &accessors, const TString &fileName="")

Member Data Documentation

◆ m_accessors

std::vector<std::unique_ptr<const TreeAccessor> > LArSamples::MultiTreeAccessor::m_accessors
private

Definition at line 64 of file MultiTreeAccessor.h.

◆ 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_pos

unsigned int LArSamples::AbsLArCells::m_pos
mutableprivateinherited

Definition at line 54 of file AbsLArCells.h.


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