34 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
35 for (
const TString& fileName :
files) {
38 cout <<
"Skipping invalid file " << fileName << endl;
41 accessors.push_back(std::move(
accessor));
44 if (accessors.empty())
return nullptr;
45 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
51 std::ifstream f(fileList);
53 cout <<
"file " << fileList <<
" not accessible" << endl;
60 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
62 while (f >> fileName) {
65 cout <<
"Skipping invalid file " << fileName << endl;
68 cout << std::setw(2) << ++i <<
" - " << fileName << endl;
69 accessors.push_back(std::move(
accessor));
72 if (accessors.empty())
return nullptr;
73 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
83 std::vector<std::unique_ptr<const TreeAccessor> > accessors;
85 for (
int i = 0; i < chain.GetListOfFiles()->
GetEntries(); i++) {
86 std::string fileName = chain.GetListOfFiles()->At(i)->GetTitle();
89 cout <<
"Skipping invalid file " << fileName << endl;
92 cout << std::setw(2) << i+1 <<
" - " << fileName <<
" , nEvents = " <<
accessor->nEvents() <<
", nRuns = " <<
accessor->nRuns() << endl;
93 accessors.push_back(std::move(
accessor));
96 if (accessors.empty())
return nullptr;
97 return std::make_unique<MultiTreeAccessor>(std::move(accessors));
108 unsigned int nEventsSoFar = 0;
110 unsigned int n =
accessor->nEvents();
111 if (i < nEventsSoFar + n)
return accessor->eventData(i - nEventsSoFar);
120 unsigned int nRunsSoFar = 0;
123 if (i < nRunsSoFar + n)
return accessor->runData(i - nRunsSoFar);
151 unsigned int size = 0;
162 unsigned int size = 0;
174 std::vector<std::unique_ptr<const Data> > allData;
175 std::vector<std::unique_ptr<const EventData> > allEventData;
177 std::unique_ptr<const History> thisHistory =
accessor->getCellHistory(i);
178 if (!thisHistory)
continue;
180 cellInfo = std::make_unique<CellInfo>(*thisHistory->cellInfo());
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));
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);
201 return std::make_unique<History>(std::move(allData), *
cellInfo, std::move(allEventData), i);
208 std::vector<std::unique_ptr<const Data> > allData;
209 std::vector<std::unique_ptr<const EventData> > allEventData;
212 std::unique_ptr<const History> thisHistory (
accessor->getSCHistory(i));
214 if (!thisHistory)
continue;
216 cellInfo = std::make_unique<CellInfo>(*thisHistory->cellInfo());
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));
230 for (
unsigned int ii = 0; ii < thisHistory->nData(); ii++) {
232 allData.push_back(std::make_unique<Data>(*thisHistory->data(ii), eventMap[&thisHistory->data(ii)->eventData()],
nullptr, -1));
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);
244 return std::make_unique<History>(std::move(allData), *
cellInfo, std::move(allEventData), i);
254 if (cont && cont->
cellInfo())
return std::make_unique<CellInfo>(*cont->
cellInfo());
262 std::vector<const Accessor*> accessors;
263 for (
unsigned int i = 0; i <
m_accessors.size(); i++)
265 cout <<
"Merging data..." << endl;
267 return !!singleContainer;
271std::vector<std::unique_ptr<MultiTreeAccessor> >
274 std::vector< std::vector<std::unique_ptr<const TreeAccessor> > > filteredAccessors(filterList.
size());
276 std::vector<std::unique_ptr<MultiTreeAccessor> >
result;
278 for (
unsigned int i = 0; i <
nAccessors(); i++) {
280 cout <<
"Processing data " << i <<
" of " <<
nAccessors();
281 if (treeAcc) cout <<
" (fileName = " << treeAcc->
fileName() <<
")";
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;
295 pathname.resize( slpos );
297 TString thisFN = Form(
"%s_filter%d.root", pathname.c_str(), i );
301 if (filteredTreeAccs.size() != filterList.
size()) {
302 cout <<
"Filtering failed, exiting" << endl;
305 for (
unsigned int f = 0; f < filteredTreeAccs.size(); f++) filteredAccessors[f].push_back(std::move(filteredTreeAccs[f]));
308 for (
unsigned int f = 0; f < filteredAccessors.size(); f++)
309 result.push_back(std::make_unique<MultiTreeAccessor>(std::move(filteredAccessors[f])));
TGraphErrors * GetEntries(TH2F *histo)
virtual void resetCache() const
virtual std::unique_ptr< const CellInfo > cellInfo(unsigned int i) const
void add(const FilterParams ¶ms, const TString &fileName)
unsigned int size() const
const FilterParams & filterParams(unsigned int i) const
const TString & fileName(unsigned int i) const
const CellInfo * cellInfo() const
unsigned int nDataContainers() const
virtual std::unique_ptr< const CellInfo > getCellInfo(unsigned int i) const override
virtual unsigned int historySizeSC(unsigned int i) const override
MultiTreeAccessor(std::vector< std::unique_ptr< const TreeAccessor > > &&accessors)
Constructor.
unsigned int nAccessors() const
virtual std::unique_ptr< const History > getCellHistory(unsigned int i) 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
const TreeAccessor & accessor(unsigned int i) const
static std::unique_ptr< MultiTreeAccessor > open(const std::vector< TString > &files)
std::vector< std::unique_ptr< MultiTreeAccessor > > filterComponents(const FilterList &filterList, const DataTweaker &tweaker) const
virtual bool writeToFile(const TString &fileName) const override
virtual ~MultiTreeAccessor()
static std::unique_ptr< MultiTreeAccessor > openList(const TString &fileList)
static std::unique_ptr< MultiTreeAccessor > openWild(const TString &wcName)
std::vector< std::unique_ptr< const TreeAccessor > > m_accessors
virtual unsigned int nEvents() const override
virtual unsigned int historySize(unsigned int i) const override
virtual std::unique_ptr< const History > getSCHistory(unsigned int i) const override
static std::unique_ptr< TreeAccessor > merge(const std::vector< const Accessor * > &accessors, const TString &fileName="")
static std::unique_ptr< TreeAccessor > open(const TString &fileName)
static std::unique_ptr< TreeAccessor > filter(const Accessor &accessor, const FilterParams &filterParams, const TString &fileName, const DataTweaker &tweaker)
std::vector< std::string > files
file names and file pointers