BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
test_root.cxx File Reference
#include <string.h>
#include "TChain.h"
#include "TFile.h"
#include "TH1.h"
#include "TTree.h"
#include "TKey.h"
#include "Riostream.h"
#include "TFolder.h"

Go to the source code of this file.

Functions

void MergeRootfile (TDirectory *target, TList *sourcelist)
 
int main (int argc, char *argv[])
 

Variables

TList * FileList
 
TFile * Target
 

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 15 of file test_root.cxx.

15 {
16// std::cout << << " " << file1 << std::endl;
17// char* file = "result.root";
18 std::cout<<"argv[0]:"<<argv[0]<<std::endl;
19 std::cout<<"argv[1]:"<<argv[1]<<std::endl;
20 std::cout<<"argv[2]:"<<argv[2]<<std::endl;
21 std::cout<<"argv[3]:"<<argv[3]<<std::endl;
22 Target = TFile::Open(argv[1], "RECREATE" );
23 FileList = new TList();
24// char* file1="/home/bes/huangb/root_test/hist.root";
25 for(int i=0;i<10000;i++){
26 std::cout<<"argv[i+2]=="<<argv[i+2]<<std::endl;
27 if(string(argv[i+2])=="end") break;
28 FileList->Add( TFile::Open(argv[i+2]) );
29 }
30// FileList->Add( TFile::Open("/home/bes/huangb/root_test/hist1.root") );
32
33} /* end of main */
void MergeRootfile(TDirectory *target, TList *sourcelist)
Definition test_root.cxx:34
TList * FileList
Definition test_root.cxx:11
TFile * Target
Definition test_root.cxx:12

◆ MergeRootfile()

void MergeRootfile ( TDirectory * target,
TList * sourcelist )

Definition at line 34 of file test_root.cxx.

34 {
35
36 // cout << "Target path: " << target->GetPath() << endl;
37 TString path( (char*)strstr( target->GetPath(), ":" ) );
38 path.Remove( 0, 2 );
39
40 TFile *first_source = (TFile*)sourcelist->First();
41 first_source->cd( path );
42 TDirectory *current_sourcedir = gDirectory;
43 //gain time, do not add the objects in the list in memory
44 Bool_t status = TH1::AddDirectoryStatus();
45 TH1::AddDirectory(kFALSE);
46
47 // loop over all keys in this directory
48 TChain *globChain = 0;
49 TIter nextkey( current_sourcedir->GetListOfKeys() );
50 TKey *key, *oldkey=0;
51 while ( (key = (TKey*)nextkey())) {
52
53 //keep only the highest cycle number for each key
54 if (oldkey && !strcmp(oldkey->GetName(),key->GetName())) continue;
55 // std::cout<<"key->GetName()=="<<key->GetName()<<std::endl;
56 // read object from first source file
57 first_source->cd( path );
58 TObject *obj = key->ReadObj();
59
60 TFolder* add = dynamic_cast<TFolder*>(obj);
61 TCollection *hh = add->GetListOfFolders();
62 TFolder* add1=new TFolder(key->GetName(), key->GetTitle());
63// TIter next(hh);
64
65 TFile *nextsource = (TFile*)sourcelist->After( first_source );
66 while ( nextsource ) {
67 TIter next(hh);
68 nextsource->cd( path );
69 std::cout<<"nextsource->Name()=="<<std::endl;
70 nextsource->Print();
71 std::cout<<"firstsource->Name()=="<<std::endl;
72 first_source->Print();
73 TFolder* kk=(TFolder *)nextsource->Get(key->GetName());
74 std::cout<<"key->GetName()=="<<key->GetName()<<std::endl;
75 first_source->cd( path );
76 while ((obj = next())){
77 TH1 *h1 = (TH1*)obj;
78 std::cout<<"obj->getName()=="<<obj->GetName()<<std::endl;
79 add1->Add(h1);
80 nextsource->cd( path );
81 TH1 *h2 = (TH1*)kk->FindObjectAny(h1->GetName());
82 if(h2){
83 h1->Add( h2 );
84 std::cout<<"h1->GetEntries()"<<h1->GetEntries()<<std::endl;
85 }
86 }
87 nextsource = (TFile*)sourcelist->After( nextsource );
88 }
89 target->cd();
90 // std::cout<<"add TFolder:"<<add1->GetName()<<std::endl;
91 add1->Write();
92 delete add1;
93 delete hh;
94}
95 target->SaveSelf(kTRUE);
96}
*************DOUBLE PRECISION m_pi *DOUBLE PRECISION m_HvecTau2 DOUBLE PRECISION m_HvClone2 DOUBLE PRECISION m_gamma1 DOUBLE PRECISION m_gamma2 DOUBLE PRECISION m_thet1 DOUBLE PRECISION m_thet2 INTEGER m_IFPHOT *COMMON c_Taupair $ !Spin Polarimeter vector first Tau $ !Spin Polarimeter vector second Tau $ !Clone Spin Polarimeter vector first Tau $ !Clone Spin Polarimeter vector second Tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !phi of HvecTau1 $ !theta of HvecTau1 $ !phi of HvecTau2 $ !theta of HvecTau2 $ !super key
Definition Taupair.h:42
Index next(Index i)

Referenced by main().

Variable Documentation

◆ FileList

TList* FileList

Definition at line 11 of file test_root.cxx.

Referenced by main().

◆ Target

TFile* Target

Definition at line 12 of file test_root.cxx.

Referenced by main().