// ClusteringVetoPlugin Package // Questions/Comments? liew@hep-th.phys.s.u-tokyo.ac.jp // stoll@hep-th.phys.s.u-tokyo.ac.jp // // Copyright (c) 2014-2015 // Seng Pei Liew, Martin Stoll // // Example showing usage of ClusteringVetoPlugin // // Compile with "make example" and run with // ./example < ../data/single-event.dat // // $Id$ //---------------------------------------------------------------------- // This file is part of FastJet contrib. // // It is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2 of the License, or (at // your option) any later version. // // It is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public // License for more details. // // You should have received a copy of the GNU General Public License // along with this code. If not, see . //---------------------------------------------------------------------- #include #include #include #include "fastjet/PseudoJet.hh" #include #include "ClusteringVetoPlugin.hh" // In external code, this should be fastjet/contrib/ClusteringVetoPlugin.hh using namespace std; using namespace fastjet; using namespace contrib; // forward declaration to make things clearer void read_event(vector &event); void print_jets(const vector &jets, const ClusterSequence &clust_seq); ClusteringVetoPlugin::VetoResult user_veto_function (const PseudoJet& j1, const PseudoJet& j2); //---------------------------------------------------------------------- int main(){ //---------------------------------------------------------- // read in input particles vector event; read_event(event); cout << "# read an event with " << event.size() << " particles" << endl; //---------------------------------------------------------- // illustrate how this ClusteringVetoPlugin contrib works // basic Cambridge-Aachen-like mass-jump //---------------------------------------------------------- { // clustering parameters double mu(30.), theta(0.7), max_r(1.0), ptmin(5.); ClusteringVetoPlugin mj_plugin(mu, theta, max_r, ClusteringVetoPlugin::CALIKE); JetDefinition jet_def(&mj_plugin); ClusterSequence clust_seq(event, jet_def); // print setup cout << endl << "Run " << jet_def.description() << endl; // get inclusive jets and print vector jets = sorted_by_pt(clust_seq.inclusive_jets(ptmin)); cout << "Inclusive jets with pT > " << ptmin << " GeV" << endl; print_jets(jets, clust_seq); } //---------------------------------------------------------- // kT-like and anti-kT-like //---------------------------------------------------------- { // clustering parameters double mu(30.), theta(0.7), max_r(1.0), ptmin(5.); // kT ClusteringVetoPlugin mj_plugin_kt(mu, theta, max_r, ClusteringVetoPlugin::KTLIKE); JetDefinition jet_def_kt(&mj_plugin_kt); ClusterSequence clust_seq_kt(event, jet_def_kt); cout << endl << "Run " << jet_def_kt.description() << endl; vector jets_kt = sorted_by_pt(clust_seq_kt.inclusive_jets(ptmin)); cout << "Inclusive jets with pT > " << ptmin << " GeV" << endl << " number of jets: " << jets_kt.size() << endl; // anti-kT ClusteringVetoPlugin mj_plugin_akt(mu, theta, max_r, ClusteringVetoPlugin::AKTLIKE); JetDefinition jet_def_akt(&mj_plugin_akt); ClusterSequence clust_seq_akt(event, jet_def_akt); cout << endl << "Run " << jet_def_akt.description() << endl; vector jets_akt = sorted_by_pt(clust_seq_akt.inclusive_jets(ptmin)); cout << "Inclusive jets with pT > " << ptmin << " GeV" << endl << " number of jets: " << jets_akt.size() << endl; } //---------------------------------------------------------- // Cambridge-Aachen-like with user-defined veto function //---------------------------------------------------------- { // clustering parameters double mu(30.), theta(0.7), max_r(1.0), ptmin(5.); ClusteringVetoPlugin mj_plugin(mu, theta, max_r, ClusteringVetoPlugin::CALIKE); // set veto function, renders mu and theta irrelevant mj_plugin.set_veto_function(user_veto_function); JetDefinition jet_def(&mj_plugin); ClusterSequence clust_seq(event, jet_def); // print setup cout << endl << "Run " << jet_def.description() << endl; // get inclusive jets and print vector jets = sorted_by_pt(clust_seq.inclusive_jets(ptmin)); cout << "Inclusive jets with pT > " << ptmin << " GeV" << endl; print_jets(jets, clust_seq); } return 0; } // read in input particles void read_event(vector &event){ string line; while (getline(cin, line)) { istringstream linestream(line); // take substrings to avoid problems when there are extra "pollution" // characters (e.g. line-feed). if (line.substr(0,4) == "#END") {return;} if (line.substr(0,1) == "#") {continue;} double px,py,pz,E; linestream >> px >> py >> pz >> E; PseudoJet particle(px,py,pz,E); // push event onto back of full_event vector event.push_back(particle); } } // prints a vector of jets void print_jets(const vector &jets, const ClusterSequence &clust_seq){ // columns labels printf("%5s %10s %10s %10s %10s %10s\n", "jet #", "pt", "rap", "phi", "m", "last d_ij"); // print out the jets for (unsigned i=0; i max( j1.m(), j2.m() ) ) return ClusteringVetoPlugin::VETO; // no veto, but algorithm may need to check active-passive veto return ClusteringVetoPlugin::NOVETO; }