00001
00002 #define ROOTHISTCNV_RRWNTUPLECNV_CPP
00003
00004 #define ALLOW_ALL_TYPES
00005
00006
00007 #include "GaudiKernel/CnvFactory.h"
00008 #include "GaudiKernel/MsgStream.h"
00009 #include "GaudiKernel/NTuple.h"
00010
00011 #include "RRWNTupleCnv.h"
00012 #include "TTree.h"
00013
00014
00015
00016 DECLARE_NAMESPACE_CONVERTER_FACTORY(RootHistCnv,RRWNTupleCnv)
00017
00018
00019 StatusCode RootHistCnv::RRWNTupleCnv::book(const std::string& desc,
00020 INTuple* nt,
00021 TTree*& rtree)
00022
00023 {
00024 MsgStream log(msgSvc(), "RRWNTupleCnv");
00025 const INTuple::ItemContainer& itms = nt->items();
00026
00027 rtree = new TTree(desc.c_str(),nt->title().c_str());
00028
00029 for (size_t length = itms.size(), i = 0; i < length; i++ ) {
00030 const char* itm = itms[i]->name().c_str();
00031 std::string tag = itm;
00032 tag += rootVarType( itms[i]->type() );
00033
00034 log << MSG::INFO << "ID " << desc << ": added branch: "
00035 << itm << " / " << tag << endreq;
00036 rtree->Branch(itm,const_cast<void*>(itms[i]->buffer()),tag.c_str());
00037 }
00038 log << MSG::INFO << "Booked TTree with ID:" << desc
00039 << " \"" << nt->title() << "\"" << endreq;
00040 return StatusCode::SUCCESS;
00041 }
00042
00043
00044 StatusCode RootHistCnv::RRWNTupleCnv::writeData(TTree* rtree, INTuple* nt)
00045
00046 {
00047 if ( 0 != rtree ) {
00048
00049 rtree->Fill();
00050
00051 nt->reset();
00052 return StatusCode::SUCCESS;
00053 }
00054 MsgStream log(msgSvc(), "RRWNTupleCnv");
00055 log << MSG::ERROR << "Attempt to write invalid N-tuple.";
00056 if ( nt != 0 ) log << nt->title();
00057 log << endmsg;
00058 return StatusCode::FAILURE;
00059 }
00060
00061
00062 StatusCode RootHistCnv::RRWNTupleCnv::readData(TTree* ,
00063 INTuple* ,
00064 long )
00065
00066 {
00067 return StatusCode::FAILURE;
00068 }
00069
00070
00071 StatusCode RootHistCnv::RRWNTupleCnv::load(TTree* ,
00072 INTuple*& )
00073
00074 {
00075 return StatusCode::FAILURE;
00076 }