File indexing completed on 2025-01-31 02:20:02
0001 #include "FWCore/Framework/interface/ESHandle.h"
0002 #include "FWCore/Framework/interface/ESProducer.h"
0003 #include "FWCore/Framework/interface/EventSetup.h"
0004 #include "FWCore/Framework/interface/ModuleFactory.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "TrackingTools/GsfTools/interface/CloseComponentsMerger.h"
0007 #include "TrackingTools/GsfTools/interface/DistanceBetweenComponents.h"
0008 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0009
0010 #include <iostream>
0011 #include <memory>
0012 #include <string>
0013
0014
0015
0016
0017
0018 template <unsigned int N>
0019 class CloseComponentsMergerESProducer : public edm::ESProducer {
0020 public:
0021 CloseComponentsMergerESProducer(const edm::ParameterSet& p);
0022 ~CloseComponentsMergerESProducer() override = default;
0023 std::unique_ptr<MultiGaussianStateMerger<N> > produce(const TrackingComponentsRecord&);
0024
0025 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0026
0027 private:
0028 const int maxComp_;
0029 const edm::ESGetToken<DistanceBetweenComponents<N>, TrackingComponentsRecord> distToken_;
0030 };
0031
0032 #include "FWCore/Framework/interface/ModuleFactory.h"
0033 typedef CloseComponentsMergerESProducer<5> CloseComponentsMergerESProducer5D;
0034 DEFINE_FWK_EVENTSETUP_MODULE(CloseComponentsMergerESProducer5D);
0035
0036 template <unsigned int N>
0037 CloseComponentsMergerESProducer<N>::CloseComponentsMergerESProducer(const edm::ParameterSet& p)
0038 : maxComp_(p.getParameter<int>("MaxComponents")),
0039 distToken_(setWhatProduced(this, p.getParameter<std::string>("ComponentName"))
0040 .consumes(edm::ESInputTag("", p.getParameter<std::string>("DistanceMeasure")))) {}
0041
0042 template <unsigned int N>
0043 typename std::unique_ptr<MultiGaussianStateMerger<N> > CloseComponentsMergerESProducer<N>::produce(
0044 const TrackingComponentsRecord& iRecord) {
0045 return std::unique_ptr<MultiGaussianStateMerger<N> >(
0046 new CloseComponentsMerger<N>(maxComp_, &iRecord.get(distToken_)));
0047 }
0048
0049 template <unsigned int N>
0050 void CloseComponentsMergerESProducer<N>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0051 edm::ParameterSetDescription desc;
0052 desc.add<std::string>("ComponentName", "");
0053 desc.add<int>("MaxComponents", 1);
0054 desc.add<std::string>("DistanceMeasure", "");
0055 descriptions.addWithDefaultLabel(desc);
0056 }