1111
1212#include " EventFilter/Utilities/interface/GlobalEventNumber.h"
1313
14- #include " DataFormats/FEDRawData/interface/RawDataBuffer .h"
14+ #include " DataFormats/FEDRawData/interface/FEDRawData .h"
1515
1616#include " FWCore/ParameterSet/interface/ParameterSet.h"
1717
2626using namespace std ;
2727using namespace edm ;
2828
29+ // //////////////////////////////////////////////////////////////////////////////
30+ // construction/destruction
31+ // //////////////////////////////////////////////////////////////////////////////
32+
33+ // ______________________________________________________________________________
2934DaqFakeReader::DaqFakeReader (const edm::ParameterSet& pset)
3035 : runNum(1 ),
3136 eventNum(1 ),
@@ -66,41 +71,27 @@ DaqFakeReader::DaqFakeReader(const edm::ParameterSet& pset)
6671 static_cast <long unsigned int >(std::chrono::high_resolution_clock::now ().time_since_epoch ().count ());
6772 srand (time_count & 0xffffffff );
6873 }
69- produces<RawDataBuffer >();
74+ produces<FEDRawDataCollection >();
7075}
7176
72- int DaqFakeReader::fillRawData (Event& e, RawDataBuffer*& data) {
73- // a null pointer is passed, need to allocate the fed collection
74- totSize_ = 0 ;
75- logSizes_.clear ();
76- logSizeIndex_ = 0 ;
77+ // ______________________________________________________________________________
78+ DaqFakeReader::~DaqFakeReader () {}
7779
78- if (!empty_events) {
79- getSizes (FEDNumbering::MINSiPixelFEDID, FEDNumbering::MAXSiPixelFEDID, meansize, width);
80- if (haveSiStrip_)
81- getSizes (FEDNumbering::MINSiStripFEDID, FEDNumbering::MAXSiStripFEDID, meansize, width);
82- if (haveECAL_)
83- getSizes (FEDNumbering::MINECALFEDID, FEDNumbering::MAXECALFEDID, meansize, width);
84- if (haveHCAL_)
85- getSizes (FEDNumbering::MINHCALFEDID, FEDNumbering::MAXHCALFEDID, meansize, width);
86- if (haveDT_)
87- getSizes (FEDNumbering::MINDTFEDID, FEDNumbering::MAXDTFEDID, meansize, width);
88- if (haveCSC_)
89- getSizes (FEDNumbering::MINCSCFEDID, FEDNumbering::MAXCSCFEDID, meansize, width);
90- if (haveRPC_)
91- getSizes (FEDNumbering::MINRPCFEDID, FEDNumbering::MAXRPCFEDID, meansize, width);
92- logSizes_.push_back (sizeof (tcds::Raw_v1) + 16 );
93- totSize_ += sizeof (tcds::Raw_v1) + 16 ;
94- }
80+ // //////////////////////////////////////////////////////////////////////////////
81+ // implementation of member functions
82+ // //////////////////////////////////////////////////////////////////////////////
9583
96- data = new RawDataBuffer (totSize_);
97- data->setPhase1Range ();
84+ // ______________________________________________________________________________
85+ int DaqFakeReader::fillRawData (Event& e, FEDRawDataCollection*& data) {
86+ // a null pointer is passed, need to allocate the fed collection
87+ data = new FEDRawDataCollection ();
9888 EventID eID = e.id ();
9989 auto ls = e.luminosityBlock ();
10090
10191 if (!empty_events) {
10292 // Fill the EventID
10393 eventNum++;
94+ // FIXME:
10495
10596 if (haveSiPixel_)
10697 fillFEDs (FEDNumbering::MINSiPixelFEDID, FEDNumbering::MAXSiPixelFEDID, eID, *data, meansize, width);
@@ -126,81 +117,74 @@ int DaqFakeReader::fillRawData(Event& e, RawDataBuffer*& data) {
126117}
127118
128119void DaqFakeReader::produce (Event& e, EventSetup const & es) {
129- RawDataBuffer* fedbuffer = nullptr ;
130- fillRawData (e, fedbuffer);
131- std::unique_ptr<RawDataBuffer> bare_product (fedbuffer);
120+ edm::Handle<FEDRawDataCollection> rawdata;
121+ FEDRawDataCollection* fedcoll = nullptr ;
122+ fillRawData (e, fedcoll);
123+ std::unique_ptr<FEDRawDataCollection> bare_product (fedcoll);
132124 e.put (std::move (bare_product));
133125}
134126
135- void DaqFakeReader::getSizes (const int fedmin, const int fedmax, float meansize, float width) {
136- // FIXME: last ID included?
137- for (int fedId = fedmin; fedId <= fedmax; ++fedId) {
138- // Generate size...
139- float logsiz = CLHEP::RandGauss::shoot (std::log (meansize), std::log (meansize) - std::log (width / 2 .));
140- logSizes_.push_back (logsiz);
141- size_t size = int (std::exp (logsiz));
142- size -= size % 8 ; // all blocks aligned to 64 bit words
143- totSize_ += size + 16 ;
144- }
145- }
146-
127+ // ______________________________________________________________________________
147128void DaqFakeReader::fillFEDs (
148- const int fedmin, const int fedmax, EventID& eID, RawDataBuffer & data, float meansize, float width) {
129+ const int fedmin, const int fedmax, EventID& eID, FEDRawDataCollection & data, float meansize, float width) {
149130 // FIXME: last ID included?
150131 for (int fedId = fedmin; fedId <= fedmax; ++fedId) {
151132 // Generate size...
152- assert (logSizeIndex_ < logSizes_.size ());
153- float logsiz = logSizes_[logSizeIndex_];
154- logSizeIndex_++;
133+ float logsiz = CLHEP::RandGauss::shoot (std::log (meansize), std::log (meansize) - std::log (width / 2 .));
155134 size_t size = int (std::exp (logsiz));
156135 size -= size % 8 ; // all blocks aligned to 64 bit words
157136
158- unsigned char * feddata = data.addSource (fedId, nullptr , size + 16 );
137+ FEDRawData& feddata = data.FEDData (fedId);
138+ // Allocate space for header+trailer+payload
139+ feddata.resize (size + 16 );
159140
160141 if (fillRandom_) {
161142 // fill FED with random values
162143 size_t size_ui = size - size % sizeof (unsigned int );
163144 for (size_t i = 0 ; i < size_ui; i += sizeof (unsigned int )) {
164- *((unsigned int *)(feddata + i)) = (unsigned int )rand ();
145+ *((unsigned int *)(feddata. data () + i)) = (unsigned int )rand ();
165146 }
166147 // remainder
167148 for (size_t i = size_ui; i < size; i++) {
168- *(feddata + i) = rand () & 0xff ;
149+ *(feddata. data () + i) = rand () & 0xff ;
169150 }
170151 }
171152
172153 // Generate header
173- FEDHeader::set (feddata,
154+ FEDHeader::set (feddata. data () ,
174155 1 , // Trigger type
175156 eID.event (), // LV1_id (24 bits)
176157 0 , // BX_id
177158 fedId); // source_id
178159
160+ // Payload = all 0s...
161+
179162 // Generate trailer
180163 int crc = 0 ; // FIXME : get CRC
181- FEDTrailer::set (feddata + 8 + size,
164+ FEDTrailer::set (feddata. data () + 8 + size,
182165 size / 8 + 2 , // in 64 bit words!!!
183166 crc,
184167 0 , // Evt_stat
185168 0 ); // TTS bits
186169 }
187170}
188171
189- void DaqFakeReader::fillTCDSFED (EventID& eID, RawDataBuffer & data, uint32_t ls, timeval* now) {
172+ void DaqFakeReader::fillTCDSFED (EventID& eID, FEDRawDataCollection & data, uint32_t ls, timeval* now) {
190173 uint32_t fedId = tcdsFEDID_;
174+ FEDRawData& feddata = data.FEDData (fedId);
191175 uint32_t size = sizeof (tcds::Raw_v1);
192- unsigned char * feddata = data. addSource (fedId, nullptr , size + 16 );
176+ feddata. resize ( size + 16 );
193177
194178 uint64_t orbitnr = 0 ;
195179 uint16_t bxid = 0 ;
196180
197- FEDHeader::set (feddata,
181+ FEDHeader::set (feddata. data () ,
198182 1 , // Trigger type
199183 eID.event (), // LV1_id (24 bits)
200184 bxid, // BX_id
201185 fedId); // source_id
202186
203- tcds::Raw_v1* tcds = reinterpret_cast <tcds::Raw_v1*>(feddata + FEDHeader::length);
187+ tcds::Raw_v1* tcds = reinterpret_cast <tcds::Raw_v1*>(feddata. data () + FEDHeader::length);
204188 tcds::BST_v1* bst = const_cast <tcds::BST_v1*>(&tcds->bst );
205189 tcds::Header_v1* header = const_cast <tcds::Header_v1*>(&tcds->header );
206190
@@ -217,7 +201,7 @@ void DaqFakeReader::fillTCDSFED(EventID& eID, RawDataBuffer& data, uint32_t ls,
217201 const_cast <uint32_t &>(header->lumiSection ) = ls;
218202
219203 int crc = 0 ; // only full event crc32c checked in HLT, not FED CRC16
220- FEDTrailer::set (feddata + 8 + size,
204+ FEDTrailer::set (feddata. data () + 8 + size,
221205 size / 8 + 2 , // in 64 bit words!!!
222206 crc,
223207 0 , // Evt_stat
0 commit comments