Skip to content

Commit

Permalink
Merge pull request #33015 from Dr15Jones/fixDeDxEstimatorProducer
Browse files Browse the repository at this point in the history
Apply esConsumes to DeDxEstimatorProducer
  • Loading branch information
cmsbuild authored Mar 8, 2021
2 parents 7da081e + 4aef1c5 commit c0eb377
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"

#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
Expand Down Expand Up @@ -99,6 +100,7 @@ class FastTrackDeDxProducer : public edm::stream::EDProducer<> {

edm::EDGetTokenT<edm::PSimHitContainer> simHitsToken;
edm::EDGetTokenT<FastTrackerRecHitRefCollection> simHit2RecHitMapToken;
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken;

bool usePixel;
bool useStrip;
Expand Down Expand Up @@ -137,9 +139,11 @@ void FastTrackDeDxProducer::fillDescriptions(edm::ConfigurationDescriptions& des
FastTrackDeDxProducer::FastTrackDeDxProducer(const edm::ParameterSet& iConfig)
: simHitsToken(consumes<edm::PSimHitContainer>(iConfig.getParameter<edm::InputTag>("simHits"))),
simHit2RecHitMapToken(
consumes<FastTrackerRecHitRefCollection>(iConfig.getParameter<edm::InputTag>("simHit2RecHitMap"))) {
consumes<FastTrackerRecHitRefCollection>(iConfig.getParameter<edm::InputTag>("simHit2RecHitMap"))),
tkGeomToken(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()) {
produces<ValueMap<DeDxData>>();

auto cCollector = consumesCollector();
string estimatorName = iConfig.getParameter<string>("estimator");
if (estimatorName == "median")
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new MedianDeDxEstimator(iConfig));
Expand All @@ -149,13 +153,13 @@ FastTrackDeDxProducer::FastTrackDeDxProducer(const edm::ParameterSet& iConfig)
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new TruncatedAverageDeDxEstimator(iConfig));
//else if(estimatorName == "unbinnedFit") m_estimator = std::unique_ptr<BaseDeDxEstimator> (new UnbinnedFitDeDxEstimator(iConfig));//estimator used in FullSimVersion
else if (estimatorName == "productDiscrim")
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ProductDeDxDiscriminator(iConfig));
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ProductDeDxDiscriminator(iConfig, cCollector));
else if (estimatorName == "btagDiscrim")
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new BTagLikeDeDxDiscriminator(iConfig));
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new BTagLikeDeDxDiscriminator(iConfig, cCollector));
else if (estimatorName == "smirnovDiscrim")
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new SmirnovDeDxDiscriminator(iConfig));
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new SmirnovDeDxDiscriminator(iConfig, cCollector));
else if (estimatorName == "asmirnovDiscrim")
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ASmirnovDeDxDiscriminator(iConfig));
m_estimator = std::unique_ptr<BaseDeDxEstimator>(new ASmirnovDeDxDiscriminator(iConfig, cCollector));
else
throw cms::Exception("fastsim::SimplifiedGeometry::FastTrackDeDxProducer.cc") << " estimator name does not exist";

Expand Down
9 changes: 5 additions & 4 deletions RecoTracker/DeDx/interface/ASmirnovDeDxDiscriminator.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

class ASmirnovDeDxDiscriminator : public BaseDeDxEstimator {
public:
ASmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig) {
ASmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector)
: token_(DeDxTools::esConsumes(iConfig.getParameter<std::string>("Reccord"), iCollector)) {
meVperADCStrip =
iConfig.getParameter<double>("MeVperADCStrip"); //currently needed until the map on the database are redone
Reccord = iConfig.getParameter<std::string>("Reccord");
ProbabilityMode = iConfig.getParameter<std::string>("ProbabilityMode");
Prob_ChargePath = nullptr;
}

void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override {
DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath);
auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_);
DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath);
}

std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
Expand Down Expand Up @@ -50,7 +51,7 @@ class ASmirnovDeDxDiscriminator : public BaseDeDxEstimator {

private:
float meVperADCStrip;
std::string Reccord;
DeDxTools::ESGetTokenH3DDVariant token_;
std::string ProbabilityMode;
TH3F* Prob_ChargePath;
};
Expand Down
9 changes: 5 additions & 4 deletions RecoTracker/DeDx/interface/BTagLikeDeDxDiscriminator.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

class BTagLikeDeDxDiscriminator : public BaseDeDxEstimator {
public:
BTagLikeDeDxDiscriminator(const edm::ParameterSet& iConfig) {
BTagLikeDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector)
: token_(DeDxTools::esConsumes(iConfig.getParameter<std::string>("Reccord"), iCollector)) {
meVperADCStrip =
iConfig.getParameter<double>("MeVperADCStrip"); //currently needed until the map on the database are redone
Reccord = iConfig.getParameter<std::string>("Reccord");
ProbabilityMode = iConfig.getParameter<std::string>("ProbabilityMode");
Prob_ChargePath = nullptr;
}

void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override {
DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath);
auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_);
DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath);
}

std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
Expand Down Expand Up @@ -66,7 +67,7 @@ class BTagLikeDeDxDiscriminator : public BaseDeDxEstimator {

private:
float meVperADCStrip;
std::string Reccord;
DeDxTools::ESGetTokenH3DDVariant token_;
std::string ProbabilityMode;
TH3F* Prob_ChargePath;
};
Expand Down
22 changes: 13 additions & 9 deletions RecoTracker/DeDx/interface/DeDxTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
#include <vector>

#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/Framework/interface/ESHandle.h"

#include "DataFormats/GeometryCommonDetAlgo/interface/Measurement1D.h"
#include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
Expand Down Expand Up @@ -46,16 +43,23 @@ namespace DeDxTools {
int getCharge(const SiStripCluster* cluster,
int& nSatStrip,
const GeomDetUnit& detUnit,
const std::vector<std::vector<float> >& calibGains,
const std::vector<std::vector<float>>& calibGains,
const unsigned int& m_off);
void makeCalibrationMap(const std::string& m_calibrationPath,
const TrackerGeometry& tkGeom,
std::vector<std::vector<float> >& calibGains,
std::vector<std::vector<float>>& calibGains,
const unsigned int& m_off);
void buildDiscrimMap(edm::Run const& run,
const edm::EventSetup& iSetup,
std::string Reccord,
std::string ProbabilityMode,

using H3DD = PhysicsTools::Calibration::HistogramD3D;
using ESGetTokenH3DDVariant = std::variant<edm::ESGetToken<H3DD, SiStripDeDxMip_3D_Rcd>,
edm::ESGetToken<H3DD, SiStripDeDxPion_3D_Rcd>,
edm::ESGetToken<H3DD, SiStripDeDxKaon_3D_Rcd>,
edm::ESGetToken<H3DD, SiStripDeDxProton_3D_Rcd>,
edm::ESGetToken<H3DD, SiStripDeDxElectron_3D_Rcd>>;
ESGetTokenH3DDVariant esConsumes(std::string const& Reccord, edm::ConsumesCollector&);
PhysicsTools::Calibration::HistogramD3D const& getHistogramD3D(edm::EventSetup const&, ESGetTokenH3DDVariant const&);
void buildDiscrimMap(PhysicsTools::Calibration::HistogramD3D const&,
std::string const& ProbabilityMode,
TH3F*& Prob_ChargePath);
bool IsSpanningOver2APV(unsigned int FirstStrip, unsigned int ClusterSize);
bool IsFarFromBorder(const TrajectoryStateOnSurface& trajState, const GeomDetUnit* it);
Expand Down
11 changes: 6 additions & 5 deletions RecoTracker/DeDx/interface/ProductDeDxDiscriminator.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

class ProductDeDxDiscriminator : public BaseDeDxEstimator {
public:
ProductDeDxDiscriminator(const edm::ParameterSet& iConfig) {
ProductDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector)
: token_(DeDxTools::esConsumes(iConfig.getParameter<std::string>("Reccord"), iCollector)) {
meVperADCStrip =
iConfig.getParameter<double>("MeVperADCStrip"); //currently needed until the map on the database are redone
Reccord = iConfig.getParameter<std::string>("Reccord");
ProbabilityMode = iConfig.getParameter<std::string>("ProbabilityMode");
Prob_ChargePath = nullptr;
}

void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override {
DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath);
void beginRun(edm::Run const&, const edm::EventSetup& iSetup) override {
auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_);
DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath);
}

std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
Expand Down Expand Up @@ -52,7 +53,7 @@ class ProductDeDxDiscriminator : public BaseDeDxEstimator {

private:
float meVperADCStrip;
std::string Reccord;
DeDxTools::ESGetTokenH3DDVariant token_;
std::string ProbabilityMode;
TH3F* Prob_ChargePath;
};
Expand Down
9 changes: 5 additions & 4 deletions RecoTracker/DeDx/interface/SmirnovDeDxDiscriminator.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@

class SmirnovDeDxDiscriminator : public BaseDeDxEstimator {
public:
SmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig) {
SmirnovDeDxDiscriminator(const edm::ParameterSet& iConfig, edm::ConsumesCollector& iCollector)
: token_(DeDxTools::esConsumes(iConfig.getParameter<std::string>("Reccord"), iCollector)) {
meVperADCStrip =
iConfig.getParameter<double>("MeVperADCStrip"); //currently needed until the map on the database are redone
Reccord = iConfig.getParameter<std::string>("Reccord");
ProbabilityMode = iConfig.getParameter<std::string>("ProbabilityMode");
Prob_ChargePath = nullptr;
}

void beginRun(edm::Run const& run, const edm::EventSetup& iSetup) override {
DeDxTools::buildDiscrimMap(run, iSetup, Reccord, ProbabilityMode, Prob_ChargePath);
auto const& histD3D = DeDxTools::getHistogramD3D(iSetup, token_);
DeDxTools::buildDiscrimMap(histD3D, ProbabilityMode, Prob_ChargePath);
}

std::pair<float, float> dedx(const reco::DeDxHitCollection& Hits) override {
Expand Down Expand Up @@ -50,7 +51,7 @@ class SmirnovDeDxDiscriminator : public BaseDeDxEstimator {

private:
float meVperADCStrip;
std::string Reccord;
DeDxTools::ESGetTokenH3DDVariant token_;
std::string ProbabilityMode;
TH3F* Prob_ChargePath;
};
Expand Down
27 changes: 15 additions & 12 deletions RecoTracker/DeDx/plugins/DeDxEstimatorProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

// system include files
#include "RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h"
#include "FWCore/Framework/interface/ConsumesCollector.h"

using namespace reco;
using namespace std;
Expand All @@ -44,28 +45,30 @@ void DeDxEstimatorProducer::fillDescriptions(edm::ConfigurationDescriptions& des
descriptions.add("DeDxEstimatorProducer", desc);
}

DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig) {
DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig)
: tkGeomToken(esConsumes<TrackerGeometry, TrackerDigiGeometryRecord, edm::Transition::BeginRun>()) {
produces<ValueMap<DeDxData>>();

auto cCollector = consumesCollector();
string estimatorName = iConfig.getParameter<string>("estimator");
if (estimatorName == "median")
m_estimator = new MedianDeDxEstimator(iConfig);
m_estimator = std::make_unique<MedianDeDxEstimator>(iConfig);
else if (estimatorName == "generic")
m_estimator = new GenericAverageDeDxEstimator(iConfig);
m_estimator = std::make_unique<GenericAverageDeDxEstimator>(iConfig);
else if (estimatorName == "truncated")
m_estimator = new TruncatedAverageDeDxEstimator(iConfig);
m_estimator = std::make_unique<TruncatedAverageDeDxEstimator>(iConfig);
else if (estimatorName == "genericTruncated")
m_estimator = new GenericTruncatedAverageDeDxEstimator(iConfig);
m_estimator = std::make_unique<GenericTruncatedAverageDeDxEstimator>(iConfig);
else if (estimatorName == "unbinnedFit")
m_estimator = new UnbinnedFitDeDxEstimator(iConfig);
m_estimator = std::make_unique<UnbinnedFitDeDxEstimator>(iConfig);
else if (estimatorName == "productDiscrim")
m_estimator = new ProductDeDxDiscriminator(iConfig);
m_estimator = std::make_unique<ProductDeDxDiscriminator>(iConfig, cCollector);
else if (estimatorName == "btagDiscrim")
m_estimator = new BTagLikeDeDxDiscriminator(iConfig);
m_estimator = std::make_unique<BTagLikeDeDxDiscriminator>(iConfig, cCollector);
else if (estimatorName == "smirnovDiscrim")
m_estimator = new SmirnovDeDxDiscriminator(iConfig);
m_estimator = std::make_unique<SmirnovDeDxDiscriminator>(iConfig, cCollector);
else if (estimatorName == "asmirnovDiscrim")
m_estimator = new ASmirnovDeDxDiscriminator(iConfig);
m_estimator = std::make_unique<ASmirnovDeDxDiscriminator>(iConfig, cCollector);

//Commented for now, might be used in the future
// MaxNrStrips = iConfig.getUntrackedParameter<unsigned>("maxNrStrips" , 255);
Expand All @@ -86,11 +89,11 @@ DeDxEstimatorProducer::DeDxEstimatorProducer(const edm::ParameterSet& iConfig) {
<< "Pixel Hits AND Strip Hits will not be used to estimate dEdx --> BUG, Please Update the config file";
}

DeDxEstimatorProducer::~DeDxEstimatorProducer() { delete m_estimator; }
DeDxEstimatorProducer::~DeDxEstimatorProducer() {}

// ------------ method called once each job just before starting event loop ------------
void DeDxEstimatorProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) {
iSetup.get<TrackerDigiGeometryRecord>().get(tkGeom);
tkGeom = &iSetup.getData(tkGeomToken);
if (useCalibration && calibGains.empty()) {
m_off = tkGeom->offsetDU(GeomDetEnumerators::PixelBarrel); //index start at the first pixel

Expand Down
5 changes: 3 additions & 2 deletions RecoTracker/DeDx/plugins/DeDxEstimatorProducer.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class DeDxEstimatorProducer : public edm::stream::EDProducer<> {
int& NClusterSaturating);

// ----------member data ---------------------------
BaseDeDxEstimator* m_estimator;
std::unique_ptr<BaseDeDxEstimator> m_estimator;

edm::EDGetTokenT<reco::TrackCollection> m_tracksTag;

Expand All @@ -78,7 +78,8 @@ class DeDxEstimatorProducer : public edm::stream::EDProducer<> {
std::vector<std::vector<float> > calibGains;
unsigned int m_off;

edm::ESHandle<TrackerGeometry> tkGeom;
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken;
const TrackerGeometry* tkGeom = nullptr;
};

#endif
Loading

0 comments on commit c0eb377

Please sign in to comment.