Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:12:37

0001 #include "FWCore/Framework/interface/stream/EDProducer.h"
0002 #include "FWCore/Framework/interface/Event.h"
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004 #include "DataFormats/TestObjects/interface/ToyProducts.h"
0005 #include "FWCore/Utilities/interface/Exception.h"
0006 
0007 namespace edmtest {
0008   class TransformIntStreamProducer : public edm::stream::EDProducer<edm::Transformer> {
0009   public:
0010     TransformIntStreamProducer(edm::ParameterSet const& iPSet)
0011         : getToken_(consumes(iPSet.getParameter<edm::InputTag>("get"))),
0012           offset_(iPSet.getParameter<unsigned int>("offset")),
0013           transformOffset_(iPSet.getParameter<unsigned int>("transformOffset")) {
0014       putToken_ = produces<IntProduct>();
0015       bool check = iPSet.getUntrackedParameter<bool>("checkTransformNotCalled");
0016       registerTransform(
0017           putToken_,
0018           [offset = transformOffset_, check](auto const& iFrom) {
0019             if (check) {
0020               throw cms::Exception("TransformShouldNotBeCalled");
0021             }
0022             return IntProduct(iFrom.value + offset);
0023           },
0024           "transform");
0025     }
0026 
0027     void produce(edm::Event& iEvent, edm::EventSetup const&) override {
0028       iEvent.emplace(putToken_, iEvent.get(getToken_).value + offset_);
0029     }
0030     static void fillDescriptions(edm::ConfigurationDescriptions& desc) {
0031       edm::ParameterSetDescription pset;
0032       pset.add<edm::InputTag>("get");
0033       pset.add<unsigned int>("offset", 0);
0034       pset.add<unsigned int>("transformOffset", 1);
0035       pset.addUntracked<bool>("checkTransformNotCalled", false);
0036 
0037       desc.addDefault(pset);
0038     }
0039 
0040   private:
0041     const edm::EDGetTokenT<IntProduct> getToken_;
0042     edm::EDPutTokenT<IntProduct> putToken_;
0043     const unsigned int offset_;
0044     const unsigned int transformOffset_;
0045   };
0046 }  // namespace edmtest
0047 
0048 using edmtest::TransformIntStreamProducer;
0049 DEFINE_FWK_MODULE(TransformIntStreamProducer);