ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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.                  *
 **************************************************************************/

/* $Id$ */

//-------------------------------------------------------------------------
//     AOD class to store tracklets
//     Author: Jan Fiete Grosse-Oetringhaus, CERN
//     Class created from AliMultiplicity
//-------------------------------------------------------------------------

#include <TString.h>
#include "AliAODTracklets.h"

ClassImp(AliAODTracklets)

AliAODTracklets::AliAODTracklets() : AliVMultiplicity(), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
{
  // default constructor
}

AliAODTracklets::AliAODTracklets(const char* name, const char* title) : AliVMultiplicity(name, title), fNTracks(0), fTheta(0), fPhi(0), fDeltaPhi(0), fLabels(0), fLabelsL2(0)
{
  // Named constructor
}

AliAODTracklets::AliAODTracklets(const AliAODTracklets& tracklet) :
    AliVMultiplicity(tracklet),
    fNTracks(tracklet.fNTracks),
    fTheta(0),
    fPhi(0),
    fDeltaPhi(0),
    fLabels(0), 
    fLabelsL2(0)
{
// Copy constructor
    fTheta = new Double32_t[fNTracks];
    fPhi = new Double32_t[fNTracks];
    fDeltaPhi = new Double32_t[fNTracks];
    fLabels = new Int_t[fNTracks];
    fLabelsL2 = new Int_t[fNTracks];
    for (Int_t i = 0; i < fNTracks; i++) {
	fTheta[i]    = tracklet.fTheta[i];
	fPhi[i]      = tracklet.fPhi[i];
	fDeltaPhi[i] = tracklet.fDeltaPhi[i];
	fLabels[i]   = tracklet.fLabels[i];
	fLabelsL2[i]   = tracklet.fLabelsL2[i];
    }
}

AliAODTracklets& AliAODTracklets::operator=(const AliAODTracklets& tracklet)
{
// Assignment operator
    if(&tracklet == this) return *this;
    AliVMultiplicity::operator=(tracklet);
    if(fNTracks!=tracklet.fNTracks){
      fNTracks = tracklet.fNTracks;
      CreateContainer(fNTracks);
    }
    for (Int_t i = 0; i < fNTracks; i++) {
	fTheta[i]    = tracklet.fTheta[i];
	fPhi[i]      = tracklet.fPhi[i];
	fDeltaPhi[i] = tracklet.fDeltaPhi[i];
	fLabels[i]   = tracklet.fLabels[i];
	fLabelsL2[i]   = tracklet.fLabelsL2[i];
    }
    return *this;
}

void AliAODTracklets::CreateContainer(Int_t nTracks)
{
  // function that creates container to store tracklets

  DeleteContainer();
  
  fNTracks = nTracks;

  if (fNTracks <= 0) {
    fNTracks = 0;
    return;
  }

  fTheta = new Double32_t[fNTracks];
  fPhi = new Double32_t[fNTracks];
  fDeltaPhi = new Double32_t[fNTracks];
  fLabels = new Int_t[fNTracks];
  fLabelsL2 = new Int_t[fNTracks];
}


AliAODTracklets::~AliAODTracklets()
{
  // destructor

  DeleteContainer();
}

void AliAODTracklets::DeleteContainer()
{
  // deletes allocated memory
  if (fTheta)
  {
    delete[] fTheta;
    fTheta = 0;
  }

  if (fPhi)
  {
    delete[] fPhi;
    fPhi = 0;
  }

  if (fDeltaPhi)
  {
    delete[] fDeltaPhi;
    fDeltaPhi = 0;
  }

  if (fLabels)
  {
    delete[] fLabels;
    fLabels = 0;
  }

  if (fLabelsL2)
  {
    delete[] fLabelsL2;
    fLabelsL2 = 0;
  }

  fNTracks = 0;
}

Bool_t AliAODTracklets::SetTracklet(Int_t pos, Double32_t theta, Double32_t phi, Double32_t deltaPhi, Int_t labelL1, Int_t labelL2)
{
  // Sets a tracklet at the given position

  if (pos < 0 || pos >= fNTracks)
    return kFALSE;

  fTheta[pos] = theta;
  fPhi[pos] = phi;
  fDeltaPhi[pos] = deltaPhi;
  fLabels[pos] = labelL1;
  fLabelsL2[pos] = labelL2;

  return kTRUE;
}

//______________________________________________________________________
void AliAODTracklets::Print(Option_t *opt) const
{
  // print
  printf("N.tracklets: %4d | ScaleDThtSin2T:%s\n",fNTracks,GetScaleDThetaBySin2T() ? "ON":"OFF");
  TString opts = opt; opts.ToLower();
  //
  if (opts.Contains("t")) {
    for (int i=0;i<fNTracks;i++) {
      printf("T#%3d| Eta:%+5.2f Th:%+6.3f Phi:%+6.3f DPhi:%+6.3f L1:%5d L2:%5d\n",
	     i,GetEta(i),fTheta[i],fPhi[i],fDeltaPhi[i],fLabels[i],fLabelsL2[i]);
    }
  }
  //
}

//________________________________________________________________
void AliAODTracklets::SetLabel(Int_t i, Int_t layer,Int_t label)  
{
  // set labels
  if (i>=0 && i<fNTracks) 
  {
    if(layer == 0) fLabels[i] = label;
    else fLabelsL2[i] = label;
  }
}

//________________________________________________________________
Int_t AliAODTracklets::GetLabel(Int_t i, Int_t layer) const 
{
  // access labels
  if (i>=0 && i<fNTracks) 
  {
    return (layer == 0) ? fLabels[i] : fLabelsL2[i];
  }
  else 
    Error("GetLabel","Invalid track number %d",i); return -9999;
}

//________________________________________________________________
Double_t AliAODTracklets::GetTheta(Int_t i) const 
{ 
  // access theta's
  if (i>=0 && i<fNTracks) 
  {
    return fTheta[i];
  }
  else 
    Error("GetTheta","Invalid track number %d",i); return -9999.;
}

//________________________________________________________________
Double_t AliAODTracklets::GetPhi(Int_t i) const 
{ 
  // access phi's
  if (i>=0 && i<fNTracks) 
  {
    return fPhi[i];
  }
  else 
    Error("GetPhi","Invalid track number %d",i); return -9999.;
}

//________________________________________________________________
Double_t AliAODTracklets::GetDeltaPhi(Int_t i) const 
{
  // access delta phi's
  if (i>=0 && i<fNTracks) 
  {
    return fDeltaPhi[i];
  }
  else 
    Error("GetDeltaPhi","Invalid track number %d",i); return -9999.;
}
 AliAODTracklets.cxx:1
 AliAODTracklets.cxx:2
 AliAODTracklets.cxx:3
 AliAODTracklets.cxx:4
 AliAODTracklets.cxx:5
 AliAODTracklets.cxx:6
 AliAODTracklets.cxx:7
 AliAODTracklets.cxx:8
 AliAODTracklets.cxx:9
 AliAODTracklets.cxx:10
 AliAODTracklets.cxx:11
 AliAODTracklets.cxx:12
 AliAODTracklets.cxx:13
 AliAODTracklets.cxx:14
 AliAODTracklets.cxx:15
 AliAODTracklets.cxx:16
 AliAODTracklets.cxx:17
 AliAODTracklets.cxx:18
 AliAODTracklets.cxx:19
 AliAODTracklets.cxx:20
 AliAODTracklets.cxx:21
 AliAODTracklets.cxx:22
 AliAODTracklets.cxx:23
 AliAODTracklets.cxx:24
 AliAODTracklets.cxx:25
 AliAODTracklets.cxx:26
 AliAODTracklets.cxx:27
 AliAODTracklets.cxx:28
 AliAODTracklets.cxx:29
 AliAODTracklets.cxx:30
 AliAODTracklets.cxx:31
 AliAODTracklets.cxx:32
 AliAODTracklets.cxx:33
 AliAODTracklets.cxx:34
 AliAODTracklets.cxx:35
 AliAODTracklets.cxx:36
 AliAODTracklets.cxx:37
 AliAODTracklets.cxx:38
 AliAODTracklets.cxx:39
 AliAODTracklets.cxx:40
 AliAODTracklets.cxx:41
 AliAODTracklets.cxx:42
 AliAODTracklets.cxx:43
 AliAODTracklets.cxx:44
 AliAODTracklets.cxx:45
 AliAODTracklets.cxx:46
 AliAODTracklets.cxx:47
 AliAODTracklets.cxx:48
 AliAODTracklets.cxx:49
 AliAODTracklets.cxx:50
 AliAODTracklets.cxx:51
 AliAODTracklets.cxx:52
 AliAODTracklets.cxx:53
 AliAODTracklets.cxx:54
 AliAODTracklets.cxx:55
 AliAODTracklets.cxx:56
 AliAODTracklets.cxx:57
 AliAODTracklets.cxx:58
 AliAODTracklets.cxx:59
 AliAODTracklets.cxx:60
 AliAODTracklets.cxx:61
 AliAODTracklets.cxx:62
 AliAODTracklets.cxx:63
 AliAODTracklets.cxx:64
 AliAODTracklets.cxx:65
 AliAODTracklets.cxx:66
 AliAODTracklets.cxx:67
 AliAODTracklets.cxx:68
 AliAODTracklets.cxx:69
 AliAODTracklets.cxx:70
 AliAODTracklets.cxx:71
 AliAODTracklets.cxx:72
 AliAODTracklets.cxx:73
 AliAODTracklets.cxx:74
 AliAODTracklets.cxx:75
 AliAODTracklets.cxx:76
 AliAODTracklets.cxx:77
 AliAODTracklets.cxx:78
 AliAODTracklets.cxx:79
 AliAODTracklets.cxx:80
 AliAODTracklets.cxx:81
 AliAODTracklets.cxx:82
 AliAODTracklets.cxx:83
 AliAODTracklets.cxx:84
 AliAODTracklets.cxx:85
 AliAODTracklets.cxx:86
 AliAODTracklets.cxx:87
 AliAODTracklets.cxx:88
 AliAODTracklets.cxx:89
 AliAODTracklets.cxx:90
 AliAODTracklets.cxx:91
 AliAODTracklets.cxx:92
 AliAODTracklets.cxx:93
 AliAODTracklets.cxx:94
 AliAODTracklets.cxx:95
 AliAODTracklets.cxx:96
 AliAODTracklets.cxx:97
 AliAODTracklets.cxx:98
 AliAODTracklets.cxx:99
 AliAODTracklets.cxx:100
 AliAODTracklets.cxx:101
 AliAODTracklets.cxx:102
 AliAODTracklets.cxx:103
 AliAODTracklets.cxx:104
 AliAODTracklets.cxx:105
 AliAODTracklets.cxx:106
 AliAODTracklets.cxx:107
 AliAODTracklets.cxx:108
 AliAODTracklets.cxx:109
 AliAODTracklets.cxx:110
 AliAODTracklets.cxx:111
 AliAODTracklets.cxx:112
 AliAODTracklets.cxx:113
 AliAODTracklets.cxx:114
 AliAODTracklets.cxx:115
 AliAODTracklets.cxx:116
 AliAODTracklets.cxx:117
 AliAODTracklets.cxx:118
 AliAODTracklets.cxx:119
 AliAODTracklets.cxx:120
 AliAODTracklets.cxx:121
 AliAODTracklets.cxx:122
 AliAODTracklets.cxx:123
 AliAODTracklets.cxx:124
 AliAODTracklets.cxx:125
 AliAODTracklets.cxx:126
 AliAODTracklets.cxx:127
 AliAODTracklets.cxx:128
 AliAODTracklets.cxx:129
 AliAODTracklets.cxx:130
 AliAODTracklets.cxx:131
 AliAODTracklets.cxx:132
 AliAODTracklets.cxx:133
 AliAODTracklets.cxx:134
 AliAODTracklets.cxx:135
 AliAODTracklets.cxx:136
 AliAODTracklets.cxx:137
 AliAODTracklets.cxx:138
 AliAODTracklets.cxx:139
 AliAODTracklets.cxx:140
 AliAODTracklets.cxx:141
 AliAODTracklets.cxx:142
 AliAODTracklets.cxx:143
 AliAODTracklets.cxx:144
 AliAODTracklets.cxx:145
 AliAODTracklets.cxx:146
 AliAODTracklets.cxx:147
 AliAODTracklets.cxx:148
 AliAODTracklets.cxx:149
 AliAODTracklets.cxx:150
 AliAODTracklets.cxx:151
 AliAODTracklets.cxx:152
 AliAODTracklets.cxx:153
 AliAODTracklets.cxx:154
 AliAODTracklets.cxx:155
 AliAODTracklets.cxx:156
 AliAODTracklets.cxx:157
 AliAODTracklets.cxx:158
 AliAODTracklets.cxx:159
 AliAODTracklets.cxx:160
 AliAODTracklets.cxx:161
 AliAODTracklets.cxx:162
 AliAODTracklets.cxx:163
 AliAODTracklets.cxx:164
 AliAODTracklets.cxx:165
 AliAODTracklets.cxx:166
 AliAODTracklets.cxx:167
 AliAODTracklets.cxx:168
 AliAODTracklets.cxx:169
 AliAODTracklets.cxx:170
 AliAODTracklets.cxx:171
 AliAODTracklets.cxx:172
 AliAODTracklets.cxx:173
 AliAODTracklets.cxx:174
 AliAODTracklets.cxx:175
 AliAODTracklets.cxx:176
 AliAODTracklets.cxx:177
 AliAODTracklets.cxx:178
 AliAODTracklets.cxx:179
 AliAODTracklets.cxx:180
 AliAODTracklets.cxx:181
 AliAODTracklets.cxx:182
 AliAODTracklets.cxx:183
 AliAODTracklets.cxx:184
 AliAODTracklets.cxx:185
 AliAODTracklets.cxx:186
 AliAODTracklets.cxx:187
 AliAODTracklets.cxx:188
 AliAODTracklets.cxx:189
 AliAODTracklets.cxx:190
 AliAODTracklets.cxx:191
 AliAODTracklets.cxx:192
 AliAODTracklets.cxx:193
 AliAODTracklets.cxx:194
 AliAODTracklets.cxx:195
 AliAODTracklets.cxx:196
 AliAODTracklets.cxx:197
 AliAODTracklets.cxx:198
 AliAODTracklets.cxx:199
 AliAODTracklets.cxx:200
 AliAODTracklets.cxx:201
 AliAODTracklets.cxx:202
 AliAODTracklets.cxx:203
 AliAODTracklets.cxx:204
 AliAODTracklets.cxx:205
 AliAODTracklets.cxx:206
 AliAODTracklets.cxx:207
 AliAODTracklets.cxx:208
 AliAODTracklets.cxx:209
 AliAODTracklets.cxx:210
 AliAODTracklets.cxx:211
 AliAODTracklets.cxx:212
 AliAODTracklets.cxx:213
 AliAODTracklets.cxx:214
 AliAODTracklets.cxx:215
 AliAODTracklets.cxx:216
 AliAODTracklets.cxx:217
 AliAODTracklets.cxx:218
 AliAODTracklets.cxx:219
 AliAODTracklets.cxx:220
 AliAODTracklets.cxx:221
 AliAODTracklets.cxx:222
 AliAODTracklets.cxx:223
 AliAODTracklets.cxx:224
 AliAODTracklets.cxx:225
 AliAODTracklets.cxx:226
 AliAODTracklets.cxx:227
 AliAODTracklets.cxx:228
 AliAODTracklets.cxx:229
 AliAODTracklets.cxx:230
 AliAODTracklets.cxx:231
 AliAODTracklets.cxx:232
 AliAODTracklets.cxx:233
 AliAODTracklets.cxx:234
 AliAODTracklets.cxx:235