File indexing completed on 2024-04-06 12:29:08
0001 #ifndef RecoBTag_BasicGhostTrackState_h
0002 #define RecoBTag_BasicGhostTrackState_h
0003
0004 #include <utility>
0005
0006 #include "TrackingTools/TrajectoryState/interface/ProxyBase11.h"
0007
0008 #include "DataFormats/Math/interface/Error.h"
0009 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0010 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0011 #include "DataFormats/GeometryCommonDetAlgo/interface/GlobalError.h"
0012
0013 #include "TrackingTools/TransientTrack/interface/TransientTrack.h"
0014 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0015
0016 namespace reco {
0017
0018 class GhostTrackPrediction;
0019
0020 class BasicGhostTrackState {
0021 public:
0022 using BGTS = BasicGhostTrackState;
0023 using Proxy = ProxyBase11<BGTS>;
0024 using pointer = Proxy::pointer;
0025
0026 typedef math::Error<3>::type CovarianceMatrix;
0027 typedef std::pair<GlobalPoint, GlobalError> Vertex;
0028
0029 virtual ~BasicGhostTrackState() {}
0030
0031 template <typename T, typename... Args>
0032 static std::shared_ptr<BGTS> build(Args &&...args) {
0033 return std::make_shared<T>(std::forward<Args>(args)...);
0034 }
0035
0036 virtual GlobalPoint globalPosition() const = 0;
0037 virtual GlobalError cartesianError() const = 0;
0038 virtual CovarianceMatrix cartesianCovariance() const = 0;
0039
0040 double lambda() const { return lambda_; }
0041 virtual bool isValid() const { return true; }
0042
0043 virtual void reset() {}
0044 virtual bool linearize(const GhostTrackPrediction &pred, bool initial, double lambda) {
0045 lambda_ = lambda;
0046 return true;
0047 }
0048 virtual bool linearize(const GhostTrackPrediction &pred, double lambda) {
0049 lambda_ = lambda;
0050 return true;
0051 }
0052
0053 virtual Vertex vertexStateOnGhostTrack(const GhostTrackPrediction &pred, bool withMeasurementError) const = 0;
0054 virtual Vertex vertexStateOnMeasurement(const GhostTrackPrediction &pred, bool withGhostTrackError) const = 0;
0055
0056 double weight() const { return weight_; }
0057 void setWeight(double weight) { weight_ = weight; }
0058
0059 virtual pointer clone() const = 0;
0060
0061 protected:
0062 double lambda_ = 0;
0063 double weight_ = 1.;
0064 };
0065
0066 }
0067
0068 #endif