File indexing completed on 2024-04-06 12:19:15
0001 #include <TMap.h>
0002 #include <TObjString.h>
0003 #include "IORawData/HcalTBInputService/src/CDFRunInfo.h"
0004 #include <cstdlib>
0005
0006 const char* CDFRunInfo::RootVariableName = "CDFRunInfo";
0007
0008 CDFRunInfo::CDFRunInfo() {}
0009
0010 CDFRunInfo::CDFRunInfo(TFile* file) { load(file); }
0011
0012 const char* CDFRunInfo::get(const char* key) const {
0013 std::map<std::string, std::string>::const_iterator i = m_mapData.find(key);
0014 if (i == m_mapData.end())
0015 return nullptr;
0016 return i->second.c_str();
0017 }
0018
0019 int CDFRunInfo::getInt(const char* key) const {
0020 const char* k = get(key);
0021 if (k == nullptr)
0022 return 0;
0023 return atoi(k);
0024 }
0025
0026 double CDFRunInfo::getDouble(const char* key) const {
0027 const char* k = get(key);
0028 if (k == nullptr)
0029 return 0;
0030 return atof(k);
0031 }
0032
0033 int CDFRunInfo::getKeys(const char** buffer, int nbufs) {
0034 int j = 0;
0035 for (std::map<std::string, std::string>::const_iterator i = m_mapData.begin(); i != m_mapData.end() && j < nbufs;
0036 i++, j++) {
0037 buffer[j] = i->first.c_str();
0038 }
0039 return j;
0040 }
0041
0042 bool CDFRunInfo::hasKey(const char* key) const {
0043 std::map<std::string, std::string>::const_iterator i = m_mapData.find(key);
0044 return (i != m_mapData.end());
0045 }
0046
0047 void CDFRunInfo::setInfo(const char* key, const char* value) { m_mapData[key] = value; }
0048
0049 bool CDFRunInfo::load(TFile* f) {
0050 m_mapData.clear();
0051 if (f == nullptr)
0052 return false;
0053 TMap* pMap = (TMap*)f->Get(RootVariableName);
0054 if (pMap == nullptr)
0055 return false;
0056 TIterator* i = pMap->MakeIterator();
0057 TObject* o;
0058
0059 while ((o = i->Next()) != nullptr) {
0060 std::string a(o->GetName());
0061 std::string b(pMap->GetValue(o)->GetName());
0062 m_mapData.insert(std::pair<std::string, std::string>(a, b));
0063 }
0064 return true;
0065 }
0066
0067 void CDFRunInfo::store(TFile* f) {
0068 f->cd();
0069 TMap* myMap = new TMap();
0070 for (std::map<std::string, std::string>::iterator i = m_mapData.begin(); i != m_mapData.end(); i++) {
0071 myMap->Add(new TObjString(i->first.c_str()), new TObjString(i->second.c_str()));
0072 }
0073 myMap->SetName(RootVariableName);
0074 myMap->Write(RootVariableName, TObject::kSingleKey);
0075 }
0076
0077 void CDFRunInfo::print() const {
0078 for (std::map<std::string, std::string>::const_iterator i = m_mapData.begin(); i != m_mapData.end(); i++)
0079 printf(" '%s' => '%s' \n", i->first.c_str(), i->second.c_str());
0080 }