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.get();
55 copyaux = shallowcopy.second.get();
58 ATH_MSG_WARNING(
"Failed to set original object links on " << photonkey);
65 return StatusCode::FAILURE;
68 ATH_MSG_DEBUG(
"Not retrieving photon collecton, using existing one provided by user");
72 for (
const auto photon : *copy) {
77 return StatusCode::SUCCESS;
83 ATH_MSG_VERBOSE(
"Starting FillPhoton on ph with pre-calibration pt=" << input.pt() );
85 if ( !input.caloCluster() ) {
86 ATH_MSG_WARNING(
"FillPhoton: no caloCluster found: " << input.caloCluster() );
87 return StatusCode::SUCCESS;
96 ATH_MSG_INFO(
"PHOTON cl eta: " << input.caloCluster()->eta() );
97 ATH_MSG_INFO(
"PHOTON cl phi: " << input.caloCluster()->phi() );
98 ATH_MSG_INFO(
"PHOTON cl e: " << input.caloCluster()->e() );
101 ATH_MSG_INFO(
"PHOTON deadHVTools: " << pass_deadHVTool );
109 if (!pass_deadHVTool)
return StatusCode::SUCCESS;
113 return StatusCode::SUCCESS;
116 if (std::abs(input.caloCluster()->etaBE(2)) >= etacut)
return StatusCode::SUCCESS;
119 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
120 return StatusCode::SUCCESS;
125 ATH_MSG_ERROR(
"FillPhoton: EgammaCalibTool applyCorrection failed");
128 ATH_MSG_ERROR(
"FillPhoton: IsolationCorrectionTool applyCorrection failed");
132 if (input.pt() < ptcut)
return StatusCode::SUCCESS;
136 return StatusCode::SUCCESS;
139 bool passPhCleaning =
false;
147 if (!passPhCleaning)
return StatusCode::SUCCESS;
150 bool passBaseID =
false;
156 if (!passBaseID)
return StatusCode::SUCCESS;
166 return StatusCode::SUCCESS;
178 if ( input.pt() < ptcut )
return false;
180 if(std::abs(input.caloCluster()->etaBE(2)) >
m_photonEta )
return false;
182 else if ( std::abs(input.caloCluster()->etaBE(2)) > etacut )
return false;
185 if ( std::abs( input.caloCluster()->etaBE(2) ) >1.37 && std::abs( input.caloCluster()->etaBE(2) ) <1.52) {
198 ATH_MSG_VERBOSE (
"DFCommonPhotonsIsEMxxx variables are not found. Calculating the ID from Photon ID tool..");
201 if ( !passID )
return false;
235 double sf_trigger = 1.;
256 if (ret != StatusCode::SUCCESS) {
257 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (reco) for systematic var. " << systConfig.
name() );
261 if (ret != StatusCode::SUCCESS) {
262 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.
name() );
266 if (ret != StatusCode::SUCCESS) {
267 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (trigger) for systematic var. " << systConfig.
name() );
292 double sf_trigger = 1.;
302 if (ret != StatusCode::SUCCESS) {
303 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool back to default.");
307 if (ret != StatusCode::SUCCESS) {
308 ATH_MSG_ERROR(
"Cannot configure AsgPhotonEfficiencyCorrectionTool (iso) for systematic var. " << systConfig.
name() );
312 if (ret != StatusCode::SUCCESS) {
313 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.
typename ShallowCopyResult< T >::type ShallowCopyResult_t
Return type of xAOD::shallowCopy.
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
ShallowCopyResult_t< T > shallowCopy(const T &cont, const EventContext &ctx)
Create a shallow copy of an existing 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