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 "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 default:
00060 ostringstream err;
00061 err << "Unrecognized split-merge scale choice = " << _sm_scale;
00062 throw Error(err.str());
00063 }
00064
00065 desc << "CDF MidPoint jet finder with "
00066 << "seed_threshold = " << seed_threshold () << ", "
00067 << "cone_radius = " << cone_radius () << ", "
00068 << "cone_area_fraction = " << cone_area_fraction () << ", "
00069 << "max_pair_size = " << max_pair_size () << ", "
00070 << "max_iterations = " << max_iterations () << ", "
00071 << "overlap_threshold = " << overlap_threshold () << ", "
00072 << sm_scale_string ;
00073
00074 return desc.str();
00075 }
00076
00077
00078 void CDFMidPointPlugin::run_clustering(ClusterSequence & clust_seq) const {
00079
00080
00081 vector<PhysicsTower> towers;
00082 towers.reserve(clust_seq.jets().size());
00083 for (unsigned i = 0; i < clust_seq.jets().size(); i++) {
00084 LorentzVector fourvect(clust_seq.jets()[i].px(),
00085 clust_seq.jets()[i].py(),
00086 clust_seq.jets()[i].pz(),
00087 clust_seq.jets()[i].E());
00088 PhysicsTower tower(fourvect);
00089
00090
00091 tower.calTower.iEta = i;
00092 towers.push_back(tower);
00093 }
00094
00095
00096 MidPointAlgorithm m(_seed_threshold,_cone_radius,_cone_area_fraction,
00097 _max_pair_size,_max_iterations,_overlap_threshold,
00098 MidPointAlgorithm::SplitMergeScale(_sm_scale));
00099
00100
00101 std::vector<Cluster> jets;
00102 m.run(towers,jets);
00103
00104
00105
00106
00107
00108 for(vector<Cluster>::const_iterator jetIter = jets.begin();
00109 jetIter != jets.end(); jetIter++) {
00110 const vector<PhysicsTower> & tower_list = jetIter->towerList;
00111 int jet_k = tower_list[0].calTower.iEta;
00112
00113 int ntow = int(jetIter->towerList.size());
00114 for (int itow = 1; itow < ntow; itow++) {
00115 int jet_i = jet_k;
00116
00117 int jet_j = tower_list[itow].calTower.iEta;
00118
00119 double dij = 0.0;
00120 clust_seq.plugin_record_ij_recombination(jet_i, jet_j, dij, jet_k);
00121 }
00122
00123
00124 double d_iB = clust_seq.jets()[jet_k].perp2();
00125 clust_seq.plugin_record_iB_recombination(jet_k, d_iB);
00126 }
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 }
00143
00144 FASTJET_END_NAMESPACE