#include <RootOutputStream.h>
Inheritance diagram for RootOutputStream:
Public Member Functions | |
RootOutputStream (void *addr, const std::string &classname, const std::string &treepath="", const std::string &branchname="") | |
Create a root output stream with the address of a pointer to an object. | |
virtual | ~RootOutputStream () |
std::string | path () |
RootIOStream interface. | |
bool | write () |
Write current state of addr to disk. | |
bool | close () |
Write tree to file and close file. | |
bool | newFile (const std::string &filename, const std::string &treepath="", const std::string &branchname="") |
Start a new output file. | |
int | entries () |
Return the number of entries in the output stream. | |
int | fileEntries () |
Return the number of entries in the current output file. | |
RootIOBaseObject * | obj () |
Return the pointer that m_addr points to assuming it points to a RootIOBaseObject. | |
Protected Attributes | |
void * | m_addr |
Private Member Functions | |
bool | handle_user_data () |
Private Attributes | |
TFile * | m_file |
TTree * | m_tree |
TDirectory * | m_dir |
std::string | m_classname |
std::string | m_treepath |
std::string | m_branchname |
int | m_entries |
Dyb::MsgStreamMember | log |
This allows writing data out to file. The output stream can be broken up in to multiple files.
bv@bnl.gov Sun Jun 29 10:13:17 2008
Definition at line 26 of file RootOutputStream.h.
RootOutputStream::RootOutputStream | ( | void * | addr, | |
const std::string & | classname, | |||
const std::string & | treepath = "" , |
|||
const std::string & | branchname = "" | |||
) |
Create a root output stream with the address of a pointer to an object.
Optionally specify the treepath and branchname
RootOutputStream::~RootOutputStream | ( | ) | [virtual] |
string RootOutputStream::path | ( | ) | [virtual] |
RootIOStream interface.
Implements RootIOStream.
Definition at line 44 of file RootOutputStream.cc.
00045 { 00046 return m_treepath; 00047 }
bool RootOutputStream::write | ( | ) |
Write current state of addr to disk.
Definition at line 51 of file RootOutputStream.cc.
00052 { 00053 if (!m_tree) { 00054 log << MSG::ERROR << "write(): no tree" 00055 << endreq; 00056 return false; 00057 } 00058 00059 int nbytes = m_tree->Fill(); 00060 log << MSG::DEBUG << "Wrote " << nbytes 00061 << " bytes to entry " << m_entries 00062 << " of tree " << m_treepath 00063 << endreq; 00064 00065 // Debugging #445. 00066 //TObject* dir = m_file->Get("Event/Sim"); 00067 //if (dir) dir->ls(); 00068 00069 ++m_entries; 00070 return nbytes > 0; 00071 }
bool RootOutputStream::close | ( | ) |
Write tree to file and close file.
Definition at line 83 of file RootOutputStream.cc.
00084 { 00085 if (!m_file) return true; 00086 if (!m_tree) return true; 00087 00088 log << MSG::DEBUG << "Closing file " << m_file->GetName() << endreq; 00089 00090 m_dir->cd(); 00091 m_tree->Write(NULL,TObject::kOverwrite); // for kOverwrite see #445 00092 RootOutputFileManager::get().close_file(m_file); 00093 m_file = 0; 00094 m_tree = 0; 00095 m_dir = 0; 00096 return true; 00097 }
bool RootOutputStream::newFile | ( | const std::string & | filename, | |
const std::string & | treepath = "" , |
|||
const std::string & | branchname = "" | |||
) |
Start a new output file.
int RootOutputStream::entries | ( | ) |
Return the number of entries in the output stream.
Definition at line 73 of file RootOutputStream.cc.
00074 { 00075 return m_entries; 00076 }
int RootOutputStream::fileEntries | ( | ) |
Return the number of entries in the current output file.
Definition at line 78 of file RootOutputStream.cc.
00079 { 00080 return m_tree->GetEntries(); 00081 }
bool RootOutputStream::handle_user_data | ( | ) | [private] |
Definition at line 160 of file RootOutputStream.cc.
00161 { 00162 RootIOUserData ud; 00163 RootIOUserData::ProxyCollection& proxies = ud.output(m_treepath); 00164 RootIOUserData::ProxyCollection::iterator it, done = proxies.end(); 00165 00166 log << MSG::DEBUG << "newFile(): handling user data with " 00167 << proxies.size() << " proxies at treepath=" << m_treepath 00168 << " (one of " << ud.outputMap().size() << ")" 00169 << endreq; 00170 00171 bool ret = true; 00172 00173 for (it = proxies.begin(); it != done; ++it) { 00174 RootIOUserDataProxy* udp = it->second; 00175 bool ok = udp->branch(m_tree); 00176 if (ok) { 00177 log << MSG::DEBUG << "newFile(): initiated user data type: " 00178 << udp->cppType() << " name: " << udp->varName() << endreq; 00179 } 00180 else { 00181 log << MSG::ERROR << "newFile(): failed to initiate user data type: " 00182 << udp->cppType() << " name: " << udp->varName() << endreq; 00183 ret = false; 00184 } 00185 } 00186 return ret; 00187 }
RootIOBaseObject * RootIOStream::obj | ( | ) | [inherited] |
Return the pointer that m_addr points to assuming it points to a RootIOBaseObject.
Definition at line 13 of file RootIOStream.cc.
00014 { 00015 return *(RootIOBaseObject**)m_addr; 00016 }
TFile* RootOutputStream::m_file [private] |
Definition at line 28 of file RootOutputStream.h.
TTree* RootOutputStream::m_tree [private] |
Definition at line 29 of file RootOutputStream.h.
TDirectory* RootOutputStream::m_dir [private] |
Definition at line 30 of file RootOutputStream.h.
std::string RootOutputStream::m_classname [private] |
Definition at line 32 of file RootOutputStream.h.
std::string RootOutputStream::m_treepath [private] |
Definition at line 32 of file RootOutputStream.h.
std::string RootOutputStream::m_branchname [private] |
Definition at line 32 of file RootOutputStream.h.
int RootOutputStream::m_entries [private] |
Definition at line 34 of file RootOutputStream.h.
Dyb::MsgStreamMember RootOutputStream::log [private] |
Definition at line 36 of file RootOutputStream.h.
void* RootIOStream::m_addr [protected, inherited] |
Definition at line 10 of file RootIOStream.h.