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.
6 
8 DCCDataBlockPrototype(u,m,e,unpack){}
9 
10 
11 int DCCTCCBlock::unpack(const uint64_t ** data, unsigned int * dwToEnd, short tccChId){
12 
13  dwToEnd_ = dwToEnd;
14  datap_ = data;
15  data_ = *data;
16 
17  // Need at least 1 dw to findout if pseudo-strips readout is enabled
18  if(*dwToEnd == 1){
20  edm::LogWarning("IncorrectEvent")
21  <<"EcalRawToDigi@SUB=DCCTCCBlock:unpack"
22  <<"\n Unable to unpack TCC block for event "<<event_->l1A()<<" in fed "<<mapper_->getActiveDCC()
23  <<"\n Only 8 bytes are available until the end of event ..."
24  <<"\n => Skipping to next fed block...";
25  }
26 
27  //todo : add this to error colection
28 
29  return STOP_EVENT_UNPACKING;
30  }
31 
33 
34 
35  if( (*dwToEnd_)<blockLength_ ){
37  edm::LogWarning("IncorrectEvent")
38  <<"EcalRawToDigi@SUB=DCCTCCBlock:unpack"
39  <<"\n Unable to unpack TCC block for event "<<event_->l1A()<<" in fed "<<mapper_->getActiveDCC()
40  <<"\n Only "<<((*dwToEnd_)*8)<<" bytes are available until the end of event while "<<(blockLength_*8)<<" are needed!"
41  <<"\n => Skipping to next fed block...";
42  }
43 
44  //todo : add this to error colection
45 
46  return STOP_EVENT_UNPACKING;
47  }
48 
49 
50 
52 
53  // Go to the begining of the tcc block
54  data_++;
55 
56  tccId_ = ( *data_ ) & TCC_ID_MASK;
57  ps_ = ( *data_>>TCC_PS_B ) & B_MASK;
58  bx_ = ( *data_>>TCC_BX_B ) & TCC_BX_MASK;
59  l1_ = ( *data_>>TCC_L1_B ) & TCC_L1_MASK;
60  nTTs_ = ( *data_>>TCC_TT_B ) & TCC_TT_MASK;
62 
63  event_->setTCCSyncNumbers(l1_,bx_,tccChId);
64 
65  if ( ! checkTccIdAndNumbTTs() ){
67  return SKIP_BLOCK_UNPACKING;
68  }
69 
70  // Check synchronization
71  if(sync_){
72  const unsigned int dccBx = (event_->bx()) & TCC_BX_MASK;
73  const unsigned int dccL1 = (event_->l1A()) & TCC_L1_MASK;
74  const unsigned int fov = ( event_->fov() ) & H_FOV_MASK;
75 
76  if (! isSynced(dccBx, bx_, dccL1, l1_, TCC_SRP, fov)) {
78  edm::LogWarning("IncorrectBlock")
79  << "Synchronization error for TCC block"
80  << " (L1A " << event_->l1A() << " bx " << event_->bx() << " fed " << mapper_->getActiveDCC() << ")\n"
81  << " dccBx = " << dccBx << " bx_ = " << bx_ << " dccL1 = " << dccL1 << " l1_ = " << l1_ << "\n"
82  << " => TCC block skipped";
83  }
84 
85  //Note : add to error collection ?
87  return SKIP_BLOCK_UNPACKING;
88 
89  }
90  }
91 
92  //check numb of samples
93  /*
94  unsigned int expTriggerTSamples(mapper_->numbTriggerTSamples());
95 
96  if( nTSamples_ != expTriggerTSamples ){
97  edm::LogWarning("IncorrectBlock")
98  <<"Unable to unpack TCC block for event "<<event_->l1A()<<" in fed "<<mapper_->getActiveDCC()
99  <<"\n Number of time samples is "<<nTSamples_<<" while "<<expTriggerTSamples<<" is expected"
100  <<"\n TCC block skipped..."<<endl;
101 
102  //Note : add to error collection ?
103  updateEventPointers();
104  return SKIP_BLOCK_UNPACKING;
105  }
106  */
107 
108  // debugging
109  // display(cout);
110 
112 
113  }
114 
116  return BLOCK_UNPACKED;
117 
118 }
119 
120 
121 
122 void DCCTCCBlock::display(std::ostream& o){
123 
124  o<<"\n Unpacked Info for DCC TCC Block"
125  <<"\n DW1 ============================="
126  <<"\n TCC Id "<<tccId_
127  <<"\n Bx "<<bx_
128  <<"\n L1 "<<l1_
129  <<"\n Numb TT "<<nTTs_
130  <<"\n Numb Samp "<<nTSamples_;
131 }
132 
bool isSynced(const unsigned int dccBx, const unsigned int bx, const unsigned int dccL1, const unsigned int l1, const BlockType type, const unsigned int fov)
int unpack(const uint64_t **data, unsigned int *dwToEnd, short tccChId=0)
Definition: DCCTCCBlock.cc:11
void setTCCSyncNumbers(short l1, short bx, short id)
Definition: DCCEventBlock.h:60
unsigned int nTSamples_
Definition: DCCTCCBlock.h:60
virtual unsigned int getLength()
DCCTCCBlock(DCCDataUnpacker *u, EcalElectronicsMapper *m, DCCEventBlock *e, bool unpack)
Definition: DCCTCCBlock.cc:7
unsigned int l1_
Definition: DCCTCCBlock.h:58
static std::atomic< bool > silentMode_
unsigned int bx()
Definition: DCCEventBlock.h:55
void display(std::ostream &o)
Definition: DCCTCCBlock.cc:122
unsigned int fov()
Definition: DCCEventBlock.h:52
virtual void addTriggerPrimitivesToCollection()
Definition: DCCTCCBlock.h:42
unsigned long long uint64_t
Definition: Time.h:15
unsigned int bx_
Definition: DCCTCCBlock.h:57
unsigned int tccId_
Definition: DCCTCCBlock.h:54
virtual bool checkTccIdAndNumbTTs()
Definition: DCCTCCBlock.h:54
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
unsigned int nTTs_
Definition: DCCTCCBlock.h:59
virtual void updateEventPointers()
EcalElectronicsMapper * mapper_
unsigned int ps_
Definition: DCCTCCBlock.h:63
unsigned int l1A()
Definition: DCCEventBlock.h:54