The AXSEL package


April 2001



    1. Overview
    2. How to use the AXSEL package
      1. How to configure the package via the control card
        1. What to include in the card file
        2. The AXSE card
      2. How to include the package in your user code
        1. Calling the axselect routine
    3. Appendix
      1. List of implemented decays and code words
      2. Work in progress for v6
      3. Differences with respect to previous versions 

You can find here how to introduce new decays in the AXSEL package


1. Overview

The AXSEL package is an analysis package that can be run with SICBDST. 

It allows a unique and consistent selection of physics analysis events for different studies.

A user will decide at run time via a control card the specific decay channel selection, the selection conditions and parameters values he/she wants to be satisfied. The selection cuts are read from a CDF file at run time (with default parameters as recommended by the experts for the different decay channels).

The channel selections are identical when running on complete events or considering only the real decay channel tracks, allowing it to run on background events as well as signal events.

The package for the moment allows for 3 different levels of selection to be chosen:

Further explanations can be found below.

Experts for the different decay channels provide(d) the code for the actual selection of events through cuts (loose and tight selection). The code must comply to a few rules to be compatible with the package. They also provide(d) the cuts to be included in the cdf file. 

The main routine of the package (AXSELECT) needs to be called once per event and will return flags specifying if the selection criteria for the particular decay channel chosen are satisfied and if  the exclusive MC decay is present in the event.

When running with loose or tight selections it is also possible to check if the events would be flavour tagged. This is done internally using the routine axftag.F as optimized by C.Shepherd-Themistocleous for the TP.

During the initialization of the package, the list of the implemented decays and the available level of selection is printed on standard output if so chosen in the card (see: How to configure the package via the control card).

A complete list of the decay channels available in the package, with their implemented level of selection can be found in  appendix A.  You will also find the name of the person who provided the code for a specific decay and the version of the package in which it was implemented.

Other channels can be added if experts on the specific decays provide routines for the higher level selections that conform to the AXSEL package. The minimal selection for any new channel can be easily implemented if found necessary. Please contact me about implementing new decays, both for minimal selections and if you intend to implement higher levels of selection to be included in the AXSEL package.


2. How to use the AXSEL package

The package is released under the name axsellib in CMT.

The source code is available in CVS, and the library for v5 (v5p1) exists in the release area on Linux both in debug and no debug mode.

In order to use the package you have to explicitly use it in your SICBDST requirements file by adding the following line:

use axsellib SICB v5

Version v5 can be used with SICBDST v250 and higher,  a version v5p1 has been made to be used with SICBDST v235r3(r4).

Version v5 can in fact be used with any version of SICBDST using axreclib v4, while v5p1 with versions of SICDST using axreclib v3r2,  providing to use the correct seldecay.cdf file.

The seldecay.cdf file containing the recommended cut parameters for all decays implemented in axsellib v5 is available in dbase v233r3, v235 and v236.

For details on the bug fixes, improvements for the various versions please refer to the release.notes distributed with the code.


2.1 How to configure the package via the control card and the cdf file

The package is steered at run time via a control card.

An example card file (sicbaxsel.card) is available in the job area of the SICBDST package.

When you are reading DST files and do not want to redo any digitization/reconstruction do NOT use the SKIP card while using the AXSEL package, use DIGI 'ALL ' -1, RECO 'ALL ' -1 instead.

2.1.1 What to include in the card file

You will need to include the following lines in your card file using SICBDST:

C .... DecayName ... SelMode ... SelLevel ... SelTag ... Debug ... Histo

AXSE ... 'B0PP' .............. 0 .............. 1 ............... 0 ............ 1 ............. 1

C Histogram file

......'B0PP' 'HO' 'b02pipi.hbook!


NOTE that the key word for the histogram file must be identical to the DecayName picked.

If you use a version of SICBDST with a corresponding dbase package that contains a seldecay.cdf file corresponding to an older version of axsel or you want to use a modified version you should also have the following line:

C Decay Selection cdf file


.......'SELD' 'C' 'seldecay.cdf!'

'SELD' is the cdf file containing the cut parameters for the various decay channels.

You can find the seldecay.cdf file containing the cuts for all implemented decays of axsel v5 from dbase v235 (also in v233r3),  for all decays implemented in axsel v3 from dbase v229 and those in axsel v2 from dbase v227. Note that between these versions new decays have been implemented but the cuts relative to decays previously available have not been modified. 


2.1.2 The AXSE card

The steering of the AXSEL package is done via the AXSE card:

C .... DecayName ... SelMode ... SelLevel ... SelTag ... Debug ... Histo

AXSE ... 'B0JM' .............. 0 .............. 1 ............... 0 ............ 1 ............. 1

Variables in the AXSE card:

DecayName ... (4-character string)

Code word for B-decay of interest , The same string is used in the CDF file to identify the cuts for the decay, to define the histogram file in the IOPA card and throughout the code to call the appropriate routines for the chosen decay.

The list of the available decays and their implemented SelLevel can be found in this document (appendix A), in the routine axmakelist.F, and can be printed out during the initialization of the package at run time by selecting a value >0 for the Debug variable in the card

SelMode ....... (integer, default=0)

Selection mode.

The package allows two selection mode: fast or full.

Fast selection (SelMode=0). In this case all cuts/check are applied only to the tracks corresponding to the particles of the true specified decay. This mode works only for signal events, because the presence of the true decay is required.

Full selection (SelMode=1). In this case all tracks are considered and the full combinatorics is performed. It is possible that more than one combination will satisfy the required selection. This mode applies to any type of events.The code will then return a flag informing if at least one of the reconstructed "signal" is the Monte Carlo generated one, when it is present in the event.

SelLevel...... (integer, default=0)

Selection Level.

As mentioned in the overview three different levels of cuts for selecting the events are possible: minimal, loose and full.

Minimal (SelLevel=0) This level is equivalent to a fancy spectrometer acceptance. To satisfy this Selection Level a primary vertex has to be reconstructed as well as the "stable" particles of the specified decay. Since it requires for the specified decay to be present in the event it is meaningful only for signal events and SelMode=fast is enforced.

Loose (SelLevel=1) This level requires that loose cuts as defined in the seldecay.cdf file are satisfied.

Tight (SelLevel=2) This level requires that the complete cuts for the offline signal selection, as defined in the seldecay.cdf file, are satisfied

For Loose and Full selection level the cuts values are taken at run time from the seldecay.cdf, that contains the experts recommended cuts for the various decays. Depending on the specified SelMode all tracks or only those belonging to the decay are considered

If you want to use a seldecay.cdf file not in the dbase version used by the SICBDST version you are working with you will need to include in your card file the following line

C Decay Selection cdf file


.......'SELD' 'C' 'seldecay.cdf!'

It is possible to print out the list of the cuts applied during the running of a job via a call to axsellast.F

SelTag ....... (integer, default=0)

Flavour tagging check.

0 =  do not check the flavour tag

1 =  check if the events would be flavour tagged when at least one "signal" combination in the event has been found satisfying the selection criterias. AXSELECT returns a true flag if at least one of the selected combinations would have a flavour tag (the tracks from the decay are excluded from the flavour tag search). It is not verified if the tag is a good tag or a mistag.

In order to check if the event is flavour tagged it is necessary to run with loose or tight selection level. 

Debug ......... (integer, default=0)

Monitor/Print Control

It is possible to print out messages from the AXSEL package depending on the level of information required (serious warning/errors will always be printed regardless of the value set in this variable).

0 ... = ... Do not write anything

1 ... = ... Write monitoring information on standard ouput

2 ... = ... Write debugging information on standard output

Histo .......... (integer, default=0)

Histograms filling control

It is possible to fill some control/monitor histograms during selection. Some global histograms are common to all decay. Specific histograms for SelLevel=1,2 are provided by the decay analysis experts.

0 ... = Do not book nor fill histograms

1 ... = Book and fill control histograms


2.2 How to include the package in your user code

A user needs to call explicitly the AXSEL package for each event via the main routine AXSELECT that will return arguments specifying the success/failure of the selection. Below you will find more details.

More detailed information on the results of selection can also be retrieved via include files.

The package is automatically initialized the first time it is executed.

The definition of the AXSE card is not included in the SICB standard cards, and it is necessary for the user to do it.  

In the user routine sudata include the following line:

call axseldata

A user can print a summary of the selection running conditions, cuts parameters applied, and events counters , on the standard output by calling axsellast from the sulast routine.

In the user routine sulast include the following line:

call axsellast


2.2.1 Calling the axselect routine

As mentioned earlier a user need to call the main routine of the AXSEL package once per event from the user analysis routine suanal by including the line:

call axselect ( MCFlag, SELFlag, AGRFlag, TAGFlag)

The routine returns four logical arguments whose meaning is the following:

Argument Type Explanation
MCFlag logical TRUE if the decay tree specified in the data card has been found in ATMC
SELFlag logical TRUE if the selection would have reconstructed the specified decay according to the criteria specified in the control card
AGRFlag logical TRUE if at least one of the combinations reconstructed by the specified decay correspond to the real MC decay
TAGFlag logical TRUE if at least one of the combinations reconstructed is flavour tagged


3. Appendix

3.A List of implented decays and code words


Code Word

Implemented Level and version in which implemented


B0d g p+ p-




B0d  g J/y (m+ m-) K0s (p+ p-)




B0sg D-s ( j (K+ K-) p- ) p+






B0d  g D0 (K+ p-) K* (K+ p-)



B0d  g J/y (e+ e-) K0s (p+ p-)



B0s g m+ m-






B0d  g p+ p-pi0(gamma gamma)





A.Jacholkowska, G.Corti

B0d  g K+ p-



B0d  g K* (K+ p-) g



B0d  g  D0 (K+ p-p0( g g )) K* (K+ p-)



B0d  g m+ m- K* (K+ p-)






Dummy flag that will return true always and does nothing. Just for convenience./v3


B- gD0 (K+ p-) K- 'BDK1' Minimal/v5 C.Jones
B- gD0 (K+ K-) K- 'BDK2' Minimal/v5 C.Jones
B- gD0 (K+ p-) p- 'BDP1' Minimal/v5 C.Jones
B- gD0 (K+ K-p- 'BDP2' Minimal/v5 C.Jones
B0s g D+s (p+ K+ K-)D-s (p- K+ K-) 'BSDD' Minimal/v5 K.George
B0d  g D+ (p+ p+ K-)D- (p- p- K+) 'B0DD' Minimal/v5 K.George
B+c g D+s (p+ K+ K-)D0 (p- K+) 'BCDD' Minimal/v5 K.George

B0s g D-s ( K+ K- p-) K+





 O.Schneider provided some monitoring code.

The minimal selection levels for most decays have been implemented by G.Corti, those for BDK1, BDK2, BDP1, BDP2 by C.Jones, those for BSDD, B0DD, BCDD by K.George.


3.B List of work in progress for new version(s)

If you are implementing or foresee to implement a decay at some level in the axsel package please let me know and I will update this list


Code Word

Work in progress

Working on it

B0 g j (K+ K-) K0s (p+ p- ) 'B0FK' Minimal / TESTING


end of June




B0s g J/y (m+ m-) j (K+ K-) 'BSJF' Minimal / TESTING


end of July



N.van Bakel

B+ gK+ p0 ( g g ) 'BKP0' Minimal / TESTING


end of August




B+ gK0s ( p+ p- )p+ 'BKSP' Minimal / TESTING


end of August




B0 gD*- (D0 (K+ p-)p-)p+ 'BDST' All / TESTING


B- gD0 (K+ p-) K- 'BDK1' All / TESTING C.Jones
B- gD0 (K+ K-) K- 'BDK2' All / TESTING C.Jones
B- gD0 (p+ p-) K- 'BDK3' All / TESTING C.Jones
B- gD0 (K+ p-) p- 'BDP1' All / TESTING C.Jones
B- gD0 (K+ K-p- 'BDP2' All / TESTING C.Jones
B- gD0 (p+ p-) p- 'BDP3' All / TESTING C.Jones
B0s g D+s (p+ K+ K-)D-s (p- K+ K-) 'BSDD' Loose&Tight/ IMPLEMENTING

end of June

B0d  g D+ (p+ p+ K-)D- (p- p- K+) 'B0DD' All / IMPLEMENTING

end of June


B0d  g J/y (e+ e-) K0s (p+ p-)



end of August


B0d  g D0 (K+ p-) K* (K+ p-)



end of August


B0d  g p+ p-pi0(gamma gamma)



end of August


B0d  g K* (K+ p-) g



end of August




3.C Differences between various versions

An up-to-date list of changes for the various versions is also available with the code itself in the release area of the axsellib package (doc/release.notes).

3.C-1 v5 respect to v4

Introduced full selection for decay Bs Ds(KKp)K, and loose selection for  B p+p-po (only valid when running on signal files).

Introduced minimal selection for B- D-(Kp)K,  B- D-(KK)K, B- D-(Kp)p, B- D-(KK)p and for Bs Ds+(KKp)Ds-(KKp), Bd D+(Kpp)D-(Kpp), Bc+ Ds+(KKp)Do(Kp).

Introduce option of checking if events would be Flavour Tagged.

Modified Bs Ds(f(KK)p)p to run on miniDST files.

Fixed bug in Bs mm.

Add some additional protections and printing statements.

3.C-2 v4 respect to v3

"Technical" version to use axreclib v4 compatible with SICBDST v236 (modification in axswim)

3.C-3 v3 respect to v2

Introduced full selection for decays B mmK*(Kp) and Bs Ds(f(KK)p)p .

Introduced dummy control MBIA for "minimum bias" events, returning always true to all flags. This was introduced upon request for convenience reasons when processing background events.

Stop execution when initialisation failures of the axsel package occur, instead of only issuing warnings. Consistency between chosen and implemented decay level is checked, as well as for the requested decay to be implemented. In addition the presence of the decays cuts in the cdf file is checked if selevel>0. Failure of opening histogram file if histograms are requested is also considered an initialisation failure.


This page was last modified on 17 May 2001