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 #include "L1Trigger/DTTrackFinder/src/L1MuDTSEU.h"
0019
0020
0021
0022
0023
0024 #include <iostream>
0025 #include <algorithm>
0026
0027
0028
0029
0030
0031 #include "L1Trigger/DTTrackFinder/interface/L1MuDTTFConfig.h"
0032 #include "L1Trigger/DTTrackFinder/src/L1MuDTSectorProcessor.h"
0033 #include "L1Trigger/DTTrackFinder/src/L1MuDTDataBuffer.h"
0034 #include "L1Trigger/DTTrackFinder/interface/L1MuDTTrackSegLoc.h"
0035 #include "L1Trigger/DTTrackFinder/interface/L1MuDTTrackSegPhi.h"
0036 #include "L1Trigger/DTTrackFinder/src/L1MuDTExtrapolationUnit.h"
0037 #include "L1Trigger/DTTrackFinder/src/L1MuDTEUX.h"
0038 #include "L1Trigger/DTTrackFinder/src/L1MuDTERS.h"
0039
0040 using namespace std;
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 L1MuDTSEU::L1MuDTSEU(const L1MuDTSectorProcessor& sp, Extrapolation ext, unsigned int tsId)
0051 : m_sp(sp), m_ext(ext), m_startTS_Id(tsId), m_startTS(nullptr), m_EUXs(), m_ERS() {
0052 m_EUXs.reserve(12);
0053
0054 for (int target_ts = 0; target_ts < 12; target_ts++) {
0055 m_EUXs.push_back(new L1MuDTEUX(m_sp, *this, target_ts));
0056 }
0057
0058 m_ERS = new L1MuDTERS(*this);
0059 }
0060
0061
0062
0063
0064
0065 L1MuDTSEU::~L1MuDTSEU() {
0066 vector<L1MuDTEUX*>::iterator iter_eux;
0067 for (iter_eux = m_EUXs.begin(); iter_eux != m_EUXs.end(); iter_eux++) {
0068 delete (*iter_eux);
0069 *iter_eux = nullptr;
0070 }
0071
0072 m_startTS = nullptr;
0073 m_EUXs.clear();
0074
0075 delete m_ERS;
0076 }
0077
0078
0079
0080
0081
0082
0083
0084
0085 void L1MuDTSEU::run(const L1MuDTExtLut& extLUTs, const L1MuDTTFParameters& pars) {
0086 if (L1MuDTTFConfig::Debug(3))
0087 cout << "Run SEU " << m_ext << " " << m_startTS_Id << endl;
0088
0089 pair<int, int> ext_pair = L1MuDTExtrapolationUnit::which_ext(m_ext);
0090 int target = ext_pair.second;
0091
0092
0093 bool nextWheel = isNextWheelSEU();
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 for (int reladr = 0; reladr < 12; reladr++) {
0117
0118 if (nextWheel && (reladr / 2) % 2 == 0)
0119 continue;
0120
0121 const L1MuDTTrackSegPhi* target_ts = m_sp.data()->getTSphi(target, reladr);
0122 if (target_ts && !target_ts->empty()) {
0123 m_EUXs[reladr]->load(m_startTS, target_ts);
0124 m_EUXs[reladr]->run(extLUTs, pars);
0125 if (m_EUXs[reladr]->result())
0126 m_EXtable.set(reladr);
0127 }
0128 }
0129
0130 if (L1MuDTTFConfig::Debug(3)) {
0131 int n_ext = numberOfExt();
0132 if (n_ext > 0)
0133 cout << "number of successful EUX : " << n_ext << endl;
0134 }
0135
0136 if (m_ERS)
0137 m_ERS->run();
0138
0139
0140
0141 m_QStable = m_EXtable;
0142 }
0143
0144
0145
0146
0147 void L1MuDTSEU::reset() {
0148 m_startTS = nullptr;
0149 vector<L1MuDTEUX*>::iterator iter_eux;
0150 for (iter_eux = m_EUXs.begin(); iter_eux != m_EUXs.end(); iter_eux++) {
0151 (*iter_eux)->reset();
0152 }
0153
0154 m_ERS->reset();
0155
0156 m_EXtable.reset();
0157 m_QStable.reset();
0158 }
0159
0160
0161
0162
0163 void L1MuDTSEU::reset(unsigned int relAdr) {
0164 m_EXtable.reset(relAdr);
0165 m_QStable.reset(relAdr);
0166 m_EUXs[relAdr]->reset();
0167
0168 }
0169
0170
0171
0172
0173 int L1MuDTSEU::numberOfExt() const {
0174 int number = 0;
0175 vector<L1MuDTEUX*>::const_iterator iter_eux;
0176 for (iter_eux = m_EUXs.begin(); iter_eux != m_EUXs.end(); iter_eux++) {
0177 if ((*iter_eux)->result())
0178 number++;
0179 }
0180
0181 return number;
0182 }