CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTROS8Unpacker.cc
Go to the documentation of this file.
1 
13 
14 #include <iostream>
15 #include <map>
16 
17 
18 using namespace std;
19 using namespace edm;
20 using namespace cms;
21 
22 void DTROS8Unpacker::interpretRawData(const unsigned int* index, int datasize,
23  int dduID,
25  std::auto_ptr<DTDigiCollection>& product,
26  std::auto_ptr<DTLocalTriggerCollection>& product2,
27  uint16_t rosList) {
28 
29 
31  const int wordLength = 4;
32  int numberOfWords = datasize / wordLength;
33  int robID = 0;
34  int rosID = 0;
35  int eventID = 0;
36  int bunchID = 0;
37 
38  map<int,int> hitOrder;
39 
40  // Loop over the ROS8 words
41  for ( int i = 1; i < numberOfWords; i++ ) {
42 
43  // The word
44  uint32_t word = index[i];
45 
46  // The word type
47  int type = ( word >> 28 ) & 0xF;
48 
49  // Event Header
50  if ( type == 15 ) {
51  robID = word & 0x7;
52  rosID = ( word >> 3 ) & 0xFF;
53  }
54 
55  // TDC Header/Trailer
56  else if ( type <= 3 ) {
57  eventID = ( word >> 12 ) & 0xFFF;
58  bunchID = word & 0xFFF;
59  }
60 
61  // TDC Measurement
62  else if ( type >= 4 && type <= 5 ) {
63 
64  int tdcID = ( word >> 24 ) & 0xF;
65  int tdcChannel = ( word >> 19 ) & 0x1F;
66 
67  int channelIndex = robID << 7 | tdcID << 5 | tdcChannel;
68  hitOrder[channelIndex]++;
69 
70  int tdcMeasurement = word & 0x7FFFF;
71  tdcMeasurement >>= 2;
72 
73 
74  try {
75 
76  // Check the ddu ID in the mapping been used
77  dduID = pset.getUntrackedParameter<int>("dduID",730);
78 
79  // Map the RO channel to the DetId and wire
80  DTWireId detId;
81  if ( ! mapping->readOutToGeometry(dduID, rosID, robID, tdcID, tdcChannel,detId)) {
82  if (pset.getUntrackedParameter<bool>("debugMode",false)) cout<<"[DTROS8Unpacker] "<<detId<<endl;
83  int wire = detId.wire();
84 
85  // Produce the digi
86  DTDigi digi(wire, tdcMeasurement, hitOrder[channelIndex]-1);
87 
88  // Commit to the event
89  product->insertDigi(detId.layerId(),digi);
90  }
91  else if (pset.getUntrackedParameter<bool>("debugMode",false))
92  cout<<"[DTROS8Unpacker] Missing wire!"<<endl;
93  }
94 
95  catch (cms::Exception & e1) {
96  cout<<"[DTUnpackingModule]: WARNING: Digi not build!"<<endl;
97  return;
98  }
99  }
100 
101  }
102 }
virtual void interpretRawData(const unsigned int *index, int datasize, int dduID, edm::ESHandle< DTReadOutMapping > &mapping, std::auto_ptr< DTDigiCollection > &product, std::auto_ptr< DTLocalTriggerCollection > &product2, uint16_t rosList=0)
type
Definition: HCALResponse.h:22
int i
Definition: DBlmapReader.cc:9
Definition: DTDigi.h:19
tuple cout
Definition: gather_cfg.py:41