ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-----------------------------------------------------------------
//   Implementation of the base class for track residuals
//
//
//-----------------------------------------------------------------

#include "AliTrackResiduals.h"

#include "AliAlignObj.h"
#include "AliAlignObjParams.h"
#include "AliTrackPointArray.h"

ClassImp(AliTrackResiduals)

//_____________________________________________________________________________
AliTrackResiduals::AliTrackResiduals():
  fN(0),
  fLast(0),
  fAlignObj(0),
  fVolArray(0),
  fTrackArray(0),
  fChi2(0),
  fNdf(0),
  fMinNPoints(0),
  fIsOwner(kTRUE)
{
  // Default constructor
  for (Int_t ipar=0; ipar<6; ipar++){
    fBFixed[ipar] = kFALSE;
    fFixed[ipar]  = 0.;
  }  
}

//_____________________________________________________________________________
AliTrackResiduals::AliTrackResiduals(Int_t ntracks):
  fN(ntracks),
  fLast(0),
  fAlignObj(0),
  fVolArray(0),
  fTrackArray(0),
  fChi2(0),
  fNdf(0),
  fMinNPoints(0),
  fIsOwner(kTRUE)
{
  // Constructor
  if (ntracks > 0) {
    fVolArray = new AliTrackPointArray*[ntracks];
    fTrackArray = new AliTrackPointArray*[ntracks];
    for (Int_t itrack = 0; itrack < ntracks; itrack++)
      fVolArray[itrack] = fTrackArray[itrack] = 0x0;
  }

  for (Int_t ipar=0; ipar<6; ipar++){
    fBFixed[ipar] = kFALSE;
    fFixed[ipar]  = 0.;
  }  
}

//_____________________________________________________________________________
AliTrackResiduals::AliTrackResiduals(const AliTrackResiduals &res):
  TObject(res),
  fN(res.fN),
  fLast(res.fLast),
  fAlignObj(0),
  fVolArray(new AliTrackPointArray*[fN]),
  fTrackArray(new AliTrackPointArray*[fN]),
  fChi2(res.fChi2),
  fNdf(res.fNdf),
  fMinNPoints(res.fMinNPoints),
  fIsOwner(kTRUE)
{
  // Copy constructor
  // By default the created copy owns the track point arrays

  if(res.fAlignObj) fAlignObj = (AliAlignObj *)res.fAlignObj->Clone();

  memset(fVolArray,0,sizeof(AliTrackPointArray*)*fN);
  memset(fTrackArray,0,sizeof(AliTrackPointArray*)*fN);

  for (Int_t itrack = 0; itrack < fN; itrack++) {
    if (res.fVolArray[itrack])
      fVolArray[itrack] = new AliTrackPointArray(*res.fVolArray[itrack]);
    if (res.fTrackArray[itrack])
      fTrackArray[itrack] = new AliTrackPointArray(*res.fTrackArray[itrack]);
  }

  memcpy(fBFixed,res.fBFixed,sizeof(Bool_t)*6);
  memcpy(fFixed,res.fFixed,sizeof(Float_t)*6);

}

//_____________________________________________________________________________
AliTrackResiduals &AliTrackResiduals::operator =(const AliTrackResiduals& res)
{
  // assignment operator
  // Does not copy the track point arrays
  if(this!=&res) {
    TObject::operator=(res);
    
    fLast = res.fLast;
    delete fAlignObj;
    if(res.fAlignObj) 
      fAlignObj = (AliAlignObj *)res.fAlignObj->Clone();
    else
      fAlignObj = 0;
      
    if (fIsOwner) {
      if (fVolArray) {
	for (Int_t itrack = 0; itrack < fN; itrack++) 
	  delete fVolArray[itrack];
	delete [] fVolArray;
	fVolArray=0;
      }
      if(res.fN) {
	fVolArray = new AliTrackPointArray*[res.fN];
	memset(fVolArray,0,sizeof(AliTrackPointArray*)*res.fN);
	for (Int_t itrack = 0; itrack < res.fN; itrack++) 
	  if (res.fVolArray[itrack])
	    fVolArray[itrack] = new AliTrackPointArray(*res.fVolArray[itrack]);
      }
      if (fTrackArray) {
	for (Int_t itrack = 0; itrack < fN; itrack++) 
	  delete fTrackArray[itrack];
	delete [] fTrackArray;
      }
      if(res.fN) {
	fTrackArray = new AliTrackPointArray*[res.fN];
	memset(fTrackArray,0,sizeof(AliTrackPointArray*)*res.fN);
	for (Int_t itrack = 0; itrack < res.fN; itrack++) 
	  if (res.fTrackArray[itrack])
	    fTrackArray[itrack] = new AliTrackPointArray(*res.fTrackArray[itrack]);
      }
    } else {
      fVolArray = res.fVolArray;
      fTrackArray = res.fTrackArray;
    }
    fN = res.fN;
    fChi2 = res.fChi2;
    fNdf  = res.fNdf;
    fMinNPoints = res.fMinNPoints;
    fIsOwner = kFALSE;

    memcpy(fBFixed,res.fBFixed,sizeof(Bool_t)*6);
    memcpy(fFixed,res.fFixed,sizeof(Float_t)*6);
  }
  return *this;
}

//_____________________________________________________________________________
AliTrackResiduals::~AliTrackResiduals()
{
  // Destructor
  delete fAlignObj;
  DeleteTrackPointArrays();
}

//_____________________________________________________________________________
void AliTrackResiduals::SetNTracks(Int_t ntracks)
{
  // Set new size for the track point arrays.
  // Delete the old arrays and allocate the
  // new ones.
  DeleteTrackPointArrays();

  fN = ntracks;
  fLast = 0;
  fChi2 = 0;
  fNdf  = 0;
  fIsOwner = kTRUE;

  if (ntracks > 0) {
    fVolArray = new AliTrackPointArray*[ntracks];
    fTrackArray = new AliTrackPointArray*[ntracks];
    for (Int_t itrack = 0; itrack < ntracks; itrack++)
      fVolArray[itrack] = fTrackArray[itrack] = 0x0;
  }
  else {
    fVolArray = fTrackArray = 0x0;
  }
}

//_____________________________________________________________________________
Bool_t AliTrackResiduals::AddTrackPointArrays(AliTrackPointArray *volarray, AliTrackPointArray *trackarray)
{
  // Adds pair of track space point and
  // track extrapolation point arrays
  if (!fVolArray || !fTrackArray) return kFALSE;

  if (!volarray || !trackarray) return kFALSE;

  if (volarray->GetNPoints() < fMinNPoints) return kFALSE;

  if (fLast >= fN) return kFALSE;

  fVolArray[fLast] = volarray;
  fTrackArray[fLast] = trackarray;
  fLast++;

  return kTRUE;
}

//_____________________________________________________________________________
void AliTrackResiduals::InitAlignObj()
{
  // Create the alignment object 
  // to be updated
  delete fAlignObj;
  fAlignObj = new AliAlignObjParams;
}


//_____________________________________________________________________________
Bool_t AliTrackResiduals::GetTrackPointArrays(Int_t i, AliTrackPointArray* &volarray, AliTrackPointArray* &trackarray) const
{
  // Provide an access to a pair of track point arrays
  // with given index
  if (i >= fLast) {
    volarray = trackarray = 0x0;
    return kFALSE;
  }
  else {
    volarray = fVolArray[i];
    trackarray = fTrackArray[i];
    return kTRUE;
  }
}

//_____________________________________________________________________________
void AliTrackResiduals::DeleteTrackPointArrays()
{
  // Deletes the track point arrays only in case
  // the object is their owner.
  // Called by the destructor and SetNTracks methods.
  if (fIsOwner) {
    if (fVolArray) {
      for (Int_t itrack = 0; itrack < fN; itrack++) 
	delete fVolArray[itrack];
      delete [] fVolArray;
    }
    if (fTrackArray) {
      for (Int_t itrack = 0; itrack < fN; itrack++) 
	delete fTrackArray[itrack];
      delete [] fTrackArray;
    }
  }
}

//_____________________________________________________
Int_t AliTrackResiduals::GetNFreeParam(){ 
  Int_t unfixedparam=6;
  for(Int_t j=0;j<6;j++){
    if(fBFixed[j]==kTRUE)unfixedparam--;
  }
  return unfixedparam;
}
 AliTrackResiduals.cxx:1
 AliTrackResiduals.cxx:2
 AliTrackResiduals.cxx:3
 AliTrackResiduals.cxx:4
 AliTrackResiduals.cxx:5
 AliTrackResiduals.cxx:6
 AliTrackResiduals.cxx:7
 AliTrackResiduals.cxx:8
 AliTrackResiduals.cxx:9
 AliTrackResiduals.cxx:10
 AliTrackResiduals.cxx:11
 AliTrackResiduals.cxx:12
 AliTrackResiduals.cxx:13
 AliTrackResiduals.cxx:14
 AliTrackResiduals.cxx:15
 AliTrackResiduals.cxx:16
 AliTrackResiduals.cxx:17
 AliTrackResiduals.cxx:18
 AliTrackResiduals.cxx:19
 AliTrackResiduals.cxx:20
 AliTrackResiduals.cxx:21
 AliTrackResiduals.cxx:22
 AliTrackResiduals.cxx:23
 AliTrackResiduals.cxx:24
 AliTrackResiduals.cxx:25
 AliTrackResiduals.cxx:26
 AliTrackResiduals.cxx:27
 AliTrackResiduals.cxx:28
 AliTrackResiduals.cxx:29
 AliTrackResiduals.cxx:30
 AliTrackResiduals.cxx:31
 AliTrackResiduals.cxx:32
 AliTrackResiduals.cxx:33
 AliTrackResiduals.cxx:34
 AliTrackResiduals.cxx:35
 AliTrackResiduals.cxx:36
 AliTrackResiduals.cxx:37
 AliTrackResiduals.cxx:38
 AliTrackResiduals.cxx:39
 AliTrackResiduals.cxx:40
 AliTrackResiduals.cxx:41
 AliTrackResiduals.cxx:42
 AliTrackResiduals.cxx:43
 AliTrackResiduals.cxx:44
 AliTrackResiduals.cxx:45
 AliTrackResiduals.cxx:46
 AliTrackResiduals.cxx:47
 AliTrackResiduals.cxx:48
 AliTrackResiduals.cxx:49
 AliTrackResiduals.cxx:50
 AliTrackResiduals.cxx:51
 AliTrackResiduals.cxx:52
 AliTrackResiduals.cxx:53
 AliTrackResiduals.cxx:54
 AliTrackResiduals.cxx:55
 AliTrackResiduals.cxx:56
 AliTrackResiduals.cxx:57
 AliTrackResiduals.cxx:58
 AliTrackResiduals.cxx:59
 AliTrackResiduals.cxx:60
 AliTrackResiduals.cxx:61
 AliTrackResiduals.cxx:62
 AliTrackResiduals.cxx:63
 AliTrackResiduals.cxx:64
 AliTrackResiduals.cxx:65
 AliTrackResiduals.cxx:66
 AliTrackResiduals.cxx:67
 AliTrackResiduals.cxx:68
 AliTrackResiduals.cxx:69
 AliTrackResiduals.cxx:70
 AliTrackResiduals.cxx:71
 AliTrackResiduals.cxx:72
 AliTrackResiduals.cxx:73
 AliTrackResiduals.cxx:74
 AliTrackResiduals.cxx:75
 AliTrackResiduals.cxx:76
 AliTrackResiduals.cxx:77
 AliTrackResiduals.cxx:78
 AliTrackResiduals.cxx:79
 AliTrackResiduals.cxx:80
 AliTrackResiduals.cxx:81
 AliTrackResiduals.cxx:82
 AliTrackResiduals.cxx:83
 AliTrackResiduals.cxx:84
 AliTrackResiduals.cxx:85
 AliTrackResiduals.cxx:86
 AliTrackResiduals.cxx:87
 AliTrackResiduals.cxx:88
 AliTrackResiduals.cxx:89
 AliTrackResiduals.cxx:90
 AliTrackResiduals.cxx:91
 AliTrackResiduals.cxx:92
 AliTrackResiduals.cxx:93
 AliTrackResiduals.cxx:94
 AliTrackResiduals.cxx:95
 AliTrackResiduals.cxx:96
 AliTrackResiduals.cxx:97
 AliTrackResiduals.cxx:98
 AliTrackResiduals.cxx:99
 AliTrackResiduals.cxx:100
 AliTrackResiduals.cxx:101
 AliTrackResiduals.cxx:102
 AliTrackResiduals.cxx:103
 AliTrackResiduals.cxx:104
 AliTrackResiduals.cxx:105
 AliTrackResiduals.cxx:106
 AliTrackResiduals.cxx:107
 AliTrackResiduals.cxx:108
 AliTrackResiduals.cxx:109
 AliTrackResiduals.cxx:110
 AliTrackResiduals.cxx:111
 AliTrackResiduals.cxx:112
 AliTrackResiduals.cxx:113
 AliTrackResiduals.cxx:114
 AliTrackResiduals.cxx:115
 AliTrackResiduals.cxx:116
 AliTrackResiduals.cxx:117
 AliTrackResiduals.cxx:118
 AliTrackResiduals.cxx:119
 AliTrackResiduals.cxx:120
 AliTrackResiduals.cxx:121
 AliTrackResiduals.cxx:122
 AliTrackResiduals.cxx:123
 AliTrackResiduals.cxx:124
 AliTrackResiduals.cxx:125
 AliTrackResiduals.cxx:126
 AliTrackResiduals.cxx:127
 AliTrackResiduals.cxx:128
 AliTrackResiduals.cxx:129
 AliTrackResiduals.cxx:130
 AliTrackResiduals.cxx:131
 AliTrackResiduals.cxx:132
 AliTrackResiduals.cxx:133
 AliTrackResiduals.cxx:134
 AliTrackResiduals.cxx:135
 AliTrackResiduals.cxx:136
 AliTrackResiduals.cxx:137
 AliTrackResiduals.cxx:138
 AliTrackResiduals.cxx:139
 AliTrackResiduals.cxx:140
 AliTrackResiduals.cxx:141
 AliTrackResiduals.cxx:142
 AliTrackResiduals.cxx:143
 AliTrackResiduals.cxx:144
 AliTrackResiduals.cxx:145
 AliTrackResiduals.cxx:146
 AliTrackResiduals.cxx:147
 AliTrackResiduals.cxx:148
 AliTrackResiduals.cxx:149
 AliTrackResiduals.cxx:150
 AliTrackResiduals.cxx:151
 AliTrackResiduals.cxx:152
 AliTrackResiduals.cxx:153
 AliTrackResiduals.cxx:154
 AliTrackResiduals.cxx:155
 AliTrackResiduals.cxx:156
 AliTrackResiduals.cxx:157
 AliTrackResiduals.cxx:158
 AliTrackResiduals.cxx:159
 AliTrackResiduals.cxx:160
 AliTrackResiduals.cxx:161
 AliTrackResiduals.cxx:162
 AliTrackResiduals.cxx:163
 AliTrackResiduals.cxx:164
 AliTrackResiduals.cxx:165
 AliTrackResiduals.cxx:166
 AliTrackResiduals.cxx:167
 AliTrackResiduals.cxx:168
 AliTrackResiduals.cxx:169
 AliTrackResiduals.cxx:170
 AliTrackResiduals.cxx:171
 AliTrackResiduals.cxx:172
 AliTrackResiduals.cxx:173
 AliTrackResiduals.cxx:174
 AliTrackResiduals.cxx:175
 AliTrackResiduals.cxx:176
 AliTrackResiduals.cxx:177
 AliTrackResiduals.cxx:178
 AliTrackResiduals.cxx:179
 AliTrackResiduals.cxx:180
 AliTrackResiduals.cxx:181
 AliTrackResiduals.cxx:182
 AliTrackResiduals.cxx:183
 AliTrackResiduals.cxx:184
 AliTrackResiduals.cxx:185
 AliTrackResiduals.cxx:186
 AliTrackResiduals.cxx:187
 AliTrackResiduals.cxx:188
 AliTrackResiduals.cxx:189
 AliTrackResiduals.cxx:190
 AliTrackResiduals.cxx:191
 AliTrackResiduals.cxx:192
 AliTrackResiduals.cxx:193
 AliTrackResiduals.cxx:194
 AliTrackResiduals.cxx:195
 AliTrackResiduals.cxx:196
 AliTrackResiduals.cxx:197
 AliTrackResiduals.cxx:198
 AliTrackResiduals.cxx:199
 AliTrackResiduals.cxx:200
 AliTrackResiduals.cxx:201
 AliTrackResiduals.cxx:202
 AliTrackResiduals.cxx:203
 AliTrackResiduals.cxx:204
 AliTrackResiduals.cxx:205
 AliTrackResiduals.cxx:206
 AliTrackResiduals.cxx:207
 AliTrackResiduals.cxx:208
 AliTrackResiduals.cxx:209
 AliTrackResiduals.cxx:210
 AliTrackResiduals.cxx:211
 AliTrackResiduals.cxx:212
 AliTrackResiduals.cxx:213
 AliTrackResiduals.cxx:214
 AliTrackResiduals.cxx:215
 AliTrackResiduals.cxx:216
 AliTrackResiduals.cxx:217
 AliTrackResiduals.cxx:218
 AliTrackResiduals.cxx:219
 AliTrackResiduals.cxx:220
 AliTrackResiduals.cxx:221
 AliTrackResiduals.cxx:222
 AliTrackResiduals.cxx:223
 AliTrackResiduals.cxx:224
 AliTrackResiduals.cxx:225
 AliTrackResiduals.cxx:226
 AliTrackResiduals.cxx:227
 AliTrackResiduals.cxx:228
 AliTrackResiduals.cxx:229
 AliTrackResiduals.cxx:230
 AliTrackResiduals.cxx:231
 AliTrackResiduals.cxx:232
 AliTrackResiduals.cxx:233
 AliTrackResiduals.cxx:234
 AliTrackResiduals.cxx:235
 AliTrackResiduals.cxx:236
 AliTrackResiduals.cxx:237
 AliTrackResiduals.cxx:238
 AliTrackResiduals.cxx:239
 AliTrackResiduals.cxx:240
 AliTrackResiduals.cxx:241
 AliTrackResiduals.cxx:242
 AliTrackResiduals.cxx:243
 AliTrackResiduals.cxx:244
 AliTrackResiduals.cxx:245
 AliTrackResiduals.cxx:246
 AliTrackResiduals.cxx:247
 AliTrackResiduals.cxx:248
 AliTrackResiduals.cxx:249
 AliTrackResiduals.cxx:250
 AliTrackResiduals.cxx:251
 AliTrackResiduals.cxx:252
 AliTrackResiduals.cxx:253
 AliTrackResiduals.cxx:254
 AliTrackResiduals.cxx:255
 AliTrackResiduals.cxx:256
 AliTrackResiduals.cxx:257
 AliTrackResiduals.cxx:258
 AliTrackResiduals.cxx:259
 AliTrackResiduals.cxx:260
 AliTrackResiduals.cxx:261
 AliTrackResiduals.cxx:262
 AliTrackResiduals.cxx:263
 AliTrackResiduals.cxx:264
 AliTrackResiduals.cxx:265
 AliTrackResiduals.cxx:266
 AliTrackResiduals.cxx:267
 AliTrackResiduals.cxx:268
 AliTrackResiduals.cxx:269
 AliTrackResiduals.cxx:270
 AliTrackResiduals.cxx:271