ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
LArBadFebMaskingTool Class Reference

Mask LAr cells in Febs with decoding errors or listed in the bad feb database. More...

#include <LArBadFebMaskingTool.h>

Inheritance diagram for LArBadFebMaskingTool:
Collaboration diagram for LArBadFebMaskingTool:

Public Member Functions

virtual StatusCode initialize () override
 initialize the tool More...
 
virtual StatusCode finalize () override
 finalize the tool More...
 
virtual StatusCode process (CaloCellContainer *theCellContainer, const EventContext &ctx) const override
 update theCellContainer, masking Feb with errors More...
 

Private Attributes

SG::ReadCondHandleKey< LArBadFebContm_badFebKey {this,"BadFebKey","LArBadFeb","Key of Bad-Feb object"}
 handle to get bad febs More...
 
SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
 handle to LAr cabling
More...
 
Gaudi::Property< bool > m_maskParity {this,"maskParity",true}
 flags to select which errors to mask More...
 
Gaudi::Property< bool > m_maskSampleHeader {this,"maskSampleHeader",true}
 
Gaudi::Property< bool > m_maskEVTID {this,"maskEVTID",true}
 
Gaudi::Property< bool > m_maskScacStatus {this,"maskScacStatus",true}
 
Gaudi::Property< bool > m_maskScaOutOfRange {this,"maskScaOutOfRange",true}
 
Gaudi::Property< bool > m_maskGainMismatch {this,"maskGainMismatch",true}
 
Gaudi::Property< bool > m_maskTypeMismatch {this,"maskTypeMismatch",true}
 
Gaudi::Property< bool > m_maskNumOfSamples {this,"maskNumOfSamples",true}
 
Gaudi::Property< bool > m_maskEmptyDataBlock {this,"maskEmptyDataBlock",true}
 
Gaudi::Property< bool > m_maskDspBlockSize {this,"maskDspBlockSize",true}
 
Gaudi::Property< bool > m_maskCheckSum {this,"maskCheckSum",true}
 
Gaudi::Property< bool > m_maskMissingHeader {this,"maskMissingHeader",true}
 
Gaudi::Property< bool > m_maskBadGain {this,"maskBadGain",true}
 
SG::ReadHandleKey< LArFebErrorSummarym_larFebErrorSummaryKey {this,"FebErrorSummaryKey","LArFebErrorSummary"}
 
SG::ReadHandleKey< xAOD::EventInfom_eventInfoKey {this,"EventInfoKey","EventInfo"}
 
SG::WriteDecorHandleKey< xAOD::EventInfom_eventInfoDecorKey {this,"EventInfoDecorKey","EventInfo.larFlags"}
 
uint16_t m_errorToMask =0
 compute bit mask of errors to mask More...
 
const CaloCell_IDm_calo_id =nullptr
 pointers to identifier helpers More...
 
const LArOnlineIDm_onlineID =nullptr
 
std::atomic< int > m_evt {0}
 Number of events processed. More...
 
std::atomic< int > m_mask {0}
 Number of Feb masked. More...
 

Detailed Description

Mask LAr cells in Febs with decoding errors or listed in the bad feb database.

AlgTool properties (name defined in cxx file): Handle for bad channel tool name Switches to decide which Feb errors to mask Removed setting LAr errors bit in EventInfo, moved to LArFebErrorSummaryMaker

Created April 23, 2009 G.Unal

Definition at line 38 of file LArBadFebMaskingTool.h.

Member Function Documentation

◆ finalize()

StatusCode LArBadFebMaskingTool::finalize ( )
overridevirtual

finalize the tool

Definition at line 72 of file LArBadFebMaskingTool.cxx.

73 {
74  ATH_MSG_INFO (" ---- Summary from LArBadFebMaskingTool ");
75  ATH_MSG_INFO (" Number of events processed " << m_evt);
76  ATH_MSG_INFO (" Number of masked Feb total " << m_mask);
77  float ratio=0.;
78  if (m_evt>0) ratio=((float)(m_mask))/((float)(m_evt));
79  ATH_MSG_INFO (" Number of masked Feb per event " << ratio);
80 
81  return StatusCode::SUCCESS;
82 }

◆ initialize()

StatusCode LArBadFebMaskingTool::initialize ( )
overridevirtual

initialize the tool

Definition at line 35 of file LArBadFebMaskingTool.cxx.

36 {
37  m_evt=0;
38  m_mask=0;
39 
40  m_errorToMask = 0;
54 
55  ATH_MSG_INFO (" bit mask for errors to mask " << m_errorToMask);
56 
57  // initialize read handle keys
59  ATH_CHECK( m_badFebKey.initialize());
63 
64  // retrieve identifier helpers
65  ATH_CHECK( detStore()->retrieve(m_onlineID, "LArOnlineID") );
66  ATH_CHECK( detStore()->retrieve(m_calo_id,"CaloCell_ID") );
67 
68  return StatusCode::SUCCESS;
69 
70 }

◆ process()

StatusCode LArBadFebMaskingTool::process ( CaloCellContainer theCellContainer,
const EventContext &  ctx 
) const
overridevirtual

update theCellContainer, masking Feb with errors

Definition at line 84 of file LArBadFebMaskingTool.cxx.

86 {
87  m_evt++;
88 
89 
90  ATH_MSG_DEBUG (" in LArBadFebMaskingTool::process ");
92  if (!larFebErrorSummary.isValid()) {
93  ATH_MSG_WARNING ("Cannot retrieve Feb error summary with key " << m_larFebErrorSummaryKey.key() <<". Skip LArBadFebMaskingTool::process ");
94  return StatusCode::SUCCESS;
95  }
96 
97  // retrieve map of Feb-errors
98  const std::map<unsigned int,uint16_t>& febMap = larFebErrorSummary->get_all_febs();
99 
100  ATH_MSG_DEBUG (" Number of Febs " << febMap.size());
101 
102  // catch cases of empty LAR container => severe problem in decoding => flag event as in ERROR
103  unsigned int nLar = theCont->nCellsCalo(CaloCell_ID::LAREM)+theCont->nCellsCalo(CaloCell_ID::LARHEC)+theCont->nCellsCalo(CaloCell_ID::LARFCAL);
104  if (nLar==0) {
105  ATH_MSG_DEBUG (" empty lar cell container ");
107  ATH_MSG_DEBUG (" set error bit for LAr for this event ");
108  if (!eventInfo->updateErrorState(xAOD::EventInfo::LAr,xAOD::EventInfo::Error)) {
109  ATH_MSG_WARNING (" cannot set error state for LAr ");
110  }
111  if (!eventInfo->updateEventFlagBit(xAOD::EventInfo::LAr,LArEventBitInfo::DATACORRUPTED)) {
112  ATH_MSG_WARNING (" cannot set event bit info for LAr ");
113  }
114  }
115 
116 
118  const LArOnOffIdMapping* cabling=*cablingHdl;
119 
121  const LArBadFebCont* badFebs=*badFebHdl;
122 
123 
124 // loop over all Febs
125 
126  for (HWIdentifier febId : m_onlineID->feb_range()) {
127  bool toMask1 = false; // mask because of bad error
128  bool inError = false; // mask because Feb listed in database as being to mask
129 
130 // for debug
131  unsigned int ifeb = febId.get_identifier32().get_compact();
132  ATH_MSG_DEBUG (" process Feb: " << ifeb);
133 
134  std::map<unsigned int,uint16_t>::const_iterator it1 = febMap.find(ifeb);
135  if (it1 != febMap.end()) {
136  uint16_t ierror = (*it1).second;
137  if (ierror & m_errorToMask) toMask1=true;
138  ATH_MSG_DEBUG (" ierror,toMask " << ierror << " " << toMask1 << " ");
139  }
140 
141 
142  LArBadFeb febstatus = badFebs->status(febId);
143  inError = febstatus.inError();
144 
145  if (toMask1 || inError) {
146  m_mask++;
147  for (int ch=0; ch<128; ++ch) {
148  HWIdentifier hwid = m_onlineID->channel_Id(febId, ch);
149  if (cabling->isOnlineConnected(hwid)) {
150  Identifier id = cabling->cnvToIdentifier( hwid);
151  IdentifierHash theCellHashID = m_calo_id->calo_cell_hash(id);
152  int index = theCont->findIndex(theCellHashID);
153  if (index<0) {
154  ATH_MSG_DEBUG (" cell " << hwid.get_compact() << " " << id.get_compact() << " is not in the container ");
155  continue;
156  }
157  CaloCell* aCell = theCont->at(index);
158 
159  if (aCell) {
160  ATH_MSG_DEBUG (" mask cell hwid= " << hwid.get_compact() << " offlineid = " << id.get_compact()
161  << " " << aCell->ID().get_compact());
162  aCell->setEnergy(0.);
163  aCell->setTime(0.);
164  uint16_t qua=0;
165  aCell->setQuality(qua);
166  uint16_t provenance = (aCell->provenance() | 0x0800);
167  aCell->setProvenance(provenance);
168  }
169 
170  } // isConnected
171  } // loop over channels in Feb
172  } // toMask
173 
174  } // loop over Febs in error
175 
176  return StatusCode::SUCCESS;
177 }

Member Data Documentation

◆ m_badFebKey

SG::ReadCondHandleKey<LArBadFebCont> LArBadFebMaskingTool::m_badFebKey {this,"BadFebKey","LArBadFeb","Key of Bad-Feb object"}
private

handle to get bad febs

Definition at line 66 of file LArBadFebMaskingTool.h.

◆ m_cablingKey

SG::ReadCondHandleKey<LArOnOffIdMapping> LArBadFebMaskingTool::m_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
private

handle to LAr cabling

Definition at line 69 of file LArBadFebMaskingTool.h.

◆ m_calo_id

const CaloCell_ID* LArBadFebMaskingTool::m_calo_id =nullptr
private

pointers to identifier helpers

Definition at line 96 of file LArBadFebMaskingTool.h.

◆ m_errorToMask

uint16_t LArBadFebMaskingTool::m_errorToMask =0
private

compute bit mask of errors to mask

Definition at line 92 of file LArBadFebMaskingTool.h.

◆ m_eventInfoDecorKey

SG::WriteDecorHandleKey<xAOD::EventInfo> LArBadFebMaskingTool::m_eventInfoDecorKey {this,"EventInfoDecorKey","EventInfo.larFlags"}
private

Definition at line 89 of file LArBadFebMaskingTool.h.

◆ m_eventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> LArBadFebMaskingTool::m_eventInfoKey {this,"EventInfoKey","EventInfo"}
private

Definition at line 88 of file LArBadFebMaskingTool.h.

◆ m_evt

std::atomic<int> LArBadFebMaskingTool::m_evt {0}
mutableprivate

Number of events processed.

Definition at line 101 of file LArBadFebMaskingTool.h.

◆ m_larFebErrorSummaryKey

SG::ReadHandleKey<LArFebErrorSummary> LArBadFebMaskingTool::m_larFebErrorSummaryKey {this,"FebErrorSummaryKey","LArFebErrorSummary"}
private

Definition at line 87 of file LArBadFebMaskingTool.h.

◆ m_mask

std::atomic<int> LArBadFebMaskingTool::m_mask {0}
mutableprivate

Number of Feb masked.

Definition at line 105 of file LArBadFebMaskingTool.h.

◆ m_maskBadGain

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskBadGain {this,"maskBadGain",true}
private

Definition at line 85 of file LArBadFebMaskingTool.h.

◆ m_maskCheckSum

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskCheckSum {this,"maskCheckSum",true}
private

Definition at line 83 of file LArBadFebMaskingTool.h.

◆ m_maskDspBlockSize

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskDspBlockSize {this,"maskDspBlockSize",true}
private

Definition at line 82 of file LArBadFebMaskingTool.h.

◆ m_maskEmptyDataBlock

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskEmptyDataBlock {this,"maskEmptyDataBlock",true}
private

Definition at line 81 of file LArBadFebMaskingTool.h.

◆ m_maskEVTID

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskEVTID {this,"maskEVTID",true}
private

Definition at line 75 of file LArBadFebMaskingTool.h.

◆ m_maskGainMismatch

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskGainMismatch {this,"maskGainMismatch",true}
private

Definition at line 78 of file LArBadFebMaskingTool.h.

◆ m_maskMissingHeader

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskMissingHeader {this,"maskMissingHeader",true}
private

Definition at line 84 of file LArBadFebMaskingTool.h.

◆ m_maskNumOfSamples

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskNumOfSamples {this,"maskNumOfSamples",true}
private

Definition at line 80 of file LArBadFebMaskingTool.h.

◆ m_maskParity

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskParity {this,"maskParity",true}
private

flags to select which errors to mask

Definition at line 73 of file LArBadFebMaskingTool.h.

◆ m_maskSampleHeader

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskSampleHeader {this,"maskSampleHeader",true}
private

Definition at line 74 of file LArBadFebMaskingTool.h.

◆ m_maskScacStatus

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskScacStatus {this,"maskScacStatus",true}
private

Definition at line 76 of file LArBadFebMaskingTool.h.

◆ m_maskScaOutOfRange

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskScaOutOfRange {this,"maskScaOutOfRange",true}
private

Definition at line 77 of file LArBadFebMaskingTool.h.

◆ m_maskTypeMismatch

Gaudi::Property<bool> LArBadFebMaskingTool::m_maskTypeMismatch {this,"maskTypeMismatch",true}
private

Definition at line 79 of file LArBadFebMaskingTool.h.

◆ m_onlineID

const LArOnlineID* LArBadFebMaskingTool::m_onlineID =nullptr
private

Definition at line 97 of file LArBadFebMaskingTool.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArBadFebMaskingTool::m_maskScaOutOfRange
Gaudi::Property< bool > m_maskScaOutOfRange
Definition: LArBadFebMaskingTool.h:77
LArFebErrorSummary::CheckSum
@ CheckSum
Definition: LArFebErrorSummary.h:28
LArBadFebMaskingTool::m_eventInfoDecorKey
SG::WriteDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
Definition: LArBadFebMaskingTool.h:89
CaloCell_Base_ID::LARFCAL
@ LARFCAL
Definition: CaloCell_Base_ID.h:46
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
CaloCell_Base_ID::calo_cell_hash
IdentifierHash calo_cell_hash(const Identifier cellId) const
create hash id from 'global' cell id
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArBadFebMaskingTool::m_maskParity
Gaudi::Property< bool > m_maskParity
flags to select which errors to mask
Definition: LArBadFebMaskingTool.h:73
CaloCell::setTime
virtual void setTime(float time)
set time
Definition: CaloCell.cxx:151
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
LArBadXCont
Conditions-Data class holding LAr Bad Channel or Bad Feb information.
Definition: LArBadChannelCont.h:28
LArBadFebMaskingTool::m_maskEmptyDataBlock
Gaudi::Property< bool > m_maskEmptyDataBlock
Definition: LArBadFebMaskingTool.h:81
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
LArBadFebMaskingTool::m_maskBadGain
Gaudi::Property< bool > m_maskBadGain
Definition: LArBadFebMaskingTool.h:85
LArEventBitInfo::DATACORRUPTED
@ DATACORRUPTED
Definition: LArEventBitInfo.h:14
LArBadFebMaskingTool::m_maskCheckSum
Gaudi::Property< bool > m_maskCheckSum
Definition: LArBadFebMaskingTool.h:83
CaloCell_Base_ID::LARHEC
@ LARHEC
Definition: CaloCell_Base_ID.h:46
LArBadFebMaskingTool::m_maskScacStatus
Gaudi::Property< bool > m_maskScacStatus
Definition: LArBadFebMaskingTool.h:76
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
CaloCell::provenance
uint16_t provenance() const
get provenance (data member)
Definition: CaloCell.h:338
CaloCell::setEnergy
virtual void setEnergy(float energy)
set energy
Definition: CaloCell.cxx:136
HWIdentifier
Definition: HWIdentifier.h:13
xAOD::EventInfo_v1::LAr
@ LAr
The LAr calorimeter.
Definition: EventInfo_v1.h:335
LArBadXCont::status
LArBC_t status(const HWIdentifier channel) const
Query the status of a particular channel or FEB This is the main client access method.
LArFebErrorSummary::BadGain
@ BadGain
Definition: LArFebErrorSummary.h:28
xAOD::EventInfo_v1::Error
@ Error
The sub-detector issued an error.
Definition: EventInfo_v1.h:349
LArFebErrorSummary::TypeMismatch
@ TypeMismatch
Definition: LArFebErrorSummary.h:28
LArOnlineID_Base::feb_range
id_range feb_range() const
Definition: LArOnlineID_Base.cxx:1920
LArBadFebMaskingTool::m_calo_id
const CaloCell_ID * m_calo_id
pointers to identifier helpers
Definition: LArBadFebMaskingTool.h:96
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
CaloCell::setQuality
virtual void setQuality(uint16_t quality)
set quality
Definition: CaloCell.cxx:156
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
DetDescrDictionaryDict::it1
std::vector< HWIdentifier >::iterator it1
Definition: DetDescrDictionaryDict.h:17
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LArFebErrorSummary::ScacStatus
@ ScacStatus
Definition: LArFebErrorSummary.h:27
LArOnlineID_Base::channel_Id
HWIdentifier channel_Id(int barrel_ec, int pos_neg, int feedthrough, int slot, int channel) const
create channel identifier from fields
Definition: LArOnlineID_Base.cxx:1569
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
CaloCell::setProvenance
void setProvenance(uint16_t prov)
set Provenance
Definition: CaloCell.cxx:167
LArBadFebMaskingTool::m_maskMissingHeader
Gaudi::Property< bool > m_maskMissingHeader
Definition: LArBadFebMaskingTool.h:84
LArBadFebMaskingTool::m_maskNumOfSamples
Gaudi::Property< bool > m_maskNumOfSamples
Definition: LArBadFebMaskingTool.h:80
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
LArBadFeb
Definition: LArBadFeb.h:10
LArFebErrorSummary::EmptyDataBlock
@ EmptyDataBlock
Definition: LArFebErrorSummary.h:28
LArFebErrorSummary::EVTID
@ EVTID
Definition: LArFebErrorSummary.h:27
LArBadFebMaskingTool::m_maskSampleHeader
Gaudi::Property< bool > m_maskSampleHeader
Definition: LArBadFebMaskingTool.h:74
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CaloCell::ID
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition: CaloCell.h:279
LArBadFeb::inError
bool inError() const
FEB has readout errors, cannot be used.
Definition: LArBadFeb.h:36
LArBadFebMaskingTool::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: LArBadFebMaskingTool.h:88
LArFebErrorSummary::DspBlockSize
@ DspBlockSize
Definition: LArFebErrorSummary.h:28
LArBadFebMaskingTool::m_maskTypeMismatch
Gaudi::Property< bool > m_maskTypeMismatch
Definition: LArBadFebMaskingTool.h:79
SG::WriteDecorHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Identifier::get_compact
value_type get_compact(void) const
Get the compact id.
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
CaloCell
Data object for each calorimeter readout cell.
Definition: CaloCell.h:57
LArFebErrorSummary::Parity
@ Parity
Definition: LArFebErrorSummary.h:27
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArBadFebMaskingTool::m_maskEVTID
Gaudi::Property< bool > m_maskEVTID
Definition: LArBadFebMaskingTool.h:75
LArFebErrorSummary::SampleHeader
@ SampleHeader
Definition: LArFebErrorSummary.h:27
LArFebErrorSummary::ScaOutOfRange
@ ScaOutOfRange
Definition: LArFebErrorSummary.h:27
IdentifierHash
Definition: IdentifierHash.h:38
LArBadFebMaskingTool::m_badFebKey
SG::ReadCondHandleKey< LArBadFebCont > m_badFebKey
handle to get bad febs
Definition: LArBadFebMaskingTool.h:66
LArBadFebMaskingTool::m_onlineID
const LArOnlineID * m_onlineID
Definition: LArBadFebMaskingTool.h:97
LArBadFebMaskingTool::m_maskDspBlockSize
Gaudi::Property< bool > m_maskDspBlockSize
Definition: LArBadFebMaskingTool.h:82
CaloCell_Base_ID::LAREM
@ LAREM
Definition: CaloCell_Base_ID.h:46
LArBadFebMaskingTool::m_mask
std::atomic< int > m_mask
Number of Feb masked.
Definition: LArBadFebMaskingTool.h:105
LArFebErrorSummary::NumOfSamples
@ NumOfSamples
Definition: LArFebErrorSummary.h:28
readCCLHist.float
float
Definition: readCCLHist.py:83
LArBadFebMaskingTool::m_maskGainMismatch
Gaudi::Property< bool > m_maskGainMismatch
Definition: LArBadFebMaskingTool.h:78
LArBadFebMaskingTool::m_larFebErrorSummaryKey
SG::ReadHandleKey< LArFebErrorSummary > m_larFebErrorSummaryKey
Definition: LArBadFebMaskingTool.h:87
LArBadFebMaskingTool::m_evt
std::atomic< int > m_evt
Number of events processed.
Definition: LArBadFebMaskingTool.h:101
LArFebErrorSummary::MissingHeader
@ MissingHeader
Definition: LArFebErrorSummary.h:28
LArBadFebMaskingTool::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
handle to LAr cabling
Definition: LArBadFebMaskingTool.h:69
LArFebErrorSummary::GainMismatch
@ GainMismatch
Definition: LArFebErrorSummary.h:28
LArBadFebMaskingTool::m_errorToMask
uint16_t m_errorToMask
compute bit mask of errors to mask
Definition: LArBadFebMaskingTool.h:92
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20