[b7b836a] | 1 | // $Id: ModifiedMassDropTagger.hh 1032 2017-07-31 14:20:03Z gsoyez $
|
---|
[1f1f858] | 2 | //
|
---|
| 3 | // Copyright (c) 2014-, Gavin P. Salam
|
---|
| 4 | // based on arXiv:1307.007 by Mrinal Dasgupta, Simone Marzani and Gavin P. Salam
|
---|
| 5 | //
|
---|
| 6 | //----------------------------------------------------------------------
|
---|
| 7 | // This file is part of FastJet contrib.
|
---|
| 8 | //
|
---|
| 9 | // It is free software; you can redistribute it and/or modify it under
|
---|
| 10 | // the terms of the GNU General Public License as published by the
|
---|
| 11 | // Free Software Foundation; either version 2 of the License, or (at
|
---|
| 12 | // your option) any later version.
|
---|
| 13 | //
|
---|
| 14 | // It is distributed in the hope that it will be useful, but WITHOUT
|
---|
| 15 | // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
---|
| 16 | // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
---|
| 17 | // License for more details.
|
---|
| 18 | //
|
---|
| 19 | // You should have received a copy of the GNU General Public License
|
---|
| 20 | // along with this code. If not, see <http://www.gnu.org/licenses/>.
|
---|
| 21 | //----------------------------------------------------------------------
|
---|
| 22 |
|
---|
| 23 | #ifndef __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|
| 24 | #define __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|
| 25 |
|
---|
| 26 | #include "RecursiveSymmetryCutBase.hh"
|
---|
| 27 |
|
---|
| 28 | FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
|
---|
| 29 |
|
---|
| 30 | namespace contrib{
|
---|
| 31 |
|
---|
| 32 | //------------------------------------------------------------------------
|
---|
| 33 | /// \class ModifiedMassDropTagger
|
---|
| 34 | /// An implementation of the modified Mass-Drop Tagger from arXiv:1307.0007.
|
---|
| 35 | ///
|
---|
| 36 | class ModifiedMassDropTagger : public RecursiveSymmetryCutBase {
|
---|
| 37 | public:
|
---|
| 38 |
|
---|
| 39 | /// Simplified constructor, which takes just a symmetry cut (applied
|
---|
| 40 | /// on the scalar_z variable) and an optional subtractor.
|
---|
| 41 | ///
|
---|
| 42 | /// In this incarnation the ModifiedMassDropTagger is a bit of a
|
---|
| 43 | /// misnomer, because there is no mass-drop condition
|
---|
| 44 | /// applied. Recursion into the jet structure chooses the prong with
|
---|
| 45 | /// largest pt. (Results from arXiv:1307.0007 were based on the
|
---|
| 46 | /// largest mt, but this only makes a difference for values of the
|
---|
| 47 | /// symmetry_cut close to 1/2).
|
---|
| 48 | ///
|
---|
| 49 | /// If the (optional) pileup subtractor can be supplied, then see
|
---|
| 50 | /// also the documentation for the set_input_jet_is_subtracted() member
|
---|
| 51 | /// function.
|
---|
| 52 | ///
|
---|
| 53 | /// NB: The configuration of MMDT provided by this constructor is
|
---|
| 54 | /// probably the most robust for use with subtraction.
|
---|
| 55 | ModifiedMassDropTagger(double symmetry_cut,
|
---|
| 56 | const FunctionOfPseudoJet<PseudoJet> * subtractor = 0
|
---|
| 57 | ) :
|
---|
| 58 | RecursiveSymmetryCutBase(scalar_z, // the default SymmetryMeasure
|
---|
| 59 | std::numeric_limits<double>::infinity(), // the default is no mass drop
|
---|
| 60 | larger_pt, // the default RecursionChoice
|
---|
| 61 | subtractor),
|
---|
| 62 | _symmetry_cut(symmetry_cut)
|
---|
| 63 | {}
|
---|
| 64 |
|
---|
| 65 | /// Full constructor, which takes the following parameters:
|
---|
| 66 | ///
|
---|
| 67 | /// \param symmetry_cut the value of the cut on the symmetry measure
|
---|
| 68 | /// \param symmetry_measure the choice of measure to use to estimate the symmetry
|
---|
| 69 | /// \param mu_cut the maximal allowed value of mass drop variable mu = m_heavy/m_parent
|
---|
| 70 | /// \param recursion_choice the strategy used to decide which subjet to recurse into
|
---|
| 71 | /// \param subtractor an optional pointer to a pileup subtractor (ignored if zero)
|
---|
| 72 | ///
|
---|
| 73 | /// To obtain the mMDT as discussed in arXiv:1307.0007, use an
|
---|
| 74 | /// symmetry_measure that's one of the following
|
---|
| 75 | ///
|
---|
| 76 | /// - RecursiveSymmetryCutBase::y (for a cut on y)
|
---|
| 77 | /// - RecursiveSymmetryCutBase::scalar_z (for a cut on z)
|
---|
| 78 | ///
|
---|
| 79 | /// and use the default recursion choice of
|
---|
| 80 | /// RecursiveSymmetryCutBase::larger_pt (larger_mt will give something
|
---|
| 81 | /// very similar, while larger_m will give the behaviour of the
|
---|
| 82 | /// original, but now deprecated MassDropTagger)
|
---|
| 83 | ///
|
---|
| 84 | /// Notes:
|
---|
| 85 | ///
|
---|
| 86 | /// - By default the ModifiedMassDropTagger will relcuster the jets
|
---|
| 87 | /// with the C/A algorithm (if needed).
|
---|
| 88 | ///
|
---|
| 89 | /// - the mu_cut parameter is mostly irrelevant when it's taken
|
---|
| 90 | /// larger than about 1/2: the tagger is then one that cuts
|
---|
| 91 | /// essentially on the (a)symmetry of the jet's momentum
|
---|
| 92 | /// sharing. The default value of infinity turns off its use
|
---|
| 93 | /// entirely
|
---|
| 94 | ModifiedMassDropTagger(double symmetry_cut,
|
---|
| 95 | SymmetryMeasure symmetry_measure,
|
---|
| 96 | double mu_cut = std::numeric_limits<double>::infinity(),
|
---|
| 97 | RecursionChoice recursion_choice = larger_pt,
|
---|
| 98 | const FunctionOfPseudoJet<PseudoJet> * subtractor = 0
|
---|
| 99 | ) :
|
---|
| 100 | RecursiveSymmetryCutBase(symmetry_measure, mu_cut, recursion_choice, subtractor),
|
---|
| 101 | _symmetry_cut(symmetry_cut)
|
---|
| 102 | {}
|
---|
| 103 |
|
---|
| 104 | /// default destructor
|
---|
| 105 | virtual ~ModifiedMassDropTagger(){}
|
---|
| 106 |
|
---|
[b7b836a] | 107 | //----------------------------------------------------------------------
|
---|
| 108 | // access to class info
|
---|
| 109 | double symmetry_cut() const { return _symmetry_cut; }
|
---|
| 110 |
|
---|
[1f1f858] | 111 | protected:
|
---|
| 112 |
|
---|
| 113 | /// The symmetry cut function for MMDT returns just a constant, since the cut value
|
---|
| 114 | /// has no dependence on the subjet kinematics
|
---|
| 115 | virtual double symmetry_cut_fn(const PseudoJet & /* p1 */,
|
---|
[b7b836a] | 116 | const PseudoJet & /* p2 */,
|
---|
| 117 | void *extra_parameters = 0
|
---|
[1f1f858] | 118 | ) const {return _symmetry_cut;}
|
---|
| 119 | virtual std::string symmetry_cut_description() const;
|
---|
| 120 |
|
---|
| 121 | double _symmetry_cut;
|
---|
| 122 | };
|
---|
| 123 |
|
---|
| 124 | } // namespace contrib
|
---|
| 125 |
|
---|
| 126 | FASTJET_END_NAMESPACE
|
---|
| 127 |
|
---|
| 128 | #endif // __FASTJET_CONTRIB_MODIFIEDMASSDROPTAGGER_HH__
|
---|