File indexing completed on 2023-03-17 11:02:58
0001 #include "FWCore/Framework/interface/global/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 TransformIntProducer : public edm::global::EDProducer<edm::Transformer> {
0009 public:
0010 TransformIntProducer(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 noPut_(iPSet.getParameter<bool>("noPut")) {
0015 putToken_ = produces<IntProduct>();
0016 bool check = iPSet.getUntrackedParameter<bool>("checkTransformNotCalled");
0017 registerTransform(
0018 putToken_,
0019 [offset = transformOffset_, check](auto const& iFrom) {
0020 if (check) {
0021 throw cms::Exception("TransformShouldNotBeCalled");
0022 }
0023 return IntProduct(iFrom.value + offset);
0024 },
0025 "transform");
0026 }
0027
0028 void produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const override {
0029 if (not noPut_) {
0030 iEvent.emplace(putToken_, iEvent.get(getToken_).value + offset_);
0031 }
0032 }
0033 static void fillDescriptions(edm::ConfigurationDescriptions& desc) {
0034 edm::ParameterSetDescription pset;
0035 pset.add<edm::InputTag>("get");
0036 pset.add<unsigned int>("offset", 0);
0037 pset.add<unsigned int>("transformOffset", 1);
0038 pset.addUntracked<bool>("checkTransformNotCalled", false);
0039 pset.add<bool>("noPut", false);
0040
0041 desc.addDefault(pset);
0042 }
0043
0044 private:
0045 const edm::EDGetTokenT<IntProduct> getToken_;
0046 edm::EDPutTokenT<IntProduct> putToken_;
0047 const unsigned int offset_;
0048 const unsigned int transformOffset_;
0049 const bool noPut_;
0050 };
0051 }
0052
0053 using edmtest::TransformIntProducer;
0054 DEFINE_FWK_MODULE(TransformIntProducer);