File indexing completed on 2025-01-08 03:36:13
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](edm::StreamID, 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 }
0047
0048 using edmtest::TransformIntStreamProducer;
0049 DEFINE_FWK_MODULE(TransformIntStreamProducer);