00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __FASTJET_CLUSTERSEQUENCEAREA_HH__
00032 #define __FASTJET_CLUSTERSEQUENCEAREA_HH__
00033
00034 #include "fastjet/ClusterSequenceAreaBase.hh"
00035 #include "fastjet/ClusterSequenceActiveArea.hh"
00036 #include "fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh"
00037 #include "fastjet/ClusterSequencePassiveArea.hh"
00038 #include "fastjet/ClusterSequenceVoronoiArea.hh"
00039 #include "fastjet/AreaDefinition.hh"
00040
00041 FASTJET_BEGIN_NAMESPACE
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class ClusterSequenceArea : public ClusterSequenceAreaBase {
00052 public:
00053
00054 template<class L> ClusterSequenceArea
00055 (const std::vector<L> & pseudojets,
00056 const JetDefinition & jet_def,
00057 const AreaDefinition & area_def_in) : _area_def(area_def_in) {
00058 initialize_and_run_cswa(pseudojets, jet_def);
00059 }
00060
00061
00062 template<class L> ClusterSequenceArea
00063 (const std::vector<L> & pseudojets,
00064 const JetDefinition & jet_def,
00065 const GhostedAreaSpec & ghost_spec) : _area_def(ghost_spec){
00066 initialize_and_run_cswa(pseudojets, jet_def);
00067 }
00068
00069
00070 template<class L> ClusterSequenceArea
00071 (const std::vector<L> & pseudojets,
00072 const JetDefinition & jet_def,
00073 const VoronoiAreaSpec & voronoi_spec) : _area_def(voronoi_spec){
00074 initialize_and_run_cswa(pseudojets, jet_def);
00075 }
00076
00077
00078 const AreaDefinition & area_def() const {return _area_def;}
00079
00080
00081
00082 virtual double area (const PseudoJet & jet) const {
00083 return _area_base->area(jet);}
00084
00085
00086
00087 virtual double area_error (const PseudoJet & jet) const {
00088 return _area_base->area_error(jet);}
00089
00090
00091 virtual PseudoJet area_4vector(const PseudoJet & jet) const {
00092 return _area_base->area_4vector(jet);}
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107 virtual double empty_area(const RangeDefinition & range) const {
00108 return _area_base->empty_area(range);}
00109
00110
00111
00112
00113
00114
00115 virtual double n_empty_jets(const RangeDefinition & range) const {
00116 return _area_base->n_empty_jets(range);
00117 }
00118
00119
00120 virtual bool is_pure_ghost(const PseudoJet & jet) const {
00121 return _area_base->is_pure_ghost(jet);
00122 }
00123
00124
00125 virtual bool has_explicit_ghosts() const {
00126 return _area_base->has_explicit_ghosts();
00127 }
00128
00129
00130
00131
00132
00133 virtual void get_median_rho_and_sigma(const std::vector<PseudoJet> & all_jets,
00134 const RangeDefinition & range,
00135 bool use_area_4vector,
00136 double & median, double & sigma,
00137 double & mean_area,
00138 bool all_are_incl = false) const {
00139 _warn_if_range_unsuitable(range);
00140 ClusterSequenceAreaBase::get_median_rho_and_sigma(
00141 all_jets, range, use_area_4vector,
00142 median, sigma, mean_area, all_are_incl);
00143 }
00144
00145
00146
00147
00148
00149 virtual void get_median_rho_and_sigma(const RangeDefinition & range,
00150 bool use_area_4vector,
00151 double & median, double & sigma) const {
00152 ClusterSequenceAreaBase::get_median_rho_and_sigma(range,use_area_4vector,
00153 median,sigma);
00154 }
00155
00156
00157
00158
00159
00160 virtual void get_median_rho_and_sigma(const RangeDefinition & range,
00161 bool use_area_4vector,
00162 double & median, double & sigma,
00163 double & mean_area) const {
00164 ClusterSequenceAreaBase::get_median_rho_and_sigma(range,use_area_4vector,
00165 median,sigma, mean_area);
00166 }
00167
00168
00169
00170
00171
00172 virtual void parabolic_pt_per_unit_area(double & a, double & b,
00173 const RangeDefinition & range,
00174 double exclude_above=-1.0,
00175 bool use_area_4vector=false) const {
00176 _warn_if_range_unsuitable(range);
00177 ClusterSequenceAreaBase::parabolic_pt_per_unit_area(
00178 a,b,range, exclude_above, use_area_4vector);
00179 }
00180
00181
00182 private:
00183
00184
00185
00186
00187 void _warn_if_range_unsuitable(const RangeDefinition & range) const;
00188
00189 template<class L> void initialize_and_run_cswa (
00190 const std::vector<L> & pseudojets,
00191 const JetDefinition & jet_def);
00192
00193 std::auto_ptr<ClusterSequenceAreaBase> _area_base;
00194 AreaDefinition _area_def;
00195 static LimitedWarning _range_warnings;
00196 static LimitedWarning _explicit_ghosts_repeats_warnings;
00197
00198 };
00199
00200
00201 template<class L> void ClusterSequenceArea::initialize_and_run_cswa(
00202 const std::vector<L> & pseudojets,
00203 const JetDefinition & jet_def)
00204 {
00205
00206 ClusterSequenceAreaBase * _area_base_ptr;
00207 switch(_area_def.area_type()) {
00208 case active_area:
00209 _area_base_ptr = new ClusterSequenceActiveArea(pseudojets,
00210 jet_def,
00211 _area_def.ghost_spec());
00212 break;
00213 case active_area_explicit_ghosts:
00214 if (_area_def.ghost_spec().repeat() != 1)
00215 _explicit_ghosts_repeats_warnings.warn("Requested active area with explicit ghosts with repeat != 1; only 1 set of ghosts will be used");
00216 _area_base_ptr = new ClusterSequenceActiveAreaExplicitGhosts(pseudojets,
00217 jet_def,
00218 _area_def.ghost_spec());
00219 break;
00220 case voronoi_area:
00221 _area_base_ptr = new ClusterSequenceVoronoiArea(pseudojets,
00222 jet_def,
00223 _area_def.voronoi_spec());
00224 break;
00225 case one_ghost_passive_area:
00226 _area_base_ptr = new ClusterSequence1GhostPassiveArea(pseudojets,
00227 jet_def,
00228 _area_def.ghost_spec());
00229 break;
00230 case passive_area:
00231 _area_base_ptr = new ClusterSequencePassiveArea(pseudojets,
00232 jet_def,
00233 _area_def.ghost_spec());
00234 break;
00235 default:
00236 std::cerr << "Error: unrecognized area_type in ClusterSequenceArea:"
00237 << _area_def.area_type() << std::endl;
00238 exit(-1);
00239 }
00240
00241 _area_base = std::auto_ptr<ClusterSequenceAreaBase>(_area_base_ptr);
00242 transfer_from_sequence(*_area_base);
00243 }
00244
00245 FASTJET_END_NAMESPACE
00246
00247 #endif // __FASTJET_CLUSTERSEQUENCEAREA_HH__
00248
00249