move TObject from ESDfriendTravk to VfriendTrack
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDfriendTrack.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
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"
27
28 ClassImp(AliESDfriendTrack)
29
30 AliESDfriendTrack::AliESDfriendTrack(): 
31 AliVfriendTrack(), 
32 f1P(0), 
33 fnMaxITScluster(0),
34 fnMaxTPCcluster(0),
35 fnMaxTRDcluster(0),
36 fITSindex(0x0),
37 fTPCindex(0x0),
38 fTRDindex(0x0),
39 fPoints(0),
40 fCalibContainer(0),
41 fITStrack(0),
42 fTRDtrack(0),
43 fTPCOut(0),
44 fITSOut(0),
45 fTRDIn(0)
46 {
47   //
48   // Default constructor
49   //
50         //  Int_t i;
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;
57   
58   //fHmpPhotClus->SetOwner(kTRUE); 
59   
60 }
61
62 AliESDfriendTrack::AliESDfriendTrack(const AliESDfriendTrack &t): 
63 AliVfriendTrack(t),
64 f1P(t.f1P),
65 fnMaxITScluster(t.fnMaxITScluster),
66 fnMaxTPCcluster(t.fnMaxTPCcluster),
67 fnMaxTRDcluster(t.fnMaxTRDcluster),
68 fITSindex(0x0),
69 fTPCindex(0x0),
70 fTRDindex(0x0),
71 fPoints(0),
72 fCalibContainer(0),
73 fITStrack(0),
74 fTRDtrack(0),
75 fTPCOut(0),
76 fITSOut(0),
77 fTRDIn(0)
78 {
79   //
80   // Copy constructor
81   //
82   AliDebug(2,"Calling copy constructor");
83
84   Int_t i;
85   if (fnMaxITScluster != 0){
86           fITSindex = new Int_t[fnMaxITScluster];
87           for (i=0; i<fnMaxITScluster; i++) fITSindex[i]=t.fITSindex[i];
88   }
89   if (fnMaxTPCcluster != 0){
90           fTPCindex = new Int_t[fnMaxTPCcluster];
91           for (i=0; i<fnMaxTPCcluster; i++) fTPCindex[i]=t.fTPCindex[i];
92   }
93   if (fnMaxTRDcluster != 0){
94           fTRDindex = new Int_t[fnMaxTRDcluster];
95           for (i=0; i<fnMaxTRDcluster; i++) fTRDindex[i]=t.fTRDindex[i]; 
96   }
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());
107      }  
108   }
109
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));
113   
114 }
115
116 AliESDfriendTrack::~AliESDfriendTrack() {
117   //
118   // Simple destructor
119   //
120    delete fPoints;
121    if (fCalibContainer) fCalibContainer->Delete();
122    delete fCalibContainer;
123    delete fITStrack;
124    delete fTRDtrack;
125    delete fTPCOut;
126    delete fITSOut;
127    delete fTRDIn;
128    delete[] fITSindex;
129    delete[] fTPCindex;
130    delete[] fTRDindex;
131 }
132
133
134 void AliESDfriendTrack::AddCalibObject(TObject * calibObject){
135   //
136   // add calibration object to array -
137   // track is owner of the objects in the container 
138   //
139   if (!fCalibContainer) fCalibContainer = new TObjArray(5);
140   fCalibContainer->AddLast(calibObject);
141 }
142
143 TObject * AliESDfriendTrack::GetCalibObject(Int_t index) const {
144   //
145   //
146   //
147   if (!fCalibContainer) return 0;
148   if (index>=fCalibContainer->GetEntriesFast()) return 0;
149   return fCalibContainer->At(index);
150 }
151
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 );
158       return 0;
159     }
160   }
161   return -1;
162 }
163
164 void AliESDfriendTrack::SetTPCOut(const AliExternalTrackParam &param) {
165   // 
166   // backup TPC out track
167   //
168   delete fTPCOut;
169   fTPCOut=new AliExternalTrackParam(param);
170
171 void AliESDfriendTrack::SetITSOut(const AliExternalTrackParam &param) {
172   //
173   // backup ITS out track
174   //
175   delete fITSOut;
176   fITSOut=new AliExternalTrackParam(param);
177
178 void AliESDfriendTrack::SetTRDIn(const AliExternalTrackParam  &param)  {
179   //
180   // backup TRD in track
181   //
182   delete fTRDIn;
183   fTRDIn=new AliExternalTrackParam(param);
184
185
186 void AliESDfriendTrack::SetITSIndices(Int_t* indices, Int_t n){
187
188         //
189         // setting fITSindex
190         // instantiating the pointer if still NULL
191         //
192
193         fnMaxITScluster = n;
194         AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
195         if (fITSindex == 0x0){
196                 fITSindex = new Int_t[fnMaxITScluster];
197         }
198         for (Int_t i = 0; i < fnMaxITScluster; i++){
199                 fITSindex[i] = indices[i];
200         }
201 }
202
203 void AliESDfriendTrack::SetTPCIndices(Int_t* indices, Int_t n){
204
205         //
206         // setting fTPCindex
207         // instantiating the pointer if still NULL
208         //
209
210         fnMaxTPCcluster = n;
211         AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
212         if (fTPCindex == 0x0){
213                 fTPCindex = new Int_t[fnMaxTPCcluster];
214         }
215         for (Int_t i = 0; i < fnMaxTPCcluster; i++){
216                 fTPCindex[i] = indices[i];
217         }
218 }
219
220 void AliESDfriendTrack::SetTRDIndices(Int_t* indices, Int_t n){
221
222         //
223         // setting fTRDindex
224         // instantiating the pointer if still NULL
225         //
226
227         fnMaxTRDcluster = n;
228         AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
229         if (fTRDindex == 0x0){
230                 fTRDindex = new Int_t[fnMaxTRDcluster];
231         }
232         for (Int_t i = 0; i < fnMaxTRDcluster; i++){
233                 fTRDindex[i] = indices[i];
234         }
235 }
236