Back to home page

Project CMSSW displayed by LXR

 
 

    


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