clas12root
Loading...
Searching...
No Matches
ntuple_writer.h
Go to the documentation of this file.
1#pragma once
2
3#include <hipo4/writer.h>
4#include <hipo4/bank.h>
5
6#include <vector>
7#include <string>
8
9namespace hipo {
10
11 using std::string;
12
13 using schema_uptr = std::unique_ptr<hipo::schema>;
14 using schema_uptrs = std::vector<schema_uptr >;
15 using bank_uptr = std::unique_ptr<hipo::bank>;
16 using bank_uptrs = std::vector<bank_uptr >;
17
18 using data_addrs = std::vector<void* >;
19
20 using put_func = void (*)(hipo::bank*,void *,int, int);
21 using put_funcs=std::vector<hipo::put_func>;
22 using addrs_to_func = std::pair< hipo::put_func, void* >;
23 using addrs_to_func_uptr = std::unique_ptr<hipo::addrs_to_func>;
24 //using data_addrs_to_func = std::vector<addrs_to_func_uptr>; //root V6.20 DOES NOT LIKE THIS
25 using data_addrs_to_func = std::vector<std::unique_ptr<std::pair< void (*)(hipo::bank*,void *,int, int), void* >>>;
26
27 using int_uptr = std::unique_ptr<int32_t>;
28 using short_uptr = std::unique_ptr<int16_t>;
29 using byte_uptr = std::unique_ptr<int8_t>;
30 using long_uptr = std::unique_ptr<int64_t>;
31 using float_uptr = std::unique_ptr<float>;
32 using double_uptr = std::unique_ptr<double>;
33
34
36
37 public:
38
39 ntuple_writer()=default;
40 ntuple_writer(string filename);
41
42 virtual ~ntuple_writer()=default;
43
44
45 void bank(string bankName,string schemaStr, int group=100); //add a bank
46 void linkItemFunc(string bankName, string itemName, void* addr);
47
48
49 int32_t& intItem(string bankName, string itemName);
50 int16_t& shortItem(string bankName, string itemName);
51 int8_t& byteItem(string bankName, string itemName);
52 int64_t& longItem(string bankName, string itemName);
53 float& floatItem(string bankName, string itemName);
54 double& doubleItem(string bankName, string itemName);
55
56 void fill();
57 void clear(){
58 _event.reset();
59 }
60 void initBank(int index,int length){
61 _banks[index]->setRows(length);
62 }
63 void copyRow(int index);
64 void fillRows();
65
66 void open(){_writer.open(_filename.data());}
67 void close(){_writer.close();}
68
69 private :
70 writer _writer;
71
72 schema_uptrs _schemas;
73 bank_uptrs _banks;
74
75 hipo::event _event;
76
77 // std::vector<data_addrs> _itemLinks;//!
78 std::vector<data_addrs_to_func> _itemLinksAndPuts;
79
80 put_funcs _putters{6}; //6 types allowed in schema, see typeToPos
81
82 std::vector<std::vector<int_uptr > > _itemInts;
83 std::vector<std::vector<short_uptr > > _itemShorts;
84 std::vector<std::vector<byte_uptr > > _itemBytes;
85 std::vector<std::vector<long_uptr > > _itemLongs;
86 std::vector<std::vector<float_uptr > > _itemFloats;
87 std::vector<std::vector<double_uptr > > _itemDoubles;
88
89 uint _bankNumber{0}; //unique number associated with each bank
90
91 string _filename;
92 std::map<string, uint> _schemaID;
93
94 //convert hipo shecma type to position : int ,short,byte ,long, float, dou
95 const std::map<int,int> _typeToPos{{3,0},{2,1},{1,2},{8,3},{4,4},{5,5}};
96 };
97}
98//needed to create dictionary in v6.20
99//#pragma link C++ class hipo::data_addrs_to_func;
100//#pragma link C++ class hipo::addrs_to_func_uptr;
101// #pragma link C++ class hipo::addrs_to_func;
102// #pragma link C++ class hipo::put_funcs;
103//#pragma link C++ class hipo::put_func;
104
105#pragma hipo::std::unique_ptr<pair<void(*)(hipo::bank*,void*,int,int),void*>;
void fillRows()
Definition ntuple_writer.cpp:180
int8_t & byteItem(string bankName, string itemName)
Definition ntuple_writer.cpp:77
float & floatItem(string bankName, string itemName)
Definition ntuple_writer.cpp:97
void linkItemFunc(string bankName, string itemName, void *addr)
Definition ntuple_writer.cpp:124
void clear()
Definition ntuple_writer.h:57
void open()
Definition ntuple_writer.h:66
double & doubleItem(string bankName, string itemName)
Definition ntuple_writer.cpp:107
void close()
Definition ntuple_writer.h:67
int64_t & longItem(string bankName, string itemName)
Definition ntuple_writer.cpp:87
void copyRow(int index)
Definition ntuple_writer.cpp:159
virtual ~ntuple_writer()=default
int16_t & shortItem(string bankName, string itemName)
Definition ntuple_writer.cpp:67
ntuple_writer()=default
void fill()
Definition ntuple_writer.cpp:135
void bank(string bankName, string schemaStr, int group=100)
Definition ntuple_writer.cpp:33
int32_t & intItem(string bankName, string itemName)
Definition ntuple_writer.cpp:57
void initBank(int index, int length)
Definition ntuple_writer.h:60
Definition ntuple_reader.cpp:4
std::unique_ptr< int64_t > long_uptr
Definition ntuple_writer.h:30
std::unique_ptr< int16_t > short_uptr
Definition ntuple_writer.h:28
std::vector< bank_uptr > bank_uptrs
Definition ntuple_writer.h:16
std::unique_ptr< hipo::schema > schema_uptr
Definition ntuple_writer.h:13
std::unique_ptr< double > double_uptr
Definition ntuple_writer.h:32
std::pair< hipo::put_func, void * > addrs_to_func
Definition ntuple_writer.h:22
std::vector< hipo::put_func > put_funcs
Definition ntuple_writer.h:21
std::unique_ptr< float > float_uptr
Definition ntuple_writer.h:31
std::unique_ptr< hipo::bank > bank_uptr
Definition ntuple_writer.h:15
std::vector< std::unique_ptr< std::pair< void(*)(hipo::bank *, void *, int, int), void * > > > data_addrs_to_func
Definition ntuple_writer.h:25
std::vector< schema_uptr > schema_uptrs
Definition ntuple_writer.h:14
std::unique_ptr< int8_t > byte_uptr
Definition ntuple_writer.h:29
std::unique_ptr< hipo::addrs_to_func > addrs_to_func_uptr
Definition ntuple_writer.h:23
void(*)(hipo::bank *, void *, int, int) put_func
Definition ntuple_writer.h:20
std::vector< void * > data_addrs
Definition ntuple_writer.h:18
std::unique_ptr< int32_t > int_uptr
Definition ntuple_writer.h:27