]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTrackResiduals.cxx
change TH1 status bit for expert, QA and image that were overlapping with other TH1...
[u/mrichter/AliRoot.git] / STEER / AliTrackResiduals.cxx
index 4604fd6b7965ceda2bd914d2a85468c4cbe01040..4d0e7342768f07bd2b686f35ab8b9a813e1802a1 100644 (file)
@@ -22,6 +22,7 @@
 #include "AliTrackResiduals.h"
 
 #include "AliAlignObj.h"
+#include "AliAlignObjParams.h"
 #include "AliTrackPointArray.h"
 
 ClassImp(AliTrackResiduals)
@@ -30,18 +31,31 @@ ClassImp(AliTrackResiduals)
 AliTrackResiduals::AliTrackResiduals():
   fN(0),
   fLast(0),
+  fAlignObj(0),
+  fVolArray(0),
+  fTrackArray(0),
+  fChi2(0),
+  fNdf(0),
+  fMinNPoints(0),
   fIsOwner(kTRUE)
 {
   // Default constructor
-  fAlignObj = 0x0;
-  fVolArray = fTrackArray = 0x0;
+  for (Int_t ipar=0; ipar<6; ipar++){
+    fBFixed[ipar] = kFALSE;
+    fFixed[ipar]  = 0.;
+  }  
 }
 
 //_____________________________________________________________________________
-AliTrackResiduals::AliTrackResiduals(Int_t ntracks, AliAlignObj *alignobj):
+AliTrackResiduals::AliTrackResiduals(Int_t ntracks):
   fN(ntracks),
   fLast(0),
-  fAlignObj(alignobj),
+  fAlignObj(0),
+  fVolArray(0),
+  fTrackArray(0),
+  fChi2(0),
+  fNdf(0),
+  fMinNPoints(0),
   fIsOwner(kTRUE)
 {
   // Constructor
@@ -51,6 +65,11 @@ AliTrackResiduals::AliTrackResiduals(Int_t ntracks, AliAlignObj *alignobj):
     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.;
+  }  
 }
 
 //_____________________________________________________________________________
@@ -58,11 +77,19 @@ AliTrackResiduals::AliTrackResiduals(const AliTrackResiduals &res):
   TObject(res),
   fN(res.fN),
   fLast(res.fLast),
-  fAlignObj(res.fAlignObj),
+  fAlignObj(0),
+  fVolArray(0),
+  fTrackArray(0),
+  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();
+
   if (fN > 0) {
     fVolArray = new AliTrackPointArray*[fN];
     fTrackArray = new AliTrackPointArray*[fN];
@@ -78,6 +105,10 @@ AliTrackResiduals::AliTrackResiduals(const AliTrackResiduals &res):
          fTrackArray = 0x0;
       }
   }
+  for(Int_t i=0;i<6;i++) { 
+    fBFixed[i]=res.fBFixed[i];
+    fFixed[i]=res.fFixed[i];
+  }
 }
 
 //_____________________________________________________________________________
@@ -90,12 +121,20 @@ AliTrackResiduals &AliTrackResiduals::operator =(const AliTrackResiduals& res)
 
   fN = res.fN;
   fLast = res.fLast;
+  fChi2 = res.fChi2;
+  fNdf  = res.fNdf;
+  fMinNPoints = res.fMinNPoints;
   fIsOwner = kFALSE;
   fAlignObj = res.fAlignObj;
 
   fVolArray = res.fVolArray;
   fTrackArray = res.fTrackArray;
 
+  for(Int_t i=0;i<6;i++) { 
+    fBFixed[i]=res.fBFixed[i];
+    fFixed[i]=res.fFixed[i];
+  }
+
   return *this;
 }
 
@@ -103,6 +142,7 @@ AliTrackResiduals &AliTrackResiduals::operator =(const AliTrackResiduals& res)
 AliTrackResiduals::~AliTrackResiduals()
 {
   // Destructor
+  if (fAlignObj) delete fAlignObj;
   DeleteTrackPointArrays();
 }
 
@@ -116,6 +156,8 @@ void AliTrackResiduals::SetNTracks(Int_t ntracks)
 
   fN = ntracks;
   fLast = 0;
+  fChi2 = 0;
+  fNdf  = 0;
   fIsOwner = kTRUE;
 
   if (ntracks > 0) {
@@ -124,6 +166,9 @@ void AliTrackResiduals::SetNTracks(Int_t ntracks)
     for (Int_t itrack = 0; itrack < ntracks; itrack++)
       fVolArray[itrack] = fTrackArray[itrack] = 0x0;
   }
+  else {
+    fVolArray = fTrackArray = 0x0;
+  }
 }
 
 //_____________________________________________________________________________
@@ -133,6 +178,10 @@ Bool_t AliTrackResiduals::AddTrackPointArrays(AliTrackPointArray *volarray, AliT
   // 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;
@@ -142,6 +191,16 @@ Bool_t AliTrackResiduals::AddTrackPointArrays(AliTrackPointArray *volarray, AliT
   return kTRUE;
 }
 
+//_____________________________________________________________________________
+void AliTrackResiduals::InitAlignObj()
+{
+  // Create the alignment object 
+  // to be updated
+  if (fAlignObj) delete fAlignObj;
+  fAlignObj = new AliAlignObjParams;
+}
+
+
 //_____________________________________________________________________________
 Bool_t AliTrackResiduals::GetTrackPointArrays(Int_t i, AliTrackPointArray* &volarray, AliTrackPointArray* &trackarray) const
 {
@@ -165,12 +224,26 @@ void AliTrackResiduals::DeleteTrackPointArrays()
   // the object is their owner.
   // Called by the destructor and SetNTracks methods.
   if (fIsOwner) {
-    for (Int_t itrack = 0; itrack < fLast; itrack++)
-      {
-       delete fVolArray[itrack];
-       delete fTrackArray[itrack];
+    if (fVolArray) {
+      for (Int_t itrack = 0; itrack < fN; itrack++) {
+       if (fVolArray[itrack]) delete fVolArray[itrack];
       }
-    delete [] fVolArray;
-    delete [] fTrackArray;
+      delete [] fVolArray;
+    }
+    if (fTrackArray) {
+      for (Int_t itrack = 0; itrack < fN; itrack++) {
+       if (fTrackArray[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;
 }