Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // new record
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_;  // user's choice of CPE generic
0040 };
0041 
0042 using namespace edm;
0043 
0044 PixelCPEGenericESProducer::PixelCPEGenericESProducer(const edm::ParameterSet& p) {
0045   CPEgenericMode_ = p.getParameter<std::string>("ComponentName");
0046   // Use LA-width from DB. If both (upper and this) are false LA-width is calcuated from LA-offset
0047   useLAWidthFromDB_ = p.getParameter<bool>("useLAWidthFromDB");
0048   // Use Alignment LA-offset
0049   const bool doLorentzFromAlignment = p.getParameter<bool>("doLorentzFromAlignment");
0050   char const* laLabel = "";  // standard LA, from calibration, label=""
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   // add the new la width object
0074   const SiPixelLorentzAngle* lorentzAngleWidthProduct = nullptr;
0075   if (useLAWidthFromDB_) {  // use the width LA
0076     lorentzAngleWidthProduct = &iRecord.get(lorentzAngleWidthToken_);
0077   }
0078   //std::cout<<" la width "<<lorentzAngleWidthProduct<<std::endl; //dk
0079 
0080   const SiPixelGenErrorDBObject* genErrorDBObjectProduct = nullptr;
0081 
0082   // Errors take only from new GenError
0083   if (UseErrorsFromTemplates_) {  // do only when generrors are needed
0084     genErrorDBObjectProduct = &iRecord.get(genErrorDBObjectToken_);
0085     //} else {
0086     //std::cout<<" pass an empty GenError pointer"<<std::endl;
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   // from PixelCPEBase
0102   PixelCPEBase::fillPSetDescription(desc);
0103 
0104   // from PixelCPEGeneric
0105   PixelCPEGeneric::fillPSetDescription(desc);
0106 
0107   // specific to PixelCPEGenericESProducer
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);