ROOT logo
#ifndef ALITRACKDIHADRONPID_H
#define ALITRACKDIHADRONPID_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * 
* See cxx source for full Copyright notice */ 
/* $Id$ */

#include <iostream>
using namespace std;

#include "AliAODTrack.h"
#include "AliAODEvent.h"
#include "AliAODMCParticle.h"
#include "AliPIDResponse.h"

class AliTrackDiHadronPID : public TObject {

public:
	AliTrackDiHadronPID();
	AliTrackDiHadronPID(AliAODTrack* track, AliAODTrack* globaltrack = 0x0, AliAODMCParticle* mcparticle = 0x0, AliPIDResponse* pidresponse = 0x0);
	virtual ~AliTrackDiHadronPID() {}

private:
	AliTrackDiHadronPID(const AliTrackDiHadronPID&);
	AliTrackDiHadronPID& operator=(const AliTrackDiHadronPID&);

// Internal copy functions.
private:
	Bool_t CopyBasicTrackInfo();
	Bool_t CopyFlags();
	Bool_t CopyDCAInfo();
	Bool_t CopyITSInfo();
	Bool_t CopyTPCInfo();
	Bool_t CopyTOFInfo();
	Bool_t CopyMCInfo();

// Check functions.
public:
	Bool_t IsBasicTrackInfoAvailable() const {return fBasicInfoAvailable;}
	Bool_t IsFlagInfoAvailable() const {return fFlagsAvailable;}
	Bool_t IsDCAInfoAvailable() const {return fDCAInfoAvailable;}
	Bool_t IsITSInfoAvailable() const {return fITSInfoAvailable;}
	Bool_t IsTPCInfoAvailable() const {return fTPCInfoAvailable;}
	Bool_t IsTOFInfoAvailable() const {return fTOFInfoAvailable;}
	Bool_t IsMCInfoAvailable() const {return fMCInfoAvailable;}			

public:
// Getting Track Parameters. Functionality is the same as AOD track,
// unless stated otherwise.
	Bool_t UnknownSpecies(Int_t species) const;
	Double_t Pt() const {return fPt;}
	Double_t Eta() const {return fEta;}
	Double_t Phi() const {return fPhi;}
	Double_t Y(Int_t species) {
		if (UnknownSpecies(species)) return fY[species];
		else return -999.;
	}

	ULong_t GetFlags() const {return fFlags;}
	ULong_t GetStatus() const {return GetFlags();}
	UInt_t GetFilterMap() const {return fFilterMap;}
	Bool_t TestFilterMask(UInt_t filterMask) const {return (Bool_t)((filterMask & fFilterMap) == filterMask);}

	Int_t GetID() const {return fID;}
	Int_t GetLabel() const {return fLabel;}
	void GetTOFLabel(Int_t* label) const {label[0] = fTOFLabel[0]; label[1] = fTOFLabel[1]; label[2] = fTOFLabel[2];}
	Short_t Charge() const {return fCharge;}
	Int_t GetNclsTPC() const {return fNclsTPC;}

	Double_t GetZAtDCA() const {return fDCAz;}
	Double_t GetXYAtDCA() const {return fDCAxy;}

	// TOF related Getters.
	Double_t GetTOFsignal() const {return fTOFsignal;}
	Double_t GetTOFsignalMinusExpected(Int_t species) const {
		if (UnknownSpecies(species)) {return -10e10;}
		return fTOFsignalMinusExpected[species];
	}
	Double_t GetTOFsignalExpected(Int_t species) const {
		if (UnknownSpecies(species)) {return -10e10;}
		return (fTOFsignal - fTOFsignalMinusExpected[species]);
	}
	Double_t GetTOFsigmaExpected(Int_t species) {
		if (UnknownSpecies(species)) {return -10e10;}
		if (GetNumberOfSigmasTOF(species) < 10e-10) {return -10e30;}
		return (GetTOFsignalMinusExpected(species)/GetNumberOfSigmasTOF(species));
	}
	Double_t GetNumberOfSigmasTOF(Int_t species) const {
		if (UnknownSpecies(species)) {return -10e10;}
		return fTOFNsigma[species];
	}
	Int_t GetTOFMatchingStatus() const {return fTOFMatchingStatus;}
	Bool_t IsTOFMismatch() const {
		if (fTOFMatchingStatus==1) {return kTRUE;}
		else {return kFALSE;}
	}

	Double_t GetTPCsignal() const {return fTPCsignal;}
	Double_t GetTPCsignalMinusExpected(Int_t species) const {return fTPCsignalMinusExpected[species];}
	Double_t GetTPCmomentum() const {return fTPCmomentum;}
	Double_t GetNumberOfSigmasTPC(Int_t species) const {
		if (UnknownSpecies(species)) {return -10e10;}
		return fTPCNsigma[species];
	}

	Char_t GetITSClusterMap() const {return fITSClusterMap;}
	Bool_t HasPointOnITSLayer(Int_t layer) const {
		if ((layer > -1) && (layer < 6)) return fITSHits[layer];
		else {
			cout<<"ITS has only 6 layers."<<endl;
			return kFALSE;
		}
	}

	Double_t MCPt() const {return fMCPt;}
	Double_t MCEta() const {return fMCEta;}
	Double_t MCPhi() const {return fMCPhi;}
	Double_t MCY() const {return fMCY;}
	Int_t GetMCSpecies() const {
		Int_t abspdg = TMath::Abs(GetPdgCode());
		if (abspdg == 211) return 0;
		else if (abspdg == 321) return 1;
		else if (abspdg == 2212) return 2;
		else return -999;
	}
	
	Int_t GetPdgCode() const {return fPdgCode;}
	Bool_t IsPhysicalPrimary() const {return fIsPhysicalPrimary;}
	Bool_t IsSecondaryFromWeakDecay() const {return fIsSecondaryFromWeakDecay;}
	Bool_t IsSecondaryFromMaterial() const {return fIsSecondaryFromMaterial;}

	void ForgetAboutPointers() {
		// AOD tracks are usually deleted, while the 
		// AliTrackDiHadronPID is not. This method ensures that
		// the pointers to the track/event objects etc. don't
		// point to deleted objects.
		fAODTrack = 0x0;
		fAODGlobalTrack = 0x0;
		fAODEvent = 0x0;
		fAODMCParticle = 0x0;
		fPIDResponse = 0x0;
	}

	void SetDebugLevel(Int_t debuglevel) {fDebug = debuglevel;}
	Int_t GetDebugLevel() const {return fDebug;}

private:
// Pointers to original Tracks etc (cannot be returned, will not be streamed/saved).
	AliAODTrack*		fAODTrack;			//! Original AOD Track.
	AliAODTrack*		fAODGlobalTrack;	//! Corresponding Global AOD Track.
	AliAODEvent*		fAODEvent;			//!	Original AOD Event.
	AliAODMCParticle*	fAODMCParticle;		//! Original MC Particle.
	AliPIDResponse*		fPIDResponse;		//!	Original PID Response.

// Flags if a certain type of information is available for this track.
	Bool_t				fBasicInfoAvailable;// Basic Track Info.
	Bool_t				fFlagsAvailable;
	Bool_t				fDCAInfoAvailable;	// DCA Info.
	Bool_t				fITSInfoAvailable;	// ITS Info.
	Bool_t				fTPCInfoAvailable;	// TPC Info.
	Bool_t 				fTOFInfoAvailable;	// TOF Info.
	Bool_t				fMCInfoAvailable;	// MC Info.

// Basic Track Info.
	Double_t 			fPt;				// Reconstructed Pt.
	Double_t			fEta;				// Reconstructed Eta.
	Double_t			fY[3];				// Reconstructed Rapidity for pi,K,p.
	Double_t			fPhi;				// Reconstructed Phi.

	ULong_t				fFlags;				// Reconstruction Flags.
	UInt_t				fFilterMap;			// FilterMap.

	Short_t				fID;				// Track ID.
	Int_t 				fLabel;				// Track Label.
	Int_t				fTOFLabel[3];		// Track TOF label.

	Short_t				fCharge;			// Charge (is a Char_t in AliAODTrack)
	Int_t				fNclsTPC;			// Number of clusters in TPC.
	
// DCA Info.
	Double_t			fDCAz;				// z at DCA.
	Double_t			fDCAxy;				// xy at DCA.

// PID Info.
	Double_t			fTOFsignal;			
	Double_t			fTOFsignalMinusExpected[3];
	Double_t			fTOFNsigma[3];
	Int_t				fTOFMatchingStatus;		// 0 -> match, 1 -> mismatch, 2 -> no TOF hit.
	Double_t			fTPCsignal;			
	Double_t			fTPCsignalMinusExpected[3];
	Double_t			fTPCNsigma[3];
	Double_t			fTPCmomentum;		
	UChar_t				fITSClusterMap;
	Bool_t				fITSHits[6];

// MC Info.
	Double_t			fMCPt;
	Double_t			fMCEta;
	Double_t			fMCPhi;
	Double_t			fMCY;
	Int_t				fPdgCode;
	Bool_t				fIsPhysicalPrimary;
	Bool_t				fIsSecondaryFromWeakDecay;
	Bool_t				fIsSecondaryFromMaterial;

// Static variables.
public:
	static Double_t 	fSigmaTOFStd;
	static Double_t 	fSigmaTPCStd;

// Debug.
private:
	Int_t				fDebug;				// Debug flag.

	ClassDef(AliTrackDiHadronPID,1);

};

#endif
 AliTrackDiHadronPID.h:1
 AliTrackDiHadronPID.h:2
 AliTrackDiHadronPID.h:3
 AliTrackDiHadronPID.h:4
 AliTrackDiHadronPID.h:5
 AliTrackDiHadronPID.h:6
 AliTrackDiHadronPID.h:7
 AliTrackDiHadronPID.h:8
 AliTrackDiHadronPID.h:9
 AliTrackDiHadronPID.h:10
 AliTrackDiHadronPID.h:11
 AliTrackDiHadronPID.h:12
 AliTrackDiHadronPID.h:13
 AliTrackDiHadronPID.h:14
 AliTrackDiHadronPID.h:15
 AliTrackDiHadronPID.h:16
 AliTrackDiHadronPID.h:17
 AliTrackDiHadronPID.h:18
 AliTrackDiHadronPID.h:19
 AliTrackDiHadronPID.h:20
 AliTrackDiHadronPID.h:21
 AliTrackDiHadronPID.h:22
 AliTrackDiHadronPID.h:23
 AliTrackDiHadronPID.h:24
 AliTrackDiHadronPID.h:25
 AliTrackDiHadronPID.h:26
 AliTrackDiHadronPID.h:27
 AliTrackDiHadronPID.h:28
 AliTrackDiHadronPID.h:29
 AliTrackDiHadronPID.h:30
 AliTrackDiHadronPID.h:31
 AliTrackDiHadronPID.h:32
 AliTrackDiHadronPID.h:33
 AliTrackDiHadronPID.h:34
 AliTrackDiHadronPID.h:35
 AliTrackDiHadronPID.h:36
 AliTrackDiHadronPID.h:37
 AliTrackDiHadronPID.h:38
 AliTrackDiHadronPID.h:39
 AliTrackDiHadronPID.h:40
 AliTrackDiHadronPID.h:41
 AliTrackDiHadronPID.h:42
 AliTrackDiHadronPID.h:43
 AliTrackDiHadronPID.h:44
 AliTrackDiHadronPID.h:45
 AliTrackDiHadronPID.h:46
 AliTrackDiHadronPID.h:47
 AliTrackDiHadronPID.h:48
 AliTrackDiHadronPID.h:49
 AliTrackDiHadronPID.h:50
 AliTrackDiHadronPID.h:51
 AliTrackDiHadronPID.h:52
 AliTrackDiHadronPID.h:53
 AliTrackDiHadronPID.h:54
 AliTrackDiHadronPID.h:55
 AliTrackDiHadronPID.h:56
 AliTrackDiHadronPID.h:57
 AliTrackDiHadronPID.h:58
 AliTrackDiHadronPID.h:59
 AliTrackDiHadronPID.h:60
 AliTrackDiHadronPID.h:61
 AliTrackDiHadronPID.h:62
 AliTrackDiHadronPID.h:63
 AliTrackDiHadronPID.h:64
 AliTrackDiHadronPID.h:65
 AliTrackDiHadronPID.h:66
 AliTrackDiHadronPID.h:67
 AliTrackDiHadronPID.h:68
 AliTrackDiHadronPID.h:69
 AliTrackDiHadronPID.h:70
 AliTrackDiHadronPID.h:71
 AliTrackDiHadronPID.h:72
 AliTrackDiHadronPID.h:73
 AliTrackDiHadronPID.h:74
 AliTrackDiHadronPID.h:75
 AliTrackDiHadronPID.h:76
 AliTrackDiHadronPID.h:77
 AliTrackDiHadronPID.h:78
 AliTrackDiHadronPID.h:79
 AliTrackDiHadronPID.h:80
 AliTrackDiHadronPID.h:81
 AliTrackDiHadronPID.h:82
 AliTrackDiHadronPID.h:83
 AliTrackDiHadronPID.h:84
 AliTrackDiHadronPID.h:85
 AliTrackDiHadronPID.h:86
 AliTrackDiHadronPID.h:87
 AliTrackDiHadronPID.h:88
 AliTrackDiHadronPID.h:89
 AliTrackDiHadronPID.h:90
 AliTrackDiHadronPID.h:91
 AliTrackDiHadronPID.h:92
 AliTrackDiHadronPID.h:93
 AliTrackDiHadronPID.h:94
 AliTrackDiHadronPID.h:95
 AliTrackDiHadronPID.h:96
 AliTrackDiHadronPID.h:97
 AliTrackDiHadronPID.h:98
 AliTrackDiHadronPID.h:99
 AliTrackDiHadronPID.h:100
 AliTrackDiHadronPID.h:101
 AliTrackDiHadronPID.h:102
 AliTrackDiHadronPID.h:103
 AliTrackDiHadronPID.h:104
 AliTrackDiHadronPID.h:105
 AliTrackDiHadronPID.h:106
 AliTrackDiHadronPID.h:107
 AliTrackDiHadronPID.h:108
 AliTrackDiHadronPID.h:109
 AliTrackDiHadronPID.h:110
 AliTrackDiHadronPID.h:111
 AliTrackDiHadronPID.h:112
 AliTrackDiHadronPID.h:113
 AliTrackDiHadronPID.h:114
 AliTrackDiHadronPID.h:115
 AliTrackDiHadronPID.h:116
 AliTrackDiHadronPID.h:117
 AliTrackDiHadronPID.h:118
 AliTrackDiHadronPID.h:119
 AliTrackDiHadronPID.h:120
 AliTrackDiHadronPID.h:121
 AliTrackDiHadronPID.h:122
 AliTrackDiHadronPID.h:123
 AliTrackDiHadronPID.h:124
 AliTrackDiHadronPID.h:125
 AliTrackDiHadronPID.h:126
 AliTrackDiHadronPID.h:127
 AliTrackDiHadronPID.h:128
 AliTrackDiHadronPID.h:129
 AliTrackDiHadronPID.h:130
 AliTrackDiHadronPID.h:131
 AliTrackDiHadronPID.h:132
 AliTrackDiHadronPID.h:133
 AliTrackDiHadronPID.h:134
 AliTrackDiHadronPID.h:135
 AliTrackDiHadronPID.h:136
 AliTrackDiHadronPID.h:137
 AliTrackDiHadronPID.h:138
 AliTrackDiHadronPID.h:139
 AliTrackDiHadronPID.h:140
 AliTrackDiHadronPID.h:141
 AliTrackDiHadronPID.h:142
 AliTrackDiHadronPID.h:143
 AliTrackDiHadronPID.h:144
 AliTrackDiHadronPID.h:145
 AliTrackDiHadronPID.h:146
 AliTrackDiHadronPID.h:147
 AliTrackDiHadronPID.h:148
 AliTrackDiHadronPID.h:149
 AliTrackDiHadronPID.h:150
 AliTrackDiHadronPID.h:151
 AliTrackDiHadronPID.h:152
 AliTrackDiHadronPID.h:153
 AliTrackDiHadronPID.h:154
 AliTrackDiHadronPID.h:155
 AliTrackDiHadronPID.h:156
 AliTrackDiHadronPID.h:157
 AliTrackDiHadronPID.h:158
 AliTrackDiHadronPID.h:159
 AliTrackDiHadronPID.h:160
 AliTrackDiHadronPID.h:161
 AliTrackDiHadronPID.h:162
 AliTrackDiHadronPID.h:163
 AliTrackDiHadronPID.h:164
 AliTrackDiHadronPID.h:165
 AliTrackDiHadronPID.h:166
 AliTrackDiHadronPID.h:167
 AliTrackDiHadronPID.h:168
 AliTrackDiHadronPID.h:169
 AliTrackDiHadronPID.h:170
 AliTrackDiHadronPID.h:171
 AliTrackDiHadronPID.h:172
 AliTrackDiHadronPID.h:173
 AliTrackDiHadronPID.h:174
 AliTrackDiHadronPID.h:175
 AliTrackDiHadronPID.h:176
 AliTrackDiHadronPID.h:177
 AliTrackDiHadronPID.h:178
 AliTrackDiHadronPID.h:179
 AliTrackDiHadronPID.h:180
 AliTrackDiHadronPID.h:181
 AliTrackDiHadronPID.h:182
 AliTrackDiHadronPID.h:183
 AliTrackDiHadronPID.h:184
 AliTrackDiHadronPID.h:185
 AliTrackDiHadronPID.h:186
 AliTrackDiHadronPID.h:187
 AliTrackDiHadronPID.h:188
 AliTrackDiHadronPID.h:189
 AliTrackDiHadronPID.h:190
 AliTrackDiHadronPID.h:191
 AliTrackDiHadronPID.h:192
 AliTrackDiHadronPID.h:193
 AliTrackDiHadronPID.h:194
 AliTrackDiHadronPID.h:195
 AliTrackDiHadronPID.h:196
 AliTrackDiHadronPID.h:197
 AliTrackDiHadronPID.h:198
 AliTrackDiHadronPID.h:199
 AliTrackDiHadronPID.h:200
 AliTrackDiHadronPID.h:201
 AliTrackDiHadronPID.h:202
 AliTrackDiHadronPID.h:203
 AliTrackDiHadronPID.h:204
 AliTrackDiHadronPID.h:205
 AliTrackDiHadronPID.h:206
 AliTrackDiHadronPID.h:207
 AliTrackDiHadronPID.h:208
 AliTrackDiHadronPID.h:209
 AliTrackDiHadronPID.h:210
 AliTrackDiHadronPID.h:211
 AliTrackDiHadronPID.h:212
 AliTrackDiHadronPID.h:213
 AliTrackDiHadronPID.h:214
 AliTrackDiHadronPID.h:215
 AliTrackDiHadronPID.h:216
 AliTrackDiHadronPID.h:217
 AliTrackDiHadronPID.h:218