diff --git a/Tools/FilePeeker/src/FileMetaData.cxx b/Tools/FilePeeker/src/FileMetaData.cxx index 109b471e3f124b889c958e4adca3a0dd22eef029..6a06bf693d4c1766d5d8996e81f881704cc6e5dc 100644 --- a/Tools/FilePeeker/src/FileMetaData.cxx +++ b/Tools/FilePeeker/src/FileMetaData.cxx @@ -1,6 +1,6 @@ -//Dear emacs, this is -*-c++-*- +//Dear emacs, this is -*-c++-*- /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "FileMetaData.h" @@ -14,8 +14,8 @@ void FileMetaData::dump(std::ostream& out) const { out << "File Meta Data is invalid" << std::endl; return; } - - + + out << "SG Keys: "; for (const std::string& k : m_sgKeys) {out << k << " ";} out << std::endl; @@ -27,28 +27,31 @@ void FileMetaData::dump(std::ostream& out) const { out << "Lumiblock number(s): "; for (const auto lb : m_lbNumbers) {out << lb << " ";} out << std::endl; - + out << "Project: " << m_project << std::endl; out << "Stream:" << m_stream << std::endl; - + out << "GUID: " << m_guid << std::endl; - + out << "Conditions Tag: " << m_condTag << std::endl; out << "Geometry Tag: " << m_geoTag << std::endl; out << "Beam Energy: " << m_beamEnergy << std::endl; out << "Beam Type: " << m_beamType << std::endl; - + out << "Number of events: " << m_nEvents << std::endl; out << "is MC:" << (m_isMC ? "True" : "False") << std::endl; + if (m_trtRangeCut>0.0) { + out << "TRT Range Cut: " << m_trtRangeCut << std::endl; + } return; } void FileMetaData::keyValueDump(std::ostream& out) const { - + if (!m_valid) return; out << "File:" << m_fileName << std::endl; @@ -59,18 +62,18 @@ void FileMetaData::keyValueDump(std::ostream& out) const { out << "LBNumber: "; for (const auto lb : m_lbNumbers) {out << " " << lb;} out << std::endl; - + out << "Project: " << m_project << std::endl; out << "Stream:" << m_stream << std::endl; - + out << "GUID: " << m_guid << std::endl; - + out << "ConditionsTag: " << m_condTag << std::endl; out << "GeometryTag: " << m_geoTag << std::endl; out << "BeamEnergy: " << m_beamEnergy << std::endl; out << "BeamType: " << m_beamType << std::endl; - + out << "NEvents: " << m_nEvents << std::endl; out << "isMC:" << (m_isMC ? "1" : "0") << std::endl; @@ -79,5 +82,8 @@ void FileMetaData::keyValueDump(std::ostream& out) const { for (const std::string& k : m_sgKeys) {out << k << " ";} out << std::endl; + if (m_trtRangeCut>0.0) { + out << "TRTRangeCut: " << m_trtRangeCut << std::endl; + } return; } diff --git a/Tools/FilePeeker/src/FileMetaData.h b/Tools/FilePeeker/src/FileMetaData.h index 710bbd1e10b9ecbcd9905656f68858fb0d898ad2..a1da37969771820981fc17d9f6e3d61d56578563 100644 --- a/Tools/FilePeeker/src/FileMetaData.h +++ b/Tools/FilePeeker/src/FileMetaData.h @@ -1,18 +1,18 @@ -//Dear emacs, this is -*-c++-*- +//Dear emacs, this is -*-c++-*- /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef FILEPEEKER_FILEMETADATA #define FILEPEEKER_FILEMETADATA -#include <set> +#include <set> #include <string> #include <iostream> #include <vector> class FileMetaData { - + public: std::string m_fileName; std::set<unsigned> m_runNumbers; @@ -20,21 +20,23 @@ class FileMetaData { std::string m_project; std::string m_stream; - + std::string m_condTag; std::string m_geoTag; std::string m_guid; - unsigned m_nEvents=0; + unsigned m_nEvents{0}; - unsigned m_beamEnergy=0.0; + unsigned m_beamEnergy{0}; std::string m_beamType; - bool m_isMC=true; + double m_trtRangeCut{-1.0}; // From /Simulation/Parameters + + bool m_isMC{true}; - bool m_valid=false; + bool m_valid{false}; std::vector<std::string> m_sgKeys; diff --git a/Tools/FilePeeker/src/PoolFilePeeker.cxx b/Tools/FilePeeker/src/PoolFilePeeker.cxx index 283b79a4b5fcf78df032d3384616b6f22655bd62..fdae4d820197b70409bf090c15784019337b86d5 100644 --- a/Tools/FilePeeker/src/PoolFilePeeker.cxx +++ b/Tools/FilePeeker/src/PoolFilePeeker.cxx @@ -1,6 +1,6 @@ -//Dear emacs, this is -*-c++-*- +//Dear emacs, this is -*-c++-*- /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #include "TFile.h" @@ -8,10 +8,10 @@ #include <iostream> #include <vector> -#include <string> +#include <string> #include <chrono> #include <set> -#include <algorithm> +#include <algorithm> #include <unistd.h> #include "EventTPCnv/EventStreamInfo_p3.h" @@ -26,7 +26,7 @@ class PoolFilePeeker { - + public: PoolFilePeeker(const char* tf, const bool vbs=false); @@ -35,7 +35,7 @@ public: private: template<typename T> bool findBranch(TBranch* br, const std::string& nametag, const std::string& type, - std::pair<bool,T*>& destination) const; + std::pair<bool,T*>& destination) const; FileMetaData m_fmd; }; @@ -45,7 +45,7 @@ private: template<typename T> bool PoolFilePeeker::findBranch(TBranch* br, const std::string& nametag, const std::string& type, - std::pair<bool,T*>& destination) const { + std::pair<bool,T*>& destination) const { const std::string brName(br->GetName()); const std::string brType(br->GetClassName()); if (brName.find(nametag)!=std::string::npos && brType==type) { @@ -62,14 +62,14 @@ bool PoolFilePeeker::findBranch(TBranch* br, const std::string& nametag, const s return false; } - + PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { m_fmd.m_fileName=filename; auto start = std::chrono::system_clock::now(); - std::unique_ptr<TFile> tf(TFile::Open(filename)); + std::unique_ptr<TFile> tf(TFile::Open(filename)); if (!tf || tf->IsZombie()) { std::cerr << "Failed to open file " << filename << std::endl; return; @@ -78,7 +78,7 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { if (vbs) std::cout << "Time to open input file: " << std::chrono::duration_cast<std::chrono::milliseconds>(stop-start).count() << " msec" << std::endl; - + TTree* md=(TTree*)tf->Get("MetaData"); if (!md) return; @@ -86,6 +86,9 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { std::pair<bool,EventStreamInfo_p3*> esi{false,nullptr}; std::pair<bool,EventStreamInfo_p2*> esi2{false,nullptr}; std::pair<bool,IOVMetaDataContainer_p1*> taginfo{false,nullptr}; + std::pair<bool,IOVMetaDataContainer_p1*> genparam{false,nullptr}; + std::pair<bool,IOVMetaDataContainer_p1*> simparam{false,nullptr}; + std::pair<bool,IOVMetaDataContainer_p1*> digiparam{false,nullptr}; #ifndef SIMULATIONBASE std::pair<bool,ByteStreamMetadataContainer_p1*> bmdc{false,nullptr}; #endif // not SIMULATIONBASE @@ -98,55 +101,122 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { if (findBranch(br,"ByteStreamMetadata","ByteStreamMetadataContainer_p1",bmdc)) continue; #endif // not SIMULATIONBASE if (findBranch(br,"_TagInfo","IOVMetaDataContainer_p1",taginfo)) continue; + if (findBranch(br,"_Generation_Parameters","IOVMetaDataContainer_p1",genparam)) continue; + if (findBranch(br,"_Simulation_Parameters","IOVMetaDataContainer_p1",simparam)) continue; + if (findBranch(br,"_Digitization_Parameters","IOVMetaDataContainer_p1",digiparam)) continue; if (findBranch(br,"Stream","EventStreamInfo_p3",esi)) continue; if (findBranch(br,"Stream","EventStreamInfo_p2",esi2)) continue; }//end loop over branches - //Get the event! + //Get the event! md->GetEntry(0); - + m_fmd.m_valid=true; + if (genparam.first) { + if (vbs) std::cout << " Got IOVMetaDataContainer for /Generation/Parameters " << std::endl; + for (const auto& idx : genparam.second->m_payload.m_attrIndexes) { + const unsigned short nameIdx=idx.nameIndex(); + if (idx.typeIndex()==IOVPayloadContainer_p1::ATTR_STRING) { + const unsigned short iObj=idx.objIndex(); + const std::string objKey=genparam.second->m_payload.m_attrName[nameIdx]; + const std::string objValue=genparam.second->m_payload.m_string[iObj]; + if (vbs) std::cout << "Genparam: " << objKey << " : " << objValue << std::endl; + + } + }//end loop over genparam + delete genparam.second; + genparam.second=nullptr; + }//end if have genparam + + if (simparam.first) { + if (vbs) std::cout << " Got IOVMetaDataContainer for /Simulation/Parameters " << std::endl; + for (const auto& idx : simparam.second->m_payload.m_attrIndexes) { + const unsigned short nameIdx=idx.nameIndex(); + if (idx.typeIndex()==IOVPayloadContainer_p1::ATTR_STRING) { + const unsigned short iObj=idx.objIndex(); + const std::string objKey=simparam.second->m_payload.m_attrName[nameIdx]; + const std::string objValue=simparam.second->m_payload.m_string[iObj]; + if (vbs) std::cout << "Simparam: " << objKey << " : " << objValue << std::endl; + if (objKey=="TRTRangeCut") { + std::string::size_type sz; // alias of size_t + m_fmd.m_trtRangeCut=std::stod(objValue,&sz); + } + if (objKey=="beamType") { + m_fmd.m_beamType=objValue; + } + + } + }//end loop over simparam + delete simparam.second; + simparam.second=nullptr; + }//end if have simparam + + if (digiparam.first) { + if (vbs) std::cout << " Got IOVMetaDataContainer for /Digitization/Parameters " << std::endl; + for (const auto& idx : digiparam.second->m_payload.m_attrIndexes) { + const unsigned short nameIdx=idx.nameIndex(); + if (idx.typeIndex()==IOVPayloadContainer_p1::ATTR_STRING) { + const unsigned short iObj=idx.objIndex(); + const std::string objKey=digiparam.second->m_payload.m_attrName[nameIdx]; + const std::string objValue=digiparam.second->m_payload.m_string[iObj]; + if (vbs) std::cout << "Digiparam: " << objKey << " : " << objValue << std::endl; + if (objKey=="IOVDbGlobalTag") { + m_fmd.m_condTag=objValue; + } + if (objKey=="DetDescrVersion") { + m_fmd.m_geoTag=objValue; + } + if (objKey=="beamType") { + m_fmd.m_beamType=objValue; + } + + } + }//end loop over digiparam + delete digiparam.second; + digiparam.second=nullptr; + }//end if have digiparam + if (taginfo.first) { if (vbs) std::cout << " Got IOVMetaDataContainer for TagInfo " << std::endl; for (const auto& idx : taginfo.second->m_payload.m_attrIndexes) { //const unsigned short typeIdx=idx.typeIndex(); const unsigned short nameIdx=idx.nameIndex(); if (idx.typeIndex()==IOVPayloadContainer_p1::ATTR_STRING) { - const unsigned short iObj=idx.objIndex(); - const std::string objKey=taginfo.second->m_payload.m_attrName[nameIdx]; - const std::string objValue=taginfo.second->m_payload.m_string[iObj]; - if (vbs) std::cout << "Taginfo: " << objKey << " : " << objValue << std::endl; - if (objKey=="IOVDbGlobalTag") { - m_fmd.m_condTag=objValue; - } - if (objKey=="GeoAtlas") { - m_fmd.m_geoTag=objValue; - } - if (objKey=="beam_energy") { - m_fmd.m_beamEnergy=atoi(objValue.c_str()); - } - if (objKey=="beam_type") { - m_fmd.m_beamType=objValue; - } + const unsigned short iObj=idx.objIndex(); + const std::string objKey=taginfo.second->m_payload.m_attrName[nameIdx]; + const std::string objValue=taginfo.second->m_payload.m_string[iObj]; + if (vbs) std::cout << "Taginfo: " << objKey << " : " << objValue << std::endl; + if (objKey=="IOVDbGlobalTag") { + m_fmd.m_condTag=objValue; + } + if (objKey=="GeoAtlas") { + m_fmd.m_geoTag=objValue; + } + if (objKey=="beam_energy") { + m_fmd.m_beamEnergy=atoi(objValue.c_str()); + } + if (objKey=="beam_type") { + m_fmd.m_beamType=objValue; + } } }//end loop over taginfo delete taginfo.second; taginfo.second=nullptr; }//end if have taginfo - + if (esi.first) { - if (vbs) std::cout << " Got EventStreamInfo_p3" << std::endl; + if (vbs) std::cout << " Got EventStreamInfo_p3" << std::endl; m_fmd.m_runNumbers.insert(esi.second->m_runNumbers.begin(), - esi.second->m_runNumbers.end()); + esi.second->m_runNumbers.end()); m_fmd.m_lbNumbers.insert(esi.second->m_lumiBlockNumbers.begin(), - esi.second->m_lumiBlockNumbers.end()); + esi.second->m_lumiBlockNumbers.end()); - const std::vector<std::pair<unsigned int, std::string> >& itemList=esi.second->m_itemList; + const std::vector<std::pair<unsigned int, std::string> >& itemList=esi.second->m_itemList; for (const auto& kw : itemList) { m_fmd.m_sgKeys.push_back(kw.second); } @@ -157,11 +227,11 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { } else if (esi2.first) { //Have legacy version of EventStreamInfo m_fmd.m_valid=true; - if (vbs) std::cout << " Got legacy EventStreamInfo_p2" << std::endl; + if (vbs) std::cout << " Got legacy EventStreamInfo_p2" << std::endl; m_fmd.m_runNumbers.insert(esi2.second->m_runNumbers.begin(), - esi2.second->m_runNumbers.end()); + esi2.second->m_runNumbers.end()); m_fmd.m_lbNumbers.insert(esi.second->m_lumiBlockNumbers.begin(), - esi2.second->m_lumiBlockNumbers.end()); + esi2.second->m_lumiBlockNumbers.end()); delete esi2.second; esi2.second=nullptr; } @@ -175,28 +245,28 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { for (const auto& bmd : *bmdc.second) { bmc_runNumbers.insert(bmd.m_runNumber); if (m_fmd.m_stream.size()==0) { - m_fmd.m_stream=bmd.m_stream; + m_fmd.m_stream=bmd.m_stream; } else if (m_fmd.m_stream!=bmd.m_stream) { - std::cerr << "Conflicting stream names in file! Got " << - m_fmd.m_stream << " and " << bmd.m_stream << std::endl; - m_fmd.m_valid=false; + std::cerr << "Conflicting stream names in file! Got " << + m_fmd.m_stream << " and " << bmd.m_stream << std::endl; + m_fmd.m_valid=false; } if (m_fmd.m_project.size()==0) { - m_fmd.m_project=bmd.m_project; + m_fmd.m_project=bmd.m_project; } else if (m_fmd.m_project!=bmd.m_project) { - std::cerr << "Conflicting project names in file! Got " << - m_fmd.m_project << " and " << bmd.m_project << std::endl; - m_fmd.m_valid=false; + std::cerr << "Conflicting project names in file! Got " << + m_fmd.m_project << " and " << bmd.m_project << std::endl; + m_fmd.m_valid=false; } - + const std::vector<std::string>& freeMDs=bmd.m_freeMetaDataStrings; for (const std::string& freeMD : freeMDs) { - if (freeMD.compare(0,11,"Event type:")==0 && freeMD.find("is sim")!=std::string::npos) { - m_fmd.m_isMC=true; //This is made of a simulated bytestream file - break; - } + if (freeMD.compare(0,11,"Event type:")==0 && freeMD.find("is sim")!=std::string::npos) { + m_fmd.m_isMC=true; //This is made of a simulated bytestream file + break; + } } } delete bmdc.second; @@ -211,7 +281,7 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { m_fmd.m_runNumbers=std::move(bmc_runNumbers); } else if (m_fmd.m_runNumbers.size() && bmc_runNumbers.size()) { - //Both filled - cross-check! + //Both filled - cross-check! if (m_fmd.m_runNumbers != bmc_runNumbers) { std::cerr << "Mismatching run numbers in file metadata!" << std::endl; std::cerr << "EventStreamInfo: "; @@ -227,7 +297,7 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { //Get the GUID: TTree* params=(TTree*)tf->Get("##Params"); const unsigned nParamsEntries=params->GetEntries(); - + char dbStr[1024]; params->SetBranchAddress("db_string",&dbStr); @@ -236,7 +306,7 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { params->GetEntry(i); //Model: [NAME=FID][VALUE=41DB894B-C39C-BF47-81E9-C52658B117BF] const std::string field(dbStr); - + if (field.compare(starter)) { m_fmd.m_guid=field.substr(starter.size(),field.size()-starter.size()-1); break; @@ -257,7 +327,7 @@ PoolFilePeeker::PoolFilePeeker(const char* filename, const bool vbs) { } int main(int argc, char** argv) { - + bool verbose=false; bool kvDump=false; char c; @@ -275,20 +345,20 @@ int main(int argc, char** argv) { return -1; } } - + const int nfiles=argc-optind; if (nfiles<=0) { std::cerr << "Expected at least one file name as parameter" << std::endl; return -1; } - + std::vector<FileMetaData> output; for (int iFile=optind;iFile<argc;++iFile) { const char* filename=argv[iFile]; if (verbose) std::cout << "Checking file " << filename << std::endl; - + PoolFilePeeker pfp(filename,verbose); output.push_back(pfp.get()); @@ -302,6 +372,6 @@ int main(int argc, char** argv) { else { for (const auto& o : output) o.dump(); } - + return 0; }