text: #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");
        }
      }
    }
  }
  