21 const std::string& name,
const IInterface* parent)
22 : base_class(
type, name, parent)
66 return StatusCode::SUCCESS;
83 && (bsFlags & (1U << 26U)) == 0) {
94 emScale = emScaleHandle.
cptr();
98 digitsContainer = allDigits.
cptr();
107 sampleNoise = sampleNoiseHandle.
retrieve();
111 onlineSampleNoise = onlineSampleNoiseHandle.
retrieve();
118 int fragId = rawChannelCollection->
identify();
119 unsigned int drawer = (fragId & 0x3F);
120 unsigned int ros = fragId >> 8;
123 bool checkDigits(
false);
125 if (digitsContainer) {
135 for (
const TileDigits* tile_digits : *digitsCollection) {
136 int channel =
m_tileHWID->channel(tile_digits->adc_HWID());
137 noDigits[channel] =
false;
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);
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);
163 rawChannel->setAmplitude(rawChannel->amplitude() + energyCorrection);
167 if (checkDigits && noDigits[channel]) {
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)
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");
183 rawChannel->insert(0.0F, 0.0F, 15.0F);
194 return StatusCode::SUCCESS;
200 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Helpers for checking error return status codes and reporting errors.
Handle class for reading from StoreGate.
Helper for holding non-const raw data prior to recording in SG.
TileMutableDataContainer< TileRawChannelContainer > TileMutableRawChannelContainer
virtual std::vector< IdentifierHash > GetAllCurrentHashes() const override final
Returns a collection of all hashes availiable in this IDC.
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
This is a "hash" representation of an Identifier.
const_pointer_type retrieve()
const_pointer_type cptr()
const_pointer_type cptr()
Dereference the pointer.
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.
Condition object to keep calibration factors of TileCal channels.
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,...
Collection * indexFindPtr(IdentifierHash hash)
Look up a (non-const) collection via hash.
ToolHandle< ITileCondToolOfc > m_tileCondToolOfc
virtual StatusCode finalize() override
AlgTool finalize method.
bool m_correctPedestalDifference
ToolHandle< TileCondToolTiming > m_tileToolTiming
SG::ReadCondHandleKey< TileSampleNoise > m_onlineSampleNoiseKey
Name of online TileSampleNoise in condition store.
const TileHWID * m_tileHWID
Pointer to TileHWID.
TileRawChannelOF1Corrector(const std::string &type, const std::string &name, const IInterface *parent)
AlgTool like constructor.
SG::ReadCondHandleKey< TileSampleNoise > m_sampleNoiseKey
Name of TileSampleNoise in condition store.
virtual StatusCode process(TileMutableRawChannelContainer &rchCont, const EventContext &ctx) const override
Correct TileRawChannel amplitudes if pedestal changed.
SG::ReadHandleKey< TileDigitsContainer > m_digitsContainerKey
bool m_zeroAmplitudeWithoutDigits
ToolHandle< ITileCondToolDspThreshold > m_tileDspThreshold
virtual StatusCode initialize() override
AlgTool initialize method.
SG::ReadCondHandleKey< TileEMScale > m_emScaleKey
Name of TileEMScale in condition store.
const TileFragHash & hashFunc() const
uint32_t get_bsflags() const
Condition object to keep and provide Tile sample noise.
float getPed(unsigned int drawerIdx, unsigned int channel, unsigned int adc) const