From 0a067ea842e5686ad719b6d17fd01c5248285c76 Mon Sep 17 00:00:00 2001
From: mattleblanc <matt.leblanc@cern.ch>
Date: Sat, 2 Jun 2018 18:59:28 -0500
Subject: [PATCH] Adding 3/2 prong discriminators for testing

Former-commit-id: 3d4c8b17bbf378bd048c3c03b1e0d732f533a182
---
 .../EnergyCorrelatorGeneralizedRatiosTool.cxx | 59 +++++++++++++++----
 .../Root/EnergyCorrelatorGeneralizedTool.cxx  | 51 ++++++++++++----
 2 files changed, 90 insertions(+), 20 deletions(-)

diff --git a/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedRatiosTool.cxx b/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedRatiosTool.cxx
index 8e608310a44..fc31195d96a 100644
--- a/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedRatiosTool.cxx
+++ b/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedRatiosTool.cxx
@@ -22,10 +22,15 @@ int EnergyCorrelatorGeneralizedRatiosTool::modifyJet(xAOD::Jet &jet) const {
   float ecfg_3_1 = jet.getAttribute<float>("ECFG_3_1");
 
   // these ones for t/H discrimination
-  float ecfg_1_4 = jet.getAttribute<float>("ECFG_1_4");
-  float ecfg_3_4 = jet.getAttribute<float>("ECFG_3_4");
-  float ecfg_1_3 = jet.getAttribute<float>("ECFG_1_3");
-  float ecfg_2_3 = jet.getAttribute<float>("ECFG_2_3");
+  float ecfg_0_2_2 = jet.getAttribute<float>("ECFG_0_2_2");
+  float ecfg_0_3_1 = jet.getAttribute<float>("ECFG_0_3_1");
+  float ecfg_1_3_1 = jet.getAttribute<float>("ECFG_1_3_1");  
+  float ecfg_1_3_2 = jet.getAttribute<float>("ECFG_1_3_2");
+  float ecfg_1_4_2 = jet.getAttribute<float>("ECFG_1_4_2");
+  float ecfg_2_3_1 = jet.getAttribute<float>("ECFG_2_3_1");
+  float ecfg_2_3_2 = jet.getAttribute<float>("ECFG_2_3_2"); 
+  float ecfg_3_4_1 = jet.getAttribute<float>("ECFG_3_4_1");
+  float ecfg_5_4_1 = jet.getAttribute<float>("ECFG_5_4_1");
 
   // N2
   if(fabs(ecfg_2_1) > 1e-8) // Prevent div-0
@@ -45,17 +50,51 @@ int EnergyCorrelatorGeneralizedRatiosTool::modifyJet(xAOD::Jet &jet) const {
   else
     jet.setAttribute("M2", -999.0);
 
-  // L1 (experimental for ttH)
-  if(fabs(ecfg_3_4) > 1e-8)
-    jet.setAttribute("L1", ecfg_1_4 / pow(ecfg_3_4,2));
+  // L-series variables
+  // (experimental for ttH t/H discrimination)
+
+  /*
+    The exponents are determined in order to make 
+    the whole thing dimensionless
+    
+    E = (a*n) / (b*m)
+    for an ECFG_X_Y_Z, a=Y+1, n=Z
+
+    e.g. for L1
+    
+    ecfg_0_2_2 / ecfg_2_3_1
+    E = (3*2) / (4*1) = 3/2
+
+    The variables are just re-scaled to make them usually have values 
+    between 1 and 10 for convenience. But this is important to keep in mind.
+  */
+
+  if(fabs(ecfg_2_3_1) > 1e-8)
+    jet.setAttribute("L1", ecfg_0_2_2 / pow(ecfg_2_3_1, (3/2) )/100. );
   else
     jet.setAttribute("L1",-999.0);
 
-  // L2 (experimental for ttH)
-  if(fabs(ecfg_2_3) > 1e-8)
-    jet.setAttribute("L2", ecfg_1_3 / (pow(ecfg_2_3,(4/3))));
+  if(fabs(ecfg_3_4_1) > 1e-8)
+    jet.setAttribute("L2", ecfg_1_4_2 / (pow(ecfg_3_4_1, (2) ))/1000000. );
   else
     jet.setAttribute("L2",-999.0);
+
+  if(fabs(ecfg_0_2_2) > 1e-8)
+    {
+      jet.setAttribute("L3", ecfg_1_3_1 / (pow(ecfg_0_2_2, (1) )));
+      jet.setAttribute("L4", ecfg_2_3_1 / (pow(ecfg_0_2_2, (1) )));
+    }
+  else
+    {
+      jet.setAttribute("L3",-999.0);
+      jet.setAttribute("L4",-999.0);
+    }
+
+  if(fabs(ecfg_2_3_1) > 1e-8)
+    jet.setAttribute("L5", ecfg_0_3_1 / (pow(ecfg_2_3_1, (1) ))/100. );
+  else
+    jet.setAttribute("L5",-999.0);
+
   
   return 0;
 }
diff --git a/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedTool.cxx b/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedTool.cxx
index 07d9acfad46..d8059c7bdef 100644
--- a/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedTool.cxx
+++ b/Reconstruction/Jet/JetSubStructureMomentTools/Root/EnergyCorrelatorGeneralizedTool.cxx
@@ -20,26 +20,57 @@ EnergyCorrelatorGeneralizedTool::EnergyCorrelatorGeneralizedTool(std::string nam
 int EnergyCorrelatorGeneralizedTool::modifyJet(xAOD::Jet &jet) const {
   if(checkForConstituents(jet) == false) return 1;
 
+  // N.B. here _angles, _n, _beta !!
+
+  // These ones are necessary for N2, M2, etc.
+
   JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_2(2, 3, m_Beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
   JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_1(1, 2, m_Beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
   JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_4_2(2, 4, m_Beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
   JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_1(1, 3, m_Beta, JetSubStructureUtils::EnergyCorrelator::pt_R);
 
-  // these ones for t/H discrimination
-  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_1_4(4, 1, 2.0, JetSubStructureUtils::EnergyCorrelator::pt_R);
-  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_4(4, 3, 1.0, JetSubStructureUtils::EnergyCorrelator::pt_R);
-  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_1_3(4, 2, 2.0, JetSubStructureUtils::EnergyCorrelator::pt_R);
-  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_3(3, 1, 1.0, JetSubStructureUtils::EnergyCorrelator::pt_R);
-
   jet.setAttribute("ECFG_2_1", ECFG_2_1.result(jet));
   jet.setAttribute("ECFG_3_2", ECFG_3_2.result(jet));
   jet.setAttribute("ECFG_3_1", ECFG_3_1.result(jet));
   jet.setAttribute("ECFG_4_2", ECFG_4_2.result(jet));
 
-  jet.setAttribute("ECFG_1_4", ECFG_1_4.result(jet));
-  jet.setAttribute("ECFG_3_4", ECFG_3_4.result(jet));
-  jet.setAttribute("ECFG_1_3", ECFG_1_3.result(jet));
-  jet.setAttribute("ECFG_2_3", ECFG_2_3.result(jet));
+  // these ones for t/H discrimination
+
+  // 232
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_3_2(2, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_2_3_2", ECFG_2_3_2.result(jet));
+ 
+  // 541
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_5_4_1(5, 4, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_5_4_1", ECFG_5_4_1.result(jet));
+
+  // 132
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_1_3_2(1, 3, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_1_3_2", ECFG_1_3_2.result(jet));
+
+  // 231
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_2_3_1(2, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_2_3_1", ECFG_2_3_1.result(jet));
+
+  // 142
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_1_4_2(1, 4, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_1_4_2", ECFG_1_4_2.result(jet));
+
+  // 341
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_3_4_1(3, 4, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_3_4_1", ECFG_3_4_1.result(jet));
+
+  // 022
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_0_2_2(0, 2, 2, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_0_2_2", ECFG_0_2_2.result(jet));
+
+  // 131
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_1_3_1(1, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_1_3_1", ECFG_1_3_1.result(jet));
+
+  // 031
+  JetSubStructureUtils::EnergyCorrelatorGeneralized ECFG_0_3_1(0, 3, 1, JetSubStructureUtils::EnergyCorrelator::pt_R);
+  jet.setAttribute("ECFG_0_3_1", ECFG_0_3_1.result(jet));
 
   return 0;
 }
-- 
GitLab