D0RunIIConePlugin.cc
Go to the documentation of this file.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/D0RunIIConePlugin.hh"
00032 #include "fastjet/ClusterSequence.hh"
00033 #include "fastjet/Error.hh"
00034 #include <sstream>
00035
00036
00037 #include <list>
00038 #include "ILConeAlgorithm.hpp"
00039 #include "HepEntity.h"
00040
00041 FASTJET_BEGIN_NAMESPACE
00042
00043 using namespace std;
00044 using namespace d0;
00045
00046 const double D0RunIIConePlugin::_DEFAULT_split_ratio = 0.5 ;
00047 const double D0RunIIConePlugin::_DEFAULT_far_ratio = 0.5 ;
00048 const double D0RunIIConePlugin::_DEFAULT_Et_min_ratio = 0.5 ;
00049 const bool D0RunIIConePlugin::_DEFAULT_kill_duplicate = true ;
00050 const double D0RunIIConePlugin::_DEFAULT_duplicate_dR = 0.005;
00051 const double D0RunIIConePlugin::_DEFAULT_duplicate_dPT = 0.01 ;
00052 const double D0RunIIConePlugin::_DEFAULT_search_factor = 1.0 ;
00053 const double D0RunIIConePlugin::_DEFAULT_pT_min_leading_protojet = 0. ;
00054 const double D0RunIIConePlugin::_DEFAULT_pT_min_second_protojet = 0. ;
00055 const int D0RunIIConePlugin::_DEFAULT_merge_max = 10000;
00056 const double D0RunIIConePlugin::_DEFAULT_pT_min_nomerge = 0. ;
00057
00058
00059 string D0RunIIConePlugin::description () const {
00060 ostringstream desc;
00061
00062 desc << "D0 Run II Improved Legacy (midpoint) cone jet algorithm, with ";
00063 desc << "cone_radius = " << cone_radius () << ", "
00064 << "min_jet_Et = " << min_jet_Et () << ", "
00065 << "split_ratio = " << split_ratio ();
00066
00067 return desc.str();
00068 }
00069
00070
00071 void D0RunIIConePlugin::run_clustering(ClusterSequence & clust_seq) const {
00072
00073
00074 vector<HepEntity> entities(clust_seq.jets().size());
00075 list<const HepEntity * > ensemble;
00076 for (unsigned i = 0; i < clust_seq.jets().size(); i++) {
00077 entities[i].Fill(clust_seq.jets()[i].E(),
00078 clust_seq.jets()[i].px(),
00079 clust_seq.jets()[i].py(),
00080 clust_seq.jets()[i].pz(),
00081 i);
00082
00083 if (abs(entities[i].pz) < entities[i].E) {
00084 ensemble.push_back(& (entities[i]));
00085 }
00086 }
00087
00088
00089 ILConeAlgorithm<HepEntity>
00090 ilegac(cone_radius(),
00091 min_jet_Et(),
00092 split_ratio(),
00093 far_ratio(),
00094 Et_min_ratio(),
00095 kill_duplicate(),
00096 duplicate_dR(),
00097 duplicate_dPT(),
00098 search_factor(),
00099 pT_min_leading_protojet(),
00100 pT_min_second_protojet(),
00101 merge_max(),
00102 pT_min_nomerge());
00103
00104
00105 float Item_ET_Threshold = 0.;
00106 list<HepEntity> jets;
00107 ilegac.makeClusters(jets, ensemble, Item_ET_Threshold);
00108
00109
00110
00111 for(int i = ilegac.ilcv.size()-1; i >= 0; i--) {
00112
00113 std::list<const HepEntity*> tlist = ilegac.ilcv[i].LItems();
00114 std::list<const HepEntity*>::iterator tk;
00115
00116
00117 tk = tlist.begin();
00118
00119
00120
00121
00122 if (tk==tlist.end())
00123 continue;
00124
00125 int jet_k = (*tk)->index;
00126
00127 tk++;
00128 for (; tk != tlist.end(); tk++) {
00129 int jet_i = jet_k;
00130 int jet_j = (*tk)->index;
00131
00132 double dij = 0.0;
00133 clust_seq.plugin_record_ij_recombination(jet_i, jet_j, dij, jet_k);
00134 }
00135
00136
00137 double d_iB = clust_seq.jets()[jet_k].perp2();
00138 clust_seq.plugin_record_iB_recombination(jet_k, d_iB);
00139
00140 }
00141 }
00142
00143 FASTJET_END_NAMESPACE