Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:26:23

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   // add the new la width object
0061   const SiPixelLorentzAngle* lorentzAngleWidthProduct = nullptr;
0062   lorentzAngleWidthProduct = &iRecord.get(lorentzAngleWidthToken_);
0063 
0064   const SiPixelGenErrorDBObject* genErrorDBObjectProduct = nullptr;
0065 
0066   // Errors take only from new GenError
0067   if (useErrorsFromTemplates_) {  // do only when generrors are needed
0068     genErrorDBObjectProduct = &iRecord.get(genErrorDBObjectToken_);
0069     //} else {
0070     //std::cout<<" pass an empty GenError pointer"<<std::endl;
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   // from PixelCPEBase
0086   PixelCPEBase::fillPSetDescription(desc);
0087 
0088   // from PixelCPEFast
0089   PixelCPEFast<TrackerTraits>::fillPSetDescription(desc);
0090 
0091   // used by PixelCPEFast
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);
0109 using PixelCPEFastESProducerHIonPhase1 = PixelCPEFastESProducerT<pixelTopology::HIonPhase1>;
0110 DEFINE_FWK_EVENTSETUP_MODULE(PixelCPEFastESProducerHIonPhase1);