/** \class ExRootTreeWriter * * Class handling output ROOT tree * * $Date: 2008-11-04 10:32:27 $ * $Revision: 1.1 $ * * * \author S. Ovyn - UCL, Louvain-la-Neuve * */ #include "Utilities/ExRootAnalysis/interface/ExRootTreeWriter.h" #include "Utilities/ExRootAnalysis/interface/ExRootTreeBranch.h" #include "TROOT.h" #include "TFile.h" #include "TTree.h" #include "TClonesArray.h" #include using namespace std; ExRootTreeWriter::ExRootTreeWriter(const TString &fileName, const TString &treeName) { TDirectory *dir = gDirectory; fNewFile = TFile::Open(fileName,"UPDATE"); fNewFile->cd(); fNewTree = new TTree(treeName, "Analysis tree"); dir->cd(); if(!fNewTree) { cout << "** ERROR: cannot create tree" << endl; return; } fNewTree->SetAutoSave(10000000); // autosave when 10 MB written } //------------------------------------------------------------------------------ ExRootTreeWriter::~ExRootTreeWriter() { set::iterator it_set; for(it_set = fBranches.begin(); it_set != fBranches.end(); ++it_set) { delete (*it_set); } if(fNewTree) delete fNewTree; if(fNewFile) delete fNewFile; } //------------------------------------------------------------------------------ ExRootTreeBranch *ExRootTreeWriter::NewBranch(const TString &name, TClass *cl) { ExRootTreeBranch *branch = new ExRootTreeBranch(name, cl, fNewTree); fBranches.insert(branch); return branch; } //------------------------------------------------------------------------------ void ExRootTreeWriter::Fill() { if(fNewTree) fNewTree->Fill(); } //------------------------------------------------------------------------------ void ExRootTreeWriter::Write() { fNewFile = fNewTree ? fNewTree->GetCurrentFile() : 0; if(fNewFile) fNewFile->Write(); } //------------------------------------------------------------------------------ void ExRootTreeWriter::Clear() { set::iterator it_set; for(it_set = fBranches.begin(); it_set != fBranches.end(); ++it_set) { (*it_set)->Clear(); } } //------------------------------------------------------------------------------