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 base class for track residuals
20 //-----------------------------------------------------------------
22 #include "AliTrackResiduals.h"
24 #include "AliAlignObj.h"
25 #include "AliAlignObjParams.h"
26 #include "AliTrackPointArray.h"
28 ClassImp(AliTrackResiduals)
30 //_____________________________________________________________________________
31 AliTrackResiduals::AliTrackResiduals():
42 // Default constructor
43 for (Int_t ipar=0; ipar<6; ipar++){
44 fBFixed[ipar] = kFALSE;
49 //_____________________________________________________________________________
50 AliTrackResiduals::AliTrackResiduals(Int_t ntracks):
63 fVolArray = new AliTrackPointArray*[ntracks];
64 fTrackArray = new AliTrackPointArray*[ntracks];
65 for (Int_t itrack = 0; itrack < ntracks; itrack++)
66 fVolArray[itrack] = fTrackArray[itrack] = 0x0;
69 for (Int_t ipar=0; ipar<6; ipar++){
70 fBFixed[ipar] = kFALSE;
75 //_____________________________________________________________________________
76 AliTrackResiduals::AliTrackResiduals(const AliTrackResiduals &res):
81 fVolArray(new AliTrackPointArray*[fN]),
82 fTrackArray(new AliTrackPointArray*[fN]),
85 fMinNPoints(res.fMinNPoints),
89 // By default the created copy owns the track point arrays
91 if(res.fAlignObj) fAlignObj = (AliAlignObj *)res.fAlignObj->Clone();
93 memset(fVolArray,0,sizeof(AliTrackPointArray*)*fN);
94 memset(fTrackArray,0,sizeof(AliTrackPointArray*)*fN);
96 for (Int_t itrack = 0; itrack < fN; itrack++) {
97 if (res.fVolArray[itrack])
98 fVolArray[itrack] = new AliTrackPointArray(*res.fVolArray[itrack]);
99 if (res.fTrackArray[itrack])
100 fTrackArray[itrack] = new AliTrackPointArray(*res.fTrackArray[itrack]);
103 memcpy(fBFixed,res.fBFixed,sizeof(Bool_t)*6);
104 memcpy(fFixed,res.fFixed,sizeof(Float_t)*6);
108 //_____________________________________________________________________________
109 AliTrackResiduals &AliTrackResiduals::operator =(const AliTrackResiduals& res)
111 // assignment operator
112 // Does not copy the track point arrays
114 TObject::operator=(res);
119 fAlignObj = (AliAlignObj *)res.fAlignObj->Clone();
125 for (Int_t itrack = 0; itrack < fN; itrack++)
126 delete fVolArray[itrack];
131 fVolArray = new AliTrackPointArray*[res.fN];
132 memset(fVolArray,0,sizeof(AliTrackPointArray*)*res.fN);
133 for (Int_t itrack = 0; itrack < res.fN; itrack++)
134 if (res.fVolArray[itrack])
135 fVolArray[itrack] = new AliTrackPointArray(*res.fVolArray[itrack]);
138 for (Int_t itrack = 0; itrack < fN; itrack++)
139 delete fTrackArray[itrack];
140 delete [] fTrackArray;
143 fTrackArray = new AliTrackPointArray*[res.fN];
144 memset(fTrackArray,0,sizeof(AliTrackPointArray*)*res.fN);
145 for (Int_t itrack = 0; itrack < res.fN; itrack++)
146 if (res.fTrackArray[itrack])
147 fTrackArray[itrack] = new AliTrackPointArray(*res.fTrackArray[itrack]);
150 fVolArray = res.fVolArray;
151 fTrackArray = res.fTrackArray;
156 fMinNPoints = res.fMinNPoints;
159 memcpy(fBFixed,res.fBFixed,sizeof(Bool_t)*6);
160 memcpy(fFixed,res.fFixed,sizeof(Float_t)*6);
165 //_____________________________________________________________________________
166 AliTrackResiduals::~AliTrackResiduals()
170 DeleteTrackPointArrays();
173 //_____________________________________________________________________________
174 void AliTrackResiduals::SetNTracks(Int_t ntracks)
176 // Set new size for the track point arrays.
177 // Delete the old arrays and allocate the
179 DeleteTrackPointArrays();
188 fVolArray = new AliTrackPointArray*[ntracks];
189 fTrackArray = new AliTrackPointArray*[ntracks];
190 for (Int_t itrack = 0; itrack < ntracks; itrack++)
191 fVolArray[itrack] = fTrackArray[itrack] = 0x0;
194 fVolArray = fTrackArray = 0x0;
198 //_____________________________________________________________________________
199 Bool_t AliTrackResiduals::AddTrackPointArrays(AliTrackPointArray *volarray, AliTrackPointArray *trackarray)
201 // Adds pair of track space point and
202 // track extrapolation point arrays
203 if (!fVolArray || !fTrackArray) return kFALSE;
205 if (!volarray || !trackarray) return kFALSE;
207 if (volarray->GetNPoints() < fMinNPoints) return kFALSE;
209 if (fLast >= fN) return kFALSE;
211 fVolArray[fLast] = volarray;
212 fTrackArray[fLast] = trackarray;
218 //_____________________________________________________________________________
219 void AliTrackResiduals::InitAlignObj()
221 // Create the alignment object
224 fAlignObj = new AliAlignObjParams;
228 //_____________________________________________________________________________
229 Bool_t AliTrackResiduals::GetTrackPointArrays(Int_t i, AliTrackPointArray* &volarray, AliTrackPointArray* &trackarray) const
231 // Provide an access to a pair of track point arrays
234 volarray = trackarray = 0x0;
238 volarray = fVolArray[i];
239 trackarray = fTrackArray[i];
244 //_____________________________________________________________________________
245 void AliTrackResiduals::DeleteTrackPointArrays()
247 // Deletes the track point arrays only in case
248 // the object is their owner.
249 // Called by the destructor and SetNTracks methods.
252 for (Int_t itrack = 0; itrack < fN; itrack++)
253 delete fVolArray[itrack];
257 for (Int_t itrack = 0; itrack < fN; itrack++)
258 delete fTrackArray[itrack];
259 delete [] fTrackArray;
264 //_____________________________________________________
265 Int_t AliTrackResiduals::GetNFreeParam(){
266 Int_t unfixedparam=6;
267 for(Int_t j=0;j<6;j++){
268 if(fBFixed[j]==kTRUE)unfixedparam--;