GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4FitModelFromData.cxx
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
15
16#include <iostream>
17
19
21
22TGo4FitModelFromData::TGo4FitModelFromData(const char *iName, TGo4FitData *iDataAsModel, Bool_t Amplitude)
23 : TGo4FitModel(iName, "data used as model", Amplitude),
24 fxData("forModel", "Data, used to represent model component", this, TGo4FitData::Class(), kTRUE, iDataAsModel,
25 kTRUE)
26{
27}
28
29TGo4FitModelFromData::TGo4FitModelFromData(const char *iName, TH1 *histo, Bool_t iOwned, Bool_t Amplitude)
30 : TGo4FitModel(iName, "data used as model", Amplitude),
31 fxData("forModel", "Data, used to represent model component", this, TGo4FitData::Class(), kTRUE)
32{
33 SetDataAsModel(new TGo4FitDataHistogram("Histogram", histo, iOwned), kTRUE);
34}
35
39
41{
42 return dynamic_cast<TGo4FitData *>(fxData.GetObject());
43}
44
46{
47 fxData.SetObject(iData, iOwned);
49}
50
51Bool_t TGo4FitModelFromData::Initialize(Int_t UseBuffers)
52{
53 if (!GetDataAsModel())
54 return kFALSE;
55
56 for (Int_t n = 0; n < NumAssigments(); n++)
58 if (!GetAssignedConnection(n)->IsCompatibleData(GetDataAsModel())) {
59 std::cout << "TGo4FitModelFromData: incompatible data used for model" << std::endl;
60 return kFALSE;
61 }
62
63 return TGo4FitModel::Initialize(UseBuffers);
64}
65
67{
68 fxIter.reset();
69
70 if (!GetDataAsModel())
71 return kFALSE;
73 if (!fxIter)
74 return kFALSE;
75 return fxIter->Reset(kFALSE);
76}
77
78Double_t TGo4FitModelFromData::EvaluateAtPoint(TGo4FitData *data, Int_t nbin, Bool_t UseRanges)
79{
80 return data ? FindDataPoint(GetDataIndexesSize(data), GetDataFullIndex(data, nbin)) : 0.;
81}
82
83Double_t TGo4FitModelFromData::EvaluateAtPoint(std::unique_ptr<TGo4FitDataIter> &iter, Bool_t UseRanges)
84{
85 return iter ? FindDataPoint(iter->IndexesSize(), iter->Indexes()) : 0.;
86}
87
89{
90 fxIter.reset();
91}
92
93void TGo4FitModelFromData::FillSlotList(TSeqCollection *list)
94{
96 list->Add(&fxData);
97 if (GetDataAsModel())
99}
100
101void TGo4FitModelFromData::Print(Option_t *option) const
102{
103 TGo4FitModel::Print(option);
104 std::cout << "Model driven from data" << std::endl;
105 if (GetDataAsModel())
106 GetDataAsModel()->Print(option);
107}
108
109Double_t TGo4FitModelFromData::FindDataPoint(Int_t NumIndexes, const Int_t *Indexes)
110{
111 if (!fxIter || fxIter->ReachEnd() || !Indexes || (NumIndexes != fxIter->IndexesSize()))
112 return 0.;
113 Int_t num = NumIndexes - 1;
114 while (num >= 0) {
115 if (fxIter->Indexes()[num] == Indexes[num]) {
116 num--;
117 continue;
118 } else if (fxIter->Indexes()[num] > Indexes[num])
119 return 0.;
120 else if (!fxIter->Next(kFALSE))
121 return 0.;
122 }
123 return fxIter->Value();
124}
Data objects, which provides access to generic TH1 ROOT histogram.
Basic abstract class for representing data, which should be fitted.
Definition TGo4FitData.h:39
void FillSlotList(TSeqCollection *list) override
Copy pointers on all slots of data object to list.
virtual std::unique_ptr< TGo4FitDataIter > MakeIter()
Creates iterator for data object.
void Print(Option_t *option="") const override
Display information about data object on standard output.
~TGo4FitModelFromData()
Destroy TGo4FitModelFromData object.
void AfterEval() override
Clear buffers, which were created by BeforeEval() method.
Bool_t Initialize(Int_t UseBuffers=-1) override
Initialize object.
void FillSlotList(TSeqCollection *list) override
Add pointer on slot, which should contain TGo4FitData object, to a slots list.
TGo4FitModelFromData()
Default constructor.
void SetDataAsModel(TGo4FitData *iData, Bool_t iOwned)
Sets pointer on TGo4FitData object with ownership flag.
Bool_t BeforeEval(Int_t) override
Prepares (if necessary) some intermediate variables to be able calculate values of model via EvalN() ...
Double_t FindDataPoint(Int_t NumIndexes, const Int_t *Indexes)
void Print(Option_t *option="") const override
Print information on standard output.
std::unique_ptr< TGo4FitDataIter > fxIter
Double_t EvaluateAtPoint(TGo4FitData *data, Int_t nbin, Bool_t UseRanges=kTRUE) override
Evaluate model value for specified data point.
TGo4FitData * GetDataAsModel() const
Return pointer on TGo4FitData object, which is used as model component.
TGo4FitSlot fxData
Slot for TGo4FitData object, which is used as model component.
virtual Bool_t Initialize(Int_t UseBuffers=-1)
Initialize model object.
void Print(Option_t *option="") const override
Print information about model object on standard output.
Int_t GetDataIndexesSize(TGo4FitData *data)
const Int_t * GetDataFullIndex(TGo4FitData *data, Int_t nbin)
TGo4FitModel()
Default constructor.
TGo4FitData * GetAssignedConnection(Int_t n)
Return pointer on assigned data.
Int_t NumAssigments() const
Returns number of assignment for this model.
virtual void FillSlotList(TSeqCollection *lst)
Fill list of TGo4FitSlot objects to provided collection.
void SetUpdateSlotList()
Update internal list of slots (if exists).