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

#include <LArCellMaskingTool.h>

Inheritance diagram for LArCellMaskingTool:
Collaboration diagram for LArCellMaskingTool:

Public Member Functions

 LArCellMaskingTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize () override
virtual StatusCode process (CaloCellContainer *theCellContainer, const EventContext &ctx) const override
virtual StatusCode finalize () override

Private Member Functions

StatusCode fillIncludedCellsMap (const LArOnOffIdMapping *cabling) const

Private Attributes

const LArOnlineIDm_onlineID
const CaloCell_IDm_offlineID
SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
std::vector< std::string > m_rejLArChannels
std::bitset< 200000 > m_includedCellsMap ATLAS_THREAD_SAFE
std::atomic< bool > m_mapInitialized
IdentifierHash m_offlinehashMax
IdentifierHash m_onlinehashMax
std::mutex m_mutex

Detailed Description

Definition at line 21 of file LArCellMaskingTool.h.

Constructor & Destructor Documentation

◆ LArCellMaskingTool()

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

Definition at line 21 of file LArCellMaskingTool.cxx.

25 : base_class (type, name, parent),
26 m_onlineID(nullptr),
27 m_offlineID(nullptr),
28 m_mapInitialized (false)
29{
30 //List of strings to determine detector parts to be masked.
31 //Syntax: barrel_endcap pos_neg Feedthrough slot channel (integers separated by white space)
32 //Feedthrough, slot, and channel can be left out. In this case all channels belonging to this
33 //Subdetector, Feedthrough or FEB will be masked.
34 declareProperty ("RejectLArChannels",m_rejLArChannels);
35}
const LArOnlineID * m_onlineID
std::vector< std::string > m_rejLArChannels
const CaloCell_ID * m_offlineID
std::atomic< bool > m_mapInitialized

Member Function Documentation

◆ fillIncludedCellsMap()

StatusCode LArCellMaskingTool::fillIncludedCellsMap ( const LArOnOffIdMapping * cabling) const
private

Definition at line 68 of file LArCellMaskingTool.cxx.

69{
70 for (const std::string& s : m_rejLArChannels) {
71 std::stringstream is;
72 is << s;
73 bool haveFT=false, haveSlot=false, haveChannel=false;
74 int bec=0, pn=0, FT=0, slot=1,channel=0;
75 //Want at least subdetector (=pn & bec)
76 is >> bec >> pn;
77 if (is.bad()) {
78 ATH_MSG_ERROR ("jO problem: Malformed string [" << s << "]");
79 return StatusCode::FAILURE;
80 }
81
82 int FTmax;
83 if (bec==0)
84 FTmax=32; //Barrel
85 else
86 FTmax=24; //Endcap
87
88
89
90 if (!is.eof()) {//have FT
91 is >> FT;
92 haveFT=true;
93 //check good?
94 }
95 if (!is.eof()) {//have slot
96 is >> slot;
97 haveSlot=true;
98 }
99 if (!is.eof()) {//have channel
100 is >> channel;
101 haveChannel=true;
102 }
103
104 msg() << MSG::DEBUG << "Will exclude: bec="<< bec << " pn=" << pn;
105 if (haveFT) msg() << " FT=" << FT;
106 if (haveSlot) msg() << " slot=" << slot;
107 if (haveChannel) msg() << " channel=" << channel;
108 msg() << endmsg;
109
110 unsigned nChannels=0;
111 unsigned nDisconnected=0;
112 HWIdentifier chanId;
113 do { //loop over FTs (only once if FT is set
114 //Number of channels for this FT
115 int slotMax=15;
116 do {
117 int channelMax=128;
118 do { //loop over channels in slot
119 nChannels++;
120 try {
121 chanId=m_onlineID->channel_Id(bec,pn,FT,slot,channel);
122 if (cabling->isOnlineConnected(chanId)) {
123 const Identifier cellId=cabling->cnvToIdentifier(chanId);
124 const IdentifierHash cellhash=m_offlineID->calo_cell_hash(cellId);
125 m_includedCellsMap.reset(cellhash);
126 //std::cout << "Block channel: bec="<< bec << " pn=" << pn
127 // << " FT=" << FT <<":" << haveFT << " slot=" << slot << ":" << haveSlot << " channel=" << channel <<":" << haveChannel<< std::endl;
128 }
129 else
130 nDisconnected++;
131 }
132 catch (const LArOnlID_Exception&) {
133 }
134 catch(const LArID_Exception&) {
135 }
136 if (!haveChannel) channel++;
137 }while (!haveChannel && channel<channelMax);
138 if (!haveChannel) channel=0;
139 if (!haveSlot) slot++;
140 }while (!haveSlot && slot<slotMax);
141 if (!haveSlot) slot=0;
142 if (!haveFT) FT++;
143 } while (!haveFT && FT<FTmax);
144 ATH_MSG_DEBUG ("Channels selected for exclusion: "<< nChannels << ". Disconnected: " << nDisconnected);
145 }// end loop over strings
146 return StatusCode::SUCCESS;
147}
#define endmsg
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
unsigned int constexpr nChannels
Definition RPDUtils.h:23
MsgStream & msg
Definition testRead.cxx:32

◆ finalize()

StatusCode LArCellMaskingTool::finalize ( )
overridevirtual

Definition at line 184 of file LArCellMaskingTool.cxx.

184 {
185 return StatusCode::SUCCESS;
186}

◆ initialize()

StatusCode LArCellMaskingTool::initialize ( )
overridevirtual

Definition at line 45 of file LArCellMaskingTool.cxx.

46{
49 ATH_CHECK( m_cablingKey.initialize());
50
51 // Get hash ranges
52 m_offlinehashMax=m_offlineID->calo_cell_hash_max();
53 ATH_MSG_DEBUG ("CaloCell Hash Max: " << m_offlinehashMax);
54
55// m_onlinehashMax=m_onlineID->hash_max();
56// (*m_log) << MSG::DEBUG << "CaloCell Hash Max: " << m_offlinehashMax << endmsg;
57
58 //Fill the bit map
59 m_includedCellsMap.set(); // By default include all cells
60
61 ATH_MSG_INFO (" Will exclude " << m_includedCellsMap.size() - m_includedCellsMap.count() << " cells from CaloCellContainer");
62
63
64 return StatusCode::SUCCESS;
65
66}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
IdentifierHash m_offlinehashMax
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ process()

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

Definition at line 151 of file LArCellMaskingTool.cxx.

153{
154 if (! m_mapInitialized) {
155 // FIXME: Can we do this in start()?
156 std::lock_guard<std::mutex> lock (m_mutex);
157 // cppcheck-suppress identicalInnerCondition
158 if (!m_mapInitialized) {
159 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl (m_cablingKey, ctx);
160 const LArOnOffIdMapping* cabling=*cablingHdl;
162 m_mapInitialized=true;
163 }
164 }
165
166 //Build bitmap to keep track which cells have been added to reducedCellContainer;
167 unsigned cnt=0;
168 CaloCellContainer::iterator it=theCont->begin();
169 while(it!=theCont->end()) {
170 const IdentifierHash cellHash=(*it)->caloDDE()->calo_hash();
171 if (!m_includedCellsMap.test(cellHash)) {
172 //Possible optimization: check how many consecutive cells to be deleted and erase a range
173 it=theCont->erase(it);
174 cnt++;
175 }
176 else
177 ++it;
178 }
179 ATH_MSG_DEBUG ("Removed " << cnt << " Cells from container");
180 return StatusCode::SUCCESS ;
181}
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
StatusCode fillIncludedCellsMap(const LArOnOffIdMapping *cabling) const

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::bitset<200000> m_includedCellsMap LArCellMaskingTool::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 48 of file LArCellMaskingTool.h.

◆ m_cablingKey

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

Definition at line 44 of file LArCellMaskingTool.h.

44{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};

◆ m_mapInitialized

std::atomic<bool> LArCellMaskingTool::m_mapInitialized
mutableprivate

Definition at line 50 of file LArCellMaskingTool.h.

◆ m_mutex

std::mutex LArCellMaskingTool::m_mutex
mutableprivate

Definition at line 53 of file LArCellMaskingTool.h.

◆ m_offlinehashMax

IdentifierHash LArCellMaskingTool::m_offlinehashMax
private

Definition at line 51 of file LArCellMaskingTool.h.

◆ m_offlineID

const CaloCell_ID* LArCellMaskingTool::m_offlineID
private

Definition at line 43 of file LArCellMaskingTool.h.

◆ m_onlinehashMax

IdentifierHash LArCellMaskingTool::m_onlinehashMax
private

Definition at line 52 of file LArCellMaskingTool.h.

◆ m_onlineID

const LArOnlineID* LArCellMaskingTool::m_onlineID
private

Definition at line 42 of file LArCellMaskingTool.h.

◆ m_rejLArChannels

std::vector<std::string> LArCellMaskingTool::m_rejLArChannels
private

Definition at line 47 of file LArCellMaskingTool.h.


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