27#ifndef XAOD_STANDALONE
37 return StatusCode::FAILURE;
40 if (
m_isPHYSLITE && photonkey.find(
"AnalysisPhotons")==std::string::npos){
41 ATH_MSG_ERROR(
"You are running on PHYSLITE derivation. Please change the Photons container to 'AnalysisPhotons'");
42 return StatusCode::FAILURE;
47 if (containerToBeCopied !=
nullptr) {
48 photons = containerToBeCopied;
54 copy = shallowcopy.first;
55 copyaux = shallowcopy.second;
58 ATH_MSG_WARNING(
"Failed to set original object links on " << photonkey);
61 ATH_MSG_DEBUG(
"Not retrieving photon collecton, using existing one provided by user");
65 for (
const auto photon : *copy) {
74 return StatusCode::SUCCESS;
80 ATH_MSG_VERBOSE(
"Starting FillPhoton on ph with pre-calibration pt=" << input.pt() );
82 if ( !input.caloCluster() ) {
83 ATH_MSG_WARNING(
"FillPhoton: no caloCluster found: " << input.caloCluster() );
84 return StatusCode::SUCCESS;
93 ATH_MSG_INFO(
"PHOTON cl eta: " << input.caloCluster()->eta() );
94 ATH_MSG_INFO(
"PHOTON cl phi: " << input.caloCluster()->phi() );
95 ATH_MSG_INFO(
"PHOTON cl e: " << input.caloCluster()->e() );
98 ATH_MSG_INFO(
"PHOTON deadHVTools: " << pass_deadHVTool );
106 if (!pass_deadHVTool)
return StatusCode::SUCCESS;
110 return StatusCode::SUCCESS;
113 if (std::abs(input.caloCluster()->etaBE(2)) >= etacut)
return StatusCode::SUCCESS;
116 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
117 return StatusCode::SUCCESS;
122 ATH_MSG_ERROR(
"FillPhoton: EgammaCalibTool applyCorrection failed");
125 ATH_MSG_ERROR(
"FillPhoton: IsolationCorrectionTool applyCorrection failed");
129 if (input.pt() < ptcut)
return StatusCode::SUCCESS;
133 return StatusCode::SUCCESS;
136 bool passPhCleaning =
false;
144 if (!passPhCleaning)
return StatusCode::SUCCESS;
147 bool passBaseID =
false;
153 if (!passBaseID)
return StatusCode::SUCCESS;
163 return StatusCode::SUCCESS;
175 if ( input.pt() < ptcut )
return false;
177 if(std::abs(input.caloCluster()->etaBE(2)) >
m_photonEta )
return false;
179 else if ( std::abs(input.caloCluster()->etaBE(2)) > etacut )
return false;
182 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
195 ATH_MSG_VERBOSE (
"DFCommonPhotonsIsEMxxx variables are not found. Calculating the ID from Photon ID tool..");
198 if ( !passID )
return false;
232 double sf_trigger = 1.;
253 if (ret != StatusCode::SUCCESS) {
254 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.
name() );
258 if (ret != StatusCode::SUCCESS) {
259 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.
name() );
263 if (ret != StatusCode::SUCCESS) {
264 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.
name() );
289 double sf_trigger = 1.;
299 if (ret != StatusCode::SUCCESS) {
300 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool back to default.");
304 if (ret != StatusCode::SUCCESS) {
305 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.
name() );
309 if (ret != StatusCode::SUCCESS) {
310 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.
name() );
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
std::pair< std::vector< unsigned int >, bool > res
ServiceHandle< StoreGateSvc > & evtStore()
Return value from object correction CP tools.
@ OutOfValidityRange
Input object is out of validity range.
@ Ok
The correction was done successfully.
Class to wrap a set of SystematicVariations.
std::string name() const
returns: the systematics joined into a single string.
double m_photonBaselinePt
asg::AnaToolHandle< CP::IIsolationSelectionTool > m_isoBaselineTool
asg::AnaToolHandle< IAsgPhotonIsEMSelector > m_photonSelIsEM
SG::ConstAccessor< char > m_acc_photonId
asg::AnaToolHandle< CP::IIsolationSelectionTool > m_isoTool
bool m_photonBaselineCrackVeto
std::string m_photonBaselineIso_WP
StatusCode GetPhotons(xAOD::PhotonContainer *©, xAOD::ShallowAuxContainer *©aux, const bool recordSG=true, const std::string &photonkey="Photons", const xAOD::PhotonContainer *containerToBeCopied=nullptr) override final
double m_photonBaselineEta
SG::ConstAccessor< char > m_acc_photonIdBaseline
asg::AnaToolHandle< IAsgDeadHVCellRemovalTool > m_deadHVTool
double GetSignalPhotonSF(const xAOD::Photon &ph, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const override final
CP::SystematicSet m_currentSyst
std::string m_photonIso_WP
asg::AnaToolHandle< IEGammaAmbiguityTool > m_egammaAmbiguityTool
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonIsolationSFTool
double GetTotalPhotonSFsys(const xAOD::PhotonContainer &photons, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) override final
asg::AnaToolHandle< CP::IIsolationCorrectionTool > m_isoCorrTool
StatusCode FillPhoton(xAOD::Photon &input, const float ptcut, const float etacut) override final
bool IsSignalPhoton(const xAOD::Photon &input, const float ptcut, const float etacut=DUMMYDEF) const override final
asg::AnaToolHandle< IAsgPhotonIsEMSelector > m_photonSelIsEMBaseline
double GetTotalPhotonSF(const xAOD::PhotonContainer &photons, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const override final
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonTriggerSFTool
double GetSignalPhotonSFsys(const xAOD::Photon &ph, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) override final
asg::AnaToolHandle< CP::IEgammaCalibrationAndSmearingTool > m_egammaCalibTool
Combined electron collection.
asg::AnaToolHandle< IAsgPhotonEfficiencyCorrectionTool > m_photonEfficiencySFTool
Class creating a shallow copy of an existing auxiliary container.
bool passOQqualityDelayed(const xAOD::Photon &ph)
Helpers to ease the implementation of the pass Quality requirements.
bool passOQquality(const xAOD::Photon &ph)
Helper to ease the implemmantation of the pass Quality requirements.
static const SG::Decorator< double > dec_effscalefact("effscalefact")
static const SG::Decorator< char > dec_baseline("baseline")
static const SG::ConstAccessor< char > acc_passPhCleaning("DFCommonPhotonsCleaning")
static const SG::Decorator< unsigned > dec_isEM("isEM")
static const SG::ConstAccessor< char > acc_passPhCleaningNoTime("DFCommonPhotonsCleaningNoTime")
static const SG::ConstAccessor< char > acc_signal("signal")
static const SG::ConstAccessor< char > acc_baseline("baseline")
static const double DUMMYDEF
static const SG::ConstAccessor< char > acc_passOR("passOR")
static const SG::ConstAccessor< char > acc_isol("isol")
static const SG::Decorator< char > dec_isol("isol")
static const SG::Decorator< char > dec_signal("signal")
static const SG::Decorator< char > dec_selected("selected")
const uint16_t AuthorPhoton
Object Reconstructed by standard cluster-based algorithm.
const uint32_t BADCLUSPHOTON
const uint16_t AuthorAmbiguous
Object Reconstructed by standard cluster-based algorithm.
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.
bool setOriginalObjectLink(const IParticle &original, IParticle ©)
This function should be used by CP tools when they make a deep copy of an object in their correctedCo...
Photon_v1 Photon
Definition of the current "egamma version".
setBGCode setTAP setLVL2ErrorBits bool