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

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD calorimeter cluster class (for PHOS and EMCAL)
//     Author: Markus Oldenburg, CERN, 
//             Gustavo Conesa, INFN
//-------------------------------------------------------------------------

#include "AliAODCluster.h"

#include <TRefArray.h>
#include <TArrayS.h>

class TLorentzVector;

class AliAODCaloCluster : public AliAODCluster {

 public:
  
  AliAODCaloCluster();
  AliAODCaloCluster(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);
  
  AliAODCaloCluster(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 ~AliAODCaloCluster();
  AliAODCaloCluster(const AliAODCaloCluster& clus); 
  AliAODCaloCluster& operator=(const AliAODCaloCluster& clus);
  void Clear(const Option_t*);
  
  // getters
  Double_t GetDistanceToBadChannel() const { return fDistToBadChannel; }
  Double_t GetDispersion() const { return fDispersion; }
  Double_t GetM20() const { return fM20; }
  Double_t GetM02() const { return fM02; }
  Double_t GetEmcCpvDistance() const { return fEmcCpvDistance; }
  Double_t GetTrackDx(void)const {return fTrackDx;}
  Double_t GetTrackDz(void)const {return fTrackDz;}
  UChar_t  GetNExMax() const { return fNExMax; }
  Double_t GetTOF() const { return fTOF; }
  Double_t GetCoreEnergy() const           {return fCoreEnergy ; }
 
 

  Int_t    GetNTracksMatched() const { return fTracksMatched.GetEntriesFast(); }
  TObject *GetTrackMatched(Int_t i) const { return fTracksMatched.At(i); }
 
  void  SetNCells(Int_t n) { fNCells = n;}
  Int_t GetNCells() const   { return fNCells;}
  
  void SetCellsAbsId(UShort_t *array);
  UShort_t *GetCellsAbsId() {return  fCellsAbsId;}
  
  void SetCellsAmplitudeFraction(Double32_t *array);
  Double32_t *GetCellsAmplitudeFraction() {return  fCellsAmpFraction;}
  
  Int_t GetCellAbsId(Int_t i) const {  
    if (fCellsAbsId && i >=0 && i < fNCells ) return fCellsAbsId[i];    
    else return -1;}
  
  Double_t GetCellAmplitudeFraction(Int_t i) const {  
    if (fCellsAmpFraction && i >=0 && i < fNCells ) return fCellsAmpFraction[i];    
    else return -1;}
	
  
  // setters
  void SetDistanceToBadChannel(Double_t dist) { fDistToBadChannel = dist; }
  void SetDispersion(Double_t disp) { fDispersion = disp; }
  void SetM20(Double_t m20) { fM20 = m20; }
  void SetM02(Double_t m02) { fM02 = m02; }
  void SetEmcCpvDistance(Double_t emcCpvDist) { fEmcCpvDistance = emcCpvDist; }
  void SetNExMax(UChar_t nExMax) { fNExMax = nExMax; }
  void SetTOF(Double_t tof) { fTOF = tof; }
  void SetTrackDistance(Double_t dx, Double_t dz){fTrackDx=dx; fTrackDz=dz;}
  void SetCoreEnergy(Double_t e)         { fCoreEnergy=e; }

  void SetCaloCluster(Double_t dist = -999., 
		      Double_t disp = -1., 
		      Double_t m20 = 0., 
		      Double_t m02 = 0., 
		      Double_t emcCpvDist = -999., 
		      UShort_t nExMax = 0, 
		      Double_t tof = 0.) 
  {
    fDistToBadChannel = dist;
    fDispersion = disp;
    fM20 = m20;
    fM02 = m02;
    fEmcCpvDistance = emcCpvDist;
    fNExMax = nExMax;
    fTOF = tof ;
  }
  
  void GetMomentum(TLorentzVector& p, Double_t * vertexPosition ) const;

  void AddTrackMatched(TObject *trk) { 
    //Make sure we attach the object to correct process number
    if(fTracksMatched.GetEntries()==0) { TRefArray ref(TProcessID::GetProcessWithUID(trk)) ; fTracksMatched = ref ; }
    fTracksMatched.Add(trk) ; }
  
  void RemoveTrackMatched(TObject *trk) { fTracksMatched.Remove(trk); }
  Bool_t HasTrackMatched(TObject *trk) const;

 private :

  Double32_t   fDistToBadChannel; // Distance to nearest bad channel
  Double32_t   fDispersion;       // cluster dispersion, for shape analysis
  Double32_t   fM20;              // 2-nd moment along the main eigen axis
  Double32_t   fM02;              // 2-nd moment along the second eigen axis
  Double32_t   fEmcCpvDistance;   // the distance from PHOS EMC rec.point to the closest CPV rec.point
  Double32_t   fTrackDx ;         // Distance to closest track in phi
  Double32_t   fTrackDz ;         // Distance to closest track in z (eta)
  UShort_t     fNExMax;           // number of (Ex-)maxima before unfolding
  Double32_t   fTOF;              ////[0,0,12] time-of-flight
  Double32_t   fCoreEnergy;       // energy of the core of cluster

  TRefArray    fTracksMatched;    // references to tracks close to cluster. First entry is the most likely match.

  Int_t       fNCells ;
  UShort_t   *fCellsAbsId;        //[fNCells] array of cell absId numbers
  Double32_t *fCellsAmpFraction;  //[fNCells][0.,1.,16] array with cell amplitudes fraction.

  ClassDef(AliAODCaloCluster,8);
};

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