Cloning a TTree

Hello,

I try to clone some trees in rootifles using a map in entry.
My code is the following :

[code]#include
#include
#include
#include
#include
#include

#include “TChain.h”
#include “TH1F.h”
#include “TH2F.h”
#include “THStack.h”
#include “TCanvas.h”
#include “TApplication.h”
#include “TString.h”
#include “TMath.h”
#include “TLegend.h”

#include “Util.hpp”

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

//Launch the files

std::map<std::string, std::vectorstd::string > thelist;
Util::Fill_mapvec(thelist,“List_Files.txt”);
//Chain and make trees available
std::map<std::string, TChain*> processes=Util::Gime_map("/work/boudes-clued0/pgris/ana_cafe_p20/Trees_mu_jet/",thelist,“summary”);
//Now let us draw

//rootfiles de sortie

std::vector<TFile*> v_rootFile;
std::vector<TTree*> v_tree_out;

for(std::map<std::string, TChain*>::iterator it=processes.begin();it!=processes.end();++it)
{

  std::string proc_name=it->first;

  std::string name_rootFile = proc_name+"_tree_presel_etamu2.root";
  std::string name_tree = proc_name+"_tree_presel_etamu2";

v_rootFile.push_back(new TFile(name_rootFile.c_str(),“RECREATE”));
v_tree_out.push_back(new TTree(“summary”,“summary”));

}

int i=0;

for(std::map<std::string, TChain*>::iterator it=processes.begin();it!=processes.end();++it)
{

Int_t nentries = (Int_t)it->second->GetEntries();

  v_tree_out.push_back((it->second)->CloneTree());

for (Int_t k=0;k<nentries; k++) {

   it->second->GetEntry(k);
 (v_tree_out.at(i))->Fill();

}

(v_tree_out.at(i))->Print();

(v_tree_out.at(i))->Write();

//(v_tree_out.at(i))->AutoSave();

//(v_rootFile.at(i))->Close();

delete (v_rootFile.at(i));

i++;

}

return 0;

}[/code]

The aim is first to clone exactly all the rootfiles (each including a tree with variables, leaves) anf after that to do a cut on all some variables of the tree (for each rootfile) in order to get filtered trees.

But I get a bad error at the execution, that I cannot explain :

Error in TTree::Fill: Failed filling branch:summary.DeltaR_Muon_Topscaledmedium2_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_NPloose1_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_NPloose2_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_NPtight1_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_NPtight2_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_Topp141_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_Topp142_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_Unknown1_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaRmin_Muon_Unknown2_Jet_notau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose1_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose1_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose1_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose2_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose2_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledloose2_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium1_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium1_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium1_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium2_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium2_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Mass_Muon_Topscaledmedium2_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_DphiMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_MTMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_ettrkcone, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_is_cosmic, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_is_in_hole, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose1_is_medium, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_DphiMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_MTMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_ettrkcone, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_is_cosmic, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_is_in_hole, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledloose2_is_medium, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_DphiMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_MTMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_ettrkcone, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_is_cosmic, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_is_in_hole, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_is_loose, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium1_is_medium, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_DphiMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_MTMet_tau, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_ettrkcone, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_is_cosmic, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_is_in_hole, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_is_loose, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.Muon_Topscaledmedium2_is_medium, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose1_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose1_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose1_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose2_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose2_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPloose2_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPtight1_Tau1, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPtight1_Tau2, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPtight1_Tau3, nbytes=-1
Error in TTree::Fill: Failed filling branch:summary.DeltaPhi_Muon_NPtight2_Tau1, nbytes=-1
terminate called after throwing an instance of 'std::bad_alloc’
what(): St9bad_alloc
Abort (core dumped)

Does someone have an idea of the particular lines that may have caused the bug ?
Thank you very much for your help!

Jerome

Hi,

You need to make sure the cloned TTree is associated with your output file(s):v_roofile.at(i)->cd(); v_tree_out.push_back((it->second)->CloneTree());From your code snippet it looks like your ‘summary’ TTree is empty (no branches) and thus the lines[code]for (Int_t k=0;k<nentries; k++) {

   it->second->GetEntry(k); 
 (v_tree_out.at(i))->Fill(); 

}[/code]are all but useless (and besides, the content of the TTree was already copied during ‘CloneTree’.

Cheers,
Philippe.

Thank you Philippe for your answer.
However, I added the line “v_rootFile.at(i)->cd();” as you told me to, but I always have the same error. Rootfiles are created and the first one seem to be filled (his size ramp to 324 mb) but the error still occurs. When I try to open the rootfile in a TBrowser, I got the message :

Warning in TFile::Init: file Data1_tree_presel_etamu2.root probably not closed, trying to recover
Warning in TFile::Init: no keys recovered, file has been made a Zombie

Jerome

Hi,

You are probably also missing ‘v_rootFile.at(i)->Write();’ at the end …

Cheers,
Philippe.

Ok ! It works fine now…
Thank you Philippe :slight_smile:

Jerome