File indexing completed on 2024-04-06 12:21:43
0001 #ifndef L1Trigger_TrackerTFP_KalmanFilter_h
0002 #define L1Trigger_TrackerTFP_KalmanFilter_h
0003
0004 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0005 #include "L1Trigger/TrackerTFP/interface/DataFormats.h"
0006 #include "L1Trigger/TrackerTFP/interface/KalmanFilterFormats.h"
0007 #include "L1Trigger/TrackerTFP/interface/State.h"
0008 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0009
0010 #include <deque>
0011
0012 namespace trackerTFP {
0013
0014
0015 class KalmanFilter {
0016 public:
0017 KalmanFilter(const edm::ParameterSet& iConfig,
0018 const tt::Setup* setup,
0019 const DataFormats* dataFormats,
0020 KalmanFilterFormats* kalmanFilterFormats,
0021 int region);
0022 ~KalmanFilter() {}
0023
0024
0025 void consume(const tt::StreamsTrack& streamsTrack, const tt::StreamsStub& streamsStub);
0026
0027 void produce(tt::StreamsStub& accpetedStubs,
0028 tt::StreamsTrack& acceptedTracks,
0029 tt::StreamsStub& lostStubs,
0030 tt::StreamsTrack& lostTracks,
0031 int& numAcceptedStates,
0032 int& numLostStates);
0033
0034 private:
0035
0036 template <class T>
0037 T* pop_front(std::deque<T*>& ts) const;
0038
0039 template <class T>
0040 T* pop_front(std::vector<T*>& ts) const;
0041
0042
0043 void addLayer(std::deque<State*>& stream);
0044
0045 void comb(State*& state);
0046
0047 void accumulator(std::deque<State*>& stream);
0048
0049 void update(State*& state);
0050
0051
0052 bool enableTruncation_;
0053
0054 const tt::Setup* setup_;
0055
0056 const DataFormats* dataFormats_;
0057
0058 KalmanFilterFormats* kalmanFilterFormats_;
0059
0060 int region_;
0061
0062 std::vector<StubKFin> stubs_;
0063
0064 std::vector<TrackKFin> tracks_;
0065
0066 std::deque<State> states_;
0067
0068 std::vector<std::vector<TrackKFin*>> input_;
0069
0070 int layer_;
0071
0072
0073
0074 DataFormatKF* x0_;
0075 DataFormatKF* x1_;
0076 DataFormatKF* x2_;
0077 DataFormatKF* x3_;
0078 DataFormatKF* H00_;
0079 DataFormatKF* H12_;
0080 DataFormatKF* m0_;
0081 DataFormatKF* m1_;
0082 DataFormatKF* v0_;
0083 DataFormatKF* v1_;
0084 DataFormatKF* r0_;
0085 DataFormatKF* r1_;
0086 DataFormatKF* S00_;
0087 DataFormatKF* S01_;
0088 DataFormatKF* S12_;
0089 DataFormatKF* S13_;
0090 DataFormatKF* K00_;
0091 DataFormatKF* K10_;
0092 DataFormatKF* K21_;
0093 DataFormatKF* K31_;
0094 DataFormatKF* R00_;
0095 DataFormatKF* R11_;
0096 DataFormatKF* R00Rough_;
0097 DataFormatKF* R11Rough_;
0098 DataFormatKF* invR00Approx_;
0099 DataFormatKF* invR11Approx_;
0100 DataFormatKF* invR00Cor_;
0101 DataFormatKF* invR11Cor_;
0102 DataFormatKF* invR00_;
0103 DataFormatKF* invR11_;
0104 DataFormatKF* C00_;
0105 DataFormatKF* C01_;
0106 DataFormatKF* C11_;
0107 DataFormatKF* C22_;
0108 DataFormatKF* C23_;
0109 DataFormatKF* C33_;
0110 };
0111
0112 }
0113
0114 #endif