--- /dev/null
+#include "TFileMerger.h"
+#include "TSystem.h"
+#include <TString.h>
+
+#include <map>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+void MergeSet(const TString mergeFileName,
+ const TString runSetName = "runSet.txt",
+ const TString runFileName = "runFile.txt")
+{
+ // Author: Henrik.Qvigstad@cern.ch, 2012
+ //
+ // Use to merge sets of runs defined by file by name of 'runSetName'
+ //
+ // For some reason, it does not work without compiling:
+ //
+ // .L MergeSet.C+g
+ // MergeSet()
+
+ // Make runToFill map
+ std::ifstream runFile;
+ runFile.open(runFileName.Data());
+
+ std::map<int, std::string> runToFile; // maps: run -> fill
+ while (1) {
+ int run=0;
+ std::string file;
+ runFile >> run >> file;
+ if (!runFile.good()) break;
+ runToFile[run] = file;
+ }
+
+
+ // Make FillMergers and add run files to them.
+ std::ifstream runSet;
+ TFileMerger* fileMerger = new TFileMerger(); // create merger
+ fileMerger->OutputFile(mergeFileName.Data());
+ runSet.open(runSetName.Data());
+ Int_t runNumber=0;
+ while (1) {
+ runSet >> runNumber;
+ if (!runSet.good()) break;
+
+// if(169553 == runNumber ) //169094
+// continue;
+
+ if( ! runToFile.count(runNumber) ) {
+ Printf("can't map run %d to file", runNumber);
+ continue;
+ }
+
+ std::string file = runToFile[runNumber];
+ printf("adding %s: ", file.data());
+ fileMerger->AddFile(file.data());
+ }
+
+ Printf("Merging %s...", mergeFileName.Data());
+ fileMerger->Merge();
+ Printf("Merging %s... done! \n", mergeFileName.Data());
+ delete fileMerger;
+}
+
+
+void MergeTpcSets()
+{
+ MergeSet("AnalysisResults_GoodTpc.root", "../runsGoodTpcLHC11h.txt", "runFile.txt");
+ MergeSet("AnalysisResults_SemiGoodTpc.root", "../runsSemiGoodTpcLHC11h.txt", "runFile.txt");
+ MergeSet("AnalysisResults_BadTpc.root", "../runsBadTpcLHC11h.txt", "runFile.txt");
+}