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

#include <LArStripsCrossTalkCorrector.h>

Inheritance diagram for LArStripsCrossTalkCorrector:

Classes

struct  neighbour_t

Public Member Functions

virtual StatusCode initialize () override final
virtual StatusCode execute () override final
virtual StatusCode finalize () override final
 AthAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor with parameters:
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode initKnownMissingFebs ()
size_t getEtaIndex (const Identifier) const
size_t getPhiIndex (const Identifier) const
void correctSamples (std::vector< double > &dest, const neighbour_t &neighbor) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Static Private Member Functions

static std::string printMaxSample (const LArAccumulatedCalibDigit *thisDig)

Private Attributes

SG::ReadCondHandleKey< LArBadChannelContm_BCKey {this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"}
SG::ReadCondHandleKey< LArBadFebContm_BFKey {this, "MissingFEBKey", "LArBadFeb", "SG key for miffing FEB object"}
SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKey {this, "OnOffMap", "LArOnOffIdMap", "SG key for mapping object"}
Gaudi::Property< std::vector< std::string > > m_dontUseForCorr {this,"DontUseForXtalkCorr",{}, "Types of bad channel should not be taken into accout for xtalk correction of their neighbor"}
LArBadChannelMask m_dontUseForCorrMask
Gaudi::Property< std::vector< std::string > > m_dontCorr {this,"NoXtalkCorr",{}, "Types of bad channel should be ignored and not x-talk corrected"}
LArBadChannelMask m_dontCorrMask
const LArOnlineIDm_onlineHelper {nullptr}
const LArEM_IDm_emId {nullptr}
unsigned int m_event_counter =0
const unsigned int m_MAXphi =64
int m_nStrips =-1
Gaudi::Property< std::vector< std::string > > m_keylist {this,"KeyList",{},"List of input keys ('HIGH','MEDIUM','LOW')"}
Gaudi::Property< unsigned int > m_ADCsatur {this,"ADCsaturation",0,"Cutoff value to ignore saturated digits"}
Gaudi::Property< float > m_acceptableDifference {this,"AcceptableDifference",20, "For sanity check: By how much the corrected value may differ from the original one (in %)"}
SG::ReadCondHandleKey< ILArPedestalm_pedKey {this,"PedestalKey","Pedestal","Key of Pedestal object"}
uint16_t m_fatalFebErrorPattern {0xffff}
const size_t m_noIdx {9999999}
std::array< std::vector< std::vector< const LArAccumulatedCalibDigit * > >, 2 > m_stripsLookUp
std::array< std::vector< std::bitset< 128 > >, 2 > m_knownMissingFebs
bool m_missingFEBsDone =false
std::set< HWIdentifierm_uncorrectedIds
XtalkCorrHisto m_differences {6,0.3}
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Static Private Attributes

static constexpr auto m_MAXeta =std::to_array<unsigned>({448,208})
static constexpr auto m_MINeta =std::to_array<unsigned>({1,0})

Detailed Description

Definition at line 58 of file LArStripsCrossTalkCorrector.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Function Documentation

◆ AthAlgorithm()

AthAlgorithm::AthAlgorithm ( const std::string & name,
ISvcLocator * pSvcLocator )

Constructor with parameters:

Definition at line 51 of file AthAlgorithm.cxx.

25 :
27{
28 // Set up to run AthAlgorithmDHUpdate in sysInitialize before
29 // merging dependency lists. This extends the output dependency
30 // list with any symlinks implied by inheritance relations.
31 m_updateDataHandles =
32 std::make_unique<AthenaBaseComps::AthAlgorithmDHUpdate>
34 std::move (m_updateDataHandles));
35}
DataObjIDColl m_extendedExtraObjects
AthCommonDataStore(const std::string &name, T... args)

◆ correctSamples()

void LArStripsCrossTalkCorrector::correctSamples ( std::vector< double > & dest,
const neighbour_t & neighbor ) const
inlineprivate

Definition at line 138 of file LArStripsCrossTalkCorrector.h.

138 {
139 const size_t nSamples=std::min(dest.size(),nb.dig->sampleSum().size());
140 const double pedTimesTrig=nb.ped*(double)nb.dig->nTriggers();
141 for (size_t i=0;i<nSamples;++i) {
142 dest[i]+=nb.weight*(nb.dig->sampleSum()[i]-pedTimesTrig);
143 }
144 return;
145}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode LArStripsCrossTalkCorrector::execute ( )
finaloverridevirtual

Definition at line 56 of file LArStripsCrossTalkCorrector.cxx.

57{
58 if ( m_event_counter < 100 || ( m_event_counter < 1000 && m_event_counter%100==0 ) || m_event_counter%1000==0 )
59 ATH_MSG_INFO( "Processing event " << m_event_counter );
61
62 if (m_keylist.size()==0) {
63 ATH_MSG_ERROR( "Key list is empty! No containers to process!" );
64 return StatusCode::FAILURE;
65 }
66
67
69 unsigned nSaturation=0;
70
71 const LArFebErrorSummary* febErrSum=nullptr;
72 if (evtStore()->contains<LArFebErrorSummary>("LArFebErrorSummary")) {
73 sc=evtStore()->retrieve(febErrSum);
74 if (sc.isFailure()) {
75 ATH_MSG_ERROR( "Failed to retrieve FebErrorSummary object!" );
76 return sc;
77 }
78 }
79 else
80 if (m_event_counter==1)
81 ATH_MSG_WARNING( "No FebErrorSummaryObject found! Feb errors not checked!" );
82
83 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
84 const LArOnOffIdMapping* cabling{*cablingHdl};
85 if(!cabling) {
86 ATH_MSG_ERROR( "Do not have cabling object LArOnOffIdMapping");
87 return StatusCode::FAILURE;
88 }
89
90 SG::ReadCondHandle<LArBadChannelCont> bcHdl{m_BCKey};
91 const LArBadChannelCont* bcCont{*bcHdl};
92
93 SG::ReadCondHandle<ILArPedestal> pedHdl{m_pedKey};
94 const ILArPedestal* larPedestal=*pedHdl;
95
96
97 const LArAccumulatedCalibDigitContainer* larAccumulatedCalibDigitContainer;
98
99 // now start to deal with digits
100
101 for (const std::string& key : m_keylist) { // Loop over all containers that are to be processed (e.g. different gains)
102
103 sc = evtStore()->retrieve(larAccumulatedCalibDigitContainer,key);
104 if (sc.isFailure()){
105 ATH_MSG_WARNING( "Cannot read LArAccumulatedCalibDigitContainer from StoreGate! key=" << key );
106 continue; // Try next container
107 }
108
109
110 LArAccumulatedCalibDigit febErrorDummy; //Use the address of this object to mark cells belonging to a errornous FEB
111 LArAccumulatedCalibDigit inexistingDummy; //Use the address of this object for "cells" that would be outside of cryostat
112
113
114 HWIdentifier lastFailedFEB(0);
115
116 if(larAccumulatedCalibDigitContainer->empty()) {
117 ATH_MSG_DEBUG( "LArAccumulatedCalibDigitContainer with key = " << key << " is empty " );
118 //return StatusCode::SUCCESS;
119 continue; // Try next container
120 } else {
121 ATH_MSG_DEBUG( "Processing LArAccumulatedCalibDigitContainer with key = " << key
122 << ". Size: " << larAccumulatedCalibDigitContainer->size() );
123 }
124
125 //Fill missing febs (if not done yet)
126 if (!m_missingFEBsDone) {
128 }
129
130
131 //Reset strips lookup table to nullptr:
132 for (int bec : {0,1}) {
133 for (unsigned ieta=0;ieta!=m_MAXeta[bec];++ieta) { //Loop over Strips cells
134 for (unsigned iphi=0;iphi!=m_MAXphi;++iphi) { //Loop over Strips cells
135 for (unsigned iside=0;iside<2;++iside) {
136 m_stripsLookUp[bec][iphi+iside*m_MAXphi][ieta]=nullptr;
137 }
138 }
139 }
140 } //end loop over barrel & EC
141 ATH_MSG_DEBUG( "Filling strips lookup table..." ) ;
142 int nStrips=0;
143
144 for (const LArAccumulatedCalibDigit* dig : *larAccumulatedCalibDigitContainer) { //Loop over all cells to fill Strips lookup table
145 const HWIdentifier chid=dig->hardwareID();
146 if (!(m_onlineHelper->isEMBchannel(chid) || m_onlineHelper->isEMECchannel(chid))) continue; //Deal only with EM calos case
147 if (!cabling->isOnlineConnected(chid)) continue; //ignore disconnected channels
148
149
150 const Identifier id=cabling->cnvToIdentifier(chid);
151 if (m_emId->sampling(id)!=1) continue; //Deal only with strips
152
153 const HWIdentifier febid=m_onlineHelper->feb_Id(chid);
154 if (febErrSum) {
155 const uint16_t febErrs=febErrSum->feb_error(febid);
156 if (febErrs & m_fatalFebErrorPattern) {
157 if (febid!=lastFailedFEB) {
158 lastFailedFEB=febid;
159 ATH_MSG_ERROR( "Event " << m_event_counter << " Feb " << m_onlineHelper->channel_name(febid)
160 << " reports error(s):" << febErrSum->error_to_string(febErrs) << ". Data ignored." );
161 }
162 dig=&febErrorDummy;
163 } //end if fatal feb error
164 }//end if check feb error summary
165
166
167 const int bec=m_onlineHelper->barrel_ec(chid);
168 const size_t ieta=getEtaIndex(id);
169 if (ieta==m_noIdx) continue; //Not a cell we care about
170 const size_t iphi=getPhiIndex(id);
171 if (iphi>=2*m_MAXphi || ieta>=m_MAXeta[bec]) {
172 ATH_MSG_FATAL( "Array index out of range: iphi=" << iphi << " (max " << m_MAXphi << "), ieta="
173 << ieta << "(max " << m_MAXeta[bec] << ")" );
174 return StatusCode::FAILURE;
175 }
176 ++nStrips;
177
178
179 //check for saturation:
180 bool saturated=false;
181 if (m_ADCsatur>0) {
182 const std::vector<uint64_t>& samples=dig->sampleSum();
183 const size_t& nS=samples.size();
184 const uint32_t maxValue=(uint32_t)(m_ADCsatur*dig->nTriggers());
185 for (size_t i=0;i<nS;++i) {
186 if (samples[i] >= maxValue) {
187 saturated=true;
188 ATH_MSG_DEBUG("Found saturating digit (index = " << i
189 << ", <ADC> = " << samples[i]/dig->nTriggers()
190 << ", DAC = " << dig->DAC()
191 << ") for channel 0x" << MSG::hex << chid.get_compact() << MSG::dec
192 << ". Skipping.");
193 break;
194 }//end if>maxvalue
195 }//end loop over digits
196 }
197 if (saturated) {
198 ++nSaturation;
199 continue; //Skip this channel
200 }
201
202 m_stripsLookUp[bec][iphi][ieta]=dig;
203
204 }//End loop over all cells
205
206 if (m_nStrips<0)
208
209 if (m_nStrips != nStrips) {
210 ATH_MSG_WARNING( "Number of strips changed! Have " << nStrips << ", had " << m_nStrips << " before.");
212 }
213 else
214 ATH_MSG_DEBUG("strips lookup table filled. Have " << nStrips << " out of " << 2*m_MAXphi*(1+m_MAXeta[0]-m_MINeta[0])
215 << " barrel channels plus " << 2*m_MAXphi*(1+m_MAXeta[1]-m_MINeta[1]) << "endcap channels.");
216
217
218 //Weight for the four neighbors:
219 //only half the signal of the next-to-next neihbor is summed
220 //A more correct approach would be to check if the 'mirrored' neighbor is pulsed as well and compute this weights on-the-fly
221 //const float weight[4]={0.5,1,1,0.5};
222 neighbour_t neighbours[4]={}; //Keep pointers for the four neightbors
223 neighbours[0].dist=-2;
224 neighbours[1].dist=-1;
225 neighbours[2].dist=1;
226 neighbours[3].dist=2;
227
228 for (unsigned bec : {0,1}) { //Loop over barrel and endcap
229 for (unsigned iside=0; iside<2; iside++) { //Loop over both sides of the detector
230 for (int ieta=0; ieta<(int)m_MAXeta[bec]; ieta++) { // Loop over eta range
231 for (unsigned iphi=0; iphi<m_MAXphi; iphi++) { // Loop over phi range
232 const unsigned iphi2=iphi+m_MAXphi*iside; //Phi index inside lookup table
233 const LArAccumulatedCalibDigit* currDig=m_stripsLookUp[bec][iphi2][ieta];
234 if (currDig==nullptr || currDig==&febErrorDummy) continue; //Digit not found or FEB in error: ignore
235
236 if ( currDig->isPulsed() ) {
237 HWIdentifier chid = currDig->hardwareID();
238 CaloGain::CaloGain t_gain = currDig->gain();
239 if (m_dontCorrMask.cellShouldBeMasked(bcCont,chid)) {
240 ATH_MSG_DEBUG("Strip " << m_onlineHelper->channel_name(chid) <<" (Eta = " << ieta << ", Phi = "
241 << iphi2 << ") should not be touched accoring to jobConfig");
242 continue;
243 }
244
245 const unsigned NtotSamples = currDig->nsamples();
246 const unsigned NbTriggers = currDig->nTriggers();
247 ATH_MSG_VERBOSE("Now processing strip "<< m_onlineHelper->channel_name(chid) << " (Eta = " << ieta << ", Phi = " << iphi2 << ")");
248
249 //Fill the pointers and pedestal in the 'neighbours' array
250 for (unsigned i=0;i<4;i++) {
251 //Set all zero to start with...
252 neighbours[i].dig=nullptr;
253 neighbours[i].ped=0.;
254 const int neigbEtaItx=neighbours[i].dist+(int)ieta;
255 //Check if we are supposed to have this neighbour
256 if (neigbEtaItx<(int)m_MINeta[bec] || neigbEtaItx>=(int)m_MAXeta[bec]) {
257 ATH_MSG_DEBUG("Neighbour " << neighbours[i].dist <<" , ieta=" << neigbEtaItx
258 << " doesn't exist. (min="<< m_MINeta[bec] << " ,max=" << m_MAXeta[bec] << ")");
259 neighbours[i].dig=&inexistingDummy;
260 continue;
261 }
262 const LArAccumulatedCalibDigit* neighDig=m_stripsLookUp[bec][iphi2][neigbEtaItx];
263 //Check if neighbour is present
264 if (!neighDig) {
265 //neighbor missing. Could be known missing FEB or new problem
266 //Reported only if at least WARNING
267 if (msgLvl(MSG::WARNING)) {
268 if (m_knownMissingFebs[bec][neigbEtaItx].test(iphi2)) {
269 ATH_MSG_DEBUG("FEB missing for neighbour " << neighbours[i].dist << " to be added to strip 0x"
270 << m_onlineHelper->channel_name(chid) << " (Eta = " << ieta << ", Phi = " << iphi << ")");
271 }
272 else {
273 ATH_MSG_WARNING( "Cannot find neighbour " << neighbours[i].dist << " to be added to strip 0x"
274 << m_onlineHelper->channel_name(chid) << " (Eta = " << ieta << ", Phi = " << iphi << ")" );
275 }
276 }//end if msgLvl(WARNING)
277 continue;
278 }//end if !neighDIg
279 if (neighDig==&febErrorDummy) { //Pointer comparison!!
280 ATH_MSG_WARNING("Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
281 << " (Eta = " << ieta << ", Phi = " << iphi <<"), has a FEB error. Ignored.");
282 continue;
283 }
284
285 //Check if neighbour is pulsed
286 if (neighDig->isPulsed()) {
287 ATH_MSG_WARNING( "Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
288 << " (Eta = " << ieta << ", Phi = " << iphi <<", " << printMaxSample(neighDig)
289 << ") is pulsed. Not used for correction." );
290 continue;
291 }
292
293 //Check if neighbour is on the bad-channel list
294 if (m_dontUseForCorrMask.cellShouldBeMasked(bcCont,neighDig->hardwareID())) {
295 ATH_MSG_DEBUG("Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
296 << " (Eta = " << ieta << ", Phi = " << iphi
297 << ") is flagged by the LArBadChannelMaskingTool. Not used for correction.");
298 continue;
299 }
300
301 //Get Pedestal
302 const float pedestal = larPedestal->pedestal(neighDig->hardwareID(),t_gain);
303 if (pedestal <= (1.0+LArElecCalib::ERRORCODE)) {
304 ATH_MSG_ERROR( "No pedestal are available for neighbour " << neighbours[i].dist << " of strip "
305 << m_onlineHelper->channel_name(chid) << " (Eta = " << ieta << ", Phi = " << iphi << "). Not used for correction!" );
306 continue;
307 }
308 //All went ok, fill struct
309 neighbours[i].dig=neighDig;
310 neighbours[i].ped=pedestal;
311
312 //The weight is one, unless the neighbor-of-the-neighbor is pulsed too
313 neighbours[i].weight=1.0;
314 //Now check if the neighbor-of-the-neighbor is pulsed to set a different weight.
315 const int nnEta=ieta+2*neighbours[i].dist;
316 if (nnEta>=(int)m_MINeta[bec] && nnEta<(int)m_MAXeta[bec]) {
317 const LArAccumulatedCalibDigit* nnDig=m_stripsLookUp[bec][iphi2][nnEta];
318 if (nnDig!=nullptr) {
319 //Could be also FebErrorDummy (which will always pretentd to be not pulsed)
320 if (nnDig->isPulsed()) {
321 ATH_MSG_VERBOSE("Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
322 << " has another pulsed cell in the neighborhood. Setting weight to 0.5");
323 neighbours[i].weight=0.5;
324 }//end if isPulsed
325 }//end if neighbor-of-neighbor not NULL
326 }//end if neighbor-of-neighbor in eta range
327 }//End loop over four neighbours
328
329
330 //Now loop over samples to apply xtalk correction
331 std::vector<double> SampleSums(NtotSamples);
332 for (std::size_t SampleIndex=0;SampleIndex<NtotSamples; ++SampleIndex ) {
333 SampleSums[SampleIndex]=(double)currDig->sampleSum()[SampleIndex];
334 ATH_MSG_VERBOSE("SampleSum " << SampleIndex << " (" << SampleSums[SampleIndex] << " ADC counts / " << NbTriggers << " Ntriggers)");
335 }
336 //Loop over the neighbours and apply corrections
337 for (unsigned i=0;i<4;i++) {
338 if (neighbours[i].dig==&inexistingDummy) { //Pointer comparision!
339 ATH_MSG_VERBOSE("Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
340 << " (Eta = " << ieta << ", Phi = " << iphi << ") does not exist.");
341 //no neighbor (end of calorimeter). Do nothing
342 continue;
343 }
344
345 if (neighbours[i].dig) { //"Normal" case
346 correctSamples(SampleSums,neighbours[i]);
347 ATH_MSG_VERBOSE("Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
348 << " (Eta = " << ieta << ", Phi = " << iphi << ") is used for correction");
349 } //end if have pointer to neighbor cell
350 else { //Neighbor not usable for some reason, try mirrored neighbor
351 const int j = 3-i; //get mirrored neighbor
352 ATH_MSG_INFO( "Neighbour " << neighbours[i].dist << " of strip " << m_onlineHelper->channel_name(chid)
353 << " cannot be used. Taking mirrored neighbour " << neighbours[j].dist << " instead." );
354 if (neighbours[j].dig!=nullptr && neighbours[j].dig!=&inexistingDummy){
355 correctSamples(SampleSums,neighbours[j]);
356 ATH_MSG_VERBOSE("Mirrored neighbour " << neighbours[j].dist << " of strip " << m_onlineHelper->channel_name(chid)
357 << " (Eta = " << ieta << ", Phi = " << iphi << ") is used for correction");
358 }//end if neighbours[j].dig
359 else {
360 ATH_MSG_WARNING( "Mirrored Neighbour " << neighbours[j].dist << " of strip " << m_onlineHelper->channel_name(chid)
361 << " cannot be used too. No correction applied" );
362 }
363 }//end if no neighboring cell
364 }//end loop over the four neighbors
365
366
367 std::vector<uint64_t> SampleSumInt(NtotSamples);
368 bool unresonable=false;
369 std::size_t iPeak=std::max_element(currDig->sampleSum().begin(),currDig->sampleSum().end())-currDig->sampleSum().begin();
370 for (std::size_t SampleIndex=0;SampleIndex<NtotSamples; ++SampleIndex ) {
371 const double& thisSampleSum=SampleSums[SampleIndex];
372 const uint32_t& oldVal=currDig->sampleSum()[SampleIndex];
373 if (thisSampleSum<0) {
374 unresonable=true;
375 ATH_MSG_WARNING( "Channel 0x" << MSG::hex << chid.get_compact() << MSG::dec
376 << " (Eta = " << ieta << ", Phi = " << iphi << ") Resulting ADC sample " << SampleIndex <<" negative! "
377 << thisSampleSum << " instead of " << oldVal << " Not corrected." );
378 break;
379 }
380
381 if (SampleIndex==iPeak) { //check value of correction at peak
382 const float dev=(thisSampleSum-oldVal)/oldVal;
383 m_differences.add(currDig,dev);
384 if (std::fabs(dev)>m_acceptableDifference) {
385 unresonable=true;
386 ATH_MSG_WARNING("Strip " << m_onlineHelper->channel_name(chid) << " (Eta = " << ieta << ", Phi = " << iphi
387 << ") DAC=" << currDig->DAC() << ": Resulting ADC sample " << SampleIndex <<" looks unreasonable: "
388 << thisSampleSum << " instead of " << oldVal << " (off by " << dev*100 << "%)"
389 << " (=" << thisSampleSum/NbTriggers << " -> " << oldVal/NbTriggers <<", ped="
390 << larPedestal->pedestal(chid,t_gain)
391 << " Not Corrected.");
392 break;
393 }//end if dev>m_acceptableDifference
394 } // end if at peak sample
395 SampleSumInt[SampleIndex] = (uint64_t)(thisSampleSum);
396 }//End loop over samples
397
398
399 if (unresonable) {
400 m_uncorrectedIds.insert(chid);
401 ATH_MSG_DEBUG("Correction for channel " << m_onlineHelper->channel_name(chid) << " failed");
402 }
403 else {
404 ATH_MSG_VERBOSE("Correction for channel " << m_onlineHelper->channel_name(chid) << " DAC="<<currDig->DAC() << " succeeded "
405 << currDig->sampleSum()[2] << "->" << SampleSumInt[2]);
406 // FIXME: const_cast, modifying object in SG.
407 const_cast<LArAccumulatedCalibDigit*>(currDig)->setSampleSum(SampleSumInt);
408 }
409 }// end if-pulsed
410 }//end loop over phi
411 }//end loop over eta
412 }//End loop over sides
413 }//End loop over barrel-EC
414 } //End loop over all containers
415
416 if (nSaturation) {
417 ATH_MSG_INFO( "Found " << nSaturation << " saturating digits in this event." );
418 }
419 return StatusCode::SUCCESS;
420}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define maxValue(current, test)
LArBadXCont< LArBadChannel > LArBadChannelCont
static Double_t sc
LArFebErrorSummary
Definition LArTPCnv.cxx:56
bool msgLvl(const MSG::Level lvl) const
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
virtual float pedestal(const HWIdentifier &id, int gain) const =0
value_type get_compact() const
Get the compact id.
bool isPulsed() const
Tell if this channel was pulsed.
CaloGain::CaloGain gain() const
return gain value
const HWIdentifier & hardwareID() const
Return HWIdentifier.
const std::vector< uint64_t > & sampleSum() const
return a reference to a stl vector containing the sample-sums
int DAC() const
return the number of samples
unsigned nTriggers() const
return the number of triggers
size_t nsamples() const
return number of samples
static std::string error_to_string(uint16_t error)
interpret the error in string
uint16_t feb_error(HWIdentifier febid) const
get error for feb
void correctSamples(std::vector< double > &dest, const neighbour_t &neighbor) const
SG::ReadCondHandleKey< ILArPedestal > m_pedKey
std::set< HWIdentifier > m_uncorrectedIds
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
std::array< std::vector< std::bitset< 128 > >, 2 > m_knownMissingFebs
size_t getEtaIndex(const Identifier) const
SG::ReadCondHandleKey< LArBadChannelCont > m_BCKey
Gaudi::Property< float > m_acceptableDifference
static std::string printMaxSample(const LArAccumulatedCalibDigit *thisDig)
size_t getPhiIndex(const Identifier) const
std::array< std::vector< std::vector< const LArAccumulatedCalibDigit * > >, 2 > m_stripsLookUp
Gaudi::Property< std::vector< std::string > > m_keylist
Gaudi::Property< unsigned int > m_ADCsatur
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
::StatusCode StatusCode
StatusCode definition for legacy code.
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
setScaleOne setStatusOne saturated
setWord1 uint16_t
setEventNumber uint32_t

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}

◆ finalize()

StatusCode LArStripsCrossTalkCorrector::finalize ( )
finaloverridevirtual

Definition at line 424 of file LArStripsCrossTalkCorrector.cxx.

424 {
425 if (msgLvl(MSG::WARNING) && !m_uncorrectedIds.empty() ) {
426 const LArBadChanBitPacking packing;
427 ATH_MSG_WARNING( "The following "<< m_uncorrectedIds.size() << " channels are (partly) uncorrected because of unresonable high correction:" );
428 SG::ReadCondHandle<LArBadChannelCont> bcHdl{m_BCKey};
429 const LArBadChannelCont* bcCont{*bcHdl};
430 if(bcCont) {
431 std::set<HWIdentifier>::const_iterator it=m_uncorrectedIds.begin();
432 std::set<HWIdentifier>::const_iterator it_e=m_uncorrectedIds.end();
433 for (;it!=it_e;++it) {
434 LArBadChannel bc=bcCont->status(*it);
435 ATH_MSG_WARNING( "Not corrected: " << m_onlineHelper->channel_name(*it) << " " << packing.stringStatus(bc) );
436 }
437 }
438 }
439
441
442 return StatusCode::SUCCESS;
443}
MsgStream & msg() const
LArBC_t status(const HWIdentifier channel) const
Query the status of a particular channel or FEB This is the main client access method.
std::string stringStatus(const LArBadChannel &bc) const

◆ getEtaIndex()

size_t LArStripsCrossTalkCorrector::getEtaIndex ( const Identifier id) const
inlineprivate

Definition at line 147 of file LArStripsCrossTalkCorrector.h.

147 {
148 if (m_emId->sampling(id)!=1) return m_noIdx; //Deal only with layer 1
149 const int region = m_emId->region(id);
150 const int keta = m_emId->eta(id);
151 if (abs(m_emId->barrel_ec(id))== 1) { // Barrel case
152 if (region==0)
153 return keta;
154 else
155 return m_noIdx;
156 }// end if barrel
157 else if (abs(m_emId->barrel_ec(id))== 2) { //Endcap case
158 switch (region) {
159 case 2:
160 return keta;
161 break;
162 case 3:
163 return keta+96;
164 break;
165 case 4:
166 return keta+144;
167 break;
168 default:
169 return m_noIdx;
170 break;
171 }
172 }// end if endcap
173 return m_noIdx; //endcap OW or unknown region
174}

◆ getPhiIndex()

size_t LArStripsCrossTalkCorrector::getPhiIndex ( const Identifier id) const
inlineprivate

Definition at line 176 of file LArStripsCrossTalkCorrector.h.

176 {
177 const int kphi = m_emId->phi(id);
178 const int kside=m_emId->barrel_ec(id)>0;
179 return kphi+kside*m_MAXphi;
180 }

◆ initialize()

StatusCode LArStripsCrossTalkCorrector::initialize ( )
finaloverridevirtual

Definition at line 18 of file LArStripsCrossTalkCorrector.cxx.

18 {
19
20 StatusCode sc = detStore()->retrieve(m_onlineHelper, "LArOnlineID");
21 if (sc.isFailure()) {
22 ATH_MSG_ERROR( "Could not get LArOnlineID helper !" );
23 return StatusCode::FAILURE;
24 }
25
26 sc = detStore()->retrieve(m_emId, "LArEM_ID");
27 if (sc.isFailure()) {
28 ATH_MSG_ERROR( "Could not get LArEM_ID helper !" );
29 return StatusCode::FAILURE;
30 }
31
32
34 ATH_CHECK(m_dontCorrMask.buildBitMask(m_dontCorr,msg()));
35
36 ATH_CHECK(m_BCKey.initialize());
37 ATH_CHECK(m_BFKey.initialize());
38 ATH_CHECK(m_cablingKey.initialize());
39 ATH_CHECK(m_pedKey.initialize());
40
41 m_acceptableDifference.value()/=100; //Convert from % to fraction
42
43 //Initialize strips lookup table:
44 for (unsigned bec : {0,1}) {
45 m_stripsLookUp[bec].resize(2*m_MAXphi); //change index to coded index
46 for (unsigned iside=0;iside<2;++iside) {
47 for (unsigned iphi=0; iphi!=m_MAXphi; ++iphi) {
48 m_stripsLookUp[bec][iphi+iside*m_MAXphi].resize(m_MAXeta[bec],nullptr);
49 }
50 }
51 }
52 return StatusCode::SUCCESS;
53}
const ServiceHandle< StoreGateSvc > & detStore() const
SG::ReadCondHandleKey< LArBadFebCont > m_BFKey
Gaudi::Property< std::vector< std::string > > m_dontUseForCorr
Gaudi::Property< std::vector< std::string > > m_dontCorr

◆ initKnownMissingFebs()

StatusCode LArStripsCrossTalkCorrector::initKnownMissingFebs ( )
private

Definition at line 456 of file LArStripsCrossTalkCorrector.cxx.

456 {
457unsigned nMissing=0;
458
459 for (unsigned bec : {0,1}) {
460 m_knownMissingFebs[bec].clear();
461 m_knownMissingFebs[bec].resize(m_MAXeta[bec]);
462 }
463
464 //const std::vector<HWIdentifier> mf=m_badChannelTool->missingFEBs();
465 SG::ReadCondHandle<LArBadFebCont> bfHdl{m_BFKey};
466 const LArBadFebCont* bfCont{*bfHdl};
467 if(!bfCont) {
468 ATH_MSG_ERROR( "Do not have missing FEBs " << m_BFKey.key() );
469 return StatusCode::FAILURE;
470 }
471 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey};
472 const LArOnOffIdMapping* cabling{*cablingHdl};
473 if(!cabling) {
474 ATH_MSG_ERROR( "Do not have cabling object LArOnOffIdMapping");
475 return StatusCode::FAILURE;
476 }
477
479 for (const auto& entry : bfCont->fullCont()) {
480 const HWIdentifier hid=HWIdentifier(entry.first);
481 mf.emplace_back(LArBadChannelDBTools::BadFebEntry(hid,entry.second));
482 }
483
484 //ATH_MSG_DEBUG( "Got " << mf.size() << " missing FEBs" );
485 LArBadChannelDBTools::BadFebVec::const_iterator it=mf.begin();
486 LArBadChannelDBTools::BadFebVec::const_iterator it_e=mf.end();
487 for (;it!=it_e;++it) {
488 const HWIdentifier& fid=it->first;
489 const LArBadFeb& bf=it->second;
490 if (bf.deadAll() || bf.deadReadout() || bf.deactivatedInOKS()) {
491 if (m_onlineHelper->isEMBchannel(fid) || m_onlineHelper->isEMECchannel(fid)) {
492 ATH_MSG_DEBUG( "Feb " << MSG::hex << fid.get_compact() << MSG::dec << " reported as missing" );
493 const int nChan=m_onlineHelper->channelInSlotMax(fid);
494 const unsigned bec=m_onlineHelper->barrel_ec(fid);
495 for (int c=0;c<nChan;++c) {
496 const HWIdentifier chid=m_onlineHelper->channel_Id(fid,c);
497 const Identifier id=cabling->cnvToIdentifier(chid);
498 const size_t ieta=getEtaIndex(id);
499 if (ieta==m_noIdx) continue; //Not a cell we care about
500 const size_t iphi=getPhiIndex(id);
501 if (iphi>=2*m_MAXphi || ieta>=m_MAXeta[bec]) {
502 ATH_MSG_FATAL( "Array index out of range: iphi=" << iphi << " (max " << m_MAXphi << "), ieta="
503 << ieta << "(max " << m_MAXeta[bec] << ")" );
504 return StatusCode::FAILURE;
505 }
506 m_knownMissingFebs[bec][ieta].set(iphi);
507 ++nMissing;
508 }//end loop over channels of one feb
509 }//end if is barrel/endcap & EM
510 }//end if is dead
511 }//end loop over problematic febs
512 ATH_MSG_INFO( "Number of known missing strip cells: "<< nMissing );
514 return StatusCode::SUCCESS;
515}
LArBadXCont< LArBadFeb > LArBadFebCont
bool deadAll() const
FEB is completely missing, e.g. powered off.
Definition LArBadFeb.h:30
bool deactivatedInOKS() const
Deactivated in OKS.
Definition LArBadFeb.h:39
bool deadReadout() const
FEB is not sending readout data, but the L1 trigger path is working.
Definition LArBadFeb.h:33
const BadChanVec & fullCont() const
std::pair< HWIdentifier, LArBadFeb > BadFebEntry
std::vector< BadFebEntry > BadFebVec

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ printMaxSample()

std::string LArStripsCrossTalkCorrector::printMaxSample ( const LArAccumulatedCalibDigit * thisDig)
staticprivate

Definition at line 446 of file LArStripsCrossTalkCorrector.cxx.

446 {
447
448 const std::vector<uint64_t>& ss=thisDig->sampleSum();
449 std::vector<uint64_t>::const_iterator imax=std::max_element(ss.begin(),ss.end());
450 std::ostringstream output;
451 output << "S[" << imax-ss.begin() << "]=" << *imax/thisDig->nTriggers();
452 return output.str();
453}
static Double_t ss
int imax(int i, int j)
output
Definition merge.py:16

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
virtual StatusCode sysInitialize() override
Override sysInitialize.
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_acceptableDifference

Gaudi::Property<float> LArStripsCrossTalkCorrector::m_acceptableDifference {this,"AcceptableDifference",20, "For sanity check: By how much the corrected value may differ from the original one (in %)"}
private

Definition at line 96 of file LArStripsCrossTalkCorrector.h.

96{this,"AcceptableDifference",20, "For sanity check: By how much the corrected value may differ from the original one (in %)"};

◆ m_ADCsatur

Gaudi::Property<unsigned int> LArStripsCrossTalkCorrector::m_ADCsatur {this,"ADCsaturation",0,"Cutoff value to ignore saturated digits"}
private

Definition at line 95 of file LArStripsCrossTalkCorrector.h.

95{this,"ADCsaturation",0,"Cutoff value to ignore saturated digits"};

◆ m_BCKey

SG::ReadCondHandleKey<LArBadChannelCont> LArStripsCrossTalkCorrector::m_BCKey {this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"}
private

Definition at line 71 of file LArStripsCrossTalkCorrector.h.

71{this, "BadChanKey", "LArBadChannel", "SG key for LArBadChan object"};

◆ m_BFKey

SG::ReadCondHandleKey<LArBadFebCont> LArStripsCrossTalkCorrector::m_BFKey {this, "MissingFEBKey", "LArBadFeb", "SG key for miffing FEB object"}
private

Definition at line 72 of file LArStripsCrossTalkCorrector.h.

72{this, "MissingFEBKey", "LArBadFeb", "SG key for miffing FEB object"};

◆ m_cablingKey

SG::ReadCondHandleKey<LArOnOffIdMapping> LArStripsCrossTalkCorrector::m_cablingKey {this, "OnOffMap", "LArOnOffIdMap", "SG key for mapping object"}
private

Definition at line 73 of file LArStripsCrossTalkCorrector.h.

73{this, "OnOffMap", "LArOnOffIdMap", "SG key for mapping object"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_differences

XtalkCorrHisto LArStripsCrossTalkCorrector::m_differences {6,0.3}
private

Definition at line 124 of file LArStripsCrossTalkCorrector.h.

124{6,0.3};

◆ m_dontCorr

Gaudi::Property<std::vector<std::string> > LArStripsCrossTalkCorrector::m_dontCorr {this,"NoXtalkCorr",{}, "Types of bad channel should be ignored and not x-talk corrected"}
private

Definition at line 80 of file LArStripsCrossTalkCorrector.h.

80{this,"NoXtalkCorr",{}, "Types of bad channel should be ignored and not x-talk corrected"};

◆ m_dontCorrMask

LArBadChannelMask LArStripsCrossTalkCorrector::m_dontCorrMask
private

Definition at line 81 of file LArStripsCrossTalkCorrector.h.

◆ m_dontUseForCorr

Gaudi::Property<std::vector<std::string> > LArStripsCrossTalkCorrector::m_dontUseForCorr {this,"DontUseForXtalkCorr",{}, "Types of bad channel should not be taken into accout for xtalk correction of their neighbor"}
private

Definition at line 76 of file LArStripsCrossTalkCorrector.h.

76{this,"DontUseForXtalkCorr",{}, "Types of bad channel should not be taken into accout for xtalk correction of their neighbor"};

◆ m_dontUseForCorrMask

LArBadChannelMask LArStripsCrossTalkCorrector::m_dontUseForCorrMask
private

Definition at line 79 of file LArStripsCrossTalkCorrector.h.

◆ m_emId

const LArEM_ID* LArStripsCrossTalkCorrector::m_emId {nullptr}
private

Definition at line 86 of file LArStripsCrossTalkCorrector.h.

86{nullptr};

◆ m_event_counter

unsigned int LArStripsCrossTalkCorrector::m_event_counter =0
private

Definition at line 87 of file LArStripsCrossTalkCorrector.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_fatalFebErrorPattern

uint16_t LArStripsCrossTalkCorrector::m_fatalFebErrorPattern {0xffff}
private

Definition at line 101 of file LArStripsCrossTalkCorrector.h.

101{0xffff};

◆ m_keylist

Gaudi::Property<std::vector<std::string> > LArStripsCrossTalkCorrector::m_keylist {this,"KeyList",{},"List of input keys ('HIGH','MEDIUM','LOW')"}
private

Definition at line 94 of file LArStripsCrossTalkCorrector.h.

94{this,"KeyList",{},"List of input keys ('HIGH','MEDIUM','LOW')"};

◆ m_knownMissingFebs

std::array<std::vector < std::bitset< 128 > >,2> LArStripsCrossTalkCorrector::m_knownMissingFebs
private

Definition at line 110 of file LArStripsCrossTalkCorrector.h.

◆ m_MAXeta

auto LArStripsCrossTalkCorrector::m_MAXeta =std::to_array<unsigned>({448,208})
staticconstexprprivate

Definition at line 89 of file LArStripsCrossTalkCorrector.h.

◆ m_MAXphi

const unsigned int LArStripsCrossTalkCorrector::m_MAXphi =64
private

Definition at line 91 of file LArStripsCrossTalkCorrector.h.

◆ m_MINeta

auto LArStripsCrossTalkCorrector::m_MINeta =std::to_array<unsigned>({1,0})
staticconstexprprivate

Definition at line 90 of file LArStripsCrossTalkCorrector.h.

◆ m_missingFEBsDone

bool LArStripsCrossTalkCorrector::m_missingFEBsDone =false
private

Definition at line 112 of file LArStripsCrossTalkCorrector.h.

◆ m_noIdx

const size_t LArStripsCrossTalkCorrector::m_noIdx {9999999}
private

Definition at line 103 of file LArStripsCrossTalkCorrector.h.

103{9999999};

◆ m_nStrips

int LArStripsCrossTalkCorrector::m_nStrips =-1
private

Definition at line 92 of file LArStripsCrossTalkCorrector.h.

◆ m_onlineHelper

const LArOnlineID* LArStripsCrossTalkCorrector::m_onlineHelper {nullptr}
private

Definition at line 85 of file LArStripsCrossTalkCorrector.h.

85{nullptr};

◆ m_pedKey

SG::ReadCondHandleKey<ILArPedestal> LArStripsCrossTalkCorrector::m_pedKey {this,"PedestalKey","Pedestal","Key of Pedestal object"}
private

Definition at line 99 of file LArStripsCrossTalkCorrector.h.

99{this,"PedestalKey","Pedestal","Key of Pedestal object"};

◆ m_stripsLookUp

std::array<std::vector < std::vector < const LArAccumulatedCalibDigit* > >,2> LArStripsCrossTalkCorrector::m_stripsLookUp
private

Definition at line 108 of file LArStripsCrossTalkCorrector.h.

◆ m_uncorrectedIds

std::set<HWIdentifier> LArStripsCrossTalkCorrector::m_uncorrectedIds
private

Definition at line 114 of file LArStripsCrossTalkCorrector.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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