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