File indexing completed on 2024-09-07 04:37:00
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef L1Trigger_L1TMuonOverlapPhase2_InputMakerPhase2_h
0009 #define L1Trigger_L1TMuonOverlapPhase2_InputMakerPhase2_h
0010
0011 #include "DataFormats/Common/interface/Handle.h"
0012 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThContainer.h"
0013 #include "DataFormats/L1DTTrackFinder/interface/L1Phase2MuDTPhContainer.h"
0014 #include "DataFormats/L1TMuon/interface/RegionalMuonCandFwd.h"
0015 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
0016 #include "FWCore/Utilities/interface/EDGetToken.h"
0017
0018 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/OMTFConfiguration.h"
0019 #include "L1Trigger/L1TMuonOverlapPhase1/interface/MuonStub.h"
0020 #include "L1Trigger/L1TMuonOverlapPhase1/interface/MuonStubMakerBase.h"
0021 #include "L1Trigger/L1TMuonOverlapPhase1/interface/Omtf/OMTFinputMaker.h"
0022 #include "L1Trigger/L1TMuonOverlapPhase2/interface/OmtfPhase2AngleConverter.h"
0023
0024 class DtPhase2DigiToStubsConverter : public DigiToStubsConverterBase {
0025 public:
0026 DtPhase2DigiToStubsConverter(edm::EDGetTokenT<L1Phase2MuDTPhContainer> inputTokenDtPh,
0027 edm::EDGetTokenT<L1MuDTChambThContainer> inputTokenDtTh)
0028 : inputTokenDtPh(inputTokenDtPh), inputTokenDtTh(inputTokenDtTh) {}
0029
0030 ~DtPhase2DigiToStubsConverter() override {}
0031
0032 void loadDigis(const edm::Event& event) override;
0033
0034 void makeStubs(MuonStubPtrs2D& muonStubsInLayers,
0035 unsigned int iProcessor,
0036 l1t::tftype procTyp,
0037 int bxFrom,
0038 int bxTo,
0039 std::vector<std::unique_ptr<IOMTFEmulationObserver> >& observers) override;
0040
0041
0042 virtual void addDTphiDigi(MuonStubPtrs2D& muonStubsInLayers,
0043 const L1Phase2MuDTPhDigi& digi,
0044 const L1MuDTChambThContainer* dtThDigis,
0045 unsigned int iProcessor,
0046 l1t::tftype procTyp) = 0;
0047
0048 virtual void addDTetaStubs(MuonStubPtrs2D& muonStubsInLayers,
0049 const L1MuDTChambThDigi& thetaDigi,
0050 unsigned int iProcessor,
0051 l1t::tftype procTyp) = 0;
0052
0053 virtual bool acceptDigi(const DTChamberId& dTChamberId, unsigned int iProcessor, l1t::tftype procType) {
0054 return true;
0055 }
0056
0057 protected:
0058 bool mergePhiAndTheta = true;
0059
0060 edm::EDGetTokenT<L1Phase2MuDTPhContainer> inputTokenDtPh;
0061 edm::EDGetTokenT<L1MuDTChambThContainer> inputTokenDtTh;
0062
0063 edm::Handle<L1Phase2MuDTPhContainer> dtPhDigis;
0064 edm::Handle<L1MuDTChambThContainer> dtThDigis;
0065 };
0066
0067 class DtPhase2DigiToStubsConverterOmtf : public DtPhase2DigiToStubsConverter {
0068 public:
0069 DtPhase2DigiToStubsConverterOmtf(const OMTFConfiguration* config,
0070 const OmtfAngleConverter* angleConverter,
0071 edm::EDGetTokenT<L1Phase2MuDTPhContainer> inputTokenDtPh,
0072 edm::EDGetTokenT<L1MuDTChambThContainer> inputTokenDtTh)
0073 : DtPhase2DigiToStubsConverter(inputTokenDtPh, inputTokenDtTh),
0074 config(*config),
0075 angleConverter(*angleConverter) {}
0076
0077 ~DtPhase2DigiToStubsConverterOmtf() override = default;
0078
0079
0080 void addDTphiDigi(MuonStubPtrs2D& muonStubsInLayers,
0081 const L1Phase2MuDTPhDigi& digi,
0082 const L1MuDTChambThContainer* dtThDigis,
0083 unsigned int iProcessor,
0084 l1t::tftype procTyp) override;
0085
0086 void addDTetaStubs(MuonStubPtrs2D& muonStubsInLayers,
0087 const L1MuDTChambThDigi& thetaDigi,
0088 unsigned int iProcessor,
0089 l1t::tftype procTyp) override;
0090
0091 bool acceptDigi(const DTChamberId& dTChamberId, unsigned int iProcessor, l1t::tftype procType) override;
0092
0093 private:
0094 const OMTFConfiguration& config;
0095 const OmtfAngleConverter& angleConverter;
0096 };
0097
0098 class InputMakerPhase2 : public OMTFinputMaker {
0099 public:
0100 InputMakerPhase2(const edm::ParameterSet& edmParameterSet,
0101 MuStubsInputTokens& muStubsInputTokens,
0102 edm::EDGetTokenT<L1Phase2MuDTPhContainer> inputTokenDTPhPhase2,
0103 const OMTFConfiguration* config,
0104 std::unique_ptr<OmtfAngleConverter> angleConverter);
0105
0106 ~InputMakerPhase2() override = default;
0107
0108
0109 virtual void addDTphiDigi(MuonStubPtrs2D& muonStubsInLayers,
0110 const L1Phase2MuDTPhDigi& digi,
0111 const L1Phase2MuDTPhContainer* dtThDigis,
0112 unsigned int iProcessor,
0113 l1t::tftype procTyp) {}
0114 };
0115
0116 #endif