ATLAS Offline Software
Loading...
Searching...
No Matches
eFEXSim.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5//***************************************************************************
6// eFEXSim - description
7// -------------------
8// begin : 12 07 2019
9// email : jacob.julian.kempster@cern.ch
10// ***************************************************************************/
11
12#include "eFEXSim.h"
13#include "L1CaloFEXSim/eTower.h"
14#include "eFEXFPGA.h"
16
17namespace LVL1 {
18
19 eFEXSim::eFEXSim(const std::string& type,const std::string& name,const IInterface* parent):
20 AthAlgTool(type,name,parent)
21 {
22 declareInterface<eFEXSim>(this);
23 }
24
25
26 //---------------- Initialisation -------------------------------------------------
27
29 {
30 ATH_CHECK( m_eFEXFPGATool.retrieve() );
31 return StatusCode::SUCCESS;
32 }
33
34 //---------------- Finalisation -------------------------------------------------
35
36 StatusCode eFEXSim::finalize()
37 {
38 return StatusCode::SUCCESS;
39 }
40
41
43 {
44 int rows = sizeof m_eTowersIDs / sizeof m_eTowersIDs[0];
45 int cols = sizeof m_eTowersIDs[0] / sizeof m_eTowersIDs[0][0];
46
47 m_id = -1;
49 for (int i=0; i<rows; i++){
50 for (int j=0; j<cols; j++){
51 m_eTowersIDs[i][j] = 0;
52 }
53 }
54
55 }
56
57 void eFEXSim::init(int id)
58 {
59 m_id = id;
60 }
61
64 {
65 }
66
67
68StatusCode eFEXSim::NewExecute(int tmp_eTowersIDs_subset[10][18], eFEXOutputCollection* inputOutputCollection, const EventContext& ctx){
69 m_emTobObjects.clear();
71 m_tauBDTTobObjects.clear();
72
73 std::copy(&tmp_eTowersIDs_subset[0][0], &tmp_eTowersIDs_subset[0][0]+(10*18),&m_eTowersIDs[0][0]);
74
75 int tmp_eTowersIDs_subset_FPGA[10][6];
76
77
78 //FPGA 0----------------------------------------------------------------------------------------------------------------------------------------------
79 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
80 for (int myrow = 0; myrow<10; myrow++){
81 for (int mycol = 0; mycol<6; mycol++){
82 tmp_eTowersIDs_subset_FPGA[myrow][mycol] = tmp_eTowersIDs_subset[myrow][mycol];
83 }
84 }
85 ATH_CHECK(m_eFEXFPGATool->init(0, m_id));
86 m_eFEXFPGATool->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
87 ATH_CHECK(m_eFEXFPGATool->execute(inputOutputCollection,ctx));
88 m_emTobObjects.push_back(m_eFEXFPGATool->getEmTOBs());
89 m_tauHeuristicTobObjects.push_back(m_eFEXFPGATool->getTauHeuristicTOBs());
90 m_tauBDTTobObjects.push_back(m_eFEXFPGATool->getTauBDTTOBs());
91 m_eFEXFPGATool->reset();
92 //FPGA 0----------------------------------------------------------------------------------------------------------------------------------------------
93
94 //FPGA 1----------------------------------------------------------------------------------------------------------------------------------------------
95 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
96 for (int myrow = 0; myrow<10; myrow++){
97 for (int mycol = 4; mycol<10; mycol++){
98 tmp_eTowersIDs_subset_FPGA[myrow][mycol-4] = tmp_eTowersIDs_subset[myrow][mycol];
99 }
100 }
101 ATH_CHECK(m_eFEXFPGATool->init(1, m_id));
102 m_eFEXFPGATool->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
103 ATH_CHECK(m_eFEXFPGATool->execute(inputOutputCollection,ctx));
104 m_emTobObjects.push_back(m_eFEXFPGATool->getEmTOBs());
105 m_tauHeuristicTobObjects.push_back(m_eFEXFPGATool->getTauHeuristicTOBs());
106 m_tauBDTTobObjects.push_back(m_eFEXFPGATool->getTauBDTTOBs());
107 m_eFEXFPGATool->reset();
108 //FPGA 1----------------------------------------------------------------------------------------------------------------------------------------------
109
110
111 //FPGA 2----------------------------------------------------------------------------------------------------------------------------------------------
112 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
113 for (int myrow = 0; myrow<10; myrow++){
114 for (int mycol = 8; mycol<14; mycol++){
115 tmp_eTowersIDs_subset_FPGA[myrow][mycol-8] = tmp_eTowersIDs_subset[myrow][mycol];
116 }
117 }
118 ATH_CHECK(m_eFEXFPGATool->init(2, m_id));
119 m_eFEXFPGATool->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
120 ATH_CHECK(m_eFEXFPGATool->execute(inputOutputCollection,ctx));
121 m_emTobObjects.push_back(m_eFEXFPGATool->getEmTOBs());
122 m_tauHeuristicTobObjects.push_back(m_eFEXFPGATool->getTauHeuristicTOBs());
123 m_tauBDTTobObjects.push_back(m_eFEXFPGATool->getTauBDTTOBs());
124 m_eFEXFPGATool->reset();
125 //FPGA 2----------------------------------------------------------------------------------------------------------------------------------------------
126
127 //FPGA 3----------------------------------------------------------------------------------------------------------------------------------------------
128 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
129 for (int myrow = 0; myrow<10; myrow++){
130 for (int mycol = 12; mycol<18; mycol++){
131 tmp_eTowersIDs_subset_FPGA[myrow][mycol-12] = tmp_eTowersIDs_subset[myrow][mycol];
132 }
133 }
134 ATH_CHECK(m_eFEXFPGATool->init(3, m_id));
135 m_eFEXFPGATool->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
136 ATH_CHECK(m_eFEXFPGATool->execute(inputOutputCollection,ctx));
137 m_emTobObjects.push_back(m_eFEXFPGATool->getEmTOBs());
138 m_tauHeuristicTobObjects.push_back(m_eFEXFPGATool->getTauHeuristicTOBs());
139 m_tauBDTTobObjects.push_back(m_eFEXFPGATool->getTauBDTTOBs());
140 m_eFEXFPGATool->reset();
141 //FPGA 3----------------------------------------------------------------------------------------------------------------------------------------------
142
143 return StatusCode::SUCCESS;
144
145}
146
147
148std::vector<std::unique_ptr<eFEXegTOB>> eFEXSim::getEmTOBs()
149{
150
151 std::vector<std::unique_ptr<eFEXegTOB>> tobsSort;
152 //bool first = true;
153
154 // concatonate tobs from the fpgas
155 // As we're using unique_ptrs here we have to move rather than copy
156 for(auto &j : m_emTobObjects){
157 for (auto &k : j) {
158 tobsSort.push_back(std::move(k));
159 }
160 }
161
162 ATH_MSG_DEBUG("number of tobs: " <<tobsSort.size() << " in eFEX: " << m_id);
163
164 // Moving all TOB sorting to eFEXSysSim to allow xTOB generation
165 // Keep this just in case a more subtle need is discovered
166 /*
167 // sort the tobs from the fpgas by their et (last 12 bits of 32 bit word)
168 std::sort (tobsSort.begin(), tobsSort.end(), TOBetSort<eFEXegTOB>);
169
170 // return the 6 highest ET TOBs from the efex
171 if (tobsSort.size() > 6) tobsSort.resize(6);
172 */
173 return tobsSort;
174}
175
176
177std::vector<std::unique_ptr<eFEXtauTOB>> eFEXSim::getTauTOBs(std::vector<std::vector<std::unique_ptr<eFEXtauTOB>> >& tauTobObjects)
178{
179
180 std::vector<std::unique_ptr<eFEXtauTOB>> tobsSort;
181
182 // concatenate tobs from the fpgas
183 // As we're using unique_ptrs here we have to move rather than copy
184 for( auto &j : tauTobObjects ){
185 for (auto &k : j) {
186 tobsSort.push_back(std::move(k));
187 }
188 }
189
190 ATH_MSG_DEBUG("number of tau tobs: " << tobsSort.size() << " in eFEX: " << m_id);
191
192 // Moving all TOB sorting to eFEXSysSim to allow xTOB generation
193 // Keep this just in case a more subtle need is discovered
194 /*
195 // sort the tobs from the fpgas by their et (last 12 bits of 32 bit word)
196 std::sort( tobsSort.begin(), tobsSort.end(), TOBetSort<eFEXtauTOB>);
197
198 // return the tob 6 highest ET TOBs from the efex
199 if (tobsSort.size() > 6) tobsSort.resize(6);
200 */
201 return tobsSort;
202}
203
204std::vector<std::unique_ptr<eFEXtauTOB>> eFEXSim::getTauHeuristicTOBs()
205{
207}
208
209std::vector<std::unique_ptr<eFEXtauTOB>> eFEXSim::getTauBDTTOBs()
210{
212}
213
214void eFEXSim::SetTowersAndCells_SG(int tmp_eTowersIDs_subset[10][18]){ // METHOD USING ONLY IDS
215
216 std::copy(&tmp_eTowersIDs_subset[0][0], &tmp_eTowersIDs_subset[0][0]+(10*18),&m_eTowersIDs[0][0]);
217
218 int tmp_eTowersIDs_subset_FPGA[10][6];
219
220 //FPGA 0----------------------------------------------------------------------------------------------------------------------------------------------
221 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
222 for (int myrow = 0; myrow<10; myrow++){
223 for (int mycol = 0; mycol<6; mycol++){
224 tmp_eTowersIDs_subset_FPGA[myrow][mycol] = tmp_eTowersIDs_subset[myrow][mycol];
225 }
226 }
227 m_eFEXFPGACollection.at(0)->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
228 //FPGA 0----------------------------------------------------------------------------------------------------------------------------------------------
229
230 //FPGA 1----------------------------------------------------------------------------------------------------------------------------------------------
231 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
232 for (int myrow = 0; myrow<10; myrow++){
233 for (int mycol = 4; mycol<10; mycol++){
234 tmp_eTowersIDs_subset_FPGA[myrow][mycol-4] = tmp_eTowersIDs_subset[myrow][mycol];
235 }
236 }
237 m_eFEXFPGACollection.at(1)->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
238 //FPGA 1----------------------------------------------------------------------------------------------------------------------------------------------
239
240
241 //FPGA 2----------------------------------------------------------------------------------------------------------------------------------------------
242 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
243 for (int myrow = 0; myrow<10; myrow++){
244 for (int mycol = 8; mycol<14; mycol++){
245 tmp_eTowersIDs_subset_FPGA[myrow][mycol-8] = tmp_eTowersIDs_subset[myrow][mycol];
246 }
247 }
248 m_eFEXFPGACollection.at(2)->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
249 //FPGA 2----------------------------------------------------------------------------------------------------------------------------------------------
250
251 //FPGA 3----------------------------------------------------------------------------------------------------------------------------------------------
252 memset(tmp_eTowersIDs_subset_FPGA, 0, sizeof tmp_eTowersIDs_subset_FPGA);
253 for (int myrow = 0; myrow<10; myrow++){
254 for (int mycol = 12; mycol<18; mycol++){
255 tmp_eTowersIDs_subset_FPGA[myrow][mycol-12] = tmp_eTowersIDs_subset[myrow][mycol];
256 }
257 }
258 m_eFEXFPGACollection.at(3)->SetTowersAndCells_SG(tmp_eTowersIDs_subset_FPGA);
259 //FPGA 3----------------------------------------------------------------------------------------------------------------------------------------------
260
261}
262
263} // end of namespace bracket
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
ToolHandle< eFEXFPGA > m_eFEXFPGATool
Definition eFEXSim.h:76
std::vector< std::vector< std::unique_ptr< eFEXtauTOB > > > m_tauHeuristicTobObjects
Definition eFEXSim.h:73
std::vector< std::unique_ptr< eFEXtauTOB > > getTauTOBs(std::vector< std::vector< std::unique_ptr< eFEXtauTOB > > > &tauTobObjects)
Definition eFEXSim.cxx:177
virtual std::vector< std::unique_ptr< eFEXegTOB > > getEmTOBs()
Definition eFEXSim.cxx:148
int m_id
Internal data.
Definition eFEXSim.h:67
std::vector< std::vector< std::unique_ptr< eFEXegTOB > > > m_emTobObjects
Definition eFEXSim.h:72
virtual void reset()
Definition eFEXSim.cxx:42
virtual StatusCode finalize()
standard Athena-Algorithm method
Definition eFEXSim.cxx:36
virtual std::vector< std::unique_ptr< eFEXtauTOB > > getTauBDTTOBs()
Definition eFEXSim.cxx:209
virtual void init(int id)
Definition eFEXSim.cxx:57
virtual std::vector< std::unique_ptr< eFEXtauTOB > > getTauHeuristicTOBs()
Definition eFEXSim.cxx:204
std::vector< std::vector< std::unique_ptr< eFEXtauTOB > > > m_tauBDTTobObjects
Definition eFEXSim.h:74
virtual StatusCode initialize()
standard Athena-Algorithm method
Definition eFEXSim.cxx:28
eFEXSim(const std::string &type, const std::string &name, const IInterface *parent)
Constructors.
Definition eFEXSim.cxx:19
virtual void SetTowersAndCells_SG(int tmp[10][18])
Definition eFEXSim.cxx:214
std::vector< eFEXFPGA * > m_eFEXFPGACollection
Definition eFEXSim.h:70
virtual ~eFEXSim()
Destructor.
Definition eFEXSim.cxx:63
virtual StatusCode NewExecute(int tmp[10][18], eFEXOutputCollection *inputOutputCollection, const EventContext &ctx)
Definition eFEXSim.cxx:68
int m_eTowersIDs[10][18]
Definition eFEXSim.h:68
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...