/usr/include/fastjet/SISConePlugin.hh is in libfastjetplugins-dev 3.0.6+dfsg-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | #ifndef __SISCONEPLUGIN_HH__
#define __SISCONEPLUGIN_HH__
#include "SISConeBasePlugin.hh"
// forward declaration of the siscone classes we'll need
namespace siscone{
class Csiscone;
}
FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh
//----------------------------------------------------------------------
//
/// @ingroup plugins
/// \class SISConePlugin
/// Implementation of the SISCone algorithm (plugin for fastjet v2.1 upwards)
///
/// SISConePlugin is a plugin for fastjet (v2.1 upwards) that provides
/// an interface to the seedless infrared safe cone jet finder by
/// Gregory Soyez and Gavin Salam.
///
/// SISCone uses geometrical techniques to exhaustively consider all
/// possible distinct cones. It then finds out which ones are stable
/// and sends the result to the Tevatron Run-II type split-merge
/// procedure for overlapping cones.
///
/// Four parameters govern the "physics" of the algorithm:
///
/// - the cone_radius (this should be self-explanatory!)
///
/// - the overlap_threshold is the parameter which dictates how much
/// two jets must overlap (pt_overlap/min(pt1,pt2)) if they are to be
/// merged
///
/// - Not all particles are in stable cones in the first round of
/// searching for stable cones; one can therefore optionally have the
/// the jet finder carry out additional passes of searching for
/// stable cones among particles that were in no stable cone in
/// previous passes --- the maximum number of passes carried out is
/// n_pass_max. If this is zero then additional passes are carried
/// out until no new stable cones are found.
///
/// - Protojet ptmin: protojets that are below this ptmin
/// (default = 0) are discarded before each iteration of the
/// split-merge loop.
///
/// One parameter governs some internal algorithmic shortcuts:
///
/// - if "caching" is turned on then the last event clustered by
/// siscone is stored -- if the current event is identical and the
/// cone_radius and n_pass_mass are identical, then the only part of
/// the clustering that needs to be rerun is the split-merge part,
/// leading to significant speed gains; there is a small (O(N) storage
/// and speed) penalty for caching, so it should be kept off
/// (default) if only a single overlap_threshold is used.
///
/// The final jets can be accessed by requestion the
/// inclusive_jets(...) from the ClusterSequence object. Note that
/// these PseudoJets have their user_index() set to the index of the
/// pass in which they were found (first pass = 0). NB: This does not
/// currently work for jets that consist of a single particle.
///
/// For further information on the details of the algorithm see the
/// SISCone paper, arXiv:0704.0292 [JHEP 0705:086,2007].
///
/// For documentation about the implementation, see the
/// siscone/doc/html/index.html file.
//
class SISConePlugin : public SISConeBasePlugin{
public:
/// enum for the different split-merge scale choices;
/// Note that order _must_ be the same as in siscone
enum SplitMergeScale {SM_pt, ///< transverse momentum (E-scheme), IR unsafe
SM_Et, ///< transverse energy (E-scheme), not long. boost invariant
///< original run-II choice [may not be implemented]
SM_mt, ///< transverse mass (E-scheme), IR safe except
///< in decays of two identical narrow heavy particles
SM_pttilde ///< pt-scheme pt = \sum_{i in jet} |p_{ti}|, should
///< be IR safe in all cases
};
/// Main constructor for the SISCone Plugin class.
///
/// Note: wrt version prior to 2.4 this constructor differs in that a
/// the default value has been removed for overlap_threshold. The
/// former has been removed because the old default of 0.5 was found
/// to be unsuitable in high-noise environments; so the user should
/// now explicitly think about the value for this -- we recommend
/// 0.75.
///
SISConePlugin (double cone_radius_in,
double overlap_threshold_in,
int n_pass_max_in = 0,
double protojet_ptmin_in = 0.0,
bool caching_in = false,
SplitMergeScale split_merge_scale_in = SM_pttilde,
double split_merge_stopping_scale_in = 0.0){
_cone_radius = cone_radius_in;
_overlap_threshold = overlap_threshold_in;
_n_pass_max = n_pass_max_in;
_protojet_ptmin = protojet_ptmin_in;
_caching = caching_in;
_split_merge_scale = split_merge_scale_in;
_split_merge_stopping_scale = split_merge_stopping_scale_in;
_ghost_sep_scale = 0.0;
_use_pt_weighted_splitting = false;}
/// Backwards compatible constructor for the SISCone Plugin class
SISConePlugin (double cone_radius_in,
double overlap_threshold_in,
int n_pass_max_in,
double protojet_ptmin_in,
bool caching_in,
bool split_merge_on_transverse_mass_in){
_cone_radius = cone_radius_in;
_overlap_threshold = overlap_threshold_in;
_n_pass_max = n_pass_max_in;
_protojet_ptmin = protojet_ptmin_in;
_caching = caching_in;
_split_merge_stopping_scale = 0.0;
_split_merge_scale = split_merge_on_transverse_mass_in ? SM_mt : SM_pttilde;
_ghost_sep_scale = 0.0;}
/// backwards compatible constructor for the SISCone Plugin class
/// (avoid using this in future).
SISConePlugin (double cone_radius_in,
double overlap_threshold_in,
int n_pass_max_in,
bool caching_in) {
_cone_radius = cone_radius_in;
_overlap_threshold = overlap_threshold_in;
_n_pass_max = n_pass_max_in;
_protojet_ptmin = 0.0;
_caching = caching_in;
_split_merge_scale = SM_mt;
_split_merge_stopping_scale = 0.0;
_ghost_sep_scale = 0.0;
_use_pt_weighted_splitting = false;}
/// minimum pt for a protojet to be considered in the split-merge step
/// of the algorithm
double protojet_ptmin () const {return _protojet_ptmin ;}
/// return the scale to be passed to SISCone as the protojet_ptmin
/// -- if we have a ghost separation scale that is above the
/// protojet_ptmin, then the ghost_separation_scale becomes the
/// relevant one to use here
double protojet_or_ghost_ptmin () const {return std::max(_protojet_ptmin,
_ghost_sep_scale);}
/// indicates scale used in split-merge
SplitMergeScale split_merge_scale() const {return _split_merge_scale;}
/// sets scale used in split-merge
void set_split_merge_scale(SplitMergeScale sms) {_split_merge_scale = sms;}
/// indicates whether the split-merge orders on transverse mass or not.
/// retained for backwards compatibility with 2.1.0b3
bool split_merge_on_transverse_mass() const {return _split_merge_scale == SM_mt ;}
void set_split_merge_on_transverse_mass(bool val) {
_split_merge_scale = val ? SM_mt : SM_pt;}
/// indicates whether the split-merge orders on transverse mass or not.
/// retained for backwards compatibility with 2.1.0b3
bool split_merge_use_pt_weighted_splitting() const {return _use_pt_weighted_splitting;}
void set_split_merge_use_pt_weighted_splitting(bool val) {
_use_pt_weighted_splitting = val;}
// the things that are required by base class
virtual std::string description () const;
virtual void run_clustering(ClusterSequence &) const ;
protected:
virtual void reset_stored_plugin() const;
private:
double _protojet_ptmin;
SplitMergeScale _split_merge_scale;
bool _use_pt_weighted_splitting;
// part needed for the cache
// variables for caching the results and the input
static std::auto_ptr<SISConePlugin > stored_plugin;
static std::auto_ptr<std::vector<PseudoJet> > stored_particles;
static std::auto_ptr<siscone::Csiscone > stored_siscone;
};
//======================================================================
/// @ingroup extra_info
/// \class SISConeExtras
/// Class that provides extra information about a SISCone clustering
class SISConeExtras : public SISConeBaseExtras {
public:
/// constructor
// it just initialises the pass information
SISConeExtras(int nparticles)
: SISConeBaseExtras(nparticles){}
/// access to the siscone jet def plugin (more convenient than
/// getting it from the original jet definition, because here it's
/// directly of the right type (rather than the base type)
const SISConePlugin* jet_def_plugin() const {
return dynamic_cast<const SISConePlugin*>(_jet_def_plugin);
}
private:
// let us be written to by SISConePlugin
friend class SISConePlugin;
};
FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh
#endif // __SISCONEPLUGIN_HH__
|