28 std::vector<const TreeAccessor*>
accessors;
32 cout <<
"Skipping invalid file " <<
fileName << endl;
47 cout <<
"file " <<
fileList <<
" not accessible" << endl;
54 std::vector<const TreeAccessor*>
accessors;
59 cout <<
"Skipping invalid file " <<
fileName << endl;
62 cout << std::setw(2) << ++
i <<
" - " <<
fileName << endl;
77 std::vector<const TreeAccessor*>
accessors;
83 cout <<
"Skipping invalid file " <<
fileName << endl;
86 cout << std::setw(2) <<
i+1 <<
" - " <<
fileName <<
" , nEvents = " <<
accessor->nEvents() <<
", nRuns = " <<
accessor->nRuns() << endl;
95 MultiTreeAccessor::~MultiTreeAccessor()
102 const EventData* MultiTreeAccessor::eventData(
unsigned int i)
const
104 unsigned int nEventsSoFar = 0;
107 if (
i < nEventsSoFar +
n)
return accessor->eventData(
i - nEventsSoFar);
114 const RunData* MultiTreeAccessor::runData(
unsigned int i)
const
116 unsigned int nRunsSoFar = 0;
119 if (
i < nRunsSoFar +
n)
return accessor->runData(
i - nRunsSoFar);
135 unsigned int MultiTreeAccessor::nRuns()
const
144 unsigned int MultiTreeAccessor::historySize(
unsigned int i)
const
147 unsigned int size = 0;
155 unsigned int MultiTreeAccessor::historySizeSC(
unsigned int i)
const
158 unsigned int size = 0;
167 const History* MultiTreeAccessor::getCellHistory(
unsigned int i)
const
170 std::vector<const Data*> allData;
171 std::vector<const EventData*> allEventData;
174 if (!thisHistory)
continue;
178 const std::vector<const EventData*>& thisEventData = thisHistory->
eventData();
179 std::map<const EventData*, const EventData*> eventMap;
181 if (eventMap.find(
event) != eventMap.end())
continue;
183 eventMap[
event] = newED;
184 allEventData.push_back(newED);
187 for (
unsigned int i = 0;
i < thisHistory->
nData();
i++) {
197 auto *
h = cellInfo ?
new History(allData, *cellInfo, allEventData,
i):
nullptr;
203 const CellInfo* MultiTreeAccessor::getCellInfo(
unsigned int i)
const
217 for (
unsigned int i = 0;
i < m_accessors.size();
i++)
219 cout <<
"Merging data..." << endl;
221 if (!singleContainer)
return false;
222 delete singleContainer;
229 std::vector< std::vector<const TreeAccessor*> > filteredAccessors(filterList.
size());
231 for (
unsigned int i = 0;
i < nAccessors();
i++) {
233 cout <<
"Processing data " <<
i <<
" of " << nAccessors();
234 if (treeAcc) cout <<
" (fileName = " << treeAcc->
fileName() <<
")";
238 for (
unsigned int f = 0;
f < filterList.
size();
f++) {
239 std::string pathname = (string)filterList.
fileName(
f);
240 if( pathname.find(
"eos/atlas/") < pathname.length() ){
241 int nslashes = 0, slpos = 0;
242 for(
int k1 = 0; k1 < (
int)pathname.length(); k1++ ){
243 if( nslashes > 2 )
break;
244 if( pathname[k1] !=
'/' )
continue;
248 pathname.resize( slpos );
250 TString thisFN = Form(
"%s_filter%d.root", pathname.c_str(),
i );
254 if (filteredTreeAccs.size() != filterList.
size()) {
255 cout <<
"Filtering failed, exiting" << endl;
256 return std::vector<MultiTreeAccessor*>();
258 for (
unsigned int f = 0;
f < filteredTreeAccs.size();
f++) filteredAccessors[
f].push_back(filteredTreeAccs[
f]);
261 std::vector<MultiTreeAccessor*>
result;