HLT b-tagging for hadronic top analysis

How it works

First of all there is a filter on L1 seed, for now we use QuadJet8U. It will be replaced by a QuadCenJet20 (both raising the threshold and dropping forward jet) to reduce the rate and still have a high efficiency. Than the reco jet sequence is ran and we ask for 4 jets with pt>25GeV/c (uncorrected energy) in the central region |η|<3.
process.hlt4jet25U = cms.EDFilter( "HLT1CaloJet",
                                   inputTag = cms.InputTag( "hltMCJetCorJetIcone5HF07" ),
                                   saveTag = cms.untracked.bool( True ),
                                   MinPt = cms.double( 25.0 ),
                                   MaxEta = cms.double( 3.0 ),
                                   MinN = cms.int32( 4 )
At this point we run the L2.5 (pixel only) and L3 (full regional tracking) b-tagging sequence on the first 4 jets of the event and ask for at least one tagged jet.

Pixel tracking and tagging (L2.5 Filter)

First of all we reconstruct and associate associate pixel tracks to jets matching them with a cone. This is done reconstructing tracks from pixel triplets and pixel vertices using the online beamspot as a reference. In particular the pixel vertex is computed using the DivisiveVertexFinder algorithm and it's a 1D method. This is the code used now:
process.hltPixelVertices = cms.EDProducer( "PixelVertexProducer",
    Verbosity = cms.int32( 0 ),
    Finder = cms.string( "DivisiveVertexFinder" ),
    UseError = cms.bool( True ),
    WtAverage = cms.bool( True ),
    ZOffset = cms.double( 5.0 ),
    ZSeparation = cms.double( 0.05 ),
    NTrkMin = cms.int32( 2 ),
    PtMin = cms.double( 1.0 ),
    TrackCollection = cms.InputTag( "hltPixelTracks" ),
    beamSpot = cms.InputTag( "hltOnlineBeamSpot" ),
    Method2 = cms.bool( True )

Performances can be improved if one uses the 3D vertex reconstruction. here is an example of how it can be implemented:

process.hltPixelVertices3D = cms.EDProducer("PrimaryVertexProducer",
    PVSelParameters = cms.PSet(
        maxDistanceToBeam = cms.double(2) ## 2cm
    verbose = cms.untracked.bool(False),
    algorithm = cms.string('AdaptiveVertexFitter'),
    minNdof  = cms.double(0.0),
    TkFilterParameters = cms.PSet(
        maxNormalizedChi2 = cms.double(100.0),     #
        minSiliconLayersWithHits = cms.int32(2), # none
        minPixelLayersWithHits = cms.int32(2),   # >= 2
        maxD0Significance = cms.double(100.0),     # keep most primary tracks
        minPt = cms.double(0.0),                 # better for softish events
        trackQuality = cms.string("any")
    beamSpotLabel = cms.InputTag("hltOnlineBeamSpot"),
    # label of tracks to be used
    TrackLabel = cms.InputTag("hltPixelTracks"),
    useBeamConstraint = cms.bool(False),
    # clustering
    TkClusParameters = cms.PSet(
        algorithm   = cms.string('gap'),
        TkGapClusParameters = cms.PSet(
            zSeparation = cms.double(0.2)

Then we compute the discriminator according to the algorithm we choose, i.e. using the 3rd or the 2nd track in the jet. In the end we filter the event requiring a minimum value for the discirminator to tag the jet (tipically 2).

Full tracking and tagging (L2.5 Filter)

The main parameters of interest to compute the tag are in the trackIPproducer hltBLifetimeL3(L25)TagInfosStartupU and in the jettagproducer hltBLifetimeL3BJetTagsStartupU, where you can choose the minimum number of hits, the minimum number of pixel hits, the track to use to compute the IP significance and so on.

Last thing. The .py to run on data misses the filters on the IP at L25 and L3. You can copy paste them (hltBLifetimeL3(25)FilterStartupU) from the other file.

Recipe for reproducing the b-tagging at HLT with v9.4 HLT menu

To reproduce the IP based b-tagging at the HLT level with this menu we just have to follow these steps:
  • cmsrel CMSSW_3_9_0
  • cvs co HLTrigger/HLTfilters
  • cvs co HLTrigger/JetMET
  • cvs co -r V00-07-00 TrackingTools/Producers
  • run the cfg at the following path: /afs/cern.ch/user/t/tropiano/public/btagHLT/offline_data.py

Timing studies

To run the official timing studies software one should first produce a skimmed rootuple, with just the FEDRawDataCollection stuff.

You can find it here: /afs/cern.ch/user/t/tropiano/public/btagHLT/TimingSkim.py

-- AntonioTropiano - 30-Oct-2010

This topic: Main > TWikiUsers > AntonioTropiano > BtagHLT
Topic revision: r7 - 2011-01-26 - AntonioTropiano
This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback