File indexing completed on 2024-04-06 12:19:42
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include "L1Trigger/DTTrackFinder/src/L1MuDTSectorProcessor.h"
0020
0021
0022
0023
0024
0025 #include <iostream>
0026 #include <cmath>
0027
0028
0029
0030
0031
0032 #include <FWCore/Framework/interface/Event.h>
0033 #include "L1Trigger/DTTrackFinder/interface/L1MuDTTFConfig.h"
0034 #include "L1Trigger/DTTrackFinder/interface/L1MuDTSecProcId.h"
0035 #include "L1Trigger/DTTrackFinder/src/L1MuDTSectorReceiver.h"
0036 #include "L1Trigger/DTTrackFinder/src/L1MuDTDataBuffer.h"
0037 #include "L1Trigger/DTTrackFinder/src/L1MuDTExtrapolationUnit.h"
0038 #include "L1Trigger/DTTrackFinder/src/L1MuDTTrackAssembler.h"
0039 #include "L1Trigger/DTTrackFinder/src/L1MuDTAssignmentUnit.h"
0040 #include "L1Trigger/DTTrackFinder/interface/L1MuDTTrackFinder.h"
0041
0042 using namespace std;
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 L1MuDTSectorProcessor::L1MuDTSectorProcessor(const L1MuDTTrackFinder& tf,
0053 const L1MuDTSecProcId& id,
0054 edm::ConsumesCollector iC)
0055 : m_tf(tf),
0056 m_spid(id),
0057 m_SectorReceiver(*this, iC),
0058 m_DataBuffer(*this),
0059 m_EU(*this, iC),
0060 m_TA(*this),
0061 m_AUs{{{*this, 0, iC}, {*this, 1, iC}}},
0062 m_TrackCands{{{m_spid}, {m_spid}}},
0063 m_TracKCands{{{m_spid}, {m_spid}}} {}
0064
0065
0066
0067
0068
0069 L1MuDTSectorProcessor::~L1MuDTSectorProcessor() {}
0070
0071
0072
0073
0074
0075
0076
0077
0078 void L1MuDTSectorProcessor::run(int bx, const edm::Event& e, const edm::EventSetup& c) {
0079
0080 m_SectorReceiver.run(bx, e, c);
0081
0082
0083 if (m_tf.config()->Debug(4) && m_DataBuffer.numberTSphi() > 0) {
0084 cout << "Phi track segments received by " << m_spid << " : " << endl;
0085 m_DataBuffer.printTSphi();
0086 }
0087
0088
0089 int n_ext = 0;
0090 if (m_DataBuffer.numberTSphi() > 1) {
0091 m_EU.run(c);
0092 n_ext = m_EU.numberOfExt();
0093 if (m_tf.config()->Debug(3) && n_ext > 0) {
0094 cout << "Number of successful extrapolations : " << n_ext << endl;
0095 m_EU.print();
0096 }
0097 }
0098
0099
0100
0101
0102
0103 if (n_ext > 0) {
0104 m_TA.run();
0105 if (m_tf.config()->Debug(3))
0106 m_TA.print();
0107 }
0108
0109
0110 if (!m_TA.isEmpty(0))
0111 m_AUs[0].run(c);
0112 if (!m_TA.isEmpty(1))
0113 m_AUs[1].run(c);
0114
0115 if (m_spid.wheel() == -1) {
0116 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(2) > 3 && m_TrackCands[0].address(2) < 6)
0117 m_TrackCands[0].reset();
0118 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(3) > 3 && m_TrackCands[0].address(3) < 6)
0119 m_TrackCands[0].reset();
0120 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(4) > 3 && m_TrackCands[0].address(4) < 6)
0121 m_TrackCands[0].reset();
0122
0123 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(2) > 3 && m_TracKCands[0].address(2) < 6)
0124 m_TracKCands[0].reset();
0125 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(3) > 3 && m_TracKCands[0].address(3) < 6)
0126 m_TracKCands[0].reset();
0127 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(4) > 3 && m_TracKCands[0].address(4) < 6)
0128 m_TracKCands[0].reset();
0129
0130 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(2) > 3 && m_TrackCands[1].address(2) < 6)
0131 m_TrackCands[1].reset();
0132 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(3) > 3 && m_TrackCands[1].address(3) < 6)
0133 m_TrackCands[1].reset();
0134 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(4) > 3 && m_TrackCands[1].address(4) < 6)
0135 m_TrackCands[1].reset();
0136
0137 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(2) > 3 && m_TracKCands[1].address(2) < 6)
0138 m_TracKCands[1].reset();
0139 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(3) > 3 && m_TracKCands[1].address(3) < 6)
0140 m_TracKCands[1].reset();
0141 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(4) > 3 && m_TracKCands[1].address(4) < 6)
0142 m_TracKCands[1].reset();
0143
0144 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(2) > 7 && m_TrackCands[0].address(2) < 10)
0145 m_TrackCands[0].reset();
0146 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(3) > 7 && m_TrackCands[0].address(3) < 10)
0147 m_TrackCands[0].reset();
0148 if (!m_TrackCands[0].empty() && m_TrackCands[0].address(4) > 7 && m_TrackCands[0].address(4) < 10)
0149 m_TrackCands[0].reset();
0150
0151 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(2) > 7 && m_TracKCands[0].address(2) < 10)
0152 m_TracKCands[0].reset();
0153 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(3) > 7 && m_TracKCands[0].address(3) < 10)
0154 m_TracKCands[0].reset();
0155 if (!m_TracKCands[0].empty() && m_TracKCands[0].address(4) > 7 && m_TracKCands[0].address(4) < 10)
0156 m_TracKCands[0].reset();
0157
0158 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(2) > 7 && m_TrackCands[1].address(2) < 10)
0159 m_TrackCands[1].reset();
0160 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(3) > 7 && m_TrackCands[1].address(3) < 10)
0161 m_TrackCands[1].reset();
0162 if (!m_TrackCands[1].empty() && m_TrackCands[1].address(4) > 7 && m_TrackCands[1].address(4) < 10)
0163 m_TrackCands[1].reset();
0164
0165 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(2) > 7 && m_TracKCands[1].address(2) < 10)
0166 m_TracKCands[1].reset();
0167 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(3) > 7 && m_TracKCands[1].address(3) < 10)
0168 m_TracKCands[1].reset();
0169 if (!m_TracKCands[1].empty() && m_TracKCands[1].address(4) > 7 && m_TracKCands[1].address(4) < 10)
0170 m_TracKCands[1].reset();
0171 }
0172 }
0173
0174
0175
0176
0177 void L1MuDTSectorProcessor::reset() {
0178 m_SectorReceiver.reset();
0179 m_DataBuffer.reset();
0180 m_EU.reset();
0181 m_TA.reset();
0182 m_AUs[0].reset();
0183 m_AUs[1].reset();
0184 m_TrackCands[0].reset();
0185 m_TrackCands[1].reset();
0186 m_TracKCands[0].reset();
0187 m_TracKCands[1].reset();
0188 }
0189
0190
0191
0192
0193 void L1MuDTSectorProcessor::print() const {
0194 if (anyTrack()) {
0195 cout << "Muon candidates found in " << m_spid << " : " << endl;
0196 auto iter = m_TrackCands.cbegin();
0197 while (iter != m_TrackCands.end()) {
0198 iter->print();
0199 iter++;
0200 }
0201 }
0202 }
0203
0204
0205
0206
0207 const L1MuDTSectorProcessor* L1MuDTSectorProcessor::neighbour() const {
0208 int sector = m_spid.sector();
0209 int wheel = m_spid.wheel();
0210
0211
0212
0213
0214
0215 if (wheel == 1)
0216 return nullptr;
0217 wheel = (wheel == -1) ? 1 : (wheel / abs(wheel)) * (abs(wheel) - 1);
0218
0219 const L1MuDTSecProcId id(wheel, sector);
0220
0221 return m_tf.sp(id);
0222 }
0223
0224
0225
0226
0227 bool L1MuDTSectorProcessor::anyTrack() const {
0228 if (!m_TrackCands[0].empty())
0229 return true;
0230 if (!m_TrackCands[1].empty())
0231 return true;
0232
0233 return false;
0234 }