File indexing completed on 2023-03-31 23:02:21
0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "FWCore/Framework/interface/EventSetup.h"
0003 #include "FWCore/Framework/interface/Frameworkfwd.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/Framework/interface/global/EDProducer.h"
0006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009 #include "MagneticField/Engine/interface/MagneticField.h"
0010 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0011 #include "RecoTracker/PixelTrackFitting/interface/PixelFitter.h"
0012 #include "RecoTracker/PixelTrackFitting/interface/PixelNtupletsFitter.h"
0013 #include "RecoTracker/TkMSParametrization/interface/PixelRecoUtilities.h"
0014
0015 class PixelNtupletsFitterProducer : public edm::global::EDProducer<> {
0016 public:
0017 explicit PixelNtupletsFitterProducer(const edm::ParameterSet& iConfig)
0018 : useRiemannFit_(iConfig.getParameter<bool>("useRiemannFit")), idealMagneticFieldToken_(esConsumes()) {
0019 produces<PixelFitter>();
0020 }
0021 ~PixelNtupletsFitterProducer() override {}
0022
0023 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0024 edm::ParameterSetDescription desc;
0025 desc.add<bool>("useRiemannFit", false)->setComment("true for Riemann, false for BrokenLine");
0026 descriptions.add("pixelNtupletsFitterDefault", desc);
0027 }
0028
0029 private:
0030 bool useRiemannFit_;
0031 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> idealMagneticFieldToken_;
0032 void produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const override;
0033 };
0034
0035 void PixelNtupletsFitterProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0036 auto const& idealField = iSetup.getData(idealMagneticFieldToken_);
0037 float bField = 1 / idealField.inverseBzAtOriginInGeV();
0038 auto impl = std::make_unique<PixelNtupletsFitter>(bField, &idealField, useRiemannFit_);
0039 auto prod = std::make_unique<PixelFitter>(std::move(impl));
0040 iEvent.put(std::move(prod));
0041 }
0042
0043 DEFINE_FWK_MODULE(PixelNtupletsFitterProducer);