File indexing completed on 2024-06-22 02:24:03
0001 #ifndef RecoParticleFlow_PFClusterProducer_HGCRecHitNavigator_h
0002 #define RecoParticleFlow_PFClusterProducer_HGCRecHitNavigator_h
0003
0004 #include "RecoParticleFlow/PFClusterProducer/interface/PFRecHitNavigatorBase.h"
0005 #include "DataFormats/ParticleFlowReco/interface/PFLayer.h"
0006 #include "DataFormats/ForwardDetId/interface/ForwardSubdetector.h"
0007
0008 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0010 #include "FWCore/Framework/interface/ConsumesCollector.h"
0011
0012 template <ForwardSubdetector D1,
0013 typename hgcee,
0014 ForwardSubdetector D2,
0015 typename hgchef,
0016 ForwardSubdetector D3,
0017 typename hgcheb>
0018 class HGCRecHitNavigator : public PFRecHitNavigatorBase {
0019 public:
0020 HGCRecHitNavigator() = default;
0021
0022 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0023 edm::ParameterSetDescription desc;
0024
0025 desc.add<std::string>("name", "PFRecHitHGCNavigator");
0026
0027 edm::ParameterSetDescription descee;
0028 descee.add<std::string>("name", "PFRecHitHGCEENavigator");
0029 descee.add<std::string>("topologySource", "HGCalEESensitive");
0030 desc.add<edm::ParameterSetDescription>("hgcee", descee);
0031
0032 edm::ParameterSetDescription deschef;
0033 deschef.add<std::string>("name", "PFRecHitHGCHENavigator");
0034 deschef.add<std::string>("topologySource", "HGCalHESiliconSensitive");
0035 desc.add<edm::ParameterSetDescription>("hgchef", deschef);
0036
0037 edm::ParameterSetDescription descheb;
0038 descheb.add<std::string>("name", "PFRecHitHGCHENavigator");
0039 descheb.add<std::string>("topologySource", "HGCalHEScintillatorSensitive");
0040 desc.add<edm::ParameterSetDescription>("hgcheb", descheb);
0041
0042 descriptions.add("navigator", desc);
0043 }
0044
0045 HGCRecHitNavigator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& cc) {
0046 const auto& pset_hgcee = iConfig.getParameter<edm::ParameterSet>("hgcee");
0047 if (!pset_hgcee.empty() && !pset_hgcee.getParameter<std::string>("name").empty()) {
0048 eeNav_ = new hgcee(pset_hgcee, cc);
0049 } else {
0050 eeNav_ = nullptr;
0051 }
0052 const auto& pset_hgchef = iConfig.getParameter<edm::ParameterSet>("hgchef");
0053 if (!pset_hgchef.empty() && !pset_hgchef.getParameter<std::string>("name").empty()) {
0054 hefNav_ = new hgchef(pset_hgchef, cc);
0055 } else {
0056 hefNav_ = nullptr;
0057 }
0058 const auto& pset_hgcheb = iConfig.getParameter<edm::ParameterSet>("hgcheb");
0059 if (!pset_hgcheb.empty() && !pset_hgcheb.getParameter<std::string>("name").empty()) {
0060 hebNav_ = new hgcheb(pset_hgcheb, cc);
0061 } else {
0062 hebNav_ = nullptr;
0063 }
0064 }
0065
0066 void init(const edm::EventSetup& iSetup) override {
0067 if (nullptr != eeNav_)
0068 eeNav_->init(iSetup);
0069 if (nullptr != hefNav_)
0070 hefNav_->init(iSetup);
0071 if (nullptr != hebNav_)
0072 hebNav_->init(iSetup);
0073 }
0074
0075 void associateNeighbours(reco::PFRecHit& hit,
0076 std::unique_ptr<reco::PFRecHitCollection>& hits,
0077 edm::RefProd<reco::PFRecHitCollection>& refProd) override {
0078 switch (DetId(hit.detId()).subdetId()) {
0079 case D1:
0080 if (nullptr != eeNav_)
0081 eeNav_->associateNeighbours(hit, hits, refProd);
0082 break;
0083 case D2:
0084 if (nullptr != hefNav_)
0085 hefNav_->associateNeighbours(hit, hits, refProd);
0086 break;
0087 case D3:
0088 if (nullptr != hebNav_)
0089 hebNav_->associateNeighbours(hit, hits, refProd);
0090 break;
0091 default:
0092 break;
0093 }
0094 }
0095
0096 protected:
0097 hgcee* eeNav_;
0098 hgchef* hefNav_;
0099 hgcheb* hebNav_;
0100 };
0101
0102 #endif