GSI Object Oriented Online Offline (Go4)  GO4-6.3.0
TGo4FitModel.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 
14 #include "TGo4FitModel.h"
15 
16 #include <iostream>
17 
18 #include "TBuffer.h"
19 #include "TArrayD.h"
20 #include "TArrayI.h"
21 #include "TClass.h"
22 
23 #include "TGo4FitData.h"
24 #include "TGo4FitParameter.h"
25 
27 
28 TGo4FitAssignment::TGo4FitAssignment(const char *DataName) : TNamed(DataName, "")
29 {
30 }
31 
33 {
34  if (fxRatio)
35  delete fxRatio;
36  if (fxModelMask)
37  delete[] fxModelMask;
38  if (fxModelBins)
39  delete[] fxModelBins;
40 }
41 
43 {
44  return !fxRatio ? 1. : fxRatio->GetValue();
45 }
46 
47 void TGo4FitAssignment::Print(Option_t *option) const
48 {
49  std::cout << " " << GetName();
50 }
51 
52 // **************************************************************************************************
53 
55  : TGo4FitComponent(), fiMinIntegrDepth(0), fiMaxIntegrDepth(0), fdIntegrEps(0.), fbAbsoluteEps(kFALSE),
56  fbIntegrScaling(kFALSE), fxAssigments(), fiGroupIndex(-1), fxCurrentPars(), fxCurrentParsArray(nullptr),
57  fbNeedToRebuild(kFALSE), fxAllPars(nullptr), fxAllParsValues(nullptr)
58 {
59 }
60 
61 TGo4FitModel::TGo4FitModel(const char *iName, const char *iTitle, Bool_t MakeAmplitude)
62  : TGo4FitComponent(iName, iTitle), fiMinIntegrDepth(0), fiMaxIntegrDepth(0), fdIntegrEps(0.), fbAbsoluteEps(kFALSE),
64  fbNeedToRebuild(kFALSE), fxAllPars(nullptr), fxAllParsValues(nullptr)
65 {
66  fxAssigments.SetOwner(kTRUE);
67  if (MakeAmplitude)
68  NewAmplitude();
69 }
70 
72 {
73  RemoveAllPars();
74 }
75 
77 {
78  Int_t res = TGo4FitParsList::NumPars();
79  if (NumAssigments() > 0)
80  res += NumAssigments() - 1;
81  return res;
82 }
83 
85 {
86  Int_t numpars = TGo4FitParsList::NumPars();
87  if (n < numpars)
88  return TGo4FitParsList::Get(n);
89  n -= numpars - 1;
90  return (n >= 0) && (n < NumAssigments()) ? GetAssigment(n)->fxRatio : nullptr;
91 }
92 
93 void TGo4FitModel::AssignToData(const char *DataName, Double_t RatioValue, Bool_t FixRatio)
94 {
95  if (!FindAssigment(DataName)) {
96  TGo4FitAssignment *ass = new TGo4FitAssignment(DataName);
97  if (NumAssigments() > 0) {
98  ass->fxRatio =
99  new TGo4FitParameter(GetRatioName(NumAssigments()), "Amplitude ratio to first data", RatioValue);
100  ass->fxRatio->SetOwner(this);
101  if (FixRatio)
102  ass->fxRatio->SetFixed(kTRUE);
103  }
104  fxAssigments.Add(ass);
105  }
106 }
107 
108 void TGo4FitModel::ChangeDataNameInAssignments(const char *oldname, const char *newname)
109 {
110  TGo4FitAssignment *ass = FindAssigment(oldname);
111  if (ass)
112  ass->SetName(newname);
113 }
114 
115 void TGo4FitModel::ClearAssignmentTo(const char *DataName)
116 {
117  TGo4FitAssignment *ass = FindAssigment(DataName);
118  if (!ass)
119  return;
120 
121  fxAssigments.Remove(ass);
122  delete ass;
123  fxAssigments.Compress();
124 
125  for (Int_t n = 0; n < NumAssigments(); n++) {
126  ass = GetAssigment(n);
127  if (!ass->fxRatio)
128  continue;
129  if (n == 0) {
130  delete ass->fxRatio;
131  ass->fxRatio = nullptr;
132  } else
133  ass->fxRatio->SetName(GetRatioName(n + 1));
134  }
135 }
136 
138 {
139  fxAssigments.Clear();
140  fxAssigments.Compress();
141 }
142 
144 {
145  if (!data)
146  return;
147  TGo4FitAssignment *ass = FindAssigment(data->GetName());
148  if (ass)
149  ass->fxData = data;
150 }
151 
153 {
155  return ass ? ass->fxData : nullptr;
156 }
157 
158 Bool_t TGo4FitModel::GetPosition(Int_t naxis, Double_t &pos)
159 {
160  if (GetPosPar(naxis)) {
161  pos = GetPosPar(naxis)->GetValue();
162  return kTRUE;
163  }
164  return kFALSE;
165 }
166 
167 Bool_t TGo4FitModel::SetPosition(Int_t naxis, Double_t pos)
168 {
169  if (GetPosPar(naxis)) {
170  GetPosPar(naxis)->SetValue(pos);
171  return kTRUE;
172  }
173  return kFALSE;
174 }
175 
176 Bool_t TGo4FitModel::GetWidth(Int_t naxis, Double_t &width)
177 {
178  if (GetWidthPar(naxis)) {
179  width = GetWidthPar(naxis)->GetValue();
180  return kTRUE;
181  }
182  return kFALSE;
183 }
184 
185 Bool_t TGo4FitModel::SetWidth(Int_t naxis, Double_t width)
186 {
187  if (GetWidthPar(naxis)) {
188  GetWidthPar(naxis)->SetValue(width);
189  return kTRUE;
190  }
191  return kFALSE;
192 }
193 
194 void TGo4FitModel::SetIntegrationsProperty(Int_t iMinIntegrDepth, Int_t iMaxIntegrDepth, Double_t iIntegrEps,
195  Bool_t iAbsoluteEps, Bool_t iIntegrScaling)
196 {
197  fiMinIntegrDepth = iMinIntegrDepth;
198  fiMaxIntegrDepth = iMaxIntegrDepth;
199  fdIntegrEps = iIntegrEps;
200  fbAbsoluteEps = iAbsoluteEps;
201  fbIntegrScaling = iIntegrScaling;
202  if (fdIntegrEps <= 0.)
204 }
205 
207 {
208  if (fxAllPars) {
209  delete fxAllPars;
210  fxAllPars = nullptr;
211  }
212  if (fxAllParsValues) {
213  delete fxAllParsValues;
214  fxAllParsValues = nullptr;
215  }
216 }
217 
218 Bool_t TGo4FitModel::Initialize(Int_t UseBuffers)
219 {
220  Bool_t use = ((UseBuffers < 0) && GetUseBuffers()) || (UseBuffers > 0);
221  for (Int_t n = 0; n < NumAssigments(); n++) {
223  if (!ass->fxData) {
224  std::cout << "Data " << ass->GetName() << " not assigned to model " << GetName() << std::endl;
225  continue;
226  }
227 
228  if (use && ass->fxData->BuffersAllocated()) {
229  if (IsAnyRangeLimits()) {
230  ass->fxModelMask = new Char_t[ass->fxData->GetBinsSize()];
231  ass->fxData->ApplyRangesForModelMask(this, ass->fxModelMask);
232  }
233 
234  ass->fxModelBins = new Double_t[ass->fxData->GetBinsSize()];
235  }
236  }
237 
239 
240  if (use) {
241  RemoveAllPars();
242 
243  fxAllPars = new TGo4FitParsList(kFALSE);
245 
246  fxAllParsValues = new TArrayD(fxAllPars->NumPars());
248  }
249 
250  return kTRUE;
251 }
252 
254 {
255  RemoveAllPars();
256  fxCurrentPars.Set(0);
257  for (Int_t n = 0; n < NumAssigments(); n++) {
259  if (ass->fxModelMask) {
260  delete[] ass->fxModelMask;
261  ass->fxModelMask = nullptr;
262  }
263  if (ass->fxModelBins) {
264  delete[] ass->fxModelBins;
265  ass->fxModelBins = nullptr;
266  }
267  }
268 }
269 
271 {
272  Bool_t res = (NumAssigments() > 0);
273  for (Int_t n = 0; n < NumAssigments(); n++)
274  res = res && (GetAssigment(n)->fxModelBins != nullptr);
275  return res;
276 }
277 
278 Double_t *TGo4FitModel::GetModelBins(const char *DataName) const
279 {
280  TGo4FitAssignment *ass = FindAssigment(DataName);
281  return ass ? ass->fxModelBins : nullptr;
282 }
283 
284 Double_t TGo4FitModel::EvaluateAndIntegrate(Int_t NumScales, const Double_t *Scales, const Double_t *Widths)
285 {
286  if ((NumScales < 1) || !Scales)
287  return 0.;
288 
289  if ((fiMinIntegrDepth > 0) && (fiMaxIntegrDepth > 0) && Widths) {
290  TArrayI IntegrIndexes(NumScales);
291  TArrayD ScaleValues(NumScales, Scales);
292  TArrayD WidthValues(NumScales, Widths);
293  TArrayD dScaleValues(NumScales);
294 
295  Int_t *dindx = IntegrIndexes.GetArray();
296  Double_t *vector = ScaleValues.GetArray();
297  Double_t *width = WidthValues.GetArray();
298  Double_t *dvector = dScaleValues.GetArray();
299 
300  Int_t n = 0;
301 
302  // set value and range for current point of model
303  for (n = 0; n < NumScales; n++)
304  vector[n] -= 0.5 * width[n];
305 
306  // include left bound of interval
307  Double_t TotalSum = EvalN(vector);
308  Int_t TotalNumPnt = 1;
309 
310  Int_t IntegrDepth = 0;
311  Int_t NumStep = 1;
312  Double_t Step = 1.0;
313  Bool_t stopcondition = kFALSE;
314 
315  // cycle over integration depths
316  do {
317 
318  IntegrIndexes.Reset(0);
319  Double_t Sum = 0.;
320  Int_t NumPnt = 0;
321 
322  // run over all integration points
323  do {
324  for (n = 0; n < NumScales; n++)
325  dvector[n] = vector[n] + Step * width[n] * (dindx[n] + 0.5);
326 
327  Sum += EvalN(dvector);
328  NumPnt++;
329 
330  n = 0;
331  do {
332  dindx[n]++;
333  if (dindx[n] < NumStep)
334  break;
335  dindx[n] = 0;
336  n++;
337  } while (n < NumScales);
338  } while (n < NumScales);
339 
340  // check stop condition for integrations depth
341  stopcondition = kFALSE;
342  if (IntegrDepth >= fiMinIntegrDepth) {
343  if (IntegrDepth >= fiMaxIntegrDepth)
344  stopcondition = kTRUE;
345  else {
346  Double_t v1 = TotalSum / TotalNumPnt;
347  Double_t v2 = Sum / NumPnt;
348  Double_t v = TMath::Abs(v1 - v2);
349  if (!fbAbsoluteEps) {
350  if ((v1 != 0.) || (v2 != 0.))
351  v = v / (TMath::Abs(v1) + TMath::Abs(v2));
352  else
353  v = 0.;
354  }
355  if (v <= fdIntegrEps)
356  stopcondition = kTRUE;
357  }
358  }
359  TotalSum += Sum;
360  TotalNumPnt += NumPnt;
361  IntegrDepth++;
362  NumStep *= 2;
363  Step = Step / 2.;
364  } while (!stopcondition);
365 
366  Double_t value = 0;
367  if (TotalNumPnt > 0)
368  value = TotalSum / TotalNumPnt;
369  if (fbIntegrScaling)
370  for (n = 0; n < NumScales; n++)
371  value *= width[n];
372  return value;
373  } else
374  return EvalN(Scales);
375 }
376 
377 Double_t TGo4FitModel::EvaluateAtPoint(TGo4FitData *data, Int_t nbin, Bool_t UseRanges)
378 {
379  if (!data)
380  return 0.;
381  const Double_t *scales = data->GetScaleValues(nbin);
382  Int_t scalessize = data->GetScalesSize();
383  if (UseRanges && !CheckRangeConditions(scales, scalessize))
384  return 0.;
385  return EvaluateAndIntegrate(scalessize, scales, data->GetWidthValues(nbin));
386 }
387 
388 Double_t TGo4FitModel::EvaluateAtPoint(std::unique_ptr<TGo4FitDataIter> &iter, Bool_t UseRanges)
389 {
390  if (!iter)
391  return 0;
392  const Double_t *scales = iter->Scales();
393  Int_t scalessize = iter->ScalesSize();
394  if (UseRanges && !CheckRangeConditions(scales, scalessize))
395  return 0.;
396  return EvaluateAndIntegrate(scalessize, scales, iter->Widths());
397 }
398 
399 void TGo4FitModel::RebuildShape(Bool_t ForceBuild)
400 {
401  if (!fxAllPars || !fxAllParsValues)
402  return;
403 
404  Bool_t fill = ForceBuild || fbNeedToRebuild;
405  if (!fill)
406  for (Int_t n = 0; n < fxAllPars->NumPars(); n++) {
407  if (n == GetAmplIndex())
408  continue;
409  if ((*fxAllParsValues)[n] != fxAllPars->GetPar(n)->GetValue()) {
410  fill = kTRUE;
411  break;
412  }
413  }
414 
415  if (fill)
416  for (Int_t n = 0; n < NumAssigments(); n++) {
418 
419  if (!ass->fxData || !ass->fxModelBins)
420  continue;
421 
422  TGo4FitData *data = ass->fxData;
423 
424  if (!BeforeEval(data->GetScalesSize()))
425  continue;
426 
427  Int_t size = data->GetBinsSize();
428  Double_t *bins = ass->fxModelBins;
429  Char_t *mask = ass->fxModelMask;
430  Double_t ratio = ass->RatioValue();
431 
432  for (Int_t nbin = 0; nbin < size; nbin++) {
433  if (mask && (mask[nbin] == 0))
434  continue;
435  bins[nbin] = ratio * EvaluateAtPoint(data, nbin, kFALSE);
436  }
437 
438  AfterEval();
439  }
440 
441  for (Int_t n = 0; n < fxAllPars->NumPars(); n++)
442  (*fxAllParsValues)[n] = fxAllPars->GetPar(n)->GetValue();
443 
444  fbNeedToRebuild = kFALSE;
445 }
446 
448 {
449  if (!data || !data->BuffersAllocated())
450  return kFALSE;
451 
452  Double_t *result = data->GetBinsResult();
453  if (!result)
454  return kFALSE;
455  Int_t size = data->GetBinsSize();
456 
457  Double_t *modelbins = GetModelBins(data->GetName());
458  if (modelbins) {
459  Double_t ampl = GetAmplValue();
460  for (Int_t nbin = 0; nbin < size; nbin++)
461  result[nbin] += ampl * modelbins[nbin];
462  return kTRUE;
463  }
464 
465  if (!BeforeEval(data->GetScalesSize()))
466  return kFALSE;
467 
468  Double_t ampl = GetAmplValue() * GetRatioValueFor(data->GetName());
469 
470  for (Int_t nbin = 0; nbin < size; nbin++)
471  result[nbin] += ampl * EvaluateAtPoint(data, nbin);
472 
473  AfterEval();
474 
475  return kTRUE;
476 }
477 
478 Bool_t TGo4FitModel::BeforeEval(Int_t ndim)
479 {
480  fxCurrentPars.Set(NumPars());
481  GetParsValues(fxCurrentPars.GetArray());
482  fxCurrentParsArray = fxCurrentPars.GetArray();
483  if (GetAmplPar())
484  fxCurrentParsArray++;
485  return kTRUE;
486 }
487 
488 Double_t TGo4FitModel::EvalN(const Double_t *v)
489 {
490  return UserFunction((Double_t *)v, fxCurrentParsArray);
491 }
492 
493 Double_t TGo4FitModel::Evaluate(Double_t x)
494 {
495  Double_t zn = 0.;
496  if (BeforeEval(1)) {
497  zn = GetAmplValue() * EvalN(&x);
498  AfterEval();
499  }
500  return zn;
501 }
502 
503 Double_t TGo4FitModel::Evaluate(Double_t x, Double_t y)
504 {
505  Double_t zn = 0.;
506  if (BeforeEval(2)) {
507  Double_t vector[2] = {x, y};
508  zn = GetAmplValue() * EvalN(vector);
509  AfterEval();
510  }
511  return zn;
512 }
513 
514 Double_t TGo4FitModel::Evaluate(Double_t x, Double_t y, Double_t z)
515 {
516  Double_t zn = 0.;
517  if (BeforeEval(3)) {
518  Double_t vector[3] = {x, y, z};
519  zn = GetAmplValue() * EvalN(vector);
520  AfterEval();
521  }
522  return zn;
523 }
524 
525 Double_t TGo4FitModel::Evaluate(Double_t *v, Int_t ndim)
526 {
527  Double_t zn = 0.;
528  if (BeforeEval(ndim)) {
529  zn = GetAmplValue() * EvalN(v);
530  AfterEval();
531  }
532  return zn;
533 }
534 
536 {
537  return 0;
538 }
539 
540 const Int_t *TGo4FitModel::GetDataFullIndex(TGo4FitData *data, Int_t nbin)
541 {
542  return data ? data->GetFullIndex(nbin) : nullptr;
543 }
544 
546 {
547  return data ? data->GetIndexesSize() : 0;
548 }
549 
550 TGo4FitAssignment *TGo4FitModel::FindAssigment(const char *DataName) const
551 {
552  for (Int_t n = 0; n < NumAssigments(); n++)
553  if (strcmp(DataName, GetAssigment(n)->GetName()) == 0)
554  return GetAssigment(n);
555  return nullptr;
556 }
557 
559 {
560  TString res;
561  res.Form("Ratio%d", n);
562  return res;
563 }
564 
565 Double_t TGo4FitModel::GetRatioValueFor(const char *DataName)
566 {
567  TGo4FitAssignment *ass = FindAssigment(DataName);
568  return ass ? ass->RatioValue() : 1.;
569 }
570 
571 void TGo4FitModel::Print(Option_t *option) const
572 {
573  TGo4FitComponent::Print(option);
574  std::cout << " Assigned to: ";
575  fxAssigments.Print(option);
576  std::cout << std::endl;
577  if ((fiMinIntegrDepth > 0) && (fiMaxIntegrDepth > 0)) {
578  std::cout << " Integration property: depths from " << fiMinIntegrDepth << " to " << fiMaxIntegrDepth;
579  if (fbAbsoluteEps)
580  std::cout << " absolute";
581  else
582  std::cout << " relative";
583  std::cout << " error " << fdIntegrEps << std::endl;
584  }
585 }
586 
587 void TGo4FitModel::Streamer(TBuffer &b)
588 {
589  if (b.IsReading()) {
590  TGo4FitModel::Class()->ReadBuffer(b, this);
591  for (Int_t n = 0; n < NumAssigments(); n++)
592  if (GetAssigment(n)->fxRatio)
593  GetAssigment(n)->fxRatio->SetOwner(this);
594  } else {
595  TGo4FitModel::Class()->WriteBuffer(b, this);
596  }
597 }
TString GetRatioName(Int_t n)
Double_t GetValue() const
TArrayD fxCurrentPars
Definition: TGo4FitModel.h:416
Bool_t fbAbsoluteEps
Definition: TGo4FitModel.h:373
void Print(Option_t *option="") const override
Int_t fiMaxIntegrDepth
Definition: TGo4FitModel.h:363
void CollectParsTo(TGo4FitParsList &list) override
Int_t GetDataIndexesSize(TGo4FitData *data)
Double_t RatioValue()
virtual Double_t Evaluate(Double_t x)
Double_t * fxCurrentParsArray
Definition: TGo4FitModel.h:421
Bool_t CheckRangeConditions(const Double_t *values, Int_t numaxis)
virtual void Finalize()
Int_t fiGroupIndex
Definition: TGo4FitModel.h:411
void ClearAssignments()
Int_t NumPars() override
Bool_t fbIntegrScaling
Definition: TGo4FitModel.h:378
Char_t * fxModelMask
Definition: TGo4FitModel.h:65
virtual ~TGo4FitAssignment()
const Double_t * Scales() const
Definition: TGo4FitData.h:474
TGo4FitData * fxData
Definition: TGo4FitModel.h:60
TGo4FitParameter * GetPar(Int_t n)
const Double_t * GetScaleValues(Int_t nbin) const
virtual TGo4FitParameter * GetWidthPar(Int_t naxis=0)
Definition: TGo4FitModel.h:349
void AssignToData(const char *DataName, Double_t RatioValue=1., Bool_t FixRatio=kFALSE)
Int_t ScalesSize() const
Definition: TGo4FitData.h:469
Int_t GetAmplIndex() const
virtual Bool_t SetPosition(Int_t naxis, Double_t pos)
TGo4FitParameter * NewAmplitude(const char *Name=nullptr, Double_t iValue=0., Bool_t IsFixed=kFALSE, Int_t AtIndx=0)
void RemoveAllPars()
Double_t * GetBinsResult() const
Definition: TGo4FitData.h:277
TGo4FitAssignment * FindAssigment(const char *DataName) const
const Double_t * Widths() const
Definition: TGo4FitData.h:499
virtual Double_t Integral()
void ClearAssignmentTo(const char *DataName)
void SetOwner(TNamed *iOwner)
Definition: TGo4FitNamed.h:58
void Print(Option_t *option="") const override
virtual Double_t EvaluateAtPoint(TGo4FitData *data, Int_t nbin, Bool_t UseRanges=kTRUE)
TObjArray fxAssigments
Definition: TGo4FitModel.h:406
Double_t fdIntegrEps
Definition: TGo4FitModel.h:368
virtual Bool_t GetPosition(Int_t naxis, Double_t &pos)
const Int_t * GetFullIndex(Int_t nbin) const
virtual Int_t NumPars()
Bool_t fbNeedToRebuild
Definition: TGo4FitModel.h:426
void ChangeDataNameInAssignments(const char *oldname, const char *newname)
TGo4FitParameter * Get(Int_t n) override
TGo4FitData * GetAssignedConnection(Int_t n)
virtual Double_t UserFunction(Double_t *, Double_t *)
Definition: TGo4FitModel.h:328
Bool_t IsAnyRangeLimits() const
Double_t * fxModelBins
Definition: TGo4FitModel.h:72
virtual ~TGo4FitModel()
void SetNeedToRebuild()
Definition: TGo4FitModel.h:321
virtual Bool_t Initialize(Int_t UseBuffers=-1)
TGo4FitAssignment * GetAssigment(Int_t n)
Definition: TGo4FitModel.h:390
virtual Bool_t BeforeEval(Int_t ndim)
TGo4FitParameter * fxRatio
Definition: TGo4FitModel.h:55
void ConnectToDataIfAssigned(TGo4FitData *data)
virtual Bool_t SetWidth(Int_t naxis, Double_t width)
void SetIntegrationsProperty(Int_t iMinIntegrDepth, Int_t iMaxIntegrDepth=0, Double_t iIntegrEps=0., Bool_t iAbsoluteEps=kFALSE, Bool_t iIntegrScaling=kFALSE)
virtual void AfterEval()
Definition: TGo4FitModel.h:253
virtual Bool_t GetWidth(Int_t naxis, Double_t &width)
Int_t NumAssigments() const
Definition: TGo4FitModel.h:124
TGo4FitParsList * fxAllPars
Definition: TGo4FitModel.h:431
Double_t EvaluateAndIntegrate(Int_t NumScales, const Double_t *Scales, const Double_t *Widths)
const Double_t * GetWidthValues(Int_t nbin) const
void SetValue(Double_t iValue)
virtual TGo4FitParameter * GetPosPar(Int_t naxis=0)
Definition: TGo4FitModel.h:343
Int_t GetIndexesSize() const
Definition: TGo4FitData.h:301
Bool_t BuffersAllocated() const
Definition: TGo4FitData.h:248
Bool_t BuffersAllocated() const
Int_t fiMinIntegrDepth
Definition: TGo4FitModel.h:358
void RebuildShape(Bool_t ForceBuild=kFALSE)
virtual TGo4FitParameter * Get(Int_t n)
Double_t * GetModelBins(const char *DataName) const
void SetFixed(Bool_t iFixed)
Bool_t AddModelToDataResult(TGo4FitData *data)
void GetParsValues(Double_t *pars)
TArrayD * fxAllParsValues
Definition: TGo4FitModel.h:433
Double_t GetRatioValueFor(const char *DataName)
void ApplyRangesForModelMask(TGo4FitComponent *model, Char_t *ModelMask)
const Int_t * GetDataFullIndex(TGo4FitData *data, Int_t nbin)
virtual Double_t EvalN(const Double_t *v)
void Print(Option_t *option="") const override
Int_t GetBinsSize() const
Definition: TGo4FitData.h:253
TGo4FitParameter * GetAmplPar()
Int_t GetScalesSize() const
Definition: TGo4FitData.h:259