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 */