1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //-------------------------------------------------------------------------
17 // Implementation of the AliESDfriendTrack class
18 // This class keeps complementary to the AliESDtrack information
19 // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
20 //-------------------------------------------------------------------------
21 #include "AliTrackPointArray.h"
22 #include "AliESDfriendTrack.h"
23 #include "TObjArray.h"
24 #include "TClonesArray.h"
25 #include "AliKalmanTrack.h"
26 #include "AliVTPCseed.h"
28 ClassImp(AliESDfriendTrack)
30 AliESDfriendTrack::AliESDfriendTrack():
48 // Default constructor
51 // fITSindex = new Int_t[fnMaxITScluster];
52 //fTPCindex = new Int_t[fnMaxTPCcluster];
53 //fTRDindex = new Int_t[fnMaxTRDcluster];
54 //for (i=0; i<kMaxITScluster; i++) fITSindex[i]=-2;
55 //for (i=0; i<kMaxTPCcluster; i++) fTPCindex[i]=-2;
56 //for (i=0; i<kMaxTRDcluster; i++) fTRDindex[i]=-2;
58 //fHmpPhotClus->SetOwner(kTRUE);
62 AliESDfriendTrack::AliESDfriendTrack(const AliESDfriendTrack &t):
65 fnMaxITScluster(t.fnMaxITScluster),
66 fnMaxTPCcluster(t.fnMaxTPCcluster),
67 fnMaxTRDcluster(t.fnMaxTRDcluster),
82 AliDebug(2,"Calling copy constructor");
85 if (fnMaxITScluster != 0){
86 fITSindex = new Int_t[fnMaxITScluster];
87 for (i=0; i<fnMaxITScluster; i++) fITSindex[i]=t.fITSindex[i];
89 if (fnMaxTPCcluster != 0){
90 fTPCindex = new Int_t[fnMaxTPCcluster];
91 for (i=0; i<fnMaxTPCcluster; i++) fTPCindex[i]=t.fTPCindex[i];
93 if (fnMaxTRDcluster != 0){
94 fTRDindex = new Int_t[fnMaxTRDcluster];
95 for (i=0; i<fnMaxTRDcluster; i++) fTRDindex[i]=t.fTRDindex[i];
97 AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
98 AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
99 AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
100 if (t.fPoints) fPoints=new AliTrackPointArray(*t.fPoints);
101 if (t.fCalibContainer) {
102 fCalibContainer = new TObjArray(5);
103 Int_t no=t.fCalibContainer->GetEntriesFast();
104 for (i=0; i<no; i++) {
105 TObject *o=t.fCalibContainer->At(i);
106 if (o) fCalibContainer->AddLast(o->Clone());
110 if (t.fTPCOut) fTPCOut = new AliExternalTrackParam(*(t.fTPCOut));
111 if (t.fITSOut) fITSOut = new AliExternalTrackParam(*(t.fITSOut));
112 if (t.fTRDIn) fTRDIn = new AliExternalTrackParam(*(t.fTRDIn));
116 AliESDfriendTrack::~AliESDfriendTrack() {
121 if (fCalibContainer) fCalibContainer->Delete();
122 delete fCalibContainer;
134 void AliESDfriendTrack::AddCalibObject(TObject * calibObject){
136 // add calibration object to array -
137 // track is owner of the objects in the container
139 if (!fCalibContainer) fCalibContainer = new TObjArray(5);
140 fCalibContainer->AddLast(calibObject);
143 TObject * AliESDfriendTrack::GetCalibObject(Int_t index) const {
147 if (!fCalibContainer) return 0;
148 if (index>=fCalibContainer->GetEntriesFast()) return 0;
149 return fCalibContainer->At(index);
152 Int_t AliESDfriendTrack::GetTPCseed( AliTPCseed &seed) const {
153 TObject* calibObject = NULL;
154 AliVTPCseed* seedP = NULL;
155 for (Int_t idx = 0; (calibObject = GetCalibObject(idx)); ++idx) {
156 if ((seedP = dynamic_cast<AliVTPCseed*>(calibObject))) {
157 seedP->CopyToTPCseed( seed );
164 void AliESDfriendTrack::SetTPCOut(const AliExternalTrackParam ¶m) {
166 // backup TPC out track
169 fTPCOut=new AliExternalTrackParam(param);
171 void AliESDfriendTrack::SetITSOut(const AliExternalTrackParam ¶m) {
173 // backup ITS out track
176 fITSOut=new AliExternalTrackParam(param);
178 void AliESDfriendTrack::SetTRDIn(const AliExternalTrackParam ¶m) {
180 // backup TRD in track
183 fTRDIn=new AliExternalTrackParam(param);
186 void AliESDfriendTrack::SetITSIndices(Int_t* indices, Int_t n){
190 // instantiating the pointer if still NULL
194 AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
195 if (fITSindex == 0x0){
196 fITSindex = new Int_t[fnMaxITScluster];
198 for (Int_t i = 0; i < fnMaxITScluster; i++){
199 fITSindex[i] = indices[i];
203 void AliESDfriendTrack::SetTPCIndices(Int_t* indices, Int_t n){
207 // instantiating the pointer if still NULL
211 AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
212 if (fTPCindex == 0x0){
213 fTPCindex = new Int_t[fnMaxTPCcluster];
215 for (Int_t i = 0; i < fnMaxTPCcluster; i++){
216 fTPCindex[i] = indices[i];
220 void AliESDfriendTrack::SetTRDIndices(Int_t* indices, Int_t n){
224 // instantiating the pointer if still NULL
228 AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
229 if (fTRDindex == 0x0){
230 fTRDindex = new Int_t[fnMaxTRDcluster];
232 for (Int_t i = 0; i < fnMaxTRDcluster; i++){
233 fTRDindex[i] = indices[i];