File indexing completed on 2023-03-17 11:19:39
0001 #include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEGeneric.h"
0002 #include "MagneticField/Engine/interface/MagneticField.h"
0003 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0004 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0005 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0006 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0007 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0008 #include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h"
0009 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
0010
0011 #include "FWCore/Framework/interface/EventSetup.h"
0012 #include "FWCore/Framework/interface/ESHandle.h"
0013 #include "FWCore/Framework/interface/ModuleFactory.h"
0014 #include "FWCore/Framework/interface/ESProducer.h"
0015
0016
0017 #include "CondFormats/DataRecord/interface/SiPixelGenErrorDBObjectRcd.h"
0018
0019 #include <string>
0020 #include <memory>
0021
0022 class PixelCPEGenericESProducer : public edm::ESProducer {
0023 public:
0024 PixelCPEGenericESProducer(const edm::ParameterSet& p);
0025 std::unique_ptr<PixelClusterParameterEstimator> produce(const TkPixelCPERecord&);
0026 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0027
0028 private:
0029 edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magfieldToken_;
0030 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> pDDToken_;
0031 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> hTTToken_;
0032 edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> lorentzAngleToken_;
0033 edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> lorentzAngleWidthToken_;
0034 edm::ESGetToken<SiPixelGenErrorDBObject, SiPixelGenErrorDBObjectRcd> genErrorDBObjectToken_;
0035
0036 edm::ParameterSet pset_;
0037 bool useLAWidthFromDB_;
0038 bool UseErrorsFromTemplates_;
0039 std::string CPEgenericMode_;
0040 };
0041
0042 using namespace edm;
0043
0044 PixelCPEGenericESProducer::PixelCPEGenericESProducer(const edm::ParameterSet& p) {
0045 CPEgenericMode_ = p.getParameter<std::string>("ComponentName");
0046
0047 useLAWidthFromDB_ = p.getParameter<bool>("useLAWidthFromDB");
0048
0049 const bool doLorentzFromAlignment = p.getParameter<bool>("doLorentzFromAlignment");
0050 char const* laLabel = "";
0051 if (doLorentzFromAlignment) {
0052 laLabel = "fromAlignment";
0053 }
0054
0055 auto magname = p.getParameter<edm::ESInputTag>("MagneticFieldRecord");
0056 UseErrorsFromTemplates_ = p.getParameter<bool>("UseErrorsFromTemplates");
0057
0058 pset_ = p;
0059 auto c = setWhatProduced(this, CPEgenericMode_);
0060 magfieldToken_ = c.consumes(magname);
0061 pDDToken_ = c.consumes();
0062 hTTToken_ = c.consumes();
0063 lorentzAngleToken_ = c.consumes(edm::ESInputTag("", laLabel));
0064 if (useLAWidthFromDB_) {
0065 lorentzAngleWidthToken_ = c.consumes(edm::ESInputTag("", "forWidth"));
0066 }
0067 if (UseErrorsFromTemplates_) {
0068 genErrorDBObjectToken_ = c.consumes();
0069 }
0070 }
0071
0072 std::unique_ptr<PixelClusterParameterEstimator> PixelCPEGenericESProducer::produce(const TkPixelCPERecord& iRecord) {
0073
0074 const SiPixelLorentzAngle* lorentzAngleWidthProduct = nullptr;
0075 if (useLAWidthFromDB_) {
0076 lorentzAngleWidthProduct = &iRecord.get(lorentzAngleWidthToken_);
0077 }
0078
0079
0080 const SiPixelGenErrorDBObject* genErrorDBObjectProduct = nullptr;
0081
0082
0083 if (UseErrorsFromTemplates_) {
0084 genErrorDBObjectProduct = &iRecord.get(genErrorDBObjectToken_);
0085
0086
0087 }
0088
0089 return std::make_unique<PixelCPEGeneric>(pset_,
0090 &iRecord.get(magfieldToken_),
0091 iRecord.get(pDDToken_),
0092 iRecord.get(hTTToken_),
0093 &iRecord.get(lorentzAngleToken_),
0094 genErrorDBObjectProduct,
0095 lorentzAngleWidthProduct);
0096 }
0097
0098 void PixelCPEGenericESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0099 edm::ParameterSetDescription desc;
0100
0101
0102 PixelCPEBase::fillPSetDescription(desc);
0103
0104
0105 PixelCPEGeneric::fillPSetDescription(desc);
0106
0107
0108 desc.add<std::string>("ComponentName", "PixelCPEGeneric");
0109 desc.add<edm::ESInputTag>("MagneticFieldRecord", edm::ESInputTag(""));
0110 descriptions.add("_generic_default", desc);
0111 }
0112
0113 DEFINE_FWK_EVENTSETUP_MODULE(PixelCPEGenericESProducer);