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

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD cluster base class
//     Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------

#include <AliVCluster.h>

class AliAODCluster : public AliVCluster {

 public:
  
  AliAODCluster();
  AliAODCluster(Int_t id,
		UInt_t nLabel,
		Int_t *label,
		Double_t energy,
		Double_t x[3],
		Double_t pid[13],
		Char_t ttype=kUndef,
		UInt_t selectInfo=0);

   AliAODCluster(Int_t id,
		 UInt_t nLabel,
		 Int_t *label,
		 Float_t energy,
		 Float_t x[3],
		 Float_t pid[13],
		 Char_t ttype=kUndef,
		 UInt_t selectInfo=0);
   
  virtual ~AliAODCluster();
  AliAODCluster(const AliAODCluster& clus); 
  AliAODCluster& operator=(const AliAODCluster& clus);
  void Clear(const Option_t*);
  
  Double_t Chi2() const { return fChi2; }
  
  Double_t E() const { return fEnergy; }
  
  // PID
  
  UShort_t  GetMostProbablePID() const;
  const Double_t *GetPID() const { return fPID; }//{ for(Int_t i=0; i<13; ++i) pid[i]=fPID[i]; }
  Int_t     GetID()  const { return fID; }
  Int_t     GetLabel() const   {
    if( fLabel &&  fNLabel > 0)  return  fLabel[0]; 
    else return -1;} //Most likely the track associated to the cluster
  Int_t  GetLabelAt(UInt_t i) const;
  Int_t  * GetLabels() const {return fLabel ; }
  UInt_t GetNLabels() const { return (UInt_t)fNLabel; }
  Bool_t TestFilterBit(UInt_t filterBit) const { return (Bool_t) ((filterBit & fFilterMap) != 0); }
  Char_t GetType() const { return fType; }
  
  void GetPosition(Float_t *x) const {
    x[0]=fPosition[0]; x[1]=fPosition[1]; x[2]=fPosition[2];}
  
  Bool_t IsEMCAL() const {if(fType == kEMCALClusterv1) return kTRUE;
    else return kFALSE;}
  Bool_t IsPHOS() const {if(fType == kPHOSCharged || fType == kPHOSNeutral) return kTRUE;
    else return kFALSE;}
  
  // print
  void  Print(const Option_t *opt = "") const;
  
  // setters
  void SetE(Double32_t energy) {fEnergy = energy ; }
  void SetID(Int_t id) { fID = id; }
  void SetType(Char_t ttype) { fType=ttype; }
  void SetLabel(Int_t *label, UInt_t size);  
  void SetChi2(Double_t chi2) { fChi2 = chi2; }
  
  void SetPosition(Float_t *x);
  void SetPositionAt(Float_t x,Int_t i) { if(i>=0 && i<3) fPosition[i] = x ; 
    else printf("Bad index for position array, i = %d\n",i);}
  
  void SetPIDAt(Float_t x,Int_t i) { if(i>=0 && i<13) fPID[i] = x ; 
    else printf("Bad index for PID array, i = %d\n",i);}
  void SetPID(const Float_t *pid) {
    if(pid) for(Int_t i=0; i<13; ++i) fPID[i]=pid[i];
    else {for(Int_t i=0; i<13; fPID[i++]=0) ;} fPID[AliAODCluster::kUnknown]=1.;}
  template <class T> void SetPIDFromESD(const T *pid) {
    if(pid) {for(Int_t i=0; i<11; ++i) fPID[i]=pid[i];  fPID[11]=0;   fPID[12]=0;}
    else {for(Int_t i=0; i<13; fPID[i++]=0) ;} fPID[AliAODCluster::kUnknown]=1.;}
  
  void RemoveLabel();

  Double_t    GetMCEnergyFraction() const           { return fMCEnergyFraction ; }
  void        SetMCEnergyFraction(Double_t e)       { fMCEnergyFraction = e    ; }
  
 private :
  
  // Energy & position
  Double32_t    fEnergy;         // energy
  Double32_t    fPosition[3];    // position of the cluster
  
  Double32_t    fChi2;           // chi2 (probably not necessary for PMD)
  Double32_t    fPID[13];         // [0.,1.,8] pointer to PID object
  
  Int_t         fID;             // unique cluster ID, points back to the ESD cluster
  Int_t         fNLabel;         // number of original track for this cluster      
  Int_t        *fLabel;          // [fNLabel] particle label, points back to MC tracks
  UInt_t        fFilterMap;      // filter information, one bit per set of cuts
  
  Char_t        fType;           // cluster type

  Double_t      fMCEnergyFraction;     //!MC energy (embedding)
  
  ClassDef(AliAODCluster,6);
};

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