File indexing completed on 2025-01-31 02:20:02
0001 #include <string>
0002 #include <memory>
0003
0004 #include "FWCore/Framework/interface/ESHandle.h"
0005 #include "FWCore/Framework/interface/ESProducer.h"
0006 #include "FWCore/Framework/interface/EventSetup.h"
0007 #include "FWCore/Framework/interface/ModuleFactory.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
0010 #include "TrackingTools/GsfTools/interface/CloseComponentsMerger.h"
0011 #include "TrackingTools/GsfTools/interface/MultiGaussianStateMerger.h"
0012 #include "TrackingTools/GsfTracking/interface/GsfChi2MeasurementEstimator.h"
0013 #include "TrackingTools/GsfTracking/interface/GsfMaterialEffectsUpdator.h"
0014 #include "TrackingTools/GsfTracking/interface/GsfMultiStateUpdator.h"
0015 #include "TrackingTools/GsfTracking/interface/GsfPropagatorWithMaterial.h"
0016 #include "TrackingTools/GsfTracking/interface/GsfTrajectorySmoother.h"
0017 #include "TrackingTools/GsfTracking/interface/MultiTrajectoryStateMerger.h"
0018 #include "TrackingTools/PatternTools/interface/TrajectorySmoother.h"
0019 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
0020 #include "TrackingTools/TrackFitters/interface/TrajectoryFitterRecord.h"
0021
0022
0023
0024 class GsfTrajectorySmootherESProducer : public edm::ESProducer {
0025 public:
0026 GsfTrajectorySmootherESProducer(const edm::ParameterSet& p);
0027
0028 std::unique_ptr<TrajectorySmoother> produce(const TrajectoryFitterRecord&);
0029
0030 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0031
0032 private:
0033 edm::ESGetToken<GsfMaterialEffectsUpdator, TrackingComponentsRecord> matToken_;
0034 edm::ESGetToken<Propagator, TrackingComponentsRecord> propagatorToken_;
0035 edm::ESGetToken<MultiGaussianStateMerger<5>, TrackingComponentsRecord> mergerToken_;
0036 edm::ESGetToken<DetLayerGeometry, RecoGeometryRecord> geoToken_;
0037 const double scale_;
0038 };
0039
0040 GsfTrajectorySmootherESProducer::GsfTrajectorySmootherESProducer(const edm::ParameterSet& p)
0041 : scale_(p.getParameter<double>("ErrorRescaling")) {
0042 std::string myname = p.getParameter<std::string>("ComponentName");
0043 auto cc = setWhatProduced(this, myname);
0044 matToken_ = cc.consumes(edm::ESInputTag("", p.getParameter<std::string>("MaterialEffectsUpdator")));
0045 propagatorToken_ = cc.consumes(edm::ESInputTag("", p.getParameter<std::string>("GeometricalPropagator")));
0046 mergerToken_ = cc.consumes(edm::ESInputTag("", p.getParameter<std::string>("Merger")));
0047 geoToken_ = cc.consumes(edm::ESInputTag("", p.getParameter<std::string>("RecoGeometry")));
0048 }
0049
0050 std::unique_ptr<TrajectorySmoother> GsfTrajectorySmootherESProducer::produce(const TrajectoryFitterRecord& iRecord) {
0051
0052
0053
0054 GsfPropagatorWithMaterial propagator(iRecord.get(propagatorToken_), iRecord.get(matToken_));
0055
0056
0057
0058 MultiTrajectoryStateMerger merger(iRecord.get(mergerToken_));
0059
0060
0061
0062
0063 double chi2Cut(100.);
0064 GsfChi2MeasurementEstimator estimator(chi2Cut);
0065
0066
0067
0068
0069
0070 return std::make_unique<GsfTrajectorySmoother>(
0071 propagator,
0072 GsfMultiStateUpdator(),
0073 estimator,
0074 merger,
0075
0076 scale_,
0077 true,
0078 &iRecord.get(geoToken_));
0079 }
0080
0081 void GsfTrajectorySmootherESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0082 edm::ParameterSetDescription desc;
0083 desc.add<std::string>("ComponentName", "GsfTrajectorySmoother");
0084 desc.add<std::string>("MaterialEffectsUpdator", "ElectronMaterialEffects");
0085 desc.add<std::string>("GeometricalPropagator", "bwdAnalyticalPropagator");
0086 desc.add<std::string>("Merger", "CloseComponentsMerger5D");
0087 desc.add<std::string>("RecoGeometry", "GlobalDetLayerGeometry");
0088 desc.add<double>("ErrorRescaling", 100.0);
0089
0090 descriptions.addWithDefaultLabel(desc);
0091 }
0092 DEFINE_FWK_EVENTSETUP_MODULE(GsfTrajectorySmootherESProducer);