00001 #ifndef ROOTHISTCNV_RCWNTCNV_H
00002 #define ROOTHISTCNV_RCWNTCNV_H 1
00003
00004
00005
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
00016 template <class TYPE> class CnvFactory;
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
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 }
00122
00123
00124 #endif // ROOTHISTCNV_RCWNTCNV_H