ROOT logo
#ifndef ALILNID_H
#define ALILNID_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// class for light nuclei identification
// author: Eulogio Serradilla <eulogio.serradilla@cern.ch>

#include <TObject.h>
#include <AliPID.h>

class TParticle;
class AliAODMCParticle;
class AliITSPIDResponse;
class AliTPCPIDResponse;

class AliLnID: public TObject
{
  public:
	AliLnID();
	AliLnID(const AliLnID& other);
	AliLnID& operator=(const AliLnID& other);
	
	virtual ~AliLnID();
	
	Int_t GetPID(const TParticle* p) const;
	Int_t GetPID(const AliAODMCParticle* p) const;
	Int_t GetPID(Int_t pdgCode) const;
	
	Int_t GetPID(Int_t partCode, Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t pTOF, Double_t beta, Double_t nSigITS=3, Double_t nSigTPC=3, Double_t nSigTOF=3) const;
	
	Int_t GetITSpid(Int_t partCode, Double_t pITS, Double_t dEdx, Double_t nPoints, Double_t nSigma=3) const;
	
	Int_t GetTPCpid(Int_t partCode, Double_t pTPC, Double_t dEdx, Double_t nPoints, Double_t nSigma=3) const;
	
	Int_t GetITSTPCpid(Int_t partCode, Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t nSigmaITS, Double_t pTPC, Double_t dEdxTPC, Double_t nPointsTPC, Double_t nSigmaTPC) const;
	
	Int_t GetTPCTOFpid(Int_t partCode, Double_t pTPC, Double_t dEdx, Double_t nPoints, Double_t nSigmaTPC, Double_t pTOF, Double_t beta, Double_t nSigmaTOF) const;
	
	Int_t GetMaxLikelihoodPID(Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t pTOF, Double_t beta) const;
	
	Int_t GetBayesPID(Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t pTOF, Double_t beta) const;
	
	Bool_t GetITSlikelihood(Double_t p, Double_t dEdx, Int_t nPoints, Double_t* r) const;
	Bool_t GetTPClikelihood(Double_t p, Double_t dEdx, Int_t nPoints, Double_t* r) const;
	Bool_t GetTOFlikelihood(Double_t p, Double_t beta, Double_t* r) const;
	
	Double_t GetBetaExpectedSigma(Double_t p, Double_t mass) const;
	
	Bool_t GetITSmatch(Int_t pid, Double_t p, Double_t dEdx, Int_t nPoints, Double_t nSigma=3.) const;
	Bool_t GetTPCmatch(Int_t pid, Double_t pTPC, Double_t dEdx, Double_t nPoints, Double_t nSigma=3.) const;
	Bool_t GetTOFmatch(Int_t pid, Double_t pTOF, Double_t beta, Double_t nSigma=3.) const;
	
	Int_t GetPidProcedure() const { return fPidProcedure; }
	
	Bool_t IsITSTPCmismatch(Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t nSigma=5.) const;
	Bool_t IsITSTOFmismatch(Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTOF, Double_t beta, Double_t nSigma=5.) const;
	Bool_t IsTPCTOFmismatch(Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t pTOF, Double_t beta, Double_t nSigma=5.) const;
	
	void SetPriorProbabilities(const Double_t* prob);
	void SetPriorProbabilities(Double_t e, Double_t mu, Double_t pi, Double_t k, Double_t p, Double_t d, Double_t t, Double_t he3, Double_t alpha);
	
	void SetPidProcedure(Int_t proc) { fPidProcedure = proc; }
	
	void SetITSBetheBlochParams(const Double_t* param, Double_t res=0.13);
	
	void SetTPCBetheBlochParams(const Double_t* param, Double_t mip=1., Double_t res=0.06);
	void SetTPCBetheBlochParams(Double_t c0, Double_t c1, Double_t c2, Double_t c3, Double_t c4, Double_t mip=1., Double_t res=0.06);
	
	void SetTPCChargeCorrection(Double_t zexp) { fZexp = zexp; }
	
	enum { kSPECIES = 9 };
	enum { kBayes=0, kMaxLikelihood, kITS, kTPC, kITSTPC, kTPCTOF };
	
  private:
 
	Double_t Beta(Double_t p, Double_t m) const;
	Bool_t GetLikelihood(Double_t pITS, Double_t dEdxITS, Int_t nPointsITS, Double_t pTPC, Double_t dEdxTPC, Int_t nPointsTPC, Double_t pTOF, Double_t beta, Double_t* r) const;
	Int_t GetIndexOfMaxValue(const Double_t* w) const;
	
  private:
 
	Int_t fPidProcedure; // PID procedure code
	AliPID::EParticleType fSpecies[kSPECIES]; // particle species known by the pid
	
	Double_t fPrior[kSPECIES]; // prior probabilities
	Double_t fRange; // number of sigmas to the expected values
	Double_t fZexp; // TPC BB charge dependence
	
	AliITSPIDResponse* fITSpid; // ITS likelihood
	AliTPCPIDResponse* fTPCpid; // TPC likelihood
	
	ClassDef(AliLnID, 1)
};

#endif // ALILNID_H
 AliLnID.h:1
 AliLnID.h:2
 AliLnID.h:3
 AliLnID.h:4
 AliLnID.h:5
 AliLnID.h:6
 AliLnID.h:7
 AliLnID.h:8
 AliLnID.h:9
 AliLnID.h:10
 AliLnID.h:11
 AliLnID.h:12
 AliLnID.h:13
 AliLnID.h:14
 AliLnID.h:15
 AliLnID.h:16
 AliLnID.h:17
 AliLnID.h:18
 AliLnID.h:19
 AliLnID.h:20
 AliLnID.h:21
 AliLnID.h:22
 AliLnID.h:23
 AliLnID.h:24
 AliLnID.h:25
 AliLnID.h:26
 AliLnID.h:27
 AliLnID.h:28
 AliLnID.h:29
 AliLnID.h:30
 AliLnID.h:31
 AliLnID.h:32
 AliLnID.h:33
 AliLnID.h:34
 AliLnID.h:35
 AliLnID.h:36
 AliLnID.h:37
 AliLnID.h:38
 AliLnID.h:39
 AliLnID.h:40
 AliLnID.h:41
 AliLnID.h:42
 AliLnID.h:43
 AliLnID.h:44
 AliLnID.h:45
 AliLnID.h:46
 AliLnID.h:47
 AliLnID.h:48
 AliLnID.h:49
 AliLnID.h:50
 AliLnID.h:51
 AliLnID.h:52
 AliLnID.h:53
 AliLnID.h:54
 AliLnID.h:55
 AliLnID.h:56
 AliLnID.h:57
 AliLnID.h:58
 AliLnID.h:59
 AliLnID.h:60
 AliLnID.h:61
 AliLnID.h:62
 AliLnID.h:63
 AliLnID.h:64
 AliLnID.h:65
 AliLnID.h:66
 AliLnID.h:67
 AliLnID.h:68
 AliLnID.h:69
 AliLnID.h:70
 AliLnID.h:71
 AliLnID.h:72
 AliLnID.h:73
 AliLnID.h:74
 AliLnID.h:75
 AliLnID.h:76
 AliLnID.h:77
 AliLnID.h:78
 AliLnID.h:79
 AliLnID.h:80
 AliLnID.h:81
 AliLnID.h:82
 AliLnID.h:83
 AliLnID.h:84
 AliLnID.h:85
 AliLnID.h:86
 AliLnID.h:87
 AliLnID.h:88
 AliLnID.h:89
 AliLnID.h:90
 AliLnID.h:91
 AliLnID.h:92
 AliLnID.h:93
 AliLnID.h:94
 AliLnID.h:95
 AliLnID.h:96
 AliLnID.h:97