ROOT logo
#include "TFileMerger.h"
#include "TSystem.h"

#include <map>
#include <iostream>
#include <fstream>
#include <string>

std::map<int, int> runToFill; // maps: run -> fill
std::map<int, TFileMerger*> fillToMerger;

void makeFillMap()
{
}

void FillMerge(const TString runFile="runFile.txt",
	       const TString runFillFile = "run_fill.txt")
{
  // Use to merge run files to fill files
  // For some reason, it does not work without compiling:
  // .L FillMerge.C+g
  // FillMerge()
  //
  // run_fill.txt must be a two column txt file, 
  // column 1 being run and column 2 being fill.

  //TGrid::Connect("alien://");
  

  // Make runToFill map
  std::ifstream rfin;
  rfin.open(runFillFile.Data());
  
  while (1) {
    int run=0, fill=0;
    rfin >> run >> fill;
    if (!rfin.good()) break;
    runToFill[run] = fill;
  }


  // Make FillMergers and add run files to them.
  std::ifstream in;
  in.open(runFile.Data());
  char rootFileName[256];
  Int_t runNumber=0;
  while (1) {
    in >> runNumber >> rootFileName;
    if (!in.good()) break;

    if(169553 == runNumber ) //169094 
      continue;
    
    if( ! runToFill.count(runNumber) ) {
      Printf("can't map run %d to fill, not in file %s", runNumber, runFillFile.Data());
      continue;
    }
    
    int fill = runToFill[runNumber];
    
    if( ! fillToMerger.count( fill ) ) { // if no merger for fill
      fillToMerger[fill] = new TFileMerger(); // create merger
      gSystem->mkdir( Form("%s/fill/%d", gSystem->pwd(), fill), true );
      fillToMerger[fill]->OutputFile(Form("%s/fill/%d/AnalysisResults.root", gSystem->pwd(), fill));
    }
    
    fillToMerger[fill]->AddFile(rootFileName);
  }

  std::ofstream out("fillFile.txt");

  
  // Merge:
  std::map<int, TFileMerger*>::iterator it;
  for( it = fillToMerger.begin(); it != fillToMerger.end(); ++it ) {
    TFileMerger* fm = (*it).second;
    Printf("merging %s", fm->GetOutputFileName());
    fm->Merge();
    out << (*it).first << " " << fm->GetOutputFileName() << std::endl;
    delete fm;
  }

}
 FillMerge.C:1
 FillMerge.C:2
 FillMerge.C:3
 FillMerge.C:4
 FillMerge.C:5
 FillMerge.C:6
 FillMerge.C:7
 FillMerge.C:8
 FillMerge.C:9
 FillMerge.C:10
 FillMerge.C:11
 FillMerge.C:12
 FillMerge.C:13
 FillMerge.C:14
 FillMerge.C:15
 FillMerge.C:16
 FillMerge.C:17
 FillMerge.C:18
 FillMerge.C:19
 FillMerge.C:20
 FillMerge.C:21
 FillMerge.C:22
 FillMerge.C:23
 FillMerge.C:24
 FillMerge.C:25
 FillMerge.C:26
 FillMerge.C:27
 FillMerge.C:28
 FillMerge.C:29
 FillMerge.C:30
 FillMerge.C:31
 FillMerge.C:32
 FillMerge.C:33
 FillMerge.C:34
 FillMerge.C:35
 FillMerge.C:36
 FillMerge.C:37
 FillMerge.C:38
 FillMerge.C:39
 FillMerge.C:40
 FillMerge.C:41
 FillMerge.C:42
 FillMerge.C:43
 FillMerge.C:44
 FillMerge.C:45
 FillMerge.C:46
 FillMerge.C:47
 FillMerge.C:48
 FillMerge.C:49
 FillMerge.C:50
 FillMerge.C:51
 FillMerge.C:52
 FillMerge.C:53
 FillMerge.C:54
 FillMerge.C:55
 FillMerge.C:56
 FillMerge.C:57
 FillMerge.C:58
 FillMerge.C:59
 FillMerge.C:60
 FillMerge.C:61
 FillMerge.C:62
 FillMerge.C:63
 FillMerge.C:64
 FillMerge.C:65
 FillMerge.C:66
 FillMerge.C:67
 FillMerge.C:68
 FillMerge.C:69
 FillMerge.C:70
 FillMerge.C:71
 FillMerge.C:72
 FillMerge.C:73
 FillMerge.C:74
 FillMerge.C:75
 FillMerge.C:76
 FillMerge.C:77
 FillMerge.C:78
 FillMerge.C:79
 FillMerge.C:80
 FillMerge.C:81
 FillMerge.C:82
 FillMerge.C:83
 FillMerge.C:84