Belle II Software development
trg-grl-writedb.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <framework/database/DBImportObjPtr.h>
10#include <trg/grl/dbobjects/TRGGRLConfig.h>
11#include <fstream>
12
13using namespace Belle2;
14
15#define ONLINE 0
16//#define ONLINE 1
17
18void setgrlconfig()
19{
20
21 const int N_config = 1;
22
23 const int run[N_config][4] = { //itnitial exp, initial run, end exp, end run
24 {0, 0, -1, -1} // 0
25 };
26
27 float ecltaunn_threshold[N_config] = {
28 -1.5
29 };
30 unsigned ecltaunn_nMLP[N_config] = {
31 1
32 };
33 bool ecltaunn_multiplyHidden[N_config] = {
34 false
35 };
36 std::vector<std::vector<float>> ecltaunn_nHidden[N_config];
37 std::vector<float> eclaunn_nHidden_0 = {24, 24, 24};
38 ecltaunn_nHidden[0].push_back(eclaunn_nHidden_0);
39 unsigned ecltaunn_n_cdc_sector[N_config] = {
40 0
41 };
42 unsigned ecltaunn_n_ecl_sector[N_config] = {
43 1
44 };
45 std::vector<float> ecltaunn_i_cdc_sector[N_config];
46 ecltaunn_i_cdc_sector[0].push_back(0 * 35 * 3);
47
48 std::vector<float> ecltaunn_i_ecl_sector[N_config]; //only 24 is supported for now
49 ecltaunn_i_ecl_sector[0].push_back(1 * 6 * 4);
50
51 char wfilename[N_config][10][1000] = {{{
52 "/group/belle/users/zhaoxy/hls1112/neuralGRL/hls4ml_Latency/firmware/weights/all_weights.txt"
53 }
54 }
55 };
56 std::vector<std::vector<float>> ecltaunn_weight[N_config];
57 for (int i = 0; i < N_config; i++) {
58 for (unsigned j = 0; j < ecltaunn_nMLP[i]; j++) {
59 std::ifstream wfile(wfilename[i][j]);
60 if (!wfile.is_open()) {
61 return;
62 } else {
63 float element;
64 std::vector<float> ecltaunn_weight_temp;
65 while (wfile >> element) {
66 ecltaunn_weight_temp.push_back(element);
67 }
68 ecltaunn_weight[i].push_back(ecltaunn_weight_temp);
69 }
70 }
71 }
72
73 char bfilename[N_config][10][1000] = {{{
74 "/group/belle/users/zhaoxy/hls1112/neuralGRL/hls4ml_Latency/firmware/weights/all_bias.txt"
75 }
76 }
77 };
78 std::vector<std::vector<float>> ecltaunn_bias[N_config];
79 for (int i = 0; i < N_config; i++) {
80 for (unsigned j = 0; j < ecltaunn_nMLP[i]; j++) {
81 std::ifstream bfile(bfilename[i][j]);
82 if (!bfile.is_open()) {
83 return;
84 } else {
85 float element;
86 std::vector<float> ecltaunn_bias_temp;
87 while (bfile >> element) {
88 ecltaunn_bias_temp.push_back(element);
89 }
90 ecltaunn_bias[i].push_back(ecltaunn_bias_temp);
91 }
92 }
93 }
94
95 std::vector<std::vector<int>> total_bit_bias[N_config] = {
96 {{ 5, 7, 6, 2 }} // total bits
97 };
98 std::vector<std::vector<int>> int_bit_bias[N_config] {
99 {{ 5, 5, 3, 32 }} // integer bits
100 };
101 std::vector<std::vector<bool>> is_signed_bias[N_config] {
102 {{ true, true, true, false }}
103 };
104 std::vector<std::vector<int>> rounding_bias[N_config] {
105 {{ 0, 0, 0, 0 }} // 0 = truncate
106 };
107 std::vector<std::vector<int>> saturation_bias[N_config] {
108 {{ 2, 2, 2, 2 }} // 2 = saturate
109 };
110
112 std::vector<std::vector<int>> total_bit_accum[N_config] {
113 {{29, 29, 24, 25 }}
114 };
115 std::vector<std::vector<int>> int_bit_accum[N_config] {
116 {{15, 14, 12, 9 }}
117 };
118 std::vector<std::vector<bool>> is_signed_accum[N_config] {
119 {{ true, true, true, true }}
120 };
121 std::vector<std::vector<int>> rounding_accum[N_config] {
122 {{ 0, 0, 0, 0 }}
123 };
124 std::vector<std::vector<int>> saturation_accum[N_config] {
125 {{ 2, 2, 2, 2 }}
126 };
128 std::vector<std::vector<int>> total_bit_weight[N_config] = {
129 {{ 17, 17, 13, 12 }}
130 };
131
132 std::vector<std::vector<int>> int_bit_weight[N_config] = {
133 {{ 3, 5, 3, 1 }}
134 };
135
136 std::vector<std::vector<bool>> is_signed_weight[N_config] = {
137 {{ true, true, true, true }} //
138 };
139
140 std::vector<std::vector<int>> rounding_weight[N_config] = {
141 {{ 0, 0, 0, 0 }} // 0 = truncate
142 };
143
144 std::vector<std::vector<int>> saturation_weight[N_config] = {
145 {{ 2, 2, 2, 2 }} // 2 = saturate
146 };
147
149 std::vector<std::vector<int>> total_bit_relu[N_config] = {
150 {{ 15, 15, 15 }} //
151 };
152
153 std::vector<std::vector<int>> int_bit_relu[N_config] = {
154 {{ 10, 9, 8 }} //
155 };
156
157 std::vector<std::vector<bool>> is_signed_relu[N_config] = {
158 {{ false, false, false }} //
159 };
160
161 std::vector<std::vector<int>> rounding_relu[N_config] = {
162 {{ 0, 0, 0 }} // 0 = truncate
163 };
164
165 std::vector<std::vector<int>> saturation_relu[N_config] = {
166 {{ 2, 2, 2 }} // 2 = saturate
167 };
168
170 std::vector<std::vector<int>> total_bit[N_config] {
171 {{20, 20, 19}}
172 };
173 std::vector<std::vector<int>> int_bit[N_config] {
174 {{15, 14, 12}}
175 };
176 std::vector<std::vector<bool>> is_signed[N_config] {
177 {{true, true, true}}
178 };
179 std::vector<std::vector<int>> rounding[N_config] {
180 {{0, 0, 0}}
181 };
182 std::vector<std::vector<int>> saturation[N_config] {
183 {{2, 2, 2}}
184 };
185
186
187 std::vector<std::vector<std::vector<int>>> W_input[N_config] {
188 {
189 {
190 { 9, 10, 9, 8, 12, 11, 9, 7, 8, 9, 9, 9, 11, 9, 11, 13, 11, 12, 11, 12, 12, 11, 13, 10 }
191 ,
192 { 6, 0, 9, 10, 9, 7, 9, 10, 9, 9, 0, 9, 7, 12, 8, 9, 9, 8, 0, 10, 7, 8, 8, 11 }
193 ,
194 { 11, 8, 0, 8, 11, 12, 11, 11, 12, 9, 12, 11, 10, 10, 12, 12, 0, 12, 12, 9, 12, 10, 8, 11 }
195
196 }
197 }
198 };
199 std::vector<std::vector<std::vector<int>>> I_input[N_config] {
200 {
201 {
202 { 7, 9, 7, 7, 8, 8, 7, 6, 6, 7, 8, 8, 9, 7, 8, 9, 10, 10, 9, 9, 9, 9, 10, 8 }
203 ,
204 { 5, 0, 7, 7, 6, 6, 7, 8, 7, 6, 0, 6, 6, 9, 6, 6, 6, 6, 0, 7, 6, 6, 5, 6 }
205 ,
206 { 6, 7, 0, 5, 7, 7, 7, 6, 7, 6, 7, 6, 6, 4, 7, 7, 0, 7, 8, 6, 8, 6, 6, 6 }
207
208 }
209 }
210 };
211
212
213 DBImportObjPtr<TRGGRLConfig> db_grlconfig;
214 db_grlconfig.construct();
215 if (ONLINE == 0) {
216 for (int i = 0; i < N_config; i++) {
217 IntervalOfValidity iov(run[i][0], run[i][1], run[i][2], run[i][3]);
218 db_grlconfig->set_ecltaunn_threshold(ecltaunn_threshold[i]);
219 db_grlconfig->set_ecltaunn_nMLP(ecltaunn_nMLP[i]);
220 db_grlconfig->set_ecltaunn_multiplyHidden(ecltaunn_multiplyHidden[i]);
221 db_grlconfig->set_ecltaunn_nHidden(ecltaunn_nHidden[i]);
222 db_grlconfig->set_ecltaunn_n_cdc_sector(ecltaunn_n_cdc_sector[i]);
223 db_grlconfig->set_ecltaunn_n_ecl_sector(ecltaunn_n_ecl_sector[i]);
224 db_grlconfig->set_ecltaunn_i_cdc_sector(ecltaunn_i_cdc_sector[i]);
225 db_grlconfig->set_ecltaunn_i_ecl_sector(ecltaunn_i_ecl_sector[i]);
226 db_grlconfig->set_ecltaunn_weight(ecltaunn_weight[i]);
227 db_grlconfig->set_ecltaunn_bias(ecltaunn_bias[i]);
228 db_grlconfig->set_ecltaunn_total_bit_bias(total_bit_bias[i]);
229 db_grlconfig->set_ecltaunn_int_bit_bias(int_bit_bias[i]);
230 db_grlconfig->set_ecltaunn_is_signed_bias(is_signed_bias[i]);
231 db_grlconfig->set_ecltaunn_rounding_bias(rounding_bias[i]);
232 db_grlconfig->set_ecltaunn_saturation_bias(saturation_bias[i]);
233 db_grlconfig->set_ecltaunn_total_bit_accum(total_bit_accum[i]);
234 db_grlconfig->set_ecltaunn_int_bit_accum(int_bit_accum[i]);
235 db_grlconfig->set_ecltaunn_is_signed_accum(is_signed_accum[i]);
236 db_grlconfig->set_ecltaunn_rounding_accum(rounding_accum[i]);
237 db_grlconfig->set_ecltaunn_saturation_accum(saturation_accum[i]);
238 db_grlconfig->set_ecltaunn_total_bit_weight(total_bit_weight[i]);
239 db_grlconfig->set_ecltaunn_int_bit_weight(int_bit_weight[i]);
240 db_grlconfig->set_ecltaunn_is_signed_weight(is_signed_weight[i]);
241 db_grlconfig->set_ecltaunn_rounding_weight(rounding_weight[i]);
242 db_grlconfig->set_ecltaunn_saturation_weight(saturation_weight[i]);
243 db_grlconfig->set_ecltaunn_total_bit_relu(total_bit_relu[i]);
244 db_grlconfig->set_ecltaunn_int_bit_relu(int_bit_relu[i]);
245 db_grlconfig->set_ecltaunn_is_signed_relu(is_signed_relu[i]);
246 db_grlconfig->set_ecltaunn_rounding_relu(rounding_relu[i]);
247 db_grlconfig->set_ecltaunn_saturation_relu(saturation_relu[i]);
248 db_grlconfig->set_ecltaunn_total_bit(total_bit[i]);
249 db_grlconfig->set_ecltaunn_int_bit(int_bit[i]);
250 db_grlconfig->set_ecltaunn_is_signed(is_signed[i]);
251 db_grlconfig->set_ecltaunn_rounding(rounding[i]);
252 db_grlconfig->set_ecltaunn_saturation(saturation[i]);
253 db_grlconfig->set_ecltaunn_W_input(W_input[i]);
254 db_grlconfig->set_ecltaunn_I_input(I_input[i]);
255
256 db_grlconfig.import(iov);
257 }
258 } else if (ONLINE == 1) {
259 for (int i = N_config - 1; i < N_config; i++) {
260 IntervalOfValidity iov(0, 0, -1, -1);
261 db_grlconfig->set_ecltaunn_threshold(ecltaunn_threshold[i]);
262 db_grlconfig->set_ecltaunn_nMLP(ecltaunn_nMLP[i]);
263 db_grlconfig->set_ecltaunn_multiplyHidden(ecltaunn_multiplyHidden[i]);
264 db_grlconfig->set_ecltaunn_nHidden(ecltaunn_nHidden[i]);
265 db_grlconfig->set_ecltaunn_n_cdc_sector(ecltaunn_n_cdc_sector[i]);
266 db_grlconfig->set_ecltaunn_n_ecl_sector(ecltaunn_n_ecl_sector[i]);
267 db_grlconfig->set_ecltaunn_i_cdc_sector(ecltaunn_i_cdc_sector[i]);
268 db_grlconfig->set_ecltaunn_i_ecl_sector(ecltaunn_i_ecl_sector[i]);
269 db_grlconfig->set_ecltaunn_weight(ecltaunn_weight[i]);
270 db_grlconfig->set_ecltaunn_bias(ecltaunn_bias[i]);
271 db_grlconfig->set_ecltaunn_total_bit_bias(total_bit_bias[i]);
272 db_grlconfig->set_ecltaunn_int_bit_bias(int_bit_bias[i]);
273 db_grlconfig->set_ecltaunn_is_signed_bias(is_signed_bias[i]);
274 db_grlconfig->set_ecltaunn_rounding_bias(rounding_bias[i]);
275 db_grlconfig->set_ecltaunn_saturation_bias(saturation_bias[i]);
276 db_grlconfig->set_ecltaunn_total_bit_accum(total_bit_accum[i]);
277 db_grlconfig->set_ecltaunn_int_bit_accum(int_bit_accum[i]);
278 db_grlconfig->set_ecltaunn_is_signed_accum(is_signed_accum[i]);
279 db_grlconfig->set_ecltaunn_rounding_accum(rounding_accum[i]);
280 db_grlconfig->set_ecltaunn_saturation_accum(saturation_accum[i]);
281 db_grlconfig->set_ecltaunn_total_bit_weight(total_bit_weight[i]);
282 db_grlconfig->set_ecltaunn_int_bit_weight(int_bit_weight[i]);
283 db_grlconfig->set_ecltaunn_is_signed_weight(is_signed_weight[i]);
284 db_grlconfig->set_ecltaunn_rounding_weight(rounding_weight[i]);
285 db_grlconfig->set_ecltaunn_saturation_weight(saturation_weight[i]);
286 db_grlconfig->set_ecltaunn_total_bit_relu(total_bit_relu[i]);
287 db_grlconfig->set_ecltaunn_int_bit_relu(int_bit_relu[i]);
288 db_grlconfig->set_ecltaunn_is_signed_relu(is_signed_relu[i]);
289 db_grlconfig->set_ecltaunn_rounding_relu(rounding_relu[i]);
290 db_grlconfig->set_ecltaunn_saturation_relu(saturation_relu[i]);
291 db_grlconfig->set_ecltaunn_total_bit(total_bit[i]);
292 db_grlconfig->set_ecltaunn_int_bit(int_bit[i]);
293 db_grlconfig->set_ecltaunn_is_signed(is_signed[i]);
294 db_grlconfig->set_ecltaunn_rounding(rounding[i]);
295 db_grlconfig->set_ecltaunn_saturation(saturation[i]);
296 db_grlconfig->set_ecltaunn_W_input(W_input[i]);
297 db_grlconfig->set_ecltaunn_I_input(I_input[i]);
298
299 db_grlconfig.import(iov);
300 }
301 }
302}
303
304int main()
305{
306
307 setgrlconfig();
308
309}
310
311
bool import(const IntervalOfValidity &iov)
Import the object to database.
Class for importing a single object to the database.
void construct(Args &&... params)
Construct an object of type T in this DBImportObjPtr using the provided constructor arguments.
A class that describes the interval of experiments/runs for which an object in the database is valid.
Abstract base class for different kinds of events.