From d1d29746456da90e9983a8f9eec10edda68062eb Mon Sep 17 00:00:00 2001
From: Ryan Mackenzie White <ryan.white@cern.ch>
Date: Wed, 19 Apr 2017 23:31:26 +0200
Subject: [PATCH] fix for readonlyholders and missing containers

---
 .../Root/TrigEgammaAnalysisBaseTool.cxx         | 17 ++++++++++++++---
 .../Root/TrigEgammaNavAnalysisTool.cxx          | 15 +++++++++++++++
 .../Root/TrigEgammaNavBaseTool.cxx              |  1 +
 .../Root/TrigEgammaNavTPAnalysisTool.cxx        | 13 +++++++++++++
 .../Root/TrigEgammaNavTPBaseTool.cxx            |  1 +
 .../Root/TrigEgammaPlotTool.cxx                 |  4 ++--
 .../Root/TrigEgammaResolutionTool.cxx           | 15 +++++++++------
 .../ITrigEgammaAnalysisBaseTool.h               |  2 ++
 .../TrigEgammaAnalysisBaseTool.h                | 17 ++++++++++++++---
 .../TrigEgammaNavBaseTool.h                     |  2 ++
 .../TrigEgammaNavTPBaseTool.h                   |  2 ++
 11 files changed, 75 insertions(+), 14 deletions(-)

diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
index c42b38fa21ef..f8ec0a6d8528 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx
@@ -85,6 +85,8 @@ TrigEgammaAnalysisBaseTool( const std::string& myname )
     m_nPVertex=0;
     m_offmu=0.;
     m_onlmu=0.;
+    m_sgContainsRnn=false;
+    m_sgContainsTrigPhoton=false;
 }
 
 void TrigEgammaAnalysisBaseTool::updateDetail(Property& /*p*/){
@@ -540,9 +542,16 @@ void TrigEgammaAnalysisBaseTool::setAccept(const HLT::TriggerElement *te,const T
     
     passedL1Calo = ancestorPassed<xAOD::EmTauRoI>(te);
     bool hasRnn = false;
-    if(getFeature<xAOD::TrigRNNOutput>(te)){
-        hasRnn=true;
+    
+    ATH_MSG_DEBUG("Rnn container " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer " << getSGContainsTrigPhoton());
+    
+    if(getSGContainsRnn()){
+        if(getFeature<xAOD::TrigRNNOutput>(te)){
+            hasRnn=true;
+        }
     }
+    
 
     if(!info.trigL1){ // HLT item get full decision
         ATH_MSG_DEBUG("Check for active features: TrigEMCluster,CaloClusterContainer");
@@ -563,7 +572,9 @@ void TrigEgammaAnalysisBaseTool::setAccept(const HLT::TriggerElement *te,const T
         }
         else if(info.trigType == "photon"){
             ATH_MSG_DEBUG("Check for active features: TrigPhoton, PhotonContainer");
-            passedL2=ancestorPassed<xAOD::TrigPhotonContainer>(te);
+            if(getSGContainsTrigPhoton()){
+                passedL2=ancestorPassed<xAOD::TrigPhotonContainer>(te);
+            }
             passedEF = ancestorPassed<xAOD::PhotonContainer>(te);
             passedEFTrk=true;// Assume true for photons
         }
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
index e645c30bb652..f908a9d6ecb3 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavAnalysisTool.cxx
@@ -79,6 +79,21 @@ StatusCode TrigEgammaNavAnalysisTool::childExecute(){
         ATH_MSG_DEBUG("Fails EventWise selection");
         return StatusCode::SUCCESS; //return nicely
     }
+    // Check for Rnn container in SG
+    if(m_storeGate->contains<xAOD::TrigRNNOutputContainer>("HLT_xAOD__TrigRNNOutputContainer_TrigRingerNeuralFex")){
+        ATH_MSG_DEBUG("Rnn container in SG "); 
+        setSGContainsRnn(true);
+    }
+    if(m_storeGate->contains<xAOD::TrigPhotonContainer>("HLT_xAOD__TrigPhotonContainer_L2PhotonFex")){
+        ATH_MSG_DEBUG("TrigPhotonContainer in SG ");
+        setSGContainsTrigPhoton(true);
+    }
+    ATH_MSG_DEBUG("Rnn container in SG " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer in SG " << getSGContainsTrigPhoton());
+    for( const auto& tool : m_tools) {
+        tool->setSGContainsRnn(getSGContainsRnn());
+        tool->setSGContainsTrigPhoton(getSGContainsTrigPhoton());
+    }
 
     // Check HLTResult
     if(tdt()->ExperimentalAndExpertMethods()->isHLTTruncated()){
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
index bd885310cefb..725ec003b547 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx
@@ -136,6 +136,7 @@ bool TrigEgammaNavBaseTool::EventWiseSelection( ){
     //Calculate number of vertex 
     TrigEgammaAnalysisBaseTool::calculatePileupPrimaryVertex();   
 
+
     return true; 
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
index 22ad1dad5f18..b1b98a084d9d 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPAnalysisTool.cxx
@@ -136,6 +136,19 @@ StatusCode TrigEgammaNavTPAnalysisTool::childExecute()
         ATH_MSG_DEBUG("Fails EventWise selection");
         return StatusCode::SUCCESS;
     }
+    // Check for Rnn container in SG
+    if(m_storeGate->contains<xAOD::TrigRNNOutputContainer>("HLT_xAOD__TrigRNNOutputContainer_TrigRingerNeuralFex")){
+        setSGContainsRnn(true);
+    }
+    if(m_storeGate->contains<xAOD::TrigPhotonContainer>("HLT_xAOD__TrigPhotonContainer_L2PhotonFex")){
+        setSGContainsTrigPhoton(true);
+    }
+    ATH_MSG_DEBUG("Rnn container in SG " << getSGContainsRnn());
+    ATH_MSG_DEBUG("TrigPhotonContainer in SG " << getSGContainsTrigPhoton());
+    for( const auto& tool : m_tools) {
+        tool->setSGContainsRnn(getSGContainsRnn());
+        tool->setSGContainsTrigPhoton(getSGContainsTrigPhoton());
+    }
     // Event Wise Selection (independent of the required signatures)
     hist1(m_anatype+"_CutCounter")->Fill("EventWise",1);
     // Select TP Pairs
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
index 097d92f4d3b0..8851771df28c 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx
@@ -175,6 +175,7 @@ bool TrigEgammaNavTPBaseTool::EventWiseSelection(){
     if ( !MinimalTriggerRequirement() ) return false;
     hist1(m_anatype+"_CutCounter")->Fill("PassTrigger",1);
 
+    
     return true;
 }
 
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
index a51655d48417..74ef030332ad 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaPlotTool.cxx
@@ -202,8 +202,8 @@ void TrigEgammaPlotTool::setBinning(){
     m_defaultEtabins.insert(m_defaultEtabins.end(), &default_eta_bins[0], &default_eta_bins[m_ndefaultEtabins+1]);
     m_coarseEtbins.insert(m_coarseEtbins.end(), &coarse_et_bins[0], &coarse_et_bins[m_ncoarseEtbins+1]);
     m_coarseEtabins.insert(m_coarseEtabins.end(), &coarse_eta_bins[0], &coarse_eta_bins[m_ncoarseEtabins+1]);
-    m_minBin_ringer.insert(m_minBin_ringer.end(), &minBin_ringer[0], &minBin_ringer[100+1]);
-    m_maxBin_ringer.insert(m_maxBin_ringer.end(), &maxBin_ringer[0], &maxBin_ringer[100+1]);
+    m_minBin_ringer.insert(m_minBin_ringer.end(), &minBin_ringer[0], &minBin_ringer[100]);
+    m_maxBin_ringer.insert(m_maxBin_ringer.end(), &maxBin_ringer[0], &maxBin_ringer[100]);
 }
 
 StatusCode TrigEgammaPlotTool::book(std::map<std::string,TrigInfo> trigInfo){
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
index 5c88a8fb88f1..d49c150f44fb 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaResolutionTool.cxx
@@ -144,14 +144,17 @@ void TrigEgammaResolutionTool::resolutionElectron(const std::string basePath,std
 
 void TrigEgammaResolutionTool::resolutionL2Photon(const std::string dir,std::pair< const xAOD::Egamma*,const HLT::TriggerElement*> pairObj){
     cd(dir);
+    ATH_MSG_DEBUG("L2 Photon Resolution");
     float dRmax = 100;
     const xAOD::TrigPhoton *phL2 = nullptr;
-    if(pairObj.second){
-        if(ancestorPassed<xAOD::TrigPhotonContainer>(pairObj.second))
-            phL2=closestObject<xAOD::TrigPhoton,xAOD::TrigPhotonContainer>(pairObj,dRmax);
-        if(phL2){    
-            if(dRmax < 0.05){
-                //Do something here
+    if(getSGContainsTrigPhoton()){
+        if(pairObj.second){
+            if(ancestorPassed<xAOD::TrigPhotonContainer>(pairObj.second))
+                phL2=closestObject<xAOD::TrigPhoton,xAOD::TrigPhotonContainer>(pairObj,dRmax);
+            if(phL2){    
+                if(dRmax < 0.05){
+                    //Do something here
+                }
             }
         }
     }
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
index 366d3441c265..2b201ce53549 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/ITrigEgammaAnalysisBaseTool.h
@@ -42,6 +42,8 @@ public:
   virtual void setEmulationTool(ToolHandle<Trig::ITrigEgammaEmulationTool>)=0;
   virtual void setAvgMu(const float, const float)=0;
   virtual void setPVertex(const float, const float)=0;
+  virtual void setSGContainsRnn(bool)=0;
+  virtual void setSGContainsTrigPhoton(bool)=0; 
   
   virtual StatusCode childInitialize(){return StatusCode::SUCCESS;};
   virtual StatusCode childBook(){return StatusCode::SUCCESS;};
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
index 3c52f9393f9d..e51b28c86e89 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaAnalysisBaseTool.h
@@ -26,6 +26,8 @@
 #include "xAODEgamma/ElectronAuxContainer.h"
 #include "xAODTrigRinger/TrigRingerRings.h"
 #include "xAODTrigRinger/TrigRingerRingsContainer.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTrigger/TrigPassBits.h"
 #include "xAODEgamma/PhotonAuxContainer.h"
@@ -70,7 +72,9 @@ public:
   void setEmulationTool(ToolHandle<Trig::ITrigEgammaEmulationTool> tool){m_emulationTool=tool;}
   void setPVertex(const float onvertex, const float ngoodvertex){m_nPVertex = onvertex; m_nGoodVertex = ngoodvertex;}
   void setAvgMu(const float onlmu, const float offmu){m_onlmu=onlmu; m_offmu=offmu;} //For tools called by tools
-
+  void setSGContainsRnn(bool contains) {m_sgContainsRnn=contains;}
+  void setSGContainsTrigPhoton(bool contains) {m_sgContainsTrigPhoton=contains;}
+  
   // Set current MonGroup
   void cd(const std::string &dir);
   // Accessor members
@@ -111,7 +115,10 @@ private:
   float m_offmu;
   float m_nGoodVertex; 
   float m_nPVertex;
- 
+  
+  /*! Hook to check for RNN features in SG */
+  bool m_sgContainsRnn;
+  bool m_sgContainsTrigPhoton;
   // Properties  
   ToolHandle<Trig::TrigDecisionTool> m_trigdec;
   ToolHandle<Trig::ITrigEgammaMatchingTool> m_matchTool;
@@ -168,7 +175,11 @@ protected:
   float getNPVtx(){return m_nPVertex;}
   float getNGoodVertex(){return m_nGoodVertex;}
  
-  /* trig rings and offline rings helper method for feature extraction from xaod */
+  /* Protection for Holders not in AOD */
+  bool getSGContainsRnn() { return m_sgContainsRnn;}
+  bool getSGContainsTrigPhoton() { return m_sgContainsTrigPhoton;}
+
+  /* trig rings and offline rings helper method for feature extraction from xaod */ 
   bool getCaloRings( const xAOD::Electron *, std::vector<float> & );
   bool getTrigCaloRings( const xAOD::TrigEMCluster *, std::vector<float> & );
   void parseCaloRingsLayers( unsigned layer, unsigned &minRing, unsigned &maxRing, std::string &caloLayerName);
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
index 9cf68acb3717..eb2bdcbc3098 100755
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavBaseTool.h
@@ -26,6 +26,8 @@
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/TrackParticleAuxContainer.h"
 #include "xAODTrigCalo/TrigEMCluster.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODCaloEvent/CaloClusterContainer.h"
 #include "xAODCaloEvent/CaloClusterAuxContainer.h"
 #include "xAODJet/JetContainer.h"
diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
index 5b8abb1c6ae1..4a38f6549220 100644
--- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
+++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/TrigEgammaAnalysisTools/TrigEgammaNavTPBaseTool.h
@@ -25,6 +25,8 @@
 #include "xAODTracking/TrackParticleContainer.h"
 #include "xAODTracking/TrackParticleAuxContainer.h"
 #include "xAODTrigCalo/TrigEMCluster.h"
+#include "xAODTrigRinger/TrigRNNOutput.h"
+#include "xAODTrigRinger/TrigRNNOutputContainer.h"
 #include "xAODCaloEvent/CaloClusterContainer.h"
 #include "xAODCaloEvent/CaloClusterAuxContainer.h"
 #include "xAODJet/JetContainer.h"
-- 
GitLab