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/ClusterSequenceWithArea.hh"
00037 #include "fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh"
00038 #include<iostream>
00039 #include<vector>
00040
00041 FASTJET_BEGIN_NAMESPACE
00042
00043 using namespace std;
00044
00049 class ClusterSequenceActiveArea : public ClusterSequenceWithArea {
00050 public:
00051
00053 template<class L> ClusterSequenceActiveArea
00054 (const std::vector<L> & pseudojets,
00055 const JetDefinition & jet_def,
00056 const ActiveAreaSpec & area_spec,
00057 const bool & writeout_combinations = false) ;
00058
00059 virtual double area (const PseudoJet & jet) const {
00060 return _average_area[jet.cluster_hist_index()];};
00061 virtual double area_error (const PseudoJet & jet) const {
00062 return _average_area2[jet.cluster_hist_index()];};
00063
00064 virtual PseudoJet area_4vector (const PseudoJet & jet) const {
00065 return _average_area_4vector[jet.cluster_hist_index()];};
00066
00070 enum mean_pt_strategies{median=0, non_ghost_median, pttot_over_areatot,
00071 pttot_over_areatot_cut, mean_ratio_cut, play,
00072 median_4vector};
00073
00079 double pt_per_unit_area(mean_pt_strategies strat=median,
00080 double range=2.0 ) const;
00081
00085 void parabolic_pt_per_unit_area(double & a,double & b, double raprange=-1.0,
00086 double exclude_above=-1.0,
00087 bool use_area_4vector=false ) const;
00088
00089
00090
00091 private:
00092
00095 void _initialise_and_run_AA (const JetDefinition & jet_def,
00096 const ActiveAreaSpec & area_spec,
00097 const bool & writeout_combinations = false);
00098
00099
00100 valarray<double> _average_area, _average_area2;
00101 valarray<PseudoJet> _average_area_4vector;
00102 double _non_jet_area, _non_jet_area2, _non_jet_number;
00103
00104 double _maxrap_for_area;
00105 double _safe_rap_for_area;
00106
00109 void _transfer_ghost_free_history(
00110 const ClusterSequenceActiveAreaExplicitGhosts & clust_seq);
00111
00112
00115 void _transfer_areas(const vector<int> & unique_hist_order,
00116 const ClusterSequenceActiveAreaExplicitGhosts & );
00117
00121 void _extract_tree(vector<int> &) const;
00124 void _extract_tree_children(int pos, valarray<bool> &, const valarray<int> &, vector<int> &) const;
00126 void _extract_tree_parents (int pos, valarray<bool> &, const valarray<int> &, vector<int> &) const;
00127
00130
00131
00132
00133 };
00134
00135
00136 template<class L> ClusterSequenceActiveArea::ClusterSequenceActiveArea
00137 (const std::vector<L> & pseudojets,
00138 const JetDefinition & jet_def,
00139 const ActiveAreaSpec & area_spec,
00140 const bool & writeout_combinations) {
00141
00142
00143 _transfer_input_jets(pseudojets);
00144
00145
00146 _initialise_and_run_AA(jet_def, area_spec, writeout_combinations);
00147
00148 }
00149
00150
00151
00152 FASTJET_END_NAMESPACE
00153
00154 #endif // __FASTJET_CLUSTERSEQUENCEACTIVEAREA_HH__