Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#include "EventFilter/Utilities/interface/DirManager.h"
#include "FWCore/Utilities/interface/Exception.h"
#include <iostream>

namespace evf {

  unsigned int DirManager::findHighestRun() {
    DIR *dir = opendir(dir_.c_str());
    struct dirent *buf;
    int maxrun = 0;
    while ((buf = readdir(dir))) {
      std::string dirnameNum = buf->d_name;
      if (dirnameNum.find("run") != std::string::npos)
        dirnameNum = dirnameNum.substr(3, std::string::npos);
      if (atoi(dirnameNum.c_str()) > maxrun) {
        maxrun = atoi(dirnameNum.c_str());
      }
    }
    closedir(dir);
    return maxrun;
  }

  std::string DirManager::findHighestRunDir() {
    std::string retval = dir_ + "/";
    std::string tmpdir;
    DIR *dir = opendir(dir_.c_str());
    struct dirent *buf;
    int maxrun = 0;
    while ((buf = readdir(dir))) {
      std::string dirnameNum = buf->d_name;
      if (dirnameNum.find("run") != std::string::npos)
        dirnameNum = dirnameNum.substr(3, std::string::npos);
      if (atoi(dirnameNum.c_str()) > maxrun) {
        tmpdir = buf->d_name;
        maxrun = atoi(dirnameNum.c_str());
      }
    }
    closedir(dir);
    retval += tmpdir;
    return retval;
  }

  std::string DirManager::findRunDir(unsigned int run) {
    std::string retval = dir_ + "/";
    std::string tmpdir = "";
    DIR *dir = opendir(dir_.c_str());
    struct dirent *buf;
    while ((buf = readdir(dir))) {
      std::string dirnameNum = buf->d_name;
      if (dirnameNum.find("run") != std::string::npos)
        dirnameNum = dirnameNum.substr(3, std::string::npos);
      if ((unsigned int)atoi(dirnameNum.c_str()) == run) {
        tmpdir = buf->d_name;
        break;
      }
    }
    closedir(dir);
    if (tmpdir.empty())
      throw cms::Exception("LogicError") << "Run Directory for Run " << run << " Not Found";
    retval += tmpdir;
    return retval;
  }

  bool DirManager::checkDirEmpty(std::string &d) {
    int filecount = 0;
    DIR *dir = opendir(d.c_str());
    while (readdir(dir)) {
      filecount++;
    }
    return (filecount == 0);
  }
}  // namespace evf