]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Changing constructors + Changes in order to reinitialize the object in case of PROOF
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 13 Jul 2008 14:29:04 +0000 (14:29 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 13 Jul 2008 14:29:04 +0000 (14:29 +0000)
(After streaming write -read not all data memebers - TLinearFitter  properly initialized)

(Marian Ivanov)

AliTPCFitPad.h
AliTPCCalPadRegion.h
AliTPCCalPadRegion.cxx
AliTPCFitPad.cxx

TPC/AliTPCCalPadRegion.cxx
TPC/AliTPCCalPadRegion.h
TPC/AliTPCFitPad.cxx
TPC/AliTPCFitPad.h

index 7bc94c0b6fd38f770039eaefdb1c57ca9b87c301..33dc3ea34d7b5499f75b331f21f06314853541e4 100644 (file)
@@ -55,6 +55,7 @@ AliTPCCalPadRegion::AliTPCCalPadRegion(const char *name, const char *title) :
    //
 
    fObjects = new TObjArray(fgkNSegments * fgkNPadTypes);
+   fObjects->SetOwner(kTRUE);
 }
 
 AliTPCCalPadRegion::AliTPCCalPadRegion(const AliTPCCalPadRegion& obj) :
@@ -66,6 +67,7 @@ AliTPCCalPadRegion::AliTPCCalPadRegion(const AliTPCCalPadRegion& obj) :
    //
 
    fObjects = new TObjArray(*(obj.fObjects));
+   fObjects->SetOwner(kTRUE);
 }
 
 AliTPCCalPadRegion& AliTPCCalPadRegion::operator=(const AliTPCCalPadRegion& rhs) {
@@ -80,6 +82,17 @@ AliTPCCalPadRegion& AliTPCCalPadRegion::operator=(const AliTPCCalPadRegion& rhs)
    return *this;
 }
 
+
+void       AliTPCCalPadRegion::SetObject(TObject* obj, UInt_t segment, UInt_t padType)
+{ 
+  if (BoundsOk("SetObject", segment, padType)){ 
+    if (segment+fgkNSegments*padType>fObjects->GetEntriesFast()) fObjects->Expand(2*(segment+fgkNSegments*padType));
+    fObjects->AddAt(obj, segment+fgkNSegments*padType); 
+  }
+}
+
+
+
 void AliTPCCalPadRegion::GetPadRegionCenterLocal(UInt_t padType, Double_t* xy) {
    //
    // Return the center of the pad size region in local
index 30e5031600a77fbb8888c6f18c616d4baac98f3a..f2d1cd141654350f03193e480ea3213d3f1c8b40 100644 (file)
@@ -20,8 +20,7 @@ public:
    
    virtual TObject*   GetObject(UInt_t segment, UInt_t padType)
       { return BoundsOk("GetObject", segment, padType) ? fObjects->At(segment+fgkNSegments*padType) : 0x0; }
-   virtual void       SetObject(TObject* obj, UInt_t segment, UInt_t padType)
-      { if (BoundsOk("SetObject", segment, padType)) fObjects->AddAt(obj, segment+fgkNSegments*padType); }
+  virtual void       SetObject(TObject* obj, UInt_t segment, UInt_t padType);
   virtual void       Delete(Option_t* option = "") { if (fObjects) fObjects->Delete(option); }
    virtual TIterator* MakeIterator(Bool_t direction = kIterForward) const { return fObjects->MakeIterator(direction); }
    static  UInt_t     GetNSegments() { return fgkNSegments; }
index 9855feb0ad18b320bef606c6e8d743abf2b27a02..5fb6e9edfb26f0af789da39ca799a734ff21c288 100644 (file)
@@ -111,16 +111,17 @@ 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[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;
-      }
+   if (fitter == 0 || fitter->GetNumberTotalParameters() !=fNdim) {
+     fitter = new TLinearFitter(fNdim, fFormula, fOpt);
+     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;
 }
index 39d3f3ca3506ebd6964592c885eae68eef179076..a15e82ae78f61d7907e31730300817eed7cbff64 100644 (file)
@@ -16,7 +16,7 @@ class TString;
 class AliTPCFitPad: public AliTPCCalPadRegion {
 public:
   AliTPCFitPad() : AliTPCCalPadRegion(), fNdim(0), fFormula(0), fOpt(0) {}   
-   AliTPCFitPad(const AliTPCFitPad& obj) : AliTPCCalPadRegion(obj), fNdim(obj.fNdim), fFormula(obj.fFormula), fOpt(obj.fOpt) { }
+  AliTPCFitPad(const AliTPCFitPad& obj);
    AliTPCFitPad(Int_t ndim, const char* formula, Option_t* opt = "D");
    AliTPCFitPad& operator=(const AliTPCFitPad& rhs);
    virtual ~AliTPCFitPad();
@@ -26,7 +26,7 @@ public:
    TLinearFitter* GetFitterSimple(UInt_t segment, UInt_t padType);
    Int_t          Evaluate(Bool_t robust = kFALSE, Double_t frac = -1.);
 
-protected:
+public:
    Int_t   fNdim;         // used for generating new TLinearFitter objects
    TString fFormula;      // used for generating new TLinearFitter objects
    TString fOpt;          // used for generating new TLinearFitter objects