#define ALIEMCALTRACKER_H
#include "AliTracker.h"
-
+#include <TMath.h>
+#include <TVector3.h>
class TList;
+class TTree;
class TObjArray;
-class AliESD;
+class AliESDEvent;
class AliESDCaloCluster;
class AliEMCALTrack;
class AliEMCALRecPoint;
+class AliEMCALGeometry;
class AliEMCALTracker : public AliTracker
{
virtual ~AliEMCALTracker() {Clear();}
virtual void Clear(Option_t *option="ALL");
- virtual Int_t Clusters2Tracks(AliESD*) {return -1;}
+ virtual Int_t Clusters2Tracks(AliESDEvent*) {return -1;}
+ void InitParameters();
virtual Int_t LoadClusters(TTree*);
- Int_t LoadClusters(AliESD* esd);
- Int_t LoadTracks(AliESD* esd);
- virtual Int_t PropagateBack(AliESD* esd);
- virtual Int_t RefitInward(AliESD*) {return -1;}
+ Int_t LoadClusters(AliESDEvent* esd);
+ Int_t LoadTracks(AliESDEvent* esd);
+ virtual Int_t PropagateBack(AliESDEvent* esd);
+ virtual Int_t RefitInward(AliESDEvent*) {return -1;}
virtual void UnloadClusters();
virtual AliCluster* GetCluster(Int_t) const {return NULL;};
+ TTree* SearchTrueMatches();
void SetCorrection(Double_t rho, Double_t x0) {fRho=rho;fX0=x0;}
void SetCutAlpha(Double_t min, Double_t max) {fCutAlphaMin=min;fCutAlphaMax=max;}
void SetCutAngle(Double_t value) {fCutAngle=value;}
void SetCutX(Double_t value) {fCutX=value;}
void SetCutY(Double_t value) {fCutY=value;}
void SetCutZ(Double_t value) {fCutZ=value;}
+ void SetGeometry(AliEMCALGeometry *geom) {fGeom=geom;}
void SetMaxDistance(Double_t value) {fMaxDist=value;}
+ void SetCutNITS(Double_t value) {fCutNITS=value;}
+ void SetCutNTPC(Double_t value) {fCutNTPC=value;}
void SetNumberOfSteps(Int_t n) {fNPropSteps=n;if(!n)SetTrackCorrectionMode("NONE");}
void SetTrackCorrectionMode(Option_t *option);
+ TVector3 FindExtrapolationPoint(Double_t x, Double_t y, Double_t z, AliESDtrack *track);
+
+ enum {
+ kUnmatched = -99999
+ };
class AliEMCALMatchCluster : public TObject
{
public:
- AliEMCALMatchCluster(Int_t ID, AliEMCALRecPoint *recPoint);
- AliEMCALMatchCluster(Int_t ID, AliESDCaloCluster *caloCluster);
- virtual ~AliEMCALMatchCluster() { }
- Int_t& Index() {return fIndex;}
- Int_t& Label() {return fLabel;}
- Double_t& X() {return fX;}
- Double_t& Y() {return fY;}
- Double_t& Z() {return fZ;}
+ AliEMCALMatchCluster(Int_t ID, AliEMCALRecPoint *recPoint);
+ AliEMCALMatchCluster(Int_t ID, AliESDCaloCluster *caloCluster);
+ virtual ~AliEMCALMatchCluster() { }
+ //----------------------------------------------------------------------------
+ Int_t Index() const {return fIndex;}
+ Int_t Label() const {return fLabel;}
+ Double_t X() const {return fX;}
+ Double_t Y() const {return fY;}
+ Double_t Z() const {return fZ;}
+ Double_t Phi() const {return TMath::ATan2(fY, fX);}
private:
Int_t fIndex; // index of cluster in its native container (ESD or TClonesArray)
Int_t fLabel; // track label of assigned cluster
class AliEMCALMatch : public TObject
{
public:
- AliEMCALMatch();
- AliEMCALMatch(const AliEMCALMatch& copy);
- ~AliEMCALMatch() { }
+ AliEMCALMatch();
+ AliEMCALMatch(const AliEMCALMatch& copy);
+ virtual ~AliEMCALMatch() { }
+ //----------------------------------------------------------------------------
Bool_t& CanBeSaved() {return fCanBeSaved;}
Int_t Compare(const TObject *obj) const;
- Double_t GetDistance() {return fDistance;}
- Int_t GetIndexC() {return fIndexC;}
- Int_t GetIndexT() {return fIndexT;}
+ Double_t GetDistance() const {return fDistance;}
+ Double_t GetPt() const {return fPt;}
+ Int_t GetIndexC() const {return fIndexC;}
+ Int_t GetIndexT() const {return fIndexT;}
Bool_t IsSortable() const {return kTRUE;}
void SetIndexC(Int_t icl) {fIndexC=icl;}
void SetIndexT(Int_t itr) {fIndexT=itr;}
void SetDistance(Double_t dist) {fDistance=dist;}
+ void SetPt(Double_t pt) {fPt=pt;}
private:
Bool_t fCanBeSaved; // when true, this match can be saved, otherwise it will not be
Int_t fIndexC; // cluster index in 'fClusters' array
Int_t fIndexT; // track index in 'fTracks' array
Double_t fDistance; // track - cluster distance
+ Double_t fPt; // track pt
};
private:
Double_t AngleDiff(Double_t angle1, Double_t angle2);
Double_t CheckPair(AliEMCALTrack *tr, AliEMCALMatchCluster *cluster);
Double_t CheckPairV2(AliEMCALTrack *tr, AliEMCALMatchCluster *cluster);
+ Double_t CheckPairV3(AliEMCALTrack *tr, AliEMCALMatchCluster *cluster);
Int_t CreateMatches();
+ Bool_t PropagateToEMCAL(AliEMCALTrack *tr);
Int_t SolveCompetitions();
enum ETrackCorr {
Double_t fCutAlphaMax; // cut on difference between track 'alpha' and phi
Double_t fCutAngle; // cut on angle between track projection and cluster
Double_t fMaxDist; // maximum allowed total distance between track proj an cluster
-
+ Double_t fCutNITS; // mimimum number of track hits in the ITS
+ Double_t fCutNTPC; // mimimum number of track hits in the TPC
+
Double_t fRho; // energy correction: density
Double_t fX0; // energy correction: radiation length
- TObjArray *fTracks; //! collection of ESD tracks
+ TObjArray *fTracks; //! collection of tracks
TObjArray *fClusters; //! collection of EMCAL clusters (ESDCaloCluster or EMCALRecPoint)
TList *fMatches; //! collection of matches between tracks and clusters
- ClassDef(AliEMCALTracker, 1) // EMCAL "tracker"
+ AliEMCALGeometry *fGeom; //! EMCAL geometry
+
+ ClassDef(AliEMCALTracker, 3) // EMCAL "tracker"
};
#endif