diff --git a/Reconstruction/DiTauRec/DiTauRec/CellFinder.h b/Reconstruction/DiTauRec/DiTauRec/CellFinder.h index 5422f0837f15ee42aa7806fddc804bead86b4efc..0c4e5834269d41d21170865ad04806e4d610f167 100644 --- a/Reconstruction/DiTauRec/DiTauRec/CellFinder.h +++ b/Reconstruction/DiTauRec/DiTauRec/CellFinder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #ifndef DITAUREC_CELLFINDER_H diff --git a/Reconstruction/DiTauRec/DiTauRec/DiTauTrackFinder.h b/Reconstruction/DiTauRec/DiTauRec/DiTauTrackFinder.h index d7a4df235aed0c7f11e0e7a1fd43780a2299ca9d..bac1539f8ac0e3d5019426ae5d873b9dba2bb9a8 100644 --- a/Reconstruction/DiTauRec/DiTauRec/DiTauTrackFinder.h +++ b/Reconstruction/DiTauRec/DiTauRec/DiTauTrackFinder.h @@ -67,7 +67,6 @@ class DiTauTrackFinder : public DiTauToolBase { SG::ReadHandleKey<xAOD::TrackParticleContainer> m_TrackParticleContainerName { this, "TrackParticleContainer", "InDetTrackParticles", "" }; ToolHandle<Trk::ITrackSelectorTool> m_TrackSelectorTool; - // ToolHandle< Trk::IParticleCaloExtensionTool > m_ParticleCaloExtensionTool; }; diff --git a/Reconstruction/DiTauRec/DiTauRec/SubjetBuilder.h b/Reconstruction/DiTauRec/DiTauRec/SubjetBuilder.h index 643bc1c0cbf80badfd2243a187da3f43979c7c7b..bf5fd6818014f6a34337b2e8f8f1350e68b18ce0 100644 --- a/Reconstruction/DiTauRec/DiTauRec/SubjetBuilder.h +++ b/Reconstruction/DiTauRec/DiTauRec/SubjetBuilder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #ifndef DITAUREC_SUBJETBUILDER_H @@ -33,11 +33,8 @@ class SubjetBuilder : public DiTauToolBase { private: float m_Rsubjet; - int m_Nsubjet; float m_ptmin; - // fastjet::Filter m_SubjetFilter; - }; #endif // DITAUREC_SUBJETBUILDER_H diff --git a/Reconstruction/DiTauRec/python/DiTauAlgorithmsHolder.py b/Reconstruction/DiTauRec/python/DiTauAlgorithmsHolder.py index 914480beeed2d0f3eedcb73582ae34746d5ccb8b..00bef1bb361616354a311a3d6ed13ed8a7ed28b5 100644 --- a/Reconstruction/DiTauRec/python/DiTauAlgorithmsHolder.py +++ b/Reconstruction/DiTauRec/python/DiTauAlgorithmsHolder.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration cached_instances = {} @@ -41,7 +41,6 @@ def getSubjetBuilder(): from DiTauRec.DiTauRecConf import SubjetBuilder SubjetBuilder = SubjetBuilder(name=_name, Rsubjet=0.2, - Nsubjet=4, ptminsubjet=10000) cached_instances[_name] = SubjetBuilder diff --git a/Reconstruction/DiTauRec/python/DiTauToolsConfig.py b/Reconstruction/DiTauRec/python/DiTauToolsConfig.py index 573e8023b32cffa936cf54f26e9a2c4e3236cbe5..91bad90ed3c85852c2158a1e68ea7aa433e90da0 100644 --- a/Reconstruction/DiTauRec/python/DiTauToolsConfig.py +++ b/Reconstruction/DiTauRec/python/DiTauToolsConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -15,7 +15,6 @@ def SubjetBuilderCfg(ConfigFlags, name="DiTauRec_SubjetBuilder", **kwargs): acc = ComponentAccumulator() kwargs.setdefault("Rsubjet", 0.2) - kwargs.setdefault("Nsubjet", 4) kwargs.setdefault("ptminsubjet", 10000) acc.setPrivateTools(CompFactory.SubjetBuilder(name, **kwargs)) diff --git a/Reconstruction/DiTauRec/src/CellFinder.cxx b/Reconstruction/DiTauRec/src/CellFinder.cxx index d89d0bb90f7149c4ac6e35579cfde25b80a33ca7..e49d959b0892cae106b60382806d9a9d6d9e086d 100644 --- a/Reconstruction/DiTauRec/src/CellFinder.cxx +++ b/Reconstruction/DiTauRec/src/CellFinder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ @@ -88,11 +88,14 @@ StatusCode CellFinder::execute(DiTauCandidateData * data, // register cell hash as already seen cellSeen.set(cc->caloDDE()->calo_hash()); + TLorentzVector temp_cc_p4; + temp_cc_p4.SetPtEtaPhiM(cc->pt(), cc->eta(), cc->phi(), cc->m()); + // check if cell is in one of the subjets cones - double dR; for (const auto& subjet : vSubjets) { - dR = Tau1P3PKineUtils::deltaR(subjet.eta(), subjet.phi_std(), cc->eta(), cc->phi()); - if (dR < m_Rsubjet) { + TLorentzVector temp_sub_p4; + temp_sub_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m()); + if (temp_cc_p4.DeltaR(temp_sub_p4) < m_Rsubjet) { subjetCells.push_back(cc); } } diff --git a/Reconstruction/DiTauRec/src/DiTauTrackFinder.cxx b/Reconstruction/DiTauRec/src/DiTauTrackFinder.cxx index d999b7b8b468331a1c2a06bba868d048eac8f615..691ffd41f8c87fa290d19beebad680687eaed176 100644 --- a/Reconstruction/DiTauRec/src/DiTauTrackFinder.cxx +++ b/Reconstruction/DiTauRec/src/DiTauTrackFinder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #include "DiTauRec/DiTauTrackFinder.h" @@ -26,13 +26,11 @@ DiTauTrackFinder::DiTauTrackFinder(const std::string& type, m_MaxDrJet(1.0), m_MaxDrSubjet(0.2), m_TrackSelectorTool("") - // m_ParticleCaloExtensionTool("") { declareInterface<DiTauToolBase > (this); declareProperty("MaxDrJet", m_MaxDrJet); declareProperty("MaxDrSubjet", m_MaxDrSubjet); declareProperty("TrackSelectorTool", m_TrackSelectorTool); - // declareProperty("ParticleCaloExtensionTool", m_ParticleCaloExtensionTool); } @@ -86,15 +84,19 @@ StatusCode DiTauTrackFinder::execute(DiTauCandidateData * data, // drop subjets without good tracks std::vector<fastjet::PseudoJet> vSubjets = data->subjets; - double nTracks; - double dR; + int nTracks; for (auto subjet_itr = vSubjets.begin(); subjet_itr != vSubjets.end(); ) { nTracks = 0; + + TLorentzVector temp_p4; + temp_p4.SetPtEtaPhiM(subjet_itr->pt(), subjet_itr->eta(), subjet_itr->phi_std(), subjet_itr->m()); + for (const auto& track : tauTracks) { - dR = Tau1P3PKineUtils::deltaR(subjet_itr->eta(), subjet_itr->phi_std(), track->eta(), track->phi()); - if (dR < m_MaxDrSubjet) nTracks++; + if ( temp_p4.DeltaR(track->p4()) < m_MaxDrSubjet) nTracks++; } + ATH_MSG_DEBUG("number of tracks in subjet: "<< nTracks); + if (nTracks == 0) { ATH_MSG_DEBUG("number of tracks is zero. Drop subjet"); subjet_itr = vSubjets.erase(subjet_itr); //point subjet_itr to the next element/end of the vector @@ -173,21 +175,21 @@ DiTauTrackFinder::DiTauTrackType DiTauTrackFinder::diTauTrackType(const DiTauCan xAOD::DiTauJet *pDiTau = data->xAODDiTau; - double dRJet = Tau1P3PKineUtils::deltaR(pDiTau->eta(), pDiTau->phi(), track->eta(), track->phi()); - // check if track is outside the jet ditau cone - if (dRJet > m_MaxDrJet) return OutsideTrack; + if ( pDiTau->p4().DeltaR(track->p4()) > m_MaxDrJet) return OutsideTrack; // check quality criteria bool goodTrack = m_TrackSelectorTool->decision(*track, pVertex); if (!goodTrack) return DiTauOtherTrack; // check if track is inside a subjet - double dR = 100; std::vector<fastjet::PseudoJet> vSubjets = data->subjets; for (const auto &subjet : vSubjets) { - dR = Tau1P3PKineUtils::deltaR(subjet.eta(), subjet.phi_std(), track->eta(), track->phi()); - if (dR < m_MaxDrSubjet) + + TLorentzVector temp_p4; + temp_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m()); + + if (temp_p4.DeltaR(track->p4()) < m_MaxDrSubjet) return DiTauSubjetTrack; } diff --git a/Reconstruction/DiTauRec/src/ElMuFinder.cxx b/Reconstruction/DiTauRec/src/ElMuFinder.cxx index 62736518873d53bdbc57d7b5a335948093babc29..12b0f11ab83b3181265be77792e21ca79aadb98d 100644 --- a/Reconstruction/DiTauRec/src/ElMuFinder.cxx +++ b/Reconstruction/DiTauRec/src/ElMuFinder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #include "DiTauRec/ElMuFinder.h" @@ -62,7 +62,6 @@ StatusCode ElMuFinder::execute(DiTauCandidateData * data, SG::ReadHandle<xAOD::MuonContainer> pMuCont (m_muContName, ctx); // select electrons - float dR; data->electrons.clear(); if (pElCont.isValid()) { for (const auto *const el : *pElCont ) { @@ -77,8 +76,7 @@ StatusCode ElMuFinder::execute(DiTauCandidateData * data, ATH_MSG_DEBUG("Electron passes basic kinematic selection"); // electron inside seed jet area? - dR = Tau1P3PKineUtils::deltaR(data->seed->eta(), data->seed->phi(), el->eta(), el->phi()); - if (dR > data->Rjet) + if (data->seed->p4().DeltaR(el->p4()) > data->Rjet) continue; data->electrons.push_back(el); @@ -99,9 +97,9 @@ StatusCode ElMuFinder::execute(DiTauCandidateData * data, if (muonQuality >= m_muQual && std::abs(mu->eta()) >= m_muMaxEta) continue; // muon inside seed jet area? - dR = Tau1P3PKineUtils::deltaR(data->seed->eta(), data->seed->phi(), mu->eta(), mu->phi()); - if (dR > data->Rjet) + if (data->seed->p4().DeltaR(mu->p4()) > data->Rjet) continue; + data->muons.push_back(mu); } ATH_MSG_DEBUG("Number of good muons found: " << data->muons.size() ); diff --git a/Reconstruction/DiTauRec/src/IDvarCalculator.cxx b/Reconstruction/DiTauRec/src/IDvarCalculator.cxx index 28292099135f5a45cf9bf0ff1d72f9be9eb0158d..c6e15a414b2ac4c3f8a5964d9e40b00e995dbf9a 100644 --- a/Reconstruction/DiTauRec/src/IDvarCalculator.cxx +++ b/Reconstruction/DiTauRec/src/IDvarCalculator.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #include "DiTauRec/IDVarCalculator.h" @@ -79,22 +79,25 @@ StatusCode IDVarCalculator::execute(DiTauCandidateData * data, return StatusCode::SUCCESS; } - float Rcore = data->Rcore; - float Rsubjet = data->Rsubjet; float f_core; - float dR; for (unsigned int i = 0; i < vSubjets.size(); i++) { const fastjet::PseudoJet& subjet = vSubjets.at(i); float ptAll = 0.; float ptCore = 0.; + TLorentzVector temp_sub_p4; + temp_sub_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m()); + for (const auto& cc : vSubjetCells) { - dR = Tau1P3PKineUtils::deltaR(subjet.eta(), subjet.phi_std(), cc->eta(), cc->phi()); + + TLorentzVector temp_cc_p4; + temp_cc_p4.SetPtEtaPhiM(cc->pt(), cc->eta(), cc->phi(), cc->m()); - if (dR < Rsubjet) { + if (temp_cc_p4.DeltaR(temp_sub_p4) < data->Rsubjet) { ptAll += cc->pt(); } - if (dR < Rcore) { + + if (temp_cc_p4.DeltaR(temp_sub_p4) < data->Rcore) { ptCore += cc->pt(); } } @@ -104,6 +107,7 @@ StatusCode IDVarCalculator::execute(DiTauCandidateData * data, f_core = ptCore/ptAll; else f_core = -999.; + ATH_MSG_DEBUG("subjet "<< i << ": f_core=" << f_core); pDiTau->setfCore(i, f_core); } diff --git a/Reconstruction/DiTauRec/src/SubjetBuilder.cxx b/Reconstruction/DiTauRec/src/SubjetBuilder.cxx index 69de4de440018307fa9faccbcf4b3c2317a36ea4..ac86a1e94bd5bbc1210537f2a672bc5286084d39 100644 --- a/Reconstruction/DiTauRec/src/SubjetBuilder.cxx +++ b/Reconstruction/DiTauRec/src/SubjetBuilder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration */ #include "DiTauRec/SubjetBuilder.h" @@ -25,12 +25,10 @@ SubjetBuilder::SubjetBuilder(const std::string& type, const IInterface * parent) : DiTauToolBase(type, name, parent), m_Rsubjet(0.2), - m_Nsubjet(4), m_ptmin(10000) { declareInterface<DiTauToolBase > (this); declareProperty("Rsubjet", m_Rsubjet); - declareProperty("Nsubjet", m_Nsubjet); declareProperty("ptminsubjet", m_ptmin); } @@ -40,8 +38,6 @@ SubjetBuilder::~SubjetBuilder() = default; StatusCode SubjetBuilder::initialize() { - // m_SubjetFilter = fastjet::Filter(m_Rsubjet, fastjet::SelectorNHardest(m_Nsubjet)); - return StatusCode::SUCCESS; } @@ -78,12 +74,10 @@ StatusCode SubjetBuilder::execute(DiTauCandidateData * data, std::vector<PseudoJet> vpjClusters; for (const auto *cl: vConst) { - double pt = cl->pt(); - double px = pt*std::cos(cl->phi()); - double py = pt*std::sin(cl->phi()); - double pz = pt*std::sinh(cl->eta()); - double e = std::sqrt(px*px + py*py + pz*pz); - PseudoJet c( px, py, pz, e); + + TLorentzVector temp_p4; + temp_p4.SetPtEtaPhiM(cl->pt(), cl->eta(), cl->phi(), cl->m()); + PseudoJet c( temp_p4.Px(), temp_p4.Py(), temp_p4.Pz(), temp_p4.E()); vpjClusters.push_back(c); }