Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-21 01:40:02

0001 #include "FWCore/Framework/interface/ESProducer.h"
0002 #include "FWCore/Framework/interface/ESHandle.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/Framework/interface/ModuleFactory.h"
0005 
0006 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0007 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0008 #include "MagneticField/Engine/interface/MagneticField.h"
0009 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0010 #include "CondFormats/DataRecord/interface/SiPhase2OuterTrackerLorentzAngleRcd.h"
0011 
0012 #include "RecoLocalTracker/Records/interface/TkPhase2OTCPERecord.h"
0013 #include "RecoLocalTracker/ClusterParameterEstimator/interface/ClusterParameterEstimator.h"
0014 #include "RecoLocalTracker/Phase2TrackerRecHits/interface/Phase2StripCPE.h"
0015 #include "RecoLocalTracker/Phase2TrackerRecHits/interface/Phase2StripCPEGeometric.h"
0016 
0017 #include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h"
0018 
0019 #include <memory>
0020 #include <map>
0021 
0022 class Phase2StripCPEESProducer : public edm::ESProducer {
0023 public:
0024   Phase2StripCPEESProducer(const edm::ParameterSet&);
0025   std::unique_ptr<ClusterParameterEstimator<Phase2TrackerCluster1D> > produce(const TkPhase2OTCPERecord& iRecord);
0026   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0027 
0028 private:
0029   enum CPE_t { DEFAULT, GEOMETRIC };
0030 
0031   edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magfieldToken_;
0032   edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> pDDToken_;
0033   edm::ESGetToken<SiPhase2OuterTrackerLorentzAngle, SiPhase2OuterTrackerLorentzAngleRcd> lorentzAngleToken_;
0034   CPE_t cpeNum_;
0035   edm::ParameterSet pset_;
0036 };
0037 
0038 Phase2StripCPEESProducer::Phase2StripCPEESProducer(const edm::ParameterSet& p) {
0039   std::string name = p.getParameter<std::string>("ComponentType");
0040 
0041   std::map<std::string, CPE_t> enumMap;
0042   enumMap[std::string("Phase2StripCPE")] = DEFAULT;
0043   enumMap[std::string("Phase2StripCPEGeometric")] = GEOMETRIC;
0044   if (enumMap.find(name) == enumMap.end())
0045     throw cms::Exception("Unknown StripCPE type") << name;
0046 
0047   cpeNum_ = enumMap[name];
0048   pset_ = p.getParameter<edm::ParameterSet>("parameters");
0049   auto c = setWhatProduced(this, name);
0050   if (cpeNum_ != GEOMETRIC) {
0051     magfieldToken_ = c.consumes();
0052     pDDToken_ = c.consumes();
0053     lorentzAngleToken_ = c.consumes();
0054   }
0055 }
0056 
0057 void Phase2StripCPEESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0058   edm::ParameterSetDescription desc;
0059   desc.add<std::string>("ComponentType", "Phase2StripCPE");
0060 
0061   {
0062     edm::ParameterSetDescription paramsDesc;
0063     Phase2StripCPE::fillPSetDescription(paramsDesc);
0064     desc.add<edm::ParameterSetDescription>("parameters", paramsDesc);
0065   }
0066 
0067   descriptions.addWithDefaultLabel(desc);
0068 }
0069 
0070 std::unique_ptr<ClusterParameterEstimator<Phase2TrackerCluster1D> > Phase2StripCPEESProducer::produce(
0071     const TkPhase2OTCPERecord& iRecord) {
0072   std::unique_ptr<ClusterParameterEstimator<Phase2TrackerCluster1D> > cpe_;
0073   switch (cpeNum_) {
0074     case DEFAULT:
0075       cpe_ = std::make_unique<Phase2StripCPE>(
0076           pset_, iRecord.get(magfieldToken_), iRecord.get(pDDToken_), iRecord.get(lorentzAngleToken_));
0077       break;
0078 
0079     case GEOMETRIC:
0080       cpe_ = std::make_unique<Phase2StripCPEGeometric>(pset_);
0081       break;
0082   }
0083   return cpe_;
0084 }
0085 
0086 #include "FWCore/Framework/interface/ModuleFactory.h"
0087 DEFINE_FWK_EVENTSETUP_MODULE(Phase2StripCPEESProducer);