diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
index c20ee80a1c6575ec386442a8df484730e5c11d7f..f2620eef8010ca93845b73612014d1d8e5bab3d2 100644
--- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
+++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h
@@ -469,27 +469,27 @@ namespace TrigConf {
           if(eta_range==2) return m_ptMinToTopoMeV2;
           throw std::runtime_error("L1ThrExtraInfo: Eta range " + std::to_string(eta_range) + " not valid for gLJ ptMinToTopo");
       }
-      float seedThr(const std::string& fpga) const { return seedThrMeV(fpga)/ 1000.0; }
-      unsigned int seedThrCounts(const std::string& fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
-      unsigned int seedThrMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_seedThrMeVA;
-          if(fpga=="B") return m_seedThrMeVB;
-          if(fpga=="C") return m_seedThrMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ seedThr");
+      float seedThr(const char fpga) const { return seedThrMeV(fpga)/ 1000.0; }
+      unsigned int seedThrCounts(const char fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
+      unsigned int seedThrMeV(const char fpga) const {
+          if(fpga=='A') return m_seedThrMeVA;
+          if(fpga=='B') return m_seedThrMeVB;
+          if(fpga=='C') return m_seedThrMeVC;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: FPGA ") + fpga + " not recongnised for gLJ seedThr");
       }
-      float rhoTowerMin(const std::string& fpga) const { return rhoTowerMinMeV(fpga)/ 1000.0; }
-      int rhoTowerMinMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_rhoTowerMinMeVA;
-          if(fpga=="B") return m_rhoTowerMinMeVB;
-          if(fpga=="C") return m_rhoTowerMinMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ rhoTowerMin");
+      float rhoTowerMin(const char fpga) const { return rhoTowerMinMeV(fpga)/ 1000.0; }
+      int rhoTowerMinMeV(const char fpga) const {
+          if(fpga=='A') return m_rhoTowerMinMeVA;
+          if(fpga=='B') return m_rhoTowerMinMeVB;
+          if(fpga=='C') return m_rhoTowerMinMeVC;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: FPGA ") + fpga + " not recongnised for gLJ rhoTowerMin");
       }
-      float rhoTowerMax(const std::string& fpga) const { return rhoTowerMaxMeV(fpga)/ 1000.0; }
-      int rhoTowerMaxMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_rhoTowerMaxMeVA;
-          if(fpga=="B") return m_rhoTowerMaxMeVB;
-          if(fpga=="C") return m_rhoTowerMaxMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gLJ rhoTowerMax");
+      float rhoTowerMax(const char fpga) const { return rhoTowerMaxMeV(fpga)/ 1000.0; }
+      int rhoTowerMaxMeV(const char fpga) const {
+          if(fpga=='A') return m_rhoTowerMaxMeVA;
+          if(fpga=='B') return m_rhoTowerMaxMeVB;
+          if(fpga=='C') return m_rhoTowerMaxMeVC;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: FPGA ") + fpga + " not recongnised for gLJ rhoTowerMax");
       }
    private:
       /** Update the internal members */
@@ -556,34 +556,34 @@ namespace TrigConf {
          L1ThrExtraInfoBase(thrTypeName, data) { load(); }
       virtual ~L1ThrExtraInfo_gXE() = default;
       virtual std::string className() const { return "L1ThrExtraInfo_gXE"; }
-      float seedThr(const std::string& fpga) const { return seedThrMeV(fpga)/ 1000.0; }
-      unsigned int seedThrCounts(const std::string& fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
-      unsigned int seedThrMeV(const std::string& fpga) const {
-          if(fpga=="A") return m_seedThrMeVA;
-          if(fpga=="B") return m_seedThrMeVB;
-          if(fpga=="C") return m_seedThrMeVC;
-          throw std::runtime_error("L1ThrExtraInfo: FPGA " + fpga + " not recongnised for gXE seedThr");
+      float seedThr(const char fpga) const { return seedThrMeV(fpga)/ 1000.0; }
+      unsigned int seedThrCounts(const char fpga) const { return energyInCounts(seedThrMeV(fpga), resolutionMeV()); }
+      unsigned int seedThrMeV(const char fpga) const {
+          if(fpga=='A') return m_seedThrMeVA;
+          if(fpga=='B') return m_seedThrMeVB;
+          if(fpga=='C') return m_seedThrMeVC;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: FPGA ") + fpga + " not recongnised for gXE seedThr");
       }
-      unsigned int XERHO_param(const std::string& fpga, const std::string& sigma) const {
-          if(fpga=="A" && sigma=="pos") return m_XERHO_sigmaPosA;
-          if(fpga=="B" && sigma=="pos") return m_XERHO_sigmaPosB;
-          if(fpga=="C" && sigma=="pos") return m_XERHO_sigmaPosC;
-          if(fpga=="A" && sigma=="neg") return m_XERHO_sigmaNegA;
-          if(fpga=="B" && sigma=="neg") return m_XERHO_sigmaNegB;
-          if(fpga=="C" && sigma=="neg") return m_XERHO_sigmaNegC;
-          throw std::runtime_error("L1ThrExtraInfo: " + fpga + " and " + sigma + " not recongnised for gXE XERHO_param");
+      unsigned int XERHO_param(const char fpga, const bool sigmapos) const {
+          if(fpga=='A' && sigmapos==true) return m_XERHO_sigmaPosA;
+          if(fpga=='B' && sigmapos==true) return m_XERHO_sigmaPosB;
+          if(fpga=='C' && sigmapos==true) return m_XERHO_sigmaPosC;
+          if(fpga=='A' && sigmapos==false) return m_XERHO_sigmaNegA;
+          if(fpga=='B' && sigmapos==false) return m_XERHO_sigmaNegB;
+          if(fpga=='C' && sigmapos==false) return m_XERHO_sigmaNegC;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: ") + fpga + " and " + (sigmapos ? "pos" : "neg") + " not recongnised for gXE XERHO_param");
       }
-      unsigned int JWOJ_param(const std::string& fpga, const std::string& param) const {
-          if(fpga=="A" && param=="a") return m_XEJWOJ_a_A;
-          if(fpga=="B" && param=="a") return m_XEJWOJ_a_B;
-          if(fpga=="C" && param=="a") return m_XEJWOJ_a_C;
-          if(fpga=="A" && param=="b") return m_XEJWOJ_b_A;
-          if(fpga=="B" && param=="b") return m_XEJWOJ_b_B;
-          if(fpga=="C" && param=="b") return m_XEJWOJ_b_C;
-          if(fpga=="A" && param=="c") return m_XEJWOJ_c_A;
-          if(fpga=="B" && param=="c") return m_XEJWOJ_c_B;
-          if(fpga=="C" && param=="c") return m_XEJWOJ_c_C;
-          throw std::runtime_error("L1ThrExtraInfo: " + fpga + " and " + param  + " not recongnised for gXE JWOJ_param");
+      unsigned int JWOJ_param(const char fpga, const char param) const {
+          if(fpga=='A' && param=='a') return m_XEJWOJ_a_A;
+          if(fpga=='B' && param=='a') return m_XEJWOJ_a_B;
+          if(fpga=='C' && param=='a') return m_XEJWOJ_a_C;
+          if(fpga=='A' && param=='b') return m_XEJWOJ_b_A;
+          if(fpga=='B' && param=='b') return m_XEJWOJ_b_B;
+          if(fpga=='C' && param=='b') return m_XEJWOJ_b_C;
+          if(fpga=='A' && param=='c') return m_XEJWOJ_c_A;
+          if(fpga=='B' && param=='c') return m_XEJWOJ_c_B;
+          if(fpga=='C' && param=='c') return m_XEJWOJ_c_C;
+          throw std::runtime_error(std::string("L1ThrExtraInfo: ") + fpga + " and " + param  + " not recongnised for gXE JWOJ_param");
       }
    private:
       /** Update the internal members */
diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
index df8b472bf185dc45f5a708f54a416b3e77466df8..89a258743aaab35ffd73dd3d6a1fbca82ba5ef3f 100644
--- a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
+++ b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileWriterL1.cxx
@@ -577,31 +577,31 @@ TrigConf::JsonFileWriterL1::writeJsonFile(const std::string & filename, const L1
          auto & gljinfo = l1menu.thrExtraInfo().gLJ();
          jThrType["ptMinToTopo1"] = (int)gljinfo.ptMinToTopo(1);
          jThrType["ptMinToTopo2"] = (int)gljinfo.ptMinToTopo(2);
-         jThrType["seedThrA"] = (int)gljinfo.seedThr("A");
-         jThrType["seedThrB"] = (int)gljinfo.seedThr("B");
-         jThrType["seedThrC"] = (int)gljinfo.seedThr("C");
+         jThrType["seedThrA"] = (int)gljinfo.seedThr('A');
+         jThrType["seedThrB"] = (int)gljinfo.seedThr('B');
+         jThrType["seedThrC"] = (int)gljinfo.seedThr('C');
          std::stringstream stream;
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("A");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin('A');
          jThrType["rhoTowerMinA"] = std::stod(stream.str());
          stream.str("");
          stream.clear(); 
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("B");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin('B');
          jThrType["rhoTowerMinB"] = std::stod(stream.str());
          stream.str("");
          stream.clear();      
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin("C");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMin('C');
          jThrType["rhoTowerMinC"] = std::stod(stream.str());
          stream.str("");
          stream.clear(); 
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("A");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax('A');
          jThrType["rhoTowerMaxA"] = std::stod(stream.str());
          stream.str("");
          stream.clear();      
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("B");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax('B');
          jThrType["rhoTowerMaxB"] = std::stod(stream.str());
          stream.str("");
          stream.clear();
-         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax("C");
+         stream << std::fixed << std::setprecision(3) << gljinfo.rhoTowerMax('C');
          jThrType["rhoTowerMaxC"] = std::stod(stream.str());
       }
 
@@ -621,24 +621,24 @@ TrigConf::JsonFileWriterL1::writeJsonFile(const std::string & filename, const L1
 
       if(thrType == "gXE") {
          auto & ei = l1menu.thrExtraInfo().gXE();
-         jThrType["seedThrA"] = (int)ei.seedThr("A");
-         jThrType["seedThrB"] = (int)ei.seedThr("B");
-         jThrType["seedThrC"] = (int)ei.seedThr("C");
-         jThrType["XERHO_sigmaPosA"] = ei.XERHO_param("A","pos");
-         jThrType["XERHO_sigmaPosB"] = ei.XERHO_param("B","pos");
-         jThrType["XERHO_sigmaPosC"] = ei.XERHO_param("C","pos");
-         jThrType["XERHO_sigmaNegA"] = ei.XERHO_param("A","neg");
-         jThrType["XERHO_sigmaNegB"] = ei.XERHO_param("B","neg");
-         jThrType["XERHO_sigmaNegC"] = ei.XERHO_param("C","neg");
-         jThrType["XEJWOJ_a_A"] = ei.JWOJ_param("A","a");
-         jThrType["XEJWOJ_a_B"] = ei.JWOJ_param("B","a");
-         jThrType["XEJWOJ_a_C"] = ei.JWOJ_param("C","a");
-         jThrType["XEJWOJ_b_A"] = ei.JWOJ_param("A","b");
-         jThrType["XEJWOJ_b_B"] = ei.JWOJ_param("B","b");
-         jThrType["XEJWOJ_b_C"] = ei.JWOJ_param("C","b");
-         jThrType["XEJWOJ_c_A"] = ei.JWOJ_param("A","c");
-         jThrType["XEJWOJ_c_B"] = ei.JWOJ_param("B","c");
-         jThrType["XEJWOJ_c_C"] = ei.JWOJ_param("C","c");
+         jThrType["seedThrA"] = (int)ei.seedThr('A');
+         jThrType["seedThrB"] = (int)ei.seedThr('B');
+         jThrType["seedThrC"] = (int)ei.seedThr('C');
+         jThrType["XERHO_sigmaPosA"] = ei.XERHO_param('A',true);
+         jThrType["XERHO_sigmaPosB"] = ei.XERHO_param('B',true);
+         jThrType["XERHO_sigmaPosC"] = ei.XERHO_param('C',true);
+         jThrType["XERHO_sigmaNegA"] = ei.XERHO_param('A',false);
+         jThrType["XERHO_sigmaNegB"] = ei.XERHO_param('B',false);
+         jThrType["XERHO_sigmaNegC"] = ei.XERHO_param('C',false);
+         jThrType["XEJWOJ_a_A"] = ei.JWOJ_param('A','a');
+         jThrType["XEJWOJ_a_B"] = ei.JWOJ_param('B','a');
+         jThrType["XEJWOJ_a_C"] = ei.JWOJ_param('C','a');
+         jThrType["XEJWOJ_b_A"] = ei.JWOJ_param('A','b');
+         jThrType["XEJWOJ_b_B"] = ei.JWOJ_param('B','b');
+         jThrType["XEJWOJ_b_C"] = ei.JWOJ_param('C','b');
+         jThrType["XEJWOJ_c_A"] = ei.JWOJ_param('A','c');
+         jThrType["XEJWOJ_c_B"] = ei.JWOJ_param('B','c');
+         jThrType["XEJWOJ_c_C"] = ei.JWOJ_param('C','c');
       }
 
       if(thrType == "gTE") {
diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
index cb892306c47e8935d15095a3ebdba8c8f62b4381..fe1b4eaadbfaaacd281fae452dc489c5b97d3536 100644
--- a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
+++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx
@@ -473,24 +473,24 @@ testL1Menu_Extrainfo(const TrigConf::L1Menu & l1menu)
       cout << "    ptMinToTopo (eta range "<<std::to_string(1)<<") in GeV " << ex.ptMinToTopo(1) << endl; 
       cout << "    ptMinToTopo (MeV) " << ex.ptMinToTopoMeV(1) << endl; 
       cout << "    ptMinToTopo (counts) " << ex.ptMinToTopoCounts(1) << endl;
-      cout << "    seedThr(A) " << ex.seedThr("A") << endl; 
-      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV("A") << endl; 
-      cout << "    rhoTowerMin(B) " << ex.rhoTowerMin("B") << endl;   
-      cout << "    rhoTowerMin(B) (MeV) " << ex.rhoTowerMinMeV("B") << endl;  
-      cout << "    rhoTowerMax(C) " << ex.rhoTowerMax("C") << endl;
-      cout << "    rhoTowerMax(C) (MeV) " << ex.rhoTowerMaxMeV("C") << endl;
+      cout << "    seedThr(A) " << ex.seedThr('A') << endl; 
+      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV('A') << endl; 
+      cout << "    rhoTowerMin(B) " << ex.rhoTowerMin('B') << endl;   
+      cout << "    rhoTowerMin(B) (MeV) " << ex.rhoTowerMinMeV('B') << endl;  
+      cout << "    rhoTowerMax(C) " << ex.rhoTowerMax('C') << endl;
+      cout << "    rhoTowerMax(C) (MeV) " << ex.rhoTowerMaxMeV('C') << endl;
    }
    {
       auto & ex = l1menu.thrExtraInfo().gXE();
       cout << "  gXE" << endl;
       cout << "    energy resolution (MeV) " << ex.resolutionMeV() << endl;
-      cout << "    seedThr(A) " << ex.seedThr("A") << endl;
-      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV("A") << endl;
-      cout << "    XERHO_sigmaPosA " << ex.XERHO_param("A","pos") << endl;
-      cout << "    XERHO_sigmaNegB " << ex.XERHO_param("B","neg") << endl;
-      cout << "    XEJWOJ_a_C " << ex.JWOJ_param("C","a") << endl;
-      cout << "    XEJWOJ_b_B " << ex.JWOJ_param("B","b") << endl;
-      cout << "    XEJWOJ_c_A " << ex.JWOJ_param("A","c") << endl;
+      cout << "    seedThr(A) " << ex.seedThr('A') << endl;
+      cout << "    seedThr(A) (MeV) " << ex.seedThrMeV('A') << endl;
+      cout << "    XERHO_sigmaPosA " << ex.XERHO_param('A',true) << endl;
+      cout << "    XERHO_sigmaNegB " << ex.XERHO_param('B',false) << endl;
+      cout << "    XEJWOJ_a_C " << ex.JWOJ_param('C','a') << endl;
+      cout << "    XEJWOJ_b_B " << ex.JWOJ_param('B','b') << endl;
+      cout << "    XEJWOJ_c_A " << ex.JWOJ_param('A','c') << endl;
    }
    {
       auto & ex = l1menu.thrExtraInfo().eTAU();