File indexing completed on 2024-04-06 12:10:37
0001 #include "DCCXtalBlock.h"
0002 #include "DCCDataParser.h"
0003 #include "DCCDataMapper.h"
0004
0005 DCCTBXtalBlock::DCCTBXtalBlock(DCCTBDataParser *parser,
0006 const uint32_t *buffer,
0007 uint32_t numbBytes,
0008 uint32_t wordsToEnd,
0009 uint32_t wordEventOffset,
0010 uint32_t expectedXtalID,
0011 uint32_t expectedStripID)
0012 : DCCTBBlockPrototype(parser, "XTAL", buffer, numbBytes, wordsToEnd, wordEventOffset),
0013 expectedXtalID_(expectedXtalID),
0014 expectedStripID_(expectedStripID) {
0015
0016 errors_["XTAL::HEADER"] = 0;
0017 errors_["XTAL::BLOCKID"] = 0;
0018
0019
0020
0021 mapperFields_ = parser_->mapper()->xtalFields();
0022 parseData();
0023
0024
0025
0026 if (parser_->debug()) {
0027 dataCheck();
0028 }
0029
0030 }
0031
0032 void DCCTBXtalBlock::dataCheck() {
0033 std::string checkErrors("");
0034
0035 std::pair<bool, std::string> res;
0036
0037 if (expectedXtalID_ != 0) {
0038 res = checkDataField("XTAL ID", expectedXtalID_);
0039 if (!res.first) {
0040 checkErrors += res.second;
0041 (errors_["XTAL::HEADER"])++;
0042 }
0043 }
0044 if (expectedStripID_ != 0) {
0045 res = checkDataField("STRIP ID", expectedStripID_);
0046 if (!res.first) {
0047 checkErrors += res.second;
0048 (errors_["XTAL::HEADER"])++;
0049 }
0050 }
0051 if (!checkErrors.empty()) {
0052 errorString_ += "\n ======================================================================\n";
0053 errorString_ += std::string(" ") + name_ + std::string(" data fields checks errors : ");
0054 errorString_ += checkErrors;
0055 errorString_ += "\n ======================================================================";
0056 blockError_ = true;
0057 }
0058 }
0059
0060 void DCCTBXtalBlock::increment(uint32_t numb) {
0061 if (!parser_->debug()) {
0062 DCCTBBlockPrototype::increment(numb);
0063 } else {
0064 for (uint32_t counter = 0; counter < numb; counter++, dataP_++, wordCounter_++) {
0065 uint32_t blockID = (*dataP_) >> BPOSITION_BLOCKID;
0066 if (blockID != BLOCKID) {
0067 (errors_["XTAL::BLOCKID"])++;
0068
0069
0070 }
0071 }
0072 }
0073 }
0074
0075 int DCCTBXtalBlock::xtalID() {
0076 int result = -1;
0077
0078 for (std::set<DCCTBDataField *, DCCTBDataFieldComparator>::iterator it = mapperFields_->begin();
0079 it != mapperFields_->end();
0080 it++) {
0081 if ((*it)->name() == "XTAL ID")
0082 result = getDataField((*it)->name());
0083 }
0084
0085 return result;
0086 }
0087
0088 int DCCTBXtalBlock::stripID() {
0089 int result = -1;
0090
0091 for (std::set<DCCTBDataField *, DCCTBDataFieldComparator>::iterator it = mapperFields_->begin();
0092 it != mapperFields_->end();
0093 it++) {
0094 if ((*it)->name() == "STRIP ID")
0095 result = getDataField((*it)->name());
0096 }
0097
0098 return result;
0099 }
0100
0101 std::vector<int> DCCTBXtalBlock::xtalDataSamples() {
0102 std::vector<int> data;
0103
0104 for (unsigned int i = 1; i <= parser_->numbXtalSamples(); i++) {
0105 std::string name = std::string("ADC#") + parser_->getDecString(i);
0106
0107 data.push_back(getDataField(name));
0108 }
0109
0110 return data;
0111 }