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
79
80
|
#include "DCCSRPBlock.h"
#include "DCCDataParser.h"
#include "DCCDataMapper.h"
#include "DCCEventBlock.h"
DCCTBSRPBlock::DCCTBSRPBlock(DCCTBEventBlock* dccBlock,
DCCTBDataParser* parser,
const uint32_t* buffer,
uint32_t numbBytes,
uint32_t wordsToEnd,
uint32_t wordEventOffset)
: DCCTBBlockPrototype(parser, "SRP", buffer, numbBytes, wordsToEnd, wordEventOffset), dccBlock_(dccBlock) {
//Reset error counters ///////
errors_["SRP::HEADER"] = 0;
errors_["SRP::BLOCKID"] = 0;
//////////////////////////////
// Get data fields from the mapper and retrieve data /////////////////////////////////////
if (parser_->numbSRF() == 68) {
mapperFields_ = parser_->mapper()->srp68Fields();
} else if (parser_->numbSRF() == 32) {
mapperFields_ = parser_->mapper()->srp32Fields();
} else if (parser_->numbSRF() == 16) {
mapperFields_ = parser_->mapper()->srp16Fields();
}
parseData();
//////////////////////////////////////////////////////////////////////////////////////////
// check internal data ////////////
if (parser_->debug()) {
dataCheck();
}
///////////////////////////////////
}
void DCCTBSRPBlock::dataCheck() {
std::string checkErrors("");
std::pair<bool, std::string> res;
res = checkDataField("BX", BXMASK & (dccBlock_->getDataField("BX")));
if (!res.first) {
checkErrors += res.second;
(errors_["SRP::HEADER"])++;
}
res = checkDataField("LV1", L1MASK & (dccBlock_->getDataField("LV1")));
if (!res.first) {
checkErrors += res.second;
(errors_["SRP::HEADER"])++;
}
res = checkDataField("SRP ID", parser_->srpId());
if (!res.first) {
checkErrors += res.second;
(errors_["SRP::HEADER"])++;
}
if (!checkErrors.empty()) {
errorString_ += "\n ======================================================================\n";
errorString_ += std::string(" ") + name_ + std::string(" data fields checks errors : ");
errorString_ += checkErrors;
errorString_ += "\n ======================================================================";
blockError_ = true;
}
}
void DCCTBSRPBlock::increment(uint32_t numb) {
if (!parser_->debug()) {
DCCTBBlockPrototype::increment(numb);
} else {
for (uint32_t counter = 0; counter < numb; counter++, dataP_++, wordCounter_++) {
uint32_t blockID = (*dataP_) >> BPOSITION_BLOCKID;
if (blockID != BLOCKID) {
(errors_["SRP::BLOCKID"])++;
//errorString_ += std::string("\n") + parser_->index(nunb)+(" blockId has value ") + parser_->getDecString(blockID);
//errorString += std::string(", while ")+parser_->getDecString(BLOCKID)+std::string(" is expected");
}
}
}
}
|