// main81.cc is a part of the PYTHIA event generator. // Copyright (C) 2013 Torbjorn Sjostrand. // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details. // Please respect the MCnet Guidelines, see GUIDELINES for details. // This program is written by Stefan Prestel. // It illustrates how to do CKKW-L merging, // see the Matrix Element Merging page in the online manual. #include "Pythia.h" using namespace Pythia8; // Functions for histogramming #include "fastjet/PseudoJet.hh" #include "fastjet/ClusterSequence.hh" #include "fastjet/CDFMidPointPlugin.hh" #include "fastjet/CDFJetCluPlugin.hh" #include "fastjet/D0RunIIConePlugin.hh" //========================================================================== // Find the Durham kT separation of the clustering from // nJetMin --> nJetMin-1 jets in the input event double pTfirstJet( const Event& event, int nJetMin, double Rparam) { double yPartonMax = 4.; // Fastjet analysis - select algorithm and parameters fastjet::Strategy strategy = fastjet::Best; fastjet::RecombinationScheme recombScheme = fastjet::E_scheme; fastjet::JetDefinition *jetDef = NULL; // For hadronic collision, use hadronic Durham kT measure if(event[3].colType() != 0 || event[4].colType() != 0) jetDef = new fastjet::JetDefinition(fastjet::kt_algorithm, Rparam, recombScheme, strategy); // For e+e- collision, use e+e- Durham kT measure else jetDef = new fastjet::JetDefinition(fastjet::ee_kt_algorithm, recombScheme, strategy); // Fastjet input std::vector fjInputs; // Reset Fastjet input fjInputs.resize(0); // Loop over event record to decide what to pass to FastJet for (int i = 0; i < event.size(); ++i) { // (Final state && coloured+photons) only! if ( !event[i].isFinal() || event[i].isLepton() || event[i].id() == 23 || abs(event[i].id()) == 24 || abs(event[i].y()) > yPartonMax) continue; // Store as input to Fastjet fjInputs.push_back( fastjet::PseudoJet (event[i].px(), event[i].py(), event[i].pz(),event[i].e() ) ); } // Do nothing for empty input if (int(fjInputs.size()) == 0) { delete jetDef; return 0.0; } // Run Fastjet algorithm fastjet::ClusterSequence clustSeq(fjInputs, *jetDef); // Extract kT of first clustering double pTFirst = sqrt(clustSeq.exclusive_dmerge_max(nJetMin-1)); delete jetDef; // Return kT return pTFirst; } //========================================================================== // Example main programm to illustrate merging int main( int argc, char* argv[] ){ // Check that correct number of command-line arguments if (argc != 4) { cerr << " Unexpected number of command-line arguments ("<