+ void FindMatches(AliVEvent *event, TObjArray * clusterArr=0x0, const AliEMCALGeometry *geom=0x0);
+ Int_t FindMatchedClusterInEvent(const AliESDtrack *track, const AliVEvent *event,
+ const AliEMCALGeometry *geom, Float_t &dEta, Float_t &dPhi);
+ Int_t FindMatchedClusterInClusterArr(const AliExternalTrackParam *emcalParam,
+ AliExternalTrackParam *trkParam,
+ const TObjArray * clusterArr,
+ Float_t &dEta, Float_t &dPhi);
+
+ static Bool_t ExtrapolateTrackToEMCalSurface(AliExternalTrackParam *trkParam,
+ const Double_t emcalR, const Double_t mass, const Double_t step,
+ Float_t &eta, Float_t &phi, Float_t &pt);
+ static Bool_t ExtrapolateTrackToPosition(AliExternalTrackParam *trkParam, const Float_t *clsPos,
+ const Double_t mass, const Double_t step,
+ Float_t &tmpEta, Float_t &tmpPhi);
+ static Bool_t ExtrapolateTrackToCluster (AliExternalTrackParam *trkParam, const AliVCluster *cluster,
+ const Double_t mass, const Double_t step,
+ Float_t &tmpEta, Float_t &tmpPhi);
+ Bool_t ExtrapolateTrackToCluster (AliExternalTrackParam *trkParam, const AliVCluster *cluster,
+ Float_t &tmpEta, Float_t &tmpPhi);
+
+ UInt_t FindMatchedPosForCluster(const Int_t clsIndex) const;
+ UInt_t FindMatchedPosForTrack (const Int_t trkIndex) const;
+
+ void GetMatchedResiduals (const Int_t clsIndex, Float_t &dEta, Float_t &dPhi);
+ void GetMatchedClusterResiduals(const Int_t trkIndex, Float_t &dEta, Float_t &dPhi);
+ Int_t GetMatchedTrackIndex(Int_t clsIndex);
+ Int_t GetMatchedClusterIndex(Int_t trkIndex);
+
+ Bool_t IsClusterMatched(const Int_t clsIndex) const;
+ Bool_t IsTrackMatched (const Int_t trkIndex) const;
+
+ void SetClusterMatchedToTrack (const AliVEvent *event);
+ void SetTracksMatchedToCluster(const AliVEvent *event);
+
+ void SwitchOnCutEtaPhiSum() { fCutEtaPhiSum = kTRUE ;
+ fCutEtaPhiSeparate = kFALSE ; }
+ void SwitchOnCutEtaPhiSeparate() { fCutEtaPhiSeparate = kTRUE ;
+ fCutEtaPhiSum = kFALSE ; }
+
+ Float_t GetCutR() const { return fCutR ; }
+ Float_t GetCutEta() const { return fCutEta ; }
+ Float_t GetCutPhi() const { return fCutPhi ; }
+ Double_t GetClusterWindow() const { return fClusterWindow ; }
+ void SetCutR(Float_t cutR) { fCutR = cutR ; }
+ void SetCutEta(Float_t cutEta) { fCutEta = cutEta ; }
+ void SetCutPhi(Float_t cutPhi) { fCutPhi = cutPhi ; }
+ void SetClusterWindow(Double_t window) { fClusterWindow = window ; }
+ void SetCutZ(Float_t cutZ) { printf("Obsolete fucntion of cutZ=%1.1f\n",cutZ) ; } //Obsolete
+ void SetEMCalSurfaceDistance(Double_t d) { fEMCalSurfaceDistance = d ; }
+
+ Double_t GetMass() const { return fMass ; }
+ Double_t GetStep() const { return fStepCluster ; }
+ Double_t GetStepSurface() const { return fStepSurface ; }
+ void SetMass(Double_t mass) { fMass = mass ; }
+ void SetStep(Double_t step) { fStepSurface = step ; }
+ void SetStepCluster(Double_t step) { fStepCluster = step ; }
+
+ void SetITSTrackSA(Bool_t isITS) { fITSTrackSA = isITS ; } //Special Handle of AliExternTrackParam
+
+ // Exotic cells / clusters
+
+ Bool_t IsExoticCell(const Int_t absId, AliVCaloCells* cells, const Int_t bc =-1) ;
+ void SwitchOnRejectExoticCell() { fRejectExoticCells = kTRUE ; }
+ void SwitchOffRejectExoticCell() { fRejectExoticCells = kFALSE ; }
+ Bool_t IsRejectExoticCell() const { return fRejectExoticCells ; }
+
+ Float_t GetECross(const Int_t absID, const Double_t tcell,
+ AliVCaloCells* cells, const Int_t bc);
+
+ Float_t GetExoticCellFractionCut() const { return fExoticCellFraction ; }
+ Float_t GetExoticCellDiffTimeCut() const { return fExoticCellDiffTime ; }
+ Float_t GetExoticCellMinAmplitudeCut() const { return fExoticCellMinAmplitude ; }
+
+ void SetExoticCellFractionCut(Float_t f) { fExoticCellFraction = f ; }
+ void SetExoticCellDiffTimeCut(Float_t dt) { fExoticCellDiffTime = dt ; }
+ void SetExoticCellMinAmplitudeCut(Float_t ma) { fExoticCellMinAmplitude = ma ; }
+
+ Bool_t IsExoticCluster(const AliVCluster *cluster, AliVCaloCells* cells, const Int_t bc=0) ;
+ void SwitchOnRejectExoticCluster() { fRejectExoticCluster = kTRUE ;
+ fRejectExoticCells = kTRUE ; }
+ void SwitchOffRejectExoticCluster() { fRejectExoticCluster = kFALSE ; }
+ Bool_t IsRejectExoticCluster() const { return fRejectExoticCluster ; }
+
+ //Cluster cut
+ Bool_t IsGoodCluster(AliVCluster *cluster, const AliEMCALGeometry *geom,
+ AliVCaloCells* cells, const Int_t bc =-1);