ROOT logo
#ifndef AliMFTCluster_H
#define AliMFTCluster_H 

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

//====================================================================================================================================================
//
//      Class for the description of the clusters of the ALICE Muon Forward Tracker
//
//      Contact author: antonio.uras@cern.ch
//
//====================================================================================================================================================

#include "AliMUONRawCluster.h"
#include "AliMUONVCluster.h"
#include "AliMFTDigit.h"
#include "TClonesArray.h"
#include "TObject.h"
#include "AliMFTConstants.h"

//====================================================================================================================================================

class AliMFTCluster : public TObject {

public:

  AliMFTCluster();
  AliMFTCluster(const AliMFTCluster&);
  AliMFTCluster& operator=(const AliMFTCluster&);
  virtual ~AliMFTCluster() { if(fDigitsInCluster){fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster=NULL;}}
  
  virtual void Clear(const Option_t* /*opt*/) { if(fDigitsInCluster) {fDigitsInCluster->Delete(); delete fDigitsInCluster; fDigitsInCluster = 0x0;} }
  
  void SetXYZ(Double_t x, Double_t y, Double_t z) { fX=x; fY=y; fZ=z; }
  
  void SetX(Double_t x) { if(fIsClusterEditable) fX = x; }
  void SetY(Double_t y) { if(fIsClusterEditable) fY = y; }
  void SetZ(Double_t z) { if(fIsClusterEditable) fZ = z; }

  Double_t GetX() const { return fX; }
  Double_t GetY() const { return fY; }
  Double_t GetZ() const { return fZ; }
  
  void SetErrXYZ(Double_t errX, Double_t errY, Double_t errZ) { if(fIsClusterEditable) { fErrX = errX; fErrY = errY; fErrZ = errZ; } }
       
  void SetErrX(Double_t errX) { if(fIsClusterEditable) fErrX = errX; }
  void SetErrY(Double_t errY) { if(fIsClusterEditable) fErrY = errY; }
  void SetErrZ(Double_t errZ) { if(fIsClusterEditable) fErrZ = errZ; }

  Double_t GetErrX()  const { return fErrX; }
  Double_t GetErrY()  const { return fErrY; }
  Double_t GetErrZ()  const { return fErrZ; }
  Double_t GetErrX2() const { return fErrX*fErrX; }
  Double_t GetErrY2() const { return fErrY*fErrY; }
  Double_t GetErrZ2() const { return fErrZ*fErrZ; }
  
  void     SetNElectrons(Double_t nElectrons) { if(fIsClusterEditable) fNElectrons = nElectrons; }
  Double_t GetNElectrons() const { return fNElectrons; }
  
  void  AddMCLabel(Int_t label);
  Int_t GetNMCTracks() const { return fNMCTracks; }
  Int_t GetMCLabel(Int_t track) const { if (track<fNMCTracks && track>=0) return fMCLabel[track]; else return -1; }
  void  SetMCLabel(Int_t track, Int_t labelMC) { if (track<fNMCTracks && track>=0) fMCLabel[track]=labelMC; }

  void  SetPlane(Int_t plane) { if(fIsClusterEditable) fPlane = plane; }
  Int_t GetPlane() const { return fPlane; }

  void SetDetElemID(Int_t detElemID) { fDetElemID = detElemID; }
  Int_t GetDetElemID() { return fDetElemID; }

  void  SetSize(Int_t size) { if(fIsClusterEditable) fSize = size; }
  Int_t GetSize() const { return fSize; }

  void SetLocalChi2(Double_t chi2) { fLocalChi2 = chi2; }
  void SetTrackChi2(Double_t chi2) { fTrackChi2 = chi2; }

  Double_t GetLocalChi2() { return fLocalChi2; }
  Double_t GetTrackChi2() { return fTrackChi2; }

  Bool_t AddPixel(AliMFTDigit *pixel);

  Bool_t IsClusterEditable() { return fIsClusterEditable; }
  void SetClusterEditable(Bool_t isClusterEditable) { fIsClusterEditable = isClusterEditable; }
  void TerminateCluster();

  Double_t GetDistanceFromPixel(AliMFTDigit *pixel);

  void SetClusterFront(Bool_t clusterFront) { if(fIsClusterEditable) fIsClusterFront = clusterFront; }
  Bool_t IsClusterFront() { return fIsClusterFront; }

  AliMUONRawCluster* CreateMUONCluster();
  
private:

  static const Int_t fNMaxMCTracks         = AliMFTConstants::fNMaxMCTracksPerCluster;
  static const Int_t fNMaxDigitsPerCluster = AliMFTConstants::fNMaxDigitsPerCluster;
  
  Double_t fX, fY, fZ;   // cluster global coordinates
  Double_t fErrX, fErrY, fErrZ;

  Double_t fNElectrons;
  Int_t fNMCTracks;
  Int_t fPlane, fDetElemID;
  Int_t fMCLabel[fNMaxMCTracks];

  Int_t fSize;   // the number of digits composing the cluster

  Double_t fTrackChi2; // Chi2 of the track when the associated cluster was attached
  Double_t fLocalChi2; // Local chi2 of the associated cluster with respect to the track
  
  TClonesArray *fDigitsInCluster;   //! (Temporary) Array of the digits composing the cluster

  Bool_t fIsClusterEditable, fIsClusterFront;

  ClassDef(AliMFTCluster, 1)

};

//====================================================================================================================================================
	
#endif

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