ROOT logo
#ifndef ALITRDONLINETRACKMATCHING_H
#define ALITRDONLINETRACKMATCHING_H

//
// Track matching between TRD online tracks and ESD tracks.
// Author: Felix Rettig <rettig@compeng.uni-frankfurt.de>

#include "TObject.h"
class TH1;
class AliESDEvent;
class AliExternalTrackParam;
class AliTRDgeometry;
class AliESDtrack;
class AliESDTrdTrack;

//#define TRD_TM_DEBUG

class AliTRDonlineTrackMatching : public TObject {
 public:
  AliTRDonlineTrackMatching();
  ~AliTRDonlineTrackMatching();

  inline static Short_t TrdLsiSec(Short_t lsi) { return (lsi < 0) ? -1 : (lsi/5); }           // convert linear stack index 0-89 to TRD sector 0-17
  inline static Short_t TrdLsiSi(Short_t lsi) { return (lsi < 0) ? -1 : (lsi%5); }            // convert stack index 0-89 to local stack index 0-4
  inline static Short_t TrdDetLsi(Short_t det) { return det/6; }                              // convert TRD detector/chamber 0-539 index to linear stack index 0-89
  inline static Short_t TrdDetSi(Short_t det) { return (det%30)/6; }                          // convert detector (=chamber) number 0-539 to local stack index 0-4
  inline static Short_t TrdDetLyr(Short_t det) { return det%6; }                              // convert detector (=chamber) number 0-539 to local layer 0-5
  inline static Short_t TrdSecSiLsi(Short_t sec, Short_t si) { return 5*sec + si; }          // convert sector (0-17) and local stack index (0-4) to linear stack index 0-89

  static Short_t EstimateSector(const Double_t globalCoords[3]);
  static Short_t EstimateLayer(Double_t radius);
  static Short_t EstimateLocalStack(const Double_t globalCoords[3]);
  static Short_t EstimateStack(const Double_t globalCoords[3]);

  static Bool_t StackToTrack(const AliExternalTrackParam* track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss);
  static Bool_t StackToTrack(const AliESDtrack* track, Short_t &stack, UShort_t &layersWithTracklet, Double_t magFieldinKiloGauss);

  static Bool_t TrackPlaneIntersect(AliExternalTrackParam *trk, Double_t pnt[3], Double_t norm[3], Double_t mag);
  Int_t EstimateTrackDistance(AliESDtrack *esd_track, AliESDTrdTrack* gtu_track, Double_t mag, Double_t *ydist, Double_t *zdist);
  static Double_t RateTrackMatch(Double_t distY, Double_t distZ, Double_t rpt, Double_t gpt);

  static void SetEsdTrackCutMinTPCrows(Double_t setting) { fEsdTrackCutMinTPCrows = setting; };
  static void SetEsdTrackCutMinRatioRowsFindableClusters(Double_t setting) { fEsdTrackCutMinRatioRowsFindableClusters = setting; };
  static void SetEsdTrackCutMaxChi2TPCclusters(Float_t setting) { fEsdTrackCutMaxChi2TPCclusters = setting; };
  static void SetEsdTrackCutMaxChi2ITSclusters(Float_t setting) { fEsdTrackCutMaxChi2ITSclusters = setting; };
  static void SetEsdTrackCutMaxDCAtoVertexXY(Float_t setting) { fEsdTrackCutMaxDCAtoVertexXY = setting; };
  static void SetEsdTrackCutMaxDCAtoVertexZ( Float_t setting) { fEsdTrackCutMaxDCAtoVertexZ = setting; };
  static void SetEsdTrackCutITSlayerMask(UShort_t setting) { fEsdTrackCutsITSlayerMask = setting; };
  static void SetEsdTrackCutsChi2TPCconstrainedVsGlobal(Float_t setting) { fEsdTrackVCutsChi2TPCconstrainedVsGlobal = setting; };
  static void SetEsdTrackCutMinimal(Bool_t setting) { fEsdTrackCutMinimal = setting; };
  static void SetEsdTrackCutRequireITSrefit(Bool_t setting) { fEsdTrackCutRequireITSrefit = setting; };
  static void SetEsdTrackCutRequireTPCrefit(Bool_t setting) { fEsdTrackCutRequireTPCrefit = setting; };
  static void SetEsdTrackCutPrim(Bool_t setting) { fEsdTrackCutPrim = setting; };

  static void SetEsdTrackDefaultCuts(const char* cutIdent = "minimal");

  void SetMinMatchRating(Float_t setting) { fMinMatchRating = setting; };
  void SetHistMatchRating(TH1* hist) { fHistMatchRating = hist; };

  static Bool_t AcceptTrack(const AliESDtrack* esdTrack, const AliESDEvent* esdEvent);
  Bool_t ProcessEvent(AliESDEvent *esdEvent, Bool_t updateRef = kTRUE, Int_t label = -1);

 protected:

  inline static Double_t PtDiffRel(Double_t refPt, Double_t gtuPt);

  static const unsigned int fgkMaxEsdTracksPerStack = 20000; // max no. of tracks per stack
  static const unsigned int fgkTrdStacks = 90;		     // no. of TRD stacks (0-89)
  static const Float_t     fgkSaveInnerRadius;		     // inner radius for extrapolation
  static const Float_t     fgkSaveOuterRadius;		     // outer radius for extrapolation

  static Float_t fEsdTrackCutMinTPCrows;                   // track cut
  static Float_t fEsdTrackCutMinRatioRowsFindableClusters; // track cut
  static Float_t fEsdTrackCutMaxChi2TPCclusters;	   // track cut
  static Float_t fEsdTrackCutMaxChi2ITSclusters;	   // track cut
  static Float_t fEsdTrackCutMaxDCAtoVertexXY;		   // track cut
  static Float_t fEsdTrackCutMaxDCAtoVertexZ;		   // track cut
  static UShort_t fEsdTrackCutsITSlayerMask;		   // track cut
  static Float_t fEsdTrackVCutsChi2TPCconstrainedVsGlobal; // track cut
  static Float_t fEsdTrackCutPtDCAOfs;			   // track cut
  static Float_t fEsdTrackCutPtDCACoeff;		   // track cut
  static Bool_t fEsdTrackCutMinimal;                       // activate/deactive minimal track cuts
  static Bool_t fEsdTrackCutRequireITSrefit;		   // track cut
  static Bool_t fEsdTrackCutRequireTPCrefit;		   // track cut
  static Bool_t fEsdTrackCutPrim;			   // select primaries or keep secondaries for matching

  AliTRDgeometry* fTRDgeo;           //! TRD geometry instance
  Float_t fMinMatchRating;	     //! min rating to accept pair of matched tracks
  TH1* fHistMatchRating;	     //! optional histogram for match rating for all TRD tracks

  AliTRDonlineTrackMatching(const AliTRDonlineTrackMatching &c);
  AliTRDonlineTrackMatching& operator=(const AliTRDonlineTrackMatching& rhs);

  ClassDef(AliTRDonlineTrackMatching, 0);
};

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