High-pT TopTagger (HPTTopTagger)


Tagging highly boosted top quarks

S. Schaetzel and M. Spannowsky

Phys. Rev. D 89 (2014) 014007

arxiv: 1308.0540

Tracking New Physics at the LHC and beyond

M.Spannowsky and M.Stoll

Phys. Rev. D 92 (2015) 054033

arxiv: 1505.01921


The HPTTopTagger algorithm reconstructs hadronically decaying top quarks and is specifically designed for high top quark transverse momentum (>1TeV) where calorimeter granularity prevents the separate detection of the individual decay products.

The HPTTopTagger uses tracks of charged particles (or a combination between E-cal and tracks) inside a fat jet. The tracking information is complemented by the calorimeter measurement (Hcal + Ecal + tracks) of the fat jet energy to eliminate the sensitivity to jet-to-jet fluctuations in the charged-to-neutral particle ratio.

The algorithm is based on FastJet jets and their respective cluster sequences.

Source Code

You can download the source code for V1 here and for V2 here.

Usage Example:

// get fat jets from calorimeter information (charged and neutral particles)

double R=0.8;

double ptmin_jet = 1000.0;

fastjet::JetDefinition jet_def(fastjet::cambridge_algorithm, R);

fastjet::ClusterSequence clust_seq(calo_cells, jet_def);

vector<fastjet::PseudoJet> jets = sorted_by_pt(clust_seq.inclusive_jets(ptmin_jet));

// jets[0] is the leading pT calorimeter fat jet

// create a corresponding fat jet from the associated tracks (can include Ecal information)

vector<fastjet::PseudoJet> fatjet_constituents = clust_seq->constituents( jets[0] );

charged_constituents = ... // use ghost association (PDG ID) to identify tracks (charged particles)

fastjet::JetDefinition jet_def_charged(fastjet::cambridge_algorithm, 2*R);

fastjet::ClusterSequence clust_seq_c(charged_constituents, jet_def_charged);

vector<fastjet::PseudoJet> charged_jet = sorted_by_pt(clust_seq_c.inclusive_jets());

// charged_jet[0] corresponds to jets[0] but contains only the associated tracks (charged particles)

// run the HPTTopTagger

HPTTopTagger hpttoptag(clust_seq_c, charged_jet[0], clust_seq, jets[0]);




if (hpttoptag.is_maybe_top()) {

   // top candidate is within mass window

if ( hpttoptag.is_tagged() ) {

    // top candidate satisfies all cuts

    PseudoJet candidate = hpttoptag.top_candidate();


   if (hpttoptag.is_masscut_passed()) {

      // top candidate satisfies the "A cuts"

      // fat jet jets[0] is tagged by the HPTTopTagger



In case you have questions please get in touch with us,

Martin, Michael and Sebastian