ATLAS Offline Software
JetTrimming.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "JetRec/JetTrimming.h"
6 
7 #include "fastjet/PseudoJet.hh"
8 #include "fastjet/JetDefinition.hh"
9 #include "fastjet/Selector.hh"
10 #include "JetEDM/PseudoJetVector.h"
11 
13 
14 using namespace JetGrooming;
15 
16 namespace {
17  // tool implementing the operations to convert fastjet::PseudoJet -> xAOD::Jet
18  const static PseudoJetTranslator s_pjTranslator(false, false); // false => do not save jet areas
19 }
20 
21 //**********************************************************************
22 
25 
26  // Unfortunately not possible to do this because there is no
27  // declareProperty overload for CheckedProperty in AsgTool
28  //
29  // Enforce upper/lower limits of Gaudi::Properties
30  // m_rclus.verifier().setBounds(0.,10.);
31  // m_ptfrac.verifier().setBounds(0.,1.);
32  if ( m_rclus < 0.0 || m_rclus > 10.0 ) {
33  ATH_MSG_ERROR("Invalid value " << m_rclus << "for RClus. Allowable range is 0-10");
34  return StatusCode::FAILURE;
35  }
36  if ( m_ptfrac < 0.0 || m_ptfrac > 1.0 ) {
37  ATH_MSG_ERROR("Invalid value " << m_ptfrac << "for PtFrac. Allowable range is 0-1");
38  return StatusCode::FAILURE;
39  }
40 
41  // Define the trimmer
42  m_trimmer = std::make_unique<fastjet::Filter>(fastjet::JetDefinition(fastjet::kt_algorithm, m_rclus),
43  fastjet::SelectorPtFractionMin(m_ptfrac));
44 
45  ATH_MSG_INFO(" Recluster R: " << m_rclus);
46  ATH_MSG_INFO(" pT faction min: " << m_ptfrac);
47 
48  return StatusCode::SUCCESS;
49 }
50 
51 
52 //**********************************************************************
53 
54 void JetTrimming::insertGroomedJet(const xAOD::Jet& parentjet, const PseudoJetContainer& inpjcont, xAOD::JetContainer& outcont, PseudoJetVector& trimpjvec) const {
55 
56  const static SG::AuxElement::Accessor<const fastjet::PseudoJet*> s_pjAcc("PseudoJet");
57  const static SG::AuxElement::ConstAccessor<const fastjet::PseudoJet*> s_pjConstAcc("PseudoJet");
58 
59  // retrieve the PseudoJet from the parent :
60  const fastjet::PseudoJet& parentPJ = *s_pjConstAcc(parentjet);
61 
62  // Trim :
63  fastjet::PseudoJet trimmedPJ = m_trimmer->result(parentPJ) ;
64  ATH_MSG_VERBOSE(" Input cluster sequence: " << parentPJ.associated_cluster_sequence());
65  ATH_MSG_VERBOSE(" Trimmed cluster sequence: " << trimmedPJ.associated_cluster_sequence());
66 
67  // build the xAOD::Jet from the PseudoJet, and put it in the container
68  xAOD::Jet& jet = s_pjTranslator.translate(trimmedPJ, inpjcont, outcont, parentjet);
69  // The vector is resized externally to match the jet container size,
70  // so just fill the corresponding entry
71  trimpjvec[jet.index()] = trimmedPJ; // save a *copy* of this trimmed PJ
72 
73  // decorate with the pointer to the PJ we keep in the evt store.
74  s_pjAcc(jet) = & trimpjvec[jet.index()];
75 
76  int nptrim = trimmedPJ.pieces().size();
78  jet.setAttribute<int>(xAOD::JetAttribute::NTrimSubjets, nptrim);
79  // Need to convert from GaudiProperty
80  jet.setAttribute(xAOD::JetAttribute::RClus, float(m_rclus));
81  jet.setAttribute(xAOD::JetAttribute::PtFrac, float(m_ptfrac));
82  ATH_MSG_VERBOSE("Properties after trimming:");
83  ATH_MSG_VERBOSE(" ncon: " << trimmedPJ.constituents().size() << "/"
84  << parentPJ.constituents().size());
85  ATH_MSG_VERBOSE(" nsub: " << nptrim);
86 }
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::JetAlgorithmType::kt_algorithm
@ kt_algorithm
Definition: JetContainerInfo.h:31
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition: Control/AthContainers/AthContainers/Accessor.h:66
xAOD::JetAttribute::PtFrac
@ PtFrac
Definition: JetAttributes.h:67
PseudoJetVector.h
JetTrimming.h
JetGrooming
Definition: JetGroomer.h:33
xAOD::JetAttribute::RClus
@ RClus
Definition: JetAttributes.h:61
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
PseudoJetContainer
Definition: PseudoJetContainer.h:48
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
JetGrooming::JetTrimming::insertGroomedJet
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override final
Definition: JetTrimming.cxx:54
JetGrooming::JetTrimming::m_trimmer
std::unique_ptr< fastjet::Filter > m_trimmer
Definition: JetTrimming.h:60
PseudoJetTranslator
Definition: PseudoJetTranslator.h:12
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
JetGrooming::JetTrimming::m_ptfrac
Gaudi::Property< float > m_ptfrac
Definition: JetTrimming.h:64
PseudoJetTranslator.h
JetGrooming::JetTrimming::m_rclus
Gaudi::Property< float > m_rclus
Definition: JetTrimming.h:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
JetGrooming::JetTrimming::initialize
StatusCode initialize() override final
Dummy implementation of the initialisation function.
Definition: JetTrimming.cxx:23
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
xAOD::JetAttribute::NTrimSubjets
@ NTrimSubjets
Definition: JetAttributes.h:68
xAOD::JetTransform::Trim
@ Trim
Definition: JetContainerInfo.h:115
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
JetGrooming::JetGroomer::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition: JetGroomer.cxx:16
PseudoJetVector
std::vector< fastjet::PseudoJet > PseudoJetVector
Definition: JetConstituentFiller.cxx:17
xAOD::JetAttribute::TransformType
@ TransformType
Definition: JetAttributes.h:58