Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:24:01

0001 #include <CDBUtils.C>
0002 
0003 #include <TSystem.h>
0004 
0005 std::map<std::string, std::string> md5map;
0006 std::string md5sumfile;
0007 
0008 void loadmd5map(const std::string &fname);
0009 int md5check(const std::string &cdbfname, const std::string &fname);
0010 int insertpl(const std::string &fname, const std::string &ptype, int runnumber);
0011 int checkpl(const std::string &fname, const std::string &ptype, int runnumber);
0012 int insertplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun);
0013 int checkplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun);
0014 int insertplinfinity(const std::string &fname, const std::string &ptype, int runnumber);
0015 int checkplinfinity(const std::string &fname, const std::string &ptype, int runnumber);
0016 
0017 int checkpl(const std::string &fname, const std::string &ptype, int runnumber)
0018 {
0019   std::string cdbres = getCalibration(ptype, runnumber);
0020   if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0021   {
0022     std::cout << fname << " not in cdb, inserting it" << std::endl;
0023     insertpl(fname, ptype, runnumber);
0024   }
0025   else
0026   {
0027     int iret = md5check(cdbres, fname);
0028     switch (iret)
0029     {
0030     case 0:
0031       //      std::cout << fname << " checks out" << std::endl;
0032       break;
0033     case 1:
0034       std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0035       insertpl(fname, ptype, runnumber);
0036       break;
0037     case -1:
0038       std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0039       break;
0040     default:
0041       std::cout << "strange return from md5check(" << cdbres << ", "
0042                 << fname << ")" << " doing nothing" << std::endl;
0043       break;
0044     }
0045   }
0046   return 0;
0047 }
0048 
0049 int checkplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun)
0050 {
0051   std::string cdbres = getCalibration(ptype, runnumber);
0052   if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0053   {
0054     std::cout << fname << " not in cdb, inserting it" << std::endl;
0055     insertplrunrange(fname, ptype, runnumber, endrun);
0056   }
0057   else
0058   {
0059     int iret = md5check(cdbres, fname);
0060     switch (iret)
0061     {
0062     case 0:
0063       //      std::cout << fname << " checks out" << std::endl;
0064       break;
0065     case 1:
0066       std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0067       insertplrunrange(fname, ptype, runnumber, endrun);
0068       break;
0069     case -1:
0070       std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0071       break;
0072     default:
0073       std::cout << "strange return from md5check(" << cdbres << ", "
0074                 << fname << ")" << " doing nothing" << std::endl;
0075       break;
0076     }
0077   }
0078   return 0;
0079 }
0080 
0081 int checkplinfinity(const std::string &fname, const std::string &ptype, int runnumber)
0082 {
0083   std::string cdbres = getCalibration(ptype, runnumber);
0084   if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0085   {
0086     std::cout << fname << " not in cdb, inserting it" << std::endl;
0087     insertplinfinity(fname, ptype, runnumber);
0088   }
0089   else
0090   {
0091     int iret = md5check(cdbres, fname);
0092     switch (iret)
0093     {
0094     case 0:
0095       //      std::cout << fname << " checks out" << std::endl;
0096       break;
0097     case 1:
0098       std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0099       insertplinfinity(fname, ptype, runnumber);
0100       break;
0101     case -1:
0102       std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0103       break;
0104     default:
0105       std::cout << "strange return from md5check(" << cdbres << ", "
0106                 << fname << ")" << " doing nothing" << std::endl;
0107       break;
0108     }
0109   }
0110   return 0;
0111 }
0112 
0113 int insertpl(const std::string &fname, const std::string &ptype, int runnumber)
0114 {
0115   insertPayload(ptype, fname, runnumber, runnumber + 1);
0116   //  gSystem->Exit(0);
0117   return 0;
0118 }
0119 
0120 int insertplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun)
0121 {
0122   std::cout << "insert " << fname << ", from " << runnumber << " to "
0123             << endrun << std::endl;
0124   insertPayload(ptype, fname, runnumber, endrun + 1);
0125   //  gSystem->Exit(0);
0126   return 0;
0127 }
0128 
0129 int insertplinfinity(const std::string &fname, const std::string &ptype, int runnumber)
0130 {
0131   //  std::cout << "inserting payload " << fname << " start " << runnumber << std::endl;
0132   std::cout << "insert " << fname << ", from " << runnumber << " to end of time" << std::endl;
0133   insertPayload(ptype, fname, runnumber);
0134   //  gSystem->Exit(0);
0135   return 0;
0136 }
0137 
0138 void loadmd5map(const std::string &fname)
0139 {
0140   md5sumfile = fname;
0141   std::ifstream infile(fname);
0142   if (infile.is_open())
0143   {
0144     std::string line;
0145     while (std::getline(infile, line))
0146     {
0147       std::istringstream istr(line);
0148       std::string md5;
0149       std::string cdbfile;
0150       istr >> md5;
0151       istr >> cdbfile;
0152       md5map[cdbfile] = md5;
0153     }
0154     infile.close();
0155     // for (auto iter : md5map)
0156     // {
0157     //        std::cout << "file: " << iter.first << ", md5: " << iter.second << std::endl;
0158     // }
0159   }
0160   else
0161   {
0162     std::cout << "could not open " << fname << std::endl;
0163     gSystem->Exit(1);
0164   }
0165 }
0166 
0167 int md5check(const std::string &cdbfname, const std::string &fname)
0168 {
0169   std::filesystem::path fullfile(cdbfname);
0170   std::string lfn = fullfile.stem();
0171   std::filesystem::path fullfname(fname);
0172   int pos = lfn.find(fullfname.stem());
0173   pos--;
0174   //  std::cout << "lfn: " << fullfile.stem() << ", fulln: "<< fullfname.stem() << ", pos: " << pos << std::endl;
0175   lfn.erase(pos);
0176   auto iter = md5map.find(fname);
0177   if (iter != md5map.end())
0178   {
0179     //    std::cout << "file " << iter->first << " md5: " << iter->second << " cdbmd5: " << lfn << std::endl;
0180     if (iter->second == lfn)
0181     {
0182       //      std::cout << "all good" << std::endl;
0183       return 0;
0184     }
0185     return 1;
0186   }
0187   return -1;
0188 }
0189 
0190 int checkrunrange(const std::string &fname, const std::string &ptype, int beginrun, int endrun)
0191 {
0192   int iret = 0;
0193   for (int irun = beginrun; irun <= endrun; irun++)
0194   {
0195     if (irun % 1000 == 0)
0196     {
0197       std::cout << "checking " << irun << std::endl;
0198     }
0199     std::string cdbres = getCalibration(ptype,irun);
0200     if (cdbres.empty())
0201     {
0202       std::cout << "no " << ptype << " calibration for run " << irun << std::endl;
0203       iret = -1;
0204       continue;
0205     }
0206     if (cdbres.find(fname) == std::string::npos)
0207     {
0208       std::cout << "calibration mismatch for " << ptype << " calibration, expected " << fname << ", read back "
0209        << cdbres << std::endl;
0210       iret = -2;
0211       continue;
0212     }
0213     int md5ret = md5check(cdbres,fname);
0214     if (md5ret != 0)
0215     {
0216       std::cout << "md5sum check failed" << std::endl;
0217       iret = -3;
0218     }
0219   }
0220   return iret;
0221 }