00001 #ifndef __SISCONEPLUGIN_HH__
00002 #define __SISCONEPLUGIN_HH__
00003
00004 #include "fastjet/JetDefinition.hh"
00005 #include "fastjet/ClusterSequence.hh"
00006 #include <vector>
00007 #include <memory>
00008
00009
00010
00011 namespace siscone {
00012 class Csiscone;
00013 }
00014
00015
00016 FASTJET_BEGIN_NAMESPACE
00017
00018
00019 class PseudoJet;
00020
00021
00022
00074
00075 class SISConePlugin : public JetDefinition::Plugin {
00076 public:
00077
00079 SISConePlugin (double cone_radius,
00080 double overlap_threshold = 0.5,
00081 int n_pass_max = 1,
00082 double protojet_ptmin = 0.0,
00083 bool caching = false,
00084 bool split_merge_on_transverse_mass = true) :
00085 _cone_radius (cone_radius ),
00086 _overlap_threshold (overlap_threshold ),
00087 _n_pass_max (n_pass_max ),
00088 _protojet_ptmin (protojet_ptmin),
00089 _caching (caching),
00090 _split_merge_on_transverse_mass (split_merge_on_transverse_mass) {}
00091
00094 SISConePlugin (double cone_radius,
00095 double overlap_threshold,
00096 int n_pass_max,
00097 bool caching ) :
00098 _cone_radius (cone_radius ),
00099 _overlap_threshold (overlap_threshold ),
00100 _n_pass_max (n_pass_max ),
00101 _protojet_ptmin (0.0),
00102 _caching (caching),
00103 _split_merge_on_transverse_mass(true) {}
00104
00106 SISConePlugin (const SISConePlugin & plugin) {
00107 *this = plugin;
00108 }
00109
00111 double cone_radius () const {return _cone_radius ;}
00112
00115 double overlap_threshold () const {return _overlap_threshold ;}
00116
00119 int n_pass_max () const {return _n_pass_max ;}
00120
00123 double protojet_ptmin () const {return _protojet_ptmin ;}
00124
00126 bool split_merge_on_transverse_mass() const {return _split_merge_on_transverse_mass ;}
00127 void set_split_merge_on_transverse_mass(bool val) {
00128 _split_merge_on_transverse_mass = val;}
00129
00131 bool caching() const {return _caching ;}
00132
00133
00134 virtual std::string description () const;
00135 virtual void run_clustering(ClusterSequence &) const;
00136
00137 private:
00138 double _cone_radius, _overlap_threshold;
00139 int _n_pass_max;
00140 double _protojet_ptmin;
00141 bool _caching, _split_merge_on_transverse_mass;
00142
00143
00144 static std::auto_ptr<SISConePlugin > stored_plugin;
00145 static std::auto_ptr<std::vector<PseudoJet> > stored_particles;
00146 static std::auto_ptr<siscone::Csiscone > stored_siscone;
00147
00148 };
00149
00150
00151
00153 class SISConeExtras : public ClusterSequence::Extras {
00154 public:
00156 const std::vector<PseudoJet> & protocones() const {return _protocones;}
00157
00161 const SISConePlugin * jet_def_plugin() const {return _jet_def_plugin;}
00162
00165 std::string description() const;
00166
00170 inline double most_ambiguous_split() const {return _most_ambiguous_split;}
00171
00172 private:
00173 std::vector<PseudoJet> _protocones;
00174 const SISConePlugin * _jet_def_plugin;
00175 double _most_ambiguous_split;
00176
00177 friend class SISConePlugin;
00178 };
00179
00180
00181 FASTJET_END_NAMESPACE
00182
00183 #endif // __SISCONEPLUGIN_HH__
00184