Fork me on GitHub

source: git/external/fastjet/contribs/RecursiveTools/SoftDrop.hh@ 3b99510

ImprovedOutputFile Timing dual_readout llp
Last change on this file since 3b99510 was 1f1f858, checked in by Michele Selvaggi <michele.selvaggi@…>, 10 years ago

added RecursiveTools package from fastjet contribs

  • Property mode set to 100644
File size: 5.8 KB
Line 
1// $Id: SoftDrop.hh 686 2014-06-14 03:25:09Z jthaler $
2//
3// Copyright (c) 2014-, Gregory Soyez, Jesse Thaler
4// based on arXiv:1402.2657 by Andrew J. Larkoski, Simone Marzani,
5// Gregory Soyez, Jesse Thaler
6//
7//----------------------------------------------------------------------
8// This file is part of FastJet contrib.
9//
10// It is free software; you can redistribute it and/or modify it under
11// the terms of the GNU General Public License as published by the
12// Free Software Foundation; either version 2 of the License, or (at
13// your option) any later version.
14//
15// It is distributed in the hope that it will be useful, but WITHOUT
16// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18// License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with this code. If not, see <http://www.gnu.org/licenses/>.
22//----------------------------------------------------------------------
23
24#ifndef __FASTJET_CONTRIB_SOFTDROP_HH__
25#define __FASTJET_CONTRIB_SOFTDROP_HH__
26
27#include "RecursiveSymmetryCutBase.hh"
28
29FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
30
31
32namespace contrib{
33
34//------------------------------------------------------------------------
35/// \class SoftDrop
36/// An implementation of the SoftDrop from arXiv:1402.2657.
37///
38/// For the basic functionalities, we refer the reader to the
39/// documentation of the RecursiveSymmetryCutBase from which SoftDrop
40/// inherits. Here, we mostly put the emphasis on things specific to
41/// SoftDrop:
42///
43/// - the cut applied recursively is
44/// \f[
45/// z > z_{\rm cut} (\theta/R0)^\beta
46/// \f]
47/// with z the asymmetry measure and \f$\theta\f$ the geometrical
48/// distance between the two subjets. R0 is set to 1 by default.
49///
50/// - by default, we work in "grooming mode" i.s. if no substructure
51/// is found, we return a jet made of a single parton. Note that
52/// this behaviour differs from the mMDT (and can be a source of
53/// differences when running SoftDrop with beta=0.)
54///
55class SoftDrop : public RecursiveSymmetryCutBase {
56public:
57 /// Simplified constructor. This takes the value of the "beta"
58 /// parameter and the symmetry cut (applied by default on the
59 /// scalar_z variable, as for the mMDT). It also takes an optional
60 /// subtractor.
61 ///
62 /// If the (optional) pileup subtractor can be supplied, then see
63 /// also the documentation for the set_input_jet_is_subtracted() member
64 /// function.
65 ///
66 /// \param beta the value of the beta parameter
67 /// \param symmetry_cut the value of the cut on the symmetry measure
68 /// \param R0 the angular distance normalisation [1 by default]
69 SoftDrop(double beta,
70 double symmetry_cut,
71 double R0 = 1,
72 const FunctionOfPseudoJet<PseudoJet> * subtractor = 0) :
73 RecursiveSymmetryCutBase(scalar_z, // the default SymmetryMeasure
74 std::numeric_limits<double>::infinity(), // default is no mass drop
75 larger_pt, // the default RecursionChoice
76 subtractor),
77 _beta(beta), _symmetry_cut(symmetry_cut), _R0sqr(R0*R0) {
78 // change the default: use grooming mode
79 set_grooming_mode();
80 }
81
82 /// Full constructor, which takes the following parameters:
83 ///
84 /// \param beta the value of the beta parameter
85 /// \param symmetry_cut the value of the cut on the symmetry measure
86 /// \param symmetry_measure the choice of measure to use to estimate the symmetry
87 /// \param R0 the angular distance normalisation [1 by default]
88 /// \param mu_cut the maximal allowed value of mass drop variable mu = m_heavy/m_parent
89 /// \param recursion_choice the strategy used to decide which subjet to recurse into
90 /// \param subtractor an optional pointer to a pileup subtractor (ignored if zero)
91 ///
92 /// The default values provided for this constructor are suited to
93 /// obtain the SoftDrop as discussed in arXiv:1402.2657:
94 /// - no mass drop is requested
95 /// - recursion follows the branch with the largest pt
96 /// The symmetry measure has to be specified (scalar_z is the recommended value)
97 ///
98 /// Notes:
99 ///
100 /// - by default, SoftDrop will recluster the jet with the
101 /// Cambridge/Aachen algorithm if it is not already the case. This
102 /// behaviour can be changed using the "set_reclustering" method
103 /// defined below
104 ///
105 SoftDrop(double beta,
106 double symmetry_cut,
107 SymmetryMeasure symmetry_measure,
108 double R0 = 1.0,
109 double mu_cut = std::numeric_limits<double>::infinity(),
110 RecursionChoice recursion_choice = larger_pt,
111 const FunctionOfPseudoJet<PseudoJet> * subtractor = 0) :
112 RecursiveSymmetryCutBase(symmetry_measure, mu_cut, recursion_choice, subtractor),
113 _beta(beta), _symmetry_cut(symmetry_cut), _R0sqr(R0*R0)
114 {}
115
116 /// default destructor
117 virtual ~SoftDrop(){}
118
119protected:
120
121 // Unlike MMDT, the SoftDrop symmetry_cut_fn depends on the subjet kinematics
122 // since the symmetry condition depends on the DeltaR between subjets.
123 virtual double symmetry_cut_fn(const PseudoJet & /* p1 */,
124 const PseudoJet & /* p2 */) const;
125 virtual std::string symmetry_cut_description() const;
126
127private:
128 double _beta; ///< the power of the angular distance to be used
129 ///< in the symmetry condition
130 double _symmetry_cut; ///< the value of zcut (the prefactor in the asymmetry cut)
131 double _R0sqr; ///< normalisation of the angular distance
132 ///< (typically set to the jet radius, 1 by default)
133};
134
135} // namespace contrib
136
137FASTJET_END_NAMESPACE
138
139#endif // __FASTJET_CONTRIB_SOFTDROP_HH__
Note: See TracBrowser for help on using the repository browser.