47 std::vector<uint32_t>& gRhoTobWords,
48 std::vector<uint32_t>& gBlockTobWords,
49 std::vector<uint32_t>& gJetTobWords,
50 std::vector<int32_t>& gScalarEJwojTobWords,
51 std::vector<uint32_t>& gMETComponentsJwojTobWords,
52 std::vector<uint32_t>& gMHTComponentsJwojTobWords,
53 std::vector<uint32_t>& gMSTComponentsJwojTobWords,
54 std::vector<uint32_t>& gMETComponentsNoiseCutTobWords,
55 std::vector<uint32_t>& gMETComponentsRmsTobWords,
56 std::vector<uint32_t>& gScalarENoiseCutTobWords,
57 std::vector<uint32_t>& gScalarERmsTobWords)
const {
61 ATH_CHECK(gTowersContainer.
record(std::make_unique<xAOD::gFexTowerContainer>(), std::make_unique<xAOD::gFexTowerAuxContainer>()));
62 ATH_MSG_DEBUG(
"Recorded gFexTriggerTower container with key " << gTowersContainer.
key());
79 memset(&tmp_gTowersIDs_subset_centralFPGA, 0,
sizeof tmp_gTowersIDs_subset_centralFPGA);
81 for (
int mycol = 0; mycol<12; mycol++){
82 tmp_gTowersIDs_subset_centralFPGA[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+8];
86 m_gFEXFPGA_Tool->FillgTowerEDMCentral(ctx, gTowersContainer, 0, tmp_gTowersIDs_subset_centralFPGA, Atwr, Atwr50, Asat);
90 memset(&tmp_gTowersIDs_subset_centralFPGA_B, 0,
sizeof tmp_gTowersIDs_subset_centralFPGA_B);
92 for (
int mycol = 0; mycol<12; mycol++){
93 tmp_gTowersIDs_subset_centralFPGA_B[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+20];
97 m_gFEXFPGA_Tool->FillgTowerEDMCentral(ctx, gTowersContainer, 1, tmp_gTowersIDs_subset_centralFPGA_B, Btwr, Btwr50, Bsat);
106 memset(&tmp_gTowersIDs_subset_forwardFPGA_N, 0,
sizeof tmp_gTowersIDs_subset_forwardFPGA_N);
108 for (
int mycol = 0; mycol<4; mycol++){
109 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
113 for (
int mycol = 4; mycol<8; mycol++){
114 tmp_gTowersIDs_subset_forwardFPGA_N[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol];
123 memset(&tmp_gTowersIDs_subset_forwardFPGA_P, 0,
sizeof tmp_gTowersIDs_subset_forwardFPGA_P);
125 for (
int mycol = 0; mycol<4; mycol++){
126 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
130 for (
int mycol = 4; mycol<8; mycol++){
131 tmp_gTowersIDs_subset_forwardFPGA_P[myrow][mycol] = tmp_gTowersIDs_subset[myrow][mycol+32];
135 m_gFEXFPGA_Tool->FillgTowerEDMForward(ctx, gTowersContainer, 2, tmp_gTowersIDs_subset_forwardFPGA_N, tmp_gTowersIDs_subset_forwardFPGA_P, Ctwr, Ctwr50, Csat);
143 auto & thr_gLJ = l1Menu->thrExtraInfo().gLJ();
144 int gLJ_seedThrA = thr_gLJ.seedThrCounts(
'A');
145 int gLJ_seedThrB = thr_gLJ.seedThrCounts(
'B');
146 int gLJ_seedThrC = thr_gLJ.seedThrCounts(
'C');
148 int gLJ_ptMinToTopoCounts1 = thr_gLJ.ptMinToTopoCounts(1);
149 int gLJ_ptMinToTopoCounts2 = thr_gLJ.ptMinToTopoCounts(2);
151 float gLJ_rhoMaxA = (thr_gLJ.rhoTowerMax(
'A')*1000)/50;
152 float gLJ_rhoMaxB = (thr_gLJ.rhoTowerMax(
'B')*1000)/50;
153 float gLJ_rhoMaxC = (thr_gLJ.rhoTowerMax(
'C')*1000)/50;
157 auto & thr_gJ = l1Menu->thrExtraInfo().gJ();
158 int gJ_ptMinToTopoCounts1 = thr_gJ.ptMinToTopoCounts(1);
159 int gJ_ptMinToTopoCounts2 = thr_gJ.ptMinToTopoCounts(2);
180 std::array<uint32_t, 7> ATOB1_dat = {0};
181 std::array<uint32_t, 7> ATOB2_dat = {0};
182 std::array<uint32_t, 7> BTOB1_dat = {0};
183 std::array<uint32_t, 7> BTOB2_dat = {0};
184 std::array<uint32_t, 7> CTOB1_dat = {0};
185 std::array<uint32_t, 7> CTOB2_dat = {0};
189 auto tobs_v =
m_gFEXJetAlgoTool->largeRfinder(Atwr, Btwr, Ctwr, Asat, Bsat, Csat, pucA, pucB, pucC,
190 gLJ_seedThrA, gLJ_seedThrB, gLJ_seedThrC, gJ_ptMinToTopoCounts1, gJ_ptMinToTopoCounts2,
191 jetThreshold, gLJ_ptMinToTopoCounts1, gLJ_ptMinToTopoCounts2,
192 ATOB1_dat, ATOB2_dat,
193 BTOB1_dat, BTOB2_dat,
194 CTOB1_dat, CTOB2_dat);
196 gRhoTobWords.resize(3);
197 gBlockTobWords.resize(12);
198 gJetTobWords.resize(6);
200 gRhoTobWords[0] = ATOB2_dat[0];
201 gRhoTobWords[1] = BTOB2_dat[0];
202 gRhoTobWords[2] = CTOB2_dat[0];
205 gBlockTobWords[0] = ATOB1_dat[1];
206 gBlockTobWords[1] = ATOB2_dat[1];
207 gBlockTobWords[2] = BTOB1_dat[1];
208 gBlockTobWords[3] = BTOB2_dat[1];
210 gBlockTobWords[4] = ATOB1_dat[2];
211 gBlockTobWords[5] = ATOB2_dat[2];
212 gBlockTobWords[6] = BTOB1_dat[2];
213 gBlockTobWords[7] = BTOB2_dat[2];
215 gBlockTobWords[8] = CTOB1_dat[1];
216 gBlockTobWords[9] = CTOB2_dat[1];
217 gBlockTobWords[10] = CTOB1_dat[2];
218 gBlockTobWords[11] = CTOB2_dat[2];
221 gJetTobWords[0] = ATOB1_dat[3];
222 gJetTobWords[1] = ATOB2_dat[3];
223 gJetTobWords[2] = BTOB1_dat[3];
224 gJetTobWords[3] = BTOB2_dat[3];
225 gJetTobWords[4] = CTOB1_dat[3];
226 gJetTobWords[5] = CTOB2_dat[3];
230 std::array<int32_t, 4> outJwojTOB = {0};
231 std::array<uint32_t, 4> outAltMetTOB = {0};
234 auto global_tobs =
m_gFEXJwoJAlgoTool->jwojAlgo(ctx, Atwr, pucA_JWJ, Btwr, pucB_JWJ, Ctwr, pucC_JWJ, outJwojTOB);
236 gScalarEJwojTobWords.resize(1);
237 gMETComponentsJwojTobWords.resize(1);
238 gMHTComponentsJwojTobWords.resize(1);
239 gMSTComponentsJwojTobWords.resize(1);
243 gScalarEJwojTobWords[0] = outJwojTOB[0];
244 gMETComponentsJwojTobWords[0] = outJwojTOB[1];
245 gMHTComponentsJwojTobWords[0] = outJwojTOB[2];
246 gMSTComponentsJwojTobWords[0] = outJwojTOB[3];
251 gMETComponentsNoiseCutTobWords.resize(1);
252 gMETComponentsRmsTobWords.resize(1);
253 gScalarENoiseCutTobWords.resize(1);
254 gScalarERmsTobWords.resize(1);
257 gMETComponentsNoiseCutTobWords[0] = outAltMetTOB[0];
258 gMETComponentsRmsTobWords[0] = outAltMetTOB[1];
259 gScalarENoiseCutTobWords[0] = outAltMetTOB[2];
260 gScalarERmsTobWords[0] = outAltMetTOB[3];
262 for (
int i = 0; i <14; i++){
263 gFEXOutputs->
addJetTob(tobs_v[i]->getWord());
264 gFEXOutputs->
addValueJet(
"EtaJet", tobs_v[i]->getEta());
265 gFEXOutputs->
addValueJet(
"PhiJet", tobs_v[i]->getPhi());
266 gFEXOutputs->
addValueJet(
"ETJet", tobs_v[i]->getET());
267 gFEXOutputs->
addValueJet(
"StatusJet", tobs_v[i]->getStatus());
268 gFEXOutputs->
addValueJet(
"TobIDJet", tobs_v[i]->getTobID());
273 for (
int i = 0; i <4; i++){
275 gFEXOutputs->
addValueGlobal(
"GlobalQuantity1", global_tobs[i]->getQuantity1());
276 gFEXOutputs->
addValueGlobal(
"GlobalQuantity2", global_tobs[i]->getQuantity2());
277 gFEXOutputs->
addValueGlobal(
"SaturationGlobal", global_tobs[i]->getSaturation());
278 gFEXOutputs->
addValueGlobal(
"TobIDGlobal", global_tobs[i]->getTobID());
279 gFEXOutputs->
addValueGlobal(
"GlobalStatus1", global_tobs[i]->getStatus1());
280 gFEXOutputs->
addValueGlobal(
"GlobalStatus2", global_tobs[i]->getStatus2());
285 return StatusCode::SUCCESS;