Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

RCWNTupleCnv.h

Go to the documentation of this file.
00001 #ifndef ROOTHISTCNV_RCWNTCNV_H
00002 #define ROOTHISTCNV_RCWNTCNV_H 1
00003 
00004 
00005 // Include files
00006 #include "GaudiKernel/Converter.h"
00007 #include "RNTupleCnv.h"
00008 #include <string>
00009 
00010 #include "TROOT.h"
00011 #include "TFile.h"
00012 #include "TTree.h"
00013 
00014 
00015 // Forward declarations
00016 template <class TYPE> class CnvFactory;
00017 
00018 
00019 
00020 //------------------------------------------------------------------------------
00021 //
00022 // ClassName:   RootHistCnv::RCWNTupleCnv
00023 //  
00024 // Description: Converter of 1-dimensional histogram with fixed binning
00025 //              into ROOT format
00026 //
00027 // Author:      Charles Leggett
00028 //
00029 //------------------------------------------------------------------------------
00030 
00031 
00032 namespace RootHistCnv {
00033 
00034   class RCWNTupleCnv : public RNTupleCnv {
00035 
00036     friend class CnvFactory<RCWNTupleCnv>;
00037 
00038   public:
00040     static const CLID& classID()    {
00041       return CLID_ColumnWiseTuple;
00042     }
00043 
00044   protected:
00046     RCWNTupleCnv( ISvcLocator* svc ) : RNTupleCnv(svc, classID())    {
00047     }
00049     virtual ~RCWNTupleCnv()   {
00050     }
00052     virtual StatusCode load( long id, INTuple*& refpObject );
00054     virtual StatusCode book(long idh, const std::string& location, INTuple* pObject);
00056     virtual StatusCode declare(long idh, INTuple* pObject);
00058     virtual StatusCode writeData(long idh, INTuple* pObject);
00060     virtual StatusCode readData(long idh, INTuple* pObject, long ievt);
00061     template <class T> 
00062     size_t saveItem(char* target, const T* src, size_t len)   {
00063       long* tar = (long*)target;
00064       for ( size_t i = 0; i < len; i++ )   {
00065         *(tar++) = long( *(src++));
00066       }
00067       return sizeof(long)*len;
00068     }
00069     template <class T> 
00070     size_t loadItem(char* src, T* tar, size_t len)   {
00071       long* s = (long*)src;
00072       for ( size_t i = 0; i < len; i++ )   {
00073         *(tar++) = T( *(s++));
00074       }
00075       return sizeof(long)*len;
00076     }
00077     size_t loadItem(char* src, bool* tar, size_t len)   {
00078       long* s = (long*)src;
00079       for ( size_t i = 0; i < len; i++ )   {
00080         *(tar++) = (*(s++)) ? true : false;
00081       }
00082       return sizeof(long)*len;
00083     }
00084     size_t loadItem(char* src, float* target, size_t len)   {
00085       memcpy(target, src, sizeof(float)*len);
00086       return sizeof(float)*len;
00087     }
00088     size_t loadItem(char* src, double* target, size_t len)   {
00089       memcpy(target, src, sizeof(double)*len);
00090       return sizeof(double)*len;
00091     }
00092     size_t loadItem(char* src, long* target, size_t len)   {
00093       memcpy(target, src, sizeof(long)*len);
00094       return sizeof(long)*len;
00095     }
00096     size_t loadItem(char* src, unsigned long* target, size_t len)   {
00097       memcpy(target, src, sizeof(unsigned long)*len);
00098       return sizeof(unsigned long)*len;
00099     }
00100 
00101     size_t saveItem(char* target, float* src, size_t len)   {
00102       memcpy(target, src, sizeof(float)*len);
00103       return sizeof(float)*len;
00104     }
00105     size_t saveItem(char* target, double* src, size_t len)   {
00106       memcpy(target, src, sizeof(double)*len);
00107       return sizeof(double)*len;
00108     }
00109     size_t saveItem(char* target, long* src, size_t len)   {
00110       memcpy(target, src, sizeof(long)*len);
00111       return sizeof(long)*len;
00112     }
00113     size_t saveItem(char* target, unsigned long* src, size_t len)   {
00114       memcpy(target, src, sizeof(unsigned long)*len);
00115       return sizeof(unsigned long)*len;
00116     }
00117 
00118   };
00119 
00120 
00121 }    // namespace RootHistCnv
00122 
00123  
00124 #endif    // ROOTHISTCNV_RCWNTCNV_H

Generated at Wed Nov 21 12:20:49 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000