70 m_fmd.m_fileName=filename;
72 auto start = std::chrono::system_clock::now();
73 std::unique_ptr<TFile> tf(TFile::Open(filename));
74 if (!tf || tf->IsZombie()) {
75 std::cerr <<
"Failed to open file " << filename << std::endl;
78 auto stop = std::chrono::system_clock::now();
80 if (vbs) std::cout <<
"Time to open input file: " << std::chrono::duration_cast<std::chrono::milliseconds>(stop-start).count() <<
" msec" << std::endl;
83 TTree* md=(TTree*)tf->Get(
"MetaData");
87 std::pair<bool,EventStreamInfo_p3*> esi{
false,
nullptr};
88 std::pair<bool,EventStreamInfo_p2*> esi2{
false,
nullptr};
89 std::pair<bool,IOVMetaDataContainer_p1*> taginfo{
false,
nullptr};
90 std::pair<bool,IOVMetaDataContainer_p1*> genparam{
false,
nullptr};
91 std::pair<bool,IOVMetaDataContainer_p1*> simparam{
false,
nullptr};
92 std::pair<bool,IOVMetaDataContainer_p1*> digiparam{
false,
nullptr};
94 std::pair<bool,ByteStreamMetadataContainer_p1*> bmdc{
false,
nullptr};
96 TObjArray* mdBranches=md->GetListOfBranches();
97 const size_t mdnBranches=mdBranches->GetEntriesFast();
98 for (
size_t i=0;i<mdnBranches;++i) {
99 TBranch* br=(TBranch*)mdBranches->At(i);
100 if (vbs) std::cout <<
"Branch "<< br->GetName() <<
" of type " << br->GetClassName() << std::endl;
101#ifndef SIMULATIONBASE
102 if (
findBranch(br,
"ByteStreamMetadata",
"ByteStreamMetadataContainer_p1",bmdc))
continue;
104 if (
findBranch(br,
"_TagInfo",
"IOVMetaDataContainer_p1",taginfo))
continue;
105 if (
findBranch(br,
"_Generation_Parameters",
"IOVMetaDataContainer_p1",genparam))
continue;
106 if (
findBranch(br,
"_Simulation_Parameters",
"IOVMetaDataContainer_p1",simparam))
continue;
107 if (
findBranch(br,
"_Digitization_Parameters",
"IOVMetaDataContainer_p1",digiparam))
continue;
108 if (
findBranch(br,
"Stream",
"EventStreamInfo_p3",esi))
continue;
109 if (
findBranch(br,
"Stream",
"EventStreamInfo_p2",esi2))
continue;
118 if (genparam.first) {
119 if (vbs) std::cout <<
" Got IOVMetaDataContainer for /Generation/Parameters " << std::endl;
120 for (
const auto& idx : genparam.second->m_payload.m_attrIndexes) {
121 const unsigned short nameIdx=idx.nameIndex();
123 const unsigned short iObj=idx.objIndex();
124 const std::string objKey=genparam.second->m_payload.m_attrName[nameIdx];
125 const std::string objValue=genparam.second->m_payload.m_string[iObj];
126 if (vbs) std::cout <<
"Genparam: " << objKey <<
" : " << objValue << std::endl;
130 delete genparam.second;
131 genparam.second=
nullptr;
134 if (simparam.first) {
135 if (vbs) std::cout <<
" Got IOVMetaDataContainer for /Simulation/Parameters " << std::endl;
136 for (
const auto& idx : simparam.second->m_payload.m_attrIndexes) {
137 const unsigned short nameIdx=idx.nameIndex();
139 const unsigned short iObj=idx.objIndex();
140 const std::string objKey=simparam.second->m_payload.m_attrName[nameIdx];
141 const std::string objValue=simparam.second->m_payload.m_string[iObj];
142 if (vbs) std::cout <<
"Simparam: " << objKey <<
" : " << objValue << std::endl;
143 if (objKey==
"TRTRangeCut") {
144 std::string::size_type
sz;
145 m_fmd.m_trtRangeCut=std::stod(objValue,&
sz);
147 if (objKey==
"beamType") {
148 m_fmd.m_beamType=std::move(objValue);
153 delete simparam.second;
154 simparam.second=
nullptr;
157 if (digiparam.first) {
158 if (vbs) std::cout <<
" Got IOVMetaDataContainer for /Digitization/Parameters " << std::endl;
159 for (
const auto& idx : digiparam.second->m_payload.m_attrIndexes) {
160 const unsigned short nameIdx=idx.nameIndex();
162 const unsigned short iObj=idx.objIndex();
163 const std::string objKey=digiparam.second->m_payload.m_attrName[nameIdx];
164 const std::string objValue=digiparam.second->m_payload.m_string[iObj];
165 if (vbs) std::cout <<
"Digiparam: " << objKey <<
" : " << objValue << std::endl;
166 if (objKey==
"IOVDbGlobalTag") {
167 m_fmd.m_condTag=objValue;
169 if (objKey==
"DetDescrVersion") {
170 m_fmd.m_geoTag=objValue;
172 if (objKey==
"beamType") {
173 m_fmd.m_beamType=std::move(objValue);
178 delete digiparam.second;
179 digiparam.second=
nullptr;
183 if (vbs) std::cout <<
" Got IOVMetaDataContainer for TagInfo " << std::endl;
184 for (
const auto& idx : taginfo.second->m_payload.m_attrIndexes) {
186 const unsigned short nameIdx=idx.nameIndex();
188 const unsigned short iObj=idx.objIndex();
189 const std::string objKey=taginfo.second->m_payload.m_attrName[nameIdx];
190 const std::string objValue=taginfo.second->m_payload.m_string[iObj];
191 if (vbs) std::cout <<
"Taginfo: " << objKey <<
" : " << objValue << std::endl;
192 if (objKey==
"IOVDbGlobalTag") {
193 m_fmd.m_condTag=objValue;
195 if (objKey==
"GeoAtlas") {
196 m_fmd.m_geoTag=objValue;
198 if (objKey==
"beam_energy") {
199 m_fmd.m_beamEnergy=atoi(objValue.c_str());
201 if (objKey==
"beam_type") {
202 m_fmd.m_beamType=std::move(objValue);
207 delete taginfo.second;
208 taginfo.second=
nullptr;
212 if (vbs) std::cout <<
" Got EventStreamInfo_p3" << std::endl;
213 m_fmd.m_runNumbers.insert(esi.second->m_runNumbers.begin(),
214 esi.second->m_runNumbers.end());
215 m_fmd.m_lbNumbers.insert(esi.second->m_lumiBlockNumbers.begin(),
216 esi.second->m_lumiBlockNumbers.end());
220 const std::vector<std::pair<unsigned int, std::string> >& itemList=esi.second->m_itemList;
221 for (
const auto& kw : itemList) {
222 m_fmd.m_sgKeys.push_back(kw.second);
229 else if (esi2.first) {
231 if (vbs) std::cout <<
" Got legacy EventStreamInfo_p2" << std::endl;
232 m_fmd.m_runNumbers.insert(esi2.second->m_runNumbers.begin(),
233 esi2.second->m_runNumbers.end());
234 m_fmd.m_lbNumbers.insert(esi.second->m_lumiBlockNumbers.begin(),
235 esi2.second->m_lumiBlockNumbers.end());
241 std::set<unsigned> bmc_runNumbers;
242#ifndef SIMULATIONBASE
244 if (vbs) std::cout <<
" Got ByteStreamMetadataContainer" << std::endl;
246 for (
const auto& bmd : *bmdc.second) {
247 bmc_runNumbers.insert(bmd.m_runNumber);
248 if (
m_fmd.m_stream.size()==0) {
249 m_fmd.m_stream=bmd.m_stream;
251 else if (
m_fmd.m_stream!=bmd.m_stream) {
252 std::cerr <<
"Conflicting stream names in file! Got " <<
253 m_fmd.m_stream <<
" and " << bmd.m_stream << std::endl;
256 if (
m_fmd.m_project.size()==0) {
257 m_fmd.m_project=bmd.m_project;
259 else if (
m_fmd.m_project!=bmd.m_project) {
260 std::cerr <<
"Conflicting project names in file! Got " <<
261 m_fmd.m_project <<
" and " << bmd.m_project << std::endl;
265 const std::vector<std::string>& freeMDs=bmd.m_freeMetaDataStrings;
266 for (
const std::string& freeMD : freeMDs) {
267 if (freeMD.compare(0,11,
"Event type:")==0 && freeMD.find(
"is sim")!=std::string::npos) {
280 if (
m_fmd.m_runNumbers.size()==0 && bmc_runNumbers.size()) {
282 m_fmd.m_runNumbers=std::move(bmc_runNumbers);
284 else if (
m_fmd.m_runNumbers.size() && bmc_runNumbers.size()) {
286 if (
m_fmd.m_runNumbers != bmc_runNumbers) {
287 std::cerr <<
"Mismatching run numbers in file metadata!" << std::endl;
288 std::cerr <<
"EventStreamInfo: ";
289 std::copy(
m_fmd.m_runNumbers.begin(),
m_fmd.m_runNumbers.end(),std::ostream_iterator<unsigned>(std::cerr,
" "));
290 std::cerr << std::endl;
291 std::cerr <<
"ByteStreamEventInfo: ";
292 std::copy(bmc_runNumbers.begin(),bmc_runNumbers.end(),std::ostream_iterator<unsigned>(std::cerr,
" "));
293 std::cerr << std::endl;
299 TTree* params=(TTree*)tf->Get(
"##Params");
300 const unsigned nParamsEntries=params->GetEntries();
303 params->SetBranchAddress(
"db_string",&dbStr);
305 const std::string starter(
"[NAME=FID][VALUE=");
306 for (
unsigned i=0;i<nParamsEntries;++i) {
309 const std::string field(dbStr);
311 if (field.compare(starter)) {
312 m_fmd.m_guid=field.substr(starter.size(),field.size()-starter.size()-1);
318 TTree* tt=(TTree*)tf->Get(
"CollectionTree");
320 std::cerr <<
"Failed to read collectionTree" << std::endl;
324 m_fmd.m_nEvents=tt->GetEntries();