fc6a345a59626febd7a7095377f4c22518d531ba
[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 TObject(), 
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 TObject(t),
64 AliVfriendTrack(),
65 f1P(t.f1P),
66 fnMaxITScluster(t.fnMaxITScluster),
67 fnMaxTPCcluster(t.fnMaxTPCcluster),
68 fnMaxTRDcluster(t.fnMaxTRDcluster),
69 fITSindex(0x0),
70 fTPCindex(0x0),
71 fTRDindex(0x0),
72 fPoints(0),
73 fCalibContainer(0),
74 fITStrack(0),
75 fTRDtrack(0),
76 fTPCOut(0),
77 fITSOut(0),
78 fTRDIn(0)
79 {
80   //
81   // Copy constructor
82   //
83   AliDebug(2,"Calling copy constructor");
84
85   Int_t i;
86   if (fnMaxITScluster != 0){
87           fITSindex = new Int_t[fnMaxITScluster];
88           for (i=0; i<fnMaxITScluster; i++) fITSindex[i]=t.fITSindex[i];
89   }
90   if (fnMaxTPCcluster != 0){
91           fTPCindex = new Int_t[fnMaxTPCcluster];
92           for (i=0; i<fnMaxTPCcluster; i++) fTPCindex[i]=t.fTPCindex[i];
93   }
94   if (fnMaxTRDcluster != 0){
95           fTRDindex = new Int_t[fnMaxTRDcluster];
96           for (i=0; i<fnMaxTRDcluster; i++) fTRDindex[i]=t.fTRDindex[i]; 
97   }
98   AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
99   AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
100   AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
101   if (t.fPoints) fPoints=new AliTrackPointArray(*t.fPoints);
102   if (t.fCalibContainer) {
103      fCalibContainer = new TObjArray(5);
104      Int_t no=t.fCalibContainer->GetEntriesFast();
105      for (i=0; i<no; i++) {
106        TObject *o=t.fCalibContainer->At(i);
107        if (o) fCalibContainer->AddLast(o->Clone());
108      }  
109   }
110
111   if (t.fTPCOut) fTPCOut = new AliExternalTrackParam(*(t.fTPCOut));
112   if (t.fITSOut) fITSOut = new AliExternalTrackParam(*(t.fITSOut));
113   if (t.fTRDIn)  fTRDIn = new AliExternalTrackParam(*(t.fTRDIn));
114   
115 }
116
117 AliESDfriendTrack::~AliESDfriendTrack() {
118   //
119   // Simple destructor
120   //
121    delete fPoints;
122    if (fCalibContainer) fCalibContainer->Delete();
123    delete fCalibContainer;
124    delete fITStrack;
125    delete fTRDtrack;
126    delete fTPCOut;
127    delete fITSOut;
128    delete fTRDIn;
129    delete[] fITSindex;
130    delete[] fTPCindex;
131    delete[] fTRDindex;
132 }
133
134
135 void AliESDfriendTrack::AddCalibObject(TObject * calibObject){
136   //
137   // add calibration object to array -
138   // track is owner of the objects in the container 
139   //
140   if (!fCalibContainer) fCalibContainer = new TObjArray(5);
141   fCalibContainer->AddLast(calibObject);
142 }
143
144 TObject * AliESDfriendTrack::GetCalibObject(Int_t index) const {
145   //
146   //
147   //
148   if (!fCalibContainer) return 0;
149   if (index>=fCalibContainer->GetEntriesFast()) return 0;
150   return fCalibContainer->At(index);
151 }
152
153 Int_t AliESDfriendTrack::GetTPCseed( AliTPCseed &seed) const {
154   TObject* calibObject = NULL;
155   AliVTPCseed* seedP = NULL;
156   for (Int_t idx = 0; (calibObject = GetCalibObject(idx)); ++idx) {
157     if ((seedP = dynamic_cast<AliVTPCseed*>(calibObject))) {
158       seedP->CopyToTPCseed( seed );
159       return 0;
160     }
161   }
162   return -1;
163 }
164
165 void AliESDfriendTrack::SetTPCOut(const AliExternalTrackParam &param) {
166   // 
167   // backup TPC out track
168   //
169   delete fTPCOut;
170   fTPCOut=new AliExternalTrackParam(param);
171
172 void AliESDfriendTrack::SetITSOut(const AliExternalTrackParam &param) {
173   //
174   // backup ITS out track
175   //
176   delete fITSOut;
177   fITSOut=new AliExternalTrackParam(param);
178
179 void AliESDfriendTrack::SetTRDIn(const AliExternalTrackParam  &param)  {
180   //
181   // backup TRD in track
182   //
183   delete fTRDIn;
184   fTRDIn=new AliExternalTrackParam(param);
185
186
187 void AliESDfriendTrack::SetITSIndices(Int_t* indices, Int_t n){
188
189         //
190         // setting fITSindex
191         // instantiating the pointer if still NULL
192         //
193
194         fnMaxITScluster = n;
195         AliDebug(2,Form("fnMaxITScluster = %d",fnMaxITScluster));
196         if (fITSindex == 0x0){
197                 fITSindex = new Int_t[fnMaxITScluster];
198         }
199         for (Int_t i = 0; i < fnMaxITScluster; i++){
200                 fITSindex[i] = indices[i];
201         }
202 }
203
204 void AliESDfriendTrack::SetTPCIndices(Int_t* indices, Int_t n){
205
206         //
207         // setting fTPCindex
208         // instantiating the pointer if still NULL
209         //
210
211         fnMaxTPCcluster = n;
212         AliDebug(2,Form("fnMaxTPCcluster = %d",fnMaxTPCcluster));
213         if (fTPCindex == 0x0){
214                 fTPCindex = new Int_t[fnMaxTPCcluster];
215         }
216         for (Int_t i = 0; i < fnMaxTPCcluster; i++){
217                 fTPCindex[i] = indices[i];
218         }
219 }
220
221 void AliESDfriendTrack::SetTRDIndices(Int_t* indices, Int_t n){
222
223         //
224         // setting fTRDindex
225         // instantiating the pointer if still NULL
226         //
227
228         fnMaxTRDcluster = n;
229         AliDebug(2,Form("fnMaxTRDcluster = %d",fnMaxTRDcluster));
230         if (fTRDindex == 0x0){
231                 fTRDindex = new Int_t[fnMaxTRDcluster];
232         }
233         for (Int_t i = 0; i < fnMaxTRDcluster; i++){
234                 fTRDindex[i] = indices[i];
235         }
236 }
237