Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-14 03:16:37

0001 // -*- C++ -*-
0002 //
0003 // Package:    FWCore/Integration
0004 // Class:      ConsumeWhatsIt
0005 //
0006 /**\class edmtest::ConsumeWhatsIt
0007 
0008  Description:
0009      Consumes and produces EventSetup products.
0010      This is used to test the printout from the Tracer
0011      module related to EventSetup module dependencies.
0012 */
0013 //
0014 // Original Author:  W. David Dagenhart
0015 //         Created:  11 December 2024
0016 
0017 #include <memory>
0018 #include <optional>
0019 
0020 #include "Doodad.h"
0021 #include "GadgetRcd.h"
0022 #include "WhatsIt.h"
0023 
0024 #include "FWCore/Framework/interface/es_Label.h"
0025 #include "FWCore/Framework/interface/ESProducer.h"
0026 #include "FWCore/Framework/interface/ModuleFactory.h"
0027 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0028 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0030 #include "FWCore/Utilities/interface/ESGetToken.h"
0031 #include "FWCore/Utilities/interface/ESInputTag.h"
0032 
0033 namespace edmtest {
0034 
0035   class ConsumeWhatsIt : public edm::ESProducer {
0036   public:
0037     ConsumeWhatsIt(edm::ParameterSet const& pset);
0038 
0039     using ReturnType = std::unique_ptr<WhatsIt>;
0040     using ReturnTypeA = std::unique_ptr<const WhatsIt>;
0041     using ReturnTypeB = std::shared_ptr<WhatsIt>;
0042     using ReturnTypeC = std::shared_ptr<const WhatsIt>;
0043     using ReturnTypeD = std::optional<WhatsIt>;
0044 
0045     ReturnType produce(const GadgetRcd&);
0046     ReturnTypeA produceA(const GadgetRcd&);
0047     ReturnTypeB produceB(const GadgetRcd&);
0048     ReturnTypeC produceC(const GadgetRcd&);
0049     ReturnTypeD produceD(const GadgetRcd&);
0050 
0051     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0052 
0053   private:
0054     edm::ESGetToken<Doodad, GadgetRcd> token_;
0055     edm::ESGetToken<Doodad, GadgetRcd> tokenA_;
0056     edm::ESGetToken<Doodad, GadgetRcd> tokenB_;
0057     edm::ESGetToken<Doodad, GadgetRcd> tokenC_;
0058     edm::ESGetToken<Doodad, GadgetRcd> tokenD_;
0059 
0060     edm::ESGetToken<WhatsIt, GadgetRcd> token_in_produce_;
0061     edm::ESGetToken<WhatsIt, GadgetRcd> tokenA_in_produce_;
0062     edm::ESGetToken<WhatsIt, GadgetRcd> tokenB_in_produce_;
0063     edm::ESGetToken<WhatsIt, GadgetRcd> tokenC_in_produce_;
0064     edm::ESGetToken<WhatsIt, GadgetRcd> tokenD_in_produce_;
0065 
0066     edm::ESGetToken<WhatsIt, GadgetRcd> token_in_produceA_;
0067     edm::ESGetToken<WhatsIt, GadgetRcd> tokenA_in_produceA_;
0068     edm::ESGetToken<WhatsIt, GadgetRcd> tokenB_in_produceA_;
0069     edm::ESGetToken<WhatsIt, GadgetRcd> tokenC_in_produceA_;
0070     edm::ESGetToken<WhatsIt, GadgetRcd> tokenD_in_produceA_;
0071 
0072     edm::ESGetToken<WhatsIt, GadgetRcd> token_in_produceB_;
0073     edm::ESGetToken<WhatsIt, GadgetRcd> tokenA_in_produceB_;
0074     edm::ESGetToken<WhatsIt, GadgetRcd> tokenB_in_produceB_;
0075     edm::ESGetToken<WhatsIt, GadgetRcd> tokenC_in_produceB_;
0076     edm::ESGetToken<WhatsIt, GadgetRcd> tokenD_in_produceB_;
0077 
0078     edm::ESGetToken<WhatsIt, GadgetRcd> token_in_produceC_;
0079     edm::ESGetToken<WhatsIt, GadgetRcd> tokenA_in_produceC_;
0080     edm::ESGetToken<WhatsIt, GadgetRcd> tokenB_in_produceC_;
0081     edm::ESGetToken<WhatsIt, GadgetRcd> tokenC_in_produceC_;
0082     edm::ESGetToken<WhatsIt, GadgetRcd> tokenD_in_produceC_;
0083 
0084     edm::ESGetToken<WhatsIt, GadgetRcd> token_in_produceD_;
0085     edm::ESGetToken<WhatsIt, GadgetRcd> tokenA_in_produceD_;
0086     edm::ESGetToken<WhatsIt, GadgetRcd> tokenB_in_produceD_;
0087     edm::ESGetToken<WhatsIt, GadgetRcd> tokenC_in_produceD_;
0088     edm::ESGetToken<WhatsIt, GadgetRcd> tokenD_in_produceD_;
0089   };
0090 
0091   ConsumeWhatsIt::ConsumeWhatsIt(edm::ParameterSet const& pset) {
0092     auto collector = setWhatProduced(this, "R");
0093     auto collectorA = setWhatProduced(this, &ConsumeWhatsIt::produceA, edm::es::Label("AR"));
0094     auto collectorB = setWhatProduced(this, &ConsumeWhatsIt::produceB, edm::es::Label("BR"));
0095     auto collectorC = setWhatProduced(this, &ConsumeWhatsIt::produceC, edm::es::Label("CR"));
0096     auto collectorD = setWhatProduced(this, &ConsumeWhatsIt::produceD, edm::es::Label("DR"));
0097 
0098     token_ = collector.consumes(edm::ESInputTag{"", ""});
0099     tokenA_ = collectorA.consumes(edm::ESInputTag{"", ""});
0100     tokenB_ = collectorB.consumes(edm::ESInputTag{"", ""});
0101     tokenC_ = collectorC.consumes(edm::ESInputTag{"", ""});
0102     tokenD_ = collectorD.consumes(edm::ESInputTag{"", ""});
0103 
0104     token_in_produce_ = collector.consumes(pset.getParameter<edm::ESInputTag>("esInputTag_in_produce"));
0105     tokenA_in_produce_ = collector.consumes(pset.getParameter<edm::ESInputTag>("esInputTagA_in_produce"));
0106     tokenB_in_produce_ = collector.consumes(pset.getParameter<edm::ESInputTag>("esInputTagB_in_produce"));
0107     tokenC_in_produce_ = collector.consumes(pset.getParameter<edm::ESInputTag>("esInputTagC_in_produce"));
0108     tokenD_in_produce_ = collector.consumes(pset.getParameter<edm::ESInputTag>("esInputTagD_in_produce"));
0109 
0110     token_in_produceA_ = collectorA.consumes(pset.getParameter<edm::ESInputTag>("esInputTag_in_produceA"));
0111     tokenA_in_produceA_ = collectorA.consumes(pset.getParameter<edm::ESInputTag>("esInputTagA_in_produceA"));
0112     tokenB_in_produceA_ = collectorA.consumes(pset.getParameter<edm::ESInputTag>("esInputTagB_in_produceA"));
0113     tokenC_in_produceA_ = collectorA.consumes(pset.getParameter<edm::ESInputTag>("esInputTagC_in_produceA"));
0114     tokenD_in_produceA_ = collectorA.consumes(pset.getParameter<edm::ESInputTag>("esInputTagD_in_produceA"));
0115 
0116     token_in_produceB_ = collectorB.consumes(pset.getParameter<edm::ESInputTag>("esInputTag_in_produceB"));
0117     tokenA_in_produceB_ = collectorB.consumes(pset.getParameter<edm::ESInputTag>("esInputTagA_in_produceB"));
0118     tokenB_in_produceB_ = collectorB.consumes(pset.getParameter<edm::ESInputTag>("esInputTagB_in_produceB"));
0119     tokenC_in_produceB_ = collectorB.consumes(pset.getParameter<edm::ESInputTag>("esInputTagC_in_produceB"));
0120     tokenD_in_produceB_ = collectorB.consumes(pset.getParameter<edm::ESInputTag>("esInputTagD_in_produceB"));
0121 
0122     token_in_produceC_ = collectorC.consumes(pset.getParameter<edm::ESInputTag>("esInputTag_in_produceC"));
0123     tokenA_in_produceC_ = collectorC.consumes(pset.getParameter<edm::ESInputTag>("esInputTagA_in_produceC"));
0124     tokenB_in_produceC_ = collectorC.consumes(pset.getParameter<edm::ESInputTag>("esInputTagB_in_produceC"));
0125     tokenC_in_produceC_ = collectorC.consumes(pset.getParameter<edm::ESInputTag>("esInputTagC_in_produceC"));
0126     tokenD_in_produceC_ = collectorC.consumes(pset.getParameter<edm::ESInputTag>("esInputTagD_in_produceC"));
0127 
0128     token_in_produceD_ = collectorD.consumes(pset.getParameter<edm::ESInputTag>("esInputTag_in_produceD"));
0129     tokenA_in_produceD_ = collectorD.consumes(pset.getParameter<edm::ESInputTag>("esInputTagA_in_produceD"));
0130     tokenB_in_produceD_ = collectorD.consumes(pset.getParameter<edm::ESInputTag>("esInputTagB_in_produceD"));
0131     tokenC_in_produceD_ = collectorD.consumes(pset.getParameter<edm::ESInputTag>("esInputTagC_in_produceD"));
0132     tokenD_in_produceD_ = collectorD.consumes(pset.getParameter<edm::ESInputTag>("esInputTagD_in_produceD"));
0133   }
0134 
0135   ConsumeWhatsIt::ReturnType ConsumeWhatsIt::produce(const GadgetRcd& iRecord) {
0136     // For purposes of the tests this is currently intended for, we don't
0137     // need to actually get the data. We only need to call consumes.
0138     // At least initially this is only intended for testing the dumpPathsAndConsumes
0139     // option of the Tracer. Possibly it may be useful to extended this in the future...
0140     auto pWhatsIt = std::make_unique<WhatsIt>();
0141     return pWhatsIt;
0142   }
0143 
0144   ConsumeWhatsIt::ReturnTypeA ConsumeWhatsIt::produceA(const GadgetRcd& iRecord) {
0145     auto pWhatsIt = std::make_unique<WhatsIt>();
0146     return pWhatsIt;
0147   }
0148 
0149   ConsumeWhatsIt::ReturnTypeB ConsumeWhatsIt::produceB(const GadgetRcd& iRecord) {
0150     auto pWhatsIt = std::make_shared<WhatsIt>();
0151     return pWhatsIt;
0152   }
0153 
0154   ConsumeWhatsIt::ReturnTypeC ConsumeWhatsIt::produceC(const GadgetRcd& iRecord) {
0155     auto pWhatsIt = std::make_shared<WhatsIt>();
0156     return pWhatsIt;
0157   }
0158 
0159   ConsumeWhatsIt::ReturnTypeD ConsumeWhatsIt::produceD(const GadgetRcd& iRecord) {
0160     auto pWhatsIt = std::make_optional<WhatsIt>();
0161     return pWhatsIt;
0162   }
0163 
0164   void ConsumeWhatsIt::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0165     edm::ParameterSetDescription desc;
0166 
0167     desc.add<edm::ESInputTag>("esInputTag_in_produce");
0168     desc.add<edm::ESInputTag>("esInputTagA_in_produce");
0169     desc.add<edm::ESInputTag>("esInputTagB_in_produce");
0170     desc.add<edm::ESInputTag>("esInputTagC_in_produce");
0171     desc.add<edm::ESInputTag>("esInputTagD_in_produce");
0172 
0173     desc.add<edm::ESInputTag>("esInputTag_in_produceA");
0174     desc.add<edm::ESInputTag>("esInputTagA_in_produceA");
0175     desc.add<edm::ESInputTag>("esInputTagB_in_produceA");
0176     desc.add<edm::ESInputTag>("esInputTagC_in_produceA");
0177     desc.add<edm::ESInputTag>("esInputTagD_in_produceA");
0178 
0179     desc.add<edm::ESInputTag>("esInputTag_in_produceB");
0180     desc.add<edm::ESInputTag>("esInputTagA_in_produceB");
0181     desc.add<edm::ESInputTag>("esInputTagB_in_produceB");
0182     desc.add<edm::ESInputTag>("esInputTagC_in_produceB");
0183     desc.add<edm::ESInputTag>("esInputTagD_in_produceB");
0184 
0185     desc.add<edm::ESInputTag>("esInputTag_in_produceC");
0186     desc.add<edm::ESInputTag>("esInputTagA_in_produceC");
0187     desc.add<edm::ESInputTag>("esInputTagB_in_produceC");
0188     desc.add<edm::ESInputTag>("esInputTagC_in_produceC");
0189     desc.add<edm::ESInputTag>("esInputTagD_in_produceC");
0190 
0191     desc.add<edm::ESInputTag>("esInputTag_in_produceD");
0192     desc.add<edm::ESInputTag>("esInputTagA_in_produceD");
0193     desc.add<edm::ESInputTag>("esInputTagB_in_produceD");
0194     desc.add<edm::ESInputTag>("esInputTagC_in_produceD");
0195     desc.add<edm::ESInputTag>("esInputTagD_in_produceD");
0196     descriptions.addDefault(desc);
0197   }
0198 }  // namespace edmtest
0199 using namespace edmtest;
0200 DEFINE_FWK_EVENTSETUP_MODULE(ConsumeWhatsIt);