Back to home page

Project CMSSW displayed by LXR

 
 

    


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

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 }  // namespace edmtest
0052 
0053 using edmtest::TransformIntProducer;
0054 DEFINE_FWK_MODULE(TransformIntProducer);