ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//
// 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 "TMath.h"

#include "AliESDTrdTrack.h"
#include "AliESDTrdTracklet.h"

ClassImp(AliESDTrdTrack)

//_____________________________________________________________________________
AliESDTrdTrack::AliESDTrdTrack():
  AliVTrdTrack(),
  fSector(-1),
  fStack(-1),
  fA(0),
  fB(0),
  fC(0),
  fY(0),
  fPID(0),
  fLayerMask(0),
  fFlags(0),
  fFlagsTiming(0),
  fReserved(0),
  fTrackMatch(),
  fLabel(-1)
{
  //
  // Default constructor
  for (int i=fgkNlayers;i--;) fTrackletIndex[i] = 0;
  //

}

AliESDTrdTrack::AliESDTrdTrack(const AliESDTrdTrack& track):
  AliVTrdTrack(track),
  fSector(track.fSector),
  fStack(track.fStack),
  fA(track.fA),
  fB(track.fB),
  fC(track.fC),
  fY(track.fY),
  fPID(track.fPID),
  fLayerMask(track.fLayerMask),
  fFlags(track.fFlags),
  fFlagsTiming(track.fFlagsTiming),
  fReserved(track.fReserved),
  fTrackMatch(track.fTrackMatch),
  fLabel(track.fLabel)
{
  //
  // Copy contructor
  //

  for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
    fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];

    if (track.fTrackletRefs[iLayer].GetObject())
      fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
  }
}

AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track)
{
  //
  // assignment operator
  //

  if (this == &track)
    return *this;
  AliVTrdTrack::operator=(track);
  fSector       = track.fSector;
  fStack        = track.fStack;
  fA            = track.fA;
  fB            = track.fB;
  fC            = track.fC;
  fPID          = track.fPID;
  fLayerMask    = track.fLayerMask;
  fFlags        = track.fFlags;
  fFlagsTiming  = track.fFlagsTiming;
  fReserved     = track.fReserved;
  fTrackMatch   = track.fTrackMatch;
  fLabel        = track.fLabel;
  for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
    fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
    fTrackletRefs[iLayer] = track.fTrackletRefs[iLayer];
  }

  return *this;
}

void AliESDTrdTrack::Copy(TObject& obj) const
{
  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliESDTrdTrack *robj = dynamic_cast<AliESDTrdTrack*>(&obj);
  if(!robj)return; // not an aliesdtrdtrack
  *robj = *this;
}

ULong64_t AliESDTrdTrack::GetTrackWord(Int_t /* rev */) const
{
  // return track word representation as in raw data
  // MSB always 1

  ULong64_t trackWord = 1;
  AppendBits(trackWord,   1, 0);
  AppendBits(trackWord,   6, fLayerMask);
  AppendBits(trackWord,  18, fA);
  AppendBits(trackWord,  18, fB);
  AppendBits(trackWord,  12, fC);
  AppendBits(trackWord,   8, fPID);
  return trackWord;
}

ULong64_t AliESDTrdTrack::GetExtendedTrackWord(Int_t /* rev */) const
{
  // return extended track word representation as in raw data
  // MSB always 0

  ULong64_t trackWord = 0;
  AppendBits(trackWord,  11, fFlags);
  AppendBits(trackWord,  1, fFlagsTiming);
  AppendBits(trackWord,  2, fReserved);
  AppendBits(trackWord, 13, fY);
  AppendBits(trackWord,  6, fTrackletIndex[5]);
  AppendBits(trackWord,  6, fTrackletIndex[4]);
  AppendBits(trackWord,  6, fTrackletIndex[3]);
  AppendBits(trackWord,  6, fTrackletIndex[2]);
  AppendBits(trackWord,  6, fTrackletIndex[1]);
  AppendBits(trackWord,  6, fTrackletIndex[0]);
  return trackWord;
}

Int_t AliESDTrdTrack::GetPt() const
{
  // calculate pt from a as done in hardware

  const Int_t maskIdLut[64] = {
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
    -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
    -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
    -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
  };

  const Int_t c1Lut[32] = {
    -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
    -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
    -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
  };

  if (this->GetA() != 0) {
    Int_t layerMaskId = maskIdLut[this->GetLayerMask()];
    Int_t c1 = c1Lut[layerMaskId];
    Int_t c1Ext = c1 << 8;
    Int_t ptRawStage4 = c1Ext / ((this->GetA() >> 2) != 0 ? (this->GetA() >> 2) : 1 );
    Int_t ptRawComb4 = ptRawStage4;
    Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;

    return -ptExtComb4/2;
  }
  else
    return 0;
}

Int_t AliESDTrdTrack::Compare(const TObject* obj) const
{
  if (this == obj)
    return 0;
  else if (TMath::Abs(Pt()) < TMath::Abs(((AliESDTrdTrack*)(obj))->Pt()))
    return 1;
  else
    return -1;
}
 AliESDTrdTrack.cxx:1
 AliESDTrdTrack.cxx:2
 AliESDTrdTrack.cxx:3
 AliESDTrdTrack.cxx:4
 AliESDTrdTrack.cxx:5
 AliESDTrdTrack.cxx:6
 AliESDTrdTrack.cxx:7
 AliESDTrdTrack.cxx:8
 AliESDTrdTrack.cxx:9
 AliESDTrdTrack.cxx:10
 AliESDTrdTrack.cxx:11
 AliESDTrdTrack.cxx:12
 AliESDTrdTrack.cxx:13
 AliESDTrdTrack.cxx:14
 AliESDTrdTrack.cxx:15
 AliESDTrdTrack.cxx:16
 AliESDTrdTrack.cxx:17
 AliESDTrdTrack.cxx:18
 AliESDTrdTrack.cxx:19
 AliESDTrdTrack.cxx:20
 AliESDTrdTrack.cxx:21
 AliESDTrdTrack.cxx:22
 AliESDTrdTrack.cxx:23
 AliESDTrdTrack.cxx:24
 AliESDTrdTrack.cxx:25
 AliESDTrdTrack.cxx:26
 AliESDTrdTrack.cxx:27
 AliESDTrdTrack.cxx:28
 AliESDTrdTrack.cxx:29
 AliESDTrdTrack.cxx:30
 AliESDTrdTrack.cxx:31
 AliESDTrdTrack.cxx:32
 AliESDTrdTrack.cxx:33
 AliESDTrdTrack.cxx:34
 AliESDTrdTrack.cxx:35
 AliESDTrdTrack.cxx:36
 AliESDTrdTrack.cxx:37
 AliESDTrdTrack.cxx:38
 AliESDTrdTrack.cxx:39
 AliESDTrdTrack.cxx:40
 AliESDTrdTrack.cxx:41
 AliESDTrdTrack.cxx:42
 AliESDTrdTrack.cxx:43
 AliESDTrdTrack.cxx:44
 AliESDTrdTrack.cxx:45
 AliESDTrdTrack.cxx:46
 AliESDTrdTrack.cxx:47
 AliESDTrdTrack.cxx:48
 AliESDTrdTrack.cxx:49
 AliESDTrdTrack.cxx:50
 AliESDTrdTrack.cxx:51
 AliESDTrdTrack.cxx:52
 AliESDTrdTrack.cxx:53
 AliESDTrdTrack.cxx:54
 AliESDTrdTrack.cxx:55
 AliESDTrdTrack.cxx:56
 AliESDTrdTrack.cxx:57
 AliESDTrdTrack.cxx:58
 AliESDTrdTrack.cxx:59
 AliESDTrdTrack.cxx:60
 AliESDTrdTrack.cxx:61
 AliESDTrdTrack.cxx:62
 AliESDTrdTrack.cxx:63
 AliESDTrdTrack.cxx:64
 AliESDTrdTrack.cxx:65
 AliESDTrdTrack.cxx:66
 AliESDTrdTrack.cxx:67
 AliESDTrdTrack.cxx:68
 AliESDTrdTrack.cxx:69
 AliESDTrdTrack.cxx:70
 AliESDTrdTrack.cxx:71
 AliESDTrdTrack.cxx:72
 AliESDTrdTrack.cxx:73
 AliESDTrdTrack.cxx:74
 AliESDTrdTrack.cxx:75
 AliESDTrdTrack.cxx:76
 AliESDTrdTrack.cxx:77
 AliESDTrdTrack.cxx:78
 AliESDTrdTrack.cxx:79
 AliESDTrdTrack.cxx:80
 AliESDTrdTrack.cxx:81
 AliESDTrdTrack.cxx:82
 AliESDTrdTrack.cxx:83
 AliESDTrdTrack.cxx:84
 AliESDTrdTrack.cxx:85
 AliESDTrdTrack.cxx:86
 AliESDTrdTrack.cxx:87
 AliESDTrdTrack.cxx:88
 AliESDTrdTrack.cxx:89
 AliESDTrdTrack.cxx:90
 AliESDTrdTrack.cxx:91
 AliESDTrdTrack.cxx:92
 AliESDTrdTrack.cxx:93
 AliESDTrdTrack.cxx:94
 AliESDTrdTrack.cxx:95
 AliESDTrdTrack.cxx:96
 AliESDTrdTrack.cxx:97
 AliESDTrdTrack.cxx:98
 AliESDTrdTrack.cxx:99
 AliESDTrdTrack.cxx:100
 AliESDTrdTrack.cxx:101
 AliESDTrdTrack.cxx:102
 AliESDTrdTrack.cxx:103
 AliESDTrdTrack.cxx:104
 AliESDTrdTrack.cxx:105
 AliESDTrdTrack.cxx:106
 AliESDTrdTrack.cxx:107
 AliESDTrdTrack.cxx:108
 AliESDTrdTrack.cxx:109
 AliESDTrdTrack.cxx:110
 AliESDTrdTrack.cxx:111
 AliESDTrdTrack.cxx:112
 AliESDTrdTrack.cxx:113
 AliESDTrdTrack.cxx:114
 AliESDTrdTrack.cxx:115
 AliESDTrdTrack.cxx:116
 AliESDTrdTrack.cxx:117
 AliESDTrdTrack.cxx:118
 AliESDTrdTrack.cxx:119
 AliESDTrdTrack.cxx:120
 AliESDTrdTrack.cxx:121
 AliESDTrdTrack.cxx:122
 AliESDTrdTrack.cxx:123
 AliESDTrdTrack.cxx:124
 AliESDTrdTrack.cxx:125
 AliESDTrdTrack.cxx:126
 AliESDTrdTrack.cxx:127
 AliESDTrdTrack.cxx:128
 AliESDTrdTrack.cxx:129
 AliESDTrdTrack.cxx:130
 AliESDTrdTrack.cxx:131
 AliESDTrdTrack.cxx:132
 AliESDTrdTrack.cxx:133
 AliESDTrdTrack.cxx:134
 AliESDTrdTrack.cxx:135
 AliESDTrdTrack.cxx:136
 AliESDTrdTrack.cxx:137
 AliESDTrdTrack.cxx:138
 AliESDTrdTrack.cxx:139
 AliESDTrdTrack.cxx:140
 AliESDTrdTrack.cxx:141
 AliESDTrdTrack.cxx:142
 AliESDTrdTrack.cxx:143
 AliESDTrdTrack.cxx:144
 AliESDTrdTrack.cxx:145
 AliESDTrdTrack.cxx:146
 AliESDTrdTrack.cxx:147
 AliESDTrdTrack.cxx:148
 AliESDTrdTrack.cxx:149
 AliESDTrdTrack.cxx:150
 AliESDTrdTrack.cxx:151
 AliESDTrdTrack.cxx:152
 AliESDTrdTrack.cxx:153
 AliESDTrdTrack.cxx:154
 AliESDTrdTrack.cxx:155
 AliESDTrdTrack.cxx:156
 AliESDTrdTrack.cxx:157
 AliESDTrdTrack.cxx:158
 AliESDTrdTrack.cxx:159
 AliESDTrdTrack.cxx:160
 AliESDTrdTrack.cxx:161
 AliESDTrdTrack.cxx:162
 AliESDTrdTrack.cxx:163
 AliESDTrdTrack.cxx:164
 AliESDTrdTrack.cxx:165
 AliESDTrdTrack.cxx:166
 AliESDTrdTrack.cxx:167
 AliESDTrdTrack.cxx:168
 AliESDTrdTrack.cxx:169
 AliESDTrdTrack.cxx:170
 AliESDTrdTrack.cxx:171
 AliESDTrdTrack.cxx:172
 AliESDTrdTrack.cxx:173
 AliESDTrdTrack.cxx:174
 AliESDTrdTrack.cxx:175
 AliESDTrdTrack.cxx:176
 AliESDTrdTrack.cxx:177
 AliESDTrdTrack.cxx:178
 AliESDTrdTrack.cxx:179
 AliESDTrdTrack.cxx:180
 AliESDTrdTrack.cxx:181
 AliESDTrdTrack.cxx:182
 AliESDTrdTrack.cxx:183
 AliESDTrdTrack.cxx:184
 AliESDTrdTrack.cxx:185
 AliESDTrdTrack.cxx:186
 AliESDTrdTrack.cxx:187
 AliESDTrdTrack.cxx:188
 AliESDTrdTrack.cxx:189
 AliESDTrdTrack.cxx:190
 AliESDTrdTrack.cxx:191
 AliESDTrdTrack.cxx:192
 AliESDTrdTrack.cxx:193
 AliESDTrdTrack.cxx:194
 AliESDTrdTrack.cxx:195
 AliESDTrdTrack.cxx:196
 AliESDTrdTrack.cxx:197
 AliESDTrdTrack.cxx:198
 AliESDTrdTrack.cxx:199