From 14f6514a268b03b4f41224ca797af2491c1a5fbb Mon Sep 17 00:00:00 2001
From: Maarten Van Veghel <maarten.vanveghel@cern.ch>
Date: Sun, 10 Mar 2024 01:54:37 +0100
Subject: [PATCH] adapt to removal of additionalInfo for charged calo

---
 .../PhysEvent/include/Event/Bremsstrahlung.h  | 28 ++++---
 .../src/ChargedProtoParticleAddCaloInfo.cpp   | 80 +++----------------
 .../ChargedProtoParticleAddCombineDLLs.cpp    | 35 +++-----
 3 files changed, 36 insertions(+), 107 deletions(-)

diff --git a/Event/PhysEvent/include/Event/Bremsstrahlung.h b/Event/PhysEvent/include/Event/Bremsstrahlung.h
index 578d0fb0baf..629db560c4c 100644
--- a/Event/PhysEvent/include/Event/Bremsstrahlung.h
+++ b/Event/PhysEvent/include/Event/Bremsstrahlung.h
@@ -296,30 +296,34 @@ namespace LHCb::Event::Bremsstrahlung {
     }
 
     bool hasBrem() const {
-      using Info = LHCb::ProtoParticle::additionalInfo;
-      return this->base().proto() && ( this->base().proto()->info( Info::CaloHasBrem, 0 ) > 0. ) &&
-             !this->overlapVeto();
+      auto proto = this->base().proto();
+      if ( !proto ) return false;
+      auto pid = proto->bremInfo();
+      return pid ? pid->HasBrem() && !this->overlapVeto() : false;
     }
 
     bool inBrem() const {
-      using Info = LHCb::ProtoParticle::additionalInfo;
-      return this->base().proto() && ( this->base().proto()->info( Info::InAccBrem, 0 ) > 0. );
+      auto proto = this->base().proto();
+      if ( !proto ) return false;
+      auto pid = proto->bremInfo();
+      return pid ? pid->InBrem() : false;
     }
 
     details::bremid_t bremID() const {
-      using Info = LHCb::ProtoParticle::additionalInfo;
       auto proto = this->base().proto();
       if ( !proto ) return {0, 0.f};
-      auto id   = (int)proto->info( Info::CaloBremHypoID, 0 );
-      auto chi2 = (details::float_t)proto->info( Info::CaloBremMatch, -1. );
+      auto pid  = proto->bremInfo();
+      auto id   = pid ? (int)pid->BremHypoID().all() : 0;
+      auto chi2 = pid ? (details::float_t)pid->BremHypoMatch() : -1.;
       return {id, chi2};
     }
 
     details::float_t bremFrac( details::momentum3_t const& mom ) const {
-      using Info      = ProtoParticle::additionalInfo;
-      auto proto      = this->base().proto();
-      auto bremenergy = details::float_t{(float)proto->info( Info::CaloBremEnergy, 0. )};
-      auto bendcorr   = details::float_t{(float)proto->info( Info::CaloBremBendingCorr, 1. )};
+      using Info             = LHCb::Event::Calo::v1::BremInfo;
+      auto        proto      = this->base().proto();
+      Info const* pid        = proto ? proto->bremInfo() : nullptr;
+      auto        bremenergy = pid ? (details::float_t)pid->BremEnergy() : 0.;
+      auto        bendcorr   = pid ? (details::float_t)pid->BremBendingCorrection() : 1.;
       return details::bremFrac( mom, bremenergy, bendcorr );
     }
 
diff --git a/Event/RecreatePIDTools/src/ChargedProtoParticleAddCaloInfo.cpp b/Event/RecreatePIDTools/src/ChargedProtoParticleAddCaloInfo.cpp
index f0f785a5f05..c64ed173535 100644
--- a/Event/RecreatePIDTools/src/ChargedProtoParticleAddCaloInfo.cpp
+++ b/Event/RecreatePIDTools/src/ChargedProtoParticleAddCaloInfo.cpp
@@ -91,13 +91,12 @@ namespace LHCb::Rec::ProtoParticle::Charged {
     // specific implementations
     //=============================================================================
     using namespace LHCb::Event::Calo::v1;
-    using additionalInfo = LHCb::ProtoParticle::additionalInfo;
 
     // Ecal info
-    class AddEcalInfo final : public AddCaloInfoBase<CaloChargedPID> {
+    class AddCaloInfo final : public AddCaloInfoBase<CaloChargedPID> {
     public:
       // constructor
-      AddEcalInfo( std::string const& type, std::string const& name, IInterface const* parent )
+      AddCaloInfo( std::string const& type, std::string const& name, IInterface const* parent )
           : AddCaloInfoBase<CaloChargedPID>::AddCaloInfoBase( type, name, parent ) {}
 
       // main execution
@@ -110,6 +109,7 @@ namespace LHCb::Rec::ProtoParticle::Charged {
         for ( auto proto : protos ) {
           // remove current info
           proto->removeCaloEcalInfo();
+          proto->removeCaloHcalInfo();
           // find pp with track
           if ( !proto->track() ) continue;
           auto relation = map.find( proto->track() );
@@ -120,22 +120,9 @@ namespace LHCb::Rec::ProtoParticle::Charged {
 
           auto const* pid = relation->second;
           // skip if not in acceptance
-          if ( !pid->InEcal() ) continue;
-          // store pid info
-          auto track_p = proto->track()->p();
-          auto cellid  = pid->ElectronID();
-          proto->addInfo( additionalInfo::InAccEcal, true );
-          proto->addInfo( additionalInfo::CaloClusChi2, pid->ClusterMatch() );
-          proto->addInfo( additionalInfo::CaloTrMatch, pid->ClusterMatch() );
-          proto->addInfo( additionalInfo::CaloChargedID, cellid.all() );
-          proto->addInfo( additionalInfo::CaloElectronMatch, pid->ElectronMatch() );
-          proto->addInfo( additionalInfo::CaloChargedEcal, pid->ElectronEnergy() );
-          proto->addInfo( additionalInfo::CaloEoverP, pid->ElectronShowerEoP() );
-          proto->addInfo( additionalInfo::CaloEcalE, pid->ElectronShowerEoP() * track_p );
-          proto->addInfo( additionalInfo::ElectronShowerDLL, pid->ElectronShowerDLL() );
-          proto->addInfo( additionalInfo::EcalPIDe, pid->EcalPIDe() );
-          proto->addInfo( additionalInfo::EcalPIDmu, pid->EcalPIDmu() );
+          if ( !( pid->InEcal() || pid->InHcal() ) ) continue;
           // add relevant CaloHypo
+          auto cellid = pid->ElectronID();
           addCaloHypo( etable, cellid, proto );
           // reference to CaloChargedPID object
           proto->setCaloChargedPID( pid );
@@ -148,42 +135,6 @@ namespace LHCb::Rec::ProtoParticle::Charged {
                                                              "Table relating cellids to CaloHypos"};
     };
 
-    // Hcal info
-    struct AddHcalInfo final : AddCaloInfoBase<CaloChargedPID> {
-      // constructor
-      AddHcalInfo( std::string const& type, std::string const& name, IInterface const* parent )
-          : AddCaloInfoBase<CaloChargedPID>::AddCaloInfoBase( type, name, parent ) {}
-
-      // main execution
-      StatusCode operator()( ProtoParticles& protos, IGeometryInfo const& ) const override {
-        // make map
-        auto map = getPIDsMap();
-        // update all relevant protoparticles
-        for ( auto proto : protos ) {
-          // remove current info
-          proto->removeCaloHcalInfo();
-          // find pp with track
-          if ( !proto->track() ) continue;
-          auto relation = map.find( proto->track() );
-          if ( map.end() == relation ) {
-            if ( msgLevel( MSG::VERBOSE ) ) verbose() << " -> NO associated CaloPID object found" << endmsg;
-            continue;
-          }
-
-          auto const* pid = relation->second;
-          // skip if not in acceptance
-          if ( !pid->InHcal() ) continue;
-          // store pid info
-          auto track_p = proto->track()->p();
-          proto->addInfo( additionalInfo::InAccHcal, true );
-          proto->addInfo( additionalInfo::CaloHcalE, pid->HcalEoP() * track_p );
-          proto->addInfo( additionalInfo::HcalPIDe, pid->HcalPIDe() );
-          proto->addInfo( additionalInfo::HcalPIDmu, pid->HcalPIDmu() );
-        }
-        return StatusCode::SUCCESS;
-      }
-    };
-
     // Brem info
     class AddBremInfo final : public AddCaloInfoBase<BremInfo> {
     public:
@@ -212,19 +163,8 @@ namespace LHCb::Rec::ProtoParticle::Charged {
           auto const* pid = relation->second;
           // skip if not in acceptance
           if ( !pid->InBrem() ) continue;
-          // store pid info
-          auto cellid = pid->BremHypoID();
-          proto->addInfo( additionalInfo::InAccBrem, true );
-          proto->addInfo( additionalInfo::CaloBremMatch, pid->BremHypoMatch() );
-          proto->addInfo( additionalInfo::CaloBremHypoID, cellid.all() );
-          proto->addInfo( additionalInfo::CaloBremHypoEnergy, pid->BremHypoEnergy() );
-          proto->addInfo( additionalInfo::CaloBremHypoDeltaX, pid->BremHypoDeltaX() );
-          proto->addInfo( additionalInfo::CaloBremTBEnergy, pid->BremTrackBasedEnergy() );
-          proto->addInfo( additionalInfo::CaloBremBendingCorr, pid->BremBendingCorrection() );
-          proto->addInfo( additionalInfo::CaloBremEnergy, pid->BremEnergy() );
-          proto->addInfo( additionalInfo::CaloHasBrem, pid->HasBrem() );
-          proto->addInfo( additionalInfo::BremPIDe, pid->BremPIDe() );
           // add relevant CaloHypo
+          auto cellid = pid->BremHypoID();
           addCaloHypo( phtable, cellid, proto );
           // reference to BremInfo object
           proto->setBremInfo( pid );
@@ -260,9 +200,8 @@ namespace LHCb::Rec::ProtoParticle::Charged {
           proto->clearCalo( LHCb::CaloHypo::Hypothesis::Photon );
           // add relevant CaloHypo
           auto cellid_ecal =
-              LHCb::Detector::Calo::CellID{(unsigned int)proto->info( additionalInfo::CaloChargedID, 0 )};
-          auto cellid_brem =
-              LHCb::Detector::Calo::CellID{(unsigned int)proto->info( additionalInfo::CaloBremHypoID, 0 )};
+              proto->caloChargedPID() ? proto->caloChargedPID()->ElectronID() : LHCb::Detector::Calo::CellID{};
+          auto cellid_brem = proto->bremInfo() ? proto->bremInfo()->BremHypoID() : LHCb::Detector::Calo::CellID{};
           if ( cellid_ecal ) addCaloHypo( etable, cellid_ecal, proto, m_report_missing );
           if ( cellid_brem ) addCaloHypo( ptable, cellid_brem, proto, m_report_missing );
         }
@@ -293,8 +232,7 @@ namespace LHCb::Rec::ProtoParticle::Charged {
 
   } // namespace v2
 
-  DECLARE_COMPONENT_WITH_ID( v2::AddEcalInfo, "ChargedProtoParticleAddEcalInfo" )
-  DECLARE_COMPONENT_WITH_ID( v2::AddHcalInfo, "ChargedProtoParticleAddHcalInfo" )
+  DECLARE_COMPONENT_WITH_ID( v2::AddCaloInfo, "ChargedProtoParticleAddCaloInfo" )
   DECLARE_COMPONENT_WITH_ID( v2::AddBremInfo, "ChargedProtoParticleAddBremInfo" )
   DECLARE_COMPONENT_WITH_ID( v2::AddHypos, "ChargedProtoParticleAddCaloHypos" )
 
diff --git a/Event/RecreatePIDTools/src/ChargedProtoParticleAddCombineDLLs.cpp b/Event/RecreatePIDTools/src/ChargedProtoParticleAddCombineDLLs.cpp
index b02b1c16a97..bc9632fbb5e 100644
--- a/Event/RecreatePIDTools/src/ChargedProtoParticleAddCombineDLLs.cpp
+++ b/Event/RecreatePIDTools/src/ChargedProtoParticleAddCombineDLLs.cpp
@@ -258,41 +258,28 @@ namespace LHCb::Rec::ProtoParticle::Charged {
   }
 
   bool AddCombineDLLs::addCalo( LHCb::ProtoParticle* proto, CombinedLL& combDLL ) const {
-    bool ok = false;
-    if ( proto->hasInfo( LHCb::ProtoParticle::additionalInfo::EcalPIDe ) ||
-         proto->hasInfo( LHCb::ProtoParticle::additionalInfo::EcalPIDmu ) ) {
+    bool ok  = false;
+    auto pid = proto->caloChargedPID();
+    if ( pid && pid->InEcal() ) {
       const int eTechnique = m_maskTechnique.at( "ECAL" );
-      if ( 0 != ( m_elCombDll & eTechnique ) )
-        combDLL.elDLL += proto->info( LHCb::ProtoParticle::additionalInfo::EcalPIDe, 0 );
-      if ( 0 != ( m_muCombDll & eTechnique ) )
-        combDLL.muDLL += proto->info( LHCb::ProtoParticle::additionalInfo::EcalPIDmu, 0 );
+      if ( 0 != ( m_elCombDll & eTechnique ) ) combDLL.elDLL += pid->EcalPIDe();
+      if ( 0 != ( m_muCombDll & eTechnique ) ) combDLL.muDLL += pid->EcalPIDmu();
       if ( msgLevel( MSG::VERBOSE ) ) verbose() << " -> Adding ECAL info " << combDLL << endmsg;
       ok = true;
     }
 
-    if ( proto->hasInfo( LHCb::ProtoParticle::additionalInfo::HcalPIDe ) ||
-         proto->hasInfo( LHCb::ProtoParticle::additionalInfo::HcalPIDmu ) ) {
+    if ( pid && pid->InHcal() ) {
       const int hTechnique = m_maskTechnique.at( "HCAL" );
-      if ( 0 != ( m_elCombDll & hTechnique ) )
-        combDLL.elDLL += proto->info( LHCb::ProtoParticle::additionalInfo::HcalPIDe, 0 );
-      if ( 0 != ( m_muCombDll & hTechnique ) )
-        combDLL.muDLL += proto->info( LHCb::ProtoParticle::additionalInfo::HcalPIDmu, 0 );
+      if ( 0 != ( m_elCombDll & hTechnique ) ) combDLL.elDLL += pid->HcalPIDe();
+      if ( 0 != ( m_muCombDll & hTechnique ) ) combDLL.muDLL += pid->HcalPIDmu();
       if ( msgLevel( MSG::VERBOSE ) ) verbose() << " -> Adding HCAL info " << combDLL << endmsg;
       ok = true;
     }
 
-    if ( proto->hasInfo( LHCb::ProtoParticle::additionalInfo::PrsPIDe ) ) {
-      const int pTechnique = m_maskTechnique.at( "PRS" );
-      if ( 0 != ( m_elCombDll & pTechnique ) )
-        combDLL.elDLL += proto->info( LHCb::ProtoParticle::additionalInfo::PrsPIDe, 0 );
-      if ( msgLevel( MSG::VERBOSE ) ) verbose() << " -> Adding PRS  info " << combDLL << endmsg;
-      ok = true;
-    }
-
-    if ( proto->hasInfo( LHCb::ProtoParticle::additionalInfo::BremPIDe ) ) {
+    auto brem = proto->bremInfo();
+    if ( brem && brem->InBrem() ) {
       const int bTechnique = m_maskTechnique.at( "BREM" );
-      if ( 0 != ( m_elCombDll & bTechnique ) )
-        combDLL.elDLL += proto->info( LHCb::ProtoParticle::additionalInfo::BremPIDe, 0 );
+      if ( 0 != ( m_elCombDll & bTechnique ) ) combDLL.elDLL += brem->BremPIDe();
       if ( msgLevel( MSG::VERBOSE ) ) verbose() << " -> Adding BREM info " << combDLL << endmsg;
       ok = true;
     }
-- 
GitLab