Jet Reconstruction in CMSSW 1.3.0

Complete: 5
Detailed Review Status


Jet Algorithms

  • Cone Algorithms:
    • Iterative Cone
      • Seed: ET > 1 GeV
      • ConeSizeR: 0.5 or 0.7
    • Midpoint Cone (CDF implementation: original code, description)
      • Seed: ET > 1 GeV
      • ConeSizeR: 0.5 or 0.7
      • overlapThreshold: 0.75 (controls splitting-merging)
  • Kt Clustering Algorithms (external package implementation)
The recombination scheme (momentum addition rule of constituents in a jet) used
for all jet algorithms is the E-scheme:
  • Eij = Ei + Ej
  • pij = pi + pj

CMS.JetMET Reconstruction

The standard reconstruction sequence:
path jetmetReco ={ calolocalreco, caloTowersRec, recoJets, metreco, RecoSim}

  1. calolocalreco, caloTowersRec (see section CaloTowerInputs)
  2. recoJets: run clustering algorithm to produce Jets
    • Four basic algorithms and corresponding producers are currently implemented for CMS
      • Midpoint Cone algorithm: MidpointJetProducer
      • Iterative Cone algorithm: IterativeConeJetProducer
      • KT algorithm: ExtKtJetProducer
      • FastJet algorithm: FastJetProducer
  3. metreco: combine all towers into single MET (Missing ET) object
    • METProducer
  4. RecoSim: produce genJets and genMET collections
An example on how to run the 130 CMS.JetMET standard reconstruction can be found in this see section section.


Hadron Level Definition: True Particle Level

All particles before the beampipe are considered. All particles with:
  • Lifetime > 10 mm set stable
  • Lifetime < 10 mm set unstable and decayed in Pythia
The hadron level jets (GenJets) are formed with two input collections
  • genParticlesAllStable
  • genParticlesAllStableNoNu: exclude neutrinos and non-interacting BSM particles
The hadron level MET (GenMET) are formed with two input collections:
  • genParticlesAllStableNoNu: exclude neutrinos and non-interacting BSM particles
  • genCandidatesForMET: exclude neutrinos, muon and non-interacting BSM particles

Jet Algorithm Inputs to Detector Level Jets

Different inputs can be used with the standard jet algorithms to produce detector level jets (CMS.CaloJets).

CaloTower Inputs to Jets

The standard input for CMS.CaloJets in the default reconstruction are CMS.CaloTowers.

CMS.CaloTowers are produced following these steps:

  1. convert ADC counts to energy in one calorimeter cell
    • HcalSimpleReconstructor does this calculation for HCAL
    • ECAL does it in two steps
      • first produces uncalibrated hits: EcalWeightUncalibratedRecHitProducer
      • then calibrates hits: EcalAnalFitUncalibratedRecHitProducer
  2. combine ECAL and HCAL cells into projective towers corresponding to HCAL granularity
    • CaloTowersCreator does this operation
  3. convert CMS.CaloTowers into standard objects CaloTowerCandidateCreator

Scheme B is used for Cell Threholds to form CMS.CaloTowers.


For the HF long and short fiber readout a threshold of 0.5 GeV is applied (ORCA threshold).


Particle Flow input to Jets

To input Particle Flow objects to the standard jet algorithms the following packages
need to be checked out and compiled, to avoid using a candidate translator module.
Particle Flow objects are not run in default reconstruction so they need to be created
if you run on stardard produced Monte Carlo samples.
   scramv1 project CMSSW CMSSW_1_3_0
   cd CMSSW_1_3_0/src
   cmscvsroot CMSSW
   eval `scramv1 runtime -csh`  
   cvs co -r V02-00-06 DataFormats/JetReco
   cvs co -r V00-03-08 RecoJets/CMS.JetAlgorithms
   cvs co -r V00-05-11 RecoJets/JetProducers
   cvs co -r V01-06-05 RecoParticleFlow/PFProducer
   cvs co -r JetTutorial_1_3_0 RecoJets/JetAnalyzers
   scramv1 b
   cd RecoJets/JetAnalyzers/test
   cmsRun RunPFJets.cfg
An example config file on how to create PF objects and run on a Z' ->dijet samples
can be found here ( RunPFJets.cfg )

An example config file on how to run on a single tau gun jet sample, which already contains
PF objects, can be found here( RunPFTauJets.cfg )

Since there have been some major improvements in CMSSW_1_3_1,
this version is recommended to be used for jets with Particle Flow.

A short example:

   scramv1 project CMSSW CMSSW_1_3_1
   cd CMSSW_1_3_1/src
   project CMSSW
   eval `scramv1 runtime -csh`  
   cvs co -r  V03-01-00  DataFormats/ParticleFlowReco
   cvs co -r  V03-01-00  DataFormats/ParticleFlowCandidate
   cvs co -r  V03-01-00  RecoParticleFlow 
   scramv1 b
   cd RecoParticleFlow/PFBlockProducer/test
   cmsRun fevt2block.cfg
   cd RecoParticleFlow/PFProducer/test
   cmsRun block2candidates.cfg

The output root file (candidates.root) contains two example jet collections produced from Particle Flow Candidates:
iterativeCone5PFJets and fastjet10PFJets.

Detailed information about running Particle Flow can be found in the following tutorial: EFlowTutorialVersion2.


Track input to Jets

Tracks are not candidates so they cannot be input directly to the standard jet algorithms.
The framework module ChargedCandidateProducer needs to be called to wrap up tracks in
RecoChargedCandidates which can be input to the jet algorithms.
An example on how to do this is below.
   scramv1 project CMSSW CMSSW_1_3_1
   cd CMSSW_1_3_1/src
   cmscvsroot CMSSW 
   eval `scramv1 runtime -csh`
   cvs co -r JetTutorial_1_3_0 RecoJets/JetAnalyzers
   scramv1 b
   cd RecoJets/JetAnalyzers/test
   cmsRun RunTrackJets.cfg
The example config file can be found here ( RunTrackJets.cfg )

GenJet Utilities

GenJet Flavour definition

GenJet are built from a GenParticleCandidate collection. The GenJet flavour depends on the choosen algorithm. In CMS exist 3 different algorithms which have been developed for 2 different purposes: jet bTag and jet calibration. The final outcome of each algorithm is to assign a flavour to the GenJet. The assigned flavour can be:

  • light jet (uds jet)
  • b jet
  • c jet
  • gluon jet

Depending on the algorithm light and gluon jets can be considered as one single category (udsg jets). The 3 algorithm are called:

  • Algorithmic definition (bTag purpose)
  • Physics definition (bTag purpose)
  • Energetic definition (Calibration purpose)

More info on the first 2 algorithms can be found in the proper twiki page (SWGuideBTagMCTools) and are located in the RecoBTag/MCTools package. It's worth to note that these 2 algorthms are based on HepMC and not on the Candidate Model. Porting to the Candidate Model is foreseen for CMSSW_1_5_0.

The major difference among the first 2 algorithm and the 3th is the particles used for the flavour definition: the Algorithmic and the Physics definition looks for generator particles in a cone around the jet axis while the Energetic definition looks directly to the particles used to build the jet (the constituents of the jet).

the Energetic definition

Each GenJet is formed from a set of GenParticleCandidate (constituents), each GenParticleCandidate can be checked for its decay chain looking at its ancestors using the method:
std::vector<const reco::Candidate *> getAncestors(const reco::Candidate &c);
Most of the time, the decay chain starts from a string (ID=92), a cluster (ID=91) or a lepton (a tau for example). Each ancestors is looked for its flavour using the methods:
bool hasBottom(const reco::Candidate &c);
bool hasCharm(const reco::Candidate &c);
A variable is built for each jet computing the fractio of the energy of the jet which comes from b ( c) hadrons. In other words the sum of energy of the particles decayed from a b ( c) hadrons is computed.

A typical light jet is the following:

[GenJetTest] (pt,eta,phi | bRatio cRatio) =  87.41 -0.59 -0.18 | 0.000 0.000 |
        [Constituents] (pt,eta,phi | isB,isC |) =  78.66 -0.58 -0.21 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   2.57 -0.75  0.14 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   2.36 -0.51  0.01 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   1.06 -0.58  0.06 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.97 -0.54  0.28 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.48 -0.39  0.14 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.42 -0.32  0.19 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.38 -0.71 -0.18 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.27 -0.95  0.02 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.17 -0.61 -0.65 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.06 -0.69 -0.20 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.04 -0.71 -0.38 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.03 -0.24 -0.25 | 0 0 |
where the first line is the jet itself and bRatio and cRatio are the quantity computed as the fractio of energy of all the constituents (the following lines) which decay from a b ( c) hadron (zero in this case because none of the constituents decay from an heavy hadron).

An example of a b jet is the following:

[GenJetTest] (pt,eta,phi | bRatio cRatio) =  75.30 -0.25 -1.15 | 0.798 0.375 |
        [Constituents] (pt,eta,phi | isB,isC |) =  23.51 -0.15 -1.10 | 1 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =  11.15 -0.26 -1.20 | 1 1 |
        [Constituents] (pt,eta,phi | isB,isC |) =  10.95 -0.33 -1.17 | 1 1 |
        [Constituents] (pt,eta,phi | isB,isC |) =   7.80 -0.31 -1.16 | 1 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   5.89 -0.19 -1.21 | 1 1 |
        [Constituents] (pt,eta,phi | isB,isC |) =   4.48 -0.23 -1.18 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   2.83 -0.23 -1.01 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   2.18 -0.43 -1.15 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   1.56 -0.16 -1.38 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   1.30 -0.49 -1.18 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   1.01 -0.38 -1.24 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.85 -0.25 -1.19 | 1 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.54 -0.50 -0.95 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.34 -0.45 -1.37 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.26 -0.24 -1.46 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.15  0.13 -1.26 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.09  0.12 -0.95 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.09 -0.42 -1.36 | 0 0 |
        [Constituents] (pt,eta,phi | isB,isC |) =   0.04 -0.50 -0.95 | 0 0 |
In this case there are 3 particles that decay directly from a b hadron and 3 particles that decay from a b hadron throug a c hadron. Hence the 79.8% of the energy for this jet comes from b particles, while 37.5% comes from c particles.

The typical distribution for the variables bRatio and cRatio are shown in the following plots for the samples tt1j, tt2j, tt3j and tt4j produced with ALPGEN. Immagine1.png Immagine2.png

The sharp peak on the left of the plots are light jets. Choice of the value to cut for flavour definition is a user responsability, typical value are:

bRatio>0.20 for bJets
 cRatio>0.20 and bRatio<0.20 for cJets
 bRatio<0.20 and cRatio<0.20 for light Jets

The implementation for the Energetic definition is in the package CMS.PhysicsTools/JetMCUtils

A simple analyzer ( printGenEvent.h) for accessing the variable bRatio and cRatio for a GenJet is the the following:

  for( CandidateCollection::const_iterator f  = genJets->begin();
                                           f != genJets->end();
                                           f++) {
    double bRatio = EnergyRatioFromBHadrons(*f);
    double cRatio = EnergyRatioFromCHadrons(*f);
    for( Candidate::const_iterator c  = f->begin();
                                   c != f->end();
                                   c ++) {
      const Candidate* theMasterClone;
      bool isB = false;
      bool isC = false;
      if (c->hasMasterClone ()) {
        theMasterClone = c->masterClone().get();
        isB = decayFromBHadron(*theMasterClone);
        isC = decayFromCHadron(*theMasterClone);

This example produce an output similar to the previous jet output with information on one jet and its constituents. The relative configuration file is printEvent.cfg

Jet Matching (feature available from CMSSW 14X)

There are 2 matching tools implemented:

  • One-To-One matching
  • One-To-Many matching
Each tool works on Candidate: every collection represented as a CandidateCollection can be uses as input to the matching tools. Hence the use of these tools is not limited to RecoJets and GenJets.

A simple analyzer jetTest.h exists in CMS.PhysicsTools/JetMCAlgos/interface showing an example for both the matching tools. The relative jetMatch.cfg file is in CMS.PhysicsTools/JetMCAlgos/test

First 2 JetCollection are cloned to CandidateCollection:

# this is to get a CandidateCollection from a JetCollection
  module caloJetCollectionClone = CaloJetShallowCloneProducer{
    InputTag src = iterativeCone5CMS.CaloJets

  module genJetCollectionClone = GenJetShallowCloneProducer{
    InputTag src = iterativeCone5GenJets

Then a cut on the minimum $E_T$ is applied for reducing the number of objects in the collection (A typical jet collection contains tenths of jets, most of them with very low $E_T$ $\to$ not interesting for analysis):

# Selection of jets
  module caloJetSele = PtMinCandSelector{
    InputTag src = caloJetCollectionClone
    double ptMin        = 20.0

  module genJetSele = PtMinCandSelector{
    InputTag src = genJetCollectionClone
    double ptMin        = 20.0

Finally the 2 matching tools are called to save in the events the 2 MatchingMap:

# The matching routine OneToOne
  module jetMatchOne = CandOneToOneDeltaRMatcher {
    InputTag src      = genJetSele
    InputTag matched  = caloJetSele
    untracked bool printDebug = true

# The matching routine OneToMany
  module jetMatchMany = CandOneToManyDeltaRMatcher {
    InputTag src      = genJetSele
    InputTag matched  = caloJetSele
    untracked bool printDebug = true

One-To-One Matching

The One-To-One Matching is the typical operation for matching a collection of RecoGet to a collection of GenJet. In the One-To-One matching, each component of the first collection (InputTag src) is matched to a unique component of the second collection (InputTag matched) and viceversa. This means that the number of matched object is equal to the smaller collection and the bigger one has un-matched objects.

The metrics used for matching is $min(\Sigma_{ij}\Delta R)$, where $\Delta R = \sqrt{\Delta\eta^2+\Delta\phi^2}$. The sum is computed over all the ij possible combination of pairing an object of the first collection to an object of the second collection.

The number of combinations increase as n! where n is the number of objects in the bigger collection $\to$ the CPU time needed to check for all the combination can become extremely high: a Hard-Coded limit of 9 objects is implemented for performing the matching. To change this limit, the CMS.PhysicsTools/JetMCAlgos should be check-out and the file in the plugins directory has to be edited and recompiled.

  if( matched->size() > 9 || matched->size() <= 0 ) return;
  if( source->size()  > 9 || source->size()  <= 0 ) return;

This is an example of One-To-One matching with 2 collections (the src with 5 jets and the matched with 3 jets)

[CandOneToOneDeltaRMatcher] Et source  90.2919
[CandOneToOneDeltaRMatcher] Et source  55.8628
[CandOneToOneDeltaRMatcher] Et source  50.3346
[CandOneToOneDeltaRMatcher] Et source  41.4992
[CandOneToOneDeltaRMatcher] Et source  36.3017

[CandOneToOneDeltaRMatcher] Et matched 84.928
[CandOneToOneDeltaRMatcher] Et matched 72.3578
[CandOneToOneDeltaRMatcher] Et matched 53.4144

The $\Delta R$ matrix and the best combination is the following:

1.927 2.393 0.264 1.789 0.497
 2.682 0.567 2.188 0.418 1.642
 0.102 2.088 1.792 3.036 2.399
[CandOneToOneDeltaRMatcher] Best DeltaR=0.784598 230
[GenJetTest] (pt,eta,phi) source =  90.29 -2.13  1.31 matched =  53.41 -2.21  1.24 dR=0.102
[GenJetTest] (pt,eta,phi) source =  50.33 -1.87  3.00 matched =  84.93 -1.68 -3.11 dR=0.264
[GenJetTest] (pt,eta,phi) source =  41.50 -0.89 -1.50 matched =  72.36 -1.19 -1.21 dR=0.418

One-To-Many Matching

The One-To-Many is simpler: each object of the second (matched) collection is matched to each object of the first (src) collection. For the moment the ordering of the matching is from the farest to the nearest in the $\Delta R$ plane. This will be corrected in the 150 cycle with the nearest matching being the first. The typical output of the One-To-Many matching using the same input is the following:

[GenJetTest] (pt,eta,phi) source =  90.29 -2.13  1.31
             (pt,eta,phi) matched =  72.36 -1.19 -1.21 - dR= 2.68
             (pt,eta,phi) matched =  84.93 -1.68 -3.11 - dR= 1.93
             (pt,eta,phi) matched =  53.41 -2.21  1.24 - dR= 0.10
[GenJetTest] (pt,eta,phi) source =  55.86 -1.48 -0.72
             (pt,eta,phi) matched =  84.93 -1.68 -3.11 - dR= 2.39
             (pt,eta,phi) matched =  53.41 -2.21  1.24 - dR= 2.09
             (pt,eta,phi) matched =  72.36 -1.19 -1.21 - dR= 0.57
[GenJetTest] (pt,eta,phi) source =  50.33 -1.87  3.00
             (pt,eta,phi) matched =  72.36 -1.19 -1.21 - dR= 2.19
             (pt,eta,phi) matched =  53.41 -2.21  1.24 - dR= 1.79
             (pt,eta,phi) matched =  84.93 -1.68 -3.11 - dR= 0.26
[GenJetTest] (pt,eta,phi) source =  41.50 -0.89 -1.50
             (pt,eta,phi) matched =  53.41 -2.21  1.24 - dR= 3.04
             (pt,eta,phi) matched =  84.93 -1.68 -3.11 - dR= 1.79
             (pt,eta,phi) matched =  72.36 -1.19 -1.21 - dR= 0.42
[GenJetTest] (pt,eta,phi) source =  36.30 -1.25 -2.85
             (pt,eta,phi) matched =  53.41 -2.21  1.24 - dR= 2.40
             (pt,eta,phi) matched =  72.36 -1.19 -1.21 - dR= 1.64
             (pt,eta,phi) matched =  84.93 -1.68 -3.11 - dR= 0.50

JetMET Corrections

Jet Energy scale corrections: Factorization


(Details in Robert Harris' Slides)

Jet Corrections using MC Jet

Corrections to calorimeter reconstructed jets ( CMS.CaloJets) as a function of jet ET and eta
are available in the MCJet package of JetMETCorrections.

MC Jet corrections are provide in two ways as of 1.3.0:

1. Corrected Collections: take as input a collection of CMS.CaloJets and write as output a collection of corrected CMS.CaloJets.

2. Correction Service: accesses the jet correction itself for a given jet, allowing user to correct CMS.CaloJets "on the fly" without creating a collection of corrected CMS.CaloJets.

The correction was derived from the jet response, CaloJet ET/GenJet ET, from all jets in a QCD MC sample w/o pileup. The correction scales the CaloJet Lorentz vectors so that on average the corrected CaloJet response is equal to 1.

The correction is available in the MCJet package. The most recent .cff file to apply this calibration is

which can correct the algorithms Midpoint Cone R=0.5 and R=0.7, Iterative Cone R=0.5 and R=07, and Fastjet KT D=0.6 and D=1.0 for the response measured in the Spring07 MC sample (generation and simulation CMSSW_1_2_3, digitization and reconstruction CMSSW_1_3_1). Still available is the older .cff file
which only corrects Midpoint Cone R=0.5 and R=0.7 and Iterative Cone R=0.5 for the response in the older CMSSW_1_2_0 sample (essentially the same response as the Spring07 sample).

An example of using the most recent corrections to apply the calibration for Midpoint Cone R=0.5 and access the corrected jet collections, and also to apply jet corrections on the fly, is in

Here are instructions to build and run that example against the Spring07 samples:

   scramv1 project CMSSW CMSSW_1_3_4
   cd CMSSW_1_3_4/src
   cmscvsroot CMSSW
   cvs co -r Spring07v1 JetMETCorrections/MCJet/data
   cvs co -r Spring07v1 RecoJets/JetAnalyzers
   eval `scramv1 runtime -csh`
   scramv1 b
   cd RecoJets/JetAnalyzers/test
   cmsRun CorJetsExample.cfg
The config file can be found here ( CorJetsExample.cfg ) and the source code of the example is here ( )

The example config file and source code accesses the correction in the following steps:

1. The config file declares the possible kinds of jet correction services and corrected jet collections:

   include "JetMETCorrections/MCJet/data/MCJetCorrectionsSpring07.cff"
The config file then resolves the ambiguity of which kind of jet correction should set the records IOV:
   es_prefer MCJetCorrectorMcone5 = MCJetCorrectionService {}
Inside MCJetCorrectionsSpring07.cff the corrections are specified as those appropriate for the Spring07 MC sample.

2. The config file picks the algorithm and jet correction service the code will actually use:

  module plots = CorJetsExample {
    string CaloJetAlgorithm ="midPointCone5CMS.CaloJets"
    string CorJetAlgorithm = "MCJetCorJetMcone5"
    string JetCorrectionService = "MCJetCorrectorMcone5"
    string GenJetAlgorithm = "midPointCone5GenJets"
The source code uses the passed corrected jet collection name to get the collection:
  evt.getByLabel( CorJetAlgorithm, corJets );
The source code also uses the correction sevice name to get jet corrections on the fly. This is done by passing a jet to the corrector and getting back the scale which should be used to multiply any of the jet's energy quantities (E, Px, Py, Pz, Pt, Et, m):
  const JetCorrector* corrector = JetCorrector::getJetCorrector (JetCorrectionService, es);
  for( CaloJetCollection::const_iterator cal = caloJets->begin(); 
                          cal != caloJets->end(); ++ cal ) {
    double scale = corrector->correction (*cal);
    double corPt=scale*cal->pt();
Most user's will only need to use one of these two techniques for accesing corrected jets, but this example demonstrates both.

3. The config file includes the producer ( MCJetCorJetMcone5) n the path.

  path p = { MCJetCorJetMcone5, plots }
This is only neded if the user is accessing corrected jet colllections; it is not needed if the user is accessing jet corrections on the fly.

The corrections were made from the Spring07 QCD MC sample without pileup.

Jet Flavor Corrections

MCJet corrections scale the energy of an "average QCD jet" back to the energy of the corresponding generator level particle jet. However, an analysis of the individual jet flavors (uds, c, b, gluon) shows that different corrections are need for different jet flavors. This leads to an over- or undercorrection if the MCJet corrections are applied to jets with a flavor composition different than that of QCD jets. For example, jets from the hadronic decay of a W boson consist only of uds and c quarks, which have a higher energy response than b and gluon jets. Consequently, applying MCJet corrections to these jets will result in an overcorrection. A first pass of flavor-specific corrections is provided as a tool to minimize the flavor-dependence of the MCJet corrections.

Often a correction not to the particle level but back to the parton level is desired (for example when measuring the W mass from hadronic W decays). For this purpose the current implementation of the flavor corrections has been measured back to the parton level, but only relative to "average QCD jets". This approach has been chosen in order to reflect the current understanding of the L1-L3 MCJet corrections. In practice this means that even after applying the parton-level flavor corrections to W->jj the reconstructed W mass will not necessarily peak at the generated W mass, but at a value that is determined by the current level of closure of the MCJet corrections. In the future flavor corrections and parton-level corrections will be provided separately.

The flavor and parton-level corrections provide additional corrections on top of the MCJet corrections. They were developed significantly after 13X was released. Fortunately, this functionality can be retrofitted into the 13X CMSSW family. Similar to MCJet corrections, one needs to check out new packages into the working area:

   scramv1 project CMSSW CMSSW_1_3_4
   cd CMSSW_1_3_4/src
   cmscvsroot CMSSW
   cvs co -r jet_corrections_13X_L5 CondFormats/JetMETObjects
   cvs co -r jet_corrections_13X_L5 JetMETCorrections/MCJet
   cvs co -r jet_corrections_13X_L5 RecoJets/JetAnalyzers
   cvs co -r jet_corrections_13X_L5_v2 JetMETCorrections/Modules
  eval `scramv1 runtime -csh`
   scramv1 b
   cd RecoJets/JetAnalyzers/test
   cmsRun runFlavorJetCorrectionExample.cfg

Note 1: jet_corrections_13X_L5 CVS tag extends Spring07v1 tag, so all MCJet functionality and examples remain valid with this tag.

Note 2: Scheme in introduction refers to flavor corrections as L4, however later it was upgraded to L5 with L4 supposed to be EM fraction dependent corrections.

Applying the relevant flavor jet corrections requires knowledge about jet the flavor, and it makes no sense to apply flavor corrections to all jets. However it makes a lot of sense to scale jet energy accordingly after the particular flavor hypothesis is established. runFlavorJetCorrectionExample.cfg runs two step jet corrections for Iterative Cone R=0.5 jets:

  • regular MCJetCorJetIcone5 JetCorrector module applies MC jet corrections to every jet of the raw IC5 jet collection, and produces new jet collection of corrected jets
  • toy FlavorJetCorrectionExample analysis module applies different flavor corrections to MC corrected jets: light quark, c-quark and b-quark corrections one by one, and print out the result.

Technicalities of using jet correction service are described in details in (2) of the previous section. in we inquiring all three jet correction services for different quark flavors at once, and then use one of them depending on artificially selected jet flavor.

MET Corrections

MET corrections:

  • Type 1: jet corrections
  • Type 2: muon corrections (not available in 130)

Example of Type 1 corrections in JetMETCorrections/Type1MET/data/MetType1Corrections.cff

      module corMetType1Icone5 = Type1MET{
            string metType = "CaloMET"
            string inputUncorMetLabel  = "met"
            string inputUncorJetsLabel = "iterativeCone5CMS.CaloJets"
            string corrector           = "MCJetCorrectorIcone5"
            double jetPTthreshold      = 20.0
            double jetEMfracLimit      = 0.9

By default, the corrector is set to use MCJet corrections which are defined in
GammaJet corrections can be used following the example in

Association of jets to the primary vertex

One of the most experimentally challenging aspects of LHC physics is the issue of in time pile-up, where minimum-bias interactions can introduce additional jets into the event. A technique to efficiently associate jets with the signal vertex is needed to reduce the large luminosity-dependent instrumental background from pile-up jets. The CMS tracker can provide this information by associating reconstructed charged tracks to primary vertices and to jets. To associate a jet with a signal vertex, defined by a lepton or other high-pT tracks of interest, a significant fraction of the tracks in the jet should originate from this primary vertex.

Two approaches have been investigated to test whether jets originate from the signal vertex or not. They differ in the use of the calorimeter jet energy measurement. The detailed description of the method could be found in CMS NOTE-2006/091.

Method A: 1) The variable ALPHA is determined for each jet as the ratio of the sum of transverse momenta of all tracks found inside the jet cone and having the same vertex as the signal (by a Z matching residual) to the transverse momentum of the jet as measured by the calorimeters; 2) If ALPHA > ALPHA_0, this jet is assigned to the signal vertex.

Method B: 1) The variable BETA is determined for each jet as the ratio of the sum of transverse momenta of all tracks found inside the jet cone and having the same vertex as the signal to the transverse momentum of all tracks inside the jet cone; 2) If BETA > BETA_0, this jet is assigned to the signal vertex.

scramv1 project CMSSW CMSSW_1_3_1
cd CMSSW_1_3_1/src
eval `scramv1 runtime -csh`
cmscvsroot CMSSW 
cvs co -r CMSSW_1_3_1 JetMETCorrections/JetVertexAssociation
cd JetMETCorrections/JetVertexAssociation
scramv1 b
cd test
change 'fileNames' in test.cfg to your dataset (suitable for CMSSW_1_3_1 version) or just to

untracked vstring fileNames = {'/store/RelVal/2007/3/30/SVSuite130Jets-Zprime700Dijets-DIGI-RECO/ 0000/C2759EEF-3BDF-DB11-9D8C-0030485617F8.root'}
#edit the above 2 lines to be a single line

cmsRun test.cfg
cmsRun test_analysis.cfg

CMS.JetMET collections created in default reconstruction

CaloJet: detector level jet made from CMS.CaloTowers
All Jet Algorithms have a threshold cut of ET> 0.5 GeV in the inputs (except Fastjet10E1CMS.CaloJets).
  • Fastjet10CMS.CaloJets: CaloTower jets with FastJet, D=1.
  • Fastjet6CMS.CaloJets: CaloTower jets with FastJet, D=0.6
  • Fastjet10E1CMS.CaloJets: CaloTower jets with FastJet, D=1., E>1 GeV in the inputs
  • Kt10CMS.CaloJets: CaloTower jets with KtJet, D=1.
  • iterativeCone5CMS.CaloJets: CaloTower jets with Iterative Cone, R=0.5
  • iterativeCone7CMS.CaloJets: CaloTower jets with Iterative Cone, R=0.7
  • midPointCone5CMS.CaloJets: CaloTower jets with Midpoint, R=0.5
  • midPointCone7CMS.CaloJets: CaloTower jets with Midpoint, R=0.7
GenJets: collections with and without non-interacting stable particles included
  • Fastjet10GenJets , Fastjet10GenJetsNoNu: Hadron level jets with FastJet, D=1 (with and without non-interating BSM particles)
  • Fastjet6GenJets , Fastjet6GenJetsNoNu: Hadron level jets with FastJet, D=6
  • Kt10GenJets , Kt10GenJetsNoNu: Hadron level jets with KtJet, D=1
  • iterativeCone5GenJets , iterativeCone5GenJetsNoNu: Hadron level jets with Iterative Cone, R=0.5
  • iterativeCone7GenJets , iterativeCone7GenJetsNoNu: Hadron level jets with Iterative Cone, R=0.5
  • midPointCone5GenJets , midPointCone5GenJetsNoNu: Hadron level jets with Midpoint, R=0.5
  • midPointCone7GenJets , midPointCone7GenJetsNoNu: Hadron level jets with Midpoint, R=0.7
  • met: CaloTower MET
GenMET: collections without non-interacting stable particles and with/without muons included
  • genMet: hadron level MET with non-interacting particles and muon excluded
  • genMetNoNu: hadron level MET with non-interacting particles excluded


How to reReco 120 Samples with 130 Reconstruction

Generic instruction how to rerun 130 reconstruction on 120 samples can be found here.
The general idea is:
  • run standard reconstruction sequence "reconstruction" on the sample
  • drop previously reconstructed objects from output

A recipy of how to rerun and save 130 JetMET reconstruction only using 120 samples
can be found here ( ReReco130JetMETonly.cfg )

   scramv1 project CMSSW CMSSW_1_3_0
   cd CMSSW_1_3_0/src
   cmscvsroot CMSSW 
   eval `scramv1 runtime -csh`
   cvs co -r JetTutorial_1_3_0 RecoJets/JetAnalyzers
   scramv1 b
   cd RecoJets/JetAnalyzers/test
   cmsRun ReReco130JetMETonly.cfg

Jet Analysis

The following example demonstrates the use of an EDAnalyzer for both CMS.CaloJets and GenJets.
The config file runs over a Z'->dijets (700 GeV) sample produced with CMSSW 130 and
produces a histo.root with pt, eta and phi distributions of the calorimeter and generator jets.
The jet algorithm used is a parameter in the configuration file jetPlots.cfg.
scramv1 project CMSSW CMSSW_1_3_1
cd CMSSW_1_3_1/src
eval `scramv1 runtime -csh`
cmscvsroot CMSSW 
cvs co -r JetTutorial_1_3_0 RecoJets/JetAnalyzers
scramv1 b
cd RecoJets/JetAnalyzers/test
cmsRun jetPlots.cfg

The example config file can be found here ( jetPlots.cfg )

Example of histograms produced:


Tutorial Slides

The slides presented at the CMSSW 130 Tutorial Session on 19/04/2007 can be found here ( JetTutorial130.pdf )

CMS.JetMET Samples

Information on how to find the JetMET samples can be found here.

Review Status

Editor/Reviewer and date Comments
Main.rharris - 12 Jul 2007 Updated MCJet Corrections to Spring07 sample
Main.monicava - 05 Jun 2007 Updated release to 131 as 130 will be deprecated
Main.rharris - 03 May 2007 Updated MCJet Corrections for new 130 functionality
Main.santocch - 20 Apr 2007 added contribution on GenJet Flavour definition
Main.monicava - 25 Mar 2007 page author

Responsible: Main.monicava
Last reviewed by: Reviewer

Edit | Attach | Watch | Print version | History: r52 < r51 < r50 < r49 < r48 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r52 - 2008-01-24 - CMSUserSupport
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    CMSPublic 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