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.                  *
 **************************************************************************/

//-------------------------------------------------------------------------
//               Implementation of the AliESDfriendTrack class
//  This class keeps complementary to the AliESDtrack information 
//      Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
//-------------------------------------------------------------------------
#include "AliTrackPointArray.h"
#include "AliESDfriendTrack.h"
#include "TObjArray.h"
#include "TClonesArray.h"
#include "AliKalmanTrack.h"
#include "AliVTPCseed.h"

ClassImp(AliESDfriendTrack)

AliESDfriendTrack::AliESDfriendTrack(): 
AliVfriendTrack(), 
f1P(0), 
fnMaxITScluster(0),
fnMaxTPCcluster(0),
fnMaxTRDcluster(0),
fITSindex(0x0),
fTPCindex(0x0),
fTRDindex(0x0),
fPoints(0),
fCalibContainer(0),
fITStrack(0),
fTRDtrack(0),
fTPCOut(0),
fITSOut(0),
fTRDIn(0)
{
  //
  // Default constructor
  //
	//  Int_t i;
  //  fITSindex = new Int_t[fnMaxITScluster];
  //fTPCindex = new Int_t[fnMaxTPCcluster];
  //fTRDindex = new Int_t[fnMaxTRDcluster];
  //for (i=0; i<kMaxITScluster; i++) fITSindex[i]=-2;
  //for (i=0; i<kMaxTPCcluster; i++) fTPCindex[i]=-2;
  //for (i=0; i<kMaxTRDcluster; i++) fTRDindex[i]=-2;
  
  //fHmpPhotClus->SetOwner(kTRUE); 
  
}

AliESDfriendTrack::AliESDfriendTrack(const AliESDfriendTrack &t): 
AliVfriendTrack(t),
f1P(t.f1P),
fnMaxITScluster(t.fnMaxITScluster),
fnMaxTPCcluster(t.fnMaxTPCcluster),
fnMaxTRDcluster(t.fnMaxTRDcluster),
fITSindex(0x0),
fTPCindex(0x0),
fTRDindex(0x0),
fPoints(0),
fCalibContainer(0),
fITStrack(0),
fTRDtrack(0),
fTPCOut(0),
fITSOut(0),
fTRDIn(0)
{
  //
  // Copy constructor
  //
  AliDebug(2,"Calling copy constructor");

  Int_t i;
  if (fnMaxITScluster != 0){
	  fITSindex = new Int_t[fnMaxITScluster];
	  for (i=0; i<fnMaxITScluster; i++) fITSindex[i]=t.fITSindex[i];
  }
  if (fnMaxTPCcluster != 0){
	  fTPCindex = new Int_t[fnMaxTPCcluster];
	  for (i=0; i<fnMaxTPCcluster; i++) fTPCindex[i]=t.fTPCindex[i];
  }
  if (fnMaxTRDcluster != 0){
	  fTRDindex = new Int_t[fnMaxTRDcluster];
	  for (i=0; i<fnMaxTRDcluster; i++) fTRDindex[i]=t.fTRDindex[i]; 
  }
  AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
  AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
  AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
  if (t.fPoints) fPoints=new AliTrackPointArray(*t.fPoints);
  if (t.fCalibContainer) {
     fCalibContainer = new TObjArray(5);
     Int_t no=t.fCalibContainer->GetEntriesFast();
     for (i=0; i<no; i++) {
       TObject *o=t.fCalibContainer->At(i);
       if (o) fCalibContainer->AddLast(o->Clone());
     }  
  }

  if (t.fTPCOut) fTPCOut = new AliExternalTrackParam(*(t.fTPCOut));
  if (t.fITSOut) fITSOut = new AliExternalTrackParam(*(t.fITSOut));
  if (t.fTRDIn)  fTRDIn = new AliExternalTrackParam(*(t.fTRDIn));
  
}

AliESDfriendTrack::~AliESDfriendTrack() {
  //
  // Simple destructor
  //
   delete fPoints;
   if (fCalibContainer) fCalibContainer->Delete();
   delete fCalibContainer;
   delete fITStrack;
   delete fTRDtrack;
   delete fTPCOut;
   delete fITSOut;
   delete fTRDIn;
   delete[] fITSindex;
   delete[] fTPCindex;
   delete[] fTRDindex;
}


void AliESDfriendTrack::AddCalibObject(TObject * calibObject){
  //
  // add calibration object to array -
  // track is owner of the objects in the container 
  //
  if (!fCalibContainer) fCalibContainer = new TObjArray(5);
  fCalibContainer->AddLast(calibObject);
}

TObject * AliESDfriendTrack::GetCalibObject(Int_t index) const {
  //
  //
  //
  if (!fCalibContainer) return 0;
  if (index>=fCalibContainer->GetEntriesFast()) return 0;
  return fCalibContainer->At(index);
}

Int_t AliESDfriendTrack::GetTPCseed( AliTPCseed &seed) const {
  TObject* calibObject = NULL;
  AliVTPCseed* seedP = NULL;
  for (Int_t idx = 0; (calibObject = GetCalibObject(idx)); ++idx) {
    if ((seedP = dynamic_cast<AliVTPCseed*>(calibObject))) {
      seedP->CopyToTPCseed( seed );
      return 0;
    }
  }
  return -1;
}

void AliESDfriendTrack::SetTPCOut(const AliExternalTrackParam &param) {
  // 
  // backup TPC out track
  //
  delete fTPCOut;
  fTPCOut=new AliExternalTrackParam(param);
} 
void AliESDfriendTrack::SetITSOut(const AliExternalTrackParam &param) {
  //
  // backup ITS out track
  //
  delete fITSOut;
  fITSOut=new AliExternalTrackParam(param);
} 
void AliESDfriendTrack::SetTRDIn(const AliExternalTrackParam  &param)  {
  //
  // backup TRD in track
  //
  delete fTRDIn;
  fTRDIn=new AliExternalTrackParam(param);
} 

void AliESDfriendTrack::SetITSIndices(Int_t* indices, Int_t n){

	//
	// setting fITSindex
	// instantiating the pointer if still NULL
	//

	fnMaxITScluster = n;
	AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
	if (fITSindex == 0x0){
		fITSindex = new Int_t[fnMaxITScluster];
	}
	for (Int_t i = 0; i < fnMaxITScluster; i++){
		fITSindex[i] = indices[i];
	}
}

void AliESDfriendTrack::SetTPCIndices(Int_t* indices, Int_t n){

	//
	// setting fTPCindex
	// instantiating the pointer if still NULL
	//

	fnMaxTPCcluster = n;
	AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
	if (fTPCindex == 0x0){
		fTPCindex = new Int_t[fnMaxTPCcluster];
	}
	for (Int_t i = 0; i < fnMaxTPCcluster; i++){
		fTPCindex[i] = indices[i];
	}
}

void AliESDfriendTrack::SetTRDIndices(Int_t* indices, Int_t n){

	//
	// setting fTRDindex
	// instantiating the pointer if still NULL
	//

	fnMaxTRDcluster = n;
	AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
	if (fTRDindex == 0x0){
		fTRDindex = new Int_t[fnMaxTRDcluster];
	}
	for (Int_t i = 0; i < fnMaxTRDcluster; i++){
		fTRDindex[i] = indices[i];
	}
}

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