ROOT logo
#ifndef ALIESDTRDTRACK_H
#define ALIESDTRDTRACK_H

//
// ESD format for the TRD tracks calculated in the
// Global Tracking Unit, used for the TRD L1 trigger
// Author: Jochen Klein <jochen.klein@cern.ch>

#include "TRef.h"

#include "AliVTrdTrack.h"
#include "AliESDTrdTracklet.h"
#include "AliESDtrack.h"

class AliESDTrdTrack : public AliVTrdTrack {

 public:

  AliESDTrdTrack();
  virtual ~AliESDTrdTrack() {};
  AliESDTrdTrack(const AliESDTrdTrack& track);
  AliESDTrdTrack& operator=(const AliESDTrdTrack& track);
  virtual void Copy(TObject &obj) const;

  ULong64_t GetTrackWord(Int_t rev) const;
  ULong64_t GetExtendedTrackWord(Int_t rev) const;

  Int_t GetA()         const { return fA; }
  Int_t GetB()         const { return fB; }
  Int_t GetC()         const { return fC; }
  Int_t GetY()         const { return fY; }
  Int_t GetLayerMask() const { return fLayerMask; }
  Int_t GetPID()       const { return fPID; }
  Int_t GetPt()        const;
  Int_t GetStack()     const { return fStack; }
  Int_t GetSector()    const { return fSector; }
  UChar_t GetFlags()   const { return fFlags; }
  UChar_t GetFlagsTiming() const { return fFlagsTiming; }
  Bool_t GetTrackInTime() const { return (fFlagsTiming & 0x1); }
  Int_t GetLabel()     const { return fLabel; }
  Int_t GetTrackletIndex(const Int_t iLayer) const { return fTrackletIndex[iLayer]; }

  Double_t Pt()        const { return GetPt() / 128.; }
  Double_t Phi()       const { return 0.; };
  Double_t Eta()       const { return 0.; };

  Int_t GetNTracklets() const {
    Int_t count = 0;
    for (Int_t iLayer = 0; iLayer < 6; ++iLayer)
      count += (fLayerMask >> iLayer) & 1;
    return count;
  }
  AliESDTrdTracklet* GetTracklet(Int_t idx) const
    { return (GetLayerMask() & (1<<idx)) ? (AliESDTrdTracklet*) ((fTrackletRefs[idx]).GetObject()) : 0x0; }
  AliVTrack* GetTrackMatch() const { return (AliVTrack*) fTrackMatch.GetObject(); }

  void SetA(Int_t a)            { fA = a; }
  void SetB(Int_t b)            { fB = b; }
  void SetC(Int_t c)            { fC = c; }
  void SetY(Int_t y)            { fY = y; }
  void SetLayerMask(Int_t mask) { fLayerMask = mask; }
  void SetPID(Int_t pid)        { fPID = pid; }
  void SetLabel(Int_t label)    { fLabel = label; }
  void SetSector(Int_t sector)  { fSector = sector; }
  void SetStack(Int_t stack)    { fStack = stack; }
  void SetFlags(Int_t flags)    { fFlags = flags; }
  void SetFlagsTiming(Int_t flags) { fFlagsTiming = flags; }
  void SetReserved(Int_t res)   { fReserved = res; }
  void SetTrackletIndex(const Char_t idx, const Int_t layer) { fTrackletIndex[layer] = idx; }

  void AddTrackletReference(AliESDTrdTracklet* trkl, Int_t layer) { fTrackletRefs[layer] = trkl; }
  void SetTrackMatchReference(AliVTrack *trk) { fTrackMatch = trk; }

  Bool_t IsSortable() const  { return kTRUE; }
  Int_t Compare(const TObject* obj) const;

 protected:

  void AppendBits(ULong64_t &word, Int_t nBits, Int_t val) const { word = (word << nBits) | (val & ~(~0 << nBits)); }

  Int_t    fSector;			  // sector in which the track was found
  Char_t   fStack;			  // stack in which the track was found
					  // (unique because of stack-wise tracking)
  Int_t    fA;				  // transverse offset from nominal primary vertex
  Int_t    fB;				  // slope in transverse plane
  Short_t  fC;				  // slope in r-z plane
  Short_t  fY;				  // y position of the track
  UChar_t  fPID;			  // electron PID for this track
  Char_t   fLayerMask;			  // mask of contributing tracklets
  Char_t   fTrackletIndex[fgkNlayers];	  //[fgkNlayers] index to tracklets
  UShort_t fFlags;			  // flags (high-pt, electron, positron)
  UChar_t  fFlagsTiming;                  // timing flags (track in-time, ...)
  UChar_t  fReserved;			  // reserved for future use

  TRef fTrackletRefs[fgkNlayers];         // references to contributing tracklets

  TRef fTrackMatch;                       // reference to matched global track
					  // to reject TRD tracks from late conversions

  Int_t fLabel;				  // Track label

  ClassDef(AliESDTrdTrack,7)
};

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