File indexing completed on 2024-04-06 12:31:41
0001 #ifndef TrackingTools_TransientTrack_CandTransientTrack_h
0002 #define TrackingTools_TransientTrack_CandTransientTrack_h
0003
0004 #include <atomic>
0005
0006
0007
0008
0009
0010 #include "TrackingTools/TransientTrack/interface/BasicTransientTrack.h"
0011 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0012 #include "DataFormats/TrackReco/interface/Track.h"
0013 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0014 #include "TrackingTools/PatternTools/interface/TSCPBuilderNoMaterial.h"
0015
0016 #include "DataFormats/Candidate/interface/Candidate.h"
0017 namespace reco {
0018
0019 class CandidatePtrTransientTrack : public Track, public BasicTransientTrack {
0020 public:
0021
0022 CandidatePtrTransientTrack();
0023
0024 CandidatePtrTransientTrack(const CandidatePtr& tk, const MagneticField* field);
0025 CandidatePtrTransientTrack(const CandidatePtr& tk,
0026 const double time,
0027 const double dtime,
0028 const MagneticField* field);
0029
0030 CandidatePtrTransientTrack(const CandidatePtr& tk,
0031 const MagneticField* field,
0032 const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry);
0033 CandidatePtrTransientTrack(const CandidatePtr& tk,
0034 const double time,
0035 const double dtime,
0036 const MagneticField* field,
0037 const edm::ESHandle<GlobalTrackingGeometry>& trackingGeometry);
0038
0039 CandidatePtrTransientTrack(const CandidatePtrTransientTrack& tt);
0040
0041 CandidatePtrTransientTrack& operator=(const CandidatePtrTransientTrack& tt);
0042
0043 void setTrackingGeometry(const edm::ESHandle<GlobalTrackingGeometry>&) override;
0044
0045 void setBeamSpot(const reco::BeamSpot& beamSpot) override;
0046
0047 FreeTrajectoryState initialFreeState() const override { return initialFTS; }
0048
0049 TrajectoryStateOnSurface outermostMeasurementState() const override;
0050
0051 TrajectoryStateOnSurface innermostMeasurementState() const override;
0052
0053 TrajectoryStateClosestToPoint trajectoryStateClosestToPoint(const GlobalPoint& point) const override {
0054 return builder(initialFTS, point);
0055 }
0056
0057
0058
0059
0060 TrajectoryStateOnSurface stateOnSurface(const GlobalPoint& point) const override;
0061
0062 TrajectoryStateClosestToPoint impactPointTSCP() const override;
0063
0064 TrajectoryStateOnSurface impactPointState() const override;
0065
0066 bool impactPointStateAvailable() const override { return (m_TSOS.load() == kSet ? true : false); }
0067
0068
0069
0070
0071 TrackRef persistentTrackRef() const { return TrackRef(); }
0072
0073 TrackBaseRef trackBaseRef() const override { return TrackBaseRef(); }
0074
0075 TrackCharge charge() const override { return Track::charge(); }
0076
0077 CandidatePtr candidate() const override { return ptr_; }
0078
0079 const MagneticField* field() const override { return theField; }
0080
0081 const Track& track() const override { return *this; }
0082
0083 TrajectoryStateClosestToBeamLine stateAtBeamLine() const override;
0084
0085 double timeExt() const override { return (hasTime ? timeExt_ : std::numeric_limits<double>::quiet_NaN()); }
0086 double dtErrorExt() const override { return (hasTime ? dtErrorExt_ : std::numeric_limits<double>::quiet_NaN()); }
0087
0088 private:
0089 CandidatePtr ptr_;
0090 bool hasTime;
0091 double timeExt_, dtErrorExt_;
0092 const MagneticField* theField;
0093
0094 FreeTrajectoryState initialFTS;
0095
0096
0097
0098 mutable TrajectoryStateOnSurface initialTSOS;
0099 mutable TrajectoryStateClosestToPoint initialTSCP;
0100 mutable TrajectoryStateClosestToBeamLine trajectoryStateClosestToBeamLine;
0101
0102 mutable std::atomic<char> m_TSOS;
0103 mutable std::atomic<char> m_TSCP;
0104 mutable std::atomic<char> m_SCTBL;
0105
0106 TSCPBuilderNoMaterial builder;
0107 edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry;
0108 reco::BeamSpot theBeamSpot;
0109
0110
0111 enum CacheStates { kUnset, kSetting, kSet };
0112 };
0113
0114 }
0115
0116 #endif