#include <vector>
 #include <cstdlib>
 #include <cmath>
+#include <list>
 
 #include "GateMergeManager.hh"
 
   //if(res) cout<<"Strange?? Can't mark "<<dir<<" as done!"<<endl;
 };
 
+void GateMergeManager::StartMergingFromFilenames(Strings filenames, string outputfile)
+{
+       for (Strings::const_iterator iter=filenames.begin(); iter!=filenames.end(); iter++)
+       {
+               m_vRootFileNames.push_back(*iter);
+               if(m_verboseLevel>2) cout<<"Root input file name: "<<m_vRootFileNames.back()<<endl;
+       }
+
+       m_Nfiles = m_vRootFileNames.size();
+       m_RootTargetName=m_outDir+outputfile;
+       if(m_verboseLevel>2) cout<<"Root output file name: "<<m_RootTargetName<<endl;
+
+       if (m_fastMerge==true) FastMergeRoot();
+       else MergeRoot();
+};
+
 // to process the splitfile
 void GateMergeManager::ReadSplitFile(string splitfileName){
 
 
 #include <TFile.h>
 #include <TChain.h>
 #include <cstdlib>
+#include <list>
 
 using namespace std;
+typedef list<string> Strings;
 
 class GateMergeManager
 {
 
 
   void StartMerging(string splitfileName);
+  void StartMergingFromFilenames(Strings filenames, string outputfile);
   void ReadSplitFile(string splitfileName);
   bool MergeTree(string name);
   bool MergeGate(TChain* chain);