MET using forward tracking with ITk


This is the documentation page for the MET reconstruction using forward tracking with ITk at HL-LHC. This page will describe the workflow of a generic EventLoop based analysis tool producing histograms root files from AOD samples produced during the MC15 upgrade production campaign of the ATLAS Production Group.

The purpose of this tool is to study the performance of Missing ET and PileUp mitigation with the ATLAS + ITk detector under HL-LHC conditions.

The typical output file will contain basic MET observables (TST MET, as well as its components, TST Residuals in bins of NPV or ΣET...) and Jets related observables (jets pT in bins of η before and after PileUp suppression...) both at reconstructed and truth level.

This TWiki will present the complete workflow of the tool with pseudo-code examples showing the implementation of its most crucial parts.

This tool was successfully employed to produce several performance studies, such in JETM-2016-012 and JETM-2016-013, as shown below:



Setting up

The tool was developed in the EventLoop framework, with the RootCore build system. Please refer to this nice tutorial for detailed instructions on how to setup your Analysis Release and create the Analysis Package and your EventLoop Algorithm.

In the following, we will suppose that the package has been properly set up. Its structure should be:

  • TestArea
    • MyAnalysis
      • Root
        • MyxAODAnalysis.cxx
        • LinkDef.h
      • MyAnalysis
        • MyxAODAnalysis.h
      • cmt
        • MakeFile.RootCore

In order to run the performance studies we are interested in, it is necessary to update the dependencies in TestArea/cmt/MakeFile.RootCore. The final file should look similar to the following:

PACKAGE              = MyAnalysis
PACKAGE_DEP = EventLoop  xAODRootAccess CPAnalysisExamples xAODEventInfo GoodRunsLists xAODJet JetSelectorTools xAODMissingET xAODEgamma xAODMuon MuonMomentumCorrections EventLoopAlgs Asg_FastJet xAODCaloEvent AsgTools  xAODTruth xAODTracking xAODCaloEvent MCTruthClassifier xAODCore xAODTau xAODBase ApplyJetCalibration
PACKAGE_NOOPT        = 0
PACKAGE_NOCC         = 0

include $(ROOTCOREDIR)/Makefile-common

Every package is already included in the Analysis Release, so no need to check out additional ones.

Set-up and compilation of the code is quite trivial:

lsetup panda
lsetup 'rcsetup Base,2.4.19'
rc find_packages
rc compile

The framework is now completely set.


This section describes the complete analysis workflow. It should be implemented in TestArea/MyAnalysis/Root/MyxAODAnalysis.cxx and TestArea/MyAnalysis/MyAnalysis/MyxAODAnalysis.h.

The tool takes as input AODs and returns a root file containing histograms as output. Several operations are performed:

  • Containers retrieving
  • Lepton selection
  • Jet calibration
  • Tracks association to Hard Scatter Vertex
  • Tracks ghost-association to jets
  • PileUp Jet Rejection
  • MET Reconstruction

Containers retrieving

Please refer to the dedicated documentation for instruction on how to retrieve a particular container. Here it will be shown as an example the way to retrieve the AntiKt4EMTopoJets container.

In TestArea/MyAnalysis/MyAnalysis/MyxAODAnalysis.h:

#include "xAODRootAccess/Init.h"
#include "xAODRootAccess/TEvent.h"
#include "xAODRootAccess/tools/Message.h"
#include "xAODJet/JetContainer.h"
#include "xAODJet/JetAuxContainer.h"
   xAOD::TEvent *m_event;  //!


EL::StatusCode MyxAODAnalysis :: initialize () {   
   m_event = wk()->xaodEvent();
   return EL::StatusCode::SUCCESS;
EL::StatusCode MyxAODAnalysis :: execute () {   
  const xAOD::JetContainer* jets = 0;
   if(! m_event->retrieve( jets, "AntiKt4EMTopoJets" ).isSuccess() )
      Error("execute():", "Failed to retrieve AntiKt4EMTopoJets Container. Exiting.");
   return EL::StatusCode::SUCCESS;

Lepton selection

The selection which is described here is aimed for ttbar inclusive and dijet selection.

Lepton are required to satisfy loose selection criteria. In particular:

  • e:
    • Medium electrons with a minimum pT of 10 GeV
  • μ:
    • Loose muons with a minimum pT of 10 GeV
  • τ:
    • Event is vetoed if a tau satifying the JETIDBDTMEDIUM criteria with a minimum pT of 15 GeV is found. See here for further information

Tracks associated to selected leptons have to be flagged to avoid double counting during MET Reconstruction:

for(size_t iTrk=0; iTrknTrackParticles(); ++iTrk) {
   const xAOD::TrackParticle* eltrk = xAOD::EgammaHelpers::getOriginalTrackParticleFromGSF(el->trackParticle(iTrk));
   eltrk->auxdecor< bool >( "isFlagged" ) = true;  

const xAOD::TrackParticle* mutrk=0;
ElementLink idtpLink = mu->inDetTrackParticleLink();   
   mutrk = *idtpLink;   
   mutrk->auxdecor< bool >( "isFlagged" ) = true;

Where el is a xAOD::Electron* object and mu is a xAOD::Muon* one.

Jet calibration

Jets are calibrated using the official JetCalibTool shipped with AnalysisBase2.4.19. Please refer to the official Twiki for detailed information on how to set up the package and apply the calibration to jets.

The calibration sequence for HL-LHC can be found here. The files are stored in the GroupData CalibrationArea.

μ 140
Jet Algorithm "AntiKt4EMTopo", "AntiKt4LCTopo"
Configuration file HLLHC/JES_MC15_HLLHC_r7768_May2016_v2.config
Calibration sequence "JetArea_Residual_Origin_EtaJES"
isData parameter in constructor false

μ 200
Jet Algorithm "AntiKt4EMTopo", "AntiKt4LCTopo"
Configuration file HLLHC/JES_MC15_HLLHC_r7769_May2016_v2.config
Calibration sequence "JetArea_Residual_Origin_EtaJES"
isData parameter in constructor false

Tracks association to Hard Scatter Vertex

One of the most crucial aspect to achieve a good PileUp mitigation is an efficient selection of the tracks coming from the Hard Scatter Vertex.

As a first step, tracks selected at reconstruction level are taken. A loose cut based on their transverse momentum is then applied:

A further cut based on the quantity Δz0 of selected tracks with respect to the reconstructed Hard Scatter Vertex, defined as |z0+vz-zV0| is applied, where z0 is the longitudinal impact parameter and vz is the point of reference for the z0 calculation (further information here).

The quantity Δz0 is then required to stay below the parametrised Δz0(η) resolution function.

This function is obtained from a fifth order polynomial fit of the distribution of the tracks truth associated with the Hard Scatter Vertex as a function of η using a dijet MC sample. The resulting fitting function for different ITk Layouts, taken from ATL-COM-UPGRADE-2016-042, is shown in the figure below.


Tracks passing the entire selection are then considered to be associated to the Hard Scatter Vertex and decorated (HStrack->auxdecor< bool >( "isHSTrack" ) = true;).

Tracks ghost-association to jets

Tracks are associated to Jets through the ghost-association technique. EM TopoClusters and tracks with their pT set to a very small value (hence ghost tracks) are clustered using the anti-kT algorithm as implemented in FastJet with a value of R=0.4.

EM TopoClusters retrieving

The calorimeter deposits are retrieved from the CaloCalTopoClusters Container inside the const xAOD::CaloClusterContainer*   theClusColl object. Its element are then inserted in a vector of PseudoJet, std::vector < fastjet::PseudoJet > input_particles, i.e. the entities which will be clustered.

Ghost tracks definition

Selected, non associated to leptons ghost tracks from the InDetTrackParticles Container (retrieved inside the const xAOD::TrackParticleContainer* recoTracks object) are pushed in the std::vector < fastjet::PseudoJet > input_particles vector defined before.

SG::AuxElement::Accessor<bool> isLepTrack("isFlagged"); //Accessor to the decorator which is true if the reconstructed track belongs to a selected lepton
SG::AuxElement::Accessor<bool> HSTrack("isHSTrack"); //Accessor to the decorator which is true if the reconstructed track has passed the selection
for(const auto& rt : *recoTracks) {
   if( (isLepTrack.isAvailable( *(rt) ) ) )
      if( ( isLepTrack (*(rt)) )!=0 )
   if( (HSTrack.isAvailable( *(rt) ) ) )
      if(!(HSTrack (*(rt))))
   fastjet::PseudoJet trackPJ(0., 0., 0., 0.);
   trackPJ.reset_PtYPhiM(rt-&gt;pt()/1000000., rt-&gt;eta(), rt-&gt;phi(), 0. );

Where the set_user_index(int) method apply a flag to the PseudoJet. This way it is possible to distinguish a energy deposit to a ghost track.

Jet reclustering

double R = 0.4;
fastjet::JetDefinition jet_def(fastjet::antikt_algorithm, R, fastjet::Best);
fastjet::AreaDefinition area_def;
fastjet::ClusterSequenceArea clust_seq(input_particles, jet_def, area_def);
std::vector inclusive_jets = sorted_by_pt(clust_seq.inclusive_jets(0));

Where std::vector inclusive_jets contains the clustered jets sorted by decreasing pT.

PileUp Jet Rejection

PileUp Jets are rejected using a jet vertex tagging technique based on the RpT discriminant.

The variable RpT is defined as the scalar pT sum of the tracks associated with the jet divided and originate from the Hard Scatter Vertex divided by the fully calibrated jet pT.

RpT is peaked at 0 and steeply falling for PileUp jets, due to the fact that none or a very small momentum of the tracks from the Hard Scatter Vertex is expected. For Hard Scatter Jets, the RpT has the meaning of their charged pT fraction. The rejection procedure goes through several steps:

  • The RpT for each Calibrated Jet is evaluated;

std::vector constituents = clust_seq.constituents(inclusive_jets[0]);
double Rpt=0;
for(auto& iconstituent : constituents){
   int index  =iconstituent.user_index();    
   if (index&gt;=0) //Ghost tracks are flagged through this user_index(), as defined above
      Rpt += iconstituent.perp()*1000000;
Rpt /= jet-&gt;pt();

  • Calibrated Jets are rejected if their RpT is less than 0.1

MET Reconstruction

The several terms of the MET are reconstructed by hand, since METMaker does not support this specific user case at the moment. The electron, jet and muon terms are build from the relative objects, selected as described above. The photon term is made by medium photons with pT≥10 GeV.

Finally, the soft term is made by tracks ghost-associated to uncalibrated jets (pT<20 GeV) and not associated to selected leptons.

The terms are then summed and stored in xAOD::MissingET() objects.


The complete list of samples for HL-LHC can be found here: MC15 upgrade production campaign.

For the studies described in this page, the following MC samples were used:

  • μ=140, ttbar: mc15_14TeV.117050.PowhegPythia_P2011C_ttbar.recon.AOD.e2176_s2988_s3000_r9052
  • μ=200, ttbar: mc15_14TeV.117050.PowhegPythia_P2011C_ttbar.recon.AOD.e2176_s2988_s3000_r8832
  • μ=140, dijet: mc15_14TeV.147911.Pythia8_AU2CT10_jetjet_JZ1W.recon.AOD.e2403_s2988_s3000_r9052
  • μ=200, dijet: mc15_14TeV.147911.Pythia8_AU2CT10_jetjet_JZ1W.recon.AOD.e2403_s2988_s3000_r8821

Responsible: MatteoScornajenghi - 2017-02-27

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng rms.png r1 manage 51.0 K 2017-02-25 - 15:38 MatteoScornajenghi Rms Deltaz0
PNGpng rpt_formula.png r1 manage 5.0 K 2017-02-27 - 08:43 MatteoScornajenghi RpT definition
Edit | Attach | Watch | Print version | History: r9 < r8 < r7 < r6 < r5 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r9 - 2017-02-27 - MatteoScornajenghi
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Main All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback