#include <DCCTowerBlock.h>
Public Member Functions | |
DCCTBTowerBlock (DCCTBEventBlock *dccBlock, DCCTBDataParser *parser, uint32_t *buffer, uint32_t numbBytes, uint32_t wordsToEnd, uint32_t wordEventOffset, uint32_t expectedTowerID) | |
void | parseXtalData () |
int | towerID () |
std::vector< DCCTBXtalBlock * > & | xtalBlocks () |
std::vector< DCCTBXtalBlock * > | xtalBlocksById (uint32_t stripId, uint32_t xtalId) |
~DCCTBTowerBlock () | |
Protected Types | |
enum | towerFields { BXMASK = 0xFFF, L1MASK = 0xFFF } |
Protected Member Functions | |
void | dataCheck () |
Protected Attributes | |
DCCTBEventBlock * | dccBlock_ |
uint32_t | expectedTowerID_ |
std::vector< DCCTBXtalBlock * > | xtalBlocks_ |
Definition at line 21 of file DCCTowerBlock.h.
enum DCCTBTowerBlock::towerFields [protected] |
Definition at line 48 of file DCCTowerBlock.h.
DCCTBTowerBlock::DCCTBTowerBlock | ( | DCCTBEventBlock * | dccBlock, |
DCCTBDataParser * | parser, | ||
uint32_t * | buffer, | ||
uint32_t | numbBytes, | ||
uint32_t | wordsToEnd, | ||
uint32_t | wordEventOffset, | ||
uint32_t | expectedTowerID | ||
) |
Definition at line 11 of file DCCTowerBlock.cc.
References DCCTBBlockPrototype::errors_, DCCTBDataParser::mapper(), DCCTBBlockPrototype::mapperFields_, DCCTBBlockPrototype::parseData(), DCCTBBlockPrototype::parser_, and DCCTBDataMapper::towerFields().
: DCCTBBlockPrototype(parser,"TOWERHEADER", buffer, numbBytes,wordsToEnd, wordEventOffset ) , dccBlock_(dccBlock), expectedTowerID_(expectedTowerID) { //Reset error counters /////////// errors_["FE::HEADER"] = 0; errors_["FE::TT/SC ID"] = 0; errors_["FE::BLOCK LENGTH"] = 0; // Get data fields from the mapper and retrieve data ///////////////////////////////////// mapperFields_ = parser_->mapper()->towerFields(); parseData(); }
DCCTBTowerBlock::~DCCTBTowerBlock | ( | ) |
Definition at line 118 of file DCCTowerBlock.cc.
References xtalBlocks_.
{ std::vector<DCCTBXtalBlock *>::iterator it; for(it=xtalBlocks_.begin();it!=xtalBlocks_.end();it++){ delete (*it);} xtalBlocks_.clear(); }
void DCCTBTowerBlock::dataCheck | ( | ) | [protected] |
Definition at line 126 of file DCCTowerBlock.cc.
References DCCTBBlockPrototype::blockError_, DCCTBBlockPrototype::checkDataField(), dccBlock_, DCCTBBlockPrototype::errors_, DCCTBBlockPrototype::errorString_, expectedTowerID_, DCCTBBlockPrototype::getDataField(), DCCTBDataParser::getDecString(), L1MASK, DCCTBBlockPrototype::name_, and DCCTBBlockPrototype::parser_.
Referenced by parseXtalData().
{ std::string checkErrors(""); std::pair <bool,std::string> res; // For TB we don-t check Bx //res = checkDataField("BX", BXMASK & (dccBlock_->getDataField("BX"))); //if(!res.first){ checkErrors += res.second; (errors_["FE::HEADER"])++; } // mod to account for ECAL counters starting from 0 in the front end N. Almeida res = checkDataField("LV1", L1MASK & (dccBlock_->getDataField("LV1") -1) ); if(!res.first){ checkErrors += res.second; (errors_["FE::HEADER"])++; } if(expectedTowerID_ != 0){ res = checkDataField("TT/SC ID",expectedTowerID_); if(!res.first){ checkErrors += res.second; (errors_["FE::HEADER"])++; } } if( checkErrors !="" ){ std::string myTowerId; errorString_ +="\n ======================================================================\n"; errorString_ += std::string(" ") + name_ + std::string("( ID = ")+parser_->getDecString((uint32_t)(expectedTowerID_))+std::string(" ) errors : ") ; errorString_ += checkErrors ; errorString_ += "\n ======================================================================"; blockError_ = true; } }
void DCCTBTowerBlock::parseXtalData | ( | ) |
Definition at line 39 of file DCCTowerBlock.cc.
References DCCTBBlockPrototype::blockError_, DCCTBBlockPrototype::blockSize_, dataCheck(), DCCTBBlockPrototype::dataP_, dccBlock_, DCCTBDataParser::debug(), DCCTBBlockPrototype::errors_, DCCTBBlockPrototype::errorString_, DCCTBBlockPrototype::getDataField(), DCCTBDataParser::getDecString(), DCCTBBlockPrototype::increment(), DCCTBBlockPrototype::name_, DCCTBDataParser::numbXtalSamples(), DCCTBBlockPrototype::parser_, DCCTBBlockPrototype::wordCounter_, DCCTBBlockPrototype::wordEventOffset_, DCCTBBlockPrototype::wordsToEndOfEvent_, and xtalBlocks_.
Referenced by DCCTBEventBlock::DCCTBEventBlock().
{ uint32_t numbBytes = blockSize_; uint32_t wordsToEnd =wordsToEndOfEvent_; // See if we can construct the correct number of XTAL Blocks//////////////////////////////////////////////////////////////////////////////// uint32_t numbDWInXtalBlock = ( parser_->numbXtalSamples() )/4 + 1; uint32_t length = getDataField("BLOCK LENGTH"); uint32_t numbOfXtalBlocks = 0 ; if( length > 0 ){ numbOfXtalBlocks = (length-1)/numbDWInXtalBlock; } uint32_t xtalBlockSize = numbDWInXtalBlock*8; //uint32_t pIncrease = numbDWInXtalBlock*2; //std::cout<<"\n DEBUG::numbDWInXtal Block "<<dec<<numbDWInXtalBlock<<std::endl; //std::cout<<"\n DEBUG::length "<<length<<std::endl; //std::cout<<"\n DEBUG::xtalBlockSize "<<xtalBlockSize<<std::endl; //std::cout<<"\n DEBUG::pIncreade "<<pIncrease<<std::endl; bool zs = dccBlock_->getDataField("ZS"); if( !zs && numbOfXtalBlocks != 25 ){ (errors_["FE::BLOCK LENGTH"])++; errorString_ += "\n ======================================================================\n"; errorString_ += std::string(" ") + name_ + std::string(" ZS is not active, error in the Tower Length !") ; errorString_ += "\n Tower Length is : " + (parser_->getDecString(numbBytes/8))+std::string(" , while it should be : "); std::string myString = parser_->getDecString((uint32_t)(25*numbDWInXtalBlock+1)); errorString_ += "\n It was only possible to build : " + parser_->getDecString( numbOfXtalBlocks)+ std::string(" XTAL blocks"); errorString_ += "\n ======================================================================"; blockError_ = true; }; if( numbOfXtalBlocks > 25 ){ if (errors_["FE::BLOCK LENGTH"]==0)(errors_["FE::BLOCK LENGTH"])++; errorString_ += "\n ======================================================================\n"; errorString_ += std::string(" ") + name_ + std::string(" Tower Length is larger then expected...!") ; errorString_ += "\n Tower Length is : " + parser_->getDecString(numbBytes/8)+std::string(" , while it should be at maximum : "); std::string myString = parser_->getDecString((uint32_t)(25*numbDWInXtalBlock+1)); errorString_ += "\n Action -> data after the xtal 25 is ignored... "; errorString_ += "\n ======================================================================"; blockError_ = true; } blockSize_ += length*8; //?????????????????????? // Get XTAL Data ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// uint32_t stripID, xtalID; for(uint32_t numbXtal=1; numbXtal <= numbOfXtalBlocks && numbXtal <=25 ; numbXtal++){ increment(1); stripID =( numbXtal-1)/5 + 1; xtalID = numbXtal - (stripID-1)*5; if(!zs){ xtalBlocks_.push_back( new DCCTBXtalBlock( parser_, dataP_, xtalBlockSize, wordsToEnd-wordCounter_,wordCounter_+wordEventOffset_,xtalID, stripID) ); }else{ xtalBlocks_.push_back( new DCCTBXtalBlock( parser_, dataP_, xtalBlockSize, wordsToEnd-wordCounter_,wordCounter_+wordEventOffset_,0,0)); } increment(xtalBlockSize/4-1); } // Check internal data //////////// if(parser_->debug()){ dataCheck();}; }
int DCCTBTowerBlock::towerID | ( | ) |
Definition at line 178 of file DCCTowerBlock.cc.
References DCCTBBlockPrototype::getDataField(), DCCTBBlockPrototype::mapperFields_, and query::result.
Referenced by EcalTBDaqFormatter::DecodeMEM(), and EcalTB07DaqFormatter::DecodeMEM().
{ int result=-1; for(std::set<DCCTBDataField *,DCCTBDataFieldComparator>::iterator it = mapperFields_->begin(); it!= mapperFields_->end(); it++){ if ( (*it)->name() == "TT/SC ID" ) result=getDataField( (*it)->name() ) ; } return result; }
std::vector< DCCTBXtalBlock * > & DCCTBTowerBlock::xtalBlocks | ( | ) | [inline] |
Definition at line 57 of file DCCTowerBlock.h.
References xtalBlocks_.
Referenced by EcalTBDaqFormatter::DecodeMEM(), and EcalTB07DaqFormatter::DecodeMEM().
{ return xtalBlocks_; }
std::vector< DCCTBXtalBlock * > DCCTBTowerBlock::xtalBlocksById | ( | uint32_t | stripId, |
uint32_t | xtalId | ||
) |
Definition at line 160 of file DCCTowerBlock.cc.
References ExpressReco_HICollisions_FallBack::e, and xtalBlocks_.
{ std::vector<DCCTBXtalBlock *> myVector; std::vector<DCCTBXtalBlock *>::iterator it; for( it = xtalBlocks_.begin(); it!= xtalBlocks_.end(); it++ ){ try{ std::pair<bool,std::string> stripIdCheck = (*it)->checkDataField("STRIP ID",stripId); std::pair<bool,std::string> xtalIdCheck = (*it)->checkDataField("XTAL ID",xtalId); if(xtalIdCheck.first && stripIdCheck.first ){ myVector.push_back( (*it) ); } }catch (ECALTBParserBlockException &e){/*ignore*/ } } return myVector; }
DCCTBEventBlock* DCCTBTowerBlock::dccBlock_ [protected] |
Definition at line 51 of file DCCTowerBlock.h.
Referenced by dataCheck(), and parseXtalData().
uint32_t DCCTBTowerBlock::expectedTowerID_ [protected] |
Definition at line 52 of file DCCTowerBlock.h.
Referenced by dataCheck().
std::vector<DCCTBXtalBlock * > DCCTBTowerBlock::xtalBlocks_ [protected] |
Definition at line 50 of file DCCTowerBlock.h.
Referenced by parseXtalData(), xtalBlocks(), xtalBlocksById(), and ~DCCTBTowerBlock().