CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSCSPRecord.cc
Go to the documentation of this file.
1 #include <string.h> // memcpy, bzero
4 
5 bool CSCSPRecord::unpack(const unsigned short* &buf, unsigned int nonmasked_data_blocks, bool empty_blocks_suppressed,unsigned int tbin) throw() {
6  memcpy((void*)this, buf, 8*sizeof(short));
7  buf += 8;
8 
9  bool unpackError = check();
10 
11  bzero(me,15*sizeof(CSCSP_MEblock));
12  bzero(mb, 2*sizeof(CSCSP_MBblock));
13  bzero(me, 3*sizeof(CSCSP_SPblock));
14 
15  bzero(meFilled,sizeof(meFilled));
16  bzero(mbFilled,sizeof(mbFilled));
17  bzero(spFilled,sizeof(spFilled));
18 
19  const CSCSPHeader::ACTIVE id[] = {
24  CSCSPHeader::F5, CSCSPHeader::F5, CSCSPHeader::F5
25  };
26 
27  // 15 ME data blocks
28  for(unsigned int block=0; block<15; block++)
29  if( nonmasked_data_blocks & id[block] &&
30  (!empty_blocks_suppressed || vp_bits&(1<<block)) ){
31  unsigned int mpc = block/3, link = block%3;
32  unpackError |= me[mpc][link].unpack(buf);
33  me[mpc][link].tbin_ = tbin;
34  me[mpc][link].valid_pattern = vp_bits&(1<<block);
35  me[mpc][link].sync_error = se_bits&(1<<block);
36  me[mpc][link].sync_modified = sm_bits&(1<<block);
37  me[mpc][link].alignment_fifo= af_bits&(1<<block);
38  me[mpc][link].bxBit = bx_bits&(1<<block);
39  me[mpc][link].spInput_ = block+1;
40  meFilled[mpc][link] = true;
41  }
42  // 2 MB data blocks
43  for(unsigned int block=0; block<2; block++)
44  if( nonmasked_data_blocks & CSCSPHeader::DT &&
45  (!empty_blocks_suppressed || (block?vq_b:vq_a) )){
46  unpackError |= mb[block].unpack(buf);
47  mb[block].tbin_ = tbin;
48  mb[block].valid_quality = (block?vq_b:vq_a);
49  mb[block].alignment_fifo= (block?af_barrel_2:af_barrel_1);
50  mb[block].bxBit = (block?bx_barrel_2:bx_barrel_1);
51  mb[block].id_ = block+1;
52  mbFilled[block] = true;
53  }
54 
55  // 3 SP data blocks
56  for(unsigned int block=0; block<3; block++)
57  if( nonmasked_data_blocks & CSCSPHeader::SP &&
58  (!empty_blocks_suppressed || (block==0?mode1:(block==1?mode2:mode3))) ){
59  unpackError |= sp[block].unpack(buf);
60  sp[block].tbin_ = tbin;
61  sp[block].mode_ = (block==0?mode1:(block==1?mode2:mode3));
62  sp[block].id_ = block+1;
63  spFilled[block] = true;
64  }
65 
66  return unpackError;
67 }
68 
69 std::vector<CSCSP_MEblock> CSCSPRecord::LCTs(void) const throw() {
70  std::vector<CSCSP_MEblock> result;
71  for(int mpc=0; mpc<5; mpc++)
72  for(int link=0; link<3; link++)
73  if(meFilled[mpc][link]) result.push_back(me[mpc][link]);
74  return result;
75 }
76 
77 std::vector<CSCSP_MEblock> CSCSPRecord::LCTs(unsigned int mpc) const throw() {
78  std::vector<CSCSP_MEblock> result;
79  if( mpc<5 )
80  for(int link=0; link<3; link++)
81  if(meFilled[mpc][link]) result.push_back(me[mpc][link]);
82  return result;
83 }
84 
85 std::vector<CSCSP_MEblock> CSCSPRecord::LCT(unsigned int mpc, unsigned int link) const throw(){
86  std::vector<CSCSP_MEblock> result;
87  if( mpc<5 && link<3)
88  if(meFilled[mpc][link]) result.push_back(me[mpc][link]);
89  return result;
90 }
91 
92 std::vector<CSCSP_SPblock> CSCSPRecord::tracks(void) const throw() {
93  std::vector<CSCSP_SPblock> result;
94  if(spFilled[0]) result.push_back(sp[0]);
95  if(spFilled[1]) result.push_back(sp[1]);
96  if(spFilled[2]) result.push_back(sp[2]);
97  return result;
98 }
99 
100 std::vector<CSCSP_MBblock> CSCSPRecord::mbStubs(void) const throw() {
101  std::vector<CSCSP_MBblock> result;
102  if(mbFilled[0]) result.push_back(mb[0]);
103  if(mbFilled[1]) result.push_back(mb[1]);
104  return result;
105 }
106 
std::vector< CSCSP_MBblock > mbStubs(void) const
Definition: CSCSPRecord.cc:100
bool meFilled[5][3]
Definition: CSCSPRecord.h:63
std::vector< CSCSP_MEblock > LCT(unsigned int mpc, unsigned int link) const
Definition: CSCSPRecord.cc:85
CSCSP_SPblock sp[3]
Definition: CSCSPRecord.h:61
bool unpack(const unsigned short *&buf, unsigned int nonmasked_data_blocks, bool empty_blocks_suppressed, unsigned int tbin)
Definition: CSCSPRecord.cc:5
std::vector< CSCSP_SPblock > tracks(void) const
Definition: CSCSPRecord.cc:92
bool check(const std::string &)
bool spFilled[3]
Definition: CSCSPRecord.h:63
CSCSP_MEblock me[5][3]
Definition: CSCSPRecord.h:59
tuple result
Definition: query.py:137
std::vector< CSCSP_MEblock > LCTs(void) const
Definition: CSCSPRecord.cc:69
bool mbFilled[2]
Definition: CSCSPRecord.h:63
CSCSP_MBblock mb[2]
Definition: CSCSPRecord.h:60