diff --git a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx index 5cd081b1dc0c0431927f67dac2a918d48cccee8b..8759af553e9f044532deac0d0c8740b2589ac0b4 100644 --- a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx +++ b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx @@ -64,20 +64,32 @@ StatusCode egammaMVASvc::getEnergy(const xAOD::CaloCluster& cluster, ATH_MSG_FATAL("Trying to calibrate an electron, but disabled"); return StatusCode::FAILURE; } - } else if (xAOD::EgammaHelpers::isConvertedPhoton(&eg) && - xAOD::EgammaHelpers::conversionRadius(static_cast<const xAOD::Photon*>(&eg)) < m_maxConvR) { - if (!m_mvaConvertedPhoton.empty()) { - mvaE = m_mvaConvertedPhoton->getEnergy(cluster, &eg); - } else { - ATH_MSG_FATAL("Trying to calibrate a converted photon, but disabled"); - return StatusCode::FAILURE; - } } else if (xAOD::EgammaHelpers::isPhoton(&eg)) { - if (!m_mvaUnconvertedPhoton.empty()) { - mvaE = m_mvaUnconvertedPhoton->getEnergy(cluster, &eg); + const xAOD::Photon* ph = static_cast<const xAOD::Photon*>(&eg); + bool isConvCalib = xAOD::EgammaHelpers::isConvertedPhoton(ph) && + xAOD::EgammaHelpers::conversionRadius(ph) < m_maxConvR; + if (m_removeTRTConvBarrel) { + // special case in Run3 to avoid TRT converted photons in the barrel + using enum xAOD::EgammaParameters::ConversionType; + const xAOD::EgammaParameters::ConversionType conversionType = xAOD::EgammaHelpers::conversionType(ph); + const bool isTRTConv = (conversionType == singleTRT) || (conversionType == doubleTRT); // 2 or 4 + const bool isTRTEndcap = std::abs(ph->eta()) > 0.8; + isConvCalib = isConvCalib && (isTRTEndcap || !isTRTConv); + } + if (isConvCalib) { + if (!m_mvaConvertedPhoton.empty()) { + mvaE = m_mvaConvertedPhoton->getEnergy(cluster, &eg); + } else { + ATH_MSG_FATAL("Trying to calibrate a converted photon, but disabled"); + return StatusCode::FAILURE; + } } else { - ATH_MSG_FATAL("Trying to calibrate an unconverted photon, but disabled"); - return StatusCode::FAILURE; + if (!m_mvaUnconvertedPhoton.empty()) { + mvaE = m_mvaUnconvertedPhoton->getEnergy(cluster, &eg); + } else { + ATH_MSG_FATAL("Trying to calibrate an unconverted photon, but disabled"); + return StatusCode::FAILURE; + } } } else { ATH_MSG_FATAL("Egamma object is of unsupported type"); diff --git a/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h b/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h index a3abdf244813acc7ee1350b9d27a528ea46d3ef5..323fd516bd670e357c828c21bfdb4aef48b118f1 100644 --- a/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h +++ b/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h @@ -68,6 +68,10 @@ private: "MaxConvRadius", 800.0, "The maximum conversion radius for a photon to be considered converted"}; + Gaudi::Property<bool> m_removeTRTConvBarrel {this, + "RemoveTRTConvBarrel", false, + "Remove TRT converted photons in the barrel"}; + }; #endif