33   static T* 
Get(
bool verbose = 
false)
 
   38         if((gDirectory->GetFile()) != 
nullptr) {
 
   39            TList* list = gDirectory->GetFile()->GetListOfKeys();
 
   41            if(verbose) { std::cout << 
"Reading " << T::Class()->GetName() << R
"( from file ")" << CYAN << gDirectory->GetFile()->GetName() << RESET_COLOR << R"(")" << std::endl; } 
   42            while(TKey* key = 
static_cast<TKey*
>(iter.Next())) {
 
   43               if(strcmp(key->GetClassName(), T::Class()->GetName()) != 0) {
 
   48               Set(
static_cast<T*
>(key->ReadObj()));
 
   53            std::cout << 
"Not reading " << T::Class()->GetName() << 
" from file!" << std::endl;
 
   58            if(verbose) { std::cout << 
"Created new singleton of class " << T::Class()->GetName() << std::endl; }
 
   61         std::cout << 
"Re-using old singleton of class " << T::Class()->GetName() << std::endl;
 
 
   71      std::string fileName = 
fDir->GetName();
 
   75      if(fileName.length() < 9) {
 
   78      size_t underscore = fileName.find_last_of(
'_');
 
   79      size_t dot        = fileName.find_last_of(
'.');
 
   82      if(dot != fileName.length() - 5 || underscore != dot - 4) {
 
   85      filebase         = fileName.substr(0, underscore - 5);
 
   86      int runNumber    = atoi(fileName.substr(underscore - 5).c_str());
 
   87      int subrunNumber = atoi(fileName.substr(dot - 3).c_str());
 
   88      if(runNumber > 0 || subrunNumber > 0) {
 
   89         TFile* prevSubRun = 
nullptr;
 
   90         if(subrunNumber > 0) {
 
   91            prevSubRun = 
new TFile(Form(
"%s%05d_%03d.root", filebase.c_str(), runNumber, subrunNumber - 1));
 
   95            prevSubRun     = 
new TFile(Form(
"%s%05d_%03d.root", filebase.c_str(), runNumber - 1, subrun++));
 
   96            TFile* tmpFile = 
nullptr;
 
   97            while(prevSubRun != 
nullptr && prevSubRun->IsOpen()) {
 
   98               if(tmpFile != 
nullptr) {
 
  100                  tmpFile = prevSubRun;
 
  102               prevSubRun = 
new TFile(Form(
"%s%05d_%03d.root", filebase.c_str(), runNumber - 1, subrun++));
 
  106            prevSubRun = tmpFile;
 
  108         if(prevSubRun != 
nullptr && prevSubRun->IsOpen()) {
 
  109            T* prevSingleton = 
static_cast<T*
>(prevSubRun->Get(
fSingleton->GetName()));
 
  110            if(prevSingleton != 
nullptr) {
 
  112               std::cout << 
"Found previous " << 
fSingleton->GetName() << 
" data from " << prevSubRun->GetName() << std::endl;
 
  114               std::cout << 
"Failed to find previous " << 
fSingleton->GetName() << 
" data from " << prevSubRun->GetName() << std::endl;
 
  116               prevSingleton = 
static_cast<T*
>(prevSubRun->Get(&(
fSingleton->GetName()[1])));
 
  117               if(prevSingleton != 
nullptr) {
 
  119                  std::cout << 
"Found previous " << &(
fSingleton->GetName()[1]) << 
" data from " << prevSubRun->GetName() << std::endl;
 
  121                  std::cout << 
"Failed to find previous " << &(
fSingleton->GetName()[1]) << 
" data from " << prevSubRun->GetName() << std::endl;
 
  127            std::cout << 
"Failed to find previous file " << prevSubRun->GetName() << 
" not adding data to " << 
fSingleton->GetName() << std::endl;