29 :
TGo4FitComponent(), fiDataType(0), fbUseBinScale(kFALSE), fiTakeSigmasFrom(1), fdSigmaValue(1.),
30 fdExcludeLessThen(0.), fxAxisTrans()
56 if ((nslots < 0) || (nslots == oldnum))
60 for (Int_t n = oldnum; n < nslots; n++) {
61 TString name(
"Trans");
63 fxAxisTrans.Add(
new TGo4FitSlot(name.Data(),
"Axis transformation",
this, TGo4FitAxisTrans::Class(), kFALSE));
66 for (Int_t n = oldnum; n > nslots; n--) {
78 return (nslot >= 0) && (nslot <=
fxAxisTrans.GetLast()) ? dynamic_cast<TGo4FitSlot *>(
fxAxisTrans[nslot]) :
nullptr;
126 TObject *obj = iter->CreateDrawObject(ObjName);
141 Bool_t use = ((UseBuffers < 0) && GetUseBuffers()) || (UseBuffers > 0);
158 if (iter->HasIndexes())
161 if (iter->HasWidths())
173 fxFullIndex[nbin * fiIndexesSize + n] = iter->Indexes()[n];
177 fxFullScale[nbin * fiScalesSize + naxis] = iter->Scales()[naxis];
181 fxFullWidth[nbin * fiScalesSize + naxis] = iter->Widths()[naxis];
184 }
while (iter->Next());
240 if (iter->Reset(kFALSE) && (iter->ScalesSize() <= naxis)) {
241 min = iter->Scales()[naxis];
244 Double_t value = iter->Scales()[naxis];
247 else if (value > max)
249 }
while (iter->Next(kFALSE));
262 if (iter->Reset(kFALSE))
263 res = iter->IndexesSize();
271 return iter ? iter->CountPoints(kTRUE) : 0;
305 if (iter->Reset(kFALSE))
317 for (Int_t nbin = 0; nbin <
GetBinsSize(); nbin++) {
322 ModelMask[nbin] = res ? 1 : 0;
330 ModelMask[nbin] = res ? 1 : 0;
332 }
while (iter->Next());
346 std::cout <<
" Data type: ";
348 case 1: std::cout <<
"histogram" << std::endl;
break;
349 case 2: std::cout <<
"graph" << std::endl;
break;
350 default: std::cout <<
fiDataType << std::endl;
352 std::cout <<
" Use bin scale: " <<
fbUseBinScale << std::endl;
353 std::cout <<
" Take sigmas from: ";
355 case 0: std::cout <<
"none" << std::endl;
break;
356 case 1: std::cout <<
"data" << std::endl;
break;
357 case 2: std::cout <<
"const value " <<
GetSigmaValue() << std::endl;
break;
360 std::cout <<
" Axis transformation data: " << std::endl;
364 void TGo4FitData::Streamer(TBuffer &b)
368 TGo4FitData::Class()->ReadBuffer(b,
this);
370 for (Int_t n = 0; n <=
fxAxisTrans.GetLast(); n++) {
376 TGo4FitData::Class()->WriteBuffer(b,
this);
383 : TObject(), fxIndexes(), fxScales(), fxWidths(), fdValue(0.), fdStandardDeviation(1.), fiNumPoint(0),
439 for (Int_t n = 0; n <
fxScales.GetSize(); n++)
443 for (Int_t n = 0; n <
fxScales.GetSize(); n++)
446 for (Int_t n = 0; n <
fxWidths.GetSize(); n++)
460 fxWidths[n] = TMath::Abs(arr2[n] - arr1[n]);
472 while (n < Index.GetSize()) {
474 if (Index[n] < Limits[n])
563 for (
int n = 0; n <
fxWidths.GetSize(); n++)
570 if (!
Reset(UseRanges))
575 }
while (
Next(UseRanges));
591 }
while (
Next(kFALSE));
607 Double_t *dummy =
nullptr;
608 TH1 *histo =
nullptr;
610 case 1: histo =
new TH1D(HistoName,
"result", Limits[0] + 1, dummy);
break;
611 case 2: histo =
new TH2D(HistoName,
"result", Limits[0] + 1, dummy, Limits[1] + 1, dummy);
break;
613 histo =
new TH3D(HistoName,
"result", Limits[0] + 1, dummy, Limits[1] + 1, dummy, Limits[2] + 1, dummy);
615 default:
return nullptr;
618 histo->SetDirectory(
nullptr);
621 for (Int_t n = 0; n < NumDim; n++)
622 Axises[n] =
new Double_t[Limits[n] + 2];
626 if (
Reset(UseRanges))
630 case 1: histo->SetBinContent(
Indexes()[0] + 1, ampl *
Value());
break;
634 for (Int_t n = 0; n < NumDim; n++) {
639 }
while (
Next(UseRanges));
641 histo->GetXaxis()->Set(Limits[0] + 1, Axises[0]);
643 histo->GetYaxis()->Set(Limits[1] + 1, Axises[1]);
645 histo->GetZaxis()->Set(Limits[2] + 1, Axises[2]);
647 for (Int_t n = 0; n < NumDim; n++)
659 TGraph *gr =
new TGraph(NumPoints);
660 gr->SetName(GraphName);
661 if (
Reset(UseRanges))
663 (gr->GetX())[
Point()] =
x();
666 }
while (
Next(UseRanges));
Bool_t DefineScaleMinMax(Int_t naxis, Double_t &min, Double_t &max)
void Print(Option_t *option="") const override
TH1 * CreateHistogram(const char *HistoName, Bool_t UseRanges=kFALSE, Bool_t SetBins=kFALSE)
Bool_t ProduceScales(const Int_t *index, const Double_t *ownscales, const Double_t *ownwidths)
Double_t fdStandardDeviation
TGo4FitSlot * SetObject(TObject *obj, Bool_t iOwned=kFALSE)
Int_t GetSigmaSource() const
Bool_t CheckRangeConditions(const Double_t *values, Int_t numaxis)
void Print(Option_t *option="") const override
Bool_t SetNumberOfTransSlots(Int_t nslots)
const Double_t * Scales() const
const Double_t * GetScaleValues(Int_t nbin) const
TObject * CreateDrawObject(const char *ObjName)
void ReleaseAllPointers()
Bool_t DefineIndexesLimits(TArrayI &Limits)
TGo4FitParameter * NewAmplitude(const char *Name=nullptr, Double_t iValue=0., Bool_t IsFixed=kFALSE, Int_t AtIndx=0)
void TransformScales(Double_t *scales)
TGraph * CreateGraph(const char *GraphName, Bool_t UseRanges=kFALSE, Bool_t SetBins=kFALSE)
Bool_t NextIndex(TArrayI &Index, TArrayI &Limits)
const Double_t * Widths() const
virtual Bool_t Initialize(Int_t UseBuffers=-1)
virtual Bool_t IsAnyDataTransform() const
virtual Bool_t Reset(Bool_t UseRanges=kTRUE)
Bool_t IsCompatibleData(TGo4FitData *data)
const Int_t * GetFullIndex(Int_t nbin) const
Int_t GetNumberOfTransSlots() const
virtual ~TGo4FitDataIter()
virtual Bool_t StartReset()=0
Int_t CountPoints(Bool_t UseRanges=kTRUE)
virtual Bool_t Next(Bool_t UseRanges=kTRUE)
virtual TGo4FitData * GetData() const =0
TObject * CreateDrawObject(const char *ObjName)
Bool_t ReserveArrays(Int_t NumDimen, Int_t NumOwnAxis, Bool_t HasWidth)
void FillSlotList(TSeqCollection *list) override
virtual void FillSlotList(TSeqCollection *lst)
virtual std::unique_ptr< TGo4FitDataIter > MakeIter()
void SetAxisTrans(Int_t nslot, TGo4FitAxisTrans *Trans, Bool_t TransOwned=kFALSE)
const Double_t * GetWidthValues(Int_t nbin) const
Int_t IndexesSize() const
Bool_t HasIndexes() const
Int_t GetIndexesSize() const
Bool_t BuffersAllocated() const
void SetDefaults(TNamed *iOwner, TClass *iClass)
TGo4FitAxisTrans * GetAxisTrans(Int_t nslot) const
Int_t GetDataType() const
const Int_t * Indexes() const
Double_t fdExcludeLessThen
void AddAxisTrans(TGo4FitAxisTrans *Trans, Bool_t TransOwned=kFALSE)
virtual Bool_t ShiftToNextPoint()=0
TGo4FitSlot * GetAxisTransSlot(Int_t nslot) const
TObject * GetObject() const
virtual void Transformation(Double_t *scales, Int_t naxis)=0
Double_t GetExcludeLessThen() const
Double_t GetSigmaValue() const
virtual Bool_t ReadCurrentPoint()=0
Bool_t CheckPointForRange()
void ApplyRangesForModelMask(TGo4FitComponent *model, Char_t *ModelMask)
Bool_t GetUseBinScale() const
Int_t GetBinsSize() const
void SetAxisTransNeeded(Int_t nslot, Bool_t iNeeded=kFALSE)
Int_t GetScalesSize() const