fastjet 2.4.5
SISConeSphericalPlugin.hh
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines