Skip to content

Commit

Permalink
Migrate ESProducers to use ESGetToken's
Browse files Browse the repository at this point in the history
This is now mandatory after cms-sw#28223.
  • Loading branch information
fwyzard committed Oct 19, 2020
1 parent bbdf9f7 commit 4662ca8
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 78 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ class SiPixelGainCalibrationForHLTGPUESProducer : public edm::ESProducer {
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
edm::ESGetToken<SiPixelGainCalibrationForHLT, SiPixelGainCalibrationForHLTRcd> gainsToken_;
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geometryToken_;
};

SiPixelGainCalibrationForHLTGPUESProducer::SiPixelGainCalibrationForHLTGPUESProducer(const edm::ParameterSet& iConfig) {
setWhatProduced(this);
setWhatProduced(this).setConsumes(gainsToken_).setConsumes(geometryToken_);
}

void SiPixelGainCalibrationForHLTGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
Expand All @@ -33,12 +35,8 @@ void SiPixelGainCalibrationForHLTGPUESProducer::fillDescriptions(edm::Configurat

std::unique_ptr<SiPixelGainCalibrationForHLTGPU> SiPixelGainCalibrationForHLTGPUESProducer::produce(
const SiPixelGainCalibrationForHLTGPURcd& iRecord) {
edm::ESHandle<SiPixelGainCalibrationForHLT> gains;
iRecord.getRecord<SiPixelGainCalibrationForHLTRcd>().get(gains);

edm::ESHandle<TrackerGeometry> geom;
iRecord.getRecord<TrackerDigiGeometryRecord>().get(geom);

auto gains = iRecord.getHandle(gainsToken_);
auto geom = iRecord.getHandle(geometryToken_);
return std::make_unique<SiPixelGainCalibrationForHLTGPU>(*gains, *geom);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,21 @@ class SiPixelFedCablingMapGPUWrapperESProducer : public edm::ESProducer {
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
std::string cablingMapLabel_;
edm::ESGetToken<SiPixelFedCablingMap, SiPixelFedCablingMapRcd> cablingMapToken_;
edm::ESGetToken<SiPixelQuality, SiPixelQualityRcd> qualityToken_;
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geometryToken_;
bool useQuality_;
};

SiPixelFedCablingMapGPUWrapperESProducer::SiPixelFedCablingMapGPUWrapperESProducer(const edm::ParameterSet& iConfig)
: cablingMapLabel_(iConfig.getParameter<std::string>("CablingMapLabel")),
useQuality_(iConfig.getParameter<bool>("UseQualityInfo")) {
std::string myname = iConfig.getParameter<std::string>("ComponentName");
setWhatProduced(this, myname);
: useQuality_(iConfig.getParameter<bool>("UseQualityInfo")) {
std::string component = iConfig.getParameter<std::string>("ComponentName");
auto cc = setWhatProduced(this, component);
cc.setConsumes(cablingMapToken_, edm::ESInputTag{"", iConfig.getParameter<std::string>("CablingMapLabel")});
if (useQuality_) {
cc.setConsumes(qualityToken_);
}
cc.setConsumes(geometryToken_);
}

void SiPixelFedCablingMapGPUWrapperESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
Expand All @@ -45,18 +51,15 @@ void SiPixelFedCablingMapGPUWrapperESProducer::fillDescriptions(edm::Configurati

std::unique_ptr<SiPixelFedCablingMapGPUWrapper> SiPixelFedCablingMapGPUWrapperESProducer::produce(
const CkfComponentsRecord& iRecord) {
edm::ESTransientHandle<SiPixelFedCablingMap> cablingMap;
iRecord.getRecord<SiPixelFedCablingMapRcd>().get(cablingMapLabel_, cablingMap);
auto cablingMap = iRecord.getTransientHandle(cablingMapToken_);

const SiPixelQuality* quality = nullptr;
if (useQuality_) {
edm::ESTransientHandle<SiPixelQuality> qualityInfo;
iRecord.getRecord<SiPixelQualityRcd>().get(qualityInfo);
auto qualityInfo = iRecord.getTransientHandle(qualityToken_);
quality = qualityInfo.product();
}

edm::ESTransientHandle<TrackerGeometry> geom;
iRecord.getRecord<TrackerDigiGeometryRecord>().get(geom);
auto geom = iRecord.getTransientHandle(geometryToken_);

return std::make_unique<SiPixelFedCablingMapGPUWrapper>(*cablingMap, *geom, quality);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ class SiPixelRawToClusterCUDA : public edm::stream::EDProducer<edm::ExternalWork

CUDAContextState ctxState_;

edm::ESWatcher<SiPixelFedCablingMapRcd> recordWatcher;
edm::ESWatcher<SiPixelFedCablingMapRcd> recordWatcher_;
edm::ESGetToken<SiPixelFedCablingMapGPUWrapper, CkfComponentsRecord> gpuMapToken_;
edm::ESGetToken<SiPixelGainCalibrationForHLTGPU, SiPixelGainCalibrationForHLTGPURcd> gainsToken_;
edm::ESGetToken<SiPixelFedCablingMap, SiPixelFedCablingMapRcd> cablingMapToken_;

std::string cablingMapLabel_;
std::unique_ptr<SiPixelFedCablingTree> cabling_;
std::vector<unsigned int> fedIds_;
const SiPixelFedCablingMap* cablingMap_ = nullptr;
Expand All @@ -78,7 +80,10 @@ SiPixelRawToClusterCUDA::SiPixelRawToClusterCUDA(const edm::ParameterSet& iConfi
: rawGetToken_(consumes<FEDRawDataCollection>(iConfig.getParameter<edm::InputTag>("InputLabel"))),
digiPutToken_(produces<CUDAProduct<SiPixelDigisCUDA>>()),
clusterPutToken_(produces<CUDAProduct<SiPixelClustersCUDA>>()),
cablingMapLabel_(iConfig.getParameter<std::string>("CablingMapLabel")),
gpuMapToken_(esConsumes<SiPixelFedCablingMapGPUWrapper, CkfComponentsRecord>()),
gainsToken_(esConsumes<SiPixelGainCalibrationForHLTGPU, SiPixelGainCalibrationForHLTGPURcd>()),
cablingMapToken_(esConsumes<SiPixelFedCablingMap, SiPixelFedCablingMapRcd>(
edm::ESInputTag("", iConfig.getParameter<std::string>("CablingMapLabel")))),
includeErrors_(iConfig.getParameter<bool>("IncludeErrors")),
useQuality_(iConfig.getParameter<bool>("UseQualityInfo")),
usePilotBlade_(iConfig.getParameter<bool>("UsePilotBlade")) // Control the usage of pilot-blade data, FED=40
Expand Down Expand Up @@ -125,8 +130,7 @@ void SiPixelRawToClusterCUDA::acquire(const edm::Event& iEvent,
edm::WaitingTaskWithArenaHolder waitingTaskHolder) {
CUDAScopedContextAcquire ctx{iEvent.streamID(), std::move(waitingTaskHolder), ctxState_};

edm::ESHandle<SiPixelFedCablingMapGPUWrapper> hgpuMap;
iSetup.get<CkfComponentsRecord>().get(hgpuMap);
auto hgpuMap = iSetup.getHandle(gpuMapToken_);
if (hgpuMap->hasQuality() != useQuality_) {
throw cms::Exception("LogicError")
<< "UseQuality of the module (" << useQuality_
Expand All @@ -135,8 +139,7 @@ void SiPixelRawToClusterCUDA::acquire(const edm::Event& iEvent,
// get the GPU product already here so that the async transfer can begin
const auto* gpuMap = hgpuMap->getGPUProductAsync(ctx.stream());

edm::ESHandle<SiPixelGainCalibrationForHLTGPU> hgains;
iSetup.get<SiPixelGainCalibrationForHLTGPURcd>().get(hgains);
auto hgains = iSetup.getHandle(gainsToken_);
// get the GPU product already here so that the async transfer can begin
const auto* gpuGains = hgains->getGPUProductAsync(ctx.stream());

Expand All @@ -155,10 +158,9 @@ void SiPixelRawToClusterCUDA::acquire(const edm::Event& iEvent,
}

// initialize cabling map or update if necessary
if (recordWatcher.check(iSetup)) {
if (recordWatcher_.check(iSetup)) {
// cabling map, which maps online address (fed->link->ROC->local pixel) to offline (DetId->global pixel)
edm::ESTransientHandle<SiPixelFedCablingMap> cablingMap;
iSetup.get<SiPixelFedCablingMapRcd>().get(cablingMapLabel_, cablingMap); //Tav
auto cablingMap = iSetup.getTransientHandle(cablingMapToken_);
cablingMap_ = cablingMap.product();
fedIds_ = cablingMap->fedIds();
cabling_ = cablingMap->cablingTree();
Expand Down
4 changes: 3 additions & 1 deletion RecoLocalTracker/SiPixelRecHits/interface/PixelCPEFast.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ class PixelCPEFast final : public PixelCPEBase {
const SiPixelGenErrorDBObject *,
const SiPixelLorentzAngle *);

~PixelCPEFast() override;
~PixelCPEFast() override = default;

static void fillPSetDescription(edm::ParameterSetDescription &desc);

// The return value can only be used safely in kernels launched on
// the same cudaStream, or after cudaStreamSynchronize.
Expand Down
102 changes: 55 additions & 47 deletions RecoLocalTracker/SiPixelRecHits/plugins/PixelCPEFastESProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,90 +5,98 @@
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include "Geometry/Records/interface/TrackerTopologyRcd.h"
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h"
#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"

#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"

// new record
#include "CondFormats/DataRecord/interface/SiPixelGenErrorDBObjectRcd.h"

#include "FWCore/Framework/interface/ESProducer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "RecoLocalTracker/Records/interface/TkPixelCPERecord.h"
#include "RecoLocalTracker/ClusterParameterEstimator/interface/PixelClusterParameterEstimator.h"
#include <string>
#include <memory>

class PixelCPEFastESProducer : public edm::ESProducer {
public:
PixelCPEFastESProducer(const edm::ParameterSet &p);
std::shared_ptr<PixelClusterParameterEstimator> produce(const TkPixelCPERecord &);
PixelCPEFastESProducer(const edm::ParameterSet& p);
std::unique_ptr<PixelClusterParameterEstimator> produce(const TkPixelCPERecord&);
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
std::shared_ptr<PixelClusterParameterEstimator> cpe_;
edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magfieldToken_;
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> pDDToken_;
edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> hTTToken_;
edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> lorentzAngleToken_;
edm::ESGetToken<SiPixelLorentzAngle, SiPixelLorentzAngleRcd> lorentzAngleWidthToken_;
edm::ESGetToken<SiPixelGenErrorDBObject, SiPixelGenErrorDBObjectRcd> genErrorDBObjectToken_;

edm::ParameterSet pset_;
edm::ESInputTag magname_;
bool UseErrorsFromTemplates_;
};

#include <string>
#include <memory>

using namespace edm;

PixelCPEFastESProducer::PixelCPEFastESProducer(const edm::ParameterSet &p) {
PixelCPEFastESProducer::PixelCPEFastESProducer(const edm::ParameterSet& p) {
std::string myname = p.getParameter<std::string>("ComponentName");
magname_ = p.existsAs<edm::ESInputTag>("MagneticFieldRecord") ? p.getParameter<edm::ESInputTag>("MagneticFieldRecord")
: edm::ESInputTag("");
auto magname = p.getParameter<edm::ESInputTag>("MagneticFieldRecord");
UseErrorsFromTemplates_ = p.getParameter<bool>("UseErrorsFromTemplates");

pset_ = p;
setWhatProduced(this, myname);
auto c = setWhatProduced(this, myname);
c.setConsumes(magfieldToken_, magname)
.setConsumes(pDDToken_)
.setConsumes(hTTToken_)
.setConsumes(lorentzAngleToken_, edm::ESInputTag(""));
c.setConsumes(lorentzAngleWidthToken_, edm::ESInputTag("", "forWidth"));
if (UseErrorsFromTemplates_) {
c.setConsumes(genErrorDBObjectToken_);
}
}

std::shared_ptr<PixelClusterParameterEstimator> PixelCPEFastESProducer::produce(const TkPixelCPERecord &iRecord) {
ESHandle<MagneticField> magfield;
iRecord.getRecord<IdealMagneticFieldRecord>().get(magname_, magfield);

edm::ESHandle<TrackerGeometry> pDD;
iRecord.getRecord<TrackerDigiGeometryRecord>().get(pDD);

edm::ESHandle<TrackerTopology> hTT;
iRecord.getRecord<TrackerDigiGeometryRecord>().getRecord<TrackerTopologyRcd>().get(hTT);

// Lorant angle for offsets
ESHandle<SiPixelLorentzAngle> lorentzAngle;
iRecord.getRecord<SiPixelLorentzAngleRcd>().get(lorentzAngle);

std::unique_ptr<PixelClusterParameterEstimator> PixelCPEFastESProducer::produce(const TkPixelCPERecord& iRecord) {
// add the new la width object
ESHandle<SiPixelLorentzAngle> lorentzAngleWidth;
const SiPixelLorentzAngle *lorentzAngleWidthProduct = nullptr;
iRecord.getRecord<SiPixelLorentzAngleRcd>().get("forWidth", lorentzAngleWidth);
lorentzAngleWidthProduct = lorentzAngleWidth.product();
const SiPixelLorentzAngle* lorentzAngleWidthProduct = nullptr;
lorentzAngleWidthProduct = &iRecord.get(lorentzAngleWidthToken_);

const SiPixelGenErrorDBObject *genErrorDBObjectProduct = nullptr;
const SiPixelGenErrorDBObject* genErrorDBObjectProduct = nullptr;

// Errors take only from new GenError
ESHandle<SiPixelGenErrorDBObject> genErrorDBObject;
if (UseErrorsFromTemplates_) { // do only when generrors are needed
iRecord.getRecord<SiPixelGenErrorDBObjectRcd>().get(genErrorDBObject);
genErrorDBObjectProduct = genErrorDBObject.product();
genErrorDBObjectProduct = &iRecord.get(genErrorDBObjectToken_);
//} else {
//std::cout<<" pass an empty GenError pointer"<<std::endl;
}
cpe_ = std::make_shared<PixelCPEFast>(pset_,
magfield.product(),
*pDD.product(),
*hTT.product(),
lorentzAngle.product(),
return std::make_unique<PixelCPEFast>(pset_,
&iRecord.get(magfieldToken_),
iRecord.get(pDDToken_),
iRecord.get(hTTToken_),
&iRecord.get(lorentzAngleToken_),
genErrorDBObjectProduct,
lorentzAngleWidthProduct);

return cpe_;
}

#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Utilities/interface/typelookup.h"
#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h"
void PixelCPEFastESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
// PixelCPEFastESProducer
edm::ParameterSetDescription desc;
desc.add<bool>("DoLorentz", false);
desc.add<double>("lAWidthFPix", 0);
desc.add<bool>("useLAAlignmentOffsets", false);
desc.add<bool>("LoadTemplatesFromDB", true);
desc.add<bool>("UseErrorsFromTemplates", true);
desc.add<double>("EdgeClusterErrorX", 50.0);
desc.add<edm::ESInputTag>("MagneticFieldRecord", edm::ESInputTag("",""));
desc.add<bool>("useLAWidthFromDB", true);
desc.add<bool>("TruncatePixelCharge", true);
desc.add<int>("ClusterProbComputationFlag", 0);
desc.add<double>("lAOffset", 0);
desc.add<double>("EdgeClusterErrorY", 85.0);
desc.add<std::string>("ComponentName", "PixelCPEFast");
desc.add<double>("lAWidthBPix", 0);
desc.add<bool>("Alpha2Order", true);
descriptions.add("PixelCPEFastESProducer", desc);
}

DEFINE_FWK_EVENTSETUP_MODULE(PixelCPEFastESProducer);
5 changes: 3 additions & 2 deletions RecoLocalTracker/SiPixelRecHits/src/PixelCPEFast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,6 @@ void PixelCPEFast::fillParamsForGpu() {
memcpy(m_layerGeometry.layer, phase1PixelTopology::layer.data(), phase1PixelTopology::layer.size());
}

PixelCPEFast::~PixelCPEFast() {}

PixelCPEFast::GPUData::~GPUData() {
if (d_paramsOnGPU != nullptr) {
cudaFree((void*)h_paramsOnGPU.m_commonParams);
Expand Down Expand Up @@ -583,3 +581,6 @@ LocalError PixelCPEFast::localError(DetParam const& theDetParam, ClusterParam& t

return LocalError(xerr_sq, 0, yerr_sq);
}

void PixelCPEFast::fillPSetDescription(edm::ParameterSetDescription& desc) {
}

0 comments on commit 4662ca8

Please sign in to comment.