Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:58

0001 // -*- C++ -*-
0002 //
0003 // Package:    DataFormats/Common
0004 // Class:      TestWriteTriggerResults
0005 //
0006 /**\class edmtest::TestWriteTriggerResults
0007   Description: Used as part of tests that ensure the TriggerResults
0008   data format can be persistently written and in a subsequent process
0009   read. First, this is done using the current release version. In
0010   addition, the output file of the write process should be saved
0011   permanently each time its format changes. In unit tests, we read
0012   each of those saved files to verify that all future releases can
0013   read all versions of RAW data formats and Scouting data formats.
0014 */
0015 // Original Author:  W. David Dagenhart
0016 //         Created:  20 April 2023
0017 
0018 #include "DataFormats/Common/interface/HLTGlobalStatus.h"
0019 #include "DataFormats/Common/interface/TriggerResults.h"
0020 #include "DataFormats/Provenance/interface/ParameterSetID.h"
0021 #include "FWCore/Framework/interface/global/EDProducer.h"
0022 #include "FWCore/Framework/interface/Event.h"
0023 #include "FWCore/Framework/interface/Frameworkfwd.h"
0024 #include "FWCore/Framework/interface/MakerMacros.h"
0025 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0026 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0027 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0028 #include "FWCore/Utilities/interface/EDPutToken.h"
0029 
0030 #include <cassert>
0031 #include <memory>
0032 #include <string>
0033 #include <vector>
0034 
0035 namespace edmtest {
0036 
0037   class TestWriteTriggerResults : public edm::global::EDProducer<> {
0038   public:
0039     TestWriteTriggerResults(edm::ParameterSet const&);
0040     void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
0041     static void fillDescriptions(edm::ConfigurationDescriptions&);
0042 
0043   private:
0044     std::string parameterSetID_;
0045     std::vector<std::string> names_;
0046     std::vector<unsigned int> hltStates_;
0047     std::vector<unsigned int> moduleIndexes_;
0048     edm::EDPutTokenT<edm::TriggerResults> triggerResultsPutToken_;
0049   };
0050 
0051   TestWriteTriggerResults::TestWriteTriggerResults(edm::ParameterSet const& iPSet)
0052       : parameterSetID_(iPSet.getParameter<std::string>("parameterSetID")),
0053         names_(iPSet.getParameter<std::vector<std::string>>("names")),
0054         hltStates_(iPSet.getParameter<std::vector<unsigned int>>("hltStates")),
0055         moduleIndexes_(iPSet.getParameter<std::vector<unsigned int>>("moduleIndexes")),
0056         triggerResultsPutToken_(produces()) {}
0057 
0058   void TestWriteTriggerResults::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const {
0059     edm::HLTGlobalStatus hltGlobalStatus(hltStates_.size());
0060     for (unsigned int i = 0; i < hltStates_.size(); ++i) {
0061       assert(i < moduleIndexes_.size());
0062       hltGlobalStatus[i] = edm::HLTPathStatus(static_cast<edm::hlt::HLTState>(hltStates_[i]), moduleIndexes_[i]);
0063     }
0064     edm::ParameterSetID parameterSetID(parameterSetID_);
0065     std::unique_ptr<edm::TriggerResults> result;
0066     if (names_.empty()) {
0067       // names_ will always be empty except in extremely old data or monte carlo files
0068       result = std::make_unique<edm::TriggerResults>(hltGlobalStatus, parameterSetID);
0069     } else {
0070       // If names is not empty, the ParameterSetID is not set and default constructed
0071       result = std::make_unique<edm::TriggerResults>(hltGlobalStatus, names_);
0072     }
0073     iEvent.put(triggerResultsPutToken_, std::move(result));
0074   }
0075 
0076   void TestWriteTriggerResults::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0077     edm::ParameterSetDescription desc;
0078     desc.add<std::string>("parameterSetID");
0079     desc.add<std::vector<std::string>>("names");
0080     desc.add<std::vector<unsigned int>>("hltStates");
0081     desc.add<std::vector<unsigned int>>("moduleIndexes");
0082     descriptions.addDefault(desc);
0083   }
0084 }  // namespace edmtest
0085 
0086 using edmtest::TestWriteTriggerResults;
0087 DEFINE_FWK_MODULE(TestWriteTriggerResults);