Place the config and root file at the right place
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEpidQA.h
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15 //
16 // Class for PID QA
17 // Several studies done on clean samples of electrons, pions and kaons
18 // coming from V0 PID
19 // More information can be found in the implementation file
20 //
21 #ifndef ALIHFEPIDQA_H
22 #define ALIHFEPIDQA_H
23
24 #ifndef ROOT_TObject
25 #include <TObject.h>
26 #endif
27
28 class TList;
29 class TObjArray;
30 class TPDGCode;
31 class TParticle;
32 class TFile;
33 class TMultiLayerPerceptron;
34
35 class AliAODTrack;
36 class AliESDtrack;
37 class AliMCEvent;
38 class AliVEvent;
39 class AliPIDResponse;
40 class AliExternalTrackParam;
41 class AliLog;
42
43 class AliHFEV0pidMC;
44 class AliHFEcollection;
45 class AliHFEtrdPIDqa;
46 class AliHFEV0pid;
47 class AliHFEpidTRD;
48
49
50 class AliHFEpidQA : public TObject{
51   public:
52     AliHFEpidQA();
53     ~AliHFEpidQA();
54     AliHFEpidQA(const AliHFEpidQA &ref);
55     AliHFEpidQA &operator=(const AliHFEpidQA &ref);
56     virtual void Copy(TObject &o) const;
57
58     void Init();
59     void Process();
60
61     TList *GetOutput();
62     TList *GetV0pidQA();
63     TList *GetV0pidMC();
64
65     Bool_t   HasV0pidQA() const { return TestBit(kV0pidQA); };
66     Bool_t   HasRecalculateTRDpid() const { return TestBit(kRecalculateTRDpid); };
67
68     void     SetEvent(AliVEvent* const ev) { fEvent = ev; };
69     void     SetMCEvent(AliMCEvent * const mc) { fMC = mc; };
70     void     SetV0pidQA(Bool_t v0pidQA = kTRUE) { SetBit(kV0pidQA, v0pidQA); };
71     void     SetRecalculateTRDpid(Bool_t recal = kTRUE) { SetBit(kRecalculateTRDpid, recal); };
72     void     SetTRDTotalChargeInSlice0() { fTRDTotalChargeInSlice0 = kTRUE; }
73
74     void     SetPIDResponse(AliPIDResponse* const pid) { fESDpid = pid; }
75     Float_t  TOFbeta(const AliESDtrack* const track) const;
76
77     void     CheckEvent();
78     void     SetNNref(TFile *f) { fNNref = f; };
79     
80     AliHFEtrdPIDqa *GetTRDQA() const { return fTRDpidQA; }
81
82     Int_t GetCentrality(AliVEvent*  const fInputEvent);
83     Int_t GetMultiplicityITS(AliVEvent*  const fInputEvent) const;
84     void SetPbPb() { fIsPbPb = kTRUE; };
85     void SetPP() { fIsPbPb = kFALSE; };
86     void SetPPMultiBin() { fIsppMultiBin = kFALSE; };
87     Bool_t IsPbPb() const { return fIsPbPb; };
88     Bool_t IsPP() const { return !fIsPbPb; };
89     Bool_t IsPPMultiBin() const { return fIsppMultiBin; };
90
91   protected:
92     enum{
93       kV0pidQA = BIT(14),
94       kRecalculateTRDpid = BIT(15)
95     };
96     enum{  // detectors for histogram names
97       kITS = 0,
98       kTPC = 1,
99       kTRD = 2,
100       kTOF = 3
101     };
102
103     TObjArray *MakeTrackList(const TObjArray *tracks) const;
104     TObjArray *MakeCleanListElectrons(const TObjArray *tracks) const;
105
106     void MakePurity(const TObjArray *tracks, Int_t species);
107     TObjArray *MakeCleanListForTRD(const TObjArray * const track, Int_t species);
108     void FillElectronLikelihoods(const TObjArray * const particles, Int_t species);
109     void FillPIDresponse(const TObjArray * const particles, Int_t species);
110     void FillIllumination(const TObjArray *const particles, Int_t species);
111     void FillTPCinfo(AliESDtrack * const track, Int_t species);
112     void TestTRDResponse(const TObjArray * const tracks, Int_t species);
113     void RecalculateTRDpid(AliESDtrack *track, Double_t *pidProbs) const;
114     void RecalculateTRDpid(AliAODTrack *track, Double_t *pidProbs) const;
115     void CheckTenderV0pid(const TObjArray * const particles, Int_t species);
116     Int_t GetTenderV0pid(AliESDtrack * const track);
117     
118     Double_t TRDlikeTracklet(Int_t layer, AliESDtrack * const track, Double_t *likelihood);
119     Int_t TRDmomBin(Double_t p) const;
120
121
122
123
124  protected:
125     Int_t GetMaxPID(const Double_t *pidProbs) const;
126     Int_t GetPDG(Int_t index);
127     
128   private:
129     AliVEvent         *fEvent;        // event pointer
130     AliMCEvent        *fMC;           // MC Event
131     AliHFEV0pid       *fV0pid;        // V0 PID 
132     AliHFEV0pidMC     *fV0pidMC;      // V0 MC PID
133     AliHFEtrdPIDqa    *fTRDpidQA;     //! TRD PID QA object
134     AliHFEcollection  *fOutput;       // Output container
135     AliPIDResponse    *fESDpid;       // ESD PID object
136  private:
137     TFile             *fNNref;        // reference file for NN pid 
138     TMultiLayerPerceptron *fNet[11];  //  reference networks
139     Bool_t fTRDTotalChargeInSlice0;     // Fix for Foreward/Backward compatibility
140
141     Bool_t             fIsPbPb;        // Analysis Type: pp or PbPb
142     Bool_t             fIsppMultiBin;  // pp multiplicity bin analysis
143
144   ClassDef(AliHFEpidQA, 1)            // PID QA tool
145 };
146 #endif