]> Creatis software - clitk.git/commitdiff
switched to gjm merger for pet
authorPierre Gueth <pierre.gueth@creatis.insa-lyon.fr>
Thu, 7 Feb 2013 14:01:20 +0000 (15:01 +0100)
committerDavid Sarrut <david.sarrut@creatis.insa-lyon.fr>
Fri, 26 Jul 2013 06:32:31 +0000 (08:32 +0200)
tests_dav/clitkMergeRootFiles.cxx
tests_dav/clitkMergeRootFiles.ggo

index 957a8ed8eac06a48adb5796ef6ad608bd6e270e1..ac1158087fdb45b8a831d356a23eed7ffc362e49 100644 (file)
@@ -10,6 +10,7 @@
 
 #include "clitkMergeRootFiles_ggo.h"
 #include "clitkCommon.h"
+#include "GateMergeManager.hh"
 #include <string> 
 #include <TROOT.h>
 #include <TPluginManager.h>
 #include <TH1.h>
 #include <TH2.h>
 #include <iostream>
-#include <set>
 
 using std::endl;
 using std::cout;
 
 typedef std::list<std::string> Strings;
-typedef std::list<TFile*> Handles;
-typedef std::set<std::string> StringsSet;
-
-void mergeSingleTree(TChain* chain, TFile* output_handle, const std::string& tree_name)
-{
-       assert(chain->FindBranch("runID"));
-       assert(chain->FindBranch("eventID"));
-       assert(chain->FindBranch("time"));
-
-       int eventID = -1;
-       int runID = -1;
-       double time = -1;
-
-       chain->SetBranchAddress("eventID",&eventID);
-       chain->SetBranchAddress("runID",&runID);
-       chain->SetBranchAddress("time",&time);
-
-       output_handle->cd();
-       TTree* output_tree = chain->CloneTree(0);
-
-       const long int nentries = chain->GetEntries();
-       for (long int kk=0; kk<nentries; kk++)
-       {
-               chain->GetEntry(kk);
-               //cout << kk << "/" << chain->GetTreeNumber() << endl;
-               output_tree->Fill();
-       }
-
-       output_tree->Write();
-       delete output_tree;
-}
-
-void mergeGateTree(TChain* chain, TFile* output_handle, const std::string& tree_name)
-{
-}
-
-void mergeCoinTree(TChain* chain, TFile* output_handle, const std::string& tree_name)
-{
-}
-
-void mergePetRoot(const Strings& input_filenames, const std::string& output_filename)
-{
-       TFile* output_handle = TFile::Open(output_filename.c_str(),"RECREATE");
-
-       Handles input_handles;
-       StringsSet tree_names;
-       StringsSet h1_names;
-       StringsSet h2_names;
-       for (Strings::const_iterator iter=input_filenames.begin(); iter!=input_filenames.end(); iter++)
-       {
-               TFile* handle = TFile::Open(iter->c_str(),"READ");
-               assert(handle);
-
-               TIter key_next(handle->GetListOfKeys());
-               while (TKey* key = static_cast<TKey*>(key_next()))
-               {
-                       const std::string name = key->GetName();
-                       const bool is_tree = key->ReadObj()->InheritsFrom("TTree");
-                       const bool is_h1 = key->ReadObj()->InheritsFrom("TH1");
-                       const bool is_h2 = key->ReadObj()->InheritsFrom("TH2");
-                       if (is_tree) tree_names.insert(name);
-                       if (is_h1) { h1_names.insert(name); cout << name << "## " << static_cast<TH1D*>(key->ReadObj())->GetMean() << endl; }
-                       if (is_h2) h2_names.insert(name);
-               }
-
-               input_handles.push_back(handle);
-       }
-
-       for (Handles::const_iterator iter=input_handles.begin(); iter!=input_handles.end(); iter++)
-       {
-               (*iter)->Close();
-               delete *iter;
-       }
-
-       cout << "found " << tree_names.size() << " tree "<< h1_names.size() << " histo1d " << h2_names.size() << " histo2d" << endl;
-
-       {
-               cout << "merging trees" << endl;
-               for (StringsSet::const_iterator iter_tree=tree_names.begin(); iter_tree!=tree_names.end(); iter_tree++)
-               {
-                       cout << "  tree " << *iter_tree;
-                       TChain* chain = new TChain(iter_tree->c_str());
-                       for (Strings::const_iterator iter_filename=input_filenames.begin(); iter_filename!=input_filenames.end(); iter_filename++)
-                               chain->Add(iter_filename->c_str());
-                       cout << " nentries " << chain->GetEntries() << endl;
-
-                       if ((*iter_tree) == "Singles" || (*iter_tree) == "Hits") mergeSingleTree(chain,output_handle,*iter_tree);
-                       if ((*iter_tree) == "Gate") mergeGateTree(chain,output_handle,*iter_tree);
-                       if ((*iter_tree) == "Coincidences") mergeCoinTree(chain,output_handle,*iter_tree);
-
-                       delete chain;
-               }
-       }
-
-
-}
 
 
 //-----------------------------------------------------------------------------
@@ -160,7 +64,8 @@ int main(int argc, char * argv[]) {
 
          if (all_pet_output)
          {
-                 mergePetRoot(input_filenames,args_info.output_arg);
+                 GateMergeManager* manager = new GateMergeManager(args_info.fastmerge_given,args_info.verbose_arg,true,0,".");
+                 delete manager;
                  return 0;
          }
   }
index 4180c20b04f880f2776604513315dbebe1788778..7baa3965dc6427cbd50f48abe033868118be5034 100644 (file)
@@ -8,5 +8,6 @@ purpose "Merge several ROOT files"
 option "config"                -  "Config file"               string no
 option "input"                 i  "Input ROOT filenames"      string multiple yes
 option "output"                o  "Output ROOT filename"      string yes
-
+option "fastmerge"             f  "Fast merge"                optional
+option "verbose"               v  "Verbose level"             int optional