Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #include "RecoLocalTracker/SiPixelRecHits/interface/PixelCPEClusterRepair.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 "CalibTracker/Records/interface/SiPixelTemplateDBObjectESProducerRcd.h"
0009 #include "CalibTracker/Records/interface/SiPixel2DTemplateDBObjectESProducerRcd.h"
0010 #include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h"
0011 #include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
0012 
0013 #include "FWCore/Framework/interface/EventSetup.h"
0014 #include "FWCore/Framework/interface/ESHandle.h"
0015 #include "FWCore/Framework/interface/ModuleFactory.h"
0016 #include "FWCore/Framework/interface/ESProducer.h"
0017 
0018 #include <string>
0019 #include <memory>
0020 
0021 class PixelCPEClusterRepairESProducer : public edm::ESProducer {
0022 public:
0023   PixelCPEClusterRepairESProducer(const edm::ParameterSet& p);
0024   ~PixelCPEClusterRepairESProducer() override;
0025   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0026   std::unique_ptr<PixelClusterParameterEstimator> produce(const TkPixelCPERecord&);
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<std::vector<SiPixelTemplateStore>, SiPixelTemplateDBObjectESProducerRcd> templateStoreToken_;
0034   edm::ESGetToken<SiPixelTemplateDBObject, SiPixelTemplateDBObjectESProducerRcd> templateDBobjectToken_;
0035   edm::ESGetToken<SiPixel2DTemplateDBObject, SiPixel2DTemplateDBObjectESProducerRcd> templateDBobject2DToken_;
0036 
0037   edm::ParameterSet pset_;
0038   bool doLorentzFromAlignment_;
0039   bool useLAFromDB_;
0040 };
0041 
0042 using namespace edm;
0043 
0044 PixelCPEClusterRepairESProducer::PixelCPEClusterRepairESProducer(const edm::ParameterSet& p) {
0045   std::string myname = p.getParameter<std::string>("ComponentName");
0046 
0047   useLAFromDB_ = p.getParameter<bool>("useLAFromDB");
0048   doLorentzFromAlignment_ = p.getParameter<bool>("doLorentzFromAlignment");
0049 
0050   pset_ = p;
0051   auto c = setWhatProduced(this, myname);
0052   magfieldToken_ = c.consumes();
0053   pDDToken_ = c.consumes();
0054   hTTToken_ = c.consumes();
0055   templateStoreToken_ = c.consumes();
0056   templateDBobjectToken_ = c.consumes();
0057   templateDBobject2DToken_ = c.consumes();
0058   if (useLAFromDB_ || doLorentzFromAlignment_) {
0059     char const* laLabel = doLorentzFromAlignment_ ? "fromAlignment" : "";
0060     lorentzAngleToken_ = c.consumes(edm::ESInputTag("", laLabel));
0061   }
0062 }
0063 
0064 PixelCPEClusterRepairESProducer::~PixelCPEClusterRepairESProducer() {}
0065 
0066 void PixelCPEClusterRepairESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0067   // templates2
0068   edm::ParameterSetDescription desc;
0069   desc.add<std::string>("ComponentName", "PixelCPEClusterRepair");
0070 
0071   // from PixelCPEBase
0072   PixelCPEBase::fillPSetDescription(desc);
0073 
0074   // from PixelCPEClusterRepair
0075   PixelCPEClusterRepair::fillPSetDescription(desc);
0076 
0077   // specific to PixelCPEClusterRepairESProducer
0078   descriptions.add("_templates2_default", desc);
0079 }
0080 
0081 std::unique_ptr<PixelClusterParameterEstimator> PixelCPEClusterRepairESProducer::produce(
0082     const TkPixelCPERecord& iRecord) {
0083   // Normal, default LA is used in case of template failure, load it unless
0084   // turned off
0085   // if turned off, null is ok, becomes zero
0086   const SiPixelLorentzAngle* lorentzAngleProduct = nullptr;
0087   if (useLAFromDB_ || doLorentzFromAlignment_) {
0088     lorentzAngleProduct = &iRecord.get(lorentzAngleToken_);
0089   }
0090 
0091   return std::make_unique<PixelCPEClusterRepair>(pset_,
0092                                                  &iRecord.get(magfieldToken_),
0093                                                  iRecord.get(pDDToken_),
0094                                                  iRecord.get(hTTToken_),
0095                                                  lorentzAngleProduct,
0096                                                  &iRecord.get(templateStoreToken_),
0097                                                  &iRecord.get(templateDBobjectToken_),
0098                                                  &iRecord.get(templateDBobject2DToken_));
0099 }
0100 
0101 DEFINE_FWK_EVENTSETUP_MODULE(PixelCPEClusterRepairESProducer);