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_CLUSTERSEQUENCEACTIVEAREA_HH__
00032 #define __FASTJET_CLUSTERSEQUENCEACTIVEAREA_HH__
00033
00034
00035 #include "fastjet/PseudoJet.hh"
00036 #include "fastjet/ClusterSequenceAreaBase.hh"
00037 #include "fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh"
00038 #include<iostream>
00039 #include<vector>
00040
00041
00042
00043 #include "fastjet/ActiveAreaSpec.hh"
00044 #include "fastjet/ClusterSequenceWithArea.hh"
00045
00046
00047
00048 FASTJET_BEGIN_NAMESPACE
00049
00050 using namespace std;
00051
00056 class ClusterSequenceActiveArea : public ClusterSequenceAreaBase {
00057 public:
00058
00060 ClusterSequenceActiveArea() {}
00061
00063 template<class L> ClusterSequenceActiveArea
00064 (const std::vector<L> & pseudojets,
00065 const JetDefinition & jet_def,
00066 const GhostedAreaSpec & area_spec,
00067 const bool & writeout_combinations = false) ;
00068
00069 virtual double area (const PseudoJet & jet) const {
00070 return _average_area[jet.cluster_hist_index()];};
00071 virtual double area_error (const PseudoJet & jet) const {
00072 return _average_area2[jet.cluster_hist_index()];};
00073
00074 virtual PseudoJet area_4vector (const PseudoJet & jet) const {
00075 return _average_area_4vector[jet.cluster_hist_index()];};
00076
00080 enum mean_pt_strategies{median=0, non_ghost_median, pttot_over_areatot,
00081 pttot_over_areatot_cut, mean_ratio_cut, play,
00082 median_4vector};
00083
00091
00092 double pt_per_unit_area(mean_pt_strategies strat=median,
00093 double range=2.0 ) const;
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00108 virtual double empty_area(const RangeDefinition & range) const;
00109
00112 virtual double n_empty_jets(const RangeDefinition & range) const;
00113
00114 protected:
00115 void _resize_and_zero_AA ();
00116 void _initialise_AA(const JetDefinition & jet_def,
00117 const GhostedAreaSpec & area_spec,
00118 const bool & writeout_combinations,
00119 bool & continue_running);
00120
00121 void _run_AA(const GhostedAreaSpec & area_spec);
00122
00123 void _postprocess_AA(const GhostedAreaSpec & area_spec);
00124
00127 void _initialise_and_run_AA (const JetDefinition & jet_def,
00128 const GhostedAreaSpec & area_spec,
00129 const bool & writeout_combinations = false);
00130
00133 void _transfer_ghost_free_history(
00134 const ClusterSequenceActiveAreaExplicitGhosts & clust_seq);
00135
00136
00139 void _transfer_areas(const vector<int> & unique_hist_order,
00140 const ClusterSequenceActiveAreaExplicitGhosts & );
00141
00143 valarray<double> _average_area, _average_area2;
00144 valarray<PseudoJet> _average_area_4vector;
00145
00149 bool has_dangerous_particles() const {return _has_dangerous_particles;}
00150
00151 private:
00152
00153
00154 double _non_jet_area, _non_jet_area2, _non_jet_number;
00155
00156 double _maxrap_for_area;
00157 double _safe_rap_for_area;
00158
00159 bool _has_dangerous_particles;
00160
00161
00165 void _extract_tree(vector<int> &) const;
00168 void _extract_tree_children(int pos, valarray<bool> &, const valarray<int> &, vector<int> &) const;
00170 void _extract_tree_parents (int pos, valarray<bool> &, const valarray<int> &, vector<int> &) const;
00171
00175 void _throw_unless_jets_have_same_perp_or_E(const PseudoJet & jet,
00176 const PseudoJet & refjet,
00177 double tolerance,
00178 const ClusterSequenceActiveAreaExplicitGhosts & jets_ghosted_seq
00179 ) const;
00180
00183
00184
00185
00186
00187 int _area_spec_repeat;
00188
00190 class GhostJet : public PseudoJet {
00191 public:
00192 GhostJet(const PseudoJet & j, double a) : PseudoJet(j), area(a){}
00193 double area;
00194 };
00195
00196 std::vector<GhostJet> _ghost_jets;
00197 std::vector<GhostJet> _unclustered_ghosts;
00198 };
00199
00200
00201
00202
00203 template<class L> ClusterSequenceActiveArea::ClusterSequenceActiveArea
00204 (const std::vector<L> & pseudojets,
00205 const JetDefinition & jet_def,
00206 const GhostedAreaSpec & area_spec,
00207 const bool & writeout_combinations) {
00208
00209
00210 _transfer_input_jets(pseudojets);
00211
00212
00213 _initialise_and_run_AA(jet_def, area_spec, writeout_combinations);
00214
00215 }
00216
00217
00218
00219 FASTJET_END_NAMESPACE
00220
00221 #endif // __FASTJET_CLUSTERSEQUENCEACTIVEAREA_HH__