The e- and e+ identification by using HPidAlgStandCuts algorithm
There are several PID algorithms implemented in the HYDRA package which are used to identify particle species. One of them is
HPidAlgStandCuts
algorithm which can be used to identify e+/e- from elementary and heavy ion collisions. At the moment this algorithm uses information (observables) provided by RICH (ring properties), MDC (momentum, track length), TOF/TOFino (tof) and PreShower (elctromagnetic shower properties) detectors. The RICH detector plays a crutial role in e+/e- identification in the HADES spectrometer because it is almost blind to hadrons at beam energies of 1-2 AGeV.
Thus, each electron candidate must have correlated signal in the RICH detector. It is realised by requiring the angular correlation between RICH and inner MDC segment.
e+/e- signal eveluation in RICH
The RICH ring properties used in
HPidAlgStandCuts
for e+/e- identification.
e+/e- identification in PreShower
The PreShower observables used in
HPidAlgStandCuts
for e+/e- identification.
HPidAlgStandCutsPar parameter container
The
HPidAlgStandCutsPar
is a parameter container which is used by
HPidAlgStandCuts
reconstructor for e+/e- identification. It derives from
HPidHistogramsCont
and currently contains 7 parameter sets (histograms) for 7 different e+/e- identification algorithms. These histograms are stored in
HPidAlgStandCutsPar
in the following way:
HPidAlgStandCutsPar *par = rtdb->getContainer("PidAlgStandCutsPar");
par->addHistogram(particleID, algorithmOffset, sectorNb, pParamHist);
// set parameter context
par->setParamContext("HPidAlgStandCutsParContextKICK");
where
particleID
is particle ID (Geant convension: 2 - e+, 3 - e- ...) ,
algorithmOffset
is an algorithm offset,
sectorNb
is a sector number and
pParamHist
is a pointer to histogram with algorithm parameters. The parameter context defines the track reconstruction algortihm. The
algorithmOffset
and
pParamHist
for
HPidAlgStandCuts
are following:
algorithmOffset |
pParamHist |
0 |
Rich ring parameters |
1 |
PreShower F_thr vs. momentum parametrization |
2 |
PreShower Sum0_up vs momentum parametrization |
3 |
system0 (momentum vs. beta - lower limits) |
4 |
system0 (momentum vs. beta - upper limits) |
5 |
system1 (momentum vs. beta - lower limits) |
6 |
system1 (momentum vs. beta - upper limits) |
7 |
Pre-Shower SumDiff_thr vs. momentum parametrization |
The following steps should be made to generate HPidAlgStandCutsPar
parametrs:
- Create and fill histograms (sectorwise, particleID) with
- Rich ring properties (
PM, RC, NP, AC
)
-
momentum vs beta
for the system0 (PreShower polar angles) and for system1 (TOF polar angles)
- PreShower (
F vs momentum, Sum0 vs momentum and SumDiff vs momentum
)
- Define and calculate parameter thresholds, upper or lower limits (e.g. Rich minimum bias cuts, momentum vs. beta (3 sigma), F_thr (CL =80%)...)
- Parametrize
F_thr(momentum)
, Sum0_up(momentum)
and SumDiff_thr(momentum)
dependencies by fitting the functions
- Store histograms with algorithm parameters in the
HPidAlgStandCutsPar
as described above
Example of the macros to make these steps are in official HYDRA package in pidutil/tools/HardCutParams
How to run HPidAlgStandCuts algorithm in the HYDRA framework
In order to make PID by using
HPidAlgStandCuts
algorithm two HYDRA reconstructors
HPidReconstructor
and
HPidParticleFiller
must be used.
The
HPidReconstructor
is a master reconstructor which calls algorithms (e.g.
HPidAlgStandCuts
algorithm) making particle identification (PID)
while the
HPidParticleFiller
selects identified particles and stores them in the output
HPidParticle
category.
There are following flags implemented in the
HPidAlgStandCuts
algorithm:
RICHRINGCUTS - Rich ring properties
TOFPVSBETA - momentum vs. beta window (TOF)
TOFINOPVSBETA - momentum vs beta lower limit (TOFINO)
SHOWERMAXFVSP - threshold on charge multiplication factor max(Sum1/Sum0,Sum2/Sum0) in PreShower
SHOWERSUM0VSP - upper limit on charge Sum0 in the first chamber of PreShower
SHOWERSUMDIFFVSP - threshold on charge difference Sum1+Sum2-Sum0 in PreShower
User can select conditions which should be used by
HPidAlgStandCuts
for PID.
By default the
"RICHRINGCUTS,TOFPVSBETA,TOFINOPVSBETA,SHOWERMAXFVSP,SHOWERSUM0VSP"
flags are used in
HPidAlgStandCuts
algorithm.
The
HPidAlgStandCuts
was designed in such a way that it returns 0 (is not lepton) or 1
(is lepton) for the selected track/momentum reconstruction algorithm which has to be specified
by user in the
HPidReconstructor
constructor.
The identification of other paricles pions/protons/deuterons is not done by this algorithm and decision is not taken.
To run PID by using
HPidAlgStandCuts
algorithm you need the
HPidTrackCand
or
HPidTrackCandSim
category in the input DST file and
the set of parameters
HPidAlgStandCutsPar
which are initialised from ORACLE. They can be different
for different track/momentum reconstruction algorithms (
KICK,SPLINE, RUNGEKUTTA
) and must be stored in ORACLE
with suitable context.
The
HPidAlgStandCuts
algorithm creates the output control ntuple (optional)
which contains useful information about standard cuts performance.
The
HPidParticleFiller
task rejects particles for which
HPidAlgStandCuts
returns 0. It is done for selected track/momentum reconstruction algorithm which must be
set by user. Only tracks reconstructed by this algorithm are stored in the output
HPidParticle
data category.
User must select the same track/momentum reconstruction algorithm for both
HPidReconstructor
and
HPidParticleFiller
reconstructors.
In orer to use the
HPidAlgStandCuts
algorithm (experiment) in the HYDRA framework the following lines of code have to be added to the analysis program:
// create HPidReconstructor reconstructor (must be added later to task set)
HPidReconstructor *pPidRec=new HPidReconstructor("pdf,ALG_RUNGEKUTTA")
Short_t nParticles[2]={2,3}; // only lepton ID
pPidRec->setParticleIds(nParticles,sizeof(nParticles)/sizeof(Short_t));
// create HPidAlgStandCuts algorithm and add it to HPidReconstructor (default cuts)
HPidAlgStandCuts *pPidAlgStandCuts=new HPidAlgStandCuts("nameOutputNtuple.root");
pPidRec->addAlgorithm(pPidAlgStandCuts);
// create HPidParticleFiller (must be added later to the task list)
HPidParticleFiller *PartFiller=new HPidParticleFiller("RUNGEKUTTA");
pPartFiller->setAlgorithm(7); // 7-check values from HPidAlgStandCuts algorithm
// add user reconstructors/tasks to the master task set
HTaskSet *pTaskSet=gHades->getTaskSet("real");
pTaskSet->add(pPidRec);
pTaskSet->add(pPartFiller);
Example of programs
executable program to run PID by using HPidAlgStanCuts
algorithm
Exercises (HPidAlgStandCutsPar
paramter container)
- Initialise
HPidAlgStandCutsPar
parameter container from ORACLE and store it in ROOT file (runID=7006)
- Set your HYDRA environement by using
defall.sh
- Copy
/d/hades/jacek/hydra-8.13/tutorials/initParameters/initPidFromOra.C
macro to your working directory
- Open the macro and identify:
paramater container
, runId
and output file
- Run the macro (
root -l initPidFromOra.C
)
- Draw parameter histograms stored in
HPidAlgStandCutsPar
- Open the
output file
from produced by initPidFromOra.C
- Draw parameter histograms by using
PidAlgStandCutsPar->getHistogram(particleID,algorithmOffset,sectorNb)->Draw()
function
Exercises (control PID ntuple with C+C@2GeV events)
- Open wiki page with ntuple variable description (http://hades-wiki.gsi.de/cgi-bin/view/Computing/HPidAlgStandCutsControlNtuple)
- Make q*p vs. cut number plots
- Open
/d/hades06/data/sudol/nov02/gen4/leptons/new/leptons_gen4.root
root ntuple
- Create and draw q*p histograms vs. cuts numbers:
-
pLep->Draw("charge*mom>>h0(201,-1000,1000)")
-
pLep->Draw("charge*mom>>h1(201,-1000,1000)","isrich")
-
pLep->Draw("charge*mom>>h2(201,-1000,1000)","isrich&&(istof||istofino)")
-
pLep->Draw("charge*mom>>h3(201,-1000,1000)","isrich&&(istof||istofino&&isshower)")
- Draw all histograms in one ROOT canvas (e.g.
h0->Draw(); h1->Draw("same");
)
- Determine purity and efficiency of e+/e- standard cuts reconstruction algorithm
- Open
/d/hades06/data/sudol/nov02/gen4/urqmd/leptons_urqmd_gen4.root
simulation ntuple
- Draw
gcomtrk
ntuple variable pLep->Draw("gcomtrk")
//piddef.h file
//Enumerated variables indicating which detector has seen a geant particle
//and combinations thereof (to be used as shorthand-notation). These are gcomtrk values
enum enumDetBits
{
//individual detectors
kTrackNotSet = 0x00, // This object does not contain valid data
kSeenInRICHIPU = 0x01, // RICH IPU has seen this trackid
kSeenInOuterMDC = 0x02, // Outer Mdc has seen this trackid
kSeenInRICH = 0x04, // RICH has seen this trackid
kSeenInInnerMDC = 0x08, // Inner Mdc has seen this trackid
kSeenInTOF = 0x10, // TOF has seen this trackid
kSeenInShower = 0x20, // Shower has seen this trackid
kSeenInMETA = 0x40, // One of the Meta dets has seen this trackid
};
- Create and draw q*p histograms before cuts (only pure tracks)
-
pLep->Draw("charge*mom>>h0(201,-1000,1000)","gcomtrk>74")
- Create and draw q*p histograms after all cuts (only pure tracks)
-
pLep->Draw("charge*mom>>h1(201,-1000,1000)","isrich&&(istof||istofino&&isshower)&&gcomtrk>74")
- Create and draw q*p histograms after all cuts
-
pLep->Draw("charge*mom>>h2(201,-1000,1000)","isrich&&(istof||istofino&&isshower)")
- Efficiency is difined as (
Eff = h1/h0
) while Purity is defined as (Pur = h1/h2
)
- Use ROOT
Clone()
function to create clone of h0
, h1
and h2
histograms (e.g. TH1F* h0_clone=h0->Clone()
)
- Use ROOT
Sumw2()
function for h1
and h1_clone
histograms to propagate properly errors (e.g. h1->Sumw2()
)
- Calculate efficiency (
h1->Divide(h0_clone)
) and purity (h1_clone->Divide(h2_clone)
)
- Draw efficiency (
h1->Draw()
) and purity (h1_clone->Draw()
)
--
JacekOtwinowski - 25 Jun 2007