59 {
60
61
63 ATH_CHECK(gTowersContainer.record(std::make_unique<xAOD::gFexTowerContainer>(), std::make_unique<xAOD::gFexTowerAuxContainer>()));
64 ATH_MSG_DEBUG(
"Recorded gFexTriggerTower container with key " << gTowersContainer.key());
65
66 int rows = tmp_gTowersIDs_subset.size();
67 int cols = tmp_gTowersIDs_subset[0].size();
68
69 std::copy(&tmp_gTowersIDs_subset[0][0], &tmp_gTowersIDs_subset[0][0]+(rows*cols),&
m_gTowersIDs[0][0]);
70
74
78
82
83
84
86 memset(&tmp_gTowersIDs_subset_centralFPGA, 0, sizeof tmp_gTowersIDs_subset_centralFPGA);
88 for (int mycol = 0; mycol<12; mycol++){
89 tmp_gTowersIDs_subset_centralFPGA[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+8];
90 }
91 }
93 m_gFEXFPGA_Tool->FillgTowerEDMCentral(gTowersContainer, tmp_gTowersIDs_subset_centralFPGA, Atwr, Atwr50, Asat);
95
96
97
98
100 memset(&tmp_gTowersIDs_subset_centralFPGA_B, 0, sizeof tmp_gTowersIDs_subset_centralFPGA_B);
102 for (int mycol = 0; mycol<12; mycol++){
103 tmp_gTowersIDs_subset_centralFPGA_B[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+20];
104 }
105 }
107 m_gFEXFPGA_Tool->FillgTowerEDMCentral(gTowersContainer, tmp_gTowersIDs_subset_centralFPGA_B, Btwr, Btwr50, Bsat);
109
110
111
112
113
114
115
116
117
118
120 memset(&tmp_gTowersIDs_subset_forwardFPGA_N, 0, sizeof tmp_gTowersIDs_subset_forwardFPGA_N);
122 for (int mycol = 0; mycol<4; mycol++){
123 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
124 }
125 }
127 for (int mycol = 4; mycol<8; mycol++){
128 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
129 }
130 }
131
132
133
134
135
137 memset(&tmp_gTowersIDs_subset_forwardFPGA_P, 0, sizeof tmp_gTowersIDs_subset_forwardFPGA_P);
139 for (int mycol = 0; mycol<4; mycol++){
140 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
141 }
142 }
144 for (int mycol = 4; mycol<8; mycol++){
145 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
146 }
147 }
148
150 m_gFEXFPGA_Tool->FillgTowerEDMForward(gTowersContainer, tmp_gTowersIDs_subset_forwardFPGA_N, tmp_gTowersIDs_subset_forwardFPGA_P, Ctwr, Ctwr50, Csat);
152
153
154
155
156
157 SG::ReadHandle<TrigConf::L1Menu> l1Menu (
m_l1MenuKey);
159
160
161 auto & thr_gLJ = l1Menu->thrExtraInfo().gLJ();
162 int gLJ_seedThrA = 0;
163 int gLJ_seedThrB = 0;
164 int gLJ_seedThrC = 0;
165 gLJ_seedThrA = thr_gLJ.seedThrCounts('A');
166 gLJ_seedThrB = thr_gLJ.seedThrCounts('B');
167 gLJ_seedThrC = thr_gLJ.seedThrCounts('C');
168
169 int gLJ_ptMinToTopoCounts1 = 0;
170 int gLJ_ptMinToTopoCounts2 = 0;
171 gLJ_ptMinToTopoCounts1 = thr_gLJ.ptMinToTopoCounts(1);
172 gLJ_ptMinToTopoCounts2 = thr_gLJ.ptMinToTopoCounts(2);
173 float gLJ_rhoMaxA = 0;
174 float gLJ_rhoMaxB = 0;
175 float gLJ_rhoMaxC = 0;
176
177 gLJ_rhoMaxA = (thr_gLJ.rhoTowerMax('A')*1000)/50;
178 gLJ_rhoMaxB = (thr_gLJ.rhoTowerMax('B')*1000)/50;
179 gLJ_rhoMaxC = (thr_gLJ.rhoTowerMax('C')*1000)/50;
180
181
182
183 auto & thr_gJ = l1Menu->thrExtraInfo().gJ();
184 int gJ_ptMinToTopoCounts1 = 0;
185 int gJ_ptMinToTopoCounts2 = 0;
186 gJ_ptMinToTopoCounts1 = thr_gJ.ptMinToTopoCounts(1);
187 gJ_ptMinToTopoCounts2 = thr_gJ.ptMinToTopoCounts(2);
188
189
190 int pucA = 0;
191 int pucB = 0;
192 int pucC = 0;
193
195
200 }
201
202
203
204
205 std::array<uint32_t, 7> ATOB1_dat = {0};
206 std::array<uint32_t, 7> ATOB2_dat = {0};
207 std::array<uint32_t, 7> BTOB1_dat = {0};
208 std::array<uint32_t, 7> BTOB2_dat = {0};
209 std::array<uint32_t, 7> CTOB1_dat = {0};
210 std::array<uint32_t, 7> CTOB2_dat = {0};
211
212
213
214 auto tobs_v =
m_gFEXJetAlgoTool->largeRfinder(Atwr, Btwr, Ctwr, Asat, Bsat, Csat, pucA, pucB, pucC,
215 gLJ_seedThrA, gLJ_seedThrB, gLJ_seedThrC, gJ_ptMinToTopoCounts1, gJ_ptMinToTopoCounts2,
216 jetThreshold, gLJ_ptMinToTopoCounts1, gLJ_ptMinToTopoCounts2,
217 ATOB1_dat, ATOB2_dat,
218 BTOB1_dat, BTOB2_dat,
219 CTOB1_dat, CTOB2_dat);
220
224
228
229
234
239
244
245
252
253
254
255 std::array<int32_t, 4> outJwojTOB = {0};
256 std::array<uint32_t, 4> outAltMetTOB = {0};
257
258
259 auto & thr_gXE = l1Menu->thrExtraInfo().gXE();
260 int gXE_seedThrA = 0;
261 int gXE_seedThrB = 0;
262 int gXE_seedThrC = 0;
263 gXE_seedThrA = thr_gXE.seedThr('A');
264 gXE_seedThrB = thr_gXE.seedThr('B');
265 gXE_seedThrC = thr_gXE.seedThr('C');
266
267
268 int aFPGA_A = thr_gXE.JWOJ_param('A','a');
269 int bFPGA_A = thr_gXE.JWOJ_param('A','b');
270 int aFPGA_B = thr_gXE.JWOJ_param('B','a');
271 int bFPGA_B = thr_gXE.JWOJ_param('B','b');
272 int aFPGA_C = thr_gXE.JWOJ_param('C','a');
273 int bFPGA_C = thr_gXE.JWOJ_param('C','b');
274
275
277 aFPGA_B, bFPGA_B,
278 aFPGA_C, bFPGA_C,
279 gXE_seedThrA, gXE_seedThrB, gXE_seedThrC);
280
282
287
288
289
294
295
296
297 std::vector<int> thr_A (12, 0);
298 std::vector<int> thr_B (12, 0);
299
301
303
308
309
310
315
316 for (
int i = 0;
i <14;
i++){
317 gFEXOutputs->addJetTob(tobs_v[i]->getWord());
318 gFEXOutputs->addValueJet("EtaJet", tobs_v[i]->getEta());
319 gFEXOutputs->addValueJet(
"PhiJet", tobs_v[i]->
getPhi());
320 gFEXOutputs->addValueJet("ETJet", tobs_v[i]->getET());
321 gFEXOutputs->addValueJet("StatusJet", tobs_v[i]->getStatus());
322 gFEXOutputs->addValueJet("TobIDJet", tobs_v[i]->getTobID());
323 gFEXOutputs->fillJet();
324
325 }
326
327 for (
int i = 0;
i <4;
i++){
328 gFEXOutputs->addGlobalTob(global_tobs[i]->getWord());
329 gFEXOutputs->addValueGlobal("GlobalQuantity1", global_tobs[i]->getQuantity1());
330 gFEXOutputs->addValueGlobal("GlobalQuantity2", global_tobs[i]->getQuantity2());
331 gFEXOutputs->addValueGlobal("SaturationGlobal", global_tobs[i]->getSaturation());
332 gFEXOutputs->addValueGlobal("TobIDGlobal", global_tobs[i]->getTobID());
333 gFEXOutputs->addValueGlobal("GlobalStatus1", global_tobs[i]->getStatus1());
334 gFEXOutputs->addValueGlobal("GlobalStatus2", global_tobs[i]->getStatus2());
335 gFEXOutputs->fillGlobal();
336
337 }
338
339 return StatusCode::SUCCESS;
340
341}
#define ATH_CHECK
Evaluate an expression and check for errors.
static constexpr int centralNphi
static constexpr int jetThr
static constexpr int forwardNphi
static constexpr bool ENABLE_PUC
ToolHandle< IgFEXFPGA > m_gFEXFPGA_Tool
std::vector< uint32_t > m_gMETComponentsJwojTobWords
gTowersIDs m_gTowersIDs
Internal data.
std::vector< int32_t > m_gScalarEJwojTobWords
SG::ReadHandleKey< TrigConf::L1Menu > m_l1MenuKey
ToolHandle< IgFEXJwoJAlgo > m_gFEXJwoJAlgoTool
SG::WriteHandleKey< xAOD::gFexTowerContainer > m_gTowersWriteKey
std::vector< uint32_t > m_gMHTComponentsJwojTobWords
std::vector< uint32_t > m_gMSTComponentsJwojTobWords
std::vector< uint32_t > m_gScalarERmsTobWords
std::vector< uint32_t > m_gScalarENoiseCutTobWords
std::vector< uint32_t > m_gMETComponentsRmsTobWords
std::vector< uint32_t > m_gRhoTobWords
std::vector< uint32_t > m_gJetTobWords
ToolHandle< IgFEXJetAlgo > m_gFEXJetAlgoTool
ToolHandle< IgFEXaltMetAlgo > m_gFEXaltMetAlgoTool
std::vector< uint32_t > m_gMETComponentsNoiseCutTobWords
std::vector< uint32_t > m_gBlockTobWords
float getPhi(const xAOD::TrackParticle &p)
Accessor utility function for getting the value of phi.
std::array< std::array< int, 8 >, 32 > gTowersForward
std::array< std::array< int, 12 >, 32 > gTowersCentral
std::array< std::array< int, 12 >, 32 > gTowersType