Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }