FastJet  3.1.0-beta.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Subtractor.hh
1 //FJSTARTHEADER
2 // $Id: Subtractor.hh 3584 2014-08-12 12:40:10Z soyez $
3 //
4 // Copyright (c) 2005-2014, Matteo Cacciari, Gavin P. Salam and Gregory Soyez
5 //
6 //----------------------------------------------------------------------
7 // This file is part of FastJet.
8 //
9 // FastJet is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU General Public License as published by
11 // the Free Software Foundation; either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // The algorithms that underlie FastJet have required considerable
15 // development. They are described in the original FastJet paper,
16 // hep-ph/0512210 and in the manual, arXiv:1111.6097. If you use
17 // FastJet as part of work towards a scientific publication, please
18 // quote the version you use and include a citation to the manual and
19 // optionally also to hep-ph/0512210.
20 //
21 // FastJet is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU General Public License for more details.
25 //
26 // You should have received a copy of the GNU General Public License
27 // along with FastJet. If not, see <http://www.gnu.org/licenses/>.
28 //----------------------------------------------------------------------
29 //FJENDHEADER
30 
31 #ifndef __FASTJET_TOOLS_SUBTRACTOR_HH__
32 #define __FASTJET_TOOLS_SUBTRACTOR_HH__
33 
34 #include "fastjet/tools/Transformer.hh" // to derive Subtractor from Transformer
35 #include "fastjet/tools/BackgroundEstimatorBase.hh" // used as a ctor argument
36 
37 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
38 
39 
40 //----------------------------------------------------------------------
41 /// @ingroup tools_background
42 /// \class Subtractor
43 /// Class that helps perform jet background subtraction.
44 ///
45 /// This class derives from Transformer and makes use of a pointer to
46 /// a BackgroundEstimatorBase object in order to determine the background
47 /// in the vicinity of a given jet and then subtract area*background from
48 /// the jet. It can also be initialised with a specific fixed value for the
49 /// background pt density.
50 ///
51 /// \section input Input conditions
52 ///
53 /// The original jet must have area support (4-vector)
54 ///
55 /// \section output Output/interface
56 ///
57 /// The underlying structure of the returned, subtracted jet
58 /// (i.e. constituents, pieces, etc.) is identical to that of the
59 /// original jet.
60 ///
61 class Subtractor : public Transformer{
62 public:
63  /// define a subtractor based on a BackgroundEstimator
64  Subtractor(BackgroundEstimatorBase * bge) :
65  _bge(bge), _rho(-1.0) { set_defaults(); }
66 
67  /// define a subtractor that uses a fixed value of rho, the background
68  /// pt density per unit area (which must be positive)
69  Subtractor(double rho);
70 
71  /// default constructor
73 
74  /// default dtor
75  virtual ~Subtractor(){};
76 
77  /// @name configuring the behaviour
78  //\{
79  //----------------------------------------------------------------
80 
81  /// reset all parameters to default values
82  ///
83  /// Note: by default, the rho_m term is not included and the safety
84  /// test for the mass is not done. This is mostly for backwards
85  /// compatibility with FastJet 3.0 and is highly likely to change in
86  /// a future release of FastJet
87  void set_defaults();
88 
89  /// when 'use_rho_m' is true, include in the subtraction the
90  /// correction from rho_m, the purely longitudinal,
91  /// particle-mass-induced component of the background density per
92  /// unit area
93  ///
94  /// Note: this will be switched off by default (for backwards
95  /// compatibility with FastJet 3.0) but is highly likely to change
96  /// in a future release of FastJet
97  void set_use_rho_m(bool use_rho_m_in = true){
98  if (_bge == 0) {
99  throw Error("Subtractor: rho_m support works only for Subtractors constructed with background estimator");
100  }
101  _use_rho_m=use_rho_m_in;
102  }
103 
104  /// returns whether or not the rho_m component is used
105  bool use_rho_m() const{ return _use_rho_m;}
106 
107  /// when 'safe_mass' is true, ensure that the mass of the subtracted
108  /// 4-vector remain positive
109  ///
110  /// when true, if the subtracted mass is negative, we return a
111  /// 4-vector with 0 mass, pt and phi from the subtracted 4-vector
112  /// and the rapidity of the original, unsubtracted jet.
113  ///
114  /// Note: this will be switched off by default (for backwards
115  /// compatibility with FastJet 3.0) but is highly likely to change
116  /// in a future release of FastJet
117  void set_safe_mass(bool safe_mass_in=true){ _safe_mass=safe_mass_in;}
118 
119  /// returns whether or not safety tests on the mass are included
120  bool safe_mass() const{ return _safe_mass;}
121 
122  /// This is mostly intended for cherge-hadron-subtracted type of
123  /// events where we wich to use vertex information to improve the
124  /// subtraction.
125  ///
126  /// Given the following parameters:
127  /// \param sel_known_vertex selects the particles with a
128  /// known vertex origin
129  /// \param sel_leading_vertex amongst the particles with a
130  /// known vertex origin, select those
131  /// coming from the leading vertex
132  /// Momentum identified as coming from the leading vertex will be
133  /// kept, momentum identified as coming from a non-leading vertex
134  /// will be eliminated and a regular area-median subtraction will be
135  /// applied on the 4-vector sum of the particles with unknown vertex
136  /// origin.
137  ///
138  /// When this is set, we shall ensure that the pt of the subtracted
139  /// 4-vector is at least the pt of the particles that are known to
140  /// come from the leading vertex (if it fails, subtraction returns
141  /// the component that is known to come from the leading vertex ---
142  /// or, the original unsubtracted jet if it contains no particles
143  /// from the leading vertex). Furthermore, when safe_mass() is on, we
144  /// also impose a similar constraint on the mass of the subtracted
145  /// 4-vector (if the test fails, the longitudinal part of the
146  /// subtracted 4-vector is taken from the component that is known to
147  /// come from the leading vertex).
148  void set_known_selectors(const Selector &sel_known_vertex,
149  const Selector &sel_leading_vertex){
150  _sel_known_vertex = sel_known_vertex;
151  _sel_leading_vertex = sel_leading_vertex;
152  }
153 
154  //\}
155 
156  /// @name description and action
157  //\{
158  //----------------------------------------------------------------
159 
160  /// returns a jet that's subtracted
161  ///
162  /// \param jet the jet that is to be subtracted
163  /// \return the subtracted jet
164  virtual PseudoJet result(const PseudoJet & jet) const;
165 
166  /// class description
167  virtual std::string description() const;
168 
169  //\}
170 protected:
171  /// compute the 4-vector that should be subtracted from the given
172  /// jet
173  PseudoJet _amount_to_subtract(const PseudoJet &jet) const;
174 
175  /// the tool used to estimate the background
176  /// if has to be mutable in case its underlying selector takes a reference jet
177  mutable BackgroundEstimatorBase * _bge;
178  /// the fixed value of rho to use if the user has selected that option
179  double _rho;
180 
181  // configuration parameters/flags
182  bool _use_rho_m; ///< include the rho_m correction
183  bool _safe_mass; ///< ensures that the subtracted mass is +ve
184 
185  Selector _sel_known_vertex; ///< selects the particles with a
186  ///< known vertex origin
187  Selector _sel_leading_vertex; ///< amongst the particles with a
188  ///< known vertex origin, select those
189  ///< coming from the leading vertex
190 
191  /// a value of rho that is used as a default to label that the stored
192  /// rho is not valid for subtraction.
193  //
194  // NB: there are two reasons for not having the value written here:
195  // 1) that it caused problems on karnak with g++ 4.0.1 and 2) that
196  // we anyway like -infinity as a default, and since that's a function,
197  // that's not allowed in an include file.
198  static const double _invalid_rho;
199 
200  mutable LimitedWarning _unused_rho_m_warning;
201 };
202 
203 FASTJET_END_NAMESPACE
204 
205 #endif // __FASTJET_TOOLS_SUBTRACTOR_HH__
206