ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
TileCalorimeter
TileRecUtils
src
TileRawChannelNNMaker.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
#include "
TileRawChannelNNMaker.h
"
6
#include "
TileCalibBlobObjs/TileCalibUtils.h
"
7
#include "
TileEvent/TileMutableRawChannelContainer.h
"
8
#include "
TileIdentifier/TileHWID.h
"
9
#include "
PathResolver/PathResolver.h
"
10
#include "
StoreGate/ReadHandle.h
"
11
#include "
StoreGate/WriteHandle.h
"
12
#include <cmath>
13
#include <fstream>
14
#include <memory>
15
#include <sstream>
16
17
StatusCode
TileRawChannelNNMaker::initialize
() {
18
ATH_CHECK
(
detStore
()->retrieve(
m_tileHWID
) );
19
ATH_CHECK
(
m_digitsContainerKey
.initialize() );
20
ATH_CHECK
(
m_rawChannelContainerKey
.initialize() );
21
std::string weightsPath =
PathResolverFindCalibFile
(
m_weightsFile
);
22
if
(weightsPath.empty()) {
23
ATH_MSG_ERROR
(
"Weights file not found: "
<<
m_weightsFile
);
24
return
StatusCode::FAILURE;
25
}
26
27
std::ifstream weightsStream(weightsPath);
28
std::stringstream weightsText;
29
weightsText << weightsStream.rdbuf();
30
std::string
error
;
31
if
(!
m_nn
.load(weightsText.str(),
error
)) {
32
ATH_MSG_ERROR
(
"Invalid weights file "
<< weightsPath <<
": "
<<
error
);
33
return
StatusCode::FAILURE;
34
}
35
36
m_ampPerCode
= std::ldexp(
m_nn
.amplitudeScale(), -
m_nn
.outFracBits());
37
ATH_MSG_INFO
(
"Input digits container: '"
<<
m_digitsContainerKey
.key()
38
<<
"' output container: '"
<<
m_rawChannelContainerKey
.key()
39
<<
"' weights: '"
<<
m_weightsFile
.value()
40
<<
"' ("
<<
m_nn
.nSamples() <<
" samples)"
);
41
42
return
StatusCode::SUCCESS;
43
}
44
45
StatusCode
TileRawChannelNNMaker::execute
(
const
EventContext& ctx)
const
{
46
SG::ReadHandle<TileDigitsContainer>
digitsContainer(
m_digitsContainerKey
, ctx);
47
ATH_CHECK
( digitsContainer.
isValid
() );
48
auto
rawChannelContainer = std::make_unique<TileMutableRawChannelContainer>(
49
true
,
TileFragHash::Default
,
TileRawChannelUnit::ADCcounts
);
50
51
ATH_CHECK
( rawChannelContainer->status() );
52
const
int
nSamples =
m_nn
.nSamples();
53
std::vector<float> s(nSamples);
54
55
for
(
const
TileDigitsCollection
* digitsCollection : *digitsContainer) {
56
const
TileDigits
* digits[
TileCalibUtils::MAX_GAIN
][
TileCalibUtils::MAX_CHAN
] = {{
nullptr
}};
57
58
for
(
const
TileDigits
* tileDigits : *digitsCollection) {
59
HWIdentifier
adcId = tileDigits->adc_HWID();
60
digits[
m_tileHWID
->adc(adcId)][
m_tileHWID
->channel(adcId)] = tileDigits;
61
}
62
63
for
(
unsigned
int
channel = 0; channel <
TileCalibUtils::MAX_CHAN
; ++channel) {
64
const
TileDigits
* loGainDigits = digits[
TileHWID::LOWGAIN
][channel];
65
const
TileDigits
* hiGainDigits = digits[
TileHWID::HIGHGAIN
][channel];
66
if
(!loGainDigits || !hiGainDigits) {
67
if
(loGainDigits || hiGainDigits) ++
m_nMissingGain
;
68
continue
;
69
}
70
71
if
(loGainDigits->
samples
().size() !=
size_t
(nSamples)
72
|| hiGainDigits->
samples
().size() !=
size_t
(nSamples)) {
73
++
m_nBadNSamples
;
74
continue
;
75
}
76
77
for
(
int
k = 0; k < nSamples; ++k) {
78
s[k] =
m_nn
.sValue(hiGainDigits->
samples
()[k], loGainDigits->
samples
()[k]);
79
}
80
81
float
amplitude =
static_cast<
float
>
(
m_nn
.run(s.data()) *
m_ampPerCode
);
82
ATH_CHECK
( rawChannelContainer->push_back(std::make_unique<TileRawChannel>(
83
loGainDigits->
adc_HWID
(), amplitude, 0.0F, 0.0F)) );
84
}
85
}
86
87
SG::WriteHandle<TileRawChannelContainer>
rawChannelCnt(
m_rawChannelContainerKey
, ctx);
88
ATH_CHECK
( rawChannelCnt.
record
(std::move(rawChannelContainer)) );
89
90
return
StatusCode::SUCCESS;
91
}
92
93
StatusCode
TileRawChannelNNMaker::finalize
() {
94
if
(
m_nMissingGain
> 0 ||
m_nBadNSamples
> 0) {
95
ATH_MSG_WARNING
(
"Skipped channels: "
<<
m_nMissingGain
<<
" with only one gain, "
96
<<
m_nBadNSamples
<<
" without "
<<
m_nn
.nSamples() <<
" samples"
);
97
}
98
99
return
StatusCode::SUCCESS;
100
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition
AthMsgStreamMacros.h:32
PathResolver.h
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition
PathResolver.cxx:325
ReadHandle.h
Handle class for reading from StoreGate.
WriteHandle.h
Handle class for recording to StoreGate.
TileCalibUtils.h
TileHWID.h
TileMutableRawChannelContainer.h
Helper for holding non-const raw data prior to recording in SG.
TileRawChannelNNMaker.h
AthCommonAlgorithm< Gaudi::Algorithm >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
HWIdentifier
Definition
HWIdentifier.h:13
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
TileCalibUtils::MAX_GAIN
static const unsigned int MAX_GAIN
Number of gains per channel.
Definition
TileCalibUtils.h:142
TileCalibUtils::MAX_CHAN
static const unsigned int MAX_CHAN
Number of channels in drawer.
Definition
TileCalibUtils.h:141
TileDigitsCollection
Definition
TileDigitsCollection.h:18
TileDigits
Definition
TileDigits.h:30
TileDigits::samples
const std::vector< float > & samples() const
Definition
TileDigits.h:58
TileFragHash::Default
@ Default
Definition
TileFragHash.h:33
TileHWID::HIGHGAIN
@ HIGHGAIN
Definition
TileHWID.h:73
TileHWID::LOWGAIN
@ LOWGAIN
Definition
TileHWID.h:72
TileRawChannelNNMaker::finalize
virtual StatusCode finalize() override
Definition
TileRawChannelNNMaker.cxx:93
TileRawChannelNNMaker::initialize
virtual StatusCode initialize() override
Definition
TileRawChannelNNMaker.cxx:17
TileRawChannelNNMaker::m_digitsContainerKey
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
Definition
TileRawChannelNNMaker.h:32
TileRawChannelNNMaker::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition
TileRawChannelNNMaker.cxx:45
TileRawChannelNNMaker::m_nn
TileNNEmulator m_nn
Definition
TileRawChannelNNMaker.h:43
TileRawChannelNNMaker::m_rawChannelContainerKey
SG::WriteHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
Definition
TileRawChannelNNMaker.h:35
TileRawChannelNNMaker::m_weightsFile
Gaudi::Property< std::string > m_weightsFile
Definition
TileRawChannelNNMaker.h:38
TileRawChannelNNMaker::m_ampPerCode
double m_ampPerCode
Definition
TileRawChannelNNMaker.h:44
TileRawChannelNNMaker::m_nBadNSamples
std::atomic< unsigned int > m_nBadNSamples
Definition
TileRawChannelNNMaker.h:46
TileRawChannelNNMaker::m_tileHWID
const TileHWID * m_tileHWID
Definition
TileRawChannelNNMaker.h:42
TileRawChannelNNMaker::m_nMissingGain
std::atomic< unsigned int > m_nMissingGain
Definition
TileRawChannelNNMaker.h:45
TileRawChannelUnit::ADCcounts
@ ADCcounts
Definition
TileRawChannelUnit.h:17
TileRawData::adc_HWID
HWIdentifier adc_HWID(void) const
Definition
TileRawData.h:53
error
Definition
IImpactPoint3dEstimator.h:72
Generated on
for ATLAS Offline Software by
1.17.0