18#include <QtCore/QSignalMapper>
24#include <QApplication>
26#include <QInputDialog>
37#include "TPaveStats.h"
41#include "TGo4LockGuard.h"
102 QObject::connect(FitList, &QTreeWidget::customContextMenuRequested,
this,
111 QObject::connect(Wiz_FitFuncCmb, QOverload<int>::of(&QComboBox::activated),
this,
120 QObject::connect(Wiz_MigradIterSpin, QOverload<int>::of(&QSpinBox::valueChanged),
this,
122 QObject::connect(Wiz_DataSlotsTable, &QTableWidget::customContextMenuRequested,
this,
142 QObject::connect(Wiz_PFPolynSpin, QOverload<int>::of(&QSpinBox::valueChanged),
this,
152 QObject::connect(PF_SumUpSpin, QOverload<int>::of(&QSpinBox::valueChanged),
this,
184 FitList->setContextMenuPolicy(Qt::CustomContextMenu);
203 QTableWidgetItem *item =
new QTableWidgetItem;
204 item->setFlags(item->flags() & ~Qt::ItemIsEditable);
205 Wiz_DataSlotsTable->setItemPrototype(item);
206 Wiz_DataSlotsTable->setContextMenuPolicy(Qt::CustomContextMenu);
210 MenuBar =
new QMenuBar(MenuFrame);
213 MenuBar->setNativeMenuBar(kFALSE);
219 ViewMap =
new QSignalMapper(
this);
223 SettMap =
new QSignalMapper(
this);
227#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
228 auto signal = QOverload<int>::of(&QSignalMapper::mapped);
230 auto signal = &QSignalMapper::mappedInt;
270 Wiz_DataSlotsTable->horizontalHeader()->setStretchLastSection(
true);
271 Wiz_ParTable->horizontalHeader()->setStretchLastSection(
true);
279 gridLayout->setContentsMargins(3, 3, 3, 3);
280 gridLayout->setSpacing(1);
283 MenuBar->setMinimumHeight(MenuFrame->height());
312 return (cl->InheritsFrom(TGo4Fitter::Class())) || (cl->InheritsFrom(TH1::Class())) ||
313 (cl->InheritsFrom(TGraph::Class()));
321 if (cl->InheritsFrom(TGo4Fitter::Class())) {
328#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
329 QPoint pos =
event->pos();
331 QPoint pos =
event->position().toPoint();
334 QWidget *w = childAt(pos);
336 if (w == Wiz_DataSlotsTable) {
337 QPoint pnt = Wiz_DataSlotsTable->mapFrom(
this, pos);
338 QTableWidgetItem *item = Wiz_DataSlotsTable->itemAt(pnt);
340 int nrow = item ? item->row() : -1;
342 if ((nrow < 0) || (nrow >
fxWizSlots->GetLast()))
355 }
else if (w == (QWidget *)FitList->viewport()) {
356 QPoint pnt = FitList->viewport()->mapFrom(
this, pos);
387 if (strcmp(linkname,
"Fitter") == 0) {
561 AddLink(itemname.toLatin1().constData(),
"Fitter");
582 return dynamic_cast<TGo4Fitter *
>(fitter->Clone());
616 if (!overwrite && fitterslot)
631 return QMessageBox::information(
nullptr, title, msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) ==
687 QTableWidget *tab = ParsTable;
694 for (
int ncol = 0; ncol < tab->columnCount(); ncol++) {
696 str += tab->horizontalHeaderItem(ncol)->text();
700 for (
int nrow = 0; nrow < tab->rowCount(); nrow++) {
701 str = tab->verticalHeaderItem(nrow)->text();
702 for (
int ncol = 0; ncol < tab->columnCount(); ncol++) {
704 str += tab->item(nrow, ncol)->text();
750 std::cout <<
" Incorrect data" << std::endl;
771 case 0: fitter->
AddPolynoms(data->GetName(),
"Pol", Smp_PolOrderSpin->value(), NumDim);
break;
773 case 1: model =
CreateModel(20,
nullptr, fitter, data);
break;
775 case 2: model =
CreateModel(24,
nullptr, fitter, data);
break;
777 case 3: model =
CreateModel(25,
nullptr, fitter, data);
break;
780 if (model && ((nmodel == 1) || (nmodel == 2)))
855 while (n < fitter->GetNumActions()) {
857 if (action == finder)
867 QString cmd(
"MIGRAD ");
870 minuit->
AddCommand(cmd.toLatin1().constData());
913 for (Int_t n = 0; n < fitter->
GetNumData(); n++) {
915 if (selecteddata && (data != selecteddata))
942 int DivX = (int)TMath::Sqrt(NeedPads * 1.);
944 while (DivX * DivY < NeedPads)
950 for (Int_t n = 0; n < fitter->
GetNumData(); n++) {
953 if (selecteddata && (data != selecteddata))
956 const char *drawopt =
nullptr;
995 Double_t x1 = x2 - gStyle->GetStatW();
996 Double_t y1 = y2 - gStyle->GetStatH();
998 if (LineParsChk->isChecked()) {
1005 TPaveStats *stats =
dynamic_cast<TPaveStats *
>(pad->GetPrimitive(
"stats"));
1007 x1 = stats->GetX1NDC();
1008 x2 = stats->GetX2NDC();
1009 y2 = stats->GetY1NDC() - 0.03;
1010 y1 = y2 - (stats->GetY2NDC() - stats->GetY1NDC());
1015 TLegend *leg =
dynamic_cast<TLegend *
>(pad->GetPrimitive(
"fitlegend"));
1017 x1 = leg->GetX1NDC();
1018 x2 = leg->GetX2NDC();
1019 y2 = leg->GetY1NDC() - 0.03;
1020 y1 = y2 - (leg->GetY2NDC() - leg->GetY1NDC());
1025 TPaveStats *info =
dynamic_cast<TPaveStats *
>(panel->
GetDrawObject(pad,
"::FitterPars"));
1027 bool infocreated =
false;
1034 info =
new TPaveStats(x1, y1, x2, y2,
"brNDC");
1035 info->SetFillColor(gStyle->GetStatColor());
1036 info->SetFillStyle(gStyle->GetStatStyle());
1037 info->SetBorderSize(gStyle->GetStatBorderSize());
1038 info->SetTextFont(gStyle->GetStatFont());
1039 if (gStyle->GetStatFont() % 10 > 2)
1040 info->SetTextSize(gStyle->GetStatFontSize());
1041 info->SetFitFormat(gStyle->GetFitFormat());
1042 info->SetStatFormat(gStyle->GetStatFormat());
1043 info->SetTextColor(gStyle->GetStatTextColor());
1044 info->SetTextAlign(12);
1045 info->SetName(
"fitinfo");
1048 info->AddText(data->GetName());
1049 info->AddLine(0, 0, 0, 0);
1051 if (LineParsChk->isChecked())
1054 for (Int_t m = 0; m < fitter->
GetNumModel(); m++) {
1059 if (LineParsChk->isChecked()) {
1060 Double_t ampl, pos, width;
1068 bool recalculatew = (model->InheritsFrom(TGo4FitModelGauss1::Class()) ||
1069 model->InheritsFrom(TGo4FitModelGauss2::Class()) ||
1070 model->InheritsFrom(TGo4FitModelGaussN::Class())) &&
1072 double widthk = recalculatew ? 2.3548 : 1.0;
1074 TString tt = TString::Format(
"%7s | %s%s | %s%s %s%s", model->GetName(),
"%", gStyle->GetStatFormat(),
1075 "%", gStyle->GetStatFormat(),
"%", gStyle->GetStatFormat());
1077 info->AddText(TString::Format(tt.Data(), ampl, pos, width * widthk).Data());
1080 for (Int_t np = 0; np < model->
NumPars(); np++) {
1082 if (len > maxparlen)
1085 TString tt = TString::Format(
"%s%ds = %s%s",
"%", maxparlen,
"%", gStyle->GetStatFormat());
1087 for (Int_t np = 0; np < model->
NumPars(); np++)
1098 TObject *model = fitter->
CreateDrawObject(
"Model", data->GetName(), kTRUE);
1103 TObject *model = fitter->
CreateDrawObject(
"Background", data->GetName(), kTRUE,
"Background");
1108 for (Int_t m = 0; m < fitter->
GetNumModel(); m++) {
1114 TObject *comp = fitter->
CreateDrawObject(model->GetName(), data->GetName(), kTRUE, model->GetName());
1172 QString fname(fitter->GetName());
1176 fname = QFileDialog::getSaveFileName(
this,
"Save fitter dialog", fname,
"Root file (*.root)");
1183 TFile f(fname.toLatin1().constData(),
"recreate");
1189 TObject *obj = item->
Object();
1195 if (obj->InheritsFrom(TGo4Fitter::Class()))
1196 str = QInputDialog::getText(
this, QString(
"Go4 Fit Panel"), QString(
"Enter parameters for Print() command"),
1197 QLineEdit::Normal, str, &ok);
1202 auto widget =
new QFitPrintWidget(
nullptr, (QString(
"Print ") + obj->GetName()).toLatin1().constData());
1206 ListStack->addWidget(widget);
1207 widget->SetDrawOption(str);
1208 widget->SetItem(
this, item);
1209 ListStack->setCurrentWidget(widget);
1224 if (!data || !fitter)
1227 if (
checkConfirm(
"Delete data", QString(
"Are you sure to delete ") + data->GetName()))
1247 if (
checkConfirm(
"Delete all data",
"Are you sure to delete all data objects"))
1263 if (!item || !item->
Parent())
1268 if (!data || !fitter)
1271 if (
checkConfirm(
"Delete models", QString(
"Are you sure to delete models, associated to ") + data->GetName()))
1297 if (!model || !fitter)
1300 if (
checkConfirm(
"Delete model", QString(
"Are you sure to delete ") + model->GetName()))
1316 if (
checkConfirm(
"Delete all models",
"Are you sure to delete all models objects"))
1333 if (!fitter || !model)
1368 FitList->setCurrentItem(curr, QItemSelectionModel::Select);
1394 FitList->setCurrentItem(curr, QItemSelectionModel::Select);
1431 if (!model || !fitter)
1445 if (!model || !fitter)
1465 int num = item->
Tag();
1470 if (
checkConfirm(
"Remove condition", QString(
"Are you sure to delete condition ") + item->text(0)))
1489 if (
checkConfirm(
"Delete conditions",
"Are you sure to delete all conditions"))
1505 if (item->
Object()->InheritsFrom(TGo4FitData::Class())) {
1510 if (model && fitter)
1517 Double_t minx = 0., maxx = 100., miny = 0., maxy = 100;
1521 minx = pad->GetUxmin();
1522 maxx = pad->GetUxmax();
1523 miny = pad->GetUymin();
1524 maxy = pad->GetUymax();
1528 Double_t ddx = 0.1 * (maxx - minx);
1531 Double_t ddy = 0.1 * (maxy - miny);
1548 TCutG *cut =
new TCutG(name, 5);
1549 cut->SetTitle(
"range cut of X and Y axis");
1550 cut->SetPoint(0, minx, miny);
1551 cut->SetPoint(1, maxx, miny);
1552 cut->SetPoint(2, maxx, maxy);
1553 cut->SetPoint(3, minx, maxy);
1554 cut->SetPoint(4, minx, miny);
1568 if (action && fitter) {
1569 if (
checkConfirm(
"Delete action", QString(
"Are you sure to delete ") + item->text(0)))
1579 if (!item || !item->
Parent())
1585 if (action && fitter) {
1589 item =
FindItem(action, -1,
nullptr);
1591 FitList->setCurrentItem(item, QItemSelectionModel::Select);
1598 if (!item || !fitter)
1619 if (!item || !fitter)
1640 if (
checkConfirm(
"Delete output actions", QString(
"Are you sure to delete all output actions") + item->text(0)))
1653 if (
checkConfirm(
"Delete all actions",
"Are you sure to delete all actions?"))
1682 TObjArray *lst =
dynamic_cast<TObjArray *
>(item->
Parent()->Object());
1687 if (
checkConfirm(
"Delete dependency item", QString(
"Are you sure to delete ") + item->text(0)))
1701 TObjArray *lst =
dynamic_cast<TObjArray *
>(item->
Object());
1705 if (
checkConfirm(
"Delete all", QString(
"Are you sure to delete all items from ") + item->text(0)))
1718 TObjArray *lst =
dynamic_cast<TObjArray *
>(item->
Object());
1766 if (
checkConfirm(
"Delete all",
"Are you sure to delete all parameters"))
1812 name = TString::Format(
"Par%d", num++);
1813 }
while (pars->
FindPar(name.Data()));
1814 pars->
CreatePar(name.Data(),
"additional parameter", 0.);
1829 if (
checkConfirm(
"Delete parameter", QString(
"Are you sure to delete ") + par->GetName()))
1844 if (!res || !minuit)
1847 if (
checkConfirm(
"Delete result", QString(
"Are you sure to delete ") + res->GetName()))
1863 for (
int n = 0; n < item->childCount(); n++)
1879 menu.exec(FitList->viewport()->mapToGlobal(pnt));
1920 QWidget *w = PageEmpty;
1922 case 1: w = PageSimple;
break;
1923 case 2: w = PageWizard;
break;
1924 case 3: w = PageExtended;
break;
1925 case 100: w = PageParameters;
break;
1927 if (w != WidgetStack->currentWidget())
1928 WidgetStack->setCurrentWidget(w);
1940 status = QString(
"Active: ") +
ActivePad()->GetName();
1942 status +=
". Muiltifit";
1945 status =
"Workspace";
1947 status +=
". No fitter";
1949 status = status +
". Fitter: " + fitter->GetName();
1951 MainStatusLbl->setText(status);
1952 MainStatusLbl->update();
1953 MainStatusLbl->repaint();
1955 MainAttachBtn->setEnabled(
true);
1958 MainParsBtn->setText(
"Back");
1959 MainParsBtn->setToolTip(
"Back to last selected page");
1961 MainParsBtn->setText(
"Pars");
1962 MainParsBtn->setToolTip(
"Show list of fitter parameters");
1966 MainFitBtn->setEnabled(
false);
1967 MainDrawBtn->setEnabled(
false);
1968 MainFindBtn->setEnabled(
false);
1969 MainParsBtn->setEnabled(
false);
1971 MainFitBtn->setEnabled((fitter->
GetNumData() > 0) &&
1973 MainDrawBtn->setEnabled(fitter->
GetNumData() > 0);
1975 MainParsBtn->setEnabled(
true);
1990 itemtext = item->text(0);
2095 padname = QString(
"panel \"") + panel->windowTitle() +
"\"";
2126 case 99: parentWidget()->close();
break;
2143 item =
dynamic_cast<QFitItem *
>(FitList->currentItem());
2196 if ((
id >= 110) && (
id < 200))
2198 else if ((
id >= 210) && (
id < 300))
2200 else if ((
id >= 310) && (
id < 400))
2202 else if ((
id >= 510) && (
id < 600))
2204 else if ((
id >= 1000) && (
id < 2000))
2212 QWidget::focusInEvent(event);
2217 if (event->type() == QEvent::ActivationChange)
2219 QWidget::changeEvent(event);
2232 PF_AmplLbl->setText(QString(
"Threshold: ") + QString::number(finder->
Get0MaxAmplFactor() * 100) +
"%");
2234 PF_AmplLbl->setText(
"Threshold:");
2235 PF_AmplLbl->adjustSize();
2243 PF_RelNoiseLbl->setText(QString(
"Noise factor: ") + QString::number(finder->
Get2NoiseFactor()));
2245 PF_RelNoiseLbl->setText(
"Noise factor: ");
2246 PF_RelNoiseLbl->adjustSize();
2254 double zn = str.toDouble(&ok);
2267 double zn = str.toDouble(&ok);
2280 double zn = str.toDouble(&ok);
2325 double zn = str.toDouble(&ok);
2350 bool updatestack =
false, updatepaint =
false;
2352 Wiz_DataList->clear();
2365 for (Int_t n = 0; n < fitter->
GetNumData(); n++) {
2367 QListWidgetItem *item =
new QListWidgetItem(data->GetName());
2368 if (strcmp(data->GetName(),
fxWizDataName.toLatin1().constData()) == 0) {
2370 item->setSelected(
true);
2372 Wiz_DataList->addItem(item);
2393 Wiz_PFSetupBtn->setEnabled(data !=
nullptr);
2396 Wiz_RebuildDataBtn->setVisible(
false);
2397 Wiz_AddDataBtn->setVisible(
true);
2398 Wiz_DelDataBtn->setVisible(
true);
2399 Wiz_AddDataBtn->setEnabled(fitter !=
nullptr);
2400 Wiz_DelDataBtn->setEnabled(data !=
nullptr);
2402 Wiz_RebuildDataBtn->setVisible(
true);
2403 Wiz_RebuildDataBtn->setEnabled(fitter !=
nullptr);
2404 Wiz_AddDataBtn->setVisible(
false);
2405 Wiz_DelDataBtn->setVisible(
false);
2413 Wiz_ModelList->clear();
2422 for (Int_t n = 0; n < fitter->
GetNumModel(); n++) {
2428 bool assign =
false;
2429 if (data && model->
IsAssignTo(data->GetName()))
2431 QListWidgetItem *item =
new QListWidgetItem(model->GetName());
2432 item->setCheckState(assign ? Qt::Checked : Qt::Unchecked);
2433 if (strcmp(model->GetName(),
fxWizModelName.toLatin1().constData()) == 0) {
2435 item->setSelected(
true);
2437 Wiz_ModelList->addItem(item);
2442 Wiz_ModelList->setCurrentRow(selindx);
2476 Wiz_AddModelBtn->setEnabled(
true);
2477 Wiz_DelModelBtn->setEnabled(model !=
nullptr);
2478 Wiz_CloneModelBtn->setEnabled(model !=
nullptr);
2479 Wiz_ShowAllMod->setEnabled(
true);
2481 Wiz_AddModelBtn->setEnabled(
false);
2482 Wiz_DelModelBtn->setEnabled(
false);
2483 Wiz_CloneModelBtn->setEnabled(
false);
2484 Wiz_ShowAllMod->setEnabled(
false);
2499 QWidget *target =
nullptr;
2502 case -1: target = Wiz_EmptyPage;
break;
2504 target = Wiz_FitterPage;
2509 Wiz_FitFuncCmb->setCurrentIndex(typ);
2522 target = Wiz_ModelPage;
2526 Wiz_ModelInfoLbl->setText(modelinfo);
2543 target = Wiz_DataPage;
2545 QString datainfo(
"Data: ");
2546 datainfo += data->GetName();
2547 datainfo +=
" of class: ";
2548 datainfo += data->ClassName();
2550 datainfo +=
"\nCounts=";
2552 datainfo += QString::number(v);
2555 datainfo +=
"\nIntegral=";
2557 datainfo += QString::number(v);
2559 Wiz_DataInfoLbl->setText(datainfo);
2561 QString models(
"Models:");
2565 if (models.length() > 45) {
2570 models += model->GetName();
2573 Wiz_DataModelsLbl->setText(models);
2582 Wiz_DataSlotsTable->setRowCount(
fxWizSlots->GetLast() + 1);
2584 for (
int n = 0; n <=
fxWizSlots->GetLast(); n++) {
2589 Wiz_DataSlotsTable->setVerticalHeaderItem(n,
new QTableWidgetItem(slot->GetName()));
2593 Wiz_DataSlotsTable->setItem(n, 0,
new QTableWidgetItem(
" --- "));
2594 Wiz_DataSlotsTable->setItem(n, 1,
new QTableWidgetItem(slot->
GetClass()->GetName()));
2595 Wiz_DataSlotsTable->setItem(n, 2,
new QTableWidgetItem(
"false"));
2597 Wiz_DataSlotsTable->setItem(n, 0,
new QTableWidgetItem(obj->GetName()));
2598 Wiz_DataSlotsTable->setItem(n, 1,
new QTableWidgetItem(obj->ClassName()));
2600 Wiz_DataSlotsTable->setItem(n, 2,
new QTableWidgetItem(
"true"));
2602 Wiz_DataSlotsTable->setItem(n, 2,
new QTableWidgetItem(
"false"));
2608 Wiz_DataSlotsTable->resizeColumnsToContents();
2613 Wiz_DrawDataBtn->setEnabled(data !=
nullptr);
2618 target = Wiz_PFPage;
2632 PF_MinWidthEdt->setText(QString::number(finder->
Get0MinWidth()));
2633 PF_MaxWidthEdt->setText(QString::number(finder->
Get0MaxWidth()));
2637 PF_WidthEdit->setText(QString::number(finder->
Get1LineWidth()));
2640 PF_RelNoiseSlider->setValue(101 - zn);
2650 Wiz_Stack->setCurrentWidget(target);
2652 Wiz_Stack->setCurrentWidget(Wiz_EmptyPage);
2694 QString name = item->text();
2711 QString name = item->text();
2721 if (fitter && data && model) {
2722 bool wasassigned = model->
IsAssignTo(data->GetName());
2723 bool isassigned = (item->checkState() == Qt::Checked);
2725 if (wasassigned != isassigned) {
2750 menu.exec(Wiz_AddDataBtn->mapToGlobal(QPoint(5, 5)));
2777 menu.exec(Wiz_AddModelBtn->mapToGlobal(QPoint(5, 5)));
2789 if (
checkConfirm(
"Delete models",
"Are you sure to delete selected models"))
2792 for (
int n = 0; n < Wiz_ModelList->count(); n++) {
2793 if (!Wiz_ModelList->item(n)->isSelected())
2795 QString name = Wiz_ModelList->item(n)->text();
2796 fitter->
RemoveModel(name.toLatin1().constData(), kTRUE);
2814 for (
int n = 0; n < Wiz_ModelList->count(); n++) {
2815 if (!Wiz_ModelList->item(n)->isSelected())
2817 QString name = Wiz_ModelList->item(n)->text();
2818 fitter->
CloneModel(name.toLatin1().constData());
2847 fitter->SetName(name.toLatin1().constData());
2865 if (!data || !fitter)
2869 QInputDialog::getText(
this,
"Change data name",
"Input new name", QLineEdit::Normal, data->GetName(), &ok);
2870 if (ok && (newname.length() > 0) && (newname != data->GetName())) {
2871 if (fitter->
FindData(newname.toLatin1().constData())) {
2872 QMessageBox::information(
this,
"Fit panel",
2873 QString(
"Unable to rename data.\n Name ") + newname +
" already exists");
2877 data->SetName(newname.toLatin1().constData());
2888 if (!model || !fitter)
2892 QInputDialog::getText(
this,
"Change model name",
"Input new name", QLineEdit::Normal, model->GetName(), &ok);
2893 if (ok && (newname.length() > 0) && (newname != model->GetName())) {
2894 if (fitter->
FindModel(newname.toLatin1().constData())) {
2895 QMessageBox::information(
this,
"Fit panel",
2896 QString(
"Unable to rename model.\n Name ") + newname +
" already exists\n");
2899 model->SetName(newname.toLatin1().constData());
2911 QString name = item->text();
2913 bool checked = (item->checkState() == Qt::Checked);
2923 if (fitter && data && model) {
2924 bool wasassigned = model->
IsAssignTo(data->GetName());
2926 if (wasassigned != checked) {
2973 QTableWidgetItem *item = Wiz_DataSlotsTable->itemAt(pnt);
2975 int nrow = item ? item->row() : -1;
2977 if ((nrow < 0) || (nrow >
fxWizSlots->GetLast()))
2987 menu.exec(Wiz_DataSlotsTable->mapToGlobal(pnt));
3024 QApplication::setOverrideCursor(Qt::WaitCursor);
3028 QApplication::restoreOverrideCursor();
3058 if ((FF == 0.) && (NDF == 0))
3059 Par_FitterResLbl->hide();
3061 Par_FitterResLbl->setText(
"Result: Fit func = " + QString::number(FF) +
" NDF = " + QString::number(NDF));
3062 Par_FitterResLbl->show();
3080 WidgetStack->setCurrentWidget(PageParameters);
3091 TObjArray *TableList)
3093 if (!table || !fitter || !TableList)
3096 if (model && LinesView)
3112 for (Int_t n = 0; n < fitter->
GetNumModel(); n++) {
3117 for (
int naxis = 0; naxis < 10; naxis++)
3123 table->setColumnCount(nfcol + (MaxAxis + 1) * 2);
3124 table->setHorizontalHeaderItem(0,
new QTableWidgetItem(
"Amplitude"));
3128 case 1: capt =
"Counts";
break;
3129 case 2: capt =
"Integral";
break;
3130 case 3: capt =
"Gauss Int";
break;
3132 if (!capt.isEmpty()) {
3133 table->setHorizontalHeaderItem(1,
new QTableWidgetItem(capt));
3134 table->setHorizontalHeaderItem(2,
new QTableWidgetItem(
"Error"));
3137 for (
int naxis = 0; naxis <= MaxAxis; naxis++) {
3138 capt = QString(
"Position ") + QString::number(naxis);
3139 table->setHorizontalHeaderItem(nfcol + naxis * 2,
new QTableWidgetItem(capt));
3141 capt = QString(
"FWHM ");
3143 capt = QString(
"Sigma ");
3144 capt += QString::number(naxis);
3145 table->setHorizontalHeaderItem(nfcol + 1 + naxis * 2,
new QTableWidgetItem(capt));
3150 for (Int_t n = 0; n < fitter->
GetNumModel(); n++) {
3155 (m->InheritsFrom(TGo4FitModelGauss1::Class()) || m->InheritsFrom(TGo4FitModelGauss2::Class()) ||
3156 m->InheritsFrom(TGo4FitModelGaussN::Class())) &&
3158 double widthk = recalculatew ? 2.3548 : 1.0;
3160 table->setVerticalHeaderItem(n,
new QTableWidgetItem(m->GetName()));
3162 QTableWidgetItem *item0 =
new QTableWidgetItem(QString::number(m->
GetAmplValue()));
3166 item0->setFlags(item0->flags() & ~Qt::ItemIsEnabled);
3167 table->setItem(n, 0, item0);
3189 QTableWidgetItem *item1;
3191 item1 =
new QTableWidgetItem(
"---");
3193 item1 =
new QTableWidgetItem(QString::number(v));
3194 item1->setFlags(item1->flags() & ~Qt::ItemIsEnabled);
3195 table->setItem(n, 1, item1);
3197 QTableWidgetItem *item2;
3198 if (!amplpar || (amplpar->
GetValue() == 0) || (amplpar->
GetError() == 0) ||
3200 item2 =
new QTableWidgetItem(
"---");
3202 item2 =
new QTableWidgetItem(QString::number(amplpar->
GetError() / amplpar->
GetValue() * v));
3203 item2->setFlags(item2->flags() & ~Qt::ItemIsEnabled);
3204 table->setItem(n, 2, item2);
3207 for (
int naxis = 0; naxis <= MaxAxis; naxis++) {
3209 Double_t pos, width;
3211 QTableWidgetItem *item;
3214 item =
new QTableWidgetItem(QString::number(pos));
3216 item =
new QTableWidgetItem(
"---");
3217 item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
3220 table->setItem(n, nfcol + naxis * 2, item);
3223 item =
new QTableWidgetItem(QString::number(width * widthk));
3225 item =
new QTableWidgetItem(
"---");
3226 item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
3228 table->setItem(n, nfcol + 1 + naxis * 2, item);
3238 for (Int_t n = 0; n < pars->
NumPars(); n++)
3239 TableList->Add(pars->
GetPar(n));
3241 table->setColumnCount(6);
3242 table->setHorizontalHeaderItem(0,
new QTableWidgetItem(
"Fixed"));
3243 table->setHorizontalHeaderItem(1,
new QTableWidgetItem(
"Value"));
3244 table->setHorizontalHeaderItem(2,
new QTableWidgetItem(
"Error"));
3245 table->setHorizontalHeaderItem(3,
new QTableWidgetItem(
"Epsilon"));
3246 table->setHorizontalHeaderItem(4,
new QTableWidgetItem(
"Min"));
3247 table->setHorizontalHeaderItem(5,
new QTableWidgetItem(
"Max"));
3249 table->setRowCount(TableList->GetLast() + 1);
3251 for (Int_t n = 0; n <= TableList->GetLast(); n++) {
3257 table->setVerticalHeaderItem(n,
new QTableWidgetItem(par->GetName()));
3259 table->setVerticalHeaderItem(n,
new QTableWidgetItem(par->
GetFullName()));
3261 QTableWidgetItem *checkitem =
new QTableWidgetItem(
"fix");
3262 checkitem->setCheckState(par->
GetFixed() ? Qt::Checked : Qt::Unchecked);
3263 table->setItem(n, 0, checkitem);
3265 QTableWidgetItem *item =
new QTableWidgetItem(QString::number(par->
GetValue()));
3267 item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
3268 table->setItem(n, 1, item);
3270 table->setItem(n, 2,
new QTableWidgetItem(QString::number(par->
GetError())));
3272 Double_t eps, min, max;
3274 table->setItem(n, 3,
new QTableWidgetItem(QString::number(eps)));
3276 table->setItem(n, 3,
new QTableWidgetItem(
""));
3279 table->setItem(n, 4,
new QTableWidgetItem(QString::number(min)));
3280 table->setItem(n, 5,
new QTableWidgetItem(QString::number(max)));
3282 table->setItem(n, 4,
new QTableWidgetItem(
""));
3283 table->setItem(n, 5,
new QTableWidgetItem(
""));
3287 table->resizeColumnsToContents();
3288 table->resizeRowsToContents();
3300 if ((nrow < 0) || (nrow > TableList->GetLast()))
3309 (model->InheritsFrom(TGo4FitModelGauss1::Class()) || model->InheritsFrom(TGo4FitModelGauss2::Class()) ||
3310 model->InheritsFrom(TGo4FitModelGaussN::Class())) &&
3312 double widthk = recalculatew ? 2.3548 : 1.0;
3315 double zn = table->item(nrow, ncol)->text().toDouble(&ok);
3323 int naxis = (ncol - nfcol) / 2;
3324 if ((ncol - nfcol) % 2 == 0)
3327 model->
SetWidth(naxis, zn / widthk);
3338 if (table->item(nrow, 0)->checkState() == Qt::Checked)
3340 else if (table->item(nrow, 0)->checkState() == Qt::Unchecked)
3343 table->item(nrow, 1)->setFlags(table->item(nrow, 1)->flags() & ~Qt::ItemIsEnabled);
3345 table->item(nrow, 1)->setFlags(table->item(nrow, 1)->flags() | Qt::ItemIsEnabled);
3352 double zn = table->item(nrow, 1)->text().toDouble(&ok);
3364 double zn = table->item(nrow, 2)->text().toDouble(&ok);
3371 double zn = table->item(nrow, 3)->text().toDouble(&ok);
3378 std::cout <<
"Changing col " << ncol << std::endl;
3381 bool range_changed =
false;
3382 double zn = table->item(nrow, ncol)->text().toDouble(&ok);
3385 bool changemin =
false;
3386 bool changemax =
false;
3394 max = 2 * vvv - min;
3401 min = 2 * vvv - max;
3406 }
else if (ncol == 4) {
3412 }
else if (ncol == 5) {
3420 range_changed =
true;
3423 table->item(nrow, 4)->setText(QString::number(min));
3425 table->item(nrow, 5)->setText(QString::number(max));
3428 if (table->item(nrow, ncol)->text().isEmpty() && table->item(nrow, 9 - ncol)->text().isEmpty()) {
3430 range_changed =
true;
3435 if (range_changed) {
3437 table->item(nrow, 0)->setCheckState(par->
GetFixed() ? Qt::Checked : Qt::Unchecked);
3439 table->item(nrow, 1)->setFlags(table->item(nrow, 1)->flags() & ~Qt::ItemIsEnabled);
3441 table->item(nrow, 1)->setFlags(table->item(nrow, 1)->flags() | Qt::ItemIsEnabled);
3442 table->item(nrow, 1)->setText(QString::number(par->
GetValue()));
3480 Wiz_PFPolynSpin->setEnabled(zn);
3596 if (!fitter || !panel || !pad)
3601 for (Int_t n = 0; n < npads; n++) {
3602 TPad *subpad = panel->
GetSubPad(pad, n,
false);
3611 if (obj->InheritsFrom(TH1::Class()))
3613 else if (obj->InheritsFrom(TGraph::Class()))
3666 Wiz_FitNameEdt->setText(QString(fitter->GetName()));
3668 Wiz_FitNameEdt->setText(QString(
""));
3690 FitList->setSortingEnabled(
false);
3699 fitteritem->setExpanded(
true);
3700 FitList->setCurrentItem(fitteritem, QItemSelectionModel::Select);
3718 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
3729 if (handler.isEmpty())
3731 else if (handler ==
"wiz_model")
3733 else if (handler ==
"wiz_data")
3790 if (fitter && model) {
3793 menu->addSeparator();
3794 for (Int_t n = 0; n < fitter->
GetNumData(); n++)
3801 AddItemAction(menu, QString(
"Clear assignment to ") + item->text(0), 303);
3814 menu->addSeparator();
3820 menu->addSeparator();
3841 menu->addSeparator();
3894 return !menu->isEmpty();
3911 if (!menu->isEmpty())
3912 menu->addSeparator();
3919 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
3925 if (!menu->isEmpty())
3926 menu->addSeparator();
3928 if (slot->
GetClass() == TGo4FitData::Class())
3930 else if (slot->
GetClass() == TGo4FitModel::Class())
3932 else if (slot->
GetClass() == TGo4FitAxisTrans::Class()) {
3933 AddItemAction(menu, TGo4FitLinearTrans::Class()->GetName(), 1300);
3934 AddItemAction(menu, TGo4FitMatrixTrans::Class()->GetName(), 1301);
3937 return !menu->isEmpty();
3946 if (!slot || !fitter)
3957 if (
checkConfirm(
"Clear slot", QString(
"Are you sure to clear object from slot ") + slot->GetName()))
3963 for (Int_t i = 0; i < fitter->
NumSlots(); i++) {
3983 TObject *obj =
nullptr;
3984 if ((
id >= 1100) && (
id < 1200))
3986 else if ((
id >= 1200) && (
id < 1300))
3987 obj =
CreateModel(
id - 1200,
"Model",
nullptr,
nullptr);
3988 else if (
id == 1300)
3990 else if (
id == 1301)
3992 else if (
id >= 1400) {
4005 item->setExpanded(
true);
4019 while (item->childCount() > 0)
4020 delete item->child(0);
4029 for (Int_t n = fitter->
GetNumData() - 1; n >= 0; n--)
4050 for (Int_t n = fitter->
GetNumModel() - 1; n >= 0; n--)
4101 if (action->InheritsFrom(TGo4FitterConfig::Class()))
4103 else if (action->InheritsFrom(TGo4FitAmplEstimation::Class())) {
4106 }
else if (action->InheritsFrom(TGo4FitPeakFinder::Class())) {
4109 }
else if (action->InheritsFrom(TGo4FitterOutput::Class())) {
4112 }
else if (action->InheritsFrom(TGo4FitMinuit::Class())) {
4154 for (Int_t n = pars->
NumPars() - 1; n >= 0; n--)
4168 if (obj->InheritsFrom(TGo4FitData::Class()))
4172 if (obj->InheritsFrom(TGo4FitModel::Class()))
4176 if (obj->InheritsFrom(TGo4FitLinearTrans::Class()))
4180 if (obj->InheritsFrom(TGo4FitMatrixTrans::Class()))
4184 if (obj->InheritsFrom(TGo4FitAxisTrans::Class()))
4216 if (trace && item->
Object()) {
4221 QTreeWidgetItemIterator iter(topitem);
4238 text = item->
Object()->GetName();
4250 text +=
" = " + QString::number(par->
GetValue());
4267 Double_t left, right;
4269 text = QString::number(naxis) +
": ";
4272 case 0: text +=
"[" + QString::number(left) +
"..." + QString::number(right) +
"]";
break;
4273 case 1: text +=
"... " + QString::number(left) +
"] [" + QString::number(right) +
" ...";
break;
4274 case 2: text +=
"[" + QString::number(left) +
" ...";
break;
4275 case 3: text +=
"... " + QString::number(right) +
"]";
break;
4295 text =
"Res" + QString::number(item->
Tag());
4317 item->setText(0, text);
4319 if (trace && item->
Object()) {
4324 QTreeWidgetItemIterator iter(topitem);
4329 (item->
Tag() == it->
Tag()))
4330 it->setText(0, text);
4342 std::cout <<
"Did not found " << std::endl;
4346 QTreeWidgetItemIterator iter(parent);
4369 QTreeWidgetItemIterator iter(parent);
4374 if (!obj || (item->
Object() == obj))
4404 if (oldwidget && (oldwidget->
GetItem() == widgetitem)) {
4416 QWidget *owner =
nullptr;
4447 widget->
SetItem(
this, widgetitem);
4448 ListStack->addWidget(widget);
4449 ListStack->setCurrentWidget(widget);
4480 return data !=
nullptr;
4509 int nrange = gritem->
Tag();
4557 for (Int_t n = pars->
NumPars() - 1; n >= 0; n--)
4563 if (!parent || !lst)
4565 for (Int_t n = lst->GetLast(); n >= 0; n--) {
4567 if (slot && ((slot->
GetOwner() == owner) || !owner))
4577 TObjArray *lst =
dynamic_cast<TObjArray *
>(parent->
Object());
4579 for (Int_t n = lst->GetLast(); n >= 0; n--)
4586 if (!menu->isEmpty())
4587 menu->addSeparator();
4592 AddItemAction(menu,
"Add 1-order polynom",
id + 21, handler);
4593 AddItemAction(menu,
"Add 3-order polynom",
id + 22, handler);
4594 AddItemAction(menu,
"Add 7-order polynom",
id + 23, handler);
4595 menu->addSeparator();
4598 AddItemAction(menu, QString(
"Make ") + TGo4FitModelPolynom::Class()->GetName(),
id + 0, handler);
4599 AddItemAction(menu, QString(
"Make ") + TGo4FitModelGauss1::Class()->GetName(),
id + 1, handler);
4600 AddItemAction(menu, QString(
"Make ") + TGo4FitModelGauss2::Class()->GetName(),
id + 2, handler);
4601 AddItemAction(menu, QString(
"Make ") + TGo4FitModelGaussN::Class()->GetName(),
id + 3, handler);
4602 AddItemAction(menu, QString(
"Make ") + TGo4FitModelFormula::Class()->GetName(),
id + 4, handler);
4603 AddItemAction(menu, QString(
"Make ") + TGo4FitModelFunction::Class()->GetName(),
id + 5, handler);
4604 AddItemAction(menu, QString(
"Make ") + TGo4FitModelFromData::Class()->GetName(),
id + 6, handler);
4609 if (!menu->isEmpty())
4610 menu->addSeparator();
4611 AddItemAction(menu, QString(
"Make ") + TGo4FitDataHistogram::Class()->GetName(),
id + 0, handler);
4612 AddItemAction(menu, QString(
"Make ") + TGo4FitDataGraph::Class()->GetName(),
id + 1, handler);
4613 AddItemAction(menu, QString(
"Make ") + TGo4FitDataProfile::Class()->GetName(),
id + 2, handler);
4614 AddItemAction(menu, QString(
"Make ") + TGo4FitDataRidge::Class()->GetName(),
id + 3, handler);
4620 for (Int_t nd = 0; nd < fitter->
GetNumData(); nd++)
4630 if (!histo || (histo->GetDimension() != 1))
4633 Double_t pos, width, ampl;
4637 Int_t nbin = histo->GetXaxis()->FindBin(pos);
4638 ampl = histo->GetBinContent(nbin);
4640 Double_t limit = pad->GetUymin() * .7 + pad->GetUymax() * .3;
4645 arr->SetLineColor(2);
4646 arr->SetLineWidth(1);
4652 warr->SetLineColor(2);
4653 warr->SetLineWidth(1);
4676 if (!fitter || !data)
4682 for (Int_t nm = 0; nm < fitter->
GetNumModel(); nm++) {
4698 if (!histo || (histo->GetDimension() != 1))
4701 double range = 0.1 * (histo->GetXaxis()->GetXmax() - histo->GetXaxis()->GetXmin());
4703 double ampl = (0.07 + nrange * 0.02) * (histo->GetMaximum() - histo->GetMinimum()) + histo->GetMinimum();
4705 double size = 0.015;
4708 Double_t left, right;
4725 arr->SetLineColor(3);
4726 arr->SetLineWidth(3);
4735 return arr !=
nullptr;
4818 if (
checkConfirm(
"Rebuild data list",
"Remove all current data?"))
4832 if (!data || !fitter)
4835 if (
checkConfirm(
"Delete data", QString(
"Are you sure to delete ") + data->GetName()))
4858 if (
ActivePanel()->GetVisibleRange(pad, 0, xmin, xmax))
4870 for (
int n = 0; n < fitter->
GetNumData(); n++) {
4877 if (
ActivePanel()->GetVisibleRange(pad, 0, xmin, xmax))
4885 if (!model || !info)
4888 *info += model->GetName();
4889 *info +=
" of class: ";
4890 *info += model->ClassName();
4892 if (model->InheritsFrom(TGo4FitModelFormula::Class())) {
4895 *info +=
"\nFormula: ";
4900 if (model->InheritsFrom(TGo4FitModelFunction::Class())) {
4903 *info +=
"\nFunction: ";
4912 if ((mode == 1) || (mode == 2)) {
4918 if (data && fitter) {
4920 *info +=
"\nCounts=";
4922 *info +=
"\nIntegral=";
4923 double v = fitter->
CalculatesIntegral(data->GetName(), model->GetName(), (mode == 1));
4924 *info += QString::number(v);
4931 *info +=
"\nGauss integral=";
4932 *info += QString::number(v);
4947 res =
"internal object";
4951 res =
"reference without pad";
4957 res += pad->GetName();
4962 QString linkname = QString(
"FitSlotLink_%1").arg(slotindex);
4963 const char *itemname =
GetLinkedName(linkname.toLatin1().constData());
4967 res =
"reference to external object";
4977 if (!arr || !fitter)
4980 bool ismodified =
false;
4981 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
4990 for (Int_t k = 0; k <= lst.GetLast(); k++) {
5044 if (!slot || !fitter)
5048 for (
int n = 0; n < fitter->
NumSlots(); n++) {
5050 bool needpad = !subslot->
GetOwned() && (subslot->
GetClass()->InheritsFrom(TH1::Class()) ||
5051 subslot->
GetClass()->InheritsFrom(TGraph::Class()));
5054 if (slot == subslot)
5055 return needpad ? indx : -1;
5073 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
5087 if (!fitter || !model)
5103 if (comp->InheritsFrom(TGo4FitData::Class()))
5147 case 1:
id = 1;
break;
5148 case 2:
id = 2;
break;
5149 default:
id = 3;
break;
5167 NameBase = namebase;
5170 case 0: NameBase =
"Pol";
break;
5173 case 3: NameBase =
"Gauss";
break;
5174 case 4: NameBase =
"Form";
break;
5175 case 5: NameBase =
"Func";
break;
5176 case 6: NameBase =
"FromData";
break;
5177 case 7: NameBase =
"Pol";
break;
5178 case 24: NameBase =
"Lor";
break;
5179 case 25: NameBase =
"Exp";
break;
5180 default: NameBase =
"Model";
5185 if (fitter && (
id != 7))
5188 ModelName = NameBase;
5200 case 7: fitter->
AddPolynoms(data ? data->GetName() :
nullptr, NameBase.Data(), order, NumDim);
break;
5216 if (fitter && model) {
5229 if (!fitter || !model)
5247 model->
SetPosition(0, (pad->GetUxmin() + pad->GetUxmax()) / 2.);
5248 model->
SetWidth(0, TMath::Abs(pad->GetUxmax() - pad->GetUxmin()) * .05);
5249 model->
SetPosition(1, (pad->GetUymin() + pad->GetUymax()) / 2.);
5250 model->
SetWidth(1, TMath::Abs(pad->GetUymax() - pad->GetUymin()) * .05);
5253 Double_t mid, width;
5265 if (obj->InheritsFrom(TGo4FitModelPolynom::Class()))
5267 if (obj->InheritsFrom(TGo4FitModelGauss1::Class()))
5269 if (obj->InheritsFrom(TGo4FitModelGauss2::Class()))
5271 if (obj->InheritsFrom(TGo4FitModelGaussN::Class()))
5273 if (obj->InheritsFrom(TGo4FitModelFormula::Class()))
5275 if (obj->InheritsFrom(TGo4FitModelFunction::Class()))
5277 if (obj->InheritsFrom(TGo4FitModel::Class()))
5284 if (!slot || !itemname)
5292 QString linkname = QString(
"FitSlotLink_%1").arg(slotindex);
5296 AddLink(itemname, linkname.toLatin1().constData());
5298 GetLinked(linkname.toLatin1().constData(), 1);
5313 TObject *obj =
nullptr;
5322 if (obj && createlink) {
5323 TString linkname =
"data_";
5324 linkname += slot->GetName();
5329 QString linkname = QString(
"FitSlotLink_%1").arg(slotindex);
5330 obj =
GetLinked(linkname.toLatin1().constData());
5358 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
5360 if (slot->
GetClass()->InheritsFrom(TH1::Class()) || slot->
GetClass()->InheritsFrom(TGraph::Class()))
5378 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
5381 if (slot->
GetClass()->InheritsFrom(TH1::Class()) || slot->
GetClass()->InheritsFrom(TGraph::Class()))
5398 for (Int_t n = 0; n < fitter->
NumSlots(); n++) {
5427 w->
ClassNameLbl->setText(QString(
"Class name: ") + obj->ClassName());
5429 w->
NameEdt->setText(obj->GetName());
5430 w->
TitleEdt->setText(obj->GetTitle());
5431 TNamed *n =
dynamic_cast<TNamed *
>(obj);
5457 if (!item || !newname || (strlen(newname) == 0))
5459 TNamed *obj =
dynamic_cast<TNamed *
>(item->
Object());
5478 if (!fitter || (fitter->
FindData(newname)))
5488 if (!fitter || (fitter->
FindModel(newname)))
5492 obj->SetName(newname);
5508 TNamed *n =
dynamic_cast<TNamed *
>(w->
GetObject());
5510 n->SetTitle(newtitle);
QFitItem * DefineGraphItem()
QFitItem * Parent() const
int PopupMenuType() const
QFitItem * DefineWidgetItem()
Basic abstract class, combining common properties of data and model.
TCutG * GetRangeCut(Int_t n) const
Returns specified range cut.
TGo4FitParameter * GetAmplPar()
Return amplitude parameter object.
Int_t GetNumRangeCondition() const
Returns number of range condition (exclude range cuts).
void SetRange(Int_t naxis, Double_t min, Double_t max)
Includes axis range in consideration.
void GetRangeCondition(Int_t n, Int_t &typ, Int_t &naxis, Double_t &left, Double_t &right) const
Return value for specified range condition.
void ClearRanges(Int_t naxis=-1)
Clear all range conditions for given axis.
void SetRangeMin(Int_t naxis, Double_t value)
Set minimum axis value, taken into consideration.
Bool_t GetUseBuffers() const
Returns flag of usage of additional buffers.
Bool_t MakeAmpl(Bool_t isFixed=kFALSE)
Create amplitude parameter and adds it to parameters list.
Int_t GetNumRangeCut() const
Returns number of range cuts, assigned to object.
void ExcludeRange(Int_t naxis, Double_t min, Double_t max)
Exclude axis range from consideration.
Bool_t IsAnyRangeLimits() const
Return kTRUE, if any range conditions were introduced.
void SetUseBuffers(Bool_t iUse)
Sets usage of additional buffers.
void RemoveRangeCondition(Int_t n)
Removes specified range condition.
virtual Bool_t CanAmplTouch()
Signals, if amplitude parameter can be removed from or introduced to object.
void SetRangeMax(Int_t naxis, Double_t value)
Set maximum axis value, taken into consideration.
void RemoveRangeCut(Int_t n)
Delete range cut with specified index.
Double_t GetAmplValue()
Return value of amplitude parameter.
void SetAmplValue(Double_t iAmpl)
Set value of amplitude parameter.
void AddRangeCut(TCutG *cut, Bool_t exclude=kFALSE)
Add TCutG object as range condition for two-dimensional case.
Bool_t RemoveAmpl()
Remove amplitude parameter from parameters list.
Data object, which provides access to TGraph and TGraphErrors ROOT objects.
Data objects, which provides access to generic TH1 ROOT histogram.
Data object, which provides access to TProfile ROOT class.
Special object to approximate ridges on multi-dimensional histograms.
Basic abstract class for representing data, which should be fitted.
Int_t DefineDimensions()
Define dimension number of data Create iterator and checks number of dimension.
Int_t GetDataType() const
Returns type of data source.
Bool_t DefineScaleMinMax(Int_t naxis, Double_t &min, Double_t &max)
Return scales minimum and maximum for specified axis.
void FillSlotList(TSeqCollection *list) override
Copy pointers on all slots of data object to list.
virtual Bool_t IsAnyDataTransform() const
Return kTRUE, if either initial data axis or data bins are transformed by TGo4FitData object.
Object, used to store dependency of one parameter from other, calculated via expression.
Bool_t IsInitValue() const
const TString & GetExpression() const
Double_t GetInitValue() const
Bool_t IsResultDepend() const
const TString & GetParameter() const
void SetForRange(TGo4FitComponent *Comp, Int_t num, Double_t rangey, Double_t shiftx)
void SetForWidth(TGo4FitModel *model, TGo4FitGuiArrow *forposition)
void SetItem(QFitItem *item, TGo4FitPanel *panel)
TGo4FitModel * GetModel() const
QFitItem * GetItem() const
void SetForPosition(TGo4FitModel *model, TGo4FitGuiArrow *forwidth, Double_t iLineAmpl)
The linear transformation of selected data axis.
Matrix transformation of scale values.
Result values, taken from Minuit object.
Minuit minimization action.
Int_t GetNumResults() const
Returns number of result objects.
TGo4FitMinuitResult * GetResult(Int_t indx) const
Get TGo4FitMinuitResult object with given index.
void RemoveResult(TGo4FitMinuitResult *res)
Remove result from results list and delete it.
void AddCommand(const char *iCommand)
Add Minuit command to command list.
Model object, which is uses TGo4FitData object to produce model bins.
Model objects, which uses external user function to calculate model values.
const char * GetFunctionName() const
Returns function name in library.
const char * GetLibraryName() const
Returns library name.
One dimensional gaussian peak.
Two dimensional gaussian peak.
N-dimensional gaussian peak.
Model objects, which reproduce component of polynomial function.
Basic abstract class for representing model components of fitted data.
void ClearAssignments()
Remove all assignments.
void SetBackgroundGroupIndex()
Set group index to background (index = 0).
virtual Bool_t SetPosition(Int_t naxis, Double_t pos)
Sets position of model component, if possible.
const char * AssignmentName(Int_t n)
Returns name of data, to which model object is assigned.
Int_t GetGroupIndex() const
Returns group index of model.
Int_t NumPars() override
Return number of parameters in list.
virtual Bool_t GetWidth(Int_t naxis, Double_t &width)
Returns with of model component, if exists.
virtual Bool_t GetPosition(Int_t naxis, Double_t &pos)
Return position of model, if exists.
Bool_t IsAssignTo(const char *DataName) const
Checks, if model assigned to given data.
virtual Double_t Integral()
Calculates integral of model component.
void SetGroupIndex(Int_t index=-1)
Set group index of model.
void AssignToData(const char *DataName, Double_t RatioValue=1., Bool_t FixRatio=kFALSE)
Assign model to specified data object.
virtual Bool_t SetWidth(Int_t naxis, Double_t width)
Sets width of model component, if possible.
void ClearAssignmentTo(const char *DataName)
Remove assignment to given data (if exists).
Int_t NumAssigments() const
Returns number of assignment for this model.
Extension of ROOT TNamed class.
TNamed * GetOwner()
Return owner of object.
const char * GetFullName()
Returns full name of object.
virtual void DeleteModelWithPrimit(TGo4FitGuiArrow *arr)
virtual void Wiz_DelDataBtn_clicked()
virtual void PF_AmplSlider_sliderReleased()
TGo4ViewPanel * fxDrawNewPanel
virtual void FillParsWidget()
virtual int GetPadIndexForSlot(TGo4FitSlot *slot)
virtual void Wiz_TakeCurrentRange()
virtual void PF_SumUpSpin_valueChanged(int num)
virtual void Fitter_New()
virtual void WorkWithFitter(const char *itemname, TGo4ViewPanel *panel, TPad *pad)
virtual void MainFitBtn_clicked()
virtual void Fitter_NewForActivePad(bool overwrite)
virtual void FillNamedWidget(QFitNamedWidget *w)
virtual void ArrowChanged(TGo4FitGuiArrow *arr)
virtual void Cmd_DeleteOutputActions(QFitItem *item)
virtual void PF_AmplSlider_valueChanged(int zn)
virtual TPad * FindPadWhereData(TGo4FitData *data)
virtual void Wiz_DataList_doubleClicked(QListWidgetItem *)
virtual void Smp_GaussianBtn_clicked()
virtual void Wiz_RebuildDataList()
virtual void DropOnPanel(QDropEvent *event, const char *itemname, TClass *cl, int kind)
virtual void PF_WidthEdit_returnPressed()
virtual void Cmd_MoveAction(QFitItem *item, int dir)
virtual TPad * FindPadForSlot(TGo4FitSlot *slot)
virtual void UpdateWizDataList()
virtual void FillDependencyList(QFitItem *parent)
virtual void Cmd_ClearFitter()
virtual void FitterMenuItemSelected(int id)
virtual bool FillPopupForSlot(TGo4FitSlot *slot, QMenu *menu)
virtual void PaintFitter(TGo4Fitter *fitter, QFitItem *item, bool update)
virtual TGo4Fitter * CreateFitterFor(TGo4ViewPanel *panel, TPad *pad, const char *name)
virtual void Wiz_RebuildDataBtn_clicked()
virtual void Wiz_CreateNewModel(int id)
virtual TGo4FitModel * CreateModel(int id, const char *namebase, TGo4Fitter *fitter, TGo4FitData *data)
virtual void Fitter_UseWorkspace()
virtual void Cmd_DeleteAssosiatedModels(QFitItem *item)
virtual void Wiz_AddDataBtn_clicked()
virtual void FillDataTypesList(QMenu *menu, int id, const QString &handler="")
bool checkConfirm(const QString &title, const QString &msg)
virtual void AboutToShowViewMenu()
virtual void Cmd_RemoveRangeCondition(QFitItem *item)
virtual void RemoveDrawObjects()
virtual void FitList_currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)
virtual bool PaintModel(TGo4FitModel *model, TPad *pad, QFitItem *item)
void changeEvent(QEvent *event) override
virtual void Wiz_UseSelectedRange()
virtual void Smp_ClearBtn_clicked()
virtual void Cmd_RemoveRangeConditions(QFitItem *item)
QWidget * fxCurrentItemWidget
virtual void Wiz_AddModelBtn_clicked()
virtual void Cmd_AssignModelToData(QFitItem *item, int id)
virtual void Button_PerformFit()
virtual void UpdateWizModelsList(bool changestack)
virtual void UpdateItem(QFitItem *item, bool trace)
void AddItemAction(QMenu *menu, const QString &name, int id, const QString &handler="")
virtual bool PaintModelsFor(TGo4Fitter *fitter, TGo4FitData *data, QFitItem *item, bool update)
virtual bool UpdateObjectReferenceInSlot(TGo4FitSlot *slot, bool createlink)
virtual bool FillPopupForItem(QFitItem *item, QMenu *menu)
virtual void Cmd_MemorizePars(QFitItem *item)
virtual void Cmd_DeleteData(QFitItem *item)
virtual bool PaintRange(TGo4FitComponent *comp, int nrange, TPad *pad, QFitItem *item)
virtual TGo4Fitter * GetFitter()
virtual void Cmd_AddDependency(QFitItem *item)
virtual void Cmd_CloneModel(QFitItem *item)
virtual void ItemMenuItemSelected(int id)
virtual int DefineModelWidgetType(TObject *obj)
virtual void panelSlot(TGo4ViewPanel *, TPad *, int)
virtual void RemoveItemWidget()
virtual void Wiz_DrawDataBtn_clicked()
virtual TPad * FindPadWhereModel(TGo4FitModel *model)
virtual void Wiz_PFPolynSpin_valueChanged(int zn)
virtual void UpdateWizDataBtns()
void linkedObjectUpdated(const char *linkname, TObject *obj) override
virtual void Cmd_AddNewPar(QFitItem *item)
virtual bool ShowItem(QFitItem *item, bool force)
virtual void Fitter_UpdateReferences()
virtual void RemoveFitterLink()
virtual void CloseDrawPanel()
virtual void WorkWithFitterInSlot(TGo4Slot *slot)
virtual void FillParsTable(QTableWidget *table, TGo4Fitter *fitter, TGo4FitModel *model, bool LinesView, TObjArray *TableList)
virtual void Button_WorkWithPanel()
virtual void PF_RelNoiseSlider_sliderReleased()
virtual void Cmd_ExecuteAction(QFitItem *item)
virtual void UpdateWizardPage()
virtual void Wiz_ModelList_doubleClicked(QListWidgetItem *)
virtual void MainDrawBtn_clicked()
virtual void UpdateStatusBar(const char *info=nullptr)
virtual TGo4FitData * Wiz_SelectedData()
virtual TPad * ActivePad()
virtual void Wiz_DataUseRangeBtn_clicked()
virtual void AboutToShowFitterMenu()
virtual void ChangeObjectName(QFitNamedWidget *w, const char *newname)
QSignalMapper * FitterMap
bool fbSaveWithReferences
virtual void PF_WidthEdit_textChanged(const QString &str)
virtual void UpdateWizStackWidget()
virtual void Smp_ExponentBtn_clicked()
virtual void Wiz_FitFuncCmb_activated(int typ)
virtual void Cmd_UpdateAllSlots(QFitItem *item)
virtual void Wiz_DataListSelect(QListWidgetItem *)
virtual void Fitter_Delete()
virtual void PF_MinWidthEdt_returnPressed()
virtual void MainAttachBtn_clicked()
virtual void Cmd_MemorizePar(QFitItem *item)
virtual void Button_SimpleClear()
virtual void Fitter_PrintParameters()
virtual TGo4Fitter * CloneFitter()
virtual void Button_PeakFinder()
virtual bool WorkingWithPanel()
virtual TGo4FitPeakFinder * GetPeakFinder(bool autocreate)
virtual void UpdatePFAmplLbl()
virtual void PF_MaxWidthEdt_textChanged(const QString &str)
virtual void Cmd_DeleteActions(QFitItem *item)
virtual void Smp_LorenzBtn_clicked()
bool IsAcceptDrag(const char *itemname, TClass *cl, int kind) override
virtual void LocateModel(TGo4FitModel *model, TGo4FitData *data, bool usepad)
virtual void AboutToShowItemMenu()
virtual QFitItem * GetFitterItem()
virtual void ExecutePopupForSlot(QFitItem *item, TGo4FitSlot *slot, int id)
virtual void FitList_customContextMenuRequested(const QPoint &)
virtual void AboutToShowSettMenu()
virtual bool ShowItemAsText(QFitItem *item, bool force)
void linkedRemoved(TGo4Slot *slot, TObject *obj) override
virtual void Cmd_RememberPars(QFitItem *item)
virtual void UpdateItemsOfType(int typ, QFitItem *parent=nullptr)
virtual TGo4FitData * CreateData(int id, const char *name)
bool fbUseSamePanelForDraw
virtual void UpdateSimplePage()
virtual void Wiz_PFUsePolynChk_toggled(bool zn)
virtual void Wiz_MigradIterSpin_valueChanged(int num)
virtual void Cmd_DeleteFitter()
virtual void Wiz_BackgroundChk_toggled(bool chk)
virtual void Wiz_GetModelInfo(TGo4FitModel *model, QString *info)
virtual void Cmd_DeleteAction(QFitItem *item)
virtual void Wiz_ParTable_valueChanged(int nrow, int ncol)
virtual void Cmd_AddNewAction(QFitItem *item, int id)
virtual void Wiz_DataClearRangesBtn_clicked()
virtual void UpdateWizModelsBtns()
void linkedObjectRemoved(const char *linkname) override
virtual void Wiz_ModelList_itemChanged(QListWidgetItem *)
virtual QFitItem * FindItem(TObject *obj, int ObjectType, QFitItem *parent)
virtual void Cmd_AddRangeCondition(QFitItem *item, int id)
virtual void ChangeSettings(int id)
virtual void ClearObjectReferenceInSlots()
virtual void ChangeViewType(int id)
virtual void FitItemDeleted(QFitItem *item)
virtual void FillModelTypesList(QMenu *menu, int id, bool extend, const QString &handler="")
virtual void Button_SimpleFit(int nmodel)
virtual void Cmd_AddNewData(QFitItem *item, int id)
virtual void Cmd_ExecuteActions(QFitItem *item, bool expert)
virtual void Wiz_DataBufChk_toggled(bool zn)
virtual void Cmd_RemoveModel(TGo4FitModel *model)
virtual void UpdatePFRelNoiseLbl()
TGo4ViewPanel * fxActivePanel
virtual void Cmd_DeleteDependencies(QFitItem *item)
virtual void Cmd_AssignModelToAllData(QFitItem *item)
void focusInEvent(QFocusEvent *event) override
virtual void Wiz_MinSetupBtn_clicked()
virtual TGo4FitModel * Wiz_SelectedModel()
virtual void Cmd_DeleteModels(QFitItem *item)
virtual void Cmd_ClearAssigments(QFitItem *item)
bool fbRecalculateGaussWidth
virtual bool WorkingWithOnlyPad()
virtual void Wiz_ShowAllMod_toggled(bool zn)
virtual void FillParsList(QFitItem *item)
virtual bool UpdateObjectReferenceInSlots()
virtual void MainParsBtn_clicked()
virtual void Wiz_CreateNewData(int id)
virtual void ShowPanelPage(int id)
virtual void Smp_PolynomBtn_clicked()
virtual void SetFitter(TGo4Fitter *)
virtual void PF_MinWidthEdt_textChanged(const QString &str)
virtual void FillSlotsList(QFitItem *parent, const TObjArray *lst, TObject *owner)
virtual TPad * FindPadWhereComp(TGo4FitComponent *comp)
virtual QString Wiz_GetSlotSourceInfo(TGo4FitSlot *slot)
TGo4FitPanel(QWidget *parent=nullptr, const char *name=nullptr)
virtual void Cmd_AddNewModel(QFitItem *item, int id)
virtual void RemovePrimitives()
virtual void Fitter_RollbackParameters()
virtual void SetItemText(QFitItem *item, bool trace)
virtual void Cmd_DeleteDependency(QFitItem *item)
virtual void LineParsChk_toggled(bool)
virtual void Cmd_DeleteModel(QFitItem *item)
virtual TGo4ViewPanel * ActivePanel()
virtual void Wiz_PFSetupBtn_clicked()
virtual void PF_MinNoiseEdit_textChanged(const QString &str)
virtual void Fitter_SaveToBrowser()
virtual void UpdateActivePage()
virtual void Cmd_ClearAssigment(QFitItem *item)
virtual void Cmd_DrawData(QFitItem *item)
virtual void Cmd_CreateFitter()
virtual void Cmd_ItemPrint(QFitItem *item)
virtual void CreateFitSlotLink(TGo4FitSlot *slot, const char *itemname)
virtual void ChangeObjectTitle(QFitNamedWidget *w, const char *newtitle)
virtual void UpdateItemMenu()
virtual void Wiz_CloneModelBtn_clicked()
virtual void Cmd_DeleteMinuitResult(QFitItem *item)
virtual bool ShowItemAsGraph(QFitItem *item, bool force)
virtual void Cmd_RememberPar(QFitItem *item)
virtual void UpdateExtendedPage()
virtual bool Wiz_RemoveData()
virtual void PF_RelNoiseSlider_valueChanged(int zn)
virtual void Cmd_CreateAppropriateFitter()
virtual void Cmd_DeleteAllData(QFitItem *item)
virtual void ParsTable_valueChanged(int nrow, int ncol)
virtual void FindersTab_currentChanged(int)
virtual void MainFindBtn_clicked()
virtual void Wiz_DelModelBtn_clicked()
virtual void UpdateWizPaint(int mode)
virtual void Cmd_DeletePars(QFitItem *item)
virtual void CreateDataFor(TGo4ViewPanel *panel, TPad *pad, TGo4Fitter *fitter)
virtual void Wiz_FitNameEdt_textChanged(const QString &name)
virtual void Cmd_DeletePar(QFitItem *item)
virtual void PF_MaxWidthEdt_returnPressed()
virtual void Wiz_ModelListSelect(QListWidgetItem *)
virtual void Wiz_ModelBufChk_toggled(bool zn)
virtual void Button_FitterDraw(TGo4FitData *selecteddata)
virtual void PF_MinNoiseEdit_returnPressed()
virtual void ParsTableChanged(QTableWidget *table, int nrow, int ncol, bool LinesView, TObjArray *TableList, bool updatepaint)
virtual void Wiz_DataSlotsTable_contextMenuRequested(const QPoint &pnt)
virtual void ChangeModelPar(QFitModelWidget *w, int npar, int value)
TObjArray * fxParsTableList
virtual void Cmd_SaveFitter(bool ask)
virtual void Wiz_UseAmplEstimChk_toggled(bool chk)
Model and data objects parameter.
void RememberValue()
Restore value, which was previously memorized.
void SetEpsilon(Double_t iEpsilon)
Return epsilon value of parameter.
Bool_t GetEpsilon(Double_t &eps) const
Return value of parameter epsilon.
void SetRange(Double_t iRangeMin, Double_t iRangeMax)
Set range minimum and maximum values.
Double_t GetValue() const
Return parameter value.
Double_t GetError() const
Get value of parameter error.
Bool_t GetRange(Double_t &min, Double_t &max) const
Return range left (minimum) and right (maximum) values.
Bool_t GetFixed() const
Return status, if parameter fixed or not.
void SetError(Double_t iError)
Set value of parameter error.
void ClearRange()
Clear status, that range was specified.
void SetValue(Double_t iValue)
Set parameter value.
void SetFixed(Bool_t iFixed)
Set status of parameter fixed or not.
void MemorizeValue()
Memorize value of parameter.
List of TGo4FitParameter objects.
void SetParsNames(const char *name0="Par0", const char *name1="Par1", const char *name2="Par2", const char *name3="Par3", const char *name4="Par4", const char *name5="Par5", const char *name6="Par6", const char *name7="Par7", const char *name8="Par8", const char *name9="Par9")
Set names of first 10 parameters.
TGo4FitParameter * FindPar(const char *ParName)
Find parameter object with given name.
Bool_t RemovePar(const char *name)
Remove parameter from list with given name.
virtual bool CanRollbackPars()
Return true if parameters can be safely restored from memorized values;.
const char * GetParFullName(Int_t n)
Return full name of parameter with given index.
virtual void MemorizePars()
Memorize values of all parameters.
TGo4FitParameter * GetPar(Int_t n)
Return parameter according given index.
void ClearPars()
Remove all parameters from list.
virtual void RememberPars()
Restore parameters values, which were stored by MemorizePars() routine;.
TGo4FitParameter * CreatePar(const char *ParName, const char *Title, Double_t iValue=0)
Create new TGo4FitParameter object with given name, title and parameter value, and put this object to...
virtual Int_t NumPars()
Return number of parameters in list.
void Set0MinWidth(Double_t min)
Double_t Get0MaxAmplFactor() const
Double_t Get1LineWidth() const
Bool_t GetUsePolynom() const
Int_t GetPeakFinderType() const
void SetPolynomOrder(Int_t order)
Double_t Get2NoiseFactor() const
void Set0MaxWidth(Double_t max)
Double_t Get0MaxWidth() const
void Set0MaxAmplFactor(Double_t factor)
void SetPeakFinderType(Int_t typ)
Int_t Get2ChannelSum() const
void Set2NoiseFactor(Double_t factor)
Double_t Get2NoiseMinimum() const
void SetDataName(const char *name)
void SetClearModels(Bool_t clear)
void Set1LineWidth(Double_t width)
void Set2ChannelSum(Int_t sum)
void SetUsePolynom(Bool_t use)
Double_t Get0MinWidth() const
void Set2NoiseMinimum(Double_t min)
Int_t GetPolynomOrder() const
void ClearSlot(TGo4FitSlot *slot, Bool_t NonOwned)
Clear object in specified slot.
Int_t NumSlots()
Returns number of slots in list.
void SetSaveFlagForObjects(Int_t iSaveFlag, const char *PlaceName=nullptr)
Set save flag for object(s), assigned to fitter.
TGo4FitSlot * GetSlot(Int_t nslot)
Returns slots from list with specified index.
const TObjArray * GetSlotList(Bool_t ForceUpdate=kFALSE)
Return pointer in TObjArray with list of all slots in list.
Managing pointers on specific objects.
void ClearConnectionToSlot()
Clear connection to other slot.
TGo4FitSlot * GetConnectedSlot() const
Returns pointer to connected slot or 0, if not connected.
TClass * GetClass() const
Return pointer on class for desired object.
TObject * CloneObject(const char *newname=nullptr)
Clone object in slot and returns pointer on new object.
Bool_t IsSuitableClass(TClass *cl) const
Checks, if class corresponds to specified for slot.
Bool_t ConnectToSlot(TGo4FitSlot *slot)
Connect this slot to provided slot.
Bool_t GetOwned() const
Return ownership flag.
Bool_t IsSuitable(TObject *obj) const
Checks, if object class corresponds to class, specified for slot.
Bool_t CanConnectToSlot(TGo4FitSlot *slot)
Checks, if slot can be connected to other.
Bool_t IsObject() const
Return kTRUE, if object assigned to slot.
Bool_t SetObject(TObject *iObject, Bool_t iOwned=kFALSE, Bool_t CheckClass=kTRUE)
Sets object to slot.
TObject * GetObject() const
Return pointer on assigned object.
void DoActions(Bool_t AllowFitterChange=kFALSE, TObjArray *Actions=nullptr)
Executes actions list.
void DeleteOutputActions()
Remove and delete all output actions from actions list.
void DeleteActions()
Remove and delete all actions from actions list.
TGo4FitterOutput * AddOutputAction(const char *Action, const char *Option=nullptr)
Creates and add TGo4FitterOutput action with given parameters to actions list.
Int_t GetResultNDF() const
Return result value of number of degree of freedom.
Double_t GetResultFF() const
Return result value of fit function.
void DeleteAction(TGo4FitterAction *action)
Remove action from actions list and destroy it.
TGo4FitterAction * GetAction(Int_t num)
Returns pointer on action with given index.
void AddAction(TGo4FitterAction *Action)
Add action to action list.
void AddSimpleMinuit()
Creates and add TGo4FitMinuit object to actions list.
void DoAction(TGo4FitterAction *Action)
Executes specified action.
void ReplaceAction(TGo4FitterAction *action, Int_t dir)
Shift action in action list upward (dir=-1) or downward (dir=+1).
Int_t GetNumActions() const
Returns number of action in actions list.
void AddActionAt(TGo4FitterAction *Action, Int_t indx)
Add action to action list at specified index.
Basic class for objects, which performs actions on fitter.
virtual Bool_t CanChangeFitter() const
Fitter configuration action.
TObjArray & GetParsDepend()
Returns list of TGo4FitDependency objects, used for dependencies calculations.
TObjArray & GetParsInit()
Returns list of TGo4FitDependency objects, used for parameters initialization.
TGo4FitParsList & GetParsNew()
Get list of TGo4FitParameter objects, which can be used in minimization and dependency calculations.
TGo4FitParsList & GetParsCfg()
Get list of TGo4FitParameter objects, used as explicit configuration for minimizing.
TObjArray & GetResults()
Returns list of TGo4FitDependency objects, used for calculating result values for fitter.
Central class of Go4Fit package.
Double_t CalculatesModelIntegral(const char *ModelName, Bool_t OnlyCounts=kFALSE)
Calculates integral of model (if ModelName is specified) if OnlyCounts specified, only sum of values ...
TGo4FitModel * GetModel(Int_t n)
Return model component with given index.
TGo4FitModel * RemoveModel(const char *ModelName, Bool_t IsDel=kFALSE)
Remove model component from fitter.
void DeleteModelsAssosiatedTo(const char *DataName)
Remove models associated with specific data.
const char * GetDataName(Int_t n)
Return name of data object with given index.
TGo4FitData * AddData(TGo4FitData *d)
Add data object to fitter.
TGo4FitData * RemoveData(const char *DataName, Bool_t IsDel=kFALSE)
Remove data object from fitter.
void AddAmplEstimation(Int_t NumIters=1)
Add amplitude estimation to actions list.
void SetMemoryUsage(Int_t iMemoryUsage)
Set value of memory usage.
void DeleteAllData()
Delete all data objects from fitter.
void ClearModelAssignmentTo(const char *ModelName, const char *DataName=nullptr)
Remove assignment to given data (if exists).
Int_t GetNumModel() const
Return number of model component in fitter.
TGo4FitModel * FindModel(const char *ModelName)
Return model component with given name.
TGo4FitModel * CloneModel(const char *ModelName, const char *NewName=nullptr)
Clones specified model.
TString FindNextName(const char *Head, Int_t start, Bool_t isModel=kTRUE)
void AddStandardActions()
Add list of standard actions to fitter.
TGo4FitModel * AddModel(TGo4FitModel *m)
Add model component to fitter.
TGo4FitData * GetData(Int_t n)
Return data object with given index.
TGo4FitData * FindData(const char *DataName)
Return data object with given name.
Int_t GetNumData() const
Return number of data objects in fitter.
void Clear(Option_t *option="") override
Remove all data, all models and all actions.
void AddPolynoms(const char *DataName, const char *NamePrefix, Int_t MaxOrder=1, Int_t NumAxis=1, Int_t GroupIndex=0)
Construct full polynom for specified data object.
Bool_t CalculatesMomentums(const char *DataName, Bool_t UseRanges, Bool_t SubstractModels, Double_t &first, Double_t &second)
Calculates first and second momentum for specified data Usage of ranges and subtraction of model can ...
Double_t CalculatesIntegral(const char *DataName, const char *ModelName=nullptr, Bool_t OnlyCounts=kFALSE)
Calculates integral for data or model (if ModelName is specified) if OnlyCounts specified,...
void AssignModelTo(const char *ModelName, const char *DataName, Double_t RatioValue=1., Bool_t FixRatio=kFALSE)
Assign model to specified data object.
void ChangeDataNameInAssignments(const char *oldname, const char *newname)
Change data name in model component assignments.
void SetFitFunctionType(Int_t iFitFunctionType)
Set fitted function type for minimization.
Int_t GetFitFunctionType() const
Return type of fitted function.
TObject * CreateDrawObject(const char *ObjName, const char *DataName, Bool_t IsModel=kFALSE, const char *ModelName=nullptr)
Create object (TH1 or TGraph), which can be drawn.
void DeleteAllModels()
Delete all model objects from fitter.
static void Info(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 1.
void panelSignal(TGo4ViewPanel *, TPad *, int)
static TGo4MdiArea * Instance()
TObject * GetAssignedObject()
virtual void ShootRepaintTimer()
virtual TObject * GetDrawObject(TPad *pad, const char *name)
virtual TObject * GetPadMainObject(TPad *pad)
virtual void CollectSpecialObjects(TPad *pad, TObjArray *objs, int selectkind)
virtual void MarkPadModified(TPad *pad)
virtual void DeleteDrawObject(TPad *pad, const char *name)
virtual bool IsPadHasSubPads(TGo4Slot *padslot)
virtual bool DeleteDrawObjects(TPad *pad, int kindtodelete)
virtual TGo4Slot * GetPadMainObjectSlot(TPad *pad)
virtual TPad * GetActivePad()
virtual TGo4Slot * GetDrawObjectSlot(TPad *pad, const char *name)
virtual TH1 * GetPadHistogram(TPad *pad)
virtual void SetAutoScale(bool on, TPad *selpad)
virtual int GetNumberOfPads(TPad *toppad)
virtual TPad * GetSubPad(TPad *toppad, int num, bool onlytoplevel)
virtual TGo4Slot * AddDrawObject(TPad *pad, int kind, const char *itemname, TObject *obj, bool owner, const char *drawopt)