LDMX Software
DiscreteInputs.h
1#ifndef DISCRETEINPUTS_H
2#define DISCRETEINPUTS_H
3
4#include <stdint.h>
5#include <stdio.h>
6
7#include <vector>
8
9namespace trigger {
10
11namespace ldmx_int {
12
13struct EcalTP {
14 uint8_t tp;
15 uint32_t tid;
16 // extra data for added convenience
17 uint32_t tp_lin;
18 uint32_t layer;
19 uint32_t module;
20 uint32_t cell;
21
22 bool operator<(const EcalTP &other) const { return tp > other.tp; }
23 void fill(int _tid, int _tp) {
24 tid = _tid;
25 tp = _tp;
26 // derived data, optional
27 layer = 0;
28 module = 0;
29 cell = 0;
30 tp_lin = 0;
31 }
32 void fill(int _tid, int _tp, int _layer, int _module, int _cell,
33 int _tp_lin) {
34 tid = _tid;
35 tp = _tp;
36 layer = _layer;
37 module = _module;
38 cell = _cell;
39 tp_lin = _tp_lin;
40 }
41 void writeToFile(FILE *file) const {
42 fwrite(&tp, sizeof(uint8_t), 1, file);
43 fwrite(&tid, sizeof(uint32_t), 1, file);
44 fwrite(&layer, sizeof(uint32_t), 1, file);
45 fwrite(&module, sizeof(uint32_t), 1, file);
46 fwrite(&cell, sizeof(uint32_t), 1, file);
47 fwrite(&tp_lin, sizeof(uint32_t), 1, file);
48 }
49 void readFromFile(FILE *file) {
50 fread(&tp, sizeof(uint8_t), 1, file);
51 fread(&tid, sizeof(uint32_t), 1, file);
52 fread(&layer, sizeof(uint32_t), 1, file);
53 fread(&module, sizeof(uint32_t), 1, file);
54 fread(&cell, sizeof(uint32_t), 1, file);
55 fread(&tp_lin, sizeof(uint32_t), 1, file);
56 }
57};
58
59template <typename T>
60void writeManyToFile(const std::vector<T> &objs, FILE *file) {
61 uint32_t number = objs.size();
62 fwrite(&number, 4, 1, file);
63 for (uint32_t i = 0; i < number; ++i) objs[i].writeToFile(file);
64}
65
66template <typename T>
67void readManyFromFile(std::vector<T> &objs, FILE *file) {
68 uint32_t number;
69 fread(&number, 4, 1, file);
70 objs.resize(number);
71 for (uint32_t i = 0; i < number; ++i) objs[i].readFromFile(file);
72}
73
74} // namespace ldmx_int
75
76} // namespace trigger
77
78#endif /* DISCRETEINPUTS_H */