ATLAS Offline Software
Loading...
Searching...
No Matches
TileRawChannelOF1Corrector Class Reference

This tool correct TileRawChannels amplitudes which came from OF1 DSP if pedestal changed. More...

#include <TileRawChannelOF1Corrector.h>

Inheritance diagram for TileRawChannelOF1Corrector:
Collaboration diagram for TileRawChannelOF1Corrector:

Public Member Functions

 TileRawChannelOF1Corrector (const std::string &type, const std::string &name, const IInterface *parent)
 AlgTool like constructor.
virtual ~TileRawChannelOF1Corrector ()
 Virtual destructor.
virtual StatusCode initialize () override
 AlgTool initialize method.
virtual StatusCode finalize () override
 AlgTool finalize method.
virtual StatusCode process (TileMutableRawChannelContainer &rchCont, const EventContext &ctx) const override
 Correct TileRawChannel amplitudes if pedestal changed.

Private Attributes

const TileHWIDm_tileHWID
 Pointer to TileHWID.
SG::ReadCondHandleKey< TileSampleNoisem_sampleNoiseKey
 Name of TileSampleNoise in condition store.
SG::ReadCondHandleKey< TileSampleNoisem_onlineSampleNoiseKey
 Name of online TileSampleNoise in condition store.
ToolHandle< ITileCondToolOfcm_tileCondToolOfc
ToolHandle< TileCondToolTimingm_tileToolTiming
SG::ReadCondHandleKey< TileEMScalem_emScaleKey
 Name of TileEMScale in condition store.
ToolHandle< ITileCondToolDspThresholdm_tileDspThreshold
SG::ReadHandleKey< TileDigitsContainerm_digitsContainerKey
bool m_zeroAmplitudeWithoutDigits
bool m_correctPedestalDifference

Detailed Description

This tool correct TileRawChannels amplitudes which came from OF1 DSP if pedestal changed.

Definition at line 38 of file TileRawChannelOF1Corrector.h.

Constructor & Destructor Documentation

◆ TileRawChannelOF1Corrector()

TileRawChannelOF1Corrector::TileRawChannelOF1Corrector ( const std::string & type,
const std::string & name,
const IInterface * parent )

AlgTool like constructor.

Definition at line 20 of file TileRawChannelOF1Corrector.cxx.

22 : base_class(type, name, parent)
23 , m_tileHWID(0)
24{
25 declareProperty("ZeroAmplitudeWithoutDigits", m_zeroAmplitudeWithoutDigits = true);
26 declareProperty("CorrectPedestalDifference", m_correctPedestalDifference = true);
27}
const TileHWID * m_tileHWID
Pointer to TileHWID.

◆ ~TileRawChannelOF1Corrector()

virtual TileRawChannelOF1Corrector::~TileRawChannelOF1Corrector ( )
inlinevirtual

Virtual destructor.

Definition at line 46 of file TileRawChannelOF1Corrector.h.

46{};

Member Function Documentation

◆ finalize()

StatusCode TileRawChannelOF1Corrector::finalize ( )
overridevirtual

AlgTool finalize method.

Definition at line 199 of file TileRawChannelOF1Corrector.cxx.

199 {
200 return StatusCode::SUCCESS;
201}

◆ initialize()

StatusCode TileRawChannelOF1Corrector::initialize ( )
overridevirtual

AlgTool initialize method.

Definition at line 31 of file TileRawChannelOF1Corrector.cxx.

31 {
32
33 ATH_MSG_INFO("Initializing...");
34
36
39
41 //=== get TileCondToolOfc
42 ATH_CHECK( m_tileCondToolOfc.retrieve() );
43
44 //=== get TileToolTiming
45 ATH_CHECK( m_tileToolTiming.retrieve() );
46 } else {
47 m_tileCondToolOfc.disable();
48 m_tileToolTiming.disable();
49 }
50
52
54 //=== get TileToolTiming
55 ATH_CHECK( m_tileDspThreshold.retrieve() );
56 } else {
57 m_tileDspThreshold.disable();
58 }
59
61 ATH_CHECK( m_digitsContainerKey.initialize() );
62 } else {
64 }
65
66 return StatusCode::SUCCESS;
67}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
ToolHandle< ITileCondToolOfc > m_tileCondToolOfc
ToolHandle< TileCondToolTiming > m_tileToolTiming
SG::ReadCondHandleKey< TileSampleNoise > m_onlineSampleNoiseKey
Name of online TileSampleNoise in condition store.
SG::ReadCondHandleKey< TileSampleNoise > m_sampleNoiseKey
Name of TileSampleNoise in condition store.
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
ToolHandle< ITileCondToolDspThreshold > m_tileDspThreshold
SG::ReadCondHandleKey< TileEMScale > m_emScaleKey
Name of TileEMScale in condition store.
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ process()

StatusCode TileRawChannelOF1Corrector::process ( TileMutableRawChannelContainer & rchCont,
const EventContext & ctx ) const
overridevirtual

Correct TileRawChannel amplitudes if pedestal changed.

Definition at line 74 of file TileRawChannelOF1Corrector.cxx.

75{
76 ATH_MSG_DEBUG("in TileRawChannelOF1Corrector::process()");
77
78 TileFragHash::TYPE rawChannelType = rchCont.get_type();
79 uint32_t bsFlags = rchCont.get_bsflags();
80
81 if ((rawChannelType == TileFragHash::OptFilterDsp
82 || rawChannelType == TileFragHash::OptFilterDspCompressed) // DSP container
83 && (bsFlags & (1U << 26U)) == 0) { // OF1 method
84
85 TileRawChannelUnit::UNIT rawChannelUnit = rchCont.get_unit();
86 ATH_MSG_VERBOSE( "Units in container is " << rawChannelUnit );
87
88 const TileEMScale* emScale{nullptr};
89 const TileDigitsContainer* digitsContainer(nullptr);
90
92 SG::ReadCondHandle<TileEMScale> emScaleHandle(m_emScaleKey, ctx);
93 ATH_CHECK( emScaleHandle.isValid() );
94 emScale = emScaleHandle.cptr();
95
97 SG::ReadHandle<TileDigitsContainer> allDigits(m_digitsContainerKey, ctx);
98 digitsContainer = allDigits.cptr();
99 }
100 }
101
102 const TileSampleNoise* sampleNoise = nullptr;
103 const TileSampleNoise* onlineSampleNoise = nullptr;
105 SG::ReadCondHandle<TileSampleNoise> sampleNoiseHandle(m_sampleNoiseKey, ctx);
106 ATH_CHECK( sampleNoiseHandle.isValid() );
107 sampleNoise = sampleNoiseHandle.retrieve();
108
109 SG::ReadCondHandle<TileSampleNoise> onlineSampleNoiseHandle(m_onlineSampleNoiseKey, ctx);
110 ATH_CHECK( onlineSampleNoiseHandle.isValid() );
111 onlineSampleNoise = onlineSampleNoiseHandle.retrieve();
112 }
113
114
115 for (IdentifierHash hash : rchCont.GetAllCurrentHashes()) {
116 TileRawChannelCollection* rawChannelCollection = rchCont.indexFindPtr (hash);
117
118 int fragId = rawChannelCollection->identify();
119 unsigned int drawer = (fragId & 0x3F);
120 unsigned int ros = fragId >> 8;
121 unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
122
123 bool checkDigits(false);
124 std::vector<bool> noDigits(TileCalibUtils::MAX_CHAN, true);
125 if (digitsContainer) {
126 IdentifierHash fragHash = (digitsContainer->hashFunc())(fragId);
127 const TileDigitsCollection* digitsCollection = digitsContainer->indexFindPtr(fragHash);
128 if (digitsCollection->getFragBCID() != 0xDEAD) {
129 ATH_MSG_VERBOSE(TileCalibUtils::getDrawerString(ros, drawer) << ": digits in bytestream => check digits");
130 checkDigits = true;
131 } else {
132 ATH_MSG_VERBOSE(TileCalibUtils::getDrawerString(ros, drawer) << ": no digits in bytestream => do not check digits");
133 }
134
135 for (const TileDigits* tile_digits : *digitsCollection) {
136 int channel = m_tileHWID->channel(tile_digits->adc_HWID());
137 noDigits[channel] = false;
138 }
139 }
140
141 for (TileRawChannel* rawChannel : *rawChannelCollection) {
142 HWIdentifier adcId = rawChannel->adc_HWID();
143 int channel = m_tileHWID->channel(adcId);
144 int gain = m_tileHWID->adc(adcId);
145
147
148 float pedestal = sampleNoise->getPed(drawerIdx, channel, gain);
149 float onlinePedestal = onlineSampleNoise->getPed(drawerIdx, channel, gain);
150 float onlinePedestalDifference = emScale->calibrateOnlineChannel(drawerIdx, channel, gain, (onlinePedestal - pedestal), rawChannelUnit);
151 float phase = -m_tileToolTiming->getSignalPhase(drawerIdx, channel, gain);
152 TileOfcWeightsStruct weights;
153 ATH_CHECK( m_tileCondToolOfc->getOfcWeights(drawerIdx, channel, gain, phase, false, weights, ctx) );
154 float weightsSum(0.0);
155 for (int i = 0; i < weights.n_samples; ++i) weightsSum += weights.w_a[i];
156 float energyCorrection = onlinePedestalDifference * weightsSum;
158 << " ch" << channel << (gain ? " HG: " : " LG: ")
159 << "online pedestal difference: " << onlinePedestalDifference
160 << "; OFC weights (a) sum: " << weightsSum
161 << " => energy correction: " << energyCorrection);
162
163 rawChannel->setAmplitude(rawChannel->amplitude() + energyCorrection);
164
165 }
166
167 if (checkDigits && noDigits[channel]) {
168
169 float amplitude = emScale->undoOnlineChannelCalibration(drawerIdx, channel, gain, rawChannel->amplitude(), rawChannelUnit);
170 float minimuAmplitudeThreshold(-99999.0);
171 float maximumAmplitudeThreshold(99999.0);
172 m_tileDspThreshold->getAmplitudeThresholds(drawerIdx, channel, gain, minimuAmplitudeThreshold, maximumAmplitudeThreshold);
173 if (amplitude < minimuAmplitudeThreshold
174 || amplitude > maximumAmplitudeThreshold)
175 {
176
178 << " ch" << channel << (gain ? " HG:" : " LG:")
179 << " amplitude: " << amplitude << " [ADC]"
180 << " outside range: " << minimuAmplitudeThreshold << ".." << maximumAmplitudeThreshold
181 << " without digits => set apmlitude/time/quality: 0.0/0.0/15.0");
182
183 rawChannel->insert(0.0F, 0.0F, 15.0F);
184
185 }
186
187 }
188
189 }
190 }
191
192 }
193
194 return StatusCode::SUCCESS;
195}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
Athena::TPCnvVers::Old Athena::TPCnvVers::Old Athena::TPCnvVers::Current TileDigitsContainer
virtual std::vector< IdentifierHash > GetAllCurrentHashes() const override final
Returns a collection of all hashes availiable in this IDC.
static std::string getDrawerString(unsigned int ros, unsigned int drawer)
Return the drawer name, e.g.
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
static const unsigned int MAX_CHAN
Number of channels in drawer.
uint32_t getFragBCID() const
Get BCID.
float undoOnlineChannelCalibration(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT onlUnit) const
Undo the calibration applied in ROD signal reconstruction.
float calibrateOnlineChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT onlUnit) const
Calibrate an online Tile channel from OnlineADCcounts to an arbitrary Online unit,...
TYPE
initialize
Collection * indexFindPtr(IdentifierHash hash)
Look up a (non-const) collection via hash.
uint32_t get_bsflags() const
float getPed(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const
setEventNumber uint32_t

Member Data Documentation

◆ m_correctPedestalDifference

bool TileRawChannelOF1Corrector::m_correctPedestalDifference
private

Definition at line 93 of file TileRawChannelOF1Corrector.h.

◆ m_digitsContainerKey

SG::ReadHandleKey<TileDigitsContainer> TileRawChannelOF1Corrector::m_digitsContainerKey
private
Initial value:
{this,
"TileDigitsContainer", "TileDigitsCnt", "Input Tile digits container key"}

Definition at line 88 of file TileRawChannelOF1Corrector.h.

88 {this,
89 "TileDigitsContainer", "TileDigitsCnt", "Input Tile digits container key"};

◆ m_emScaleKey

SG::ReadCondHandleKey<TileEMScale> TileRawChannelOF1Corrector::m_emScaleKey
private
Initial value:
{this,
"TileEMScale", "TileEMScale", "Input Tile EMS calibration constants"}

Name of TileEMScale in condition store.

Definition at line 81 of file TileRawChannelOF1Corrector.h.

81 {this,
82 "TileEMScale", "TileEMScale", "Input Tile EMS calibration constants"};

◆ m_onlineSampleNoiseKey

SG::ReadCondHandleKey<TileSampleNoise> TileRawChannelOF1Corrector::m_onlineSampleNoiseKey
private
Initial value:
{this,
"TileOnlineSampleNoise", "TileOnlineSampleNoise", "Input online Tile sample noise"}

Name of online TileSampleNoise in condition store.

Definition at line 69 of file TileRawChannelOF1Corrector.h.

69 {this,
70 "TileOnlineSampleNoise", "TileOnlineSampleNoise", "Input online Tile sample noise"};

◆ m_sampleNoiseKey

SG::ReadCondHandleKey<TileSampleNoise> TileRawChannelOF1Corrector::m_sampleNoiseKey
private
Initial value:
{this,
"TileSampleNoise", "TileSampleNoise", "Input Tile sample noise"}

Name of TileSampleNoise in condition store.

Definition at line 64 of file TileRawChannelOF1Corrector.h.

64 {this,
65 "TileSampleNoise", "TileSampleNoise", "Input Tile sample noise"};

◆ m_tileCondToolOfc

ToolHandle<ITileCondToolOfc> TileRawChannelOF1Corrector::m_tileCondToolOfc
private
Initial value:
{this,
"TileCondToolOfc", "TileCondToolOfcCoolOF1", "Tile OFC tool"}

Definition at line 72 of file TileRawChannelOF1Corrector.h.

72 {this,
73 "TileCondToolOfc", "TileCondToolOfcCoolOF1", "Tile OFC tool"};

◆ m_tileDspThreshold

ToolHandle<ITileCondToolDspThreshold> TileRawChannelOF1Corrector::m_tileDspThreshold
private
Initial value:
{this,
"TileCondToolDspThreshold", "TileCondToolDspThreshold", "Tile DSP thresholds tool"}

Definition at line 84 of file TileRawChannelOF1Corrector.h.

84 {this,
85 "TileCondToolDspThreshold", "TileCondToolDspThreshold", "Tile DSP thresholds tool"};

◆ m_tileHWID

const TileHWID* TileRawChannelOF1Corrector::m_tileHWID
private

Pointer to TileHWID.

Definition at line 59 of file TileRawChannelOF1Corrector.h.

◆ m_tileToolTiming

ToolHandle<TileCondToolTiming> TileRawChannelOF1Corrector::m_tileToolTiming
private
Initial value:
{this,
"TileCondToolTiming", "TileCondToolOnlineTiming", "Tile timing tool"}

Definition at line 75 of file TileRawChannelOF1Corrector.h.

75 {this,
76 "TileCondToolTiming", "TileCondToolOnlineTiming", "Tile timing tool"};

◆ m_zeroAmplitudeWithoutDigits

bool TileRawChannelOF1Corrector::m_zeroAmplitudeWithoutDigits
private

Definition at line 92 of file TileRawChannelOF1Corrector.h.


The documentation for this class was generated from the following files: