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

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

virtual std::unique_ptr< const HistorygetCellHistory (unsigned int i) const override
virtual std::unique_ptr< const HistorygetSCHistory (unsigned int i) const override
virtual std::unique_ptr< const CellInfogetCellInfo (unsigned int i) const override

Private Attributes

std::vector< std::unique_ptr< const TreeAccessor > > m_accessors
unsigned int m_pos
std::unique_ptr< const Historym_cellCache
std::vector< std::unique_ptr< 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 49 of file AbsLArCells.h.

49{ return m_pos; }

◆ cellCache()

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

Definition at line 48 of file AbsLArCells.h.

48{ return m_cellCache.get(); }
std::unique_ptr< 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 54 of file AbsLArCells.cxx.

55{
56 if (m_pos == i) return m_cellCache.get();
57 resetCache();
58 std::unique_ptr<const History> history = newCellHistory(i);
59 if (!history) return nullptr;
60 m_cellCache = std::move(history);
61 m_pos = i;
62 return m_cellCache.get();
63}
virtual void resetCache() const
virtual std::unique_ptr< const History > newCellHistory(unsigned int i) const

◆ cellInfo()

std::unique_ptr< const CellInfo > AbsLArCells::cellInfo ( unsigned int i) const
virtualinherited

Definition at line 66 of file AbsLArCells.cxx.

67{
68 const CellInfo* info = cellInfoCache(i);
69 if (info) {
70 if (info->isValid()) {
71 return std::make_unique<CellInfo> (*info);
72 }
73 return nullptr;
74 }
75 std::unique_ptr<const CellInfo> infop = getCellInfo(i);
76 if (infop) m_cellInfoCache[i] = std::make_unique<CellInfo>(*infop, false);
77 return infop;
78}
virtual std::unique_ptr< const CellInfo > getCellInfo(unsigned int i) const
std::vector< std::unique_ptr< CellInfo > > m_cellInfoCache
Definition AbsLArCells.h:56
const CellInfo * cellInfoCache(unsigned int i) const

◆ cellInfoCache()

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

Definition at line 81 of file AbsLArCells.cxx.

82{
83 return m_cellInfoCache[i].get();
84}

◆ eventData()

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

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< std::unique_ptr< MultiTreeAccessor > > MultiTreeAccessor::filterComponents ( const FilterList & filterList,
const DataTweaker & tweaker ) const

Definition at line 272 of file MultiTreeAccessor.cxx.

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

◆ getCellHistory()

std::unique_ptr< const History > MultiTreeAccessor::getCellHistory ( unsigned int i) const
overrideprotectedvirtual

Implements LArSamples::AbsLArCells.

Definition at line 171 of file MultiTreeAccessor.cxx.

172{
173 std::unique_ptr<CellInfo> cellInfo;
174 std::vector<std::unique_ptr<const Data> > allData;
175 std::vector<std::unique_ptr<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<std::unique_ptr<const EventData> >& thisEventData = thisHistory->eventData();
183 std::map<const EventData*, const EventData*> eventMap;
184 for (const std::unique_ptr<const EventData>& event : thisEventData) {
185 if (eventMap.find(event.get()) != eventMap.end()) continue;
186 auto newED = std::make_unique<EventData>(*event);
187 eventMap[event.get()] = newED.get();
188 allEventData.push_back(std::move(newED));
189 }
190
191 for (unsigned int j = 0; j < thisHistory->nData(); j++) {
192 allData.push_back(std::make_unique<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 if (cellInfo)
201 return std::make_unique<History>(std::move(allData), *cellInfo, std::move(allEventData), i);
202 return nullptr;
203}
virtual std::unique_ptr< const CellInfo > cellInfo(unsigned int i) const
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ getCellInfo()

std::unique_ptr< const CellInfo > MultiTreeAccessor::getCellInfo ( unsigned int i) const
overrideprotectedvirtual

Reimplemented from LArSamples::AbsLArCells.

Definition at line 249 of file MultiTreeAccessor.cxx.

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

◆ getSCHistory()

std::unique_ptr< const History > MultiTreeAccessor::getSCHistory ( unsigned int i) const
overrideprotectedvirtual

Implements LArSamples::AbsLArCells.

Definition at line 205 of file MultiTreeAccessor.cxx.

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

◆ historySize()

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

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
overridevirtual

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 35 of file AbsLArCells.h.

◆ nChannelsSC()

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

Definition at line 36 of file AbsLArCells.h.

◆ nEvents()

unsigned int MultiTreeAccessor::nEvents ( ) const
overridevirtual

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()

std::unique_ptr< const History > AbsLArCells::newCellHistory ( unsigned int i) const
virtualinherited

Definition at line 39 of file AbsLArCells.cxx.

40{
41 std::unique_ptr<const History> history = getCellHistory(i);
42 if (!history) return nullptr;
43 if (!m_cellInfoCache[i]) {
44 const CellInfo* ci=history->cellInfo();
45 if (ci) {
46 m_cellInfoCache[i]=std::make_unique<CellInfo>(*ci,false);
47 }
48 }
49 // m_cellInfoCache[i] = (history->cellInfo() ? new CellInfo(*history->cellInfo(), false) : new CellInfo());
50 return history;
51}
virtual std::unique_ptr< const History > getCellHistory(unsigned int i) const =0

◆ nRuns()

unsigned int MultiTreeAccessor::nRuns ( ) const
overridevirtual

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 96 of file AbsLArCells.cxx.

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

◆ resetCache()

void AbsLArCells::resetCache ( ) const
virtualinherited

Definition at line 32 of file AbsLArCells.cxx.

33{
34 m_cellCache.reset();
35 m_pos = nChannels() + 1;
36}
virtual unsigned int nChannels() const
Definition AbsLArCells.h:35

◆ runData()

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

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
overridevirtual

Implements LArSamples::Accessor.

Definition at line 260 of file MultiTreeAccessor.cxx.

261{
262 std::vector<const Accessor*> accessors;
263 for (unsigned int i = 0; i < m_accessors.size(); i++)
264 accessors.push_back(m_accessors[i].get());
265 cout << "Merging data..." << endl;
266 std::unique_ptr<TreeAccessor> singleContainer = TreeAccessor::merge(accessors, fileName);
267 return !!singleContainer;
268}
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

std::unique_ptr<const History> LArSamples::AbsLArCells::m_cellCache
mutableprivateinherited

Definition at line 55 of file AbsLArCells.h.

◆ m_cellInfoCache

std::vector<std::unique_ptr<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: