TPC module
[u/mrichter/AliRoot.git] / TPC / TPCcalib / AliTPCFitPad.cxx
index 5094414..f8700a5 100644 (file)
 
 #include "AliTPCFitPad.h"
 
-ClassImp(AliTPCFitPad);
+ClassImp(AliTPCFitPad)
+
 
-AliTPCFitPad::~AliTPCFitPad() {
-   //
-   // Destructor.
-   //
 
-   Delete();
-}
 
 AliTPCFitPad::AliTPCFitPad(Int_t ndim, const char* formula, Option_t* opt) :
    AliTPCCalPadRegion("", ""),
@@ -49,20 +44,43 @@ AliTPCFitPad::AliTPCFitPad(Int_t ndim, const char* formula, Option_t* opt) :
    //
 }
 
-AliTPCFitPad& AliTPCFitPad::operator=(const AliTPCFitPad& rhs) {
+AliTPCFitPad& AliTPCFitPad::operator=(const AliTPCFitPad& rhs)
+{
+  //
+  // Assignment operator.
+  //
+  
+  if (this != &rhs) {
+    AliTPCCalPadRegion::operator=(rhs);
+    fNdim = rhs.fNdim;
+    fFormula = rhs.fFormula;
+    fOpt = rhs.fOpt;
+  }
+  return *this;
+}
+
+AliTPCFitPad::AliTPCFitPad(const AliTPCFitPad& rhs):
+  AliTPCCalPadRegion(rhs),
+  fNdim(rhs.fNdim),
+  fFormula(rhs.fFormula),
+  fOpt(rhs.fOpt)
+
+{
+  //
+  // Copy constructor
+  //
+}
+
+AliTPCFitPad::~AliTPCFitPad() {
    //
-   // Assignment operator.
+   // Destructor.
    //
 
-   if (this != &rhs) {
-      AliTPCCalPadRegion::operator=(rhs);
-      fNdim = rhs.fNdim;
-      fFormula = rhs.fFormula;
-      fOpt = rhs.fOpt;
-   }
-   return *this;
+   Delete();
 }
 
+
+
 void AliTPCFitPad::Add(AliTPCFitPad* fit) {
    //
    // Adds another AliTPCFitPad object to this object. The formula should be the
@@ -105,16 +123,18 @@ TLinearFitter* AliTPCFitPad::GetFitter(UInt_t segment, UInt_t padType, Bool_t wo
    //
 
    TLinearFitter* fitter = GetFitterSimple(segment, padType);
-   if (fitter == 0) {
-      SetObject(new TLinearFitter(fNdim, fFormula, fOpt), segment, padType);
-      fitter = (TLinearFitter*)(GetObject(segment, padType));
-      if (workaround) {
-         Double_t x[fNdim];
-         for (Int_t i = 0; i < fNdim; i++) x[i] = 3.141592;
-         fitter->AddPoint(x, 31.41592);
-         fitter->ClearPoints();
-         //cout << "workaround called for " << segment << ", " << padType << endl;
-      }
+   if (fitter == 0 || fitter->GetNumberTotalParameters() !=fNdim) {
+     fitter = new TLinearFitter(fNdim, fFormula, fOpt);
+     fitter->StoreData(kFALSE);
+     SetObject(fitter, segment, padType);
+     fitter = (TLinearFitter*)(GetObject(segment, padType));
+     if (workaround) {
+       Double_t x[1000];
+       for (Int_t i = 0; i < fNdim; i++) x[i] = 3.141592;
+       fitter->AddPoint(x, 31.41592);
+       fitter->ClearPoints();
+       //cout << "workaround called for " << segment << ", " << padType << endl;
+     }
    }
    return fitter;
 }