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