142 unsigned int myCellHashOffset = myHashMin;
145 std::map<Identifier,CaloCell*> cellMap;
146 std::map<Identifier,float> energyMap;
147 for (itrCell=itrCellBeg;itrCell!=itrCellEnd;++itrCell) {
149 cellMap.insert(std::pair<Identifier,CaloCell*>(theCell->
ID(),theCell));
150 energyMap.insert(std::pair<Identifier,float>(theCell->
ID(),theCell->
energy()));
153 for (itrCell=itrCellBeg;itrCell!=itrCellEnd;++itrCell) {
161 std::map<Identifier,float>::iterator cellItEng = energyMap.find(theCell->
ID());
162 if (cellItEng==energyMap.end()) {
164 return StatusCode::FAILURE;
166 double e = (*cellItEng).second;
169 std::vector<IdentifierHash> theNeighbors;
177 ATH_MSG_DEBUG (
"N1 theNeighbors.size() = " << theNeighbors.size());
180 std::map<Identifier,CaloCell*>::iterator cellIt = cellMap.find(myId);
181 if (cellIt==cellMap.end()) {
182 ATH_MSG_ERROR (
"neighbor CaloCell object not found in cellMap");
183 return StatusCode::FAILURE;
185 CaloCell * theCellN1 = (*cellIt).second;
187 ATH_MSG_ERROR (
"neighbor CaloCell object not found in cellMap");
188 return StatusCode::FAILURE;
190 cellItEng = energyMap.find(theCellN1->
ID());
191 if (cellItEng==energyMap.end()) {
193 return StatusCode::FAILURE;
195 double eN1 = (*cellItEng).second;
198 int EMEC3neighbors = 0;
199 myHashId =
m_calo_id->subcalo_cell_hash(theCellN1->
ID(),otherSubDet);
202 ATH_MSG_DEBUG (
"N2 theNeighbors.size() = " << theNeighbors.size() );
205 if (theNeighbors.size()>0) {
206 nId = theNeighbors.at(0)-myCellHashOffset;
208 cellIt = cellMap.find(myId);
209 if (cellIt!=cellMap.end()) {
210 theCellN2 = (*cellIt).second;
211 cellItEng = energyMap.find(theCellN2->
ID());
212 if (cellItEng==energyMap.end()) {
214 return StatusCode::FAILURE;
216 eN2 = (*cellItEng).second;
222 ATH_MSG_DEBUG (
"N3 theNeighbors.size() = " << theNeighbors.size() );
225 if (theNeighbors.size()>0) {
226 nId = theNeighbors.at(0)-myCellHashOffset;
228 cellIt = cellMap.find(myId);
229 if (cellIt!=cellMap.end()) {
230 theCellN3 = (*cellIt).second;
233 return StatusCode::FAILURE;
235 cellItEng = energyMap.find(theCellN3->
ID());
236 if (cellItEng==energyMap.end()) {
238 return StatusCode::FAILURE;
240 eN3 = (*cellItEng).second;
246 int EMEC2neighbors = 0;
247 myHashId =
m_calo_id->subcalo_cell_hash(theCell->
ID(),otherSubDet);
250 ATH_MSG_DEBUG (
"N4 theNeighbors.size() = " << theNeighbors.size() );
253 if (theNeighbors.size()>0) {
254 nId = theNeighbors.at(0)-myCellHashOffset;
256 cellIt = cellMap.find(myId);
257 if (cellIt!=cellMap.end()) {
258 theCellN4 = (*cellIt).second;
261 return StatusCode::FAILURE;
263 cellItEng = energyMap.find(theCellN4->
ID());
264 if (cellItEng==energyMap.end()) {
266 return StatusCode::FAILURE;
268 eN4 = (*cellItEng).second;
274 ATH_MSG_DEBUG (
"N5 theNeighbors.size() = " << theNeighbors.size() );
277 if (theNeighbors.size()>0) {
278 nId = theNeighbors.at(0)-myCellHashOffset;
280 cellIt = cellMap.find(myId);
281 if (cellIt!=cellMap.end()) {
282 theCellN5 = (*cellIt).second;
283 cellItEng = energyMap.find(theCellN5->
ID());
284 if (cellItEng==energyMap.end()) {
286 return StatusCode::FAILURE;
288 eN5 = (*cellItEng).second;
296 double rescaled_eN1 = 0;
298 double rescaled_eN2 = 0.;
300 double rescaled_eN3 = 0.;
322 ATH_MSG_DEBUG (
"EMEC2 cell : energy before = " << e <<
" | energy after rescaling = " << rescaled_e );
328 <<
" | " << (theCell->
energy()-e) );
329 ATH_MSG_DEBUG (
"EMEC3 cell (N1): energy before = " << eN1 <<
" | energy after rescaling = " << rescaled_eN1 );
331 <<
" | " << (theCellN1->
energy()-eN1) );
333 ATH_MSG_DEBUG (
"EMEC3 cell (N2): energy before = " << eN2 <<
" | energy after rescaling = " << rescaled_eN2 );
335 <<
" | " << (theCellN2->
energy()-eN2) );
338 ATH_MSG_DEBUG (
"EMEC3 cell (N3): energy before = " << eN3 <<
" | energy after rescaling = " << rescaled_eN3 );
340 <<
" | " << (theCellN3->
energy()-eN3) );
355 if (theCellN1) theCellN1->
setEnergy(rescaled_eN1);
356 if (theCellN2) theCellN2->
setEnergy(rescaled_eN2);
357 if (theCellN3) theCellN3->
setEnergy(rescaled_eN3);
363 return StatusCode::SUCCESS;