Fork me on GitHub

Version 18 (modified by Pavel Demin, 10 years ago) ( diff )

--

Running Delphes with External FastJet

Introduction

This section explains how you can run your own FastJet code on Delphes particles. We provide two working codes in the examples/ExternalFastJet directory, examples/ExternalFastJet/ExternalFastJetBasic.cpp and examples/ExternalFastJet/ExternalFastJetHepMC.cpp.

Both examples convert generated events into Delphes candidates, perform event reconstruction, and pass reconstructed particles to anti-kT clustering. ExternalFastJetHepMC takes as input an HepMC event file, while ExternalFastJetBasic has internally defined input particles.

The cards/delphes_card_CMS_NoFastJet.tcl configuration detector card is a truncated version of the cards/delphes_card_CMS.tcl, as the reconstruction is stopped after producing collections of calorimeter towers and particle-flow objects, before jet and high level object isolation and identification. Similar cards for the ATLAS and the FCC detectors can be easily produced by truncating cards/delphes_card_ATLAS.tcl and cards/delphes_card_FCC_basic.tcl likewise.

The input particle collection to jet clustering are specified inside examples/ExternalFastJet/ExternalFastJetBasic.cpp and examples/ExternalFastJet/ExternalFastJetHepMC.cpp via:

inputArray = modularDelphes->ImportArray("ModuleInstanceName/arrayName");

By default the particle-flow collection EFlowMerger/eflow is taken. This can be easily changed to simple calorimeter towers, tracks, or stable generated particles (or any other collection defined in the configuration card) by defining instead:

inputArray = modularDelphes->ImportArray("EFlowMerger/eflow");  // particle-flow objects

or

inputArray = modularDelphes->ImportArray("Calorimeter/towers"); // calorimeter objects

or

inputArray = modularDelphes->ImportArray("TrackMerger/tracks"); // charged tracks

or

inputArray = modularDelphes->ImportArray("Delphes/stableParticles"); // all gen-level stable particles

Setup and build

In order to run Delphes with your own FastJet installation you first need to install Delphes and FastJet (to install Delphes, see here, for FastJet see here). In examples/ExternalFastJet/Makefile set the paths to your Delphes, FastJet and ROOT installations (DELPHES_DIR, FASTJET_DIR and ROOT_DIR), and simply type in a shell:

cd examples/ExternalFastJet
make

and go to the Run section.

Alternatively, here are the instructions necessary for constructing a Makefile:

Set the paths to your Delphes, FastJet and ROOT installations (DELPHES_DIR, FASTJET_DIR and ROOT_DIR):

DELPHES_DIR=<path to Delphes installation>  # main Delphes directory
FASTJET_DIR=<path to FastJet installation>  # by default should be xyz/fastjet-install
ROOT_DIR=<path to ROOT installation>        

Then run the following commands to build the executable:

DELPHES_LIB="-Wl,-rpath,$DELPHES_DIR -L$DELPHES_DIR -lDelphesNoFastJet"

FASTJET_INC=`$FASTJET_DIR/bin/fastjet-config --cxxflags`
FASTJET_LIB=`$FASTJET_DIR/bin/fastjet-config --libs`

ROOT_INC=`$ROOT_DIR/bin/root-config --incdir`
ROOT_LIB=`$ROOT_DIR/bin/root-config --libs`

CXXFLAGS="$FASTJET_INC -I$ROOT_INC -I$DELPHES_DIR -I$DELPHES_DIR/external"
LDFLAGS="$FASTJET_LIB $ROOT_LIB -lEG $DELPHES_LIB"

The libDelphesNoFastJet.so library is automatically created when compiling Delphes the first time. This avoids conflict between your FastJet installation and the one in Delphes.

If you have a FastJet Contrib installation, assuming you installed it in the CONTRIB_DIR directory (by default FastJet contrib will be installed in the FastJet directory, in that case you can replace in what follows CONTRIB_DIR with FASTJET_DIR), you have to define:

CONTRIB_DIR=<path to contrib installation> 
CONTRIB_INC=$CONTRIB_DIR/include
CONTRIB_LIB="-Wl,-rpath,$CONTRIB_DIR -L$CONTRIB_DIR -lNsubjettiness -lSoftKiller"

and add CONTRIB_INC and CONTRIB_LIB into CXXFLAGS and LDFLAGS:

CXXFLAGS="$FASTJET_INC -I$CONTRIB_INC -I$ROOT_INC -I$DELPHES_DIR -I$DELPHES_DIR/external"
LDFLAGS="$FASTJET_LIB $CONTRIB_LIB $ROOT_LIB -lEG $DELPHES_LIB"

then compile:

g++ $CXXFLAGS examples/ExternalFastJet/ExternalFastJetBasic.cpp $LDFLAGS -o ExternalFastJetBasic
g++ $CXXFLAGS examples/ExternalFastJet/ExternalFastJetHepMC.cpp $LDFLAGS -o ExternalFastJetHepMC

Run

If you need a test HepMC event file, you can take it from:

curl -O http://cp3.irmp.ucl.ac.be/~demin/test.hepmc.gz
gunzip test.hepmc.gz

Then run one of the two examples ExternalFastJetBasic or ExternalFastJetHepMC (for ExternalFastJetHepMC you need an event file in HepMC format as input):

./ExternalFastJetBasic cards/delphes_card_CMS_NoFastJet.tcl
./ExternalFastJetHepMC cards/delphes_card_CMS_NoFastJet.tcl test.hepmc
Note: See TracWiki for help on using the wiki.