Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:38

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);