ATLAS Offline Software
Loading...
Searching...
No Matches
TileInfo.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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_ADCmax(0)
55 , m_nSamples(0)
56 , m_iTrigSample(0)
57 , m_tileNoise(0)
62 , m_ttL1Calib(0)
64 , m_ttL1Thresh(0)
65 , m_ttL1Ped(0)
66 , m_ttL1Max(0)
67 , m_MuRcvCalib(0)
69 , m_MuRcvThresh(0)
70 , m_MuRcvPed(0)
71 , m_MuRcvMax(0)
72 , m_muL1Calib(0)
74 , m_muL1Thresh(0)
75 , m_muL1Ped(0)
76 , m_muL1Max(0)
77 , m_mbtsL1Calib(0)
80 , m_mbtsL1Ped(0)
81 , m_mbtsL1Max(0)
90 , m_TTL1NBins(0)
93 , m_MuRcvNBins(0)
96 , m_MuL1NBins(0)
99 , m_pulseShapes(nullptr)
100 , m_WienerFilterWeights(nullptr)
101 , m_tileCablingSvc("TileCablingSvc","TileInfo")
102{
103 //=== initialize TestBeam defaults
104 for (int i=0; i<32; ++i)
105 m_emscaleTB[i] = 1.0;
106
107 for (int i=0; i<32; ++i)
108 m_mev2adcTB[i] = 1.0;
109
110 // scale factors from ADC HF noise to Opt filter noise calculated by Luca Fiorini
111 m_noiseScaleFactor[0] = 1.0; // no scale at all
112 m_noiseScaleFactor[1] = 1.14; // opt filter without iterations
113 m_noiseScaleFactor[2] = 1.28; // opt filter with iterations
114 m_noiseScaleFactor[3] = 1.27; // fit method
115
116 m_noiseScaleIndex = 1; // by default noise for opt filter without iterations
117}
118
119
120//
121//_____________________________________________________________________________
123{
124 int sizepart=m_decoCovaria.size();
125 for (int i=0; i<sizepart; ++i){
126 int sizemodu=(m_decoCovaria[i]).size();
127 for (int j=0; j<sizemodu; ++j){
128 int sizegain=(m_decoCovaria[i][j]).size();
129 for (int k=0; k<sizegain; ++k){
130 if (m_decoCovaria[i][j][k]) delete m_decoCovaria[i][j][k];
131 }
132 m_decoCovaria[i][j].clear();
133 }
134 m_decoCovaria[i].clear();
135 }
136 m_decoCovaria.clear();
137
138}
139
140
141//
142//_____________________________________________________________________________
143StatusCode
145{
146 MsgStream log(msgSvc(),"TileInfo");
147 MSG::Level logLevel = log.level();
148 bool debug = (logLevel <= MSG::DEBUG);
149
150 if(debug) log<<MSG::DEBUG<<"In TileInfo::initialize..."<<endmsg;
151
152 //=== get TileCablingSvc
153 StatusCode sc = m_tileCablingSvc.retrieve();
154 if(sc.isFailure()){
155 log << MSG::ERROR
156 << "Unable to retrieve " << m_tileCablingSvc << endmsg;
157 return StatusCode::FAILURE;
158 }
159 //=== cache pointers to cabling helpers
160 m_cabling = m_tileCablingSvc->cablingService();
161 if(!m_cabling){
162 log << MSG::ERROR
163 << "Pointer to TileCablingService is zero: " << m_cabling << endmsg;
164 return StatusCode::FAILURE;
165
166 }
167 m_tileID = m_cabling->getTileID();
168 m_tileTBID = m_cabling->getTileTBID();
169 m_tileHWID = m_cabling->getTileHWID();
170
171
172 //=== Initialize TilePulseShapes
173 if (m_pulseShapes)
174 m_pulseShapes->load(log);
175
176 //=== Read WienerFilter Weights in TileInfoLoader.cxx
178 m_WienerFilterWeights->loadWeights(log);
179
180 if (!m_WienerFilterWeights->loaded()) {
181 log << MSG::ERROR
182 << "Unable to load WienerFilter weights"<<endmsg;
183 return StatusCode::FAILURE;
184 }
185 }
186
187 if(debug) log << MSG::DEBUG << " TileInfo initialization completed. " << endmsg;
188 return StatusCode::SUCCESS;
189}
190
191//
192//_____________________________________________________________________________
193IMessageSvc*
195{
196 return Athena::getMessageSvc();
197}
198
199//_____________________________________________________________________________
200const TMatrixD*
201TileInfo::DecoCovariance(int ros, int drawer, int hilo) const {
202
203 int part(0);
204 switch (ros) {
205 case TileHWID::EXTBAR_POS: part=0; break; // EBA
206 case TileHWID::BARREL_POS: part=1; break; // LBA
207 case TileHWID::BARREL_NEG: part=2; break; // LBC
208 case TileHWID::EXTBAR_NEG: part=3; break; // EBC
209 }
210
211 int gain = (hilo) ? 0 : 1;
212
213 return m_decoCovaria[part][drawer][gain];
214}
215
216
218// Return shape vector of a TTL1 signal, to multiply by (summed) TTL1 Amplitude
219// to construct a TTL1 object. phase is a phase shift, default=0.
220//
221//_____________________________________________________________________________
222void TileInfo::ttl1Shape(const int nsamp, const int itrig, const double phase,std::vector<double> &ttl1shape) const {
223
224 //ttl1shape.resize(nsamp, 0.); // assume that resize already done in calling function
225 for (int i=0; i<nsamp; ++i) {
226 int j = m_TTL1Time0Bin + (i-itrig)*m_TTL1BinsPerX+(int)(phase*(m_TTL1BinsPerX*(1./25.0)));
227 if(j<0) j = 0;
228 if(j>=m_TTL1NBins) j = m_TTL1NBins-1;
229 ttl1shape[i] = m_TTL1FullShape[j];
230 }
231#ifndef NDEBUG
232 MsgStream log(msgSvc(),"TileInfo");
233 if (log.level() <= MSG::DEBUG){
234 log << MSG::DEBUG << " Shaping profile at beam crossings: nsamp = " << nsamp << ", itrig = " << itrig << endmsg;
235 int jc = 0;
236 for (int i=0; i<nsamp; i++) {
237 if(jc==0) log << MSG::DEBUG << " bin = " << i << " Shape factor =";
238 log << MSG::DEBUG << std::setw(8) << std::setprecision(4) << ttl1shape[i] << " ";
239 if(++jc==5) {
240 log << MSG::DEBUG << endmsg;
241 jc=0;
242 }
243 }
244 log << MSG::DEBUG << endmsg;
245 }
246#endif
247}
248
249// Returns the shape vector of the Muon Receiver Board input signal, to multiply by the channel amplitude
250// to construct a Muon Receiver Board object. The phase is a phase shift (default=0).
251//
252//_____________________________________________________________________________
253
254void TileInfo::muRcvShape(const int nsamp, const int itrig, const double phase,std::vector<double> &murcvshape) const {
255
256 for (int i=0; i<nsamp; ++i) {
257 int j = m_MuRcvTime0Bin + (i-itrig)*m_MuRcvBinsPerX+(int)(phase*(m_MuRcvBinsPerX*(1./25.0)));
258 if(j<0) j = 0;
259 if(j>=m_MuRcvNBins) j = m_MuRcvNBins-1;
260 murcvshape[i] = m_MuRcvFullShape[j];
261 }
262
263}
#define endmsg
Helpers for checking error return status codes and reporting errors.
static Double_t sc
const bool debug
@ 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:299
double m_mbtsL1Thresh
Definition TileInfo.h:337
StatusCode initialize()
Initialization of the TileInfo object.
Definition TileInfo.cxx:144
double m_emscaleTB[32]
Definition TileInfo.h:379
const TileTBID * m_tileTBID
Definition TileInfo.h:293
ServiceHandle< TileCablingSvc > m_tileCablingSvc
Definition TileInfo.h:382
int m_MuL1BinsPerX
Definition TileInfo.h:373
std::vector< double > m_MuRcvFullShape
Definition TileInfo.h:364
int m_digitsNBinsLo
Definition TileInfo.h:351
double m_muL1Max
Definition TileInfo.h:333
std::vector< std::vector< std::vector< TMatrixD * > > > m_decoCovaria
Definition TileInfo.h:387
double m_mbtsL1Calib
Definition TileInfo.h:335
int m_nSamples
Definition TileInfo.h:298
int m_TTL1BinsPerX
Definition TileInfo.h:361
double m_ttL1NoiseSigma
Definition TileInfo.h:318
double m_thresholdDigits
Definition TileInfo.h:315
double m_ttL1Calib
Definition TileInfo.h:317
double m_MuRcvMax
Definition TileInfo.h:327
bool m_tileZeroSuppress
Definition TileInfo.h:313
IMessageSvc * msgSvc() const
Returns a handle to the MessageSvc.
Definition TileInfo.cxx:194
double m_mev2adcTB[32]
Definition TileInfo.h:380
double m_ttL1Thresh
Definition TileInfo.h:319
bool m_tileCoherNoise
Definition TileInfo.h:312
double m_mbtsL1Ped
Definition TileInfo.h:338
TileWienerFilterWeights * m_WienerFilterWeights
Definition TileInfo.h:377
std::vector< double > m_TTL1FullShape
Definition TileInfo.h:358
int m_digitsBinsPerXHi
Definition TileInfo.h:354
const TMatrixD * DecoCovariance(int ros, int drawer, int hilo) const
Returns the decomposed covariance matrix.
Definition TileInfo.cxx:201
double m_mbtsL1Max
Definition TileInfo.h:339
double m_mbtsL1NoiseSigma
Definition TileInfo.h:336
double m_muL1Calib
Definition TileInfo.h:329
double m_muL1Ped
Definition TileInfo.h:332
double m_ttL1CosmicsGain
Definition TileInfo.h:341
int m_MuL1Time0Bin
Definition TileInfo.h:372
double m_MuRcvPed
Definition TileInfo.h:326
void muRcvShape(const int nsamp, const int itrig, const double phase, std::vector< double > &murcvshape) const
Definition TileInfo.cxx:254
int m_noiseScaleIndex
Definition TileInfo.h:309
double m_muL1Thresh
Definition TileInfo.h:331
int m_ADCmaskValue
Definition TileInfo.h:297
double m_thresholdRawChannel
Definition TileInfo.h:314
const TileCablingService * m_cabling
Definition TileInfo.h:294
int m_ADCmax
Definition TileInfo.h:296
double m_MuRcvCalib
Definition TileInfo.h:323
double m_ttL1CosmicsThresh
Definition TileInfo.h:342
int m_digitsTime0BinHi
Definition TileInfo.h:352
int m_digitsTime0BinLo
Definition TileInfo.h:353
int m_MuRcvNBins
Definition TileInfo.h:365
double m_noiseScaleFactor[4]
scale factor from digital noise to Opt Filter noise for various opt filter algoritms 0 - reserved 1 -...
Definition TileInfo.h:308
double m_ttL1Ped
Definition TileInfo.h:320
double m_MuRcvThresh
Definition TileInfo.h:325
TilePulseShapes * m_pulseShapes
Definition TileInfo.h:375
int m_TTL1Time0Bin
Definition TileInfo.h:360
int m_MuL1NBins
Definition TileInfo.h:371
const TileHWID * m_tileHWID
Definition TileInfo.h:292
bool m_tileNoise
Definition TileInfo.h:311
const TileID * m_tileID
Definition TileInfo.h:291
double m_muL1NoiseSigma
Definition TileInfo.h:330
double m_ttL1Max
Definition TileInfo.h:321
int m_MuRcvTime0Bin
Definition TileInfo.h:366
int m_digitsNBinsHi
Definition TileInfo.h:350
int m_TTL1NBins
Definition TileInfo.h:359
int m_digitsBinsPerXLo
Definition TileInfo.h:355
int m_MuRcvBinsPerX
Definition TileInfo.h:367
double m_MuRcvNoiseSigma
Definition TileInfo.h:324
const std::vector< double > & ttl1Shape() const
Return bunch-X TTL1 shape vector.
Definition TileInfo.h:204
IMessageSvc * getMessageSvc(bool quiet=false)