File indexing completed on 2025-06-03 00:12:14
0001 #ifndef L1Trigger_TrackerTFP_TrackFindingProcessor_h
0002 #define L1Trigger_TrackerTFP_TrackFindingProcessor_h
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0006 #include "L1Trigger/TrackerTFP/interface/DataFormats.h"
0007 #include "L1Trigger/TrackerTFP/interface/TrackQuality.h"
0008 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0009
0010 #include <utility>
0011 #include <vector>
0012 #include <deque>
0013
0014 namespace trackerTFP {
0015
0016
0017 class TrackFindingProcessor {
0018 public:
0019 TrackFindingProcessor(const tt::Setup* setup_, const DataFormats* dataFormats, const TrackQuality* trackQuality);
0020 ~TrackFindingProcessor() = default;
0021
0022
0023 void produce(const tt::StreamsTrack& inputs,
0024 const tt::StreamsStub& stubs,
0025 tt::TTTracks& ttTracks,
0026 tt::StreamsTrack& outputs);
0027
0028 void produce(const std::vector<TTTrackRef>& inputs, tt::StreamsTrack& outputs) const;
0029
0030 private:
0031
0032 static constexpr int partial_width = 32;
0033
0034 static constexpr int partial_in = 3;
0035
0036 static constexpr int partial_out = 2;
0037
0038 typedef std::bitset<partial_width> PartialFrame;
0039
0040 typedef std::pair<const TTTrackRef&, PartialFrame> PartialFrameTrack;
0041
0042 struct Track {
0043 Track(const tt::FrameTrack& frameTrack,
0044 const tt::Frame& frameTQ,
0045 const std::vector<TTStubRef>& ttStubRefs,
0046 const TrackQuality* tq);
0047 const TTTrackRef& ttTrackRef_;
0048 const std::vector<TTStubRef> ttStubRefs_;
0049 bool valid_;
0050 std::vector<PartialFrame> partials_;
0051 TTBV hitPattern_;
0052 int channel_;
0053 int mva_;
0054 double inv2R_;
0055 double phiT_;
0056 double cot_;
0057 double zT_;
0058 double chi2rphi_;
0059 double chi2rz_;
0060 };
0061
0062 template <class T>
0063 T* pop_front(std::deque<T*>& ts) const;
0064
0065 void consume(const tt::StreamsTrack& inputs,
0066 const tt::StreamsStub& stubs,
0067 std::vector<std::deque<Track*>>& outputs);
0068
0069 void produce(std::vector<std::deque<Track*>>& inputs, tt::StreamsTrack& outputs) const;
0070
0071 void produce(const tt::StreamsTrack& inputs, tt::TTTracks& ouputs) const;
0072
0073 const tt::Setup* setup_;
0074
0075 const DataFormats* dataFormats_;
0076
0077 const TrackQuality* trackQuality_;
0078
0079 std::vector<Track> tracks_;
0080
0081 double bfield_;
0082 };
0083
0084 }
0085
0086 #endif