CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DCCTCCBlock.cc
Go to the documentation of this file.
1 /*--------------------------------------------------------------*/
2 /* DCC TCC BLOCK CLASS */
3 /* */
4 /* Author : N.Almeida (LIP) Date : 30/05/2005 */
5 /*--------------------------------------------------------------*/
6 
7 #include "DCCTCCBlock.h"
8 
9 /*-------------------------------------------------*/
10 /* DCCTBTCCBlock::DCCTBTCCBlock */
11 /* class constructor */
12 /*-------------------------------------------------*/
14  DCCTBEventBlock * dccBlock,
16  uint32_t * buffer,
17  uint32_t numbBytes,
18  uint32_t wordsToEnd,
19  uint32_t wordEventOffset,
20  uint32_t expectedId) :
21  DCCTBBlockPrototype(parser,"TCC", buffer, numbBytes, wordsToEnd, wordEventOffset),dccBlock_(dccBlock), expectedId_(expectedId){
22 
23  //Reset error counters
24  errors_["TCC::HEADER"] = 0;
25  errors_["TCC::BLOCKID"] = 0;
26 
27  //Get data fields from the mapper and retrieve data
28  if( parser_->numbTTs() == 68){ mapperFields_ = parser_->mapper()->tcc68Fields();}
29  else if( parser_->numbTTs() == 32){ mapperFields_ = parser_->mapper()->tcc32Fields();}
30  else if( parser_->numbTTs() == 16){ mapperFields_ = parser_->mapper()->tcc16Fields();}
31 
32  parseData();
33 
34  // check internal data
35  if(parser_->debug())
36  dataCheck();
37 }
38 
39 /*---------------------------------------------------*/
40 /* DCCTBTCCBlock::dataCheck */
41 /* check data with data fields */
42 /*---------------------------------------------------*/
44  std::pair <bool,std::string> res; //check result
45  std::string checkErrors(""); //error string
46 
47  //check BX(LOCAL) field (1st word bit 16)
48  res = checkDataField("BX", BXMASK & (dccBlock_->getDataField("BX")));
49  if(!res.first){
50  checkErrors += res.second;
51  (errors_["TCC::HEADER"])++;
52  }
53 
54  //check LV1(LOCAL) field (1st word bit 32)
55  res = checkDataField("LV1", L1MASK & (dccBlock_->getDataField("LV1")));
56  if(!res.first){
57  checkErrors += res.second;
58  (errors_["TCC::HEADER"])++;
59  }
60 
61  //check TCC ID field (1st word bit 0)
62  res = checkDataField("TCC ID",expectedId_);
63  if(!res.first){
64  checkErrors += res.second;
65  (errors_["TCC::HEADER"])++;
66  }
67 
68 
69  if(checkErrors!=""){
70  blockError_=true;
71  errorString_ +="\n ======================================================================\n";
72  errorString_ += std::string(" ") + name_ + std::string("( ID = ")+parser_->getDecString((uint32_t)(expectedId_))+std::string(" ) errors : ") ;
73  errorString_ += checkErrors ;
74  errorString_ += "\n ======================================================================";
75  }
76 
77 
78 }
79 
80 
81 /*--------------------------------------------------*/
82 /* DCCTBTCCBlock::increment */
83 /* increment a TCC block */
84 /*--------------------------------------------------*/
85 
86 void DCCTBTCCBlock::increment(uint32_t numb){
87  //if no debug is required increments the number of blocks
88  //otherwise checks if block id is really B'011'=3
89  if(!parser_->debug()){
91  }
92  else {
93  for(uint32_t counter=0; counter<numb; counter++, dataP_++, wordCounter_++){
94  uint32_t blockID = (*dataP_) >> BPOSITION_BLOCKID;
95  if( blockID != BLOCKID ){
96  (errors_["TCC::BLOCKID"])++;
97  //errorString_ += std::string("\n") + parser_->index(nunb)+(" blockId has value ") + parser_->getDecString(blockID);
98  //errorString += std::string(", while ")+parser_->getDecString(BLOCKID)+std::string(" is expected");
99  }
100  }
101  }
102 
103 }
104 
105 
106 
107 std::vector< std::pair<int,bool> > DCCTBTCCBlock::triggerSamples() {
108  std::vector< std::pair<int,bool> > data;
109 
110  for(unsigned int i=1;i <= parser_->numbTTs();i++){
111  std::string name = std::string("TPG#") + parser_->getDecString(i);
112  int tpgValue = getDataField( name ) ;
113  std::pair<int,bool> tpg( tpgValue&ETMASK, bool(tpgValue>>BPOSITION_FGVB));
114  data.push_back (tpg);
115 
116  }
117 
118  return data;
119 }
120 
121 
122 
123 
124 std::vector<int> DCCTBTCCBlock::triggerFlags() {
125  std::vector<int> data;
126 
127  for(unsigned int i=1; i<= parser_->numbTTs();i++){
128  std::string name = std::string("TTF#") + parser_->getDecString(i);
129 
130  data.push_back ( getDataField( name ) );
131 
132  }
133 
134  return data;
135 }
136 
137 
138 
139 
virtual std::pair< bool, std::string > checkDataField(std::string name, uint32_t data)
virtual uint32_t getDataField(std::string name)
int i
Definition: DBlmapReader.cc:9
std::set< DCCTBDataField *, DCCTBDataFieldComparator > * mapperFields_
virtual void increment(uint32_t numb, std::string msg="")
uint32_t expectedId_
Definition: DCCTCCBlock.h:72
virtual void parseData()
void dataCheck()
Definition: DCCTCCBlock.cc:43
DCCTBDataParser * parser_
std::string getDecString(uint32_t data)
std::vector< int > triggerFlags()
Definition: DCCTCCBlock.cc:124
std::vector< std::pair< int, bool > > triggerSamples()
Definition: DCCTCCBlock.cc:107
DCCTBTCCBlock(DCCTBEventBlock *dccBlock, DCCTBDataParser *parser, uint32_t *buffer, uint32_t numbBytes, uint32_t wordsToEnd, uint32_t wordEventOffset, uint32_t expectedId)
Definition: DCCTCCBlock.cc:13
void increment(uint32_t numb)
Definition: DCCTCCBlock.cc:86
uint32_t numbTTs()
DCCTBDataMapper * mapper()
std::map< std::string, uint32_t > errors_
std::set< DCCTBDataField *, DCCTBDataFieldComparator > * tcc32Fields()
DCCTBEventBlock * dccBlock_
Definition: DCCTCCBlock.h:71
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
std::set< DCCTBDataField *, DCCTBDataFieldComparator > * tcc16Fields()
std::set< DCCTBDataField *, DCCTBDataFieldComparator > * tcc68Fields()