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.                  *
 **************************************************************************/
//
//  Secondary vertexing construction Class
//  Construct secondary vertex from Beauty hadron with electron and
//  hadrons, then apply selection criteria
//

#ifndef ALIHFESECVTX_H
#define ALIHFESECVTX_H

#ifndef ROOT_TObject
//#include <TObject.h>
#endif

#ifndef ROOT_THnSparse
#include <THnSparse.h>
#endif

class TH1F;
class TH2F;
class TString;
class AliESDEvent;
class AliAODEvent;
class AliVTrack;
class AliESDtrack;
class AliAODTrack;
class AliMCEvent;
class AliHFEtrackFilter;
class AliHFEpairs;
class AliHFEsecVtxs;
class AliKFParticle;
class AliHFEmcQA;

//________________________________________________________________
class AliHFEsecVtx : public TObject {

  public: 
    AliHFEsecVtx();
    AliHFEsecVtx(const AliHFEsecVtx &p); // copy constructor
    AliHFEsecVtx &operator=(const AliHFEsecVtx &); // assignment operator
    virtual ~AliHFEsecVtx();

    void CreateHistograms(TList * const qaList);

    Bool_t Process(AliVTrack *track);

    Bool_t HasMCData() const { return TestBit(kHasMCData); };
    Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
    Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };

		void SetHasMCData(Bool_t hasMCdata = kTRUE) { SetBit(kHasMCData,hasMCdata); };
    void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
    void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
    void SetEvent(AliESDEvent* const ESD){fESD1=ESD;};    // set ESD pointer
    void SetEventAOD(AliAODEvent* const AOD){fAOD1=AOD;}; // set ESD pointer
    void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent=mcEvent;};  // set stack pointer
    void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
    void SetUseMCPID(Bool_t usemcpid){fUseMCPID=usemcpid;};
    void SetMCQA(AliHFEmcQA * const mcqa){fMCQA=mcqa;};    // set mcqa pointer


    Int_t GetMCPID(const AliESDtrack *track); // return MC pid
		Int_t GetMCPDG(const AliVTrack *track);   // return MC pid
    Int_t GetPairOriginESD(AliESDtrack* track1, AliESDtrack* track2); // return pair origin as a pdg code
    Int_t GetPairOriginAOD(AliAODTrack* track1, AliAODTrack* track2); // return pair origin as a pdg code
    Int_t GetPairCode(const AliVTrack* const track1, const AliVTrack* const track2); // return corresponding pair code to pdg code
    Int_t GetElectronSource(Int_t mclabel); // return origin of the electron
    Int_t GetPDG(const AliVTrack *track);     // return pdg 
    void GetESDPID(const AliESDtrack *track, Int_t &recpid, Double_t &recprob); //return esd pid likelihood
    void GetPrimaryCondition();
    void RecalcPrimvtx(Int_t nkftrk, const Int_t * const, const AliKFParticle * const); //recalculate primary vertex

    TClonesArray *HFEpairs();
    TClonesArray *HFEsecvtxs();

    void AddHFEpairToArray(const AliHFEpairs* const pair);
    void AddHFEsecvtxToArray(const AliHFEsecVtxs* const secvtx);

    void InitHFEpairs();
    void InitHFEsecvtxs();

    void DeleteHFEpairs();
    void DeleteHFEsecvtxs();

    void PairAnalysis(AliVTrack* ESDtrack1, AliVTrack* ESDtrack2, Int_t index2); // do e-h analysis
    void RunSECVTX(AliVTrack *track); // run secondary vertexing algorithm

    void MakeContainer(); // make containers
    void MakeHistos(Int_t step); // make histograms for different steps
    void FillHistos(Int_t step, const AliESDtrack *track); // fill histograms for different steps

  protected:
    void Init();
    void FindSECVTXCandid(AliVTrack *track);
    void CalcSECVTXProperty(AliVTrack* track1, AliVTrack* track2, AliVTrack* track3); // calculated distinctive variables
    void CalcSECVTXProperty(AliVTrack* track1, AliVTrack* track2, AliVTrack* track3, AliVTrack* track4); // calculated distinctive variables

    void Fill4TrkSECVTX(AliVTrack* track, Int_t ipair, Int_t jpair, Int_t kpair);
    void Fill3TrkSECVTX(AliVTrack* track, Int_t ipair, Int_t jpair);
    void Fill2TrkSECVTX(AliVTrack* track, const AliHFEpairs *pair);

  private:
    enum{
      kHasMCData = BIT(15),     // bitset for mc data usage
      kAODanalysis = BIT(16)    // bitset for aod analysis
    };
    enum {kAll, kDirectCharm, kDirectBeauty, kBeautyCharm, kGamma, kPi0, kElse, kBeautyGamma, kBeautyPi0, kBeautyElse, kMisID}; // electron origin 
    enum {kCharm=4, kBeauty=5}; // quark flavor

    AliHFEtrackFilter *fFilter; // filter Tracks to combine the signal track with
    AliESDEvent* fESD1; // ESD pointer             
    AliAODEvent* fAOD1; // AOD pointer             
    AliMCEvent* fMCEvent;   // MCEvent pointer              

    AliHFEmcQA* fMCQA;  // mcqa pointer

    Bool_t fUseMCPID;   // if use MC pid 

    TString fkSourceLabel[10]; // electron source label

    Int_t fNparents;           // number of heavy hadrons to be considered
    Int_t fParentSelect[2][7]; // heavy hadron species
		Double_t fPtRng[7];        // pt ranges to consider pt dependant dca cut
		Double_t fDcaCut[6];       // pt dependant dca cut

    Int_t fNoOfHFEpairs;       // number of e-h pairs  
    Int_t fNoOfHFEsecvtxs;     // number of secondary vertexes
    Int_t fArethereSecVtx;     // checker

    TClonesArray *fHFEpairs;   //! Array of pair 
    TClonesArray *fHFEsecvtxs; //! Array of secondary vertexes 
    TClonesArray *fMCArray;    //! mc array pointer

		Double_t fPVx;          // primary vertex copy x 
		Double_t fPVy;          // primary vertex copy y
		Double_t fPVx2;         // recalculated primary vertex x 
		Double_t fPVy2;         // recalculated primary vertex y
    Double_t fCosPhi;       // cos of opening angle of two pair vertex
    Double_t fSignedLxy;    // signed Lxy of secondary vertex
    Double_t fSignedLxy2;   // signed Lxy of secondary vertex based on recalculated primary vertex
    Double_t fKFchi2;       // chi2 of secondary vertex
    Double_t fInvmass;      // invariant mass of secondary vertex
    Double_t fInvmassSigma; // invariant mass sigma of secondary vertex
    Double_t fKFip;         // impact parameter of secondary vertex track
    Double_t fKFip2;        // impact parameter of secondary vertex track based on recalculated primary vertex

    Int_t fNsectrk2prim;    // # of secvtx tracks contributing to primvtx calculation

    Double_t fVtxchi2Tightcut; // pair vertex chi2 cut
    Double_t fVtxchi2Loosecut; // secvtx vertex chi2 cut

    THnSparseF *fPairQA;    // qa histos for pair analysis 
    THnSparseF *fSecvtxQA;  // qa histos for secvtx
    TList *fSecVtxList;     // list for secondary vertexing outputs

  ClassDef(AliHFEsecVtx,0);
};

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