File indexing completed on 2025-06-03 00:12:20
0001 #ifndef L1Trigger_TrackFindingTracklet_KalmanFilter_h
0002 #define L1Trigger_TrackFindingTracklet_KalmanFilter_h
0003
0004 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0005 #include "L1Trigger/TrackFindingTracklet/interface/DataFormats.h"
0006 #include "L1Trigger/TrackFindingTracklet/interface/KalmanFilterFormats.h"
0007 #include "L1Trigger/TrackFindingTracklet/interface/State.h"
0008 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0009 #include "L1Trigger/TrackFindingTMTT/interface/Settings.h"
0010 #include "L1Trigger/TrackFindingTMTT/interface/KFParamsComb.h"
0011
0012 #include <vector>
0013 #include <deque>
0014
0015 namespace trklet {
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 class KalmanFilter {
0043 public:
0044 typedef State::Stub Stub;
0045 KalmanFilter(const tt::Setup* setup,
0046 const DataFormats* dataFormats,
0047 KalmanFilterFormats* kalmanFilterFormats,
0048 tmtt::Settings* settings,
0049 tmtt::KFParamsComb* tmtt,
0050 int region,
0051 tt::TTTracks& ttTracks);
0052 ~KalmanFilter() = default;
0053
0054 void consume(const tt::StreamsTrack& streamsTrack, const tt::StreamsStub& streamsStub);
0055
0056 void produce(tt::StreamsStub& streamsStub,
0057 tt::StreamsTrack& streamsTrack,
0058 int& numAcceptedStates,
0059 int& numLostStates);
0060
0061 private:
0062
0063 struct Track {
0064 Track() {}
0065 Track(int trackId,
0066 int numConsistent,
0067 int numConsistentPS,
0068 double d0,
0069 const TTBV& hitPattern,
0070 const TrackKF& trackKF,
0071 const std::vector<StubKF>& stubsKF)
0072 : trackId_(trackId),
0073 numConsistent_(numConsistent),
0074 numConsistentPS_(numConsistentPS),
0075 d0_(d0),
0076 hitPattern_(hitPattern),
0077 trackKF_(trackKF),
0078 stubsKF_(stubsKF) {}
0079 int trackId_;
0080 int numConsistent_;
0081 int numConsistentPS_;
0082 double d0_;
0083 TTBV hitPattern_;
0084 TrackKF trackKF_;
0085 std::vector<StubKF> stubsKF_;
0086 };
0087
0088 void simulate(tt::StreamsStub& streamsStub, tt::StreamsTrack& streamsTrack);
0089
0090 double digi(VariableKF var, double val) { return kalmanFilterFormats_->format(var).digi(val); }
0091
0092 int integer(VariableKF var, double val) { return kalmanFilterFormats_->format(var).integer(val); }
0093
0094 void updateRangeActual(VariableKF var, double val) {
0095 return kalmanFilterFormats_->format(var).updateRangeActual(val);
0096 }
0097
0098 double base(VariableKF var) { return kalmanFilterFormats_->format(var).base(); }
0099
0100 int width(VariableKF var) { return kalmanFilterFormats_->format(var).width(); }
0101
0102 template <class T>
0103 T* pop_front(std::deque<T*>& ts) const;
0104
0105 void calcSeeds();
0106
0107 void conv(tt::StreamsStub& streamsStub, tt::StreamsTrack& streamsTrack);
0108
0109 void addLayer(bool seed = false);
0110
0111 void finalize();
0112
0113 void accumulator();
0114
0115 void update4(State*& state);
0116
0117 void update5(State*& state);
0118
0119
0120 const tt::Setup* setup_;
0121
0122 const DataFormats* dataFormats_;
0123
0124 KalmanFilterFormats* kalmanFilterFormats_;
0125
0126 tmtt::Settings* settings_;
0127
0128 tmtt::KFParamsComb* tmtt_;
0129
0130 int region_;
0131
0132 tt::TTTracks& ttTracks_;
0133
0134 std::vector<TrackDR> tracks_;
0135
0136 std::vector<Stub> stubs_;
0137
0138 std::deque<State> states_;
0139
0140 std::deque<State*> stream_;
0141
0142 std::vector<Track> finals_;
0143
0144 int layer_;
0145
0146 std::vector<double> zTs_;
0147 };
0148
0149 }
0150
0151 #endif