77 #include "fastjet/PseudoJet.hh" 
   78 #include "fastjet/ClusterSequence.hh" 
   94 inline double pow2(
const double x) {
return x*x;}
 
   97 int main (
int argc, 
char ** argv) {
 
   99   CmdLine cmdline(argc,argv);
 
  104                                         cmdline.int_val(
"-clever", fj::Best)));
 
  105   int  repeat  = cmdline.int_val(
"-repeat",1);
 
  106   int  combine = cmdline.int_val(
"-combine",1);
 
  107   bool write   = cmdline.present(
"-write");
 
  108   bool unique_write = cmdline.present(
"-unique_write");
 
  109   bool hydjet  = cmdline.present(
"-hydjet");
 
  110   double ktR   = cmdline.double_val(
"-r",1.0);
 
  111   double inclkt = cmdline.double_val(
"-incl",-1.0);
 
  112   int    excln  = cmdline.int_val   (
"-excln",-1);
 
  113   double excld  = cmdline.double_val(
"-excld",-1.0);
 
  114   double etamax = cmdline.double_val(
"-etamax",1.0e305);
 
  115   bool   show_constituents = cmdline.present(
"-const");
 
  116   bool   massless = cmdline.present(
"-massless");
 
  117   int  nev     = cmdline.int_val(
"-nev",1);
 
  118   bool add_dense_coverage = cmdline.present(
"-dense");
 
  124   if (cmdline.present(
"-cam")) {
 
  130   if (!cmdline.all_options_used()) {cerr << 
 
  131       "Error: some options were not recognized"<<endl; 
 
  135   for (
int iev = 0; iev < nev; iev++) {
 
  136   vector<fj::PseudoJet> jets;
 
  139   while (getline(cin, line)) {
 
  141     istringstream linestream(line);
 
  142     if (line == 
"#END") {
 
  144       if (ndone == combine) {
break;}
 
  146     if (line.substr(0,1) == 
"#") {
continue;}
 
  147     valarray<double> fourvec(4);
 
  152       int ii, istat,id,m1,m2,d1,d2;
 
  154       linestream >> ii>> istat >> 
id >> m1 >> m2 >> d1 >> d2
 
  155                  >> fourvec[0] >> fourvec[1] >> fourvec[2] >> mass;
 
  158         fourvec[3] = sqrt(+pow2(fourvec[0])+pow2(fourvec[1])
 
  159                           +pow2(fourvec[2])+pow2(mass));
 
  163         linestream >> fourvec[0] >> fourvec[1] >> fourvec[2];
 
  164         fourvec[3] = sqrt(pow2(fourvec[0])+pow2(fourvec[1])+pow2(fourvec[2]));}
 
  166         linestream >> fourvec[0] >> fourvec[1] >> fourvec[2] >> fourvec[3];
 
  170     if (abs(psjet.rap() < etamax)) {jets.push_back(psjet);}
 
  176   if (add_dense_coverage) {
 
  181     for (
int iphi = 0; iphi<nphi; iphi++) {
 
  182       for (
int ieta = -neta; ieta<neta+1; ieta++) {
 
  183         double phi = (iphi+0.5) * (fj::twopi/nphi) + rand()*0.001/RAND_MAX;
 
  184         double eta = ieta * (10.0/neta)  + rand()*0.001/RAND_MAX;
 
  185         kt = 0.0000001*(1+rand()*0.1/RAND_MAX);
 
  186         double pminus = kt*exp(-eta);
 
  187         double pplus  = kt*exp(+eta);
 
  188         double px = kt*sin(phi);
 
  189         double py = kt*cos(phi);
 
  191         fj::PseudoJet mom(px,py,0.5*(pplus-pminus),0.5*(pplus+pminus));
 
  199   for (
int irepeat = 0; irepeat < repeat ; irepeat++) {
 
  201     if (irepeat != 0) {
continue;}
 
  202     cout << 
"iev "<<iev<< 
": number of particles = "<< jets.size() << endl;
 
  203     cout << 
"strategy used =  "<< clust_seq.strategy_string()<< endl;
 
  207       vector<fj::PseudoJet> jets = 
sorted_by_pt(clust_seq.inclusive_jets(inclkt));
 
  208       for (
size_t j = 0; j < jets.size(); j++) {
 
  209         printf(
"%5u %15.8f %15.8f %15.8f\n",j,jets[j].rap(),jets[j].phi(),sqrt(jets[j].kt2()));
 
  210         if (show_constituents) {
 
  211           vector<fj::PseudoJet> const_jets = jets[j].constituents();
 
  212           for (
size_t k = 0; k < const_jets.size(); k++) {
 
  213             printf(
"        jet%03u %15.8f %15.8f %15.8f\n",j,const_jets[k].rap(),
 
  214                    const_jets[k].phi(),sqrt(const_jets[k].kt2()));
 
  222       vector<fj::PseudoJet> jets = 
sorted_by_E(clust_seq.exclusive_jets(excln));
 
  224       cout << 
"Printing "<<excln<<
" exclusive jets\n";
 
  225       for (
size_t j = 0; j < jets.size(); j++) {
 
  226         printf(
"%5u %15.8f %15.8f %15.8f\n",
 
  228                j,jets[j].rap(),jets[j].phi(),jets[j].kt2());
 
  233       vector<fj::PseudoJet> jets = 
sorted_by_pt(clust_seq.exclusive_jets(excld));
 
  234       cout << 
"Printing exclusive jets for d = "<<excld<<
"\n";
 
  235       for (
size_t j = 0; j < jets.size(); j++) {
 
  236         printf(
"%5u %15.8f %15.8f %15.8f\n",
 
  237                j,jets[j].rap(),jets[j].phi(),sqrt(jets[j].kt2()));
 
  243       vector<int> unique_history = clust_seq.unique_history_order();
 
  245       vector<int> inv_unique_history(clust_seq.history().size());
 
  246       for (
unsigned int i = 0; i < unique_history.size(); i++) {
 
  247         inv_unique_history[unique_history[i]] = i;}
 
  249       for (
unsigned int i = 0; i < unique_history.size(); i++) {
 
  250         fj::ClusterSequence::history_element el = 
 
  251           clust_seq.history()[unique_history[i]];
 
  252         int uhp1 = el.parent1>=0 ? inv_unique_history[el.parent1] : el.parent1;
 
  253         int uhp2 = el.parent2>=0 ? inv_unique_history[el.parent2] : el.parent2;
 
  254         printf(
"%7d u %15.8e %7d u %7d u\n",i,el.dij,uhp1, uhp2);
 
vector< PseudoJet > sorted_by_pt(const vector< PseudoJet > &jets)
return a vector of jets sorted into decreasing kt2 
 
the longitudinally invariant kt algorithm 
 
int main()
an example program showing how to use fastjet 
 
vector< PseudoJet > sorted_by_E(const vector< PseudoJet > &jets)
return a vector of jets sorted into decreasing energy 
 
the longitudinally invariant variant of the cambridge algorithm (aka Aachen algoithm). 
 
JetAlgorithm
the various families of jet-clustering algorithm 
 
Strategy
the various options for the algorithmic strategy to adopt in clustering events with kt and cambridge ...
 
Class to contain pseudojets, including minimal information of use to jet-clustering routines...
 
class that is intended to hold a full definition of the jet clusterer