diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/EnergyDepositionTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/EnergyDepositionTool.cxx index 27054311cebfd3ec4372e50795f1baab9e6cc26f..5a2831ae61e918e223a4a95ede04ac8ddaf1686f 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/EnergyDepositionTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/EnergyDepositionTool.cxx @@ -207,7 +207,7 @@ StatusCode EnergyDepositionTool::depositEnergy(const TimedHitPtr<SiHit>& phit, c // -1 ParticleType means we are unable to run Bichel simulation for this case int ParticleType = -1; - if (m_doBichsel && !(Module.isDBM())) { + if (m_doBichsel and !(Module.isDBM()) and genPart) { ParticleType = delta_hit ? (m_doDeltaRay ? 4 : -1) : trfPDG(genPart->pdg_id()); @@ -586,14 +586,18 @@ double EnergyDepositionTool::GetColE(std::pair<int, int> indices_BetaGammaLog10, if (indices_IntXLog10_x2.second < 0) { return -1; } - - double y21 = iData.Array_BetaGammaLog10_IntXLog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.first]; - double y22 = iData.Array_BetaGammaLog10_IntXLog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.second]; + + double y21 = iData.Array_BetaGammaLog10_IntXLog10.at(indices_BetaGammaLog10.second).at(indices_IntXLog10_x2.first); + double y22 = iData.Array_BetaGammaLog10_IntXLog10.at(indices_BetaGammaLog10.second).at(indices_IntXLog10_x2.second); + const auto diff = y22 - y21; + if (diff<1e-300){ + return -1; + } double Est_x2 = ((y22 - IntXLog10) * iData.Array_BetaGammaLog10_ColELog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.first] + (IntXLog10 - y21) * - iData.Array_BetaGammaLog10_ColELog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.second]) / (y22 - y21); + iData.Array_BetaGammaLog10_ColELog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.second]) / diff; double Est = std::clamp(Est_x2,-300.,300.); return std::pow(10., Est); } @@ -617,18 +621,23 @@ double EnergyDepositionTool::GetUpperBound(std::pair<int, int> indices_BetaGamma if (indices_BetaGammaLog10.second < 0) { return -1; } - double BetaGammaLog10_1 = iData.Array_BetaGammaLog10[indices_BetaGammaLog10.first]; - double BetaGammaLog10_2 = iData.Array_BetaGammaLog10[indices_BetaGammaLog10.second]; + double BetaGammaLog10_1 = iData.Array_BetaGammaLog10.at(indices_BetaGammaLog10.first); + double BetaGammaLog10_2 = iData.Array_BetaGammaLog10.at(indices_BetaGammaLog10.second); // obtain estimation - double Est_1 = iData.Array_BetaGammaLog10_UpperBoundIntXLog10[indices_BetaGammaLog10.first]; - double Est_2 = iData.Array_BetaGammaLog10_UpperBoundIntXLog10[indices_BetaGammaLog10.second]; + double Est_1 = iData.Array_BetaGammaLog10_UpperBoundIntXLog10.at(indices_BetaGammaLog10.first); + double Est_2 = iData.Array_BetaGammaLog10_UpperBoundIntXLog10.at(indices_BetaGammaLog10.second); // final estimation - double Est = ((BetaGammaLog10_2 - BetaGammaLog10) * Est_1 + (BetaGammaLog10 - BetaGammaLog10_1) * Est_2) / - (BetaGammaLog10_2 - BetaGammaLog10_1); + const auto diff=BetaGammaLog10_2 - BetaGammaLog10_1; + if (diff<1e-300){ + return -1; + } + double Est = ((BetaGammaLog10_2 - BetaGammaLog10) * Est_1 + (BetaGammaLog10 - BetaGammaLog10_1) * Est_2) /diff; Est = std::clamp(Est,-300.,300.); return std::pow(10., Est); + + } //========================================== diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx index 773ad6c5a6c586c80b2ac4a36a73dff0ac232217..a2705e349131284685c0b320391d8509c88f6e4d 100644 --- a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx +++ b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx @@ -87,7 +87,7 @@ StatusCode PixelDigitizationTool::processAllSubEvents(const EventContext& ctx) { ATH_CHECK(m_mergeSvc->retrieveSubEvtsData(m_inputObjectName, hitCollList, numberOfSiHits)); m_timedHits->reserve(numberOfSiHits); // Now merge all collections into one - for (TimedHitCollList::iterator iColl = hitCollList.begin(); iColl != hitCollList.end(); iColl++) { + for (TimedHitCollList::iterator iColl = hitCollList.begin(); iColl != hitCollList.end(); ++iColl) { // Decide if this event will be processed depending on HardScatterSplittingMode if (m_HardScatterSplittingMode == 2 && !m_HardScatterSplittingSkipper) { m_HardScatterSplittingSkipper = true; @@ -169,7 +169,7 @@ StatusCode PixelDigitizationTool::digitizeEvent(const EventContext& ctx) { /////////////////////////////////////////////////////////// // **** Loop over the hits and created charged diodes **** /////////////////////////////////////////////////////////// - for (TimedHitCollection<SiHit>::const_iterator phit = firstHit; phit != lastHit; phit++) { + for (TimedHitCollection<SiHit>::const_iterator phit = firstHit; phit != lastHit; ++phit) { //skip hits which are more than 10us away if (fabs((*phit)->meanTime()) < 10000.0 * CLHEP::ns) { ATH_MSG_DEBUG("HASH = " << @@ -359,7 +359,7 @@ StatusCode PixelDigitizationTool::mergeEvent(const EventContext& ctx) { // Digitize hits ATH_CHECK(digitizeEvent(ctx)); - for (std::vector<SiHitCollection*>::iterator it = m_hitCollPtrs.begin(); it != m_hitCollPtrs.end(); it++) { + for (std::vector<SiHitCollection*>::iterator it = m_hitCollPtrs.begin(); it != m_hitCollPtrs.end(); ++it) { (*it)->Clear(); delete(*it); } @@ -401,7 +401,7 @@ StatusCode PixelDigitizationTool::processBunchXing(int bunchXing, SubEventIterat TimedHitCollList::iterator iColl(hitCollList.begin()); TimedHitCollList::iterator endColl(hitCollList.end()); - for (; iColl != endColl; iColl++) { + for (; iColl != endColl; ++iColl) { SiHitCollection* hitCollPtr = new SiHitCollection(*iColl->second); PileUpTimeEventIndex timeIndex(iColl->first); ATH_MSG_DEBUG("SiHitCollection found with " << hitCollPtr->size() << " hits");