From edaf061838a5ceb137ed0d59e8b1b5f54f9742d8 Mon Sep 17 00:00:00 2001
From: Oliver Majersky <oliver.majersky@cern.ch>
Date: Mon, 22 Mar 2021 15:05:54 +0100
Subject: [PATCH] Re-enable nominal boosted tagging SF computation in
 AnalysisTop.

---
 .../TopAnalysis/Root/EventSaverFlatNtuple.cxx | 14 ++++-------
 .../Root/TopBoostedTaggingCPTools.cxx         | 23 ++++++++++---------
 2 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
index 5c27a50c2828..1098fb3020b3 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopAnalysis/Root/EventSaverFlatNtuple.cxx
@@ -1090,7 +1090,7 @@ namespace top {
             systematicTree->makeOutputVariable(m_ljet_tagSF[taggerName], "ljet_tagSF_" + taggerName);
           }
 	  
-	  if (systematicTree->name() == nominalTTreeName || systematicTree->name() == nominalLooseTTreeName) {
+	  if ((systematicTree->name() == nominalTTreeName || systematicTree->name() == nominalLooseTTreeName) && m_config->applyBoostedJetTaggersUncertainties()) {
 	    for (const std::string& taggerName : m_boostedJetTaggersNamesCalibrated) {
 	      systematicTree->makeOutputVariable(m_ljet_tagSFSysVars[taggerName],"ljet_tagSF_" + taggerName + "_variations");
 	    }
@@ -3208,7 +3208,7 @@ namespace top {
         m_ljet_truthLabel.resize(nLargeRJets);
         for (const std::string& taggerName : m_boostedJetTaggersNamesCalibrated) {
           m_ljet_tagSF[taggerName].resize(nLargeRJets);
-	  if (event.m_hashValue == m_config->nominalHashValue()) {
+	  if (event.m_hashValue == m_config->nominalHashValue() && m_config->applyBoostedJetTaggersUncertainties()) {
 	    m_ljet_tagSFSysVars[taggerName].resize(nLargeRJets);
 	  }
         }
@@ -3236,17 +3236,13 @@ namespace top {
             const std::string& taggerName = tagSF.first;
 	    const std::string& sfNameNominal = tagSF.second;
 	    
-	    m_ljet_tagSF[taggerName][i] = jetPtr->isAvailable<float>(sfNameNominal) ? jetPtr->auxdata<float>(sfNameNominal) : -999;
+	    m_ljet_tagSF[taggerName][i] = jetPtr->auxdata<float>(sfNameNominal);
 	    
-	    if (event.m_hashValue == m_config->nominalHashValue()) {
+	    if (event.m_hashValue == m_config->nominalHashValue() && m_config->applyBoostedJetTaggersUncertainties()) {
 	      const std::vector<std::string>& sysNames = m_config->boostedTaggersSFSysNames().at(taggerName);
 	      m_ljet_tagSFSysVars[taggerName][i].resize(sysNames.size());
 	      for(size_t iname = 0; iname<sysNames.size();iname++) {
-                if (jetPtr->isAvailable<float>(sysNames[iname])) {
-                  m_ljet_tagSFSysVars[taggerName][i][iname] = jetPtr->auxdata<float>(sysNames[iname]);
-                } else {
-                  m_ljet_tagSFSysVars[taggerName][i][iname] = -999;
-                }
+                m_ljet_tagSFSysVars[taggerName][i][iname] = jetPtr->auxdata<float>(sysNames[iname]);
               } // end loop over SF variations in nominal TTree
             } // end if nominal TTree
           } // end loop over taggers
diff --git a/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopBoostedTaggingCPTools.cxx b/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopBoostedTaggingCPTools.cxx
index 3ddc2502f3f1..69c9e2d029df 100644
--- a/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopBoostedTaggingCPTools.cxx
+++ b/PhysicsAnalysis/TopPhys/xAOD/TopCPTools/Root/TopBoostedTaggingCPTools.cxx
@@ -48,8 +48,7 @@ namespace top {
     }
 
     initTaggersMaps();
-    if (m_config->applyBoostedJetTaggersUncertainties())
-      initSFsMaps();
+    initSFsMaps();
 
     top::check(std::find(std::begin(m_jetCollections),std::end(m_jetCollections),m_config->sgKeyLargeRJets())!=std::end(m_jetCollections),
       "Error in BoostedTaggingCPTools: boosted jet taggers are not available for this large-R jet collection.");
@@ -84,21 +83,23 @@ namespace top {
       top::check(m_taggers[taggerName].initialize(), "Failed to initialize " + taggerName);
 
       // initialize SF uncertainty tools for supported WPs
-      if (m_config->isMC() && m_config->applyBoostedJetTaggersUncertainties()) {
+      if (m_config->isMC()) {
         std::string jet_def = m_config->sgKeyLargeRJets();
         jet_def.erase(jet_def.length() - 4); // jet collection name sans 'Jets' suffix
 
         const std::string name = "JetSFuncert_" + taggerName;
         try {
           const std::string& cfg = m_taggerSFsConfigs.at(taggerName);
-          JetUncertaintiesTool* jet_SF_tmp = new JetUncertaintiesTool(name);
-
-          top::check(jet_SF_tmp->setProperty("JetDefinition", jet_def), "Failed to set JetDefinition for " + name);
-          top::check(jet_SF_tmp->setProperty("MCType", "MC16"), "Failed to set MCType for " + name);
-          top::check(jet_SF_tmp->setProperty("ConfigFile", cfg), "Failed to set ConfigFile for " + name);
-          top::check(jet_SF_tmp->setProperty("IsData", false), "Failed to set IsData for " + name);
-          top::check(jet_SF_tmp->initialize(), "Failed to initialize " + name);
-          m_tagSFuncertTool[taggerName] = jet_SF_tmp;
+          if (m_config->applyBoostedJetTaggersUncertainties()) {
+            JetUncertaintiesTool* jet_SF_tmp = new JetUncertaintiesTool(name);
+
+            top::check(jet_SF_tmp->setProperty("JetDefinition", jet_def), "Failed to set JetDefinition for " + name);
+            top::check(jet_SF_tmp->setProperty("MCType", "MC16"), "Failed to set MCType for " + name);
+            top::check(jet_SF_tmp->setProperty("ConfigFile", cfg), "Failed to set ConfigFile for " + name);
+            top::check(jet_SF_tmp->setProperty("IsData", false), "Failed to set IsData for " + name);
+            top::check(jet_SF_tmp->initialize(), "Failed to initialize " + name);
+            m_tagSFuncertTool[taggerName] = jet_SF_tmp;
+          }
           m_config->setCalibBoostedJetTagger(taggerName, m_taggerSFsNames[taggerName]);
         } catch (std::out_of_range& e) {
           // skip taggers which do not yet have SFs available
-- 
GitLab