1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
// Date : 30/05/2005
// Author : N.Almeida (LIP)
// falta fazer o update dos block sizes
#ifndef DCCTBEVENTBLOCK_HH
#define DCCTBEVENTBLOCK_HH
#include "DCCBlockPrototype.h"
class DCCTBTowerBlock;
class DCCTBDataParser;
class DCCTBTrailerBlock;
class DCCTBTCCBlock;
class DCCTBSRPBlock;
class DCCTBEventBlock : public DCCTBBlockPrototype {
public:
DCCTBEventBlock(DCCTBDataParser* parser,
const uint32_t* buffer,
uint32_t numbBytes,
uint32_t wordsToEnd,
uint32_t wordBufferOffset = 0,
uint32_t wordEventOffset = 0);
~DCCTBEventBlock() override;
void dataCheck();
std::vector<DCCTBTowerBlock*>& towerBlocks();
std::vector<DCCTBTCCBlock*>& tccBlocks();
DCCTBSRPBlock* srpBlock();
DCCTBTrailerBlock* trailerBlock();
std::vector<DCCTBTowerBlock*> towerBlocksById(uint32_t towerId);
using DCCTBBlockPrototype::compare;
std::pair<bool, std::string> compare(DCCTBEventBlock*);
bool eventHasErrors();
std::string eventErrorString();
void displayEvent(std::ostream& os = std::cout);
protected:
enum dccFields {
PHYSICTRIGGER = 1,
CALIBRATIONTRIGGER = 2,
TESTTRIGGER = 3,
TECHNICALTRIGGER = 4,
CH_ENABLED = 0,
CH_DISABLED = 1,
CH_TIMEOUT = 2,
CH_SUPPRESS = 7,
SR_NREAD = 0,
BOE = 0x5,
DCCERROR_EMPTYEVENT = 0x1,
TOWERHEADER_SIZE = 8,
TRAILER_SIZE = 8
};
std::vector<DCCTBTowerBlock*> towerBlocks_;
std::vector<DCCTBTCCBlock*> tccBlocks_;
DCCTBTrailerBlock* dccTrailerBlock_;
DCCTBSRPBlock* srpBlock_;
uint32_t wordBufferOffset_;
bool emptyEvent;
};
inline std::vector<DCCTBTowerBlock*>& DCCTBEventBlock::towerBlocks() { return towerBlocks_; }
inline std::vector<DCCTBTCCBlock*>& DCCTBEventBlock::tccBlocks() { return tccBlocks_; }
inline DCCTBSRPBlock* DCCTBEventBlock::srpBlock() { return srpBlock_; }
inline DCCTBTrailerBlock* DCCTBEventBlock::trailerBlock() { return dccTrailerBlock_; }
#endif
|