ATLAS Offline Software
Loading...
Searching...
No Matches
TileMuId2DBAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5//*****************************************************************************
6// Filename : TileMuId2DBAlg.cxx
7// Author : Aranzazu Ruiz
8// Created : May 2009
9//
10// DESCRIPTION:
11//
12// Individual lower energy thresholds for each cell are computed as three
13// times the noise RMS value of the cell when the two PMTs are in High Gain
14//
15// For DSP usage, thresholds in MeV are multiply by 2 and round off in order
16// to compare them with reconstructed energies at the DSP which have a 0.5 MeV
17// precision for High Gain. ASCII file with TileMuId thresholds is created to
18// be loaded in the DSPs.
19//
20// HISTORY:
21//
22// BUGS:
23//
24//*****************************************************************************
25
26#include "TileMuId2DBAlg.h"
32
33#include <fstream>
34
35using namespace std;
36
37
38TileMuId2DBAlg::TileMuId2DBAlg(const std::string& name, ISvcLocator* pSvcLocator) :
39 AthAlgorithm(name,pSvcLocator),
40 m_calo_id(nullptr)
41{
42}
43
44
45
46
47
49{
50 const CaloIdManager* caloIdMgr = nullptr;
51 ATH_CHECK( detStore()->retrieve( caloIdMgr ) );
52 m_calo_id = caloIdMgr->getCaloCell_ID();
53
54 ATH_CHECK( m_totalNoiseKey.initialize() );
55 return StatusCode::SUCCESS;
56}
57
58
59
61{
62 // Open ASCII file
63 string TileMuIdFile = "TileMuId_thresholds.dat";
64 fstream *fl = new fstream(TileMuIdFile.c_str(), fstream::app| fstream::out);
65 if (fl->is_open())
66 ATH_MSG_INFO ( " TileMuId file open" );
67 else
68 ATH_MSG_INFO ( " TileMuId file didn't open succesfully" );
69
70 //coverity[STACK_USE]
71 float noise[4][64][24]; memset(noise,0,sizeof(noise));
72 //coverity[STACK_USE]
73 int DSP[4][64][40]; memset(DSP,0,sizeof(DSP));
74 //coverity[STACK_USE]
75 int Thr[4][64][40]; memset(Thr,0,sizeof(Thr));
76
77 // A1, BC1, D0, A2, BC2, A3, BC3, D1, A4, BC4, A5, BC5, D2, A6, BC6, A7, BC7, D3, A8, BC8, A9, BC9, A10
78 int Thr_barrel[23] = {
79 1350, 2550, 1590, 960, 1980, 870, 1770, 1110, 750, 1890, 840, 1860, 1050, 840, 1800, 930, 1890, 1050, 840, 1860, 960, 1110, 900
80 };
81
82 // B11, D5, A12, B12, A13, B13, D6, A14, B14, A15, B15, A16
83 int Thr_extbarrel[12] = {
84 1050, 2100, 210, 1380, 1140, 1440, 2370, 1230, 1500, 1380, 1680, 1680
85 };
86
87 IdentifierHash caloCellMin=0;
88 IdentifierHash caloCellMax=0;
89 m_calo_id->calo_cell_hash_range(3, caloCellMin, caloCellMax);
90
91 ATH_MSG_INFO ( "caloCellMin: " << caloCellMin );
92 ATH_MSG_INFO ( "caloCellMax: " << caloCellMax );
93 ATH_MSG_INFO ( "Start loop over TileCal cells " << caloCellMax-caloCellMin );
94
96
97 for (unsigned int i=caloCellMin;i<caloCellMax;i++) {
98
99 IdentifierHash idHash = i;
100 Identifier id = m_calo_id->cell_id(idHash);
101 int subCalo{};
102 IdentifierHash idSubHash = m_calo_id->subcalo_cell_hash (idHash, subCalo);
103
104 int module = m_calo_id->module(id);
105 if (module == CaloIDHelper::NOT_VALID){
106 ATH_MSG_ERROR("Module invalid in TileMuId2DBAlg::execute");
107 return StatusCode::FAILURE;
108 }
109
111
112 float cell_noise = totalNoise->getNoise(id,gain);
113
114 if( m_calo_id->is_tile_barrel(id) && m_calo_id->is_tile_negative(id) ) noise[1][module][idSubHash-22*module] = 3*cell_noise;
115
116 if( m_calo_id->is_tile_barrel(id) && m_calo_id->is_tile_positive(id) ) noise[0][module][idSubHash-(23*module+22*64)] = 3*cell_noise;
117
118 if( m_calo_id->is_tile_extbarrel(id) && m_calo_id->is_tile_negative(id) ) noise[3][module][idSubHash-(12*module+23*64+22*64)] = 3*cell_noise;
119
120 if( m_calo_id->is_tile_extbarrel(id) && m_calo_id->is_tile_positive(id) ) noise[2][module][idSubHash-(12*module+12*64+23*64+22*64)] = 3*cell_noise;
121
122 }
123
124 // Barrel C-side
125
126 int i=0;
127 for(int j=0;j<64;j++) {
128 for(int k=0;k<20;k++) {
129 DSP[i][j][k] = (int)round(2*noise[i][j][k]);
130 }
131 }
132
133 // Barrel A-side (include D0 cell)
134
135 i=1;
136 for(int j=0;j<64;j++) {
137 for(int k=0;k<2;k++) {
138 DSP[i][j][k] = (int)round(2*noise[i][j][k]);
139 }
140 int k=2;
141 DSP[i][j][k] = (int)round(2*noise[0][j][k]);
142 for(int k=2;k<19;k++) {
143 DSP[i][j][k+1] = (int)round(2*noise[i][j][k]);
144 }
145 }
146
147 // Ext Barrels
148 for(int i=2;i<4;i++) {
149 for(int j=0;j<64;j++) {
150 for(int k=0;k<11;k++) {
151 DSP[i][j][k] = (int)round(2*noise[i][j][k]);
152 }
153 }
154 }
155
156 for(int i=0;i<2;i++) {
157
158 for(int j=0;j<64;j++) {
159
160 int k=0;
161
162 // D cells
163
164 Thr[i][j][k]=DSP[i][j][2];k++; Thr[i][j][k]=DSP[i][j][7];k++; Thr[i][j][k]=DSP[i][j][12];k++; Thr[i][j][k]=DSP[i][j][17];k++;
165 Thr[i][j][k]=2*Thr_barrel[2];k++; Thr[i][j][k]=2*Thr_barrel[7];k++; Thr[i][j][k]=2*Thr_barrel[12];k++; Thr[i][j][k]=2*Thr_barrel[17];k++;
166
167 // BC cells
168
169 Thr[i][j][k]=DSP[i][j][1];k++; Thr[i][j][k]=DSP[i][j][4];k++; Thr[i][j][k]=DSP[i][j][6];k++; Thr[i][j][k]=DSP[i][j][9];k++;
170 Thr[i][j][k]=DSP[i][j][11];k++; Thr[i][j][k]=DSP[i][j][14];k++; Thr[i][j][k]=DSP[i][j][16];k++; Thr[i][j][k]=DSP[i][j][19];k++;
171 Thr[i][j][k]=2*Thr_barrel[1];k++; Thr[i][j][k]=2*Thr_barrel[4];k++; Thr[i][j][k]=2*Thr_barrel[6];k++; Thr[i][j][k]=2*Thr_barrel[9];k++;
172 Thr[i][j][k]=2*Thr_barrel[11];k++; Thr[i][j][k]=2*Thr_barrel[14];k++; Thr[i][j][k]=2*Thr_barrel[16];k++; Thr[i][j][k]=2*Thr_barrel[19];k++;
173
174 // A cells
175
176 Thr[i][j][k]=DSP[i][j][0];k++; Thr[i][j][k]=DSP[i][j][3];k++; Thr[i][j][k]=DSP[i][j][5];k++; Thr[i][j][k]=DSP[i][j][8];k++;
177 Thr[i][j][k]=DSP[i][j][10];k++; Thr[i][j][k]=DSP[i][j][13];k++; Thr[i][j][k]=DSP[i][j][15];k++; Thr[i][j][k]=DSP[i][j][18];k++;
178 Thr[i][j][k]=2*Thr_barrel[0];k++; Thr[i][j][k]=2*Thr_barrel[3];k++; Thr[i][j][k]=2*Thr_barrel[5];k++; Thr[i][j][k]=2*Thr_barrel[8];k++;
179 Thr[i][j][k]=2*Thr_barrel[10];k++; Thr[i][j][k]=2*Thr_barrel[13];k++; Thr[i][j][k]=2*Thr_barrel[15];k++; Thr[i][j][k]=2*Thr_barrel[18];k++;
180
181 }
182
183 }
184
185 for(int i=2;i<4;i++) {
186
187 for(int j=0;j<64;j++) {
188
189 int k=0;
190
191 // D cells
192
193 Thr[i][j][k]=DSP[i][j][1];k++; Thr[i][j][k]=DSP[i][j][6];k++;
194 Thr[i][j][k]=2*Thr_extbarrel[1];k++; Thr[i][j][k]=2*Thr_extbarrel[6];k++;
195
196 // BC cells
197
198 Thr[i][j][k]=DSP[i][j][0];k++; Thr[i][j][k]=DSP[i][j][3];k++; Thr[i][j][k]=DSP[i][j][5];k++; Thr[i][j][k]=DSP[i][j][8];k++; Thr[i][j][k]=DSP[i][j][10];k++;
199 Thr[i][j][k]=2*Thr_extbarrel[0];k++; Thr[i][j][k]=2*Thr_extbarrel[3];k++; Thr[i][j][k]=2*Thr_extbarrel[5];k++; Thr[i][j][k]=2*Thr_extbarrel[8];k++; Thr[i][j][k]=2*Thr_extbarrel[10];k++;
200
201 // A cells
202
203 Thr[i][j][k]=DSP[i][j][2];k++; Thr[i][j][k]=DSP[i][j][4];k++; Thr[i][j][k]=DSP[i][j][7];k++; Thr[i][j][k]=DSP[i][j][9];k++;
204 Thr[i][j][k]=2*Thr_extbarrel[2];k++; Thr[i][j][k]=2*Thr_extbarrel[4];k++; Thr[i][j][k]=2*Thr_extbarrel[7];k++; Thr[i][j][k]=2*Thr_extbarrel[9];k++;
205
206 }
207
208 }
209
210 for(int i=0;i<4;i++) {
211
212 for(int j=0;j<64;j++) {
213
214 msg(MSG::INFO)
215 << "TileMuId 0x" << std::hex << (i+1)*0x100+j << std::dec << " 0";
216 *fl << "TileMuId 0x" << std::hex << (i+1)*0x100+j << std::dec << " 0";
217
218 for(int k=0;k<40;k++) {
219
220 msg(MSG::INFO)
221 << " " << Thr[i][j][k];
222 *fl << " " << Thr[i][j][k];
223
224 }
225
226 msg(MSG::INFO) << endmsg;
227 *fl << endl;
228
229 }
230
231 }
232
233 // Close ASCII file
234 fl->close();
235
236 return StatusCode::SUCCESS;
237}
238
239
240
242{
243 ATH_MSG_INFO ( "in finalize()" );
244 return StatusCode::SUCCESS;
245}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
Definition of CaloDetDescrManager.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
MsgStream & msg() const
This class initializes the Calo (LAr and Tile) offline identifiers.
const CaloCell_ID * getCaloCell_ID(void) const
Access to IdHelper.
This is a "hash" representation of an Identifier.
const CaloCell_ID * m_calo_id
SG::ReadCondHandleKey< CaloNoise > m_totalNoiseKey
virtual StatusCode initialize() override
virtual StatusCode finalize() override
TileMuId2DBAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode execute() override
@ TILEHIGHHIGH
Definition CaloGain.h:15
STL namespace.