New SecVtx Framework Description
Mission Statement:
To create a common framework for making secondary vertex taggers (i.e. merge
BVtx with SecVtx, after a split in the past).
Description of this document:
This will describe changes to the SecVtx coding framework. It is not a recipe
of how to use SecVtx. This is intended for the audience of people who already
know how to use SecVtx, and are interested in the structural changes
that have taken place in the merge with BVtx.
Graphical Representation of the New SecVtx Framework
Class Overview of new SecVtx framework
Tagging Class Overview of new SecVtx framework
Secondary Vertex Tagging Framework Description
-
Framework Overview:
Description of the system.
- Each tagger now has up to four classes associated with it:
- A module (inherited from AppFilterModule, for example) to run
supervisory tasks such as getting the primary vertex, and deciding
which tagging algorithm to use.
- An algorithm class (inherited from TaggingAlg) to run specific
tagger setup and initialization such as associating tracks to jets
and deciding on seed tracks, and decides which strategy to use.
- A strategy class (inherited from TaggingStrategy) to actually perform
the tagging on selected tracks, jets, and any other object such as
leptons.
- A parameters class (inherited from TaggingParams) that pass information
amongst the various levels of control.
- Each tagger has the same interface for tagging (via a common base class).
- Taggers to be implemented with no framework development:
- SecVtx : pruning style tagger.
- BVtx : pruning style a la B physics group.
- LepVtx : lepton seeded pruning style tagger.
- Taggers that CAN be implemented, but will require a little development,
such as adding variables to SecVtxTrack or SecVtxObj
- JetProb : impact parameter pull style tagger
- Multivariate taggers : neural nets, statistical combinations, etc.
- Soft lepton taggers : tag on leptons in jets
-
Advantages:
Why do I care? This just looks like more fandangled C++ complication to me!
-
A common interface will allow studies with different taggers:
- Study correlations between taggers.
- Use different taggers in the same event (i.e. a loose SecVtx and a tight SecVtx):
I see this as the major advantage to this type of system.
- Easy re-use of ntuplizing and analysis tools. Just write functions on
SecVtxObj and SecVtxTrack, and
put in a variable telling you what tagger you used!
-
Addition of new taggers will be easy and streamlined:
- No need to create storage objects.
- No need to create lots of utility functions.
- Easy-to-follow interfaces allow for fast implementation of new algorithms.
- Can use the Object Oriented Mantra: Reuse, Reuse, Reuse!!!!
Secondary Vertex Tagging Framework Class Structure
-
BTagObjects:
- SecVtxTrack:
Object that holds information about
secondary vertex tracks.
- Inherits from CdfTrack_clnk, so you can access all the functions from CdfTrack,
as well as use any algorithm that takes a CdfTrack_clnk.
- Holds additional information about expected hits, corrected impact
parameters, etc.
- SecVtxObj:
Object that holds information about jets and secondary vertices
attached to them.
- Holds IndexViewVectors of SecVtxTracks for good tracks,
pass 1 tracks, and pass 2 tracks, allowing use of
powerful STL algorithms such as sorting, searching,
finding maximum elements, etc.
- C++ looping style, in keeping with CdfCode standards and
conventions.
- SecVtxTracks:
Object that holds collections of SecVtxTrack
- Holds STL-style collections of SecVtxTrack.
- Legacy interface to SecVtxTrack has been left intact.
- SecVtxColl:
Object that holds collections of SecVtxObj
- Holds STL-style collections of SecVtxObj.
- TaggingParams:
Virtual base class to act as a go-between from the module
to the tagger.
- This class is here to enforce a common base class for
all tagging parameter classes.
- SecVtxParams:
SecVtx parameters class.
- This class is mainly intact from it's previous incarnation.
- Holds information about cuts for the different passes
for SecVtx
- Any New Params Classes:
Inherits from TaggingParams
- This is where you would pass tagger-specific information from your module
to your tagger.
- Could, for example, include an ntuple that would look at your algorithm at
various stages of progression to do expert-level studies that are transparent
to the average user.
- SecVtxTrackCut framework:
Exactly the same interface style as CdfTrackCut
- Allows STL style looping, sorting, cuts, etc.
- For now, SecVtx does not use this framework, but a seperate class
that simply does the track cuts for Pass 1 and Pass 2. This will eventually
go away.
- jetMistag:
Has not changed at all.
-
BTagAlgs:
- TaggingAlg:
Virtual base class for algorithms. Enforces the interface of the
"tag" utility. The Alg classes perform general
setup for the strategy, such as setting up the seed tracks.
- TaggingStrategy:
Virtual base class for strategies. Enforces the interface of the
"strategy" utility. The Strategy classes actually perform the
tag itself.
- SecVtxAlg:
SecVtxAlg does track-to-jet
association, calls the appropriate track selector, and
calls SecVtxStrategy to actually perform the tag. This can be
reused for any strategy that has a loop over tracks in jets.
- SecVtxStrategy:
SecVtxStrategy has a loop that prunes input tracks based on chi2 of a CTVMFT fit,
and fills the object with that vertex's quantites should it pass certain
cuts.
- SecVtxTrackSelector:
Does track selection on the number of good hits that you expect, and
removes tracks from lambdas and K_s.
-
BTagMods:
- SecVtxModule:
SecVtxModule has been largely untouched. It still does decisions as to
what to use as the interaction point estimate, and tag the jets in the
specified jet collection.
- SecVtxNtupleModule:
SecVtxNtupleModule has been entirely untouched, save for compatibility
issues. This has been the benchmark with which to see if we had changed anything
in the code. We made SecVtxNtuple's for before and after changes, and subtracted
every entry in the two ntuples to see if there was any difference at all.
Code Development Stages:
Note: items in blue are completed. Mostly this
will implement changes necessary to merge with BVtx people.
- Phase 1: Preparation (1-2 days)
- Create "2" files (i.e. rename everything to SecVtx*2.cc,hh)
- Create "ntdiff" program to make two ntuples and take differences, entry by entry
- Test ntdiff program
- Create 2000 top MC following b-tagging prescription
- Phase 2: Clarification (1 week)
- "Boolean-izing" code
- Indenting
- Commenting
- Phase 3: Modify code (2-3 weeks)
- "Functionalize" existing code
- Rename some variables for clarification
- Phase 4: Compatibility with CDF C++ (3-4 weeks)
- Make classes and namespaces out of logical items (SecVtxTrack, SecVtxTrackSelectors, etc.)
- Clean up interface (using C++ object collections)
- Leave in legacy interface for other people.
People Involved:
- Erik Brubaker
- Joao Guimaraes da Costa
- Petar Maksimovic
- Matthew Martin
- Lester Miller
- Salvatore Rappoccio
Salvatore Rappoccio
Last modified: Thu Mar 20 13:58:41 CST 2003