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 EventData * eventData (unsigned int i) const override
virtual const RunData * runData (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 TreeAccessor & accessor (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 History > newCellHistory (unsigned int i) const
virtual const History * cellHistory (unsigned int i) const
virtual std::unique_ptr< const CellInfo > cellInfo (unsigned int i) const
virtual unsigned int nChannels () const
virtual unsigned int nChannelsSC () const
virtual void resetCache () const
const CellInfo * cellInfoCache (unsigned int i) const
const History * pass (unsigned int i, const FilterParams &f) const
const History * cellCache () const
unsigned int cachePos () const

Static Public Member Functions

static std::unique_ptr< MultiTreeAccessor > open (const std::vector< TString > &files)
static std::unique_ptr< MultiTreeAccessor > openList (const TString &fileList)
static std::unique_ptr< MultiTreeAccessor > openWild (const TString &wcName)

Protected Member Functions

virtual std::unique_ptr< const History > getCellHistory (unsigned int i) const override
virtual std::unique_ptr< const History > getSCHistory (unsigned int i) const override
virtual std::unique_ptr< const CellInfo > getCellInfo (unsigned int i) const override

Private Attributes

std::vector< std::unique_ptr< const TreeAccessor > > m_accessors
unsigned int m_pos
std::unique_ptr< const History > m_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)
m_data push_back(elt)
End of vector before end of string
Definition Arrayrep.cxx:228

◆ 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}
size_t size() const
Number of registered mappings.
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:52

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