Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 14:31:37

0001 #ifndef GsfTrajectorySmoother_H_
0002 #define GsfTrajectorySmoother_H_
0003 
0004 #include "TrackingTools/PatternTools/interface/TrajectorySmoother.h"
0005 #include "TrackingTools/PatternTools/interface/TrajectoryStateUpdator.h"
0006 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0007 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0008 #include "TrackingTools/DetLayers/interface/MeasurementEstimator.h"
0009 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0010 #include "TrackingTools/GsfTracking/interface/GsfPropagatorWithMaterial.h"
0011 #include "TrackingTools/GsfTools/interface/GsfPropagatorAdapter.h"
0012 #include "TrackingTools/GsfTracking/interface/FullConvolutionWithMaterial.h"
0013 #include "TrackingTools/DetLayers/interface/DetLayerGeometry.h"
0014 
0015 class MultiTrajectoryStateMerger;
0016 
0017 /** A GSF smoother, similar to KFTrajectorySmoother, but (for
0018  *  testing purposes) without combination with the forward fit. 
0019  */
0020 
0021 class GsfTrajectorySmoother final : public TrajectorySmoother {
0022 private:
0023   typedef TrajectoryStateOnSurface TSOS;
0024   typedef TrajectoryMeasurement TM;
0025 
0026 public:
0027   /** Constructor with explicit components for propagation, update,
0028    *  chi2 calculation, merging and flag for merging before / after
0029    *  the update (i.e. fully configured). It clones the algorithms. */
0030   GsfTrajectorySmoother(const GsfPropagatorWithMaterial& aPropagator,
0031                         const TrajectoryStateUpdator& aUpdator,
0032                         const MeasurementEstimator& aEstimator,
0033                         const MultiTrajectoryStateMerger& merger,
0034                         float errorRescaling,
0035                         const bool materialBeforeUpdate = true,
0036                         const DetLayerGeometry* detLayerGeometry = nullptr);
0037 
0038   ~GsfTrajectorySmoother() override;
0039 
0040   Trajectory trajectory(const Trajectory& aTraj) const override;
0041 
0042   const TrajectoryStateUpdator* updator() const { return theUpdator; }
0043   const MeasurementEstimator* estimator() const { return theEstimator; }
0044 
0045   GsfTrajectorySmoother* clone() const override {
0046     return new GsfTrajectorySmoother(
0047         *theAlongPropagator, *theUpdator, *theEstimator, *theMerger, theErrorRescaling, theMatBeforeUpdate, theGeometry);
0048   }
0049 
0050   void setHitCloner(TkCloner const* hc) override {}
0051 
0052 private:
0053   const GsfPropagatorWithMaterial* theAlongPropagator;
0054   const GsfPropagatorWithMaterial* theOppositePropagator;
0055   const GsfPropagatorAdapter* theGeomPropagator;
0056   const FullConvolutionWithMaterial* theConvolutor;
0057   const TrajectoryStateUpdator* theUpdator;
0058   const MeasurementEstimator* theEstimator;
0059   const MultiTrajectoryStateMerger* theMerger;
0060 
0061   bool theTiming;
0062   bool theMatBeforeUpdate;
0063   float theErrorRescaling;
0064 
0065   const DetLayerGeometry dummyGeometry;
0066   const DetLayerGeometry* theGeometry;
0067 };
0068 
0069 #endif  //TR_GsfTrajectorySmoother_H_