#ifndef ALIHFEPIDQA_H
#define ALIHFEPIDQA_H
#ifndef ROOT_TObject
#include <TObject.h>
#endif
class TList;
class TObjArray;
class TPDGCode;
class TParticle;
class TFile;
class TMultiLayerPerceptron;
class AliAODTrack;
class AliESDtrack;
class AliMCEvent;
class AliVEvent;
class AliPIDResponse;
class AliExternalTrackParam;
class AliLog;
class AliHFEV0pidMC;
class AliHFEcollection;
class AliHFEtrdPIDqa;
class AliHFEV0pid;
class AliHFEpidTRD;
class AliHFEpidQA : public TObject{
public:
AliHFEpidQA();
~AliHFEpidQA();
AliHFEpidQA(const AliHFEpidQA &ref);
AliHFEpidQA &operator=(const AliHFEpidQA &ref);
virtual void Copy(TObject &o) const;
void Init();
void Process();
TList *GetOutput();
TList *GetV0pidQA();
TList *GetV0pidMC();
Bool_t HasV0pidQA() const { return TestBit(kV0pidQA); };
Bool_t HasRecalculateTRDpid() const { return TestBit(kRecalculateTRDpid); };
void SetEvent(AliVEvent* const ev) { fEvent = ev; };
void SetMCEvent(AliMCEvent * const mc) { fMC = mc; };
void SetV0pidQA(Bool_t v0pidQA = kTRUE) { SetBit(kV0pidQA, v0pidQA); };
void SetRecalculateTRDpid(Bool_t recal = kTRUE) { SetBit(kRecalculateTRDpid, recal); };
void SetTRDTotalChargeInSlice0() { fTRDTotalChargeInSlice0 = kTRUE; }
void SetPIDResponse(AliPIDResponse* const pid) { fESDpid = pid; }
Float_t TOFbeta(const AliESDtrack* const track) const;
void CheckEvent();
void SetNNref(TFile *f) { fNNref = f; };
AliHFEtrdPIDqa *GetTRDQA() const { return fTRDpidQA; }
Int_t GetCentrality(AliVEvent* const fInputEvent);
Int_t GetMultiplicityITS(AliVEvent* const fInputEvent) const;
void SetPbPb() { fIsPbPb = kTRUE; };
void SetPP() { fIsPbPb = kFALSE; };
void SetPPMultiBin() { fIsppMultiBin = kFALSE; };
Bool_t IsPbPb() const { return fIsPbPb; };
Bool_t IsPP() const { return !fIsPbPb; };
Bool_t IsPPMultiBin() const { return fIsppMultiBin; };
protected:
enum{
kV0pidQA = BIT(14),
kRecalculateTRDpid = BIT(15)
};
enum{
kITS = 0,
kTPC = 1,
kTRD = 2,
kTOF = 3
};
TObjArray *MakeTrackList(const TObjArray *tracks) const;
TObjArray *MakeCleanListElectrons(const TObjArray *tracks) const;
void MakePurity(const TObjArray *tracks, Int_t species);
TObjArray *MakeCleanListForTRD(const TObjArray * const track, Int_t species);
void FillElectronLikelihoods(const TObjArray * const particles, Int_t species);
void FillPIDresponse(const TObjArray * const particles, Int_t species);
void FillIllumination(const TObjArray *const particles, Int_t species);
void FillTPCinfo(AliESDtrack * const track, Int_t species);
void TestTRDResponse(const TObjArray * const tracks, Int_t species);
void RecalculateTRDpid(AliESDtrack *track, Double_t *pidProbs) const;
void RecalculateTRDpid(AliAODTrack *track, Double_t *pidProbs) const;
void CheckTenderV0pid(const TObjArray * const particles, Int_t species);
Int_t GetTenderV0pid(AliESDtrack * const track);
Double_t TRDlikeTracklet(Int_t layer, AliESDtrack * const track, Double_t *likelihood);
Int_t TRDmomBin(Double_t p) const;
protected:
Int_t GetMaxPID(const Double_t *pidProbs) const;
Int_t GetPDG(Int_t index);
private:
AliVEvent *fEvent;
AliMCEvent *fMC;
AliHFEV0pid *fV0pid;
AliHFEV0pidMC *fV0pidMC;
AliHFEtrdPIDqa *fTRDpidQA;
AliHFEcollection *fOutput;
AliPIDResponse *fESDpid;
private:
TFile *fNNref;
TMultiLayerPerceptron *fNet[11];
Bool_t fTRDTotalChargeInSlice0;
Bool_t fIsPbPb;
Bool_t fIsppMultiBin;
ClassDef(AliHFEpidQA, 1)
};
#endif