ATLAS Offline Software
Loading...
Searching...
No Matches
TileInfo.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 : TileInfo.cxx
7 Author : F. Merritt
8 Created : May, 2002
9 Last Modified : April 2006 - F Spano' (add covariance matrix for coherent
10 noise)
11 Version 00-01-22
12
13 :DESCRIPTION: see header file.
14****************************************************************************/
15//Gaudi includes
16#include "GaudiKernel/MsgStream.h"
17#include "GaudiKernel/Bootstrap.h"
18#include "GaudiKernel/ISvcLocator.h"
19#include "GaudiKernel/IMessageSvc.h"
20#include "GaudiKernel/INTupleSvc.h"
21#include "GaudiKernel/IDataProviderSvc.h"
22#include "GaudiKernel/SmartDataPtr.h"
24
29
32
38#include "GaudiKernel/IClassIDSvc.h"
39
40#include <cmath>
41#include <fstream>
42#include <iostream>
43#include <iomanip>
44
45
46//
47//_____________________________________________________________________________
49 : m_tileID(nullptr)
50 , m_tileHWID(nullptr)
51 , m_tileTBID(nullptr)
52 , m_cabling(nullptr)
53 , m_channel_context(nullptr)
54 , m_drawer_context(nullptr)
55 , m_ADCmax(0)
57 , m_nSamples(0)
58 , m_iTrigSample(0)
59 , m_tileNoise(0)
64 , m_ttL1Calib(0)
66 , m_ttL1Thresh(0)
67 , m_ttL1Ped(0)
68 , m_ttL1Max(0)
69 , m_MuRcvCalib(0)
71 , m_MuRcvThresh(0)
72 , m_MuRcvPed(0)
73 , m_MuRcvMax(0)
74 , m_muL1Calib(0)
76 , m_muL1Thresh(0)
77 , m_muL1Ped(0)
78 , m_muL1Max(0)
79 , m_mbtsL1Calib(0)
82 , m_mbtsL1Ped(0)
83 , m_mbtsL1Max(0)
92 , m_TTL1NBins(0)
95 , m_MuRcvNBins(0)
98 , m_MuL1NBins(0)
100 , m_MuL1BinsPerX(0)
101 , m_pulseShapes(nullptr)
102 , m_WienerFilterWeights(nullptr)
103 , m_tileCablingSvc("TileCablingSvc","TileInfo")
104{
105 //=== initialize TestBeam defaults
106 for (int i=0; i<32; ++i)
107 m_emscaleTB[i] = 1.0;
108
109 for (int i=0; i<32; ++i)
110 m_mev2adcTB[i] = 1.0;
111
112 // scale factors from ADC HF noise to Opt filter noise calculated by Luca Fiorini
113 m_noiseScaleFactor[0] = 1.0; // no scale at all
114 m_noiseScaleFactor[1] = 1.14; // opt filter without iterations
115 m_noiseScaleFactor[2] = 1.28; // opt filter with iterations
116 m_noiseScaleFactor[3] = 1.27; // fit method
117
118 m_noiseScaleIndex = 1; // by default noise for opt filter without iterations
119}
120
121
122//
123//_____________________________________________________________________________
125{
128
129 int sizepart=m_decoCovaria.size();
130 for (int i=0; i<sizepart; ++i){
131 int sizemodu=(m_decoCovaria[i]).size();
132 for (int j=0; j<sizemodu; ++j){
133 int sizegain=(m_decoCovaria[i][j]).size();
134 for (int k=0; k<sizegain; ++k){
135 if (m_decoCovaria[i][j][k]) delete m_decoCovaria[i][j][k];
136 }
137 m_decoCovaria[i][j].clear();
138 }
139 m_decoCovaria[i].clear();
140 }
141 m_decoCovaria.clear();
142
143}
144
145
146//
147//_____________________________________________________________________________
148StatusCode
150{
151 MsgStream log(msgSvc(),"TileInfo");
152 MSG::Level logLevel = log.level();
153 bool debug = (logLevel <= MSG::DEBUG);
154
155 if(debug) log<<MSG::DEBUG<<"In TileInfo::initialize..."<<endmsg;
156
157 //=== get TileCablingSvc
158 StatusCode sc = m_tileCablingSvc.retrieve();
159 if(sc.isFailure()){
160 log << MSG::ERROR
161 << "Unable to retrieve " << m_tileCablingSvc << endmsg;
162 return StatusCode::FAILURE;
163 }
164 //=== cache pointers to cabling helpers
165 m_cabling = m_tileCablingSvc->cablingService();
166 if(!m_cabling){
167 log << MSG::ERROR
168 << "Pointer to TileCablingService is zero: " << m_cabling << endmsg;
169 return StatusCode::FAILURE;
170
171 }
172 m_tileID = m_cabling->getTileID();
173 m_tileTBID = m_cabling->getTileTBID();
174 m_tileHWID = m_cabling->getTileHWID();
175
176
177 //=== initialize channel context
178 m_channel_context = new IdContext(m_tileHWID->channel_context());
179 //=== initialize drawer context
180 m_drawer_context = new IdContext(m_tileHWID->drawer_context());
181
182 //=== Initialize TilePulseShapes
183 if (m_pulseShapes)
184 m_pulseShapes->load(log);
185
186 //=== Read WienerFilter Weights in TileInfoLoader.cxx
188 m_WienerFilterWeights->loadWeights(log);
189
190 if (!m_WienerFilterWeights->loaded()) {
191 log << MSG::ERROR
192 << "Unable to load WienerFilter weights"<<endmsg;
193 return StatusCode::FAILURE;
194 }
195 }
196
197 if(debug) log << MSG::DEBUG << " TileInfo initialization completed. " << endmsg;
198 return StatusCode::SUCCESS;
199}
200
201//
202//_____________________________________________________________________________
203IMessageSvc*
205{
206 return Athena::getMessageSvc();
207}
208
209//_____________________________________________________________________________
210const TMatrixD*
211TileInfo::DecoCovariance(int ros, int drawer, int hilo) const {
212
213 int part(0);
214 switch (ros) {
215 case TileHWID::EXTBAR_POS: part=0; break; // EBA
216 case TileHWID::BARREL_POS: part=1; break; // LBA
217 case TileHWID::BARREL_NEG: part=2; break; // LBC
218 case TileHWID::EXTBAR_NEG: part=3; break; // EBC
219 }
220
221 int gain = (hilo) ? 0 : 1;
222
223 return m_decoCovaria[part][drawer][gain];
224}
225
226
228// Return shape vector of a TTL1 signal, to multiply by (summed) TTL1 Amplitude
229// to construct a TTL1 object. phase is a phase shift, default=0.
230//
231//_____________________________________________________________________________
232void TileInfo::ttl1Shape(const int nsamp, const int itrig, const double phase,std::vector<double> &ttl1shape) const {
233
234 //ttl1shape.resize(nsamp, 0.); // assume that resize already done in calling function
235 for (int i=0; i<nsamp; ++i) {
236 int j = m_TTL1Time0Bin + (i-itrig)*m_TTL1BinsPerX+(int)(phase*(m_TTL1BinsPerX*(1./25.0)));
237 if(j<0) j = 0;
238 if(j>=m_TTL1NBins) j = m_TTL1NBins-1;
239 ttl1shape[i] = m_TTL1FullShape[j];
240 }
241#ifndef NDEBUG
242 MsgStream log(msgSvc(),"TileInfo");
243 if (log.level() <= MSG::DEBUG){
244 log << MSG::DEBUG << " Shaping profile at beam crossings: nsamp = " << nsamp << ", itrig = " << itrig << endmsg;
245 int jc = 0;
246 for (int i=0; i<nsamp; i++) {
247 if(jc==0) log << MSG::DEBUG << " bin = " << i << " Shape factor =";
248 log << MSG::DEBUG << std::setw(8) << std::setprecision(4) << ttl1shape[i] << " ";
249 if(++jc==5) {
250 log << MSG::DEBUG << endmsg;
251 jc=0;
252 }
253 }
254 log << MSG::DEBUG << endmsg;
255 }
256#endif
257}
258
259// Returns the shape vector of the Muon Receiver Board input signal, to multiply by the channel amplitude
260// to construct a Muon Receiver Board object. The phase is a phase shift (default=0).
261//
262//_____________________________________________________________________________
263
264void TileInfo::muRcvShape(const int nsamp, const int itrig, const double phase,std::vector<double> &murcvshape) const {
265
266 for (int i=0; i<nsamp; ++i) {
267 int j = m_MuRcvTime0Bin + (i-itrig)*m_MuRcvBinsPerX+(int)(phase*(m_MuRcvBinsPerX*(1./25.0)));
268 if(j<0) j = 0;
269 if(j>=m_MuRcvNBins) j = m_MuRcvNBins-1;
270 murcvshape[i] = m_MuRcvFullShape[j];
271 }
272
273}
#define endmsg
Helpers for checking error return status codes and reporting errors.
static Double_t sc
const bool debug
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
@ BARREL_POS
Definition TileHWID.h:68
@ EXTBAR_NEG
Definition TileHWID.h:71
@ BARREL_NEG
Definition TileHWID.h:69
@ EXTBAR_POS
Definition TileHWID.h:70
int m_iTrigSample
Definition TileInfo.h:301
double m_mbtsL1Thresh
Definition TileInfo.h:339
StatusCode initialize()
Initialization of the TileInfo object.
Definition TileInfo.cxx:149
double m_emscaleTB[32]
Definition TileInfo.h:381
const TileTBID * m_tileTBID
Definition TileInfo.h:293
ServiceHandle< TileCablingSvc > m_tileCablingSvc
Definition TileInfo.h:384
int m_MuL1BinsPerX
Definition TileInfo.h:375
std::vector< double > m_MuRcvFullShape
Definition TileInfo.h:366
int m_digitsNBinsLo
Definition TileInfo.h:353
double m_muL1Max
Definition TileInfo.h:335
std::vector< std::vector< std::vector< TMatrixD * > > > m_decoCovaria
Definition TileInfo.h:389
double m_mbtsL1Calib
Definition TileInfo.h:337
int m_nSamples
Definition TileInfo.h:300
int m_TTL1BinsPerX
Definition TileInfo.h:363
double m_ttL1NoiseSigma
Definition TileInfo.h:320
double m_thresholdDigits
Definition TileInfo.h:317
double m_ttL1Calib
Definition TileInfo.h:319
double m_MuRcvMax
Definition TileInfo.h:329
bool m_tileZeroSuppress
Definition TileInfo.h:315
IMessageSvc * msgSvc() const
Returns a handle to the MessageSvc.
Definition TileInfo.cxx:204
double m_mev2adcTB[32]
Definition TileInfo.h:382
double m_ttL1Thresh
Definition TileInfo.h:321
bool m_tileCoherNoise
Definition TileInfo.h:314
double m_mbtsL1Ped
Definition TileInfo.h:340
TileWienerFilterWeights * m_WienerFilterWeights
Definition TileInfo.h:379
std::vector< double > m_TTL1FullShape
Definition TileInfo.h:360
int m_digitsBinsPerXHi
Definition TileInfo.h:356
const TMatrixD * DecoCovariance(int ros, int drawer, int hilo) const
Returns the decomposed covariance matrix.
Definition TileInfo.cxx:211
double m_mbtsL1Max
Definition TileInfo.h:341
double m_mbtsL1NoiseSigma
Definition TileInfo.h:338
const IdContext * m_channel_context
Definition TileInfo.h:295
double m_muL1Calib
Definition TileInfo.h:331
double m_muL1Ped
Definition TileInfo.h:334
double m_ttL1CosmicsGain
Definition TileInfo.h:343
int m_MuL1Time0Bin
Definition TileInfo.h:374
double m_MuRcvPed
Definition TileInfo.h:328
void muRcvShape(const int nsamp, const int itrig, const double phase, std::vector< double > &murcvshape) const
Definition TileInfo.cxx:264
int m_noiseScaleIndex
Definition TileInfo.h:311
double m_muL1Thresh
Definition TileInfo.h:333
int m_ADCmaskValue
Definition TileInfo.h:299
double m_thresholdRawChannel
Definition TileInfo.h:316
const TileCablingService * m_cabling
Definition TileInfo.h:294
int m_ADCmax
Definition TileInfo.h:298
const IdContext * m_drawer_context
Definition TileInfo.h:296
double m_MuRcvCalib
Definition TileInfo.h:325
double m_ttL1CosmicsThresh
Definition TileInfo.h:344
int m_digitsTime0BinHi
Definition TileInfo.h:354
int m_digitsTime0BinLo
Definition TileInfo.h:355
int m_MuRcvNBins
Definition TileInfo.h:367
double m_noiseScaleFactor[4]
scale factor from digital noise to Opt Filter noise for various opt filter algoritms 0 - reserved 1 -...
Definition TileInfo.h:310
double m_ttL1Ped
Definition TileInfo.h:322
double m_MuRcvThresh
Definition TileInfo.h:327
TilePulseShapes * m_pulseShapes
Definition TileInfo.h:377
int m_TTL1Time0Bin
Definition TileInfo.h:362
int m_MuL1NBins
Definition TileInfo.h:373
const TileHWID * m_tileHWID
Definition TileInfo.h:292
bool m_tileNoise
Definition TileInfo.h:313
const TileID * m_tileID
Definition TileInfo.h:291
double m_muL1NoiseSigma
Definition TileInfo.h:332
double m_ttL1Max
Definition TileInfo.h:323
int m_MuRcvTime0Bin
Definition TileInfo.h:368
int m_digitsNBinsHi
Definition TileInfo.h:352
int m_TTL1NBins
Definition TileInfo.h:361
int m_digitsBinsPerXLo
Definition TileInfo.h:357
int m_MuRcvBinsPerX
Definition TileInfo.h:369
double m_MuRcvNoiseSigma
Definition TileInfo.h:326
const std::vector< double > & ttl1Shape() const
Return bunch-X TTL1 shape vector.
Definition TileInfo.h:204
IMessageSvc * getMessageSvc(bool quiet=false)