/// \file /// \ingroup tutorial_tree /// /// Copy a subset of a Tree to a new Tree, one branch in a separate file /// /// One branch of the new Tree is written to a separate file /// The input file has been generated by the program in $ROOTSYS/test/Event /// with the command `Event 1000 1 1 1` /// \macro_code /// \author Rene Brun int copytree2(TString suffix = "_skimmed") { TFile *oldfile = new TFile("13tev_h1h2_DM1_40.root"); TTree* fChain = (TTree*)oldfile->Get("Delphes"); // Fixed size dimensions of array or collections stored in the TTree if any. static const Int_t kMaxJet = 99; static const Int_t kMaxMissingET = 1; Int_t Jet_; UInt_t Jet_fUniqueID[kMaxJet]; //[Jet_] UInt_t Jet_fBits[kMaxJet]; //[Jet_] Float_t Jet_PT[kMaxJet]; //[Jet_] Float_t Jet_Eta[kMaxJet]; //[Jet_] Float_t Jet_Phi[kMaxJet]; //[Jet_] Float_t Jet_T[kMaxJet]; //[Jet_] Float_t Jet_Mass[kMaxJet]; //[Jet_] Int_t Jet_size; Int_t MissingET_; UInt_t MissingET_fUniqueID[kMaxMissingET]; //[MissingET_] UInt_t MissingET_fBits[kMaxMissingET]; //[MissingET_] Float_t MissingET_MET[kMaxMissingET]; //[MissingET_] Float_t MissingET_Eta[kMaxMissingET]; //[MissingET_] Float_t MissingET_Phi[kMaxMissingET]; //[MissingET_] Int_t MissingET_size; TBranch *b_Jet_; //! TBranch *b_Jet_fUniqueID; //! TBranch *b_Jet_fBits; //! TBranch *b_Jet_PT; //! TBranch *b_Jet_Eta; //! TBranch *b_Jet_Phi; //! TBranch *b_Jet_T; //! TBranch *b_Jet_Mass; //! TBranch *b_Jet_size; //! TBranch *b_MissingET_; //! TBranch *b_MissingET_fUniqueID; //! TBranch *b_MissingET_fBits; //! TBranch *b_MissingET_MET; //! TBranch *b_MissingET_Eta; //! TBranch *b_MissingET_Phi; //! TBranch *b_MissingET_size; //! fChain->SetBranchAddress("Jet", &Jet_, &b_Jet_); fChain->SetBranchAddress("Jet.fUniqueID", Jet_fUniqueID, &b_Jet_fUniqueID); fChain->SetBranchAddress("Jet.fBits", Jet_fBits, &b_Jet_fBits); fChain->SetBranchAddress("Jet.PT", Jet_PT, &b_Jet_PT); fChain->SetBranchAddress("Jet.Eta", Jet_Eta, &b_Jet_Eta); fChain->SetBranchAddress("Jet.Phi", Jet_Phi, &b_Jet_Phi); fChain->SetBranchAddress("Jet.T", Jet_T, &b_Jet_T); fChain->SetBranchAddress("Jet.Mass", Jet_Mass, &b_Jet_Mass); fChain->SetBranchAddress("Jet_size", &Jet_size, &b_Jet_size); fChain->SetBranchAddress("MissingET", &MissingET_, &b_MissingET_); fChain->SetBranchAddress("MissingET.fUniqueID", MissingET_fUniqueID, &b_MissingET_fUniqueID); fChain->SetBranchAddress("MissingET.fBits", MissingET_fBits, &b_MissingET_fBits); fChain->SetBranchAddress("MissingET.MET", MissingET_MET, &b_MissingET_MET); fChain->SetBranchAddress("MissingET.Eta", MissingET_Eta, &b_MissingET_Eta); fChain->SetBranchAddress("MissingET.Phi", MissingET_Phi, &b_MissingET_Phi); fChain->SetBranchAddress("MissingET_size", &MissingET_size, &b_MissingET_size); if (fChain == 0) { std::cout << "fChain==0"<< std::endl; return -1; } int nEntries = fChain->GetEntries(); std::cout << nEntries << std::endl; fChain->SetBranchStatus("*",0); fChain->SetBranchStatus("Jet",1); fChain->SetBranchStatus("Jet_size",1); fChain->SetBranchStatus("Jet.PT",1); fChain->SetBranchStatus("Jet.Eta",1); fChain->SetBranchStatus("Jet.Phi",1); fChain->SetBranchStatus("Jet.Mass",1); fChain->SetBranchStatus("MissingET",1); fChain->SetBranchStatus("MissingET.MET",1); TString currentFileName = fChain->GetCurrentFile()->GetName(); TString newFileName = currentFileName.ReplaceAll(".root","")+suffix+TString(".root"); TFile *newfile = TFile::Open(newFileName.Data(),"recreate"); TTree *newtree = fChain->CloneTree(0); newtree->CopyEntries(fChain); newfile->Write(); newfile->Close(); return 0; }