AliRoot Core  da88d91 (da88d91)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMFTTrack.cxx
Go to the documentation of this file.
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 /* $Id$ */
17 
18 //-----------------------------------------------------------------------------
19 // Class AliMFTTrack
20 //-------------------
21 // Description of an ALICE Standalone MFT track
22 //-------------------
23 // Contact author: raphael.tieulent@cern.ch
24 //-----------------------------------------------------------------------------
25 
26 #include "TObjArray.h"
27 #include "TMath.h"
28 
29 #include "AliLog.h"
30 
31 #include "AliMFTTrack.h"
32 #include "AliMFTTrackParam.h"
33 #include "AliMFTCATrack.h"
34 #include "AliMFTCACell.h"
35 
36 
38 ClassImp(AliMFTTrack); // Class implementation in ROOT context
40 
41 
42 //=============================================================================================
43 
45 fChi2(0.),
46 fTrackParamAtCluster(NULL),
47 fTrackParamAtVertex(NULL),
48 fCATrack(NULL),
49 fTrackID(-1),
50 fP(0),
51 fTheta(0),
52 fPhi(0),
53 fPt(0)
54 {
56 
57 }
58 
59 //=============================================================================================
60 
62 fChi2(0.),
63 fTrackParamAtCluster(new TObjArray(10)),
64 fTrackParamAtVertex(NULL),
65 fCATrack(catrack),
66 fTrackID(-1),
67 fP(0),
68 fTheta(0),
69 fPhi(0),
70 fPt(0)
71 {
72  catrack->Print();
74  fTrackParamAtCluster->SetOwner(kTRUE);
75 
76  Int_t nCells = catrack->GetNcells();
77  // Create Empty Track Parameter objects
78  Double_t *caHit;
79  AliMFTCACell * caCell;
80  AliInfo(Form("Nb of Cells in the track = %d ",nCells));
81  for (Int_t iCell = 0 ; iCell < nCells ; iCell++) {
82  caCell = catrack->GetCell(iCell);
83  caHit = caCell->GetHit2();
84 
85  AliMFTTrackParam trackParam;
86  trackParam.SetInverseTransverseMomentum(1.e-6); // infinite momentum
87  trackParam.SetClusterPos(caHit[0], caHit[1], caHit[2]);
88 
89  AddTrackParamAtCluster(trackParam);
90 
91  if(iCell==nCells-1) {
92  AliMFTTrackParam trackParam2;
93  caHit = caCell->GetHit1();
94  trackParam2.SetInverseTransverseMomentum(1.e-6); // infinite momentum
95  trackParam2.SetClusterPos(caHit[0], caHit[1], caHit[2]);
96 
97  AddTrackParamAtCluster(trackParam2);
98  }
99 
100  }
101 
102  AliInfo(Form("Nb of Track param objects = %d ",fTrackParamAtCluster->GetEntries()));
103 }
104 //__________________________________________________________________________
106 : TObject(track),
107 fChi2(track.fChi2),
108 fTrackParamAtCluster(NULL),
109 fTrackParamAtVertex(NULL),
110 fCATrack(track.fCATrack),
111 fTrackID(track.fTrackID),
112 fP(track.fP),
113 fTheta(track.fTheta),
114 fPhi(track.fPhi),
115 fPt(track.fPt)
116 
117 {
119 
120  // necessary to make a copy of the objects and not only the pointers in TObjArray.
121  if (track.fTrackParamAtCluster) {
122  fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
123  fTrackParamAtCluster->SetOwner(kTRUE);
124  for (Int_t i = 0; i < track.GetNClusters(); i++)
125  fTrackParamAtCluster->AddLast(new AliMFTTrackParam(*static_cast<AliMFTTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
126  }
127 
128 
129  // copy track parameters at vertex if any
131 
132 }
133 //__________________________________________________________________________
135 {
137  // check assignement to self
138  if (this == &track)
139  return *this;
140 
141  // base class assignement
142  TObject::operator=(track);
143 
144  // clear memory
145  Clear();
146 
147  // necessary to make a copy of the objects and not only the pointers in TObjArray
148  if (track.fTrackParamAtCluster) {
149  fTrackParamAtCluster = new TObjArray(track.fTrackParamAtCluster->GetSize());
150  fTrackParamAtCluster->SetOwner(kTRUE);
151  for (Int_t i = 0; i < track.GetNClusters(); i++)
152  fTrackParamAtCluster->AddLast(new AliMFTTrackParam(*static_cast<AliMFTTrackParam*>(track.fTrackParamAtCluster->UncheckedAt(i))));
153  }
154 
155 
156  // copy track parameters at vertex if any
157  if (track.fTrackParamAtVertex) {
160  }
161 
162  fChi2 = track.fChi2;
163  fTrackID = track.fTrackID;
164  fCATrack = track.fCATrack;
165  fP=track.fP;
166  fTheta=track.fTheta;
167  fPhi=track.fPhi;
168  fPt=track.fPt;
169 
170  return *this;
171 }
172 
173 //=============================================================================================
174 
175 
177 
178  delete fTrackParamAtCluster;
179  delete fTrackParamAtVertex;
180  delete fCATrack;
181 
182 }
183 
184 //__________________________________________________________________________
186 {
187 
188  // // check whether track parameters are given at the correct cluster z position
189  // if (TMath::Abs(cluster.GetZ() - trackParam.GetZ())>1.e-5) { // AU
190  // AliError("track parameters are given at a different z position than the one of the associated cluster");
191  // return;
192  // }
193 
194  // add parameters to the array of track parameters
195  if (!fTrackParamAtCluster) {
197  fTrackParamAtCluster->SetOwner(kTRUE);
198  }
199  AliMFTTrackParam* trackParamAtCluster = new AliMFTTrackParam(trackParam);
200  fTrackParamAtCluster->AddLast(trackParamAtCluster);
201 
202  // sort the array of track parameters
203  // fTrackParamAtCluster->Sort();
204 }
205 
206 //__________________________________________________________________________
208 {
210  if (!fTrackParamAtCluster) {
212  fTrackParamAtCluster->SetOwner(kTRUE);
213  }
214  return fTrackParamAtCluster;
215 }
216 
217 //__________________________________________________________________________
218 Int_t AliMFTTrack::GetNDF() const
219 {
221 
222  Int_t ndf = 2 * GetNClusters() - 5;
223  return (ndf > 0) ? ndf : 0;
224 }
225 
226 //__________________________________________________________________________
228 {
230 
231  Double_t ndf = (Double_t) GetNDF();
232  return (ndf > 0.) ? fChi2 / ndf : 1e6;
233 }
234 
235 //_____________________________________________-
236 void AliMFTTrack::Print(Option_t*) const
237 {
239 
240  AliInfo(Form("Chi2 = %.1f", fChi2));
241  AliInfo(Form("Chi2/ndf = %.2f", GetNormalizedChi2()));
242  AliInfo(Form("No.Clusters = %d", GetNClusters()));
243  AliInfo(Form("MC label = %d", fTrackID));
244  if (fTrackParamAtCluster) fTrackParamAtCluster->Last()->Print("FULL");
245 }
246 
247 //__________________________________________________________________________
248 void AliMFTTrack::Clear(Option_t* /*opt*/)
249 {
251  // delete fTrackParamAtCluster; fTrackParamAtCluster = 0x0;
252  // delete fTrackParamAtVertex; fTrackParamAtVertex = 0x0;
253 }
254 
255 
256 
Double_t GetNormalizedChi2() const
void AddTrackParamAtCluster(const AliMFTTrackParam &trackParam)
Int_t GetNClusters() const
return the number of clusters attached to the track
Definition: AliMFTTrack.h:46
AliMFTCATrack * fCATrack
///< Track parameters at vertex
Definition: AliMFTTrack.h:81
#define TObjArray
virtual void Clear(Option_t *opt="")
Double_t fChi2
Chi2 of the track.
Definition: AliMFTTrack.h:72
Double_t * GetHit1()
Definition: AliMFTCACell.h:25
const Int_t GetNcells() const
Definition: AliMFTCATrack.h:26
void SetInverseTransverseMomentum(Double_t val)
set Inverse Momentum
AliTPCfastTrack * track
virtual ~AliMFTTrack()
AliMFTTrack & operator=(const AliMFTTrack &track)
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
Description of an ALICE Standalone MFT track.
Definition: AliMFTTrack.h:24
Double_t * GetHit2()
Definition: AliMFTCACell.h:26
AliMFTTrackParam * fTrackParamAtVertex
///< Track parameters at clusters
Definition: AliMFTTrack.h:80
AliMFTCACell * GetCell(Int_t ic) const
Definition: AliMFTCATrack.h:28
Double_t fPt
Temporary to be removed.... From sagitta estimation.
Definition: AliMFTTrack.h:86
TObjArray * GetTrackParamAtCluster() const
Double_t fPhi
Temporary to be removed....
Definition: AliMFTTrack.h:85
Double_t fP
Temporary to be removed....
Definition: AliMFTTrack.h:83
Class holding the parameter of a MFT Standalone Track.
TObjArray * fTrackParamAtCluster
Definition: AliMFTTrack.h:79
Double_t fTheta
Temporary to be removed....
Definition: AliMFTTrack.h:84
virtual void Print(Option_t *opt="") const
Int_t GetNDF() const
return kTRUE
Definition: AliFMDv1.cxx:97
Int_t fTrackID
///< Track found by Track Finder (includes clusters)
Definition: AliMFTTrack.h:82
void SetClusterPos(Double_t x, Double_t y, Double_t z)
set Cluster coordinates (cm)