fastjet 2.4.5
|
00001 #ifndef __SISCONESPHERICALPLUGIN_HH__ 00002 #define __SISCONESPHERICALPLUGIN_HH__ 00003 00004 #include "SISConeBasePlugin.hh" 00005 00006 // forward declaration of the siscone classes we'll need 00007 namespace siscone_spherical{ 00008 class CSphsiscone; 00009 }; 00010 00011 // questionable whether this should be in fastjet namespace or not... 00012 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 00013 00014 //---------------------------------------------------------------------- 00015 // 00088 // 00089 class SISConeSphericalPlugin : public SISConeBasePlugin{ 00090 public: 00091 00094 enum SplitMergeScale {SM_E, 00095 SM_Etilde 00096 }; 00097 00098 00102 SISConeSphericalPlugin (double cone_radius, 00103 double overlap_threshold, 00104 int n_pass_max = 0, 00105 double protojet_Emin = 0.0, 00106 bool caching = false, 00107 SplitMergeScale split_merge_scale = SM_Etilde, 00108 double split_merge_stopping_scale = 0.0){ 00109 _cone_radius =cone_radius; 00110 _overlap_threshold =overlap_threshold; 00111 _n_pass_max =n_pass_max; 00112 _protojet_Emin =protojet_Emin; 00113 _caching =caching; 00114 _split_merge_scale =split_merge_scale; 00115 _split_merge_stopping_scale = split_merge_stopping_scale; 00116 _ghost_sep_scale = 0.0; 00117 _use_E_weighted_splitting = false; 00118 } 00119 00122 double protojet_Emin () const {return _protojet_Emin ;} 00123 00128 double protojet_or_ghost_Emin () const {return std::max(_protojet_Emin, 00129 _ghost_sep_scale);} 00130 00132 SplitMergeScale split_merge_scale() const {return _split_merge_scale;} 00134 void set_split_merge_scale(SplitMergeScale sms) {_split_merge_scale = sms;} 00135 00137 bool split_merge_use_E_weighted_splitting() const {return _use_E_weighted_splitting;} 00138 void set_split_merge_use_E_weighted_splitting(bool val) { 00139 _use_E_weighted_splitting = val;} 00140 00143 virtual bool supports_ghosted_passive_areas() const {return true;} 00144 00145 // the things that are required by base class 00146 virtual std::string description () const; 00147 virtual void run_clustering(ClusterSequence &) const ; 00148 00149 protected: 00150 virtual void reset_stored_plugin() const; 00151 00152 private: 00153 double _protojet_Emin; 00154 SplitMergeScale _split_merge_scale; 00155 bool _use_E_weighted_splitting; 00156 00157 // part needed for the cache 00158 // variables for caching the results and the input 00159 static std::auto_ptr<SISConeSphericalPlugin > stored_plugin; 00160 static std::auto_ptr<std::vector<PseudoJet> > stored_particles; 00161 static std::auto_ptr<siscone_spherical::CSphsiscone> stored_siscone; 00162 }; 00163 00164 //====================================================================== 00166 class SISConeSphericalExtras : public SISConeBaseExtras { 00167 public: 00169 // it just initialises the pass information 00170 SISConeSphericalExtras(int nparticles) 00171 : SISConeBaseExtras(nparticles){} 00172 00176 const SISConeSphericalPlugin* jet_def_plugin() const { 00177 return dynamic_cast<const SISConeSphericalPlugin*>(_jet_def_plugin); 00178 } 00179 00180 private: 00181 // let us be written to by SISConePlugin 00182 friend class SISConeSphericalPlugin; 00183 }; 00184 00185 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh 00186 00187 #endif // __SISCONEPLUGIN_HH__ 00188