Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-05-04 02:45:50

0001 // -*- C++ -*-
0002 //
0003 // Package:    DataFormats/FEDRawData
0004 // Class:      TestWriteFEDRawDataCollection
0005 //
0006 /**\class edmtest::TestWriteFEDRawDataCollection
0007   Description: Used as part of tests that ensure the FEDRawDataCollection
0008   data format can be persistently written and in a subsequent process
0009   read. First, this is done using the current release version for writing
0010   and reading. In addition, the output file of the write process should
0011   be saved permanently each time the FEDRawDataCollection persistent data
0012   format changes. In unit tests, we read each of those saved files to verify
0013   that the current releases can read older versions of the data format.
0014 */
0015 // Original Author:  W. David Dagenhart
0016 //         Created:  1 May 2023
0017 
0018 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
0019 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0020 #include "FWCore/Framework/interface/Event.h"
0021 #include "FWCore/Framework/interface/Frameworkfwd.h"
0022 #include "FWCore/Framework/interface/global/EDProducer.h"
0023 #include "FWCore/Framework/interface/MakerMacros.h"
0024 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0026 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0027 #include "FWCore/Utilities/interface/EDPutToken.h"
0028 #include "FWCore/Utilities/interface/StreamID.h"
0029 
0030 #include <memory>
0031 #include <utility>
0032 #include <vector>
0033 
0034 namespace edmtest {
0035 
0036   class TestWriteFEDRawDataCollection : public edm::global::EDProducer<> {
0037   public:
0038     TestWriteFEDRawDataCollection(edm::ParameterSet const&);
0039     void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
0040     static void fillDescriptions(edm::ConfigurationDescriptions&);
0041 
0042   private:
0043     std::vector<unsigned int> fedData0_;
0044     std::vector<unsigned int> fedData3_;
0045     edm::EDPutTokenT<FEDRawDataCollection> fedRawDataCollectionPutToken_;
0046   };
0047 
0048   TestWriteFEDRawDataCollection::TestWriteFEDRawDataCollection(edm::ParameterSet const& iPSet)
0049       : fedData0_(iPSet.getParameter<std::vector<unsigned int>>("FEDData0")),
0050         fedData3_(iPSet.getParameter<std::vector<unsigned int>>("FEDData3")),
0051         fedRawDataCollectionPutToken_(produces()) {}
0052 
0053   void TestWriteFEDRawDataCollection::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const {
0054     auto fedRawDataCollection = std::make_unique<FEDRawDataCollection>();
0055     FEDRawData& fedData0 = fedRawDataCollection->FEDData(0);
0056     FEDRawData& fedData3 = fedRawDataCollection->FEDData(3);
0057 
0058     fedData0.resize(fedData0_.size());
0059     unsigned char* dataPtr0 = fedData0.data();
0060     for (unsigned int i = 0; i < fedData0_.size(); ++i) {
0061       dataPtr0[i] = fedData0_[i];
0062     }
0063     fedData3.resize(fedData3_.size());
0064     unsigned char* dataPtr3 = fedData3.data();
0065     for (unsigned int i = 0; i < fedData3_.size(); ++i) {
0066       dataPtr3[i] = fedData3_[i];
0067     }
0068     iEvent.put(fedRawDataCollectionPutToken_, std::move(fedRawDataCollection));
0069   }
0070 
0071   void TestWriteFEDRawDataCollection::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0072     edm::ParameterSetDescription desc;
0073     desc.add<std::vector<unsigned int>>("FEDData0");
0074     desc.add<std::vector<unsigned int>>("FEDData3");
0075     descriptions.addDefault(desc);
0076   }
0077 }  // namespace edmtest
0078 
0079 using edmtest::TestWriteFEDRawDataCollection;
0080 DEFINE_FWK_MODULE(TestWriteFEDRawDataCollection);