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 uint32_t tid;
15 uint32_t tp; // store linear version
16 // uint8_t tp;
17
18 bool operator<(const EcalTP &other) const { return tp > other.tp; }
19 void fill(int _tid, float _tp) {
20 tid = _tid;
21 tp = _tp;
22 }
23 void writeToFile(FILE *file) const {
24 fwrite(&tid, sizeof(uint32_t), 1, file);
25 fwrite(&tp, sizeof(uint32_t), 1, file);
26 }
27 void readFromFile(FILE *file) {
28 fread(&tid, sizeof(uint32_t), 1, file);
29 fread(&tp, sizeof(uint32_t), 1, file);
30 }
31};
32
33template <typename T>
34void writeManyToFile(const std::vector<T> &objs, FILE *file) {
35 uint32_t number = objs.size();
36 fwrite(&number, 4, 1, file);
37 for (uint32_t i = 0; i < number; ++i) objs[i].writeToFile(file);
38}
39
40template <typename T>
41void readManyFromFile(std::vector<T> &objs, FILE *file) {
42 uint32_t number;
43 fread(&number, 4, 1, file);
44 objs.resize(number);
45 for (uint32_t i = 0; i < number; ++i) objs[i].readFromFile(file);
46}
47
48} // namespace ldmx_int
49
50} // namespace trigger
51
52#endif /* DISCRETEINPUTS_H */