ROOT logo
#ifndef ALICALOCLUSTERINFO_H
#define ALICALOCLUSTERINFO_H

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

//***********************************************************
// Class AliCaloClusterInfo
// class used to extract and store reco info of calo cluster
// Author: H-S. Zhu, hongsheng.zhu@cern.ch
//                   hszhu@iopp.ccnu.edu.cn
//***********************************************************

#include <TObject.h>
#include <TString.h>
#include <TArrayI.h>
#include <TLorentzVector.h>
#include <TParticle.h>

class AliStack;
class AliESDEvent;
class AliVCluster;

class AliCaloClusterInfo : public TObject{
 public:
 
  AliCaloClusterInfo();
  AliCaloClusterInfo(AliVCluster* const clust, Int_t relID[4]);
  AliCaloClusterInfo(const AliCaloClusterInfo &src);
  AliCaloClusterInfo& operator=(const AliCaloClusterInfo &src);
  virtual ~AliCaloClusterInfo();

  TLorentzVector LorentzVector() const { return fLorentzVector; }

  Int_t    GetModule()          const { return fModule;          }
  Int_t    GetTRUNumber()       const { return fTRUNumber;       }
  Int_t    GetNCells()          const { return fNCells;          }
  TArrayI* GetLabelsArray()     const { return fLabels;          }
  Int_t    GetLabel()           const { if (fLabels && fLabels->GetSize() >0)        return fLabels->At(0);     else return -1;   }
  Int_t    GetLabelAt(UInt_t i) const { if (fLabels && i<(UInt_t)fLabels->GetSize()) return fLabels->At(i);     else return -999; }
  UInt_t   GetNLabels()         const { if (fLabels)                                 return fLabels->GetSize(); else return (0);  }

  UInt_t   GetPIDBit()          const { return fPIDBit;          }
  Double_t GetDistToBad()       const { return fDistToBad;       }
  Double_t GetM02()             const { return fM02;             }
  Double_t GetM20()             const { return fM20;             }
  Double_t GetTOF()             const { return fTOF;             }

  void SetLorentzVector(TLorentzVector momentum) { fLorentzVector = momentum; }
  void SetLabels(UInt_t size, Int_t* labels)     { if (fLabels) delete fLabels; fLabels = new TArrayI(size, labels); }

  Bool_t IsInFiducialRegion(Int_t cellX, Int_t cellZ);
  Bool_t IsMergedClusterFromPi0(AliStack* const stack, Int_t &pi0Indx);
  Bool_t IsClusterFromCvtedPi0(AliStack* const stack, Bool_t &isConverted, Int_t &pi0Indx);

 private:

  void FillCaloClusterInfo(AliVCluster* const clust, Int_t relID[4]);
  void SetPIDBit(UInt_t bit)   { fPIDBit |= bit; }
  Double_t TestDisp();

  Bool_t IsClusterFromPi0(AliStack* const stack, Int_t label, Int_t &pi0Indx);
  Bool_t IsClusterFromPi0Pure(AliStack* const stack, Int_t label, Int_t &pi0Indx);
  Bool_t IsClusterFromPi0Converted(AliStack* const stack, Int_t label, Int_t &pi0Indx);
  Int_t  GetTRUNumber(Int_t cellX, Int_t cellZ);

  TLorentzVector fLorentzVector;

  Int_t    fModule;
  Int_t    fTRUNumber;          // TRU Number
  Int_t    fNCells;             // Number of cells in cluster
  UInt_t   fPIDBit;             // PID Bit
  TArrayI* fLabels;             // list of primaries that generated the cluster, ordered in deposited energy
  Double_t fDistToBad;          // Distance to nearest bad channel
  Double_t fM02;                // lambda0
  Double_t fM20;                // lambda1
  Double_t fTOF;

  ClassDef(AliCaloClusterInfo, 3);
};

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