LCFIPlus
LCFIPlus is a reconstruction software which performs vertex finding, jet finding, and flavor tagging in one package. It is implemented as a Marlin processor configurable with the XML steering file.
Quick Links
JIRA issue tracker: https://jira.slac.stanford.edu/browse/LCFI
How to obtain LCFIPlus
The LCFIPlus package is included in the ILCSoft release.
The latest version can be downloaded from the DESY SVN repository:
svn co
https://svnsrv.desy.de/public/marlinreco/LCFIPlus/trunk
LCFIPlus
Discussions about the package happen on the mailing list lcfi-vertex AT desy DOT de
Algorithms
LCFIPlus contains the following algorithms:
- PrimaryVertexFinder - searches for the primary vertex
- BuildUpVertex - searches secondary vertices
- JetClustering - jet clustering using vertex information
- FlavorTag - prepares of flavor tagging input variables
- MakeNtuple - produces ROOT files containing ntuples for training
- TrainMVA - performs TMVA training
- ReadMVA - applies result of training
Example of PrimaryVertexFinder + BuildUpVertex
<processor name="MyLcfiplusProcessor" type="LcfiplusProcessor"> <!-- run primary and secondary vertex finders --> <parameter name="Algorithms" type="stringVec"> PrimaryVertexFinder BuildUpVertex </parameter> <!-- specify input collection names --> <parameter name="PFOCollection" type="string" value="PandoraPFOs" /> <parameter name="PrimaryVertexCollectionName" type="string" value="PrimaryVertex" /> <parameter name="BuildUpVertexCollectionName" type="string" value="BuildUpVertex" /> <!-- parameters for primary vertex finder --> <parameter name="PrimaryVertexFinder.TrackMaxD0" type="double" value="20." /> <parameter name="PrimaryVertexFinder.TrackMaxZ0" type="double" value="20." /> <parameter name="PrimaryVertexFinder.TrackMaxInnermostHitRadius" type="double" value="20." /> <parameter name="PrimaryVertexFinder.TrackMinVtxFtdHits" type="int" value="5" /> <parameter name="PrimaryVertexFinder.Chi2Threshold" type="double" value="25." /> <!-- parameters for secondary vertex finder --> <parameter name="BuildUpVertex.TrackMaxD0" type="double" value="10." /> <parameter name="BuildUpVertex.TrackMaxZ0" type="double" value="20." /> <parameter name="BuildUpVertex.TrackMinPt" type="double" value="0.1" /> <parameter name="BuildUpVertex.TrackMaxD0Err" type="double" value="0.1" /> <parameter name="BuildUpVertex.TrackMaxZ0Err" type="double" value="0.1" /> <parameter name="BuildUpVertex.TrackMinTpcHits" type="int" value="20" /> <parameter name="BuildUpVertex.TrackMinFtdHits" type="int" value="3" /> <parameter name="BuildUpVertex.TrackMinVxdHits" type="int" value="3" /> <parameter name="BuildUpVertex.TrackMinVxdFtdHits" type="int" value="0" /> <parameter name="BuildUpVertex.PrimaryChi2Threshold" type="double" value="25." /> <parameter name="BuildUpVertex.SecondaryChi2Threshold" type="double" value="9." /> <parameter name="BuildUpVertex.MassThreshold" type="double" value="10." /> <parameter name="BuildUpVertex.MinDistFromIP" type="double" value="0.3" /> <parameter name="BuildUpVertex.MaxChi2ForDistOrder" type="double" value="1.0" /> <parameter name="BuildUpVertex.AssocIPTracks" type="int" value="1" /> <parameter name="BuildUpVertex.AssocIPTracksMinDist" type="double" value="0." /> <parameter name="BuildUpVertex.AssocIPTracksChi2RatioSecToPri" type="double" value="2.0" /> </processor> <processor name="MyLcfiplusProcessor" type="LcfiplusProcessor"> </processor>
Input variables for flavor tagging
Variables are computed for each jet.
name |
description |
---|---|
trk1d0sig |
d0 significance of track with highest d0 significance |
trk2d0sig |
d0 significance of track with second highest d0 significance |
trk1z0sig |
z0 significance of track with highest d0 significance (ordering by d0, not z0) |
trk2z0sig |
z0 significance of track with second highest d0 significance (ordering by d0, not z0) |
trk1pt |
transverse momentum of track with highest d0 significance |
trk1pt_jete |
trk1pt divided by the jet energy |
trk2pt |
transverse momentum of track with second highest d0 significance |
trk2pt_jete |
trk2pt divided by the jet energy |
jprobr |
joint probability in the r-phi plane |
jprobz |
joint probability in the z projection |
vtxlen1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
How to add a new variable
Each variable is defined inside FlavorTag.cc as a class inheriting from FTAlgo. The name of the variable is defined by providing a string argument to the constructor of the parent class. The variable class should implement the process() method which performs the variable computation. The result should be stored in the member variable _result.
An example implementation is shown below.
class FtNvtx : public FTAlgo {class FtNvtx : public FTAlgo { public: FtNvtx() : FTAlgo("nvtx") {} void process() { _result = _jet->getVertices().size(); } };
Using training results
Example of getting flavor tagging information inside a Marlin processor:
// get jet collection LCCollection* colJet = evt->getCollection("VertexJets"); // get PIDHandler associated with the jet collection PIDHandler pidh( colJet ); // get algorithm ID associated with LCFIPlus int algo = pidh.getAlgorithmID( "lcfiplus" ); // get index number for flavor tagging int ibtag = pidh.getParameterIndex(algo, "BTag"); int ictag = pidh.getParameterIndex(algo, "CTag"); // loop over jets to extract flavor tagging information for(int i=0; i < colJet->getNumberOfElements(); i++) { ReconstructedParticle *part = dynamic_cast<ReconstructedParticle*>( colJet->getElementAt( i ) ); const ParticleID &pid = pidh.getParticleID(part, algo); cout << "btag = " << pid.getParameters()[ibtag] << endl; cout << "ctag = " << pid.getParameters()[ictag] << endl; }