ProtoParticle Filters


ProtoParticle filters are a set of Gaudi tools for the LHCb software framework that implement the core functionality of applying a selection to a given ProtoParticle, as configured by job options.


The doxygen documentation for these tools can be found here.

The tools are implemented in a hierarchical scheme :-


This is a common base class for all ProtoParticle filters that implements core methods. Users should not use this tool directly, but one of the derived tools.


This is the lowest level tool that uses can use. It implements selections on the ProtoParticle combined DLL values.


This tool inherits from the ProtoParticleDLLFilter and adds the use of a TrackSelector tool to apply general selection criteria to the underlying charged Track object.


This tool inherits from the ChargedProtoParticleDLLFilter, adding selection cuts specific to the RICH system (e.g. cuts on the Rich only DLL values).


This tool inherits from the ProtoParticleRICHFilter, adding selection cuts specific to the CALO system.


This is the top level ProtoParticle filter and implements the final selection criteria specific to muon selections (e.g. the NSharedHits cut).

Job Options Syntax

The configuration of the ProtoParticle filters is done entirely through job options, using a custom syntax. Examples of the syntax can be found in the options files in the Phys/CommonParticles package.

In general the syntax follows a set style, as in the example below

XXX.PhysDesktop.CombinedParticleMaker.Kaon.Selection = {"RequiresDet='RICH' CombDLL(k-pi)>'-5.0'"} ;

and in general consist of a series of requirements/cuts of the form X='Y', X>'Y' or X<'Y'.

Detector Requirements

This takes the form X=Y refers to the first part of the above example, and gives a requirement on which sub-detector information was available in the ProtoParticle. The first part 'X' refers to the type of requirement. Possible values are

  • RequiresDet : This means that you require that information from the given sub-detector was available for this ProtoParticle. This is the most commonly used option.
  • OnlyUseDet : This means that you require that ONLY information from this sub-detector was available for this ProtoParticle.
  • NotUseDet : This means that you require that information from this sub-detector was NOT available for this ProtoParticle.

The second part of the requirement 'Y' refers to a specific sub-detector (or in some cases sub-component of a sub-detector). Possible values are :-

  • RICH : Information from any of the RICH radiators must be available.
  • CALO : Information from any of the sub-components of the CALO system must be available.
  • MUON : MuonPID information must be available. In practise, since MuonPID information is only stored in the ProtoParticle for tracks which where identified as muons (The MuonPID:IsMuon() requirement), this detector requirement effectively constitutes a Muon PID selection.

For the RICH system, it is also possible to require that information from a certain radiator was used (other radiators may or may not have been used, depending on the track in question) :-

  • RICH_AEROGEL : Information from the RICH1 Aerogel radiator must be available.
  • RICH_RICH1GAS : Information from the RICH1 C4F10 radiator must be available.
  • RICH_RICH2GAS : Information from the RICH2 CF4 radiator must be available.

Similarly, for the CALO system it is possible to require information from one of the sub-components :-

  • CALO_SPD : Information from the SPD must be available.
  • CALO_PRS : Information from the PRS must be available.
  • CALO_ECAL : Information from the ECAL must be available.
  • CALO_HCAL : Information from the HCAL must be available.
  • CALO_BREM : Information from the Brem. matching must be available.

Finally, it is worth noting that it is possible to apply more than one detector requirement in a single Selection. An example could be

XXX.PhysDesktop.CombinedParticleMaker.Kaon.Selection = {"RequiresDet='RICH_AEROGEL' RequiresDet='RICH_RICH1GAS' CombDLL(k-pi)>'-5.0'"} ;

which requires that the track must have used both Aerogel and RICH1 C4F10 gas during the RICH PID in Brunel.

Specifying Cuts

The other sort of information which can be specified in the Selection job option is a cut on a particule quantity in the ProtoParticle. This can take the form X<'Y' or X>'Y'. There are many possible variables in the ProtoParticle which can be used :-

Combined DLL Values

Firstly, the primary information is the combined DLL values. These are intended to represent the best combination of information from all the sub-detectors. Cuts on these generally take the form :-


where CombDLL(X-Y) is the different in likelihood between the X and Y species. X and Y can be e, mu, pi, k or p.

The combined DLL values are calculated by the algorithm ChargedProtoCombineDLLsAlg and stored in the ProtoParticle itself at the end of the Brunel reconstruction step.

Note though the the best way to combine the DLL values is under investigation. To allow therefore for a different scheme to be used this algorithm is also rerun at the start of DaVinci, allowing the user the means to alter the combination as they wish.

Sub-Detector specific Cuts

It is also possible to specify cuts on detector specific variables.


For ProtoParticles which were processed by the RICH reconstruction and particle ID algorithms, DLL values are available for the five mass hypotheses. If you wish you can specify cuts on these variables using syntax of the form :-

XXX.PhysDesktop.CombinedParticleMaker.Kaon.Selection = {"RequiresDet='RICH' RichDLL(k-pi)>'-5.0'"} ;


For the muon system, the following variables are available for identifying muon candidates.

  • MuonNSharedHits : The number of muon system hits shared with other tracks.
  • MuonMuLL : The absolute value of the muon-like LL.
  • MuonBkgLL : The absolute value of the non-muon-like LL.
  • MuonDLL(Mu-Bkg) : The difference between the muon and background log likelihoods.

To apply cuts on these variables, apply the same syntax as before, e.g.

XXX.PhysDesktop.CombinedParticleMaker.Kaon.Selection = {"RequiresDet='MUON' MuonDLL(Mu-Bkg)>'0.0'"} ;


For the calo system, it is possible to cut on all CALO variables as available in the ProtoParticle. For instance, to cut on the ECAL PID variable

XXX.PhysDesktop.CombinedParticleMaker.Kaon.Selection = {"RequiresDet='CALO_ECAL' EcalPIDe>'0.0'"} ;

For the full list of possible CALO variables (rather long) I refer the reader to the doxygen documentation for the ProtoParticle data object and the ProtoParticleCALOFilter filter tool.

ChrisRJones - 12 Dec 2006
Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r7 - 2007-05-21 - unknown
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    LHCb 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