9#include <framework/database/DBImportObjPtr.h>
10#include <trg/grl/dbobjects/TRGGRLConfig.h>
24 const int N_config = 1;
26 const int run[N_config][4] = {
31 std::vector<float> ecltaunn_threshold[N_config] = {
33 -0.6015625, -1.001953125, -0.568359375, -0.939453125, -1.111328125,
34 -0.583984375, -0.708984375, -0.37890625, -0.474609375, -0.591796875
38 unsigned ecltaunn_nMLP[N_config] = {
41 bool ecltaunn_multiplyHidden[N_config] = {
44 std::vector<std::vector<float>> ecltaunn_nHidden[N_config];
46 std::vector<float> eclaunn_nHidden_0 = {64, 64, 64, 64, 64};
47 ecltaunn_nHidden[0].push_back(eclaunn_nHidden_0);
49 std::vector<unsigned> ecltaunn_nOutput[N_config] = {
52 unsigned ecltaunn_n_cdc_sector[N_config] = {
55 unsigned ecltaunn_n_ecl_sector[N_config] = {
58 std::vector<float> ecltaunn_i_cdc_sector[N_config];
59 ecltaunn_i_cdc_sector[0].push_back(0 * 35 * 3);
61 std::vector<float> ecltaunn_i_ecl_sector[N_config];
62 ecltaunn_i_ecl_sector[0].push_back(1 * 6 * 4);
66 const char* weight_files[] = {
74 const char* bias_files[] = {
84 std::vector<std::vector<float>> ecltaunn_weight[N_config];
85 for (
int i = 0; i < N_config; i++) {
86 std::vector<float> all_weights;
87 for (
unsigned j = 0; j < 6; j++) {
88 std::ifstream wfile(weight_files[j]);
89 if (!wfile.is_open()) {
90 std::cout <<
"trg-grl-writedb: cannot open weight file: " << weight_files[j] << std::endl;
93 std::cout <<
"trg-grl-writedb: loading weight file: " << weight_files[j] << std::endl;
96 std::stringstream buffer;
97 buffer << wfile.rdbuf();
98 std::string content = buffer.str();
101 for (
char& c : content) {
102 if (c ==
',') c =
' ';
106 std::stringstream ss(content);
109 while (ss >> element) {
110 all_weights.push_back(element);
113 std::cout <<
" element[" << (count - 1) <<
"] = " << element << std::endl;
116 std::cout <<
" file loaded " << count <<
" elements" << std::endl;
117 std::cout <<
" loaded " << all_weights.size() <<
" total elements so far" << std::endl;
119 ecltaunn_weight[i] = std::vector<std::vector<float>> { all_weights };
120 std::cout <<
"trg-grl-writedb: loaded weights total: " << all_weights.size() <<
" elements" << std::endl;
124 std::vector<std::vector<float>> ecltaunn_bias[N_config];
125 for (
int i = 0; i < N_config; i++) {
126 std::vector<float> all_biases;
127 for (
unsigned j = 0; j < 6; j++) {
128 std::ifstream bfile(bias_files[j]);
129 if (!bfile.is_open()) {
130 std::cout <<
"trg-grl-writedb: cannot open bias file: " << bias_files[j] << std::endl;
133 std::cout <<
"trg-grl-writedb: loading bias file: " << bias_files[j] << std::endl;
136 std::stringstream buffer;
137 buffer << bfile.rdbuf();
138 std::string content = buffer.str();
141 for (
char& c : content) {
142 if (c ==
',') c =
' ';
146 std::stringstream ss(content);
149 while (ss >> element) {
150 all_biases.push_back(element);
153 std::cout <<
" file loaded " << count <<
" elements" << std::endl;
155 ecltaunn_bias[i] = std::vector<std::vector<float>> { all_biases };
156 std::cout <<
"trg-grl-writedb: loaded biases: " << all_biases.size() <<
" elements" << std::endl;
161 std::vector<std::vector<int>> total_bit_bias[N_config] = {
162 {{ 2, 2, 2, 2, 4, 6 }}
164 std::vector<std::vector<int>> int_bit_bias[N_config] {
165 {{ 32, 32, 32, 32, 2, 1 }}
167 std::vector<std::vector<bool>> is_signed_bias[N_config] {
168 {{
false,
false,
false,
false,
true,
true }}
170 std::vector<std::vector<int>> rounding_bias[N_config] {
171 {{ 0, 0, 0, 0, 0, 0 }}
173 std::vector<std::vector<int>> saturation_bias[N_config] {
174 {{ 2, 2, 2, 2, 2, 2 }}
179 std::vector<std::vector<int>> total_bit_accum[N_config] {
180 {{ 18, 17, 15, 13, 17, 19 }}
182 std::vector<std::vector<int>> int_bit_accum[N_config] {
183 {{ 16, 16, 15, 9, 8, 10 }}
185 std::vector<std::vector<bool>> is_signed_accum[N_config] {
186 {{
true,
true,
true,
true,
true,
true }}
188 std::vector<std::vector<int>> rounding_accum[N_config] {
189 {{ 1, 1, 1, 1, 1, 1 }}
191 std::vector<std::vector<int>> saturation_accum[N_config] {
192 {{ 2, 2, 2, 2, 2, 2 }}
196 std::vector<std::vector<int>> total_bit_weight[N_config] = {
197 {{ 9, 7, 6, 6, 10, 7 }}
199 std::vector<std::vector<int>> int_bit_weight[N_config] = {
200 {{ 4, 3, 2, 0, 1, 1 }}
202 std::vector<std::vector<bool>> is_signed_weight[N_config] = {
203 {{
true,
true,
true,
false,
true,
true }}
205 std::vector<std::vector<int>> rounding_weight[N_config] = {
206 {{ 0, 0, 0, 0, 0, 0 }}
208 std::vector<std::vector<int>> saturation_weight[N_config] = {
209 {{ 2, 2, 2, 2, 2, 2 }}
214 std::vector<std::vector<int>> total_bit_relu[N_config] = {
215 {{ 14, 13, 12, 9, 13 }}
217 std::vector<std::vector<int>> int_bit_relu[N_config] = {
218 {{ 14, 13, 12, 8, 7 }}
220 std::vector<std::vector<bool>> is_signed_relu[N_config] = {
221 {{
true,
true,
true,
false,
false }}
223 std::vector<std::vector<int>> rounding_relu[N_config] = {
226 std::vector<std::vector<int>> saturation_relu[N_config] = {
232 std::vector<std::vector<int>> total_bit[N_config] {
233 {{ 16, 16, 15, 10, 14 }}
235 std::vector<std::vector<int>> int_bit[N_config] {
236 {{ 16, 16, 15, 9, 8 }}
238 std::vector<std::vector<bool>> is_signed[N_config] {
239 {{
true,
true,
true,
true,
true }}
241 std::vector<std::vector<int>> rounding[N_config] {
244 std::vector<std::vector<int>> saturation[N_config] {
254 std::vector<std::vector<int>> W_input_2d[N_config];
255 std::vector<std::vector<int>> I_input_2d[N_config];
256 for (
int i = 0; i < N_config; i++) {
260 W_input_2d[i].push_back(std::vector<int> {
261 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 8, 0, 9, 0, 5, 6, 6,
262 0, 0, 0, 7, 0, 8, 7, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 7, 5, 6,
263 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 6, 6, 5, 0, 6, 8,
266 I_input_2d[i].push_back(std::vector<int> {
267 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 13, 0, 13, 0, 10, 11, 11,
268 0, 0, 0, 12, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 13, 10, 10,
269 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 10, 11, 11, 0, 11, 12,
273 W_input_2d[i].push_back(std::vector<int> {
274 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 8, 0, 7, 0, 0, 0, 0, 0, 0,
275 7, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 8, 0, 10, 0,
276 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,
279 I_input_2d[i].push_back(std::vector<int> {
280 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, 0, 0, 0,
281 12, 0, 0, 11, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 13, 0, 13, 0,
282 0, 11, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0,
286 W_input_2d[i].push_back(std::vector<int> {
287 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
289 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,
292 I_input_2d[i].push_back(std::vector<int> {
293 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0,
294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
295 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
299 W_input_2d[i].push_back(std::vector<int> {
300 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
301 9, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
302 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
305 I_input_2d[i].push_back(std::vector<int> {
306 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
307 9, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
308 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
312 W_input_2d[i].push_back(std::vector<int> {
313 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0,
314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
315 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
318 I_input_2d[i].push_back(std::vector<int> {
319 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
321 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
326 std::vector<std::vector<std::vector<int>>> W_input[N_config];
327 std::vector<std::vector<std::vector<int>>> I_input[N_config];
328 for (
int i = 0; i < N_config; i++) {
329 W_input[i].push_back(W_input_2d[i]);
330 I_input[i].push_back(I_input_2d[i]);
332 std::cout <<
" W_input[0].size=" << W_input[0].size() <<
" (should be 1)" << std::endl;
333 if (W_input[0].size() > 0) {
334 std::cout <<
" W_input[0][0].size=" << W_input[0][0].size() <<
" (should be 5 layers)" << std::endl;
335 if (W_input[0][0].size() > 0) {
336 std::cout <<
" W_input[0][0][0].size=" << W_input[0][0][0].size() <<
" (should be 64 neurons)" << std::endl;
347 std::vector<std::vector<std::vector<int>>> W_input_layer[N_config] {
350 { 10, 11, 10, 9, 8, 6, 8, 8, 5, 5, 5, 4, 5, 5, 4, 4, 3, 3, 5, 5, 5, 3, 3, 3 }
355 std::vector<std::vector<std::vector<int>>> I_input_layer[N_config] {
358 { 13, 13, 13, 12, 11, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }
367 for (
int i = 0; i < N_config; i++) {
369 db_grlconfig->set_ecltaunn_threshold(ecltaunn_threshold[i]);
370 db_grlconfig->set_ecltaunn_nMLP(ecltaunn_nMLP[i]);
371 db_grlconfig->set_ecltaunn_multiplyHidden(ecltaunn_multiplyHidden[i]);
372 db_grlconfig->set_ecltaunn_nHidden(ecltaunn_nHidden[i]);
373 db_grlconfig->set_ecltaunn_nOutput(ecltaunn_nOutput[i]);
374 db_grlconfig->set_ecltaunn_n_cdc_sector(ecltaunn_n_cdc_sector[i]);
375 db_grlconfig->set_ecltaunn_n_ecl_sector(ecltaunn_n_ecl_sector[i]);
376 db_grlconfig->set_ecltaunn_i_cdc_sector(ecltaunn_i_cdc_sector[i]);
377 db_grlconfig->set_ecltaunn_i_ecl_sector(ecltaunn_i_ecl_sector[i]);
378 db_grlconfig->set_ecltaunn_weight(ecltaunn_weight[i]);
379 db_grlconfig->set_ecltaunn_bias(ecltaunn_bias[i]);
380 db_grlconfig->set_ecltaunn_total_bit_bias(total_bit_bias[i]);
381 db_grlconfig->set_ecltaunn_int_bit_bias(int_bit_bias[i]);
382 db_grlconfig->set_ecltaunn_is_signed_bias(is_signed_bias[i]);
383 db_grlconfig->set_ecltaunn_rounding_bias(rounding_bias[i]);
384 db_grlconfig->set_ecltaunn_saturation_bias(saturation_bias[i]);
385 db_grlconfig->set_ecltaunn_total_bit_accum(total_bit_accum[i]);
386 db_grlconfig->set_ecltaunn_int_bit_accum(int_bit_accum[i]);
387 db_grlconfig->set_ecltaunn_is_signed_accum(is_signed_accum[i]);
388 db_grlconfig->set_ecltaunn_rounding_accum(rounding_accum[i]);
389 db_grlconfig->set_ecltaunn_saturation_accum(saturation_accum[i]);
390 db_grlconfig->set_ecltaunn_total_bit_weight(total_bit_weight[i]);
391 db_grlconfig->set_ecltaunn_int_bit_weight(int_bit_weight[i]);
392 db_grlconfig->set_ecltaunn_is_signed_weight(is_signed_weight[i]);
393 db_grlconfig->set_ecltaunn_rounding_weight(rounding_weight[i]);
394 db_grlconfig->set_ecltaunn_saturation_weight(saturation_weight[i]);
395 db_grlconfig->set_ecltaunn_total_bit_relu(total_bit_relu[i]);
396 db_grlconfig->set_ecltaunn_int_bit_relu(int_bit_relu[i]);
397 db_grlconfig->set_ecltaunn_is_signed_relu(is_signed_relu[i]);
398 db_grlconfig->set_ecltaunn_rounding_relu(rounding_relu[i]);
399 db_grlconfig->set_ecltaunn_saturation_relu(saturation_relu[i]);
400 db_grlconfig->set_ecltaunn_total_bit(total_bit[i]);
401 db_grlconfig->set_ecltaunn_int_bit(int_bit[i]);
402 db_grlconfig->set_ecltaunn_is_signed(is_signed[i]);
403 db_grlconfig->set_ecltaunn_rounding(rounding[i]);
404 db_grlconfig->set_ecltaunn_saturation(saturation[i]);
405 db_grlconfig->set_ecltaunn_W_input(W_input[i]);
406 db_grlconfig->set_ecltaunn_I_input(I_input[i]);
407 db_grlconfig->set_ecltaunn_W_input_layer(W_input_layer[i][0]);
408 db_grlconfig->set_ecltaunn_I_input_layer(I_input_layer[i][0]);
412 }
else if (ONLINE == 1) {
413 for (
int i = N_config - 1; i < N_config; i++) {
415 db_grlconfig->set_ecltaunn_threshold(ecltaunn_threshold[i]);
416 db_grlconfig->set_ecltaunn_nMLP(ecltaunn_nMLP[i]);
417 db_grlconfig->set_ecltaunn_multiplyHidden(ecltaunn_multiplyHidden[i]);
418 db_grlconfig->set_ecltaunn_nHidden(ecltaunn_nHidden[i]);
419 db_grlconfig->set_ecltaunn_nOutput(ecltaunn_nOutput[i]);
420 db_grlconfig->set_ecltaunn_n_cdc_sector(ecltaunn_n_cdc_sector[i]);
421 db_grlconfig->set_ecltaunn_n_ecl_sector(ecltaunn_n_ecl_sector[i]);
422 db_grlconfig->set_ecltaunn_i_cdc_sector(ecltaunn_i_cdc_sector[i]);
423 db_grlconfig->set_ecltaunn_i_ecl_sector(ecltaunn_i_ecl_sector[i]);
424 db_grlconfig->set_ecltaunn_weight(ecltaunn_weight[i]);
425 db_grlconfig->set_ecltaunn_bias(ecltaunn_bias[i]);
426 db_grlconfig->set_ecltaunn_total_bit_bias(total_bit_bias[i]);
427 db_grlconfig->set_ecltaunn_int_bit_bias(int_bit_bias[i]);
428 db_grlconfig->set_ecltaunn_is_signed_bias(is_signed_bias[i]);
429 db_grlconfig->set_ecltaunn_rounding_bias(rounding_bias[i]);
430 db_grlconfig->set_ecltaunn_saturation_bias(saturation_bias[i]);
431 db_grlconfig->set_ecltaunn_total_bit_accum(total_bit_accum[i]);
432 db_grlconfig->set_ecltaunn_int_bit_accum(int_bit_accum[i]);
433 db_grlconfig->set_ecltaunn_is_signed_accum(is_signed_accum[i]);
434 db_grlconfig->set_ecltaunn_rounding_accum(rounding_accum[i]);
435 db_grlconfig->set_ecltaunn_saturation_accum(saturation_accum[i]);
436 db_grlconfig->set_ecltaunn_total_bit_weight(total_bit_weight[i]);
437 db_grlconfig->set_ecltaunn_int_bit_weight(int_bit_weight[i]);
438 db_grlconfig->set_ecltaunn_is_signed_weight(is_signed_weight[i]);
439 db_grlconfig->set_ecltaunn_rounding_weight(rounding_weight[i]);
440 db_grlconfig->set_ecltaunn_saturation_weight(saturation_weight[i]);
441 db_grlconfig->set_ecltaunn_total_bit_relu(total_bit_relu[i]);
442 db_grlconfig->set_ecltaunn_int_bit_relu(int_bit_relu[i]);
443 db_grlconfig->set_ecltaunn_is_signed_relu(is_signed_relu[i]);
444 db_grlconfig->set_ecltaunn_rounding_relu(rounding_relu[i]);
445 db_grlconfig->set_ecltaunn_saturation_relu(saturation_relu[i]);
446 db_grlconfig->set_ecltaunn_total_bit(total_bit[i]);
447 db_grlconfig->set_ecltaunn_int_bit(int_bit[i]);
448 db_grlconfig->set_ecltaunn_is_signed(is_signed[i]);
449 db_grlconfig->set_ecltaunn_rounding(rounding[i]);
450 db_grlconfig->set_ecltaunn_saturation(saturation[i]);
451 db_grlconfig->set_ecltaunn_W_input(W_input[i]);
452 db_grlconfig->set_ecltaunn_I_input(I_input[i]);
453 db_grlconfig->set_ecltaunn_W_input_layer(W_input_layer[i][0]);
454 db_grlconfig->set_ecltaunn_I_input_layer(I_input_layer[i][0]);
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.