File indexing completed on 2025-01-31 02:19:53
0001 #ifndef RecoBTau_JetTagComputerESProducer_h
0002 #define RecoBTau_JetTagComputerESProducer_h
0003
0004 #include <string>
0005 #include <memory>
0006 #include <type_traits>
0007
0008 #include "FWCore/Framework/interface/ESProducer.h"
0009 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "RecoBTau/JetTagComputer/interface/JetTagComputerRecord.h"
0012 #include "RecoBTau/JetTagComputer/interface/JetTagComputer.h"
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 namespace jet_tag_computer_esproducer_impl {
0031 template <typename ConcreteJetTagComputer, bool>
0032 class JetTagComputerESProducer : public edm::ESProducer {
0033 private:
0034
0035 static_assert(std::is_convertible_v<ConcreteJetTagComputer*, JetTagComputer*>);
0036
0037 public:
0038 using Tokens = typename ConcreteJetTagComputer::Tokens;
0039
0040 JetTagComputerESProducer(const edm::ParameterSet& pset)
0041 : m_tokens(pset, setWhatProduced(this, pset.getParameter<std::string>("@module_label"))), m_pset(pset) {}
0042
0043 std::unique_ptr<JetTagComputer> produce(const JetTagComputerRecord& record) {
0044 std::unique_ptr<JetTagComputer> jetTagComputer = std::make_unique<ConcreteJetTagComputer>(m_pset, m_tokens);
0045 jetTagComputer->initialize(record);
0046 jetTagComputer->setupDone();
0047 return jetTagComputer;
0048 }
0049
0050 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0051 edm::ParameterSetDescription desc;
0052 ConcreteJetTagComputer::fillPSetDescription(desc);
0053 descriptions.addWithDefaultLabel(desc);
0054 }
0055
0056 private:
0057 const Tokens m_tokens;
0058 const edm::ParameterSet m_pset;
0059 };
0060
0061 template <typename ConcreteJetTagComputer>
0062 class JetTagComputerESProducer<ConcreteJetTagComputer, true> : public edm::ESProducer {
0063 private:
0064
0065 static_assert(std::is_convertible_v<ConcreteJetTagComputer*, JetTagComputer*>);
0066
0067 public:
0068 JetTagComputerESProducer(const edm::ParameterSet& pset) : m_pset(pset) {
0069 setWhatProduced(this, pset.getParameter<std::string>("@module_label"));
0070 }
0071
0072 std::unique_ptr<JetTagComputer> produce(const JetTagComputerRecord& record) {
0073 std::unique_ptr<JetTagComputer> jetTagComputer = std::make_unique<ConcreteJetTagComputer>(m_pset);
0074 jetTagComputer->initialize(record);
0075 jetTagComputer->setupDone();
0076 return jetTagComputer;
0077 }
0078
0079 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0080 edm::ParameterSetDescription desc;
0081 ConcreteJetTagComputer::fillPSetDescription(desc);
0082 descriptions.addWithDefaultLabel(desc);
0083 }
0084
0085 private:
0086 const edm::ParameterSet m_pset;
0087 };
0088 }
0089
0090 template <typename T>
0091 using JetTagComputerESProducer =
0092 jet_tag_computer_esproducer_impl::JetTagComputerESProducer<T, std::is_same_v<typename T::Tokens, void>>;
0093
0094 #endif