TGo4FitModel.h

Go to the documentation of this file.
00001 // $Id: TGo4FitModel.h 478 2009-10-29 12:26:09Z linev $
00002 //-----------------------------------------------------------------------
00003 //       The GSI Online Offline Object Oriented (Go4) Project
00004 //         Experiment Data Processing at EE department, GSI
00005 //-----------------------------------------------------------------------
00006 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
00007 //                     Planckstr. 1, 64291 Darmstadt, Germany
00008 // Contact:            http://go4.gsi.de
00009 //-----------------------------------------------------------------------
00010 // This software can be used under the license agreements as stated
00011 // in Go4License.txt file which is part of the distribution.
00012 //-----------------------------------------------------------------------
00013 
00014 #ifndef TGO4FITMODEL_H
00015 #define TGO4FITMODEL_H
00016 
00017 #include "TNamed.h"
00018 #include "TGo4FitComponent.h"
00019 
00020 class TGo4FitParameter;
00021 class TGo4FitData;
00022 class TGo4FitDataIter;
00023 
00027 class TGo4FitAssignment : public TNamed {
00028     public:
00029 
00033        TGo4FitAssignment();
00034 
00038        TGo4FitAssignment(const char* DataName);
00039 
00043        virtual ~TGo4FitAssignment();
00044 
00045        Double_t RatioValue();
00046 
00050        virtual void Print(Option_t* option) const;
00051 
00055        TGo4FitParameter* fxRatio;
00056 
00060        TGo4FitData* fxData;         
00061 
00065        Char_t* fxModelMask;         
00066 
00072        Double_t* fxModelBins;       
00073 
00074        ClassDef(TGo4FitAssignment,1);
00075 };
00076 
00077 
00081 class TGo4FitModel : public TGo4FitComponent {
00082    public:
00083 
00087       TGo4FitModel();
00088 
00094       TGo4FitModel(const char* iName, const char* iTitle, Bool_t MakeAmplitude = kFALSE);
00095 
00099       virtual ~TGo4FitModel();
00100 
00109       void SetGroupIndex(Int_t index = -1) { fiGroupIndex = index; }
00110 
00114       void SetBackgroundGroupIndex() { fiGroupIndex = 0; }
00115 
00119       Int_t GetGroupIndex() const { return fiGroupIndex; }
00120 
00124       Int_t NumAssigments() const { return fxAssigments.GetLast()+1; }
00125 
00129       const char* AssignmentName(Int_t n) { return GetAssigment(n) ? GetAssigment(n)->GetName() : 0; }
00130 
00136       void AssignToData(const char* DataName, Double_t RatioValue = 1., Bool_t FixRatio = kFALSE);
00137 
00141       Bool_t IsAssignTo(const char* DataName) const { return FindAssigment(DataName) != 0; }
00142 
00146       void ChangeDataNameInAssignments(const char* oldname, const char* newname);
00147 
00151       void ClearAssignmentTo(const char* DataName);
00152       void ClearAssigmentTo(const char* DataName) { ClearAssignmentTo(DataName); }
00153 
00157       void ClearAssignments();
00158 
00162       void ConnectToDataIfAssigned(TGo4FitData* data);
00163 
00168       Double_t GetRatioValueFor(const char* DataName);
00169 
00173       virtual void Print(Option_t* option) const;
00174 
00178       virtual Double_t Evaluate(Double_t x);
00179 
00183       virtual Double_t Evaluate(Double_t x, Double_t y);
00184 
00188       virtual Double_t Evaluate(Double_t x, Double_t y, Double_t z);
00189 
00193       virtual Double_t Evaluate(Double_t* v, Int_t ndim);
00194 
00198       virtual Double_t Integral();
00199 
00203       virtual Bool_t GetPosition(Int_t naxis, Double_t& pos);
00204 
00208       virtual Bool_t SetPosition(Int_t naxis, Double_t pos);
00209 
00213       virtual Bool_t GetWidth(Int_t naxis, Double_t& width);
00214 
00218       virtual Bool_t SetWidth(Int_t naxis, Double_t width);
00219 
00231       void SetIntegrationsProperty(Int_t iMinIntegrDepth, Int_t iMaxIntegrDepth = 0, Double_t iIntegrEps = 0., Bool_t iAbsoluteEps = kFALSE, Bool_t iIntegrScaling = kFALSE);
00232 
00236       Bool_t NeedIntegration() { return (fiMinIntegrDepth>0) || (fiMaxIntegrDepth>0); }
00237 
00242       virtual Bool_t BeforeEval(Int_t ndim);
00243 
00248       virtual Double_t EvalN(const Double_t* v);
00249 
00253       virtual void AfterEval() { return; }
00254 
00259       virtual Double_t EvaluateAtPoint(TGo4FitData* data, Int_t nbin, Bool_t UseRanges = kTRUE);
00260 
00264       virtual Double_t EvaluateAtPoint(TGo4FitDataIter* iter, Bool_t UseRanges = kTRUE);
00265 
00270       Bool_t AddModelToDataResult(TGo4FitData* data);
00271 
00272       virtual Int_t NumPars();
00273 
00274    protected:
00275 
00276       friend class TGo4Fitter;
00277 
00278 
00279       virtual TGo4FitParameter* Get(Int_t n);
00280 
00284       Double_t EvaluateAndIntegrate(Int_t NumScales, const Double_t* Scales, const Double_t* Widths);
00285 
00291       virtual Bool_t Initialize(Int_t UseBuffers = -1);
00292 
00296       virtual void Finalize();
00297 
00301       TGo4FitData* GetAssignedConnection(Int_t n);
00302 
00306       Bool_t BuffersAllocated() const;
00307 
00311       void RebuildShape(Bool_t ForceBuild = kFALSE);
00312 
00316       Double_t* GetModelBins(const char* DataName) const;
00317 
00321       void SetNeedToRebuild() { fbNeedToRebuild = kTRUE; }
00322 
00328       virtual Double_t UserFunction(Double_t*, Double_t*) { return 0; }
00329 
00333       virtual Int_t GetPosParIndex(Int_t) { return -1; }
00334 
00338       virtual Int_t GetWidthParIndex(Int_t) { return -1; }
00339 
00343       virtual TGo4FitParameter* GetPosPar(Int_t naxis = 0)
00344         { return Get(GetPosParIndex(naxis)); }
00345 
00349       virtual TGo4FitParameter* GetWidthPar(Int_t naxis = 0)
00350         { return Get(GetWidthParIndex(naxis)); }
00351 
00352       const Int_t* GetDataFullIndex(TGo4FitData* data, Int_t nbin);
00353       Int_t GetDataIndexesSize(TGo4FitData* data);
00354 
00358       Int_t fiMinIntegrDepth;
00359 
00363       Int_t fiMaxIntegrDepth;
00364 
00368       Double_t fdIntegrEps;
00369 
00373       Bool_t fbAbsoluteEps;
00374 
00378       Bool_t fbIntegrScaling;
00379 
00380    private:
00381 
00385       void RemoveAllPars();
00386 
00390       TGo4FitAssignment* GetAssigment(Int_t n) { return (TGo4FitAssignment*) fxAssigments[n]; }
00391       TGo4FitAssignment* GetAssigment(Int_t n) const { return (TGo4FitAssignment*) fxAssigments[n]; }
00392 
00396       TGo4FitAssignment* FindAssigment(const char* DataName) const;
00397 
00401       TString GetRatioName(Int_t n);
00402 
00406       TObjArray fxAssigments;
00407 
00411       Int_t fiGroupIndex;
00412 
00416       TArrayD fxCurrentPars;            
00417 
00421       Double_t* fxCurrentParsArray;     
00422 
00426       Bool_t fbNeedToRebuild;                 
00427 
00431       TGo4FitParsList* fxAllPars;              
00432 
00433       TArrayD* fxAllParsValues;                
00434 
00437       /*#  TGo4FitAssignment lnkTGo4FitModel; */
00438 
00439    ClassDef(TGo4FitModel,1)
00440 };
00441 #endif // TGO4FITMODEL_H

Generated on Thu Oct 28 15:54:12 2010 for Go4-Fitpackagev4.04-2 by  doxygen 1.5.1