|
||||
File indexing completed on 2025-01-18 09:57:19
0001 #ifndef __SISCONESPHERICALPLUGIN_HH__ 0002 #define __SISCONESPHERICALPLUGIN_HH__ 0003 0004 #include "SISConeBasePlugin.hh" 0005 0006 // forward declaration of the siscone classes we'll need 0007 namespace siscone_spherical{ 0008 class CSphsiscone; 0009 } 0010 0011 // questionable whether this should be in fastjet namespace or not... 0012 FASTJET_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh 0013 0014 //---------------------------------------------------------------------- 0015 // 0016 /// @ingroup plugins 0017 /// \class SISConeSphericalPlugin 0018 /// Implementation of the spherical version of the SISCone algorithm 0019 /// (plugin for fastjet v2.1 upwards) 0020 /// 0021 /// SISConeSphericalPlugin is a plugin for fastjet (v2.1 upwards) that 0022 /// provides an interface to the seedless infrared safe cone jet 0023 /// finder by Gregory Soyez and Gavin Salam. 0024 /// 0025 /// This is the version of SISCone using spherical coordinates. Compared 0026 /// to the original cylindrical version: 0027 /// 0028 /// - Particles are within a cone if their opening angle relative to the 0029 /// centre of the cone is less than R 0030 /// 0031 /// - The split-merge step uses the total energy in the protojet as the 0032 /// ordering and overlap-measure variable 0033 /// 0034 /// - The IR safety of the split-merge step is _not_ guaranteed for 0035 /// events consisting of two back-to-back identical heavy particles 0036 /// that decay. This is because of potential degeneracies in the 0037 /// ordering for the split-merge step. 0038 /// 0039 /// For moderate values of R the problem should not be too severe 0040 /// (or may even be absent for some values of the overlap 0041 /// parameter), however the user should be aware of the issue. 0042 /// 0043 /// The default split-merge scale may change at a later date to 0044 /// resolve this issue. 0045 /// 0046 /// 0047 /// SISCone uses geometrical techniques to exhaustively consider all 0048 /// possible distinct cones. It then finds out which ones are stable 0049 /// and sends the result to the Tevatron Run-II type split-merge 0050 /// procedure for overlapping cones. 0051 /// 0052 /// Four parameters govern the "physics" of the algorithm: 0053 /// 0054 /// - the cone_radius (this should be self-explanatory!) 0055 /// 0056 /// - the overlap_threshold is the parameter which dictates how much 0057 /// two jets must overlap (E_overlap/min(E1,E2)) if they are to be 0058 /// merged 0059 /// 0060 /// - Not all particles are in stable cones in the first round of 0061 /// searching for stable cones; one can therefore optionally have the 0062 /// the jet finder carry out additional passes of searching for 0063 /// stable cones among particles that were in no stable cone in 0064 /// previous passes --- the maximum number of passes carried out is 0065 /// n_pass_max. If this is zero then additional passes are carried 0066 /// out until no new stable cones are found. 0067 /// 0068 /// - Protojet Emin: protojets that are below this Emin 0069 /// (default = 0) are discarded before each iteration of the 0070 /// split-merge loop. 0071 /// 0072 /// One parameter governs some internal algorithmic shortcuts: 0073 /// 0074 /// - if "caching" is turned on then the last event clustered by 0075 /// siscone is stored -- if the current event is identical and the 0076 /// cone_radius and n_pass_max are identical, then the only part of 0077 /// the clustering that needs to be rerun is the split-merge part, 0078 /// leading to significant speed gains; there is a small (O(N) storage 0079 /// and speed) penalty for caching, so it should be kept off 0080 /// (default) if only a single overlap_threshold is used. 0081 /// 0082 /// The final jets can be accessed by requestion the 0083 /// inclusive_jets(...) from the ClusterSequence object. Note that 0084 /// these PseudoJets have their user_index() set to the index of the 0085 /// pass in which they were found (first pass = 0). NB: This does not 0086 /// currently work for jets that consist of a single particle. 0087 /// 0088 /// For further information on the details of the algorithm see the 0089 /// SISCone paper, arXiv:0704.0292 [JHEP 0705:086,2007]. 0090 /// 0091 /// For documentation about the implementation, see the 0092 /// siscone/doc/html/index.html file. 0093 // 0094 class SISConeSphericalPlugin : public SISConeBasePlugin{ 0095 public: 0096 0097 /// enum for the different split-merge scale choices; 0098 /// Note that order _must_ be the same as in siscone 0099 enum SplitMergeScale {SM_E, ///< Energy (IR unsafe with momentum conservation) 0100 SM_Etilde ///< sum_{i \in jet} E_i [1+sin^2(theta_iJ)] 0101 }; 0102 0103 0104 /// Main constructor for the SISConeSpherical Plugin class. 0105 /// 0106 /// 0107 SISConeSphericalPlugin (double cone_radius_in, 0108 double overlap_threshold_in, 0109 int n_pass_max_in = 0, 0110 double protojet_Emin_in = 0.0, 0111 bool caching_in = false, 0112 SplitMergeScale split_merge_scale_in = SM_Etilde, 0113 double split_merge_stopping_scale_in = 0.0){ 0114 _cone_radius =cone_radius_in; 0115 _overlap_threshold =overlap_threshold_in; 0116 _n_pass_max =n_pass_max_in; 0117 _protojet_Emin =protojet_Emin_in; 0118 _caching =caching_in; 0119 _split_merge_scale =split_merge_scale_in; 0120 _split_merge_stopping_scale = split_merge_stopping_scale_in; 0121 _ghost_sep_scale = 0.0; 0122 _use_E_weighted_splitting = false; 0123 } 0124 0125 /// minimum energy for a protojet to be considered in the split-merge step 0126 /// of the algorithm 0127 double protojet_Emin () const {return _protojet_Emin ;} 0128 0129 /// return the scale to be passed to SISCone as the protojet_Emin 0130 /// -- if we have a ghost separation scale that is above the 0131 /// protojet_ptmin, then the ghost_separation_scale becomes the 0132 /// relevant one to use here 0133 double protojet_or_ghost_Emin () const {return std::max(_protojet_Emin, 0134 _ghost_sep_scale);} 0135 0136 /// indicates scale used in split-merge 0137 SplitMergeScale split_merge_scale() const {return _split_merge_scale;} 0138 /// sets scale used in split-merge 0139 void set_split_merge_scale(SplitMergeScale sms) {_split_merge_scale = sms;} 0140 0141 /// indicate if the splittings are done using the anti-kt distance 0142 bool split_merge_use_E_weighted_splitting() const {return _use_E_weighted_splitting;} 0143 void set_split_merge_use_E_weighted_splitting(bool val) { 0144 _use_E_weighted_splitting = val;} 0145 0146 /// overload the default as we don't provide support 0147 /// for passive areas. 0148 virtual bool supports_ghosted_passive_areas() const {return true;} 0149 0150 // the things that are required by base class 0151 virtual std::string description () const; 0152 virtual void run_clustering(ClusterSequence &) const ; 0153 0154 /// returns true because this plugin is intended for spherical 0155 /// geometries (i.e. it's an e+e- algorithm). 0156 virtual bool is_spherical() const {return true;} 0157 0158 protected: 0159 virtual void reset_stored_plugin() const; 0160 0161 private: 0162 double _protojet_Emin; 0163 SplitMergeScale _split_merge_scale; 0164 bool _use_E_weighted_splitting; 0165 0166 // part needed for the cache 0167 // variables for caching the results and the input 0168 static SharedPtr<SISConeSphericalPlugin > stored_plugin; 0169 static SharedPtr<std::vector<PseudoJet> > stored_particles; 0170 static SharedPtr<siscone_spherical::CSphsiscone> stored_siscone; 0171 }; 0172 0173 //====================================================================== 0174 /// @ingroup extra_info 0175 /// \class SISConeSphericalExtras 0176 /// Class that provides extra information about a SISCone clustering 0177 class SISConeSphericalExtras : public SISConeBaseExtras { 0178 public: 0179 /// constructor 0180 // it just initialises the pass information 0181 SISConeSphericalExtras(int nparticles) 0182 : SISConeBaseExtras(nparticles){} 0183 0184 /// access to the siscone jet def plugin (more convenient than 0185 /// getting it from the original jet definition, because here it's 0186 /// directly of the right type (rather than the base type) 0187 const SISConeSphericalPlugin* jet_def_plugin() const { 0188 return dynamic_cast<const SISConeSphericalPlugin*>(_jet_def_plugin); 0189 } 0190 0191 private: 0192 // let us be written to by SISConePlugin 0193 friend class SISConeSphericalPlugin; 0194 }; 0195 0196 FASTJET_END_NAMESPACE // defined in fastjet/internal/base.hh 0197 0198 #endif // __SISCONEPLUGIN_HH__ 0199
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |