18 #include <QtCore/QSignalMapper> 23 #include <QMessageBox> 24 #include <QApplication> 25 #include <QFileDialog> 26 #include <QInputDialog> 29 #include "TObjArray.h" 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) {
551 return GetLinkedCast<TGo4Fitter>(
"Fitter");
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++)
1864 UpdateItem(dynamic_cast<QFitItem *>(item->child(n)),
true);
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())
3730 menu->addAction(name, [
this,
id]() { ItemMenuItemSelected(id); });
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);
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")
Double_t GetValue() const
virtual void ShootRepaintTimer()
Bool_t DefineScaleMinMax(Int_t naxis, Double_t &min, Double_t &max)
virtual bool ShowItem(QFitItem *item, bool force)
virtual TObject * GetDrawObject(TPad *pad, const char *name)
virtual bool IsPadHasSubPads(TGo4Slot *padslot)
virtual void MainFindBtn_clicked()
virtual void Cmd_RememberPar(QFitItem *item)
virtual TGo4FitData * Wiz_SelectedData()
virtual void MainAttachBtn_clicked()
Double_t CalculatesIntegral(const char *DataName, const char *ModelName=nullptr, Bool_t OnlyCounts=kFALSE)
Bool_t GetUsePolynom() const
TGo4FitParsList & GetParsCfg()
virtual void Cmd_AddNewData(QFitItem *item, int id)
virtual void ArrowChanged(TGo4FitGuiArrow *arr)
virtual void UpdateWizModelsList(bool changestack)
Bool_t GetUseBuffers() const
virtual void Button_SimpleClear()
virtual void Cmd_AddDependency(QFitItem *item)
virtual void PF_MinWidthEdt_returnPressed()
virtual void UpdatePFAmplLbl()
void SetUseBuffers(Bool_t iUse)
bool fbSaveWithReferences
virtual void Smp_PolynomBtn_clicked()
void SetMemoryUsage(Int_t iMemoryUsage)
TCutG * GetRangeCut(Int_t n) const
virtual TPad * FindPadForSlot(TGo4FitSlot *slot)
virtual void Cmd_DrawData(QFitItem *item)
void RemoveResult(TGo4FitMinuitResult *res)
Bool_t IsResultDepend() const
void DoAction(TGo4FitterAction *Action)
virtual void Cmd_DeleteAllData(QFitItem *item)
TGo4FitSlot * GetSlot(Int_t nslot)
bool FindInParents(QFitItem *item)
virtual void Cmd_AddRangeCondition(QFitItem *item, int id)
TGo4FitMinuitResult * GetResult(Int_t indx) const
void ClearRanges(Int_t naxis=-1)
void Set2NoiseFactor(Double_t factor)
virtual void Cmd_DeleteDependencies(QFitItem *item)
virtual bool UpdateObjectReferenceInSlot(TGo4FitSlot *slot, bool createlink)
virtual TGo4Fitter * CloneFitter()
virtual void Cmd_MemorizePar(QFitItem *item)
void SetFitFunctionType(Int_t iFitFunctionType)
virtual TPad * FindPadWhereModel(TGo4FitModel *model)
void AddAmplEstimation(Int_t NumIters=1)
virtual void Fitter_UpdateReferences()
virtual void Button_WorkWithPanel()
Double_t Get0MinWidth() const
virtual void UpdateWizardPage()
Int_t GetNumRangeCut() const
virtual void Wiz_RebuildDataBtn_clicked()
virtual void Wiz_ModelBufChk_toggled(bool zn)
void DeleteAction(TGo4FitterAction *action)
virtual void RemoveFitterLink()
const char * GetLibraryName() const
virtual void RemoveItemWidget()
static void Info(const char *text,...) GO4_PRINTF_ARGS
bool fbUseSamePanelForDraw
virtual void UpdatePFRelNoiseLbl()
Bool_t GetEpsilon(Double_t &eps) const
virtual void PF_WidthEdit_returnPressed()
virtual void WorkWithFitterInSlot(TGo4Slot *slot)
TGo4FitModel * FindModel(const char *ModelName)
TGo4FitParameter * CreatePar(const char *ParName, const char *Title, Double_t iValue=0)
void ClearModelAssignmentTo(const char *ModelName, const char *DataName=nullptr)
void SetRangeMin(Int_t naxis, Double_t value)
static TGo4MdiArea * Instance()
virtual TGo4Slot * GetDrawObjectSlot(TPad *pad, const char *name)
virtual void SetItemText(QFitItem *item, bool trace)
virtual void ChangeObjectName(QFitNamedWidget *w, const char *newname)
virtual void Cmd_DeleteOutputActions(QFitItem *item)
virtual void Cmd_DeleteDependency(QFitItem *item)
void AddPolynoms(const char *DataName, const char *NamePrefix, Int_t MaxOrder=1, Int_t NumAxis=1, Int_t GroupIndex=0)
void ClearConnectionToSlot()
virtual void Cmd_DeleteActions(QFitItem *item)
virtual void Smp_ClearBtn_clicked()
virtual void Fitter_New()
TGo4FitParameter * GetPar(Int_t n)
virtual void Cmd_DeleteModels(QFitItem *item)
void AssignToData(const char *DataName, Double_t RatioValue=1., Bool_t FixRatio=kFALSE)
virtual void Wiz_DataListSelect(QListWidgetItem *)
virtual void UpdateWizPaint(int mode)
virtual Bool_t CanAmplTouch()
virtual void Button_PeakFinder()
void AddCommand(const char *iCommand)
virtual void MemorizePars()
virtual void Wiz_CreateNewModel(int id)
Int_t GetPolynomOrder() const
virtual void FillSlotsList(QFitItem *parent, const TObjArray *lst, TObject *owner)
virtual TPad * ActivePad()
void AddAction(TGo4FitterAction *Action)
void SetDataName(const char *name)
virtual Bool_t SetPosition(Int_t naxis, Double_t pos)
virtual void UpdateWizModelsBtns()
virtual void UpdateWizDataBtns()
virtual void ClearObjectReferenceInSlots()
void linkedObjectRemoved(const char *linkname) override
Int_t GetPeakFinderType() const
virtual void Wiz_DataList_doubleClicked(QListWidgetItem *)
virtual void Fitter_SaveToBrowser()
void SetForRange(TGo4FitComponent *Comp, Int_t num, Double_t rangey, Double_t shiftx)
virtual TGo4Fitter * GetFitter()
virtual void Wiz_ModelListSelect(QListWidgetItem *)
virtual void CreateDataFor(TGo4ViewPanel *panel, TPad *pad, TGo4Fitter *fitter)
void SetForPosition(TGo4FitModel *model, TGo4FitGuiArrow *forwidth, Double_t iLineAmpl)
virtual void Wiz_AddModelBtn_clicked()
virtual Double_t Integral()
virtual void Wiz_ShowAllMod_toggled(bool zn)
Int_t GetNumRangeCondition() const
virtual void Smp_GaussianBtn_clicked()
virtual void Cmd_DeletePar(QFitItem *item)
virtual QString Wiz_GetSlotSourceInfo(TGo4FitSlot *slot)
virtual void Wiz_TakeCurrentRange()
void ClearAssignmentTo(const char *DataName)
void linkedObjectUpdated(const char *linkname, TObject *obj) override
virtual void ClosePanel()
const char * GetFullName()
virtual Bool_t IsAnyDataTransform() const
virtual void FitterMenuItemSelected(int id)
virtual void Cmd_DeleteData(QFitItem *item)
virtual void LocateModel(TGo4FitModel *model, TGo4FitData *data, bool usepad)
TObject * CloneObject(const char *newname=nullptr)
void AssignModelTo(const char *ModelName, const char *DataName, Double_t RatioValue=1., Bool_t FixRatio=kFALSE)
Int_t Get2ChannelSum() const
Double_t Get2NoiseMinimum() const
bool checkConfirm(const QString &title, const QString &msg)
virtual void Cmd_AddNewAction(QFitItem *item, int id)
virtual TGo4Slot * GetPadMainObjectSlot(TPad *pad)
void ClearSlot(TGo4FitSlot *slot, Bool_t NonOwned)
void SetAmplValue(Double_t iAmpl)
void Set2NoiseMinimum(Double_t min)
void AddItemAction(QMenu *menu, const QString &name, int id, const QString &handler="")
virtual void Fitter_PrintParameters()
const char * AssignmentName(Int_t n)
virtual void Wiz_GetModelInfo(TGo4FitModel *model, QString *info)
TGo4FitData * RemoveData(const char *DataName, Bool_t IsDel=kFALSE)
virtual void UpdateItemMenu()
virtual void PF_MinNoiseEdit_returnPressed()
void ReplaceAction(TGo4FitterAction *action, Int_t dir)
void changeEvent(QEvent *event) override
QFitItem * DefineWidgetItem()
virtual void Wiz_DataSlotsTable_contextMenuRequested(const QPoint &pnt)
TGo4FitModel * RemoveModel(const char *ModelName, Bool_t IsDel=kFALSE)
virtual void ClearCanvas()
void GetRangeCondition(Int_t n, Int_t &typ, Int_t &naxis, Double_t &left, Double_t &right) const
void SetPeakFinderType(Int_t typ)
virtual void PaintFitter(TGo4Fitter *fitter, QFitItem *item, bool update)
virtual void Cmd_DeletePars(QFitItem *item)
virtual void Divide(int numX, int numY)
virtual void ChangeViewType(int id)
virtual void Cmd_UpdateAllSlots(QFitItem *item)
virtual void Cmd_CreateFitter()
virtual bool UpdateObjectReferenceInSlots()
Bool_t IsAssignTo(const char *DataName) const
virtual void Button_SimpleFit(int nmodel)
TGo4FitPanel(QWidget *parent=nullptr, const char *name=nullptr)
virtual void AboutToShowViewMenu()
Double_t Get0MaxWidth() const
void DeleteModelsAssosiatedTo(const char *DataName)
Double_t GetError() const
bool getBool(const QString &name, bool def=true)
void SetForWidth(TGo4FitModel *model, TGo4FitGuiArrow *forposition)
virtual void UpdateExtendedPage()
Int_t GetResultNDF() const
virtual void ChangeModelPar(QFitModelWidget *w, int npar, int value)
TObjArray * fxParsTableList
virtual void Cmd_ClearFitter()
int PopupMenuType() const
virtual void DeleteDrawObject(TPad *pad, const char *name)
virtual bool ShowItemAsText(QFitItem *item, bool force)
Double_t Get1LineWidth() const
virtual void FillNamedWidget(QFitNamedWidget *w)
virtual TGo4Fitter * CreateFitterFor(TGo4ViewPanel *panel, TPad *pad, const char *name)
TGo4FitData * AddData(TGo4FitData *d)
virtual Bool_t GetPosition(Int_t naxis, Double_t &pos)
virtual TGo4FitData * CreateData(int id, const char *name)
virtual void MainDrawBtn_clicked()
virtual void FillDataTypesList(QMenu *menu, int id, const QString &handler="")
TObject * GetAssignedObject()
virtual TPad * GetSubPad(TPad *toppad, int num, bool onlytoplevel)
virtual TObject * GetPadMainObject(TPad *pad)
virtual void Cmd_DeleteAction(QFitItem *item)
virtual void Fitter_RollbackParameters()
virtual void Cmd_MoveAction(QFitItem *item, int dir)
const TObjArray * GetSlotList(Bool_t ForceUpdate=kFALSE)
QWidget * fxCurrentItemWidget
virtual void Cmd_RemoveModel(TGo4FitModel *model)
void setBool(const QString &name, bool value=true)
virtual void PF_MinWidthEdt_textChanged(const QString &str)
void Set0MaxWidth(Double_t max)
virtual Bool_t CanChangeFitter() const
virtual void Smp_LorenzBtn_clicked()
TClass * GetClass() const
virtual void Cmd_ExecuteActions(QFitItem *item, bool expert)
virtual bool Wiz_RemoveData()
virtual bool ShowItemAsGraph(QFitItem *item, bool force)
virtual void Cmd_RemoveRangeCondition(QFitItem *item)
void Set0MaxAmplFactor(Double_t factor)
virtual void UpdateWizDataList()
virtual bool PaintRange(TGo4FitComponent *comp, int nrange, TPad *pad, QFitItem *item)
virtual void UpdateStatusBar(const char *info=nullptr)
virtual void PF_MaxWidthEdt_returnPressed()
virtual int GetPadIndexForSlot(TGo4FitSlot *slot)
virtual void Button_PerformFit()
const char * GetFunctionName() const
TGo4FitSlot * GetConnectedSlot() const
virtual void Wiz_DelDataBtn_clicked()
void ChangeDataNameInAssignments(const char *oldname, const char *newname)
virtual TPad * FindPadWhereData(TGo4FitData *data)
TObjArray & GetParsDepend()
void SetRange(Int_t naxis, Double_t min, Double_t max)
Bool_t IsAnyRangeLimits() const
virtual bool PaintModel(TGo4FitModel *model, TPad *pad, QFitItem *item)
virtual void Button_FitterDraw(TGo4FitData *selecteddata)
virtual void Wiz_FitNameEdt_textChanged(const QString &name)
virtual void DropOnPanel(QDropEvent *event, const char *itemname, TClass *cl, int kind)
Bool_t GetRange(Double_t &min, Double_t &max) const
Double_t GetInitValue() const
virtual void Cmd_ItemPrint(QFitItem *item)
Bool_t RemovePar(const char *name)
void Set2ChannelSum(Int_t sum)
Bool_t SetObject(TObject *iObject, Bool_t iOwned=kFALSE, Bool_t CheckClass=kTRUE)
virtual void MarkPadModified(TPad *pad)
virtual void PF_WidthEdit_textChanged(const QString &str)
const char * GetParFullName(Int_t n)
virtual void Wiz_ParTable_valueChanged(int nrow, int ncol)
QFitItem * GetItem() const
virtual void Cmd_DeleteMinuitResult(QFitItem *item)
TGo4FitModel * GetModel(Int_t n)
int getInt(const QString &name, int def=0)
Double_t CalculatesModelIntegral(const char *ModelName, Bool_t OnlyCounts=kFALSE)
Bool_t IsSuitable(TObject *obj) const
virtual void Fitter_UseWorkspace()
void SetItem(QFitItem *item, TGo4FitPanel *panel)
virtual void Wiz_ModelList_itemChanged(QListWidgetItem *)
virtual void DeleteModelWithPrimit(TGo4FitGuiArrow *arr)
virtual TGo4ViewPanel * ActivePanel()
virtual void Wiz_PFSetupBtn_clicked()
Int_t GetGroupIndex() const
virtual TGo4FitModel * Wiz_SelectedModel()
virtual void Wiz_DataBufChk_toggled(bool zn)
virtual void PF_SumUpSpin_valueChanged(int num)
virtual void PF_RelNoiseSlider_valueChanged(int zn)
virtual void Fitter_NewForActivePad(bool overwrite)
TGo4FitParameter * FindPar(const char *ParName)
QSignalMapper * FitterMap
virtual void PF_MaxWidthEdt_textChanged(const QString &str)
virtual void Wiz_AddDataBtn_clicked()
Double_t GetResultFF() const
virtual void SetFitter(TGo4Fitter *)
virtual void Cmd_ClearAssigments(QFitItem *item)
virtual void Cmd_SaveFitter(bool ask)
virtual void Cmd_ExecuteAction(QFitItem *item)
void AddRangeCut(TCutG *cut, Bool_t exclude=kFALSE)
void focusInEvent(QFocusEvent *event) override
virtual void Cmd_RememberPars(QFitItem *item)
virtual QFitItem * FindItem(TObject *obj, int ObjectType, QFitItem *parent)
virtual void UpdateItem(QFitItem *item, bool trace)
virtual void AboutToShowItemMenu()
virtual Bool_t SetWidth(Int_t naxis, Double_t width)
TString FindNextName(const char *Head, Int_t start, Bool_t isModel=kTRUE)
virtual bool FillPopupForSlot(TGo4FitSlot *slot, QMenu *menu)
void FillSlotList(TSeqCollection *list) override
virtual TPad * FindPadWhereComp(TGo4FitComponent *comp)
void SetRangeMax(Int_t naxis, Double_t value)
virtual void Cmd_DeleteAssosiatedModels(QFitItem *item)
virtual void PF_RelNoiseSlider_sliderReleased()
virtual void ChangeObjectTitle(QFitNamedWidget *w, const char *newtitle)
virtual void PF_AmplSlider_sliderReleased()
const TString & GetParameter() const
virtual void Wiz_CreateNewData(int id)
Int_t GetNumModel() const
virtual void MainFitBtn_clicked()
TGo4FitData * GetData(Int_t n)
TGo4ViewPanel * fxActivePanel
void SetGroupIndex(Int_t index=-1)
virtual Bool_t GetWidth(Int_t naxis, Double_t &width)
QFitItem * DefineGraphItem()
TObject * CreateDrawObject(const char *ObjName, const char *DataName, Bool_t IsModel=kFALSE, const char *ModelName=nullptr)
Int_t NumAssigments() const
virtual void Wiz_BackgroundChk_toggled(bool chk)
virtual void Cmd_MemorizePars(QFitItem *item)
void SetUsePolynom(Bool_t use)
virtual void CloseDrawPanel()
Int_t GetFitFunctionType() const
QFitItem * Parent() const
virtual void PF_MinNoiseEdit_textChanged(const QString &str)
virtual void Wiz_UseAmplEstimChk_toggled(bool chk)
virtual void LineParsChk_toggled(bool)
virtual void Wiz_DataUseRangeBtn_clicked()
virtual void FillParsWidget()
virtual void Wiz_DrawDataBtn_clicked()
virtual void MainParsBtn_clicked()
void SetValue(Double_t iValue)
virtual void ExecutePopupForSlot(QFitItem *item, TGo4FitSlot *slot, int id)
virtual bool PaintModelsFor(TGo4Fitter *fitter, TGo4FitData *data, QFitItem *item, bool update)
virtual void ItemMenuItemSelected(int id)
virtual void Wiz_MigradIterSpin_valueChanged(int num)
virtual void AboutToShowSettMenu()
void RemoveRangeCut(Int_t n)
virtual TH1 * GetPadHistogram(TPad *pad)
virtual void Cmd_AddNewPar(QFitItem *item)
virtual void RememberPars()
Bool_t ConnectToSlot(TGo4FitSlot *slot)
virtual void panelSlot(TGo4ViewPanel *, TPad *, int)
virtual void UpdateWizStackWidget()
virtual void FitList_currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)
virtual void Wiz_PFPolynSpin_valueChanged(int zn)
virtual void Wiz_UseSelectedRange()
TGo4FitterAction * GetAction(Int_t num)
void RemoveRangeCondition(Int_t n)
virtual void Wiz_DelModelBtn_clicked()
virtual void Cmd_CloneModel(QFitItem *item)
virtual void UpdateActivePage()
virtual void Wiz_FitFuncCmb_activated(int typ)
void Set1LineWidth(Double_t width)
virtual void Cmd_DeleteModel(QFitItem *item)
const char * GetDataName(Int_t n)
virtual void Wiz_PFUsePolynChk_toggled(bool zn)
virtual TGo4FitPeakFinder * GetPeakFinder(bool autocreate)
virtual bool CanRollbackPars()
void DeleteOutputActions()
Bool_t IsInitValue() const
virtual void UpdateSimplePage()
void SetClearModels(Bool_t clear)
virtual bool FillPopupForItem(QFitItem *item, QMenu *menu)
virtual void UpdateItemsOfType(int typ, QFitItem *parent=nullptr)
virtual void Fitter_Delete()
virtual void FillDependencyList(QFitItem *parent)
void SetEpsilon(Double_t iEpsilon)
virtual void FitItemDeleted(QFitItem *item)
virtual void ParsTable_valueChanged(int nrow, int ncol)
virtual void ParsTableChanged(QTableWidget *table, int nrow, int ncol, bool LinesView, TObjArray *TableList, bool updatepaint)
Int_t GetNumResults() const
TGo4FitModel * AddModel(TGo4FitModel *m)
void SetSaveFlagForObjects(Int_t iSaveFlag, const char *PlaceName=nullptr)
Int_t GetDataType() const
virtual void RemovePrimitives()
bool IsAcceptDrag(const char *itemname, TClass *cl, int kind) override
virtual TGo4FitModel * CreateModel(int id, const char *namebase, TGo4Fitter *fitter, TGo4FitData *data)
TGo4FitModel * CloneModel(const char *ModelName, const char *NewName=nullptr)
virtual void CreateFitSlotLink(TGo4FitSlot *slot, const char *itemname)
Bool_t MakeAmpl(Bool_t isFixed=kFALSE)
virtual void PF_AmplSlider_valueChanged(int zn)
virtual bool WorkingWithPanel()
virtual void CollectSpecialObjects(TPad *pad, TObjArray *objs, int selectkind)
Double_t Get2NoiseFactor() const
virtual void Wiz_MinSetupBtn_clicked()
TGo4FitterOutput * AddOutputAction(const char *Action, const char *Option=nullptr)
virtual void RemoveDrawObjects()
virtual void FillParsTable(QTableWidget *table, TGo4Fitter *fitter, TGo4FitModel *model, bool LinesView, TObjArray *TableList)
TGo4FitModel * GetModel() const
virtual QFitItem * GetFitterItem()
TObject * GetObject() const
virtual bool WorkingWithOnlyPad()
virtual void Cmd_ClearAssigment(QFitItem *item)
TGo4FitParsList & GetParsNew()
void SetBackgroundGroupIndex()
virtual void FindersTab_currentChanged(int)
void setInt(const QString &name, int value=0)
virtual int GetNumberOfPads(TPad *toppad)
virtual void Wiz_RebuildDataList()
virtual TPad * GetActivePad()
virtual void AboutToShowFitterMenu()
Bool_t CalculatesMomentums(const char *DataName, Bool_t UseRanges, Bool_t SubstractModels, Double_t &first, Double_t &second)
Double_t Get0MaxAmplFactor() const
virtual int DefineModelWidgetType(TObject *obj)
virtual void Smp_ExponentBtn_clicked()
bool fbRecalculateGaussWidth
virtual bool DeleteDrawObjects(TPad *pad, int kindtodelete)
void AddActionAt(TGo4FitterAction *Action, Int_t indx)
void ExcludeRange(Int_t naxis, Double_t min, Double_t max)
void SetFixed(Bool_t iFixed)
virtual void FillParsList(QFitItem *item)
Int_t GetNumActions() const
virtual void Cmd_CreateAppropriateFitter()
virtual void Cmd_AddNewModel(QFitItem *item, int id)
virtual void FitList_customContextMenuRequested(const QPoint &)
TGo4FitData * FindData(const char *DataName)
virtual void Wiz_DataClearRangesBtn_clicked()
void SetPolynomOrder(Int_t order)
void DoActions(Bool_t AllowFitterChange=kFALSE, TObjArray *Actions=nullptr)
virtual TGo4Slot * AddDrawObject(TPad *pad, int kind, const char *itemname, TObject *obj, bool owner, const char *drawopt)
void linkedRemoved(TGo4Slot *slot, TObject *obj) override
virtual void WorkWithFitter(const char *itemname, TGo4ViewPanel *panel, TPad *pad)
void Set0MinWidth(Double_t min)
virtual void ChangeSettings(int id)
virtual void ShowPanelPage(int id)
virtual void Cmd_DeleteFitter()
const TString & GetExpression() const
void Clear(Option_t *option="") override
void SetRange(Double_t iRangeMin, Double_t iRangeMax)
virtual void Wiz_ModelList_doubleClicked(QListWidgetItem *)
virtual void Wiz_CloneModelBtn_clicked()
Bool_t IsSuitableClass(TClass *cl) const
virtual void Cmd_AssignModelToData(QFitItem *item, int id)
TGo4ViewPanel * fxDrawNewPanel
void panelSignal(TGo4ViewPanel *, TPad *, int)
virtual void FillModelTypesList(QMenu *menu, int id, bool extend, const QString &handler="")
void AddStandardActions()
void SetError(Double_t iError)
TObjArray & GetParsInit()
TGo4FitParameter * GetAmplPar()
virtual void SetAutoScale(bool on, TPad *selpad)
virtual void Cmd_RemoveRangeConditions(QFitItem *item)
Bool_t CanConnectToSlot(TGo4FitSlot *slot)
virtual void Cmd_AssignModelToAllData(QFitItem *item)