ATLAS Offline Software
Loading...
Searching...
No Matches
JetSoftDropTools.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "fastjet/PseudoJet.hh"
8#include "fastjet/tools/Filter.hh"
9#include "fastjet/contrib/SoftDrop.hh"
10#include "fastjet/contrib/RecursiveSoftDrop.hh"
11#include "fastjet/contrib/BottomUpSoftDrop.hh"
12#include "fastjet/Selector.hh"
13
15
17
18using namespace JetGrooming;
19
20namespace {
21 // tool implementing the operations to convert fastjet::PseudoJet -> xAOD::Jet
22 const static PseudoJetTranslator s_pjTranslator(false, false); // false => do not save jet areas
23
24
25
27 template<typename SDHELPER>
28 xAOD::Jet & buildAndInsertSDJet(SDHELPER& sdhelper, const xAOD::Jet& parentjet, const PseudoJetContainer& inpjcont, xAOD::JetContainer& outcont, PseudoJetVector& groomedpjvec ){
29
30 const static SG::AuxElement::Accessor<const fastjet::PseudoJet*> s_pjAcc("PseudoJet");
31 const static SG::AuxElement::ConstAccessor<const fastjet::PseudoJet*> s_pjConstAcc("PseudoJet");
32
33 // retrieve the PseudoJet from the parent :
34 const fastjet::PseudoJet& parentPJ = *s_pjConstAcc(parentjet);
35
36 // call the sdhelper to build the groomed PSeudoJet
37 fastjet::PseudoJet groomedPJ = sdhelper(parentPJ);
38
39 // build the xAOD::Jet from the PseudoJet, and put it in the container
40 xAOD::Jet& jet = s_pjTranslator.translate(groomedPJ, inpjcont, outcont, parentjet);
41
42 // now assign the groomedPJ to its vector
43 // Note: the caller (JetGroomer) guarantees groomedpjvec has the correct size,
44 // however, it is not 100% sure (?) that parentjet.index()==jet.index(), so we can't assign before
45 groomedpjvec[jet.index()] = groomedPJ;
46
47 // decorate with the pointer to the PJ we keep in the evt store.
48 // (the decoration is done in the PseudoJetTranslator but we have to redo-it here since we must point to
49 // the instance instance inside groomedpjvec)
50 s_pjAcc(jet) = & groomedpjvec[jet.index()];
51
52 return jet;
53 }
54}
55
56// a shortcut to check variable range with a 1-liner (We can't use CheckedProperty...)
57#define CHECK_VAR_RANGE( name, var, expr ) \
58 if( ! ( expr ) ) { \
59 ATH_MSG_ERROR("Property "<< name << " = "<< var << " out of range"); \
60 return StatusCode::SUCCESS; }
61
62//**********************************************************************
63
66
67 CHECK_VAR_RANGE("ZCut", m_zcut, (m_zcut>=0)&&(m_zcut<=10.) );
68 CHECK_VAR_RANGE("beta", m_beta, (m_beta>=0)&&(m_beta<=10.) );
69 CHECK_VAR_RANGE("R0", m_R0, (m_R0>=0)&&(m_R0<=10.) );
70
71 return StatusCode::SUCCESS;
72}
73
74
75//**********************************************************************
78 CHECK_VAR_RANGE("N", m_N, (m_zcut>-1) );
79 return StatusCode::SUCCESS;
80}
81
82
83void SoftDrop::insertGroomedJet(const xAOD::Jet& parentjet, const PseudoJetContainer& inpjcont, xAOD::JetContainer& outcont, PseudoJetVector& groomedpjvec) const {
84
85 //configure soft drop tool
86 // see http://fastjet.hepforge.org/svn/contrib/contribs/RecursiveTools/tags/1.0.0/SoftDrop.hh
87 fastjet::contrib::SoftDrop softdropper(m_beta, m_zcut, m_R0);
88
89 xAOD::Jet & jet = buildAndInsertSDJet(softdropper,
90 parentjet, inpjcont, outcont, groomedpjvec);
91
92 if(m_saveSDatt) {
93 setSoftDropAttributes(jet, groomedpjvec[jet.index()].pieces().size() );
94 }
95}
96
97void SoftDrop::setSoftDropAttributes(xAOD::Jet& groomedjet, int nsdsubjets) const {
98 groomedjet.setAttribute<float>("ZCut", m_zcut);
99 groomedjet.setAttribute<float>("SoftDropBeta", m_beta);
100 groomedjet.setAttribute<float>("SoftDropR0", m_R0);
101 groomedjet.setAttribute<int>("NSoftDropSubjets", nsdsubjets);
102}
103
104
105
106
107//**********************************************************************
108
109void RecSoftDrop::insertGroomedJet(const xAOD::Jet& parentjet, const PseudoJetContainer& inpjcont, xAOD::JetContainer& outcont, PseudoJetVector& groomedpjvec) const {
110
111 //configure recursive soft drop tool
112 //https://fastjet.hepforge.org/trac/browser/contrib/contribs/RecursiveTools/tags/2.0.0-beta1
113 fastjet::contrib::RecursiveSoftDrop softdropper(m_beta, m_zcut, m_N, m_R0);
114
115 xAOD::Jet & jet = buildAndInsertSDJet(softdropper,
116 parentjet, inpjcont, outcont, groomedpjvec);
117
118 if(m_saveSDatt) {
119 setSoftDropAttributes(jet, groomedpjvec[jet.index()].pieces().size() );
120 jet.setAttribute<int>("RSoftDropN", m_N);
121 }
122}
123
124
125
126//**********************************************************************
127void BottomUpSoftDrop::insertGroomedJet(const xAOD::Jet& parentjet, const PseudoJetContainer& inpjcont, xAOD::JetContainer& outcont, PseudoJetVector& groomedpjvec) const {
128
129 //configure recursive soft drop tool
130 //https://fastjet.hepforge.org/trac/browser/contrib/contribs/RecursiveTools/tags/2.0.0-beta1
131 fastjet::contrib::BottomUpSoftDrop softdropper(m_beta, m_zcut, m_R0);
132
133 xAOD::Jet & jet = buildAndInsertSDJet(softdropper,
134 parentjet, inpjcont, outcont, groomedpjvec);
135
136 if(m_saveSDatt) {
137 setSoftDropAttributes(jet, groomedpjvec[jet.index()].pieces().size() );
138 }
139}
140
#define ATH_CHECK
Evaluate an expression and check for errors.
std::vector< fastjet::PseudoJet > PseudoJetVector
#define CHECK_VAR_RANGE(name, var, expr)
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override final
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Gaudi::Property< int > m_N
StatusCode initialize() override final
Dummy implementation of the initialisation function.
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override final
Gaudi::Property< float > m_R0
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override
Gaudi::Property< float > m_beta
void setSoftDropAttributes(xAOD::Jet &groomedjet, int nsdsubjets) const
StatusCode initialize() override
Dummy implementation of the initialisation function.
Gaudi::Property< bool > m_saveSDatt
Gaudi::Property< float > m_zcut
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:569
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
void setAttribute(const std::string &name, const T &v)
Jet_v1 Jet
Definition of the current "jet version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".