| The Gaudi Framework v28r2-patches (bc4ad17a)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

NTupleItems.h
Go to the documentation of this file.
1 #ifndef GAUDI_NTUPLESVC_NTUPLEITEMS_H
2 #define GAUDI_NTUPLESVC_NTUPLEITEMS_H 1
3
4 // The converter understands all items
5 #define ALLOW_ALL_TYPES
6
7 // STL include files
8 #include <vector>
9
10 // Framework include files
11 #include "GaudiKernel/System.h"
12 #include "NTuple.h"
24 // Forward declarations
25 class IDataProviderSvc;
26 class IConversionSvc;
27
28 namespace NTuple {
29 // Local forward declarations
30 template <class TYP> class DataItem;
31 template <class TYP> class _DataImp;
32 template <class TYP> class _ItemImp;
33 template <class TYP> class _ArrayImp;
34 template <class TYP> class _MatrixImp;
35
38 template <class TYP> class _DataImp : virtual public _Data<TYP> {
40 _DataImp(const _DataImp&) = delete;
41 protected:
42 typedef const std::string& CSTR;
43 typedef const std::type_info& CTYPE;
45 long m_length;
47 INTuple* m_tuple;
49 std::string m_name;
51 std::string m_index;
53 mutable INTupleItem* m_indexItem = nullptr;
55 DataTypeInfo::Type m_type;
57 TYP m_def;
59 Range<TYP> m_range;
61 const std::type_info& m_info;
62 public:
64 typedef Range<TYP> ItemRange;
66 _DataImp(INTuple* tup,std::string name,const std::type_info& info,std::string index,long len,TYP low,TYP high,TYP def)
67 : m_length(len), m_tuple(tup), m_name(std::move(name)), m_index(std::move(index)),
68 m_def(std::move(def)), m_range(std::move(low), std::move(high)), m_info(info)
69 {
70 m_type = typeid(TYP) == typeid(void*) ? DataTypeInfo::POINTER : DataTypeInfo::ID(info);
71 this->m_buffer = new TYP[m_length];
72 reset();
73 }
75 ~_DataImp() override {
76 delete [] this->m_buffer;
77 }
79 std::string typeName() const override {
80 return System::typeinfoName( this->typeID() );
81 }
83 void reset() override {
84 std::fill_n(this->m_buffer, m_length, m_def );
85 }
87 long filled() const override {
88 int len = 1;
89 int nd = ndim();
90 if ( m_length > 1 ) {
91 for ( int l = 0; l < nd-1; l++ ) {
92 len *= dim(l);
93 }
94 if ( indexItem() ) {
95 long *ll = (long*)m_indexItem->buffer();
96 len *= *ll;
97 }
98 else if ( nd > 0 ) {
99 len *= dim(nd-1);
100 }
101 }
102 return len;
103 }
105 INTupleItem* indexItem() override {
106 if ( !m_indexItem ) m_indexItem = m_tuple->find(m_index);
107 return m_indexItem;
108 }
110 const INTupleItem* indexItem() const override {
111 if ( !m_indexItem ) m_indexItem = m_tuple->find(m_index);
112 return m_indexItem;
113 }
115 const std::type_info& typeID() const override { return m_info;}
117 long size() const override { return m_length*sizeof(TYP); }
119 void release() override { delete this; }
121 bool hasIndex() const override { return m_index.length()>0; }
123 const std::string& index() const override { return m_index; }
125 const std::string& name() const override { return m_name; }
127 long type() const override { return m_type; }
129 void setType (long t) override { m_type=DataTypeInfo::Type(t); }
131 void setDefault(const TYP val) override { m_def = val; }
133 const ItemRange& range() const override { return m_range; }
135 long length() const override { return m_length; }
137 const void* buffer() const override { return this->m_buffer; }
139 virtual void* buffer() { return this->m_buffer; }
141 long ndim() const override { return 0; }
143 long dim(long i) const override { return (i==0) ? 1 : 0; }
145 INTuple* tuple() override { return m_tuple; }
146 };
147
150 template <class TYP> class _ItemImp : virtual public _DataImp<TYP>,
151 virtual public _Item<TYP> {
152
153 public:
155 typedef Range<TYP> ItemRange;
157 _ItemImp(INTuple* tup, const std::string& name, const std::type_info& info, TYP min, TYP max, TYP def)
158 : _DataImp<TYP>(tup, name, info, "", 1, min, max, def) { }
160 ~_ItemImp() override = default;
162 //virtual const std::type_info& typeID() const { return typeid(NTuple::_Item<TYP>); }
164 void setDefault(const TYP val) override { this->m_def = val; }
166 const ItemRange& range() const override { return this->m_range; }
168 long size() const override { return this->m_length*sizeof(TYP); }
169 };
170
173 template <class TYP> class _ArrayImp : virtual public _DataImp<TYP>,
174 virtual public _Array<TYP> {
175 public:
177 typedef Range<TYP> ItemRange;
179 _ArrayImp(INTuple* tup,const std::string& name,const std::type_info& typ,const std::string& index,long len,TYP min,TYP max,TYP def)
180 : _DataImp<TYP>(tup, name, typ, index, len, min, max, def) { }
182 ~_ArrayImp() override = default;
184 //virtual const std::type_info& typeID() const { return typeid(NTuple::_Array<TYP>); }
186 void setDefault(const TYP val) override { this->m_def = val; }
188 const ItemRange& range() const override { return this->m_range; }
190 long size() const override { return this->m_length*sizeof(TYP); }
192 long ndim() const override { return 1; }
194 long dim(long i) const override {
195 return (i!=0 || this->hasIndex()) ? 0 : this->m_length;
196 }
197 };
198
201 template <class TYP> class _MatrixImp : virtual public _DataImp<TYP>,
202 virtual public _Matrix<TYP> {
203 public:
205 typedef Range<TYP> ItemRange;
207 _MatrixImp(INTuple* tup,const std::string& name,const std::type_info& typ,const std::string& index,
208 long ncol,long nrow,TYP min,TYP max,TYP def)
209 : _DataImp<TYP>(tup, name, typ, index, nrow*ncol, min, max, def) {
210 this->m_rows = nrow;
211 }
213 ~_MatrixImp() override = default;
215 //virtual const std::type_info& typeID() const { return typeid(NTuple::_Matrix<TYP>);}
217 void setDefault(const TYP val) override { this->m_def = val; }
219 const ItemRange& range() const override { return this->m_range; }
221 long size() const override { return this->m_length*sizeof(TYP); }
223 long ndim() const override { return 2; }
225 long dim(long i) const override {
226 return (this->hasIndex()) ?
227 ((i==0) ?
228 this->m_rows : this->m_length/this->m_rows) : ((i==1) ? this->m_length/this->m_rows : this->m_rows);
229 }
230 };
231 } // end name space NTuple
232 #endif // GAUDI_NTUPLESVC_NTUPLEITEMS_H
NTuple::_ItemImp::range
const ItemRange & range() const override
Access the range if specified.
Definition: NTupleItems.h:166
NTuple::_DataImp::index
const std::string & index() const override
Access the index _Column.
Definition: NTupleItems.h:123
System.h
NTuple::_DataImp::_DataImp
_DataImp(const _DataImp &)=delete
Inhibit Copy Constructor.
NTuple::_DataImp::~_DataImp
~_DataImp() override
Standard destructor.
Definition: NTupleItems.h:75
DataTypeInfo::POINTER
Definition: DataTypeInfo.h:28
NTuple::_DataImp::filled
long filled() const override
Number of items filled.
Definition: NTupleItems.h:87
IConversionSvc
Definition: IConversionSvc.h:37
NTuple::_ArrayImp::_ArrayImp
_ArrayImp(INTuple *tup, const std::string &name, const std::type_info &typ, const std::string &index, long len, TYP min, TYP max, TYP def)
Standard Constructor.
Definition: NTupleItems.h:179
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
NTuple::_MatrixImp::ItemRange
Range< TYP > ItemRange
Set type definition to make life more easy easy.
Definition: NTupleItems.h:205
NTuple::_Matrix
Abstract class describing a matrix column in a N tuple.
Definition: NTuple.h:40
DataTypeInfo::ID
static Type ID(const bool)
Access to type information: bool.
Definition: DataTypeInfo.h:32
NTuple.h
NTuple::_Item
Abstract class describing a column in a N tuple.
Definition: NTuple.h:38
NTuple::_MatrixImp::range
const ItemRange & range() const override
Access the range if specified.
Definition: NTupleItems.h:219
NTuple::_MatrixImp
Concrete class discribing a matrix column in a N tuple.
Definition: NTupleItems.h:34
NTuple::_DataImp::m_type
DataTypeInfo::Type m_type
_Column type
Definition: NTupleItems.h:55
NTuple::_DataImp::indexItem
INTupleItem * indexItem() override
Pointer to index column (if present, 0 else)
Definition: NTupleItems.h:105
std
STL namespace.
NTuple::_DataImp::m_def
TYP m_def
Buffer with default value.
Definition: NTupleItems.h:57
NTuple::_DataImp::m_range
Range< TYP > m_range
Check that values are within a certain range while filling.
Definition: NTupleItems.h:59
NTuple::_MatrixImp::_MatrixImp
_MatrixImp(INTuple *tup, const std::string &name, const std::type_info &typ, const std::string &index, long ncol, long nrow, TYP min, TYP max, TYP def)
Standard Constructor.
Definition: NTupleItems.h:207
NTuple::_DataImp::CSTR
const std::string & CSTR
Definition: NTupleItems.h:42
NTuple::_DataImp::name
const std::string & name() const override
Access _Column name.
Definition: NTupleItems.h:125
NTuple::_DataImp::_DataImp
_DataImp(INTuple *tup, std::string name, const std::type_info &info, std::string index, long len, TYP low, TYP high, TYP def)
Standard Constructor.
Definition: NTupleItems.h:66
NTuple::_DataImp::typeName
std::string typeName() const override
Get proper type name.
Definition: NTupleItems.h:79
IDataProviderSvc
Data provider interface definition.
Definition: IDataProviderSvc.h:45
NTuple::_DataImp::buffer
virtual void * buffer()
Access data buffer.
Definition: NTupleItems.h:139
NTuple
NTuple name space.
Definition: INTupleSvc.h:10
NTuple::_ArrayImp::ItemRange
Range< TYP > ItemRange
Set type definition to make life more easy easy.
Definition: NTupleItems.h:177
std::type_info
std::string
STL class.
NTuple::_DataImp::length
long length() const override
Access the buffer length.
Definition: NTupleItems.h:135
INTuple
NTuple interface class definition.
Definition: INTuple.h:79
NTuple::_DataImp::typeID
const std::type_info & typeID() const override
Compiler type ID.
Definition: NTupleItems.h:115
NTuple::_DataImp::m_index
std::string m_index
Check that values are within a certain range while filling.
Definition: NTupleItems.h:51
INTupleItem
NTuple interface class definition.
Definition: INTuple.h:26
NTuple::_DataImp::reset
void reset() override
Reset to default.
Definition: NTupleItems.h:83
NTuple::_MatrixImp::size
long size() const override
Size of entire object.
Definition: NTupleItems.h:221
NTuple::_DataImp::dim
long dim(long i) const override
Access individual dimensions.
Definition: NTupleItems.h:143
NTuple::_ArrayImp::dim
long dim(long i) const override
Access individual dimensions.
Definition: NTupleItems.h:194
NTuple::_DataImp::hasIndex
bool hasIndex() const override
Is the tuple have an index column?
Definition: NTupleItems.h:121
NTuple::_ArrayImp::range
const ItemRange & range() const override
Access the range if specified.
Definition: NTupleItems.h:188
NTuple::_DataImp::setDefault
void setDefault(const TYP val) override
Set default value.
Definition: NTupleItems.h:131
NTuple::_MatrixImp::setDefault
void setDefault(const TYP val) override
Compiler type ID.
Definition: NTupleItems.h:217
NTuple::_ArrayImp
Concrete class discribing a column-array in a N tuple.
Definition: NTupleItems.h:33
NTuple::_DataImp::type
long type() const override
TYP information of the item.
Definition: NTupleItems.h:127
DataTypeInfo::Type
Type
Definition: DataTypeInfo.h:22
NTuple::_DataImp::range
const ItemRange & range() const override
Access the range if specified.
Definition: NTupleItems.h:133
NTuple::_DataImp::ndim
long ndim() const override
Dimension.
Definition: NTupleItems.h:141
NTuple::_DataImp::ItemRange
Range< TYP > ItemRange
Set type definition to make life more easy easy.
Definition: NTupleItems.h:64
NTuple::_Data
Abstract class describing basic data in an Ntuple.
Definition: NTuple.h:37
NTuple::_DataImp::release
void release() override
Destruct object.
Definition: NTupleItems.h:119
NTuple::_ItemImp::ItemRange
Range< TYP > ItemRange
Set type definition to make life more easy easy.
Definition: NTupleItems.h:155
NTuple::_DataImp::buffer
const void * buffer() const override
Access data buffer (CONST)
Definition: NTupleItems.h:137
NTuple::_ArrayImp::ndim
long ndim() const override
Dimension.
Definition: NTupleItems.h:192
NTuple::_DataImp::m_length
long m_length
Entire buffer length.
Definition: NTupleItems.h:45
gaudirun.l
dictionary l
Definition: gaudirun.py:421
INTupleItem::buffer
virtual const void * buffer() const =0
Access data buffer (CONST)
NTuple::_DataImp::m_tuple
INTuple * m_tuple
Pointer to N tuple.
Definition: NTupleItems.h:47
std::string::length
T length(T...args)
NTuple::_ArrayImp::size
long size() const override
Size of entire object.
Definition: NTupleItems.h:190
NTuple::_ItemImp::size
long size() const override
Size of entire object.
Definition: NTupleItems.h:168
NTuple::_ItemImp
Concrete class discribing a column in a N tuple.
Definition: NTupleItems.h:32
NTuple::_DataImp::m_info
const std::type_info & m_info
Item type information.
Definition: NTupleItems.h:61
NTuple::DataItem
Definition: NTupleItems.h:30
std::fill_n
T fill_n(T...args)
NTuple::Range
Class defining a range.
Definition: NTuple.h:36
NTuple::_DataImp
Concrete class discribing basic data items in an N tuple.
Definition: NTupleItems.h:31
NTuple::_Data::m_buffer
TYP * m_buffer
Pointer to data buffer.
Definition: NTuple.h:114
NTuple::_DataImp::m_name
std::string m_name
_Column name
Definition: NTupleItems.h:49
NTuple::_DataImp::indexItem
const INTupleItem * indexItem() const override
Pointer to index column (if present, 0 else) (CONST)
Definition: NTupleItems.h:110
NTuple::_DataImp::tuple
INTuple * tuple() override
Access to hosting ntuple.
Definition: NTupleItems.h:145
INTuple::find
virtual const INTupleItem * find(const std::string &name) const =0
Find an item row of the Ntuple (CONST)
NTuple::_ArrayImp::setDefault
void setDefault(const TYP val) override
Compiler type ID.
Definition: NTupleItems.h:186
NTuple::_DataImp::setType
void setType(long t) override
Set the properties of the _Column.
Definition: NTupleItems.h:129
NTuple::_DataImp::size
long size() const override
Size of entire object.
Definition: NTupleItems.h:117
NTuple::_MatrixImp::ndim
long ndim() const override
Dimension.
Definition: NTupleItems.h:223
NTuple::_ItemImp::_ItemImp
_ItemImp(INTuple *tup, const std::string &name, const std::type_info &info, TYP min, TYP max, TYP def)
Standard Constructor.
Definition: NTupleItems.h:157
NTuple::_MatrixImp::dim
long dim(long i) const override
Access individual dimensions.
Definition: NTupleItems.h:225
NTuple::_DataImp::m_indexItem
INTupleItem * m_indexItem
Pointer to index item.
Definition: NTupleItems.h:53
NTuple::_ItemImp::setDefault
void setDefault(const TYP val) override
Compiler type ID.
Definition: NTupleItems.h:164
NTuple::_DataImp::CTYPE
const std::type_info & CTYPE
Definition: NTupleItems.h:43
NTuple::_Array
Abstract class describing a column-array in a N tuple.
Definition: NTuple.h:39