29 ISvcLocator* pSvcLocator)
64 for (
int iCellD = 0; iCellD <
N_CELLS_D; ++iCellD) {
70 for (
int iCellD = 0; iCellD <
N_CELLS_D; ++iCellD) {
76 double eta_BC_A = -1.45;
77 for (
int iCell = 0; iCell <
N_CELLS_BC; ++iCell) {
85 for (
int iCell = 0; iCell <
N_CELLS_BC; ++iCell) {
97 return StatusCode::SUCCESS;
111 memset(eneA, 0,
sizeof(eneA));
112 memset(eneBC, 0,
sizeof(eneBC));
113 memset(eneD, 0,
sizeof(eneD));
120 std::vector<const CaloCell*> cellList;
134 double phi[64] = { 0 };
136 for (; currentCell != lastCell; ++currentCell) {
138 double cellEta = (*currentCell)->eta();
139 if (cellEta > -1.5 && cellEta < 1.5) {
142 switch (cellSample) {
144 iCell = (cellEta + 1.5) * 10;
146 eneA[iCell][cellModule] = (*currentCell)->energy();
147 phi[cellModule] = (*currentCell)->phi();
150 iCell = (cellEta + 1.5) * 10;
152 eneBC[iCell][cellModule] = (*currentCell)->energy();
153 phi[cellModule] = (*currentCell)->phi();
156 iCell = (cellEta + 1.3) * 5;
158 eneD[iCell][cellModule] = (*currentCell)->energy();
159 phi[cellModule] = (*currentCell)->phi();
160 cellList.push_back(*currentCell);
163 iCell = (cellEta + 1.5) * 10;
164 if (iCell == 4 || iCell == 25) {
166 eneA[iCell][cellModule] = (*currentCell)->energy();
167 phi[cellModule] = (*currentCell)->phi();
177 << (*currentCell)->phi() <<
","
178 << (*currentCell)->energy() <<
endmsg;
187 std::vector<double> muEtaD;
188 std::vector<float> muEneD;
189 std::vector<int> muModule;
190 std::vector<int> muCellD;
191 std::vector<int> muSplitted;
192 std::vector<int> muQualityD;
193 std::vector<int> muFound;
202 int nCandidates = 0, ntri = 0;
209 int lastMuModule = -3;
210 for (
int iModule = 0; iModule <
N_MODULES; ++iModule) {
212 for (
int iCellD = 0; iCellD <
N_CELLS_D; ++iCellD) {
213 float energy = eneD[iCellD][iModule];
220 if (prevCell == lastMuCell && iModule == lastMuModule) {
221 int sumQuality =
quality + muQualityD.back();
222 float sumEnergy =
energy + eneD[prevCell][iModule];
223 double hiPrevThr =
m_hiThrD[prevCell];
224 double maxHiThr = (hiThr > hiPrevThr) ? hiThr : hiPrevThr;
225 if ((sumQuality == 0 && sumEnergy < maxHiThr) || sumQuality == 1) {
227 splitted = nCandidates - 1;
232 << (splitted + 1) <<
", " << splitted
233 <<
"): etaD1, etaD2, eta => "
235 <<
m_etaD[prevCell] <<
", "
237 <<
"; eneD1, eneD2, energy => "
238 << eneD[iCellD][iModule] <<
", "
239 << eneD[prevCell][iModule] <<
", "
243 muModule.push_back(iModule);
244 muCellD.push_back(iCellD);
245 muSplitted.push_back(splitted);
246 muFound.push_back(0);
249 muEtaD.push_back(
eta);
252 lastMuModule = iModule;
254 <<
", tower index (iCellD)= " << iCellD
255 <<
", module index(iModuleD)= " << iModule
256 <<
", Energy(iCellD)(iModuleD) = " << eneD[iCellD][iModule]
257 <<
", threshold2(iCellD)= " <<
m_hiThrD[iCellD]);
267 for (
int i = 0;
i < nCandidates; ++
i) {
270 << muModule[
i] <<
","
273 <<
"nSplitted,muSplitted(cand)" << nSplitted <<
", "
280 for (
int iMu = 0; iMu < nCandidates; ++iMu) {
281 int splitted = muSplitted[iMu];
282 if (splitted < 0 || muFound[splitted] == 0) {
288 int module = muModule[iMu];
290 "loop on mu candidates: iMu, module = " << iMu <<
", " <<
module);
291 int idxD = 6 * muCellD[iMu];
294 while (++idxD <= endIdxD && muFound[iMu] != 1) {
296 float energyBC = eneBC[cellBC][
module];
299 <<
", eneBC =" << energyBC);
301 int qualityBC = (energyBC <
m_hiThrBC[cellBC]) ? 0 : 1;
302 int idxBC = 6 * cellBC;
305 while (++idxBC <= endIdxBC && muFound[iMu] != 1) {
307 float energyA = eneA[cellA][
module];
310 <<
", eneA =" << energyA);
314 int qualityA = (energyA <
m_hiThrA[cellA]) ? 0 : 1;
318 int muQuality = muQualityD[iMu] + qualityBC + qualityA;
319 if (muQuality <= 1) {
321 double muEta = (muEtaD[iMu] +
m_etaBC[cellBC] +
m_etaA[cellA]) / 3;
323 std::vector<float> muEnergy;
325 muEnergy.push_back(energyA);
326 muEnergy.push_back(energyBC);
327 muEnergy.push_back(muEneD[iMu]);
333 << muEnergy[0] <<
", "
334 << muEnergy[1] <<
", "
336 <<
" tag eta 1st, 2nd, 3rd,"
343 eneAround = eneA[cellA][nextModule] + eneA[cellA][prevModule]
344 + eneBC[cellBC][nextModule] + eneBC[cellBC][prevModule];
346 int nextCellA = cellA + 1;
347 int prevCellA = cellA - 1;
348 if (nextCellA < N_CELLS_A && prevCellA > 0) {
349 eneAround += eneA[nextCellA][
module] + eneA[prevCellA][
module]
350 + eneA[nextCellA][nextModule]
351 + eneA[nextCellA][prevModule]
352 + eneA[prevCellA][nextModule]
353 + eneA[prevCellA][prevModule];
357 int nextCellBC = cellBC + 1;
358 int prevCellBC = cellBC - 1;
359 if (nextCellBC < N_CELLS_BC && prevCellBC > 0) {
360 eneAround += eneBC[nextCellBC][
module]
361 + eneBC[prevCellBC][
module]
362 + eneBC[nextCellBC][nextModule]
363 + eneBC[nextCellBC][prevModule]
364 + eneBC[prevCellBC][nextModule]
365 + eneBC[prevCellBC][prevModule];
369 muEnergy.push_back(eneAround);
370 std::unique_ptr<TileMu>
muon = std::make_unique<TileMu>((
float) muEta,
376 <<
" muon tag phi=" <<
muon->phi()
377 <<
" energydepVec[0]=" <<
muon->enedep()[0]
378 <<
" energydepVec[1]=" <<
muon->enedep()[1]
379 <<
" energydepVec[2]=" <<
muon->enedep()[2]
380 <<
" energydepVec[3]=" <<
muon->enedep()[3]
381 <<
" muon tag Q factor=" <<
muon->quality()
382 <<
" ene around= " << eneAround);
410 <<
"),(eta,phi,energy)=("
411 <<
cell->eta() <<
","
412 <<
cell->phi() <<
","
420 for (
const TileMu*
mu : *muContainer) {
422 <<
" eta = " <<
mu->eta()
423 <<
" phi = " <<
mu->phi()
424 <<
" enedep[0] = " << (
mu->enedep())[0]
425 <<
" enedep[1] = " << (
mu->enedep())[1]
426 <<
" enedep[2] = " << (
mu->enedep())[2]
427 <<
" enedep[3] = " << (
mu->enedep())[3]
428 <<
" quality = " <<
mu->quality() <<
endmsg;
433 return StatusCode::SUCCESS;
438 return StatusCode::SUCCESS;