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 #include "fastjet/CDFMidPointPlugin.hh"
00032 #include "fastjet/ClusterSequence.hh"
00033 #include "fastjet/Error.hh"
00034 #include <sstream>
00035
00036
00037 #include "MidPointAlgorithm.hh"
00038 #include "PhysicsTower.hh"
00039 #include "Cluster.hh"
00040
00041 FASTJET_BEGIN_NAMESPACE
00042
00043 using namespace std;
00044
00045 string CDFMidPointPlugin::description () const {
00046 ostringstream desc;
00047
00048 string sm_scale_string = "split-merge uses ";
00049 switch(_sm_scale) {
00050 case SM_pt:
00051 sm_scale_string += "pt";
00052 break;
00053 case SM_Et:
00054 sm_scale_string += "Et";
00055 break;
00056 case SM_mt:
00057 sm_scale_string += "mt";
00058 break;
00059 case SM_pttilde:
00060 sm_scale_string += "pttilde (scalar sum of pts)";
00061 break;
00062 default:
00063 ostringstream err;
00064 err << "Unrecognized split-merge scale choice = " << _sm_scale;
00065 throw Error(err.str());
00066 }
00067
00068
00069 if (cone_area_fraction() == 1) {
00070 desc << "CDF MidPoint jet algorithm, with " ;
00071 } else {
00072 desc << "CDF MidPoint+Searchcone jet algorithm, with ";
00073 }
00074 desc << "seed_threshold = " << seed_threshold () << ", "
00075 << "cone_radius = " << cone_radius () << ", "
00076 << "cone_area_fraction = " << cone_area_fraction () << ", "
00077 << "max_pair_size = " << max_pair_size () << ", "
00078 << "max_iterations = " << max_iterations () << ", "
00079 << "overlap_threshold = " << overlap_threshold () << ", "
00080 << sm_scale_string ;
00081
00082 return desc.str();
00083 }
00084
00085
00086 void CDFMidPointPlugin::run_clustering(ClusterSequence & clust_seq) const {
00087
00088
00089 vector<PhysicsTower> towers;
00090 towers.reserve(clust_seq.jets().size());
00091 for (unsigned i = 0; i < clust_seq.jets().size(); i++) {
00092 LorentzVector fourvect(clust_seq.jets()[i].px(),
00093 clust_seq.jets()[i].py(),
00094 clust_seq.jets()[i].pz(),
00095 clust_seq.jets()[i].E());
00096 PhysicsTower tower(fourvect);
00097
00098
00099 tower.calTower.iEta = i;
00100 towers.push_back(tower);
00101 }
00102
00103
00104 MidPointAlgorithm m(_seed_threshold,_cone_radius,_cone_area_fraction,
00105 _max_pair_size,_max_iterations,_overlap_threshold,
00106 MidPointAlgorithm::SplitMergeScale(_sm_scale));
00107
00108
00109 std::vector<Cluster> jets;
00110 m.run(towers,jets);
00111
00112
00113
00114
00115
00116 for(vector<Cluster>::const_iterator jetIter = jets.begin();
00117 jetIter != jets.end(); jetIter++) {
00118 const vector<PhysicsTower> & tower_list = jetIter->towerList;
00119 int jet_k = tower_list[0].calTower.iEta;
00120
00121 int ntow = int(jetIter->towerList.size());
00122 for (int itow = 1; itow < ntow; itow++) {
00123 int jet_i = jet_k;
00124
00125 int jet_j = tower_list[itow].calTower.iEta;
00126
00127 double dij = 0.0;
00128 clust_seq.plugin_record_ij_recombination(jet_i, jet_j, dij, jet_k);
00129 }
00130
00131
00132 double d_iB = clust_seq.jets()[jet_k].perp2();
00133 clust_seq.plugin_record_iB_recombination(jet_k, d_iB);
00134 }
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 }
00151
00152 FASTJET_END_NAMESPACE