ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/
//
// Utility class for V0 PID
// Provides smaples of electrons, pions and protons
// More information can be found in the implementation file
//
#ifndef ALIHFEV0PID_H
#define ALIHFEV0PID_H

#ifndef ROOT_TNamed
#include <TNamed.h>
#endif

class TObjArray;
class TList;
class TString;

class AliESDv0;
class AliESDtrack;
class AliKFParticle;
class AliKFVertex;
class AliVEvent;
class AliVTrack;
class AliMCEvent;

class AliHFEV0cuts;
class AliHFEcollection;

class AliHFEV0pid : public TNamed{
  public:
    AliHFEV0pid();
    AliHFEV0pid(const char *name);
    ~AliHFEV0pid();

    void  Process(AliVEvent * const inputEvent);
    Int_t ProcessV0(TObject *v0);
    void  Flush();

    void  InitQA();
    TList *GetListOfQAhistograms();

    TObjArray *GetListOfElectrons() const { return fElectrons; }
    TObjArray *GetListOfPionsK0() const { return fPionsK0; }
    TObjArray *GetListOfPionsL() const { return fPionsL; }
    TObjArray *GetListOfKaons() const { return fKaons; }
    TObjArray *GetListOfProtons() const { return fProtons; }

    Bool_t   IsAODanalysis() const { return TestBit(kAODanalysis); }
    Bool_t   IsESDanalysis() const { return !TestBit(kAODanalysis); }
    void     SetAODanalysis(Bool_t isAOD = kTRUE) { SetBit(kAODanalysis, isAOD); };
    void     SetESDanalysis(Bool_t isESD = kTRUE) { SetBit(kAODanalysis, !isESD); }; 

    void     SetMCEvent(AliMCEvent* const ev) { fMCEvent = ev; };
    
 protected:
    enum{
      kAODanalysis = BIT(14)
	};

    Int_t PreselectV0(AliESDv0 * const v0, Int_t idMC);

    void   ArmenterosPlotMC(AliESDv0 * const v0, Int_t idMC);
    Bool_t IsGammaConv(TObject *v0);
    Bool_t IsK0s(TObject *v0);
    Bool_t IsPhi(const TObject *v0) const;
    Bool_t IsLambda(TObject *v0);        
    TList *GetV0pidQA(); 

    Int_t IdentifyV0(TObject *v0, Int_t d[2]);

    void  BenchmarkV0finder();

 private:
    class AliHFEV0pidTrackIndex{
    public:
      AliHFEV0pidTrackIndex();
      ~AliHFEV0pidTrackIndex();
      void Init(Int_t capacity);
      void Add(Int_t index, Int_t species);
      Bool_t Find(Int_t index) const;
      Bool_t Find(Int_t index, Int_t species) const;
      Int_t GetNumberOfElectrons() const { return fNElectrons; };
      Int_t GetNumberOfPionsK0() const { return fNPionsK0; };
      Int_t GetNumberOfPionsL() const { return fNPionsL; };
      Int_t GetNumberOfKaons() const { return fNKaons; };
      Int_t GetNumberOfProtons() const { return fNProtons; };
      void Flush();
      
    private:
      AliHFEV0pidTrackIndex(const AliHFEV0pidTrackIndex &ref);
      AliHFEV0pidTrackIndex &operator=(const AliHFEV0pidTrackIndex &ref);
      Int_t fNElectrons;        // Number of identified electrons
      Int_t fNPionsK0;          // Number of identified pions from K0s
      Int_t fNPionsL;           // Lumber of identified pions from Lambda
      Int_t fNKaons;            // Number of identified kaons
      Int_t fNProtons;          // Number of identified protons
      Int_t *fIndexElectron;    // Indices of identified electrons
      Int_t *fIndexPionK0;      // Indices of identified pions from K0s
      Int_t *fIndexPionL;       // Indices of identified pions from Lambda
      Int_t *fIndexKaon;        // Indices of identified kaons
      Int_t *fIndexProton;      // Indices of identified protons
    };
    AliHFEV0pid(const AliHFEV0pid &ref);
    AliHFEV0pid&operator=(const AliHFEV0pid &ref);
    
    AliVEvent   *fInputEvent;        // Input Event
    Int_t        fNtracks;           // number of tracks in current event
    AliMCEvent  *fMCEvent;           // MC evnet
    Bool_t       fMCon;              // availability of MC information
    AliKFVertex *fPrimaryVertex;     // Primary Vertex
    TObjArray   *fElectrons;         // List of Electron tracks coming from Conversions
    TObjArray   *fPionsK0;           // List of Pion tracks coming from K0
    TObjArray   *fPionsL;            // List of Pion tracks coming from L
    TObjArray   *fKaons;             // List of Kaon tracks from Phi decay
    TObjArray   *fProtons;           // List of Proton Tracks coming from Lambdas

    TObjArray   *fGammas;            // for MC purposes - list of found gammas
    TObjArray   *fK0s;               // for MC purposes - list of found K0s
    TObjArray   *fLambdas;           // for MC purposes - list of found lambdas
    TObjArray   *fAntiLambdas;       // for MC purposes - list of found anti lambdas

    AliHFEV0pidTrackIndex *fIndices; // Container for Track indices
    AliHFEcollection *fQA;           // Collection of QA histograms
    AliHFEV0cuts     *fV0cuts;       // separate class for studying and applying the V0 cuts
    TList       *fOutput;            // collection list

    UInt_t       fDestBits;              // logical bits for destructor

    ClassDef(AliHFEV0pid, 1)          // V0 PID Class

};

#endif
 AliHFEV0pid.h:1
 AliHFEV0pid.h:2
 AliHFEV0pid.h:3
 AliHFEV0pid.h:4
 AliHFEV0pid.h:5
 AliHFEV0pid.h:6
 AliHFEV0pid.h:7
 AliHFEV0pid.h:8
 AliHFEV0pid.h:9
 AliHFEV0pid.h:10
 AliHFEV0pid.h:11
 AliHFEV0pid.h:12
 AliHFEV0pid.h:13
 AliHFEV0pid.h:14
 AliHFEV0pid.h:15
 AliHFEV0pid.h:16
 AliHFEV0pid.h:17
 AliHFEV0pid.h:18
 AliHFEV0pid.h:19
 AliHFEV0pid.h:20
 AliHFEV0pid.h:21
 AliHFEV0pid.h:22
 AliHFEV0pid.h:23
 AliHFEV0pid.h:24
 AliHFEV0pid.h:25
 AliHFEV0pid.h:26
 AliHFEV0pid.h:27
 AliHFEV0pid.h:28
 AliHFEV0pid.h:29
 AliHFEV0pid.h:30
 AliHFEV0pid.h:31
 AliHFEV0pid.h:32
 AliHFEV0pid.h:33
 AliHFEV0pid.h:34
 AliHFEV0pid.h:35
 AliHFEV0pid.h:36
 AliHFEV0pid.h:37
 AliHFEV0pid.h:38
 AliHFEV0pid.h:39
 AliHFEV0pid.h:40
 AliHFEV0pid.h:41
 AliHFEV0pid.h:42
 AliHFEV0pid.h:43
 AliHFEV0pid.h:44
 AliHFEV0pid.h:45
 AliHFEV0pid.h:46
 AliHFEV0pid.h:47
 AliHFEV0pid.h:48
 AliHFEV0pid.h:49
 AliHFEV0pid.h:50
 AliHFEV0pid.h:51
 AliHFEV0pid.h:52
 AliHFEV0pid.h:53
 AliHFEV0pid.h:54
 AliHFEV0pid.h:55
 AliHFEV0pid.h:56
 AliHFEV0pid.h:57
 AliHFEV0pid.h:58
 AliHFEV0pid.h:59
 AliHFEV0pid.h:60
 AliHFEV0pid.h:61
 AliHFEV0pid.h:62
 AliHFEV0pid.h:63
 AliHFEV0pid.h:64
 AliHFEV0pid.h:65
 AliHFEV0pid.h:66
 AliHFEV0pid.h:67
 AliHFEV0pid.h:68
 AliHFEV0pid.h:69
 AliHFEV0pid.h:70
 AliHFEV0pid.h:71
 AliHFEV0pid.h:72
 AliHFEV0pid.h:73
 AliHFEV0pid.h:74
 AliHFEV0pid.h:75
 AliHFEV0pid.h:76
 AliHFEV0pid.h:77
 AliHFEV0pid.h:78
 AliHFEV0pid.h:79
 AliHFEV0pid.h:80
 AliHFEV0pid.h:81
 AliHFEV0pid.h:82
 AliHFEV0pid.h:83
 AliHFEV0pid.h:84
 AliHFEV0pid.h:85
 AliHFEV0pid.h:86
 AliHFEV0pid.h:87
 AliHFEV0pid.h:88
 AliHFEV0pid.h:89
 AliHFEV0pid.h:90
 AliHFEV0pid.h:91
 AliHFEV0pid.h:92
 AliHFEV0pid.h:93
 AliHFEV0pid.h:94
 AliHFEV0pid.h:95
 AliHFEV0pid.h:96
 AliHFEV0pid.h:97
 AliHFEV0pid.h:98
 AliHFEV0pid.h:99
 AliHFEV0pid.h:100
 AliHFEV0pid.h:101
 AliHFEV0pid.h:102
 AliHFEV0pid.h:103
 AliHFEV0pid.h:104
 AliHFEV0pid.h:105
 AliHFEV0pid.h:106
 AliHFEV0pid.h:107
 AliHFEV0pid.h:108
 AliHFEV0pid.h:109
 AliHFEV0pid.h:110
 AliHFEV0pid.h:111
 AliHFEV0pid.h:112
 AliHFEV0pid.h:113
 AliHFEV0pid.h:114
 AliHFEV0pid.h:115
 AliHFEV0pid.h:116
 AliHFEV0pid.h:117
 AliHFEV0pid.h:118
 AliHFEV0pid.h:119
 AliHFEV0pid.h:120
 AliHFEV0pid.h:121
 AliHFEV0pid.h:122
 AliHFEV0pid.h:123
 AliHFEV0pid.h:124
 AliHFEV0pid.h:125
 AliHFEV0pid.h:126
 AliHFEV0pid.h:127
 AliHFEV0pid.h:128
 AliHFEV0pid.h:129
 AliHFEV0pid.h:130
 AliHFEV0pid.h:131
 AliHFEV0pid.h:132
 AliHFEV0pid.h:133
 AliHFEV0pid.h:134
 AliHFEV0pid.h:135
 AliHFEV0pid.h:136
 AliHFEV0pid.h:137
 AliHFEV0pid.h:138
 AliHFEV0pid.h:139
 AliHFEV0pid.h:140
 AliHFEV0pid.h:141
 AliHFEV0pid.h:142
 AliHFEV0pid.h:143
 AliHFEV0pid.h:144
 AliHFEV0pid.h:145
 AliHFEV0pid.h:146