00001 #ifndef __SISCONESPHERICALPLUGIN_HH__
00002 #define __SISCONESPHERICALPLUGIN_HH__
00003
00004 #include "SISConeBasePlugin.hh"
00005
00006
00007 namespace siscone_spherical{
00008 class CSphsiscone;
00009 };
00010
00011
00012 FASTJET_BEGIN_NAMESPACE
00013
00014
00015
00093
00094 class SISConeSphericalPlugin : public SISConeBasePlugin{
00095 public:
00096
00099 enum SplitMergeScale {SM_E,
00100 SM_Etilde
00101 };
00102
00103
00107 SISConeSphericalPlugin (double cone_radius,
00108 double overlap_threshold,
00109 int n_pass_max = 0,
00110 double protojet_Emin = 0.0,
00111 bool caching = false,
00112 SplitMergeScale split_merge_scale = SM_Etilde,
00113 double split_merge_stopping_scale = 0.0){
00114 _cone_radius =cone_radius;
00115 _overlap_threshold =overlap_threshold;
00116 _n_pass_max =n_pass_max;
00117 _protojet_Emin =protojet_Emin;
00118 _caching =caching;
00119 _split_merge_scale =split_merge_scale;
00120 _split_merge_stopping_scale = split_merge_stopping_scale;
00121 _ghost_sep_scale = 0.0;
00122 _use_E_weighted_splitting = false;
00123 }
00124
00127 double protojet_Emin () const {return _protojet_Emin ;}
00128
00133 double protojet_or_ghost_Emin () const {return std::max(_protojet_Emin,
00134 _ghost_sep_scale);}
00135
00137 SplitMergeScale split_merge_scale() const {return _split_merge_scale;}
00139 void set_split_merge_scale(SplitMergeScale sms) {_split_merge_scale = sms;}
00140
00142 bool split_merge_use_E_weighted_splitting() const {return _use_E_weighted_splitting;}
00143 void set_split_merge_use_E_weighted_splitting(bool val) {
00144 _use_E_weighted_splitting = val;}
00145
00148 virtual bool supports_ghosted_passive_areas() const {return true;}
00149
00150
00151 virtual std::string description () const;
00152 virtual void run_clustering(ClusterSequence &) const ;
00153
00154 protected:
00155 virtual void reset_stored_plugin() const;
00156
00157 private:
00158 double _protojet_Emin;
00159 SplitMergeScale _split_merge_scale;
00160 bool _use_E_weighted_splitting;
00161
00162
00163
00164 static std::auto_ptr<SISConeSphericalPlugin > stored_plugin;
00165 static std::auto_ptr<std::vector<PseudoJet> > stored_particles;
00166 static std::auto_ptr<siscone_spherical::CSphsiscone> stored_siscone;
00167 };
00168
00169
00173 class SISConeSphericalExtras : public SISConeBaseExtras {
00174 public:
00176
00177 SISConeSphericalExtras(int nparticles)
00178 : SISConeBaseExtras(nparticles){}
00179
00183 const SISConeSphericalPlugin* jet_def_plugin() const {
00184 return dynamic_cast<const SISConeSphericalPlugin*>(_jet_def_plugin);
00185 }
00186
00187 private:
00188
00189 friend class SISConeSphericalPlugin;
00190 };
00191
00192 FASTJET_END_NAMESPACE
00193
00194 #endif // __SISCONEPLUGIN_HH__
00195