Hello everybody. I found online a macro that splits a given tree with N entries into two identical ones with N/2 entries each. A year ago I used it without any problems but now I don’t seem to get it working.
the macro is:
void splitter(TFile *full_file){
TTree* full_tree = full_file->Get("mytreecrrct");
string full_file_name = full_file->GetName();
int lastindex = full_file_name.find_last_of(".");
TString rawname = full_file_name.substr(0, lastindex);
half1_file_name = rawname+"_half1.root";
half2_file_name = rawname+"_half2.root";
TFile* half1_file = new TFile(half1_file_name, "RECREATE");
TTree* half1_tree = full_tree->CloneTree(0);
TFile* half2_file = new TFile(half2_file_name, "RECREATE");
TTree* half2_tree = full_tree->CloneTree(0);
TRandom *r3 = new TRandom3();
for (int i=0; i<full_tree->GetEntries(); i++){
full_tree->GetEntry(i);
Double_t rndm = r3->Rndm();
if (rndm < 0.5) {
half1_tree->Fill();
}
else {
half2_tree->Fill();
}
}
half1_file->Write();
half2_file->Write();
cout << full_file_name << " entries " << full_tree->GetEntries() << endl;
cout << half1_file_name << " entries " << half1_tree->GetEntries() << endl;
cout << half2_file_name << " entries " << half2_tree->GetEntries() << endl;
cout << "1+2 entries: " << half1_tree->GetEntries() + half2_tree->GetEntries() << endl;
cout << " " << endl;
}
void tree_splitter() {
// had
TFile* full_file_correctsol_had = new TFile("/afs/cern.ch/work/g/gbillis/TMVA/crrct_sol_total.root","READ");
splitter(full_file_correctsol_had);
}
and the output when I compile it in ROOT is :
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:26:11: error: cannot initialize a variable of type ‘TTree *’ with
an rvalue of type 'TObject '
TTree full_tree = full_file->Get(“mytreecrrct”);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:32:4: error: use of undeclared identifier 'half1_file_name’
half1_file_name = rawname+"_half1.root";
^
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:33:4: error: use of undeclared identifier 'half2_file_name’
half2_file_name = rawname+"_half2.root";
^
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:35:34: error: use of undeclared identifier 'half1_file_name’
TFile* half1_file = new TFile(half1_file_name, “RECREATE”);
^
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:38:34: error: use of undeclared identifier 'half2_file_name’
TFile* half2_file = new TFile(half2_file_name, “RECREATE”);
^
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:58:12: error: use of undeclared identifier 'half1_file_name’
cout << half1_file_name << " entries " << half1_tree->GetEntries() << endl;
^
/afs/cern.ch/work/g/gbillis/TMVA/./tree_splitter.C:59:12: error: use of undeclared identifier 'half2_file_name’
cout << half2_file_name << " entries " << half2_tree->GetEntries() << endl;
Can anyone help?