Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-28 06:19:07

0001 #ifndef EventFilter_Utilities_RawCollectionToBuffer_h
0002 #define EventFilter_Utilities_RawCollectionToBuffer_h
0003 
0004 #include <memory>
0005 #include <vector>
0006 
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/EventSetup.h"
0009 #include "DataFormats/Common/interface/Handle.h"
0010 //#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0011 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0012 #include "DataFormats/FEDRawData/interface/RawDataBuffer.h"
0013 //#include "EventFilter/Utilities/interface/EvFDaqDirector.h"
0014 //#include "EventFilter/Utilities/interface/crc32c.h"
0015 //#include "EventFilter/Utilities/plugins/EvFBuildingThrottle.h"
0016 //#include "FWCore/Framework/interface/EventForOutput.h"
0017 //#include "FWCore/Framework/interface/LuminosityBlockForOutput.h"
0018 //#include "FWCore/Framework/interface/one/OutputModule.h"
0019 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0020 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0021 #include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"
0022 #include "FWCore/ServiceRegistry/interface/Service.h"
0023 #include "FWCore/Utilities/interface/EDGetToken.h"
0024 
0025 class RawCollectionToBuffer : public edm::one::EDProducer<> {
0026 public:
0027   explicit RawCollectionToBuffer(edm::ParameterSet const& ps);
0028   ~RawCollectionToBuffer() override {};
0029 
0030   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0031 
0032 private:
0033   void produce(edm::Event& e, edm::EventSetup const&) override;
0034   const edm::EDGetTokenT<FEDRawDataCollection> token_;
0035   //std::vector<unsigned int> sourceIdList_;
0036 };
0037 
0038 inline RawCollectionToBuffer::RawCollectionToBuffer(edm::ParameterSet const& ps)
0039     : token_(consumes<FEDRawDataCollection>(ps.getParameter<edm::InputTag>("source"))) {
0040   //sourceIdList_(ps.getUntrackedParameter<std::vector<unsigned int>>("sourceIdList", std::vector<unsigned int>())) {
0041   produces<RawDataBuffer>();
0042 }
0043 
0044 inline void RawCollectionToBuffer::produce(edm::Event& e, edm::EventSetup const&) {
0045   edm::Handle<FEDRawDataCollection> collection;
0046   e.getByToken(token_, collection);
0047   uint32_t totalSize = 0;
0048   int nFeds = FEDNumbering::lastFEDId() + 1;
0049   for (int idx = 0; idx < nFeds; ++idx) {
0050     totalSize += collection->FEDData(idx).size();
0051   }
0052   std::unique_ptr<RawDataBuffer> rawBuffer = std::make_unique<RawDataBuffer>(totalSize);
0053   rawBuffer->setPhase1Range();
0054   for (int idx = 0; idx < nFeds; ++idx) {
0055     auto size = collection->FEDData(idx).size();
0056     if (size)
0057       rawBuffer->addSource(idx, collection->FEDData(idx).data(), size);
0058   }
0059   e.put(std::move(rawBuffer));
0060 }
0061 
0062 inline void RawCollectionToBuffer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0063   edm::ParameterSetDescription desc;
0064   desc.add<edm::InputTag>("source", edm::InputTag("rawDataCollector"));
0065   //desc.addUntracked<std::vector<unsigned int>>("sourceIdList", std::vector<unsigned int>());
0066   descriptions.addWithDefaultLabel(desc);
0067 }
0068 
0069 #endif  // IOPool_Streamer_interface_RawCollectionToBuffer_h