From 07aa67a1a249ebe8111299a9eedcc1604df22a91 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 21 Feb 2017 11:28:53 +0100 Subject: [PATCH 01/43] fixed a little annoying bug in the LF none-analytic integral estimate. --- src/classes/PTheory.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/classes/PTheory.cpp b/src/classes/PTheory.cpp index 3c093b3a..30174ce8 100644 --- a/src/classes/PTheory.cpp +++ b/src/classes/PTheory.cpp @@ -2687,14 +2687,16 @@ void PTheory::CalculateGaussLFIntegral(const Double_t *val) const fLFIntegral.push_back(0.0); // start value of the integral ft = 0.0; - Double_t step = 0.0; + Double_t step = 0.0, lastStep = 1.0, diff = 0.0; do { t += dt; step = 0.5*dt*preFactor*(exp(-0.5*pow(Delta * (t-dt), 2.0))*sin(w0*(t-dt))+ exp(-0.5*pow(Delta * t, 2.0))*sin(w0*t)); + diff = fabs(fabs(step)-fabs(lastStep)); + lastStep = step; ft += step; fLFIntegral.push_back(ft); - } while ((t <= 20.0) && (fabs(step) > 1.0e-10)); + } while ((t <= 20.0) && (diff > 1.0e-10)); } //-------------------------------------------------------------------------- @@ -2760,13 +2762,15 @@ void PTheory::CalculateLorentzLFIntegral(const Double_t *val) const ft += 0.5*dt*preFactor*(1.0+sin(w0*t)/(w0*t)*exp(-a*t)); fLFIntegral.push_back(ft); // calculate all the other integral bin values - Double_t step = 0.0; + Double_t step = 0.0, lastStep = 1.0, diff = 0.0; do { t += dt; step = 0.5*dt*preFactor*(sin(w0*(t-dt))/(w0*(t-dt))*exp(-a*(t-dt))+sin(w0*t)/(w0*t)*exp(-a*t)); + diff = fabs(fabs(step)-fabs(lastStep)); + lastStep = step; ft += step; fLFIntegral.push_back(ft); - } while ((t <= 20.0) && (fabs(step) > 1.0e-10)); + } while ((t <= 20.0) && (diff > 1.0e-10)); } From 261691c040eb4cfbfaf743308f1e7a1824c8db38 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 21 Feb 2017 14:55:04 +0100 Subject: [PATCH 02/43] fixed a typo --- src/classes/PStartupHandler.cpp | 6 +++--- src/include/PStartupHandler.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/classes/PStartupHandler.cpp b/src/classes/PStartupHandler.cpp index e2bde964..3ad5201f 100644 --- a/src/classes/PStartupHandler.cpp +++ b/src/classes/PStartupHandler.cpp @@ -147,7 +147,7 @@ PStartupHandler::PStartupHandler() // if musrfit_startup.xml is still not found, will create a default one if (!fStartupFileFound) { cout << endl << "**INFO** no musrfit_startup.xml file found, will write a default one." << endl; - if (!WriteDefaulStartupFile()) { + if (!WriteDefaultStartupFile()) { cerr << endl << "**ERROR** couldn't write default musrfit_startup.xml." << endl; } else { home = getenv("HOME"); @@ -587,9 +587,9 @@ Bool_t PStartupHandler::StartupFileExists(Char_t *fln) } //-------------------------------------------------------------------------- -// WriteDefaulStartupFile +// WriteDefaultStartupFile //-------------------------------------------------------------------------- -Bool_t PStartupHandler::WriteDefaulStartupFile() +Bool_t PStartupHandler::WriteDefaultStartupFile() { // get home Char_t startup_path_name[256]; diff --git a/src/include/PStartupHandler.h b/src/include/PStartupHandler.h index 2f44fd9b..bbb0f10e 100644 --- a/src/include/PStartupHandler.h +++ b/src/include/PStartupHandler.h @@ -94,7 +94,7 @@ class PStartupHandler : public TObject, public TQObject PIntVector fColorList; ///< color list Bool_t StartupFileExists(Char_t *fln); - Bool_t WriteDefaulStartupFile(); + Bool_t WriteDefaultStartupFile(); ClassDef(PStartupHandler, 1) }; From d52b0b70a4b0fba62cfb484c8b26e54e4df28a66 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 21 Feb 2017 20:40:27 +0100 Subject: [PATCH 03/43] start with the intergration of musrWiz into musredit --- doc/templates/asymDefault.msr | 59 ---- doc/templates/singleHistoDefault.msr | 60 ---- src/musredit_qt5/PAdmin.cpp | 12 - src/musredit_qt5/PAdmin.h | 5 +- src/musredit_qt5/PTextEdit.cpp | 136 +-------- src/musredit_qt5/PTextEdit.h | 3 +- src/musredit_qt5/forms/PGetDefaultDialog.ui | 291 -------------------- src/musredit_qt5/icons/musrWiz-32x32.svg | 160 +++++++++++ src/musredit_qt5/musredit.pro | 3 - src/musredit_qt5/musredit.qrc | 3 +- 10 files changed, 171 insertions(+), 561 deletions(-) delete mode 100644 doc/templates/asymDefault.msr delete mode 100644 doc/templates/singleHistoDefault.msr delete mode 100644 src/musredit_qt5/forms/PGetDefaultDialog.ui create mode 100644 src/musredit_qt5/icons/musrWiz-32x32.svg diff --git a/doc/templates/asymDefault.msr b/doc/templates/asymDefault.msr deleted file mode 100644 index b486c1ba..00000000 --- a/doc/templates/asymDefault.msr +++ /dev/null @@ -1,59 +0,0 @@ -TITLE -############################################################### -FITPARAMETER -# Nr. Name Value Step Pos_Error Boundaries - 1 alpha 0.989765 1.0 none 0 none - 2 asy 0.26 0.1 none 0 0.33 - 3 phase 8.5 1.0 none - 4 field 100.0 0.1 none 0 none - 5 rate 0.36 0.02 none 0 100 - -############################################################### -THEORY -asymmetry 2 -TFieldCos 3 fun1 (phase frequency) -simplExpo 5 - -############################################################### -FUNCTIONS -fun1 = par4 * gamma_mu - -############################################################### -RUN lem07_his_0147 MUE4 PSI ROOT-NPP (name beamline institute data-file-format) -fittype 2 (asymmetry fit) -alpha 1 -map 0 0 0 0 0 0 0 0 0 0 -forward 1 -backward 3 -background 65000 66500 65000 66500 -data 3413 63000 3413 63000 -t0 3413 3413 -fit 0.00 8.00 (fw bw) -packing 75 - -############################################################### -COMMANDS -SET BATCH -MINIMIZE -MINOS -SAVE -END RETURN - -############################################################### -FOURIER -units Gauss # fourier in field units -fourier_power 12 -apodization NONE # NONE, WEAK, MEDIUM, STRONG -plot power -phase 8.5 -#range_for_phase_correction 50.0 70.0 -range 0.0 200.0 - -############################################################### -PLOT 2 (asymmetry plot) -runs 1 -range 0.00 8.00 -0.30 0.30 - -############################################################### -STATISTIC --- 2008-04-04 07:44:31 - chisq = 569.50931, NDF = 542, chisq/NDF = 1.05075518 diff --git a/doc/templates/singleHistoDefault.msr b/doc/templates/singleHistoDefault.msr deleted file mode 100644 index 0f0632c1..00000000 --- a/doc/templates/singleHistoDefault.msr +++ /dev/null @@ -1,60 +0,0 @@ -TITLE -############################################################### -FITPARAMETER -# Nr. Name Value Step Pos_Error Boundaries - 1 Asy 0.26 0.01 none 0 0.33 - 2 Rate 0.36 0.01 none - 3 Field 100.0 1.0 none 0 200 - 4 N0_L 150.0 0.01 none - 5 Bkg_L 4.9 0.01 none - 6 Phase_L 7.0 1.5 none -50 50 - -############################################################### -THEORY -asymmetry 1 -simplExpo 2 (rate) -TFieldCos map1 fun1 (phase frequency) - -############################################################### -FUNCTIONS -fun1 = par3 * gamma_mu - -############################################################### -RUN lem07_his_0111 MUE4 PSI ROOT-NPP (name beamline institute data-file-format) -fittype 0 (single histogram fit) -norm 4 -backgr.fit 5 -lifetimecorrection -map 6 0 0 0 0 0 0 0 0 0 -forward 1 -data 3413 65000 -t0 3413 -fit 0.20 8.2 -packing 50 - -############################################################### -COMMANDS -SET BATCH -MINIMIZE -MINOS -SAVE -END RETURN - -############################################################### -PLOT 0 (single histo plot) -runs 1 -range 0.00 7.00 -0.30 0.30 - -############################################################### -FOURIER -units Gauss # fourier in field units -fourier_power 12 -apodization NONE # NONE, WEAK, MEDIUM, STRONG -plot power -phase 8.5 -#range_for_phase_correction 50.0 70.0 -range 0.0 200.0 - -############################################################### -STATISTIC --- 2008-06-09 14:09:39 - chisq = 1446.93547, NDF = 1377, chisq/NDF = 1.05078829 diff --git a/src/musredit_qt5/PAdmin.cpp b/src/musredit_qt5/PAdmin.cpp index 1a7755a6..28c13341 100644 --- a/src/musredit_qt5/PAdmin.cpp +++ b/src/musredit_qt5/PAdmin.cpp @@ -114,8 +114,6 @@ bool PAdminXMLParser::startElement( const QString&, const QString&, fKeyWord = eFileFormat; } else if (qName == "lifetime_correction") { fKeyWord = eLifetimeCorrection; - } else if (qName == "msr_default_file_path") { - fKeyWord = eMsrDefaultFilePath; } else if (qName == "musr_web_main") { fKeyWord = eHelpMain; } else if (qName == "musr_web_title") { @@ -327,9 +325,6 @@ bool PAdminXMLParser::characters(const QString& str) flag = false; fAdmin->setLifetimeCorrectionFlag(flag); break; - case eMsrDefaultFilePath: - fAdmin->setMsrDefaultFilePath(QString(str.toLatin1()).trimmed()); - break; case eHelpMain: fAdmin->setHelpUrl("main", str); break; @@ -493,12 +488,6 @@ bool PAdminXMLParser::endDocument() fAdmin->setDefaultSavePath(str); } - if (fAdmin->getMsrDefaultFilePath().indexOf('$') >= 0) { - str = expandPath(fAdmin->getMsrDefaultFilePath()); - if (!str.isEmpty()) - fAdmin->setMsrDefaultFilePath(str); - } - if (fAdmin->getTheoFuncPixmapPath().indexOf('$') >=0) { str = expandPath(fAdmin->getTheoFuncPixmapPath()); if (!str.isEmpty()) @@ -628,7 +617,6 @@ PAdmin::PAdmin() : QObject() fPrefPathName = QString(""); fExecPath = QString(""); fDefaultSavePath = QString(""); - fMsrDefaultFilePath = QString(""); fTheoFuncPixmapPath = QString(""); fBeamline = QString(""); diff --git a/src/musredit_qt5/PAdmin.h b/src/musredit_qt5/PAdmin.h index d9b05051..11c4fa86 100644 --- a/src/musredit_qt5/PAdmin.h +++ b/src/musredit_qt5/PAdmin.h @@ -72,7 +72,7 @@ class PAdminXMLParser : public QXmlDefaultHandler eTitleFromDataFile, eChisqPreRunBlock, eEstimateN0, eMusrviewShowFourier, eMusrviewShowAvg, eEnableMusrT0, eFontName, eFontSize, eExecPath, eDefaultSavePath, - eRecentFile, eBeamline, eInstitute, eFileFormat, eLifetimeCorrection, eMsrDefaultFilePath, + eRecentFile, eBeamline, eInstitute, eFileFormat, eLifetimeCorrection, eTheoFuncPixmapPath, eFunc, eFuncName, eFuncComment, eFuncLabel, eFuncPixmap, eFuncParams, eHelpMain, eHelpTitle, eHelpParameters, eHelpTheory, eHelpFunctions, eHelpRun, eHelpCommand, eHelpFourier, eHelpPlot, eHelpStatistic, eHelpMsr2Data, eHelpMusrFT, @@ -131,7 +131,6 @@ class PAdmin : public QObject QString getInstitute() { return fInstitute; } QString getFileFormat() { return fFileFormat; } bool getLifetimeCorrectionFlag() { return fLifetimeCorrection; } - QString getMsrDefaultFilePath() { return fMsrDefaultFilePath; } QString getHelpUrl(QString tag); QString getTheoFuncPixmapPath() { return fTheoFuncPixmapPath; } unsigned int getTheoryCounts() { return fTheory.size(); } @@ -166,7 +165,6 @@ class PAdmin : public QObject void setInstitute(const QString str) { fInstitute = str; } void setFileFormat(const QString str) { fFileFormat = str; } void setLifetimeCorrectionFlag(const bool flag) { fLifetimeCorrection = flag; } - void setMsrDefaultFilePath(const QString str) { fMsrDefaultFilePath = str; } void setHelpUrl(const QString tag, const QString url); void setTheoFuncPixmapPath (const QString str) { fTheoFuncPixmapPath = str; } void addTheoryItem(const PTheory theo) { fTheory.push_back(theo); } @@ -182,7 +180,6 @@ class PAdmin : public QObject QString fPrefPathName; ///< path-name of the musredit_startup.xml QString fExecPath; ///< system path to the musrfit executables QString fDefaultSavePath; ///< default path where the msr-file should be saved - QString fMsrDefaultFilePath; ///< path where to find musredit source QString fTheoFuncPixmapPath; ///< path where the default pixmaps can be found QVector fRecentFile; ///< keep vector of recent path-file names diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index e94651e5..f10a699b 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -72,7 +72,7 @@ using namespace std; #include "PDumpOutputHandler.h" #include "PPrefsDialog.h" #include "PGetMusrFTOptionsDialog.h" -#include "PGetDefaultDialog.h" +//#include "PGetDefaultDialog.h" #include "PMusrEditAbout.h" #include "PMsr2DataDialog.h" @@ -491,17 +491,10 @@ void PTextEdit::setupMusrActions() menuBar()->addMenu( menu ); QAction *a; - a = new QAction( QIcon( QPixmap( ":/icons/musrAsym-plain.svg" ) ), tr( "&Asymmetry Default" ), this ); - a->setShortcut( tr("Alt+A") ); - a->setStatusTip( tr("Get Default Asymmetry msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrGetAsymmetryDefault() ) ); - tb->addAction(a); - menu->addAction(a); - - a = new QAction( QIcon( QPixmap( ":/icons/musrSingleHisto-plain.svg" ) ), tr( "Single &Histogram Default" ), this ); - a->setShortcut( tr("Alt+H") ); - a->setStatusTip( tr("Get Default Single Histogram msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrGetSingleHistoDefault() ) ); + a = new QAction( QIcon( QPixmap( ":/icons/musrWiz-32x32.svg" ) ), tr( "musr&Wiz" ), this ); + a->setShortcut( tr("Alt+W") ); + a->setStatusTip( tr("Call musrWiz which helps to create msr-files") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); tb->addAction(a); menu->addAction(a); @@ -1597,124 +1590,11 @@ void PTextEdit::textSize( const QString &p ) //---------------------------------------------------------------------------------------------------- /** - *

Loads a default asymmetry msr-file. + * @brief PTextEdit::musrWiz */ -void PTextEdit::musrGetAsymmetryDefault() +void PTextEdit::musrWiz() { - QString runFileName, beamline, institute, fileFormat; - - PGetDefaultDialog *dlg = new PGetDefaultDialog(fAdmin->getHelpUrl("main")); - - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke get default dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - // set defaults - dlg->setBeamline(fAdmin->getBeamline()); - dlg->setInstitute(fAdmin->getInstitute()); - dlg->setFileFormat(fAdmin->getFileFormat()); - - dlg->exec(); - - if (dlg->result() != QDialog::Accepted) { - delete dlg; - dlg = 0; - return; - } - - runFileName = dlg->getRunFileName(); - beamline = dlg->getBeamline(); - institute = dlg->getInstitute(); - fileFormat = dlg->getFileFormat(); - delete dlg; - dlg = 0; - - QFile file(fAdmin->getMsrDefaultFilePath()+"/asymDefault.msr"); - if (file.open(QIODevice::ReadOnly)) { - // make a new file tab - fileNew(); - QTextStream ts( &file ); - QString line; - while ( !ts.atEnd() ) { - line = ts.readLine(); // line of text excluding '\n' - if (line.startsWith("RUN")) { - QString runHeader = "RUN " + runFileName + " " + beamline.toUpper() + " " + institute + " " + fileFormat.toUpper() + " (name beamline institute data-file-format)\n"; - currentEditor()->insertPlainText(runHeader); - } else { // just copy the text - currentEditor()->insertPlainText(line+"\n"); - } - } - currentEditor()->textCursor().setPosition(0); - - file.close(); - } else { - QMessageBox::critical(this, "**ERROR**", - "Couldn't find default asymmetry file template :-(", - QMessageBox::Ok, QMessageBox::NoButton); - } - -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Loads a default single histogram msr-file. - */ -void PTextEdit::musrGetSingleHistoDefault() -{ - QString runFileName, beamline, institute, fileFormat; - - PGetDefaultDialog *dlg = new PGetDefaultDialog(); - - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke get default dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - // set defaults - dlg->setBeamline(fAdmin->getBeamline()); - dlg->setInstitute(fAdmin->getInstitute().toLower()); - dlg->setFileFormat(fAdmin->getFileFormat().toLower()); - - dlg->exec(); - - if (dlg->result() != QDialog::Accepted) { - delete dlg; - dlg = 0; - return; - } - - runFileName = dlg->getRunFileName(); - beamline = dlg->getBeamline(); - institute = dlg->getInstitute(); - fileFormat = dlg->getFileFormat(); - delete dlg; - dlg = 0; - - QFile file(fAdmin->getMsrDefaultFilePath()+"/singleHistoDefault.msr"); - if (file.open(QIODevice::ReadOnly)) { - // make a new file tab - fileNew(); - QTextStream ts( &file ); - QString line; - while ( !ts.atEnd() ) { - line = ts.readLine(); // line of text excluding '\n' - if (line.startsWith("RUN")) { - QString runHeader = "RUN " + runFileName + " " + beamline.toUpper() + " " + institute + " " + fileFormat.toUpper() + " (name beamline institute data-file-format)\n"; - currentEditor()->insertPlainText(runHeader); - } else { // just copy the text - currentEditor()->insertPlainText(line+"\n"); - } - } - currentEditor()->textCursor().setPosition(0); - - file.close(); - } else { - QMessageBox::critical(this, "**ERROR**", - "Couldn't find default single histogram file template :-(", - QMessageBox::Ok, QMessageBox::NoButton); - } - + QMessageBox::information(this, "**INFO**", "Will eventually call musrWiz"); } //---------------------------------------------------------------------------------------------------- diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index 9a48173b..3611f24b 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -125,8 +125,7 @@ private slots: void textFamily( const QString &f ); void textSize( const QString &p ); - void musrGetAsymmetryDefault(); - void musrGetSingleHistoDefault(); + void musrWiz(); void musrCalcChisq(); void musrFit(); void musrMsr2Data(); diff --git a/src/musredit_qt5/forms/PGetDefaultDialog.ui b/src/musredit_qt5/forms/PGetDefaultDialog.ui deleted file mode 100644 index 899ddd5e..00000000 --- a/src/musredit_qt5/forms/PGetDefaultDialog.ui +++ /dev/null @@ -1,291 +0,0 @@ - - - PGetDefaultDialog - - - Qt::WindowModal - - - - 0 - 0 - 400 - 168 - - - - Run - - - - :/images/musrfit.xpm:/images/musrfit.xpm - - - - - 10 - 130 - 381 - 27 - - - - - - - &Help - - - - - - - Qt::Horizontal - - - - 118 - 20 - - - - - - - - &OK - - - - - - - &Cancel - - - - - - - - - 12 - 12 - 84 - 111 - - - - - - - Run File Name - - - - - - - - 68 - 0 - - - - Beamline - - - - - - - - 68 - 0 - - - - Institute - - - - - - - - 68 - 0 - - - - File Format - - - - - - - - - 99 - 12 - 291 - 111 - - - - - - - - - - - - - - 80 - 0 - - - - - PSI - - - - - RAL - - - - - TRIUMF - - - - - JPARC - - - - - - - - - NeXuS - - - - - ROOT-NPP - - - - - ROOT-PPC - - - - - PSI-BIN - - - - - MDU - - - - - MDU-ASCII - - - - - MUD - - - - - WKM - - - - - ASCII - - - - - DB - - - - - - - - - fOk_pushButton - fCancel_pushButton - fHelp_pushButton - - - - - - - fCancel_pushButton - clicked() - PGetDefaultDialog - reject() - - - 337 - 272 - - - 355 - 225 - - - - - fOk_pushButton - clicked() - PGetDefaultDialog - accept() - - - 286 - 265 - - - 243 - 227 - - - - - fHelp_pushButton - clicked() - PGetDefaultDialog - helpContent() - - - 50 - 273 - - - 115 - 221 - - - - - - helpContent() - - diff --git a/src/musredit_qt5/icons/musrWiz-32x32.svg b/src/musredit_qt5/icons/musrWiz-32x32.svg new file mode 100644 index 00000000..1b3cafe5 --- /dev/null +++ b/src/musredit_qt5/icons/musrWiz-32x32.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musredit.pro b/src/musredit_qt5/musredit.pro index 9d351027..4a412554 100644 --- a/src/musredit_qt5/musredit.pro +++ b/src/musredit_qt5/musredit.pro @@ -90,7 +90,6 @@ HEADERS = musredit.h \ PDumpOutputHandler.h \ PPrefsDialog.h \ PGetMusrFTOptionsDialog.h \ - PGetDefaultDialog.h \ PGetTitleBlockDialog.h \ PGetParameterBlockDialog.h \ PGetTheoryBlockDialog.h \ @@ -116,7 +115,6 @@ SOURCES = PHelp.cpp \ PDumpOutputHandler.cpp \ PPrefsDialog.cpp \ PGetMusrFTOptionsDialog.cpp \ - PGetDefaultDialog.cpp \ PGetTitleBlockDialog.cpp \ PGetParameterBlockDialog.cpp \ PGetTheoryBlockDialog.cpp \ @@ -134,7 +132,6 @@ SOURCES = PHelp.cpp \ FORMS = forms/PFindDialog.ui \ forms/PReplaceDialog.ui \ forms/PReplaceConfirmationDialog.ui \ - forms/PGetDefaultDialog.ui \ forms/PMusrEditAbout.ui \ forms/PPrefsDialog.ui \ forms/PGetMusrFTOptionsDialog.ui \ diff --git a/src/musredit_qt5/musredit.qrc b/src/musredit_qt5/musredit.qrc index 68883051..49350ec9 100644 --- a/src/musredit_qt5/musredit.qrc +++ b/src/musredit_qt5/musredit.qrc @@ -13,12 +13,11 @@ icons/document-print-plain.svg icons/view-refresh-plain.svg icons/document-save-plain.svg - icons/musrAsym-plain.svg + icons/musrWiz-32x32.svg icons/musrchisq-plain.svg icons/musrfit-plain.svg icons/msr2data-plain.svg icons/musrprefs-plain.svg - icons/musrSingleHisto-plain.svg icons/musrswap-plain.svg icons/musrt0-plain.svg icons/musrview-plain.svg From cc1679144c6e5387f863060e8d581f6de0eb8456 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 22 Feb 2017 08:03:12 +0100 Subject: [PATCH 04/43] added musrStep dummy menu. First step towards a full integration of musrStep into musredit. --- src/musredit_qt5/PTextEdit.cpp | 21 +++- src/musredit_qt5/PTextEdit.h | 1 + src/musredit_qt5/icons/musrStep-32x32.svg | 140 ++++++++++++++++++++++ src/musredit_qt5/musredit.qrc | 1 + 4 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 src/musredit_qt5/icons/musrStep-32x32.svg diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index f10a699b..2dff05f1 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -501,7 +501,7 @@ void PTextEdit::setupMusrActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap( ":/icons/musrchisq-plain.svg" ) ), tr( "Calculate Chisq" ), this ); + a = new QAction( QIcon( QPixmap( ":/icons/musrchisq-plain.svg" ) ), tr( "Calculate &Chisq" ), this ); a->setShortcut( tr("Alt+C") ); a->setStatusTip( tr("Calculate Chi Square (Log Max Likelihood)") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); @@ -522,6 +522,13 @@ void PTextEdit::setupMusrActions() tb->addAction(a); menu->addAction(a); + a = new QAction( QIcon( QPixmap( ":/icons/musrStep-32x32.svg" ) ), tr( "Set Ste&ps" ), this ); + a->setShortcut( tr("Alt+P") ); + a->setStatusTip( tr("Set Steps") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); + tb->addAction(a); + menu->addAction(a); + a = new QAction( QIcon( QPixmap( ":/icons/msr2data-plain.svg" ) ), tr( "&Msr2Data" ), this ); a->setShortcut( tr("Alt+M") ); a->setStatusTip( tr("Start msr2data interface") ); @@ -1594,6 +1601,9 @@ void PTextEdit::textSize( const QString &p ) */ void PTextEdit::musrWiz() { + if ( !currentEditor() ) + return; + QMessageBox::information(this, "**INFO**", "Will eventually call musrWiz"); } @@ -2251,6 +2261,15 @@ void PTextEdit::musrPrefs() dlg = 0; } +//---------------------------------------------------------------------------------------------------- +void PTextEdit::musrSetSteps() +{ + if ( !currentEditor() ) + return; + + QMessageBox::information(this, "**INFO**", "Eventually this will allow to set the\nstep values of the current msr-file."); +} + //---------------------------------------------------------------------------------------------------- /** *

Swaps the currently open msr-file with its mlog-file (if present) and updates musredit accordingly. diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index 3611f24b..7235cbd7 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -134,6 +134,7 @@ private slots: void musrFT(); void musrPrefs(); void musrSwapMsrMlog(); + void musrSetSteps(); void musrDump(); void helpContents(); diff --git a/src/musredit_qt5/icons/musrStep-32x32.svg b/src/musredit_qt5/icons/musrStep-32x32.svg new file mode 100644 index 00000000..a0c6dbe1 --- /dev/null +++ b/src/musredit_qt5/icons/musrStep-32x32.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musredit.qrc b/src/musredit_qt5/musredit.qrc index 49350ec9..e17b7e6e 100644 --- a/src/musredit_qt5/musredit.qrc +++ b/src/musredit_qt5/musredit.qrc @@ -19,6 +19,7 @@ icons/msr2data-plain.svg icons/musrprefs-plain.svg icons/musrswap-plain.svg + icons/musrStep-32x32.svg icons/musrt0-plain.svg icons/musrview-plain.svg icons/musrFT-plain.svg From fca13283e1c4ab440d0be261029e84632f3993f7 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 22 Feb 2017 09:42:07 +0100 Subject: [PATCH 05/43] changed generation of git-revision.h which allows to keep it up-to-date. Aditionally git-branch info has been added. --- src/Makefile.am | 2 +- src/any2many.cpp | 4 ++-- src/dump_header.cpp | 4 ++-- src/git_revision.sh | 28 ++++++++++++++++++++++++ src/msr2data.cpp | 4 ++-- src/musrFT.cpp | 4 ++-- src/musrRootValidation.cpp | 4 ++-- src/musredit/main.cpp | 2 +- src/musredit_qt5/PMusrEditAbout.cpp | 3 ++- src/musredit_qt5/PTextEdit.cpp | 1 - src/musredit_qt5/forms/PMusrEditAbout.ui | 27 ++++++++++++++++++----- src/musredit_qt5/main.cpp | 2 +- src/musrfit.cpp | 4 ++-- src/musrt0.cpp | 4 ++-- src/musrview.cpp | 4 ++-- src/write_musrRoot_runHeader.cpp | 4 ++-- 16 files changed, 73 insertions(+), 28 deletions(-) create mode 100755 src/git_revision.sh diff --git a/src/Makefile.am b/src/Makefile.am index 3d24b418..d7d1e071 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ BUILT_SOURCES = git-revision.h git-revision.h : Makefile - echo \#define GIT_REVISION \"`git log -n 1 --pretty=format:"%ad - %h"`\" > include/git-revision.h + sh git_revision.sh ./include git-revision.h if PNEXUS_ENABLED PNEXUSDIRS = external/nexus diff --git a/src/any2many.cpp b/src/any2many.cpp index 0fb896fa..9de7779d 100644 --- a/src/any2many.cpp +++ b/src/any2many.cpp @@ -198,9 +198,9 @@ int main(int argc, char *argv[]) any2many_syntax(); else if (strstr(argv[1], "--v")) { #ifdef HAVE_CONFIG_H - cout << endl << "any2many version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "any2many version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "any2many git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "any2many git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif } else { any2many_syntax(); diff --git a/src/dump_header.cpp b/src/dump_header.cpp index 74d6a64b..b68d2e9d 100644 --- a/src/dump_header.cpp +++ b/src/dump_header.cpp @@ -762,9 +762,9 @@ int main(int argc, char *argv[]) return 0; } else if (!strcmp(argv[i], "--version") || !strcmp(argv[i], "-v")) { #ifdef HAVE_CONFIG_H - cout << endl << "dump_header: version " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "dump_header version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "dump_header: git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "dump_header git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return 0; } else if (!strcmp(argv[i], "-rn") || !strcmp(argv[i], "--runNo")) { diff --git a/src/git_revision.sh b/src/git_revision.sh new file mode 100755 index 00000000..5c706d27 --- /dev/null +++ b/src/git_revision.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +echo "Generating header for git hash" $1 $2 +GIT_HEADER="$1/$2" +if [ -z "$2" ]; then + GIT_HEADER="$1/git-revision.h" +fi + +GIT_BRANCH=`git rev-parse --abbrev-ref HEAD` + +GIT_VERSION=`git log -n 1 --pretty=format:"%ad - %h"` +if grep --quiet "$GIT_VERSION" $GIT_HEADER; then + echo "No need to generate new $GIT_HEADER - git hash is unchanged" + exit 0; +fi + +echo "git branch is : " $GIT_BRANCH +echo "git version is : " $GIT_VERSION + +echo "#ifndef GIT_VERSION_H" > $GIT_HEADER +echo "#define GIT_VERSION_H" >> $GIT_HEADER +echo "" >> $GIT_HEADER +echo "#define GIT_BRANCH \"$GIT_BRANCH\"" >> $GIT_HEADER +echo "#define GIT_CURRENT_SHA1 \"$GIT_VERSION\"" >> $GIT_HEADER +echo "" >> $GIT_HEADER +echo "#endif //GIT_VERSION_H" >> $GIT_HEADER + +echo "file is generated into" $GIT_HEADER diff --git a/src/msr2data.cpp b/src/msr2data.cpp index 79a95b09..2560d30e 100644 --- a/src/msr2data.cpp +++ b/src/msr2data.cpp @@ -516,9 +516,9 @@ int main(int argc, char *argv[]) return 0; } else if (!strcmp(argv[1], "--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "msr2data version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "msr2data version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "msr2data git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "msr2data git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return 0; } else { diff --git a/src/musrFT.cpp b/src/musrFT.cpp index 85ca609f..d3dd0905 100644 --- a/src/musrFT.cpp +++ b/src/musrFT.cpp @@ -298,9 +298,9 @@ Int_t musrFT_parse_options(Int_t argc, Char_t *argv[], musrFT_startup_param &sta tstr = argv[i]; if (tstr.BeginsWith("--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "musrFT version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrFT version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "musrFT git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrFT git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return 1; } else if (tstr.BeginsWith("--help")) { diff --git a/src/musrRootValidation.cpp b/src/musrRootValidation.cpp index eb551442..e6555e5c 100644 --- a/src/musrRootValidation.cpp +++ b/src/musrRootValidation.cpp @@ -575,9 +575,9 @@ int main(int argc, char *argv[]) } else if (argc==2) { if (!strcmp(argv[1], "--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "musrRootValidation version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrRootValidation version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "musrRootValidation git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrRootValidation git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return 0; } else { diff --git a/src/musredit/main.cpp b/src/musredit/main.cpp index 8948dca1..950b6682 100644 --- a/src/musredit/main.cpp +++ b/src/musredit/main.cpp @@ -53,7 +53,7 @@ int main( int argc, char ** argv ) cout << endl << endl; return 0; } else if (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-v")) { - cout << endl << "musredit git-rev: " << GIT_REVISION; + cout << endl << "musredit git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1; cout << endl << endl; return 0; } diff --git a/src/musredit_qt5/PMusrEditAbout.cpp b/src/musredit_qt5/PMusrEditAbout.cpp index 614b9610..f918ed9e 100644 --- a/src/musredit_qt5/PMusrEditAbout.cpp +++ b/src/musredit_qt5/PMusrEditAbout.cpp @@ -38,7 +38,8 @@ PMusrEditAbout::PMusrEditAbout(QWidget *parent, Qt::WindowFlags f) : QDialog(par { setupUi(this); - fGitRev_label->setText(QString("git: %1").arg(GIT_REVISION)); + fGitBranch_label->setText(QString("git-branch: %1").arg(GIT_BRANCH)); + fGitRev_label->setText(QString("git-rev: %1").arg(GIT_CURRENT_SHA1)); setModal(true); } diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index 2dff05f1..ff256bed 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -72,7 +72,6 @@ using namespace std; #include "PDumpOutputHandler.h" #include "PPrefsDialog.h" #include "PGetMusrFTOptionsDialog.h" -//#include "PGetDefaultDialog.h" #include "PMusrEditAbout.h" #include "PMsr2DataDialog.h" diff --git a/src/musredit_qt5/forms/PMusrEditAbout.ui b/src/musredit_qt5/forms/PMusrEditAbout.ui index 4917bf82..0b5849cb 100644 --- a/src/musredit_qt5/forms/PMusrEditAbout.ui +++ b/src/musredit_qt5/forms/PMusrEditAbout.ui @@ -7,7 +7,7 @@ 0 0 395 - 187 + 202 @@ -20,10 +20,10 @@ - 12 - 12 + 13 + 13 371 - 161 + 181 @@ -46,6 +46,23 @@ p, li { white-space: pre-wrap; } + + + + + 75 + true + true + + + + <html><head/><body><p><span style=" font-weight:600; font-style:italic;">git-branch: </span></p></body></html> + + + Qt::AlignCenter + + + @@ -56,7 +73,7 @@ p, li { white-space: pre-wrap; } - git: + git-rev: Qt::AlignCenter diff --git a/src/musredit_qt5/main.cpp b/src/musredit_qt5/main.cpp index 8948dca1..950b6682 100644 --- a/src/musredit_qt5/main.cpp +++ b/src/musredit_qt5/main.cpp @@ -53,7 +53,7 @@ int main( int argc, char ** argv ) cout << endl << endl; return 0; } else if (!strcmp(argv[1], "--version") || !strcmp(argv[1], "-v")) { - cout << endl << "musredit git-rev: " << GIT_REVISION; + cout << endl << "musredit git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1; cout << endl << endl; return 0; } diff --git a/src/musrfit.cpp b/src/musrfit.cpp index 10264fe1..0aee41cd 100644 --- a/src/musrfit.cpp +++ b/src/musrfit.cpp @@ -457,9 +457,9 @@ int main(int argc, char *argv[]) if (argc == 2) { if (!strcmp(argv[1], "--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "musrfit version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrfit version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "musrfit git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrfit git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return PMUSR_SUCCESS; } diff --git a/src/musrt0.cpp b/src/musrt0.cpp index 197e60b7..e354ba97 100644 --- a/src/musrt0.cpp +++ b/src/musrt0.cpp @@ -232,9 +232,9 @@ Int_t main(Int_t argc, Char_t *argv[]) for (int i=1; i> musrt0 version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrt0 version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << ">> musrt0 git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrt0 git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return PMUSR_SUCCESS; } else if (!strcmp(argv[i], "--help")) { diff --git a/src/musrview.cpp b/src/musrview.cpp index cc0d947b..0c0da86b 100644 --- a/src/musrview.cpp +++ b/src/musrview.cpp @@ -127,9 +127,9 @@ int main(int argc, char *argv[]) } } else if (!strcmp(argv[i], "--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "musrview version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrview version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "musrview git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "musrview git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return PMUSR_SUCCESS; } else if (!strcmp(argv[i], "--help")) { diff --git a/src/write_musrRoot_runHeader.cpp b/src/write_musrRoot_runHeader.cpp index b5c5380d..363cddf0 100644 --- a/src/write_musrRoot_runHeader.cpp +++ b/src/write_musrRoot_runHeader.cpp @@ -62,9 +62,9 @@ int main(int argc, char *argv[]) if (!strcmp(argv[1], "--version")) { #ifdef HAVE_CONFIG_H - cout << endl << "write_musrRoot_runHeader version: " << PACKAGE_VERSION << ", git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "write_musrRoot_runHeader version: " << PACKAGE_VERSION << ", git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #else - cout << endl << "write_musrRoot_runHeader git-rev: " << GIT_REVISION << endl << endl; + cout << endl << "write_musrRoot_runHeader git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << endl << endl; #endif return 0; } From 1709b5e4d906aa2c7b5e98c18d718e4e6b97ca07 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Wed, 22 Feb 2017 10:05:09 +0100 Subject: [PATCH 06/43] removed obsolate 'template' directory from the documentation installation path. --- Makefile.am | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index a0467d7b..2eb24308 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,8 +6,7 @@ EXTRA_DIST = autogen.sh acinclude.m4 # The following is to install the documentation # It is a bit lengthy because one cannot simply install whole directories (except copying them recursively -- which also takes the .svn directories...) -DOCDIRS = templates \ - examples \ +DOCDIRS = examples \ examples/data \ examples/ASlibs \ examples/ASlibs/data \ From c44ad0d6bf822ff2638bdb41d1807e55cc24ebc4 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 25 Feb 2017 15:53:02 +0100 Subject: [PATCH 07/43] full implementation of musrStep functionality. --- src/musredit_qt5/PTextEdit.cpp | 76 +++++++++++++++++++++++++++++++++- src/musredit_qt5/PTextEdit.h | 3 ++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index ff256bed..e29ee699 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -2266,7 +2266,55 @@ void PTextEdit::musrSetSteps() if ( !currentEditor() ) return; - QMessageBox::information(this, "**INFO**", "Eventually this will allow to set the\nstep values of the current msr-file."); + // make sure I have a saved msr-file to work on + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For musrStep a real mlog/msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + // fill the command queue + QString cmd = fAdmin->getExecPath() + "/musrStep"; + QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); + QStringList arg; + QString str; + + // get file name and feed it to the command queue + str = *fFilenames.find( currentEditor() ); + int pos = str.lastIndexOf("/"); + if (pos != -1) + str.remove(0, pos+1); + arg << str; + + QProcess *proc = new QProcess(this); + if (proc == nullptr) { + QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); + return; + } + + // handle return status of musrStep + connect(proc, static_cast(&QProcess::finished), + [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrSetSteps(exitCode, exitStatus); }); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd, arg); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } } //---------------------------------------------------------------------------------------------------- @@ -2424,6 +2472,32 @@ void PTextEdit::helpAboutQt() QMessageBox::aboutQt(this); } + +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::existStatusMusrSetSteps + * @param exitCode + * @param exitStatus + */ +void PTextEdit::exitStatusMusrSetSteps(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus == QProcess::CrashExit) { + QMessageBox::critical(0, "**FATAL**", "musrStep returned CrashExit."); + return; + } + + // dialog finished with reject + if (exitCode == 0) + return; + + // dialog finished with save and quite, i.e. accept, hence reload + QString fln = *fFilenames.find( currentEditor() ); + int idx = fTabWidget->currentIndex(); + + fileClose(); + load(fln, idx); +} + //---------------------------------------------------------------------------------------------------- /** *

SLOT: called when the font shall be changed. diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index 7235cbd7..9e1863d5 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -141,6 +142,8 @@ private slots: void helpAboutQt(); void helpAbout(); + void exitStatusMusrSetSteps(int exitCode, QProcess::ExitStatus exitStatus); + void fontChanged( const QFont &f ); void textChanged(const bool forced = false); void currentCursorPosition(); From fa67af63b7b45fbfb45562c58a131a6f2860d54a Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 26 Feb 2017 12:29:56 +0100 Subject: [PATCH 08/43] slightly 'nicer' musrStep icon. --- src/musredit_qt5/icons/musrStep-32x32.svg | 123 ++++++++++++---------- 1 file changed, 65 insertions(+), 58 deletions(-) diff --git a/src/musredit_qt5/icons/musrStep-32x32.svg b/src/musredit_qt5/icons/musrStep-32x32.svg index a0c6dbe1..6569576b 100644 --- a/src/musredit_qt5/icons/musrStep-32x32.svg +++ b/src/musredit_qt5/icons/musrStep-32x32.svg @@ -9,34 +9,35 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="32" - height="32" + width="34.133335" + height="34.133335" id="svg2" version="1.1" - inkscape:version="0.47 r22583" - sodipodi:docname="musrStep-32x32.png"> + inkscape:version="0.92.1 r" + sodipodi:docname="musrStep-32x32.svg" + viewBox="0 0 32 32"> + snapvisiblegridlinesonly="true" + originx="0" + originy="0" + spacingx="1" + spacingy="1" /> @@ -73,7 +78,7 @@ image/svg+xml - + @@ -82,59 +87,61 @@ inkscape:groupmode="layer" id="layer1" transform="translate(0,-1020.3622)"> - + transform="matrix(2,0,0,2,-2.0000001,1015.3622)" + cx="3.5" + cy="10.5" + r="1.5" /> + transform="translate(0,1020.3622)" + inkscape:connector-curvature="0" /> + transform="translate(0,1020.3622)" + inkscape:connector-curvature="0" /> - + + transform="matrix(2,0,0,2,20,1015.3622)" + cx="3.5" + cy="10.5" + r="1.5" /> + transform="translate(0,1020.3622)" + inkscape:connector-curvature="0" /> + transform="translate(0,1020.3622)" + inkscape:connector-curvature="0" /> + transform="translate(0,1020.3622)" + inkscape:connector-curvature="0" /> + style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.40624988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 21,1034.3622 -4,-4 v -4 l -6,10 6,10 v -4 l 4,-4 -2,-2 z" + id="path4495" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccccc" /> From 9d8c1c760604fc9fdfbc6d870c41467c566502c0 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 27 Feb 2017 09:40:53 +0100 Subject: [PATCH 09/43] stub for musrWiz added. --- src/musredit_qt5/PTextEdit.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index e29ee699..55bbb093 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -1600,10 +1600,26 @@ void PTextEdit::textSize( const QString &p ) */ void PTextEdit::musrWiz() { - if ( !currentEditor() ) - return; + QString cmd = fAdmin->getExecPath() + "/musrWiz"; + QString workDir = "./"; // think about it!! - QMessageBox::information(this, "**INFO**", "Will eventually call musrWiz"); + QProcess *proc = new QProcess(this); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } } //---------------------------------------------------------------------------------------------------- From bb41ce188f59c6cca19e611d134a10f521b78d9e Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 27 Feb 2017 16:59:52 +0100 Subject: [PATCH 10/43] more work towards a full musrWiz implementation. --- src/musredit_qt5/PTextEdit.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index 55bbb093..da6133b2 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -1602,6 +1602,8 @@ void PTextEdit::musrWiz() { QString cmd = fAdmin->getExecPath() + "/musrWiz"; QString workDir = "./"; // think about it!! + QStringList arg; + arg << "--log"; QProcess *proc = new QProcess(this); @@ -1610,7 +1612,7 @@ void PTextEdit::musrWiz() env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); proc->setProcessEnvironment(env); proc->setWorkingDirectory(workDir); - proc->start(cmd); + proc->start(cmd, arg); if (!proc->waitForStarted()) { // error handling QString msg(tr("Could not execute the output command: ")+cmd[0]); From 9ba57235ad3bb8a3824ed2277063eb20b60ce621 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 28 Feb 2017 09:57:17 +0100 Subject: [PATCH 11/43] added first full musrWiz functionality. --- src/musredit_qt5/PTextEdit.cpp | 61 ++++++++++++++++++++++++++++++++++ src/musredit_qt5/PTextEdit.h | 1 + 2 files changed, 62 insertions(+) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index da6133b2..c0672ea0 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -28,6 +28,7 @@ ***************************************************************************/ #include +#include using namespace std; #include @@ -1606,6 +1607,14 @@ void PTextEdit::musrWiz() arg << "--log"; QProcess *proc = new QProcess(this); + if (proc == nullptr) { + QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); + return; + } + + // handle return status of musrWiz + connect(proc, static_cast(&QProcess::finished), + [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrWiz(exitCode, exitStatus); }); // make sure that the system environment variables are properly set QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); @@ -2491,6 +2500,58 @@ void PTextEdit::helpAboutQt() } +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::exitStatusMusrWiz + * @param exitCode + * @param exitStatus + */ +void PTextEdit::exitStatusMusrWiz(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus == QProcess::CrashExit) { + QMessageBox::critical(0, "**FATAL**", "musrWiz returned CrashExit."); + return; + } + + // dialog finished with reject + if (exitCode == 0) + return; + + // read .musrWiz.log + ifstream fin(".musrWiz.log", ifstream::in); + if (!fin.is_open()) { + QMessageBox::critical(0, "**ERROR**", "PTextEdit::exitStatusMusrWiz: couldn't read .musrWiz.log file."); + return; + } + char line[128]; + bool musrT0tag = false; + QString str, pathFileName(""); + while (fin.good()) { + fin.getline(line, 128); + str = line; + if (str.startsWith("path-file-name:")) { + pathFileName = str.mid(16); + } else if (str.startsWith("musrt0-tag: yes")) { + musrT0tag = true; + } + } + fin.close(); + + load(pathFileName); + + // in case there is a 1st empty tab "noname", remove it + QString tabStr = fTabWidget->tabText(0); + tabStr.remove('&'); // this is needed since the QTabWidget adds short-cut info as '&' to the tab name + if (tabStr == "noname") { // has to be the first, otherwise do nothing + fFileSystemWatcher->removePath("noname"); + + delete fTabWidget->widget(0); + } + + if (musrT0tag) + musrT0(); +} + //---------------------------------------------------------------------------------------------------- /** * @brief PTextEdit::existStatusMusrSetSteps diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index 9e1863d5..9307c837 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -142,6 +142,7 @@ private slots: void helpAboutQt(); void helpAbout(); + void exitStatusMusrWiz(int exitCode, QProcess::ExitStatus exitStatus); void exitStatusMusrSetSteps(int exitCode, QProcess::ExitStatus exitStatus); void fontChanged( const QFont &f ); From ca61789bf3923f0eac6c9be3884d4d2fbdae78cf Mon Sep 17 00:00:00 2001 From: suter_a Date: Tue, 28 Feb 2017 21:41:34 +0100 Subject: [PATCH 12/43] added dark theme including the necessary icons to musredit. --- src/musredit_qt5/PTextEdit.cpp | 160 +++++++++-- src/musredit_qt5/PTextEdit.h | 1 + src/musredit_qt5/icons/document-new-dark.svg | 14 + src/musredit_qt5/icons/document-open-dark.svg | 14 + .../icons/document-print-dark.svg | 14 + src/musredit_qt5/icons/document-save-dark.svg | 14 + src/musredit_qt5/icons/edit-copy-dark.svg | 14 + src/musredit_qt5/icons/edit-cut-dark.svg | 14 + src/musredit_qt5/icons/edit-find-dark.svg | 14 + src/musredit_qt5/icons/edit-paste-dark.svg | 14 + src/musredit_qt5/icons/edit-redo-dark.svg | 14 + src/musredit_qt5/icons/edit-undo-dark.svg | 14 + src/musredit_qt5/icons/go-next-use-dark.svg | 14 + .../icons/go-previous-use-dark.svg | 14 + src/musredit_qt5/icons/msr2data-dark.svg | 265 ++++++++++++++++++ src/musredit_qt5/icons/musrFT-dark.svg | 138 +++++++++ .../icons/musrStep-32x32-dark.svg | 147 ++++++++++ src/musredit_qt5/icons/musrStep-32x32.svg | 6 +- src/musredit_qt5/icons/musrWiz-32x32-dark.svg | 164 +++++++++++ src/musredit_qt5/icons/musrchisq-dark.svg | 153 ++++++++++ src/musredit_qt5/icons/musrdump-dark.svg | 182 ++++++++++++ src/musredit_qt5/icons/musrfit-dark.svg | 190 +++++++++++++ src/musredit_qt5/icons/musrprefs-dark.svg | 177 ++++++++++++ src/musredit_qt5/icons/musrswap-dark.svg | 206 ++++++++++++++ src/musredit_qt5/icons/musrt0-dark.svg | 105 +++++++ src/musredit_qt5/icons/musrview-dark.svg | 173 ++++++++++++ src/musredit_qt5/icons/view-refresh-dark.svg | 17 ++ src/musredit_qt5/musredit.qrc | 24 ++ 28 files changed, 2248 insertions(+), 28 deletions(-) create mode 100644 src/musredit_qt5/icons/document-new-dark.svg create mode 100644 src/musredit_qt5/icons/document-open-dark.svg create mode 100644 src/musredit_qt5/icons/document-print-dark.svg create mode 100644 src/musredit_qt5/icons/document-save-dark.svg create mode 100644 src/musredit_qt5/icons/edit-copy-dark.svg create mode 100644 src/musredit_qt5/icons/edit-cut-dark.svg create mode 100644 src/musredit_qt5/icons/edit-find-dark.svg create mode 100644 src/musredit_qt5/icons/edit-paste-dark.svg create mode 100644 src/musredit_qt5/icons/edit-redo-dark.svg create mode 100644 src/musredit_qt5/icons/edit-undo-dark.svg create mode 100644 src/musredit_qt5/icons/go-next-use-dark.svg create mode 100644 src/musredit_qt5/icons/go-previous-use-dark.svg create mode 100644 src/musredit_qt5/icons/msr2data-dark.svg create mode 100644 src/musredit_qt5/icons/musrFT-dark.svg create mode 100644 src/musredit_qt5/icons/musrStep-32x32-dark.svg create mode 100644 src/musredit_qt5/icons/musrWiz-32x32-dark.svg create mode 100644 src/musredit_qt5/icons/musrchisq-dark.svg create mode 100644 src/musredit_qt5/icons/musrdump-dark.svg create mode 100644 src/musredit_qt5/icons/musrfit-dark.svg create mode 100644 src/musredit_qt5/icons/musrprefs-dark.svg create mode 100644 src/musredit_qt5/icons/musrswap-dark.svg create mode 100644 src/musredit_qt5/icons/musrt0-dark.svg create mode 100644 src/musredit_qt5/icons/musrview-dark.svg create mode 100644 src/musredit_qt5/icons/view-refresh-dark.svg diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index c0672ea0..a46502cd 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -86,6 +86,12 @@ using namespace std; PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f ) : QMainWindow( parent, f ) { + QString str = QIcon::themeName(); + if (str.contains("dark", Qt::CaseInsensitive)) + fDarkTheme = true; + else + fDarkTheme = false; + // reads and manages the conents of the xml-startup (musredit_startup.xml) file fAdmin = new PAdmin(); @@ -119,7 +125,12 @@ PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f ) textSize(QString("%1").arg(fAdmin->getFontSize())); fFontChanging = false; - setWindowIcon( QIcon( QPixmap( ":/icons/musrfit-plain.svg" ) ) ); + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/musrfit-dark.svg"); + else + iconName = QString(":/icons/musrfit-plain.svg"); + setWindowIcon( QIcon( QPixmap(iconName) ) ); // if arguments are give, try to load those files, otherwise create an empty new file if ( qApp->arguments().size() != 1 ) { @@ -174,14 +185,23 @@ void PTextEdit::setupFileActions() QAction *a; - a = new QAction( QIcon( QPixmap(":/icons/document-new-plain.svg") ), tr( "&New..." ), this ); + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/document-new-dark.svg"); + else + iconName = QString(":/icons/document-new-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); a->setShortcut( tr("Ctrl+N") ); a->setStatusTip( tr("Create a new msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap(":/icons/document-open-plain.svg" ) ), tr( "&Open..." ), this ); + if (fDarkTheme) + iconName = QString(":/icons/document-open-dark.svg"); + else + iconName = QString(":/icons/document-open-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); a->setShortcut( tr("Ctrl+O") ); a->setStatusTip( tr("Opens a msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); @@ -197,7 +217,11 @@ void PTextEdit::setupFileActions() } fillRecentFiles(); - a = new QAction( QIcon( QPixmap(":/icons/view-refresh-plain.svg") ), tr( "Reload..." ), this ); + if (fDarkTheme) + iconName = QString(":/icons/view-refresh-dark.svg"); + else + iconName = QString(":/icons/view-refresh-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); a->setShortcut( tr("F5") ); a->setStatusTip( tr("Reload msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); @@ -210,7 +234,11 @@ void PTextEdit::setupFileActions() menu->addSeparator(); - a = new QAction( QIcon( QPixmap(":/icons/document-save-plain.svg") ), tr( "&Save..." ), this ); + if (fDarkTheme) + iconName = QString(":/icons/document-save-dark.svg"); + else + iconName = QString(":/icons/document-save-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); a->setShortcut( tr("Ctrl+S") ); a->setStatusTip( tr("Save msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); @@ -228,7 +256,11 @@ void PTextEdit::setupFileActions() menu->addSeparator(); - a = new QAction( QIcon( QPixmap(":/icons/document-print-plain.svg") ), tr( "&Print..." ), this ); + if (fDarkTheme) + iconName = QString(":/icons/document-print-dark.svg"); + else + iconName = QString(":/icons/document-print-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); a->setShortcut( tr("Ctrl+P") ); a->setStatusTip( tr("Print msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); @@ -276,15 +308,24 @@ void PTextEdit::setupEditActions() menuBar()->addMenu( menu ); QAction *a; + QString iconName(""); - a = new QAction( QIcon( QPixmap( ":/icons/edit-undo-plain.svg" ) ), tr( "&Undo" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-undo-dark.svg"); + else + iconName = QString(":/icons/edit-undo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); a->setShortcut( tr("Ctrl+Z") ); a->setStatusTip( tr("Edit Undo") ); connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/edit-redo-plain.svg" ) ), tr( "&Redo" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-redo-dark.svg"); + else + iconName = QString(":/icons/edit-redo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); a->setShortcut( tr("Ctrl+Y") ); a->setStatusTip( tr("Edit Redo") ); connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); @@ -301,21 +342,33 @@ void PTextEdit::setupEditActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap( ":/icons/edit-copy-plain.svg" ) ), tr( "&Copy" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-copy-dark.svg"); + else + iconName = QString(":/icons/edit-copy-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); a->setShortcut( tr("Ctrl+C") ); a->setStatusTip( tr("Edit Copy") ); connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/edit-cut-plain.svg" ) ), tr( "Cu&t" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-cut-dark.svg"); + else + iconName = QString(":/icons/edit-cut-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); a->setShortcut( tr("Ctrl+X") ); a->setStatusTip( tr("Edit Cut") ); connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/edit-paste-plain.svg" ) ), tr( "&Paste" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-paste-dark.svg"); + else + iconName = QString(":/icons/edit-paste-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); a->setShortcut( tr("Ctrl+V") ); a->setStatusTip( tr("Edit Paste") ); connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); @@ -325,21 +378,33 @@ void PTextEdit::setupEditActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap( ":/icons/edit-find-plain.svg" ) ), tr( "&Find" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/edit-find-dark.svg"); + else + iconName = QString(":/icons/edit-find-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); a->setShortcut( tr("Ctrl+F") ); a->setStatusTip( tr("Edit Find") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/go-next-use-plain.svg" ) ), tr( "Find &Next" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/go-next-use-dark.svg"); + else + iconName = QString(":/icons/go-next-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); a->setShortcut( tr("F3") ); a->setStatusTip( tr("Edit Find Next") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/go-previous-use-plain.svg" ) ) , tr( "Find Pre&vious" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/go-previous-use-dark.svg"); + else + iconName = QString(":/icons/go-previous-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ) , tr( "Find Pre&vious" ), this ); a->setShortcut( tr("Shift+F4") ); a->setStatusTip( tr("Edit Find Previous") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); @@ -491,7 +556,12 @@ void PTextEdit::setupMusrActions() menuBar()->addMenu( menu ); QAction *a; - a = new QAction( QIcon( QPixmap( ":/icons/musrWiz-32x32.svg" ) ), tr( "musr&Wiz" ), this ); + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/musrWiz-32x32-dark.svg"); + else + iconName = QString(":/icons/musrWiz-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); a->setShortcut( tr("Alt+W") ); a->setStatusTip( tr("Call musrWiz which helps to create msr-files") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); @@ -501,35 +571,55 @@ void PTextEdit::setupMusrActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap( ":/icons/musrchisq-plain.svg" ) ), tr( "Calculate &Chisq" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrchisq-dark.svg"); + else + iconName = QString(":/icons/musrchisq-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); a->setShortcut( tr("Alt+C") ); a->setStatusTip( tr("Calculate Chi Square (Log Max Likelihood)") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/musrfit-plain.svg" ) ), tr( "&Fit" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrfit-dark.svg"); + else + iconName = QString(":/icons/musrfit-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); a->setShortcut( tr("Alt+F") ); a->setStatusTip( tr("Fit") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/musrswap-plain.svg" ) ), tr( "&Swap Msr <-> Mlog" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrswap-dark.svg"); + else + iconName = QString(":/icons/musrswap-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); a->setShortcut( tr("Alt+S") ); a->setStatusTip( tr("Swap msr-file <-> mlog-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/musrStep-32x32.svg" ) ), tr( "Set Ste&ps" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrStep-32x32-dark.svg"); + else + iconName = QString(":/icons/musrStep-32x32-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); a->setShortcut( tr("Alt+P") ); a->setStatusTip( tr("Set Steps") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/msr2data-plain.svg" ) ), tr( "&Msr2Data" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/msr2data-dark.svg"); + else + iconName = QString(":/icons/msr2data-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); a->setShortcut( tr("Alt+M") ); a->setStatusTip( tr("Start msr2data interface") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); @@ -539,27 +629,43 @@ void PTextEdit::setupMusrActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap( ":/icons/musrview-plain.svg" ) ), tr( "&View" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrview-dark.svg"); + else + iconName = QString(":/icons/musrview-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); a->setShortcut( tr("Alt+V") ); a->setStatusTip( tr("Start musrview") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); tb->addAction(a); menu->addAction(a); - fMusrT0Action = new QAction( QIcon( QPixmap( ":/icons/musrt0-plain.svg" ) ), tr( "&T0" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrt0-dark.svg"); + else + iconName = QString(":/icons/musrt0-plain.svg"); + fMusrT0Action = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); fMusrT0Action->setStatusTip( tr("Start musrt0") ); connect( fMusrT0Action, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); tb->addAction(fMusrT0Action); menu->addAction(fMusrT0Action); fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); - a = new QAction( QIcon( QPixmap (":/icons/musrFT-plain.svg") ), tr( "Raw Fourier" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrFT-dark.svg"); + else + iconName = QString(":/icons/musrFT-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); a->setStatusTip( tr("Start musrFT") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); tb->addAction(a); menu->addAction(a); - a = new QAction( QIcon( QPixmap( ":/icons/musrprefs-plain.svg" ) ), tr( "&Preferences" ), this ); + if (fDarkTheme) + iconName = QString(":/icons/musrprefs-dark.svg"); + else + iconName = QString(":/icons/musrprefs-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); a->setStatusTip( tr("Show Preferences") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); tb->addAction(a); @@ -568,7 +674,11 @@ void PTextEdit::setupMusrActions() menu->addSeparator(); tb->addSeparator(); - a = new QAction( QIcon( QPixmap(":/icons/musrdump-plain.svg")), tr( "&Dump Header"), this); + if (fDarkTheme) + iconName = QString(":/icons/musrdump-dark.svg"); + else + iconName = QString(":/icons/musrdump-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName)), tr( "&Dump Header"), this); a->setStatusTip( tr("Dumps muSR File Header Information") ); connect( a, SIGNAL(triggered()), this, SLOT(musrDump())); tb->addAction(a); diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index 9307c837..b4cf8957 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -158,6 +158,7 @@ private slots: void setFileSystemWatcherActive(); private: + bool fDarkTheme; PAdmin *fAdmin; ///< pointer to the xml-startup file informations. Needed for different purposes like default working- and executable directories etc. QFileSystemWatcher *fFileSystemWatcher; ///< checks if msr-files are changing on the disk while being open in musredit. bool fFileSystemWatcherActive; ///< flag to enable/disable the file system watcher diff --git a/src/musredit_qt5/icons/document-new-dark.svg b/src/musredit_qt5/icons/document-new-dark.svg new file mode 100644 index 00000000..f56bdeb8 --- /dev/null +++ b/src/musredit_qt5/icons/document-new-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/document-open-dark.svg b/src/musredit_qt5/icons/document-open-dark.svg new file mode 100644 index 00000000..ef9cbb30 --- /dev/null +++ b/src/musredit_qt5/icons/document-open-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/document-print-dark.svg b/src/musredit_qt5/icons/document-print-dark.svg new file mode 100644 index 00000000..6eb876ee --- /dev/null +++ b/src/musredit_qt5/icons/document-print-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/document-save-dark.svg b/src/musredit_qt5/icons/document-save-dark.svg new file mode 100644 index 00000000..3df75d57 --- /dev/null +++ b/src/musredit_qt5/icons/document-save-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-copy-dark.svg b/src/musredit_qt5/icons/edit-copy-dark.svg new file mode 100644 index 00000000..6de6a598 --- /dev/null +++ b/src/musredit_qt5/icons/edit-copy-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-cut-dark.svg b/src/musredit_qt5/icons/edit-cut-dark.svg new file mode 100644 index 00000000..99ab04ef --- /dev/null +++ b/src/musredit_qt5/icons/edit-cut-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-find-dark.svg b/src/musredit_qt5/icons/edit-find-dark.svg new file mode 100644 index 00000000..fb62e414 --- /dev/null +++ b/src/musredit_qt5/icons/edit-find-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-paste-dark.svg b/src/musredit_qt5/icons/edit-paste-dark.svg new file mode 100644 index 00000000..ba4f3cb5 --- /dev/null +++ b/src/musredit_qt5/icons/edit-paste-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-redo-dark.svg b/src/musredit_qt5/icons/edit-redo-dark.svg new file mode 100644 index 00000000..19d34158 --- /dev/null +++ b/src/musredit_qt5/icons/edit-redo-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/edit-undo-dark.svg b/src/musredit_qt5/icons/edit-undo-dark.svg new file mode 100644 index 00000000..7ab68cf0 --- /dev/null +++ b/src/musredit_qt5/icons/edit-undo-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/go-next-use-dark.svg b/src/musredit_qt5/icons/go-next-use-dark.svg new file mode 100644 index 00000000..6c188cf0 --- /dev/null +++ b/src/musredit_qt5/icons/go-next-use-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/go-previous-use-dark.svg b/src/musredit_qt5/icons/go-previous-use-dark.svg new file mode 100644 index 00000000..01ef7277 --- /dev/null +++ b/src/musredit_qt5/icons/go-previous-use-dark.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/src/musredit_qt5/icons/msr2data-dark.svg b/src/musredit_qt5/icons/msr2data-dark.svg new file mode 100644 index 00000000..87af256a --- /dev/null +++ b/src/musredit_qt5/icons/msr2data-dark.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrFT-dark.svg b/src/musredit_qt5/icons/musrFT-dark.svg new file mode 100644 index 00000000..55763817 --- /dev/null +++ b/src/musredit_qt5/icons/musrFT-dark.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrStep-32x32-dark.svg b/src/musredit_qt5/icons/musrStep-32x32-dark.svg new file mode 100644 index 00000000..fec88e9f --- /dev/null +++ b/src/musredit_qt5/icons/musrStep-32x32-dark.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrStep-32x32.svg b/src/musredit_qt5/icons/musrStep-32x32.svg index 6569576b..176bb47e 100644 --- a/src/musredit_qt5/icons/musrStep-32x32.svg +++ b/src/musredit_qt5/icons/musrStep-32x32.svg @@ -48,13 +48,13 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="24.960936" - inkscape:cx="17.066668" + inkscape:cx="9.8153374" inkscape:cy="17.066668" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1912" - inkscape:window-height="1017" + inkscape:window-height="1015" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="0"> @@ -138,7 +138,7 @@ transform="translate(0,1020.3622)" inkscape:connector-curvature="0" /> + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrchisq-dark.svg b/src/musredit_qt5/icons/musrchisq-dark.svg new file mode 100644 index 00000000..2086780e --- /dev/null +++ b/src/musredit_qt5/icons/musrchisq-dark.svg @@ -0,0 +1,153 @@ + + + + + + + + image/svg+xml + + + + + + χ2 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrdump-dark.svg b/src/musredit_qt5/icons/musrdump-dark.svg new file mode 100644 index 00000000..13d8cf23 --- /dev/null +++ b/src/musredit_qt5/icons/musrdump-dark.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + DUMP + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrfit-dark.svg b/src/musredit_qt5/icons/musrfit-dark.svg new file mode 100644 index 00000000..45a532c6 --- /dev/null +++ b/src/musredit_qt5/icons/musrfit-dark.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrprefs-dark.svg b/src/musredit_qt5/icons/musrprefs-dark.svg new file mode 100644 index 00000000..8687353f --- /dev/null +++ b/src/musredit_qt5/icons/musrprefs-dark.svg @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + PREFS + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrswap-dark.svg b/src/musredit_qt5/icons/musrswap-dark.svg new file mode 100644 index 00000000..79151fc6 --- /dev/null +++ b/src/musredit_qt5/icons/musrswap-dark.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + MLOG + MSR + + + + + + + + + + diff --git a/src/musredit_qt5/icons/musrt0-dark.svg b/src/musredit_qt5/icons/musrt0-dark.svg new file mode 100644 index 00000000..3630dd7f --- /dev/null +++ b/src/musredit_qt5/icons/musrt0-dark.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + T0 + diff --git a/src/musredit_qt5/icons/musrview-dark.svg b/src/musredit_qt5/icons/musrview-dark.svg new file mode 100644 index 00000000..1831940f --- /dev/null +++ b/src/musredit_qt5/icons/musrview-dark.svg @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/icons/view-refresh-dark.svg b/src/musredit_qt5/icons/view-refresh-dark.svg new file mode 100644 index 00000000..0b66cbef --- /dev/null +++ b/src/musredit_qt5/icons/view-refresh-dark.svg @@ -0,0 +1,17 @@ + + + + + + diff --git a/src/musredit_qt5/musredit.qrc b/src/musredit_qt5/musredit.qrc index e17b7e6e..3dbc000d 100644 --- a/src/musredit_qt5/musredit.qrc +++ b/src/musredit_qt5/musredit.qrc @@ -1,29 +1,53 @@ icons/edit-copy-plain.svg + icons/edit-copy-dark.svg icons/edit-cut-plain.svg + icons/edit-cut-dark.svg icons/edit-find-plain.svg + icons/edit-find-dark.svg icons/go-next-use-plain.svg + icons/go-next-use-dark.svg icons/edit-paste-plain.svg + icons/edit-paste-dark.svg icons/go-previous-use-plain.svg + icons/go-previous-use-dark.svg icons/edit-redo-plain.svg + icons/edit-redo-dark.svg icons/edit-undo-plain.svg + icons/edit-undo-dark.svg icons/document-new-plain.svg + icons/document-new-dark.svg icons/document-open-plain.svg + icons/document-open-dark.svg icons/document-print-plain.svg + icons/document-print-dark.svg icons/view-refresh-plain.svg + icons/view-refresh-dark.svg icons/document-save-plain.svg + icons/document-save-dark.svg icons/musrWiz-32x32.svg + icons/musrWiz-32x32-dark.svg icons/musrchisq-plain.svg + icons/musrchisq-dark.svg icons/musrfit-plain.svg + icons/musrfit-dark.svg icons/msr2data-plain.svg + icons/msr2data-dark.svg icons/musrprefs-plain.svg + icons/musrprefs-dark.svg icons/musrswap-plain.svg + icons/musrswap-dark.svg icons/musrStep-32x32.svg + icons/musrStep-32x32-dark.svg icons/musrt0-plain.svg + icons/musrt0-dark.svg icons/musrview-plain.svg + icons/musrview-dark.svg icons/musrFT-plain.svg + icons/musrFT-dark.svg icons/musrdump-plain.svg + icons/musrdump-dark.svg latex_images/abragam.png latex_images/asymmetry.png latex_images/bessel.png From 5d43c1d51492820842cc2981be8be67c4e842090 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 2 Mar 2017 12:49:08 +0100 Subject: [PATCH 13/43] fixed wrong icon name. --- src/musredit_qt5/PTextEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index a46502cd..48e15101 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -607,7 +607,7 @@ void PTextEdit::setupMusrActions() if (fDarkTheme) iconName = QString(":/icons/musrStep-32x32-dark.svg"); else - iconName = QString(":/icons/musrStep-32x32-plain.svg"); + iconName = QString(":/icons/musrStep-32x32.svg"); a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); a->setShortcut( tr("Alt+P") ); a->setStatusTip( tr("Set Steps") ); From 9866554574b7c6dfc89f5bfbd27f8213b5000728 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 9 Mar 2017 11:33:20 +0100 Subject: [PATCH 14/43] added C++11 compiler flags. --- src/musredit_qt5/musredit.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/musredit_qt5/musredit.pro b/src/musredit_qt5/musredit.pro index 4a412554..19fa468b 100644 --- a/src/musredit_qt5/musredit.pro +++ b/src/musredit_qt5/musredit.pro @@ -1,6 +1,8 @@ TEMPLATE = app TARGET = musredit +QMAKE_CXXFLAGS += -std=c++11 + # install path for musredit count( PREFIX, 1 ) { MUSREDIT_INSTALL_PATH = $${PREFIX}/bin From 40c54fe195210e8985dc50bb9221892f2b5b9743 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 9 Mar 2017 11:34:31 +0100 Subject: [PATCH 15/43] improved handling of the dark theme. Needed since Ubuntu is not coherently dealing with it. --- src/musredit_qt5/PTextEdit.cpp | 196 ++++++++++++++++++++++++++++----- src/musredit_qt5/PTextEdit.h | 2 + 2 files changed, 169 insertions(+), 29 deletions(-) diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/PTextEdit.cpp index 48e15101..a83455e5 100644 --- a/src/musredit_qt5/PTextEdit.cpp +++ b/src/musredit_qt5/PTextEdit.cpp @@ -86,11 +86,7 @@ using namespace std; PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f ) : QMainWindow( parent, f ) { - QString str = QIcon::themeName(); - if (str.contains("dark", Qt::CaseInsensitive)) - fDarkTheme = true; - else - fDarkTheme = false; + getTheme(); // reads and manages the conents of the xml-startup (musredit_startup.xml) file fAdmin = new PAdmin(); @@ -194,8 +190,13 @@ void PTextEdit::setupFileActions() a->setShortcut( tr("Ctrl+N") ); a->setStatusTip( tr("Create a new msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-new-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/document-open-dark.svg"); @@ -205,8 +206,13 @@ void PTextEdit::setupFileActions() a->setShortcut( tr("Ctrl+O") ); a->setStatusTip( tr("Opens a msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-open-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); + } + tb->addAction(a); fRecentFilesMenu = menu->addMenu( tr("Recent Files") ); for (int i=0; isetShortcut( tr("F5") ); a->setStatusTip( tr("Reload msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/view-refresh-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); + } + tb->addAction(a); a = new QAction( tr( "Open Prefs..." ), this); connect( a, SIGNAL( triggered() ), this, SLOT( fileOpenPrefs() ) ); @@ -242,8 +253,13 @@ void PTextEdit::setupFileActions() a->setShortcut( tr("Ctrl+S") ); a->setStatusTip( tr("Save msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-save-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); + } + tb->addAction(a); a = new QAction( tr( "Save &As..." ), this ); a->setStatusTip( tr("Save msr-file As") ); @@ -264,8 +280,13 @@ void PTextEdit::setupFileActions() a->setShortcut( tr("Ctrl+P") ); a->setStatusTip( tr("Print msr-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-print-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); + } + tb->addAction(a); menu->addSeparator(); @@ -318,8 +339,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+Z") ); a->setStatusTip( tr("Edit Undo") ); connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-undo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/edit-redo-dark.svg"); @@ -329,8 +355,14 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+Y") ); a->setStatusTip( tr("Edit Redo") ); connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-redo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); + } + tb->addAction(a); + menu->addSeparator(); a = new QAction( tr( "Select &All" ), this ); @@ -350,8 +382,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+C") ); a->setStatusTip( tr("Edit Copy") ); connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-copy-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/edit-cut-dark.svg"); @@ -361,8 +398,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+X") ); a->setStatusTip( tr("Edit Cut") ); connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-cut-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/edit-paste-dark.svg"); @@ -372,8 +414,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+V") ); a->setStatusTip( tr("Edit Paste") ); connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-paste-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); + } + tb->addAction(a); menu->addSeparator(); tb->addSeparator(); @@ -386,8 +433,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Ctrl+F") ); a->setStatusTip( tr("Edit Find") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-find-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/go-next-use-dark.svg"); @@ -397,8 +449,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("F3") ); a->setStatusTip( tr("Edit Find Next") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/go-next-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/go-previous-use-dark.svg"); @@ -408,8 +465,13 @@ void PTextEdit::setupEditActions() a->setShortcut( tr("Shift+F4") ); a->setStatusTip( tr("Edit Find Previous") ); connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/go-previous-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find Pre&vious" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); + } + tb->addAction(a); a = new QAction( tr( "Replace..." ), this ); a->setShortcut( tr("Ctrl+R") ); @@ -565,8 +627,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+W") ); a->setStatusTip( tr("Call musrWiz which helps to create msr-files") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrWiz-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); + } + tb->addAction(a); menu->addSeparator(); tb->addSeparator(); @@ -579,8 +646,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+C") ); a->setStatusTip( tr("Calculate Chi Square (Log Max Likelihood)") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrchisq-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/musrfit-dark.svg"); @@ -590,8 +662,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+F") ); a->setStatusTip( tr("Fit") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrfit-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/musrswap-dark.svg"); @@ -601,8 +678,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+S") ); a->setStatusTip( tr("Swap msr-file <-> mlog-file") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrswap-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/musrStep-32x32-dark.svg"); @@ -612,8 +694,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+P") ); a->setStatusTip( tr("Set Steps") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrStep-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/msr2data-dark.svg"); @@ -623,8 +710,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+M") ); a->setStatusTip( tr("Start msr2data interface") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/msr2data-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); + } + tb->addAction(a); menu->addSeparator(); tb->addSeparator(); @@ -637,8 +729,13 @@ void PTextEdit::setupMusrActions() a->setShortcut( tr("Alt+V") ); a->setStatusTip( tr("Start musrview") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrview-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/musrt0-dark.svg"); @@ -647,8 +744,13 @@ void PTextEdit::setupMusrActions() fMusrT0Action = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); fMusrT0Action->setStatusTip( tr("Start musrt0") ); connect( fMusrT0Action, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); - tb->addAction(fMusrT0Action); menu->addAction(fMusrT0Action); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrt0-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); + } + tb->addAction(a); fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); if (fDarkTheme) @@ -658,8 +760,13 @@ void PTextEdit::setupMusrActions() a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); a->setStatusTip( tr("Start musrFT") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrFT-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); + } + tb->addAction(a); if (fDarkTheme) iconName = QString(":/icons/musrprefs-dark.svg"); @@ -668,8 +775,13 @@ void PTextEdit::setupMusrActions() a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); a->setStatusTip( tr("Show Preferences") ); connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrprefs-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); + } + tb->addAction(a); menu->addSeparator(); tb->addSeparator(); @@ -681,8 +793,13 @@ void PTextEdit::setupMusrActions() a = new QAction( QIcon( QPixmap(iconName)), tr( "&Dump Header"), this); a->setStatusTip( tr("Dumps muSR File Header Information") ); connect( a, SIGNAL(triggered()), this, SLOT(musrDump())); - tb->addAction(a); menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrdump-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Dump Header" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrDump() ) ); + } + tb->addAction(a); } //---------------------------------------------------------------------------------------------------- @@ -2881,6 +2998,27 @@ void PTextEdit::setFileSystemWatcherActive() fFileSystemWatcherActive = true; } +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::getTheme + */ +void PTextEdit::getTheme() +{ + fDarkTheme = false; // true if theme is dark + fDarkToolBarIcon = false; // needed for ubuntu dark since there the menu icons are dark, however the toolbar icons are plain! + + QString str = QIcon::themeName(); + + if (str.contains("dark", Qt::CaseInsensitive)) { + fDarkTheme = true; + if (str.contains("ubuntu", Qt::CaseInsensitive)) { + fDarkToolBarIcon = false; + } else { + fDarkToolBarIcon = true; + } + } +} + //---------------------------------------------------------------------------------------------------- /** *

fill the recent file list in the menu. diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/PTextEdit.h index b4cf8957..ac774db8 100644 --- a/src/musredit_qt5/PTextEdit.h +++ b/src/musredit_qt5/PTextEdit.h @@ -159,6 +159,7 @@ private slots: private: bool fDarkTheme; + bool fDarkToolBarIcon; PAdmin *fAdmin; ///< pointer to the xml-startup file informations. Needed for different purposes like default working- and executable directories etc. QFileSystemWatcher *fFileSystemWatcher; ///< checks if msr-files are changing on the disk while being open in musredit. bool fFileSystemWatcherActive; ///< flag to enable/disable the file system watcher @@ -181,6 +182,7 @@ private: QMenu *fRecentFilesMenu; ///< recent file menu QAction *fRecentFilesAction[MAX_RECENT_FILES]; ///< array of the recent file actions + void getTheme(); void fillRecentFiles(); QStringList getRunList(QString runListStr, bool &ok); }; From da4525a5a54c5d8d9f595e5043a8ead87ee183cf Mon Sep 17 00:00:00 2001 From: Zaher Salman Date: Thu, 23 Mar 2017 17:10:40 +0100 Subject: [PATCH 16/43] Ported MuSRFit GUI to qt4. May need more debugging. --- src/external/MuSRFitGUI/MuSRFit4.pl | 17 + src/external/MuSRFitGUI/MuSRFit4.pm | 1107 ++++ src/external/MuSRFitGUI/MuSRFit4.ui | 6096 ++++++++++++++++++++++ src/external/MuSRFitGUI/Ui_MuSRFit4.pm | 3438 ++++++++++++ src/external/MuSRFitGUI/icos/Append.odg | Bin 0 -> 10937 bytes src/external/MuSRFitGUI/icos/Append.png | Bin 0 -> 404 bytes src/external/MuSRFitGUI/icos/Export.odg | Bin 0 -> 10837 bytes src/external/MuSRFitGUI/icos/Export.png | Bin 0 -> 374 bytes src/external/MuSRFitGUI/icos/Fit.odg | Bin 11570 -> 11811 bytes src/external/MuSRFitGUI/icos/MuSRFit.odg | Bin 15336 -> 13391 bytes src/external/MuSRFitGUI/icos/Plot.odg | Bin 14709 -> 12961 bytes src/external/MuSRFitGUI/icos/chdir.png | Bin 0 -> 3623 bytes src/external/MuSRFitGUI/icos/exit.png | Bin 0 -> 2073 bytes src/external/MuSRFitGUI/icos/save.png | Bin 0 -> 1646 bytes src/external/MuSRFitGUI/icos/saveMSR.png | Bin 0 -> 2587 bytes 15 files changed, 10658 insertions(+) create mode 100755 src/external/MuSRFitGUI/MuSRFit4.pl create mode 100644 src/external/MuSRFitGUI/MuSRFit4.pm create mode 100644 src/external/MuSRFitGUI/MuSRFit4.ui create mode 100644 src/external/MuSRFitGUI/Ui_MuSRFit4.pm create mode 100644 src/external/MuSRFitGUI/icos/Append.odg create mode 100644 src/external/MuSRFitGUI/icos/Append.png create mode 100644 src/external/MuSRFitGUI/icos/Export.odg create mode 100644 src/external/MuSRFitGUI/icos/Export.png create mode 100644 src/external/MuSRFitGUI/icos/chdir.png create mode 100644 src/external/MuSRFitGUI/icos/exit.png create mode 100644 src/external/MuSRFitGUI/icos/save.png create mode 100644 src/external/MuSRFitGUI/icos/saveMSR.png diff --git a/src/external/MuSRFitGUI/MuSRFit4.pl b/src/external/MuSRFitGUI/MuSRFit4.pl new file mode 100755 index 00000000..61dd0118 --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.pl @@ -0,0 +1,17 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use QtCore4; +use QtGui4; +use MuSRFit4; + +sub main { + my $app = Qt::Application(\@ARGV); + my $musrfit = MuSRFit4(); + $musrfit->show(); + exit $app->exec(); +} + +main(); diff --git a/src/external/MuSRFitGUI/MuSRFit4.pm b/src/external/MuSRFitGUI/MuSRFit4.pm new file mode 100644 index 00000000..2bb46742 --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.pm @@ -0,0 +1,1107 @@ +package MuSRFit4; + +use strict; +use warnings; +use QtCore4; +use QtGui4; +use QtCore4::isa qw( Qt::MainWindow ); +# This is redundant +#use QtCore4::isa qw( Qt::Widget ); +use QtCore4::debug qw(ambiguous); +use QtCore4::slots + fileOpen => [], + fileSave => [], + fileChangeDir => [], + filePrint => [], + fileExit => [], + parametersExport => [], + parametersAppend => [], + editUndo => [], + editRedo => [], + editCut => [], + editCopy => [], + editPaste => [], + helpIndex => [], + helpContents => [], + helpAbout => [], + CreateAllInput => [], + CallMSRCreate => [], + UpdateMSRFileInitTable => [], + ActivateT0Hists => [], + ActivateShComp => [], + InitializeTab => [], + TabChanged => [], + GoFit => [], + GoPlot => [], + ShowMuSRT0 => [], + t0Update => [], + RunSelectionToggle => [], + fileBrowse => [], + AppendToFunctions => [], + InitializeFunctions => [], + t0UpdateClicked => []; +use Ui_MuSRFit4; + +sub NEW { + my ( $class, $parent ) = @_; + $class->SUPER::NEW($parent); + this->{ui} = Ui_MuSRFit4->setupUi(this); + my %All=CreateAllInput(); +} + +# This file is part of MuSRFitGUI. +# +# MuSRFitGUI is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# MuSRFitGUI is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with MuSRFitGUI. If not, see . +# +# Copyright 2009 by Zaher Salman and the LEM Group. +# + +sub fileOpen() +{ + my $file=Qt::FileDialog::getOpenFileName( + ".", + "MSR Files (*.msr *.mlog)", + this, + "open file dialog", + "Choose a MSR file"); + print "Selected file: $file\n"; +# TODO: Possibly decipher the MSR file and setup the GUI accordingly +# Find run numbers, beamlines etc. +# Get theory block and understand it +# Get parameters list and update table + +} + + +sub fileSave() +{ + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}.".msr"; + my $file=Qt::FileDialog::getSaveFileName( + this, + "Save file", + "$FILENAME", + "MSR Files (*.msr *.mlog)"); + +# If the user gave a filename the copy to it + if ($file ne "") { +# TODO: check if the extension is correct, or add it. + if (-e $FILENAME) { + my $cmd="cp $FILENAME $file"; + my $pid=system($cmd); + } else { + if ($file ne "") { + my $Warning = "Warning: No MSR file found yet!"; + my $WarningWindow = Qt::MessageBox::information( this, "Warning",$Warning); + } + } + } +} + +sub fileChangeDir() +{ + my $newdir=Qt::FileDialog::getExistingDirectory( + this, + "Change work directory", + "./", + ""); + chdir ("$newdir"); +} + +sub filePrint() +{ + +} + + +sub fileExit() +{ + my $Ans = Qt::MessageBox::question( this, "Quit?","Are you sure you want to quit?","&Yes","&No","",0,1); + if ($Ans==0) { +# Then quit + Qt::Application::exit( 0 ); + } +# Otherwize go back +} + +sub parametersExport() +{ +# Exports the fit parameters for a table format file +# This works only after a fit call, i.e. a plot call is not sufficient! + my %All=CreateAllInput(); +# Add also a flag for header + $All{"Header"}=1; + my $FILENAME=$All{"FILENAME"}.".dat"; + my $file=Qt::FileDialog::getSaveFileName( + this, + "Export parameters to file", + "$FILENAME", + "Data Files (*.dat)"); + +# If the user gave a filename the copy to it + if ($file ne "") { + my $Text = MSR::ExportParams(\%All); + open( DATF,q{>},"$file" ); + print DATF $Text; + close(DATF); + } +} + + +sub parametersAppend() +{ +# Appends the fit parameters for a table format file +# This works only after a fit call, i.e. a plot call is not sufficient! + my %All=CreateAllInput(); +# Add also a flag for header + $All{"Header"}=0; + my $FILENAME=$All{"FILENAME"}.".dat"; + my $file=Qt::FileDialog::getOpenFileName( + this, + "Append parameters to file", + "./", + "Data Files (*.dat)"); + +# If the user gave a filename the copy to it + if ($file ne "") { + my $Text = MSR::ExportParams(\%All); + open( DATF,q{>>},"$file" ); + print DATF $Text; + close(DATF); + } +} + + +sub editUndo() +{ + +} + + +sub editRedo() +{ + +} + + +sub editCut() +{ + +} + + +sub editCopy() +{ + +} + + +sub editPaste() +{ + +} + + +sub helpIndex() +{ + +} + + +sub helpContents() +{ + +} + +sub helpAbout() +{ + my $AboutText=" +This is a GUI that uses the musrfit binary to fit +muSR spectra. + +MuSRFitGUI is free software: you can redistribute it +and/or modify it under the terms of the GNU General +Public License as published by the Free Software +Foundation, either version 3 of the License, or (at +your option) any later version. + +MuSRFitGUI is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public +License along with MuSRFitGUI. If not, see +. + +Copyright 2009-2017 by Zaher Salman +. +"; + my $AboutWindow = Qt::MessageBox::information( this, "About MuSRFit GUI",$AboutText); +} + +sub CreateAllInput() +{ + my %All=(); + +# From RUNS Tab +# Run data file + $All{"RunNumbers"} = this->{ui}->runNumbers->text(); + $All{"RunFiles"} = this->{ui}->runFiles->text(); + $All{"BeamLine"} = this->{ui}->beamLine->currentText; + $All{"RUNSType"} = this->{ui}->manualFile->isChecked(); + $All{"YEAR"} = this->{ui}->year->currentText; + if (!defined($All{"YEAR"}) || $All{"YEAR"} eq "") { +# If year combobox is empty fill it up from 2004 up to current year + my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); + my $current_year = 1900 + $yearOffset; +# my @years = ($current_year..2004); +# this->{ui}->year->addItems(@years); + for (my $i=$current_year;$i>=2004;$i--) { + this->{ui}->year->addItem($i); + } + } +# Time range and BINS + $All{"Tis"} = this->{ui}->tis->text; + $All{"Tfs"} = this->{ui}->tfs->text; + $All{"BINS"} = this->{ui}->bins->text; + $All{"FitAsyType"} = this->{ui}->fitAsyType->currentText; + $All{"LRBF"} = this->{ui}->histsLRBF->text; + my @Hists = split(/,/, $All{"LRBF"} ); +# Lifetime corrections in enabled/visible only for SingleHis fits + if ( $All{"FitAsyType"} eq "Asymmetry" ) { + this->{ui}->ltc->setHidden(1); + } + elsif ( $All{"FitAsyType"} eq "SingleHist" ) { + this->{ui}->ltc->setHidden(0); + } + +# From Fitting Tab +# Plot range + $All{"Xi"}=this->{ui}->xi->text; + $All{"Xf"}=this->{ui}->xf->text; + $All{"Yi"}=this->{ui}->yi->text; + $All{"Yf"}=this->{ui}->yf->text; + $All{"ViewBin"}=this->{ui}->viewBin->text; +# Life time correction + if (this->{ui}->ltc->isChecked()) { + $All{"ltc"}="y"; + } else { + $All{"ltc"}="n"; + } +# Minuit commands + if ( !defined($All{"go"}) || $All{"go"} eq "" ) { + $All{"go"}="PLOT"; + } +# Get minimization process + $All{"Minimization"} = this->{ui}->minimization->currentText(); + $All{"go"}=$All{"Minimization"}; + +# Get Error calculation process + $All{"ErrorCalc"} = this->{ui}->errorCalc->currentText(); + $All{"go"}=$All{"ErrorCalc"}; + + RunSelectionToggle(); + my @RUNS = (); + if ($All{"RUNSType"} ) { + @RUNS = split( /,/, $All{"RunFiles"}); + } else { + $All{"RunNumbers"} =~ s/[\ \.\~\/\&\*\[\;\>\<\^\$\(\)\`\|\]\'\@]/,/g; + @RUNS = split( /,/, $All{"RunNumbers"} ); + } + +# From MSR File Tab + $All{"TITLE"}= this->{ui}->title->text; + $All{"FILENAME"}= this->{ui}->fileName->text; + +# From Fourier Tab + $All{"FUNITS"}= this->{ui}->funits->currentText; + $All{"FAPODIZATION"}= this->{ui}->fapodization->currentText; + $All{"FPLOT"}= this->{ui}->fplot->currentText; + $All{"FPHASE"}=this->{ui}->fphase->text; +# Fourier range + $All{"FrqMin"}=this->{ui}->frqMin->text; + $All{"FrqMax"}=this->{ui}->frqMax->text; + +# Rotating reference frame parameters + $All{"RRFFrq"}=this->{ui}->rrfFrq->text; + $All{"RRFPack"}=this->{ui}->rrfPack->text; + $All{"RRFPhase"}=this->{ui}->rrfPhase->text; + $All{"RRFUnits"}=this->{ui}->rrfUnits->currentText; + +# Get values of t0 and Bg/Data bins if given + my $NHist = 1; + foreach my $Hist (@Hists) { + foreach ("t0","bg1","bg2","data1","data2") { + my $Name = "$_$NHist"; + $All{$Name}=child("Qt::LineEdit",$Name)->text; +# TODO: If empty fill with defaults + if ($All{$Name} eq "") { + $All{$Name}=MSR::T0BgData($_,$Hist,$All{"BeamLine"}); + child("Qt::LineEdit",$Name)->setText($All{$Name}); + } + } + $NHist++; + } + +# Construct fittypes that can be understood by MSR.pm + my %FTs=(0,"Exponential", + 1,"Gaussian", + 2,"Stretch", + 3,"ExponentialCos", + 4,"GaussianCos", + 5,"StretchCos", + 6,"LDKTLF", + 7,"GDKTLF", + 8,"Background", + 9,"LLFExp", + 10,"GLFExp", + 11,"LLFSExp", + 12,"GLFSExp", + 13,"MolMag", + 14,"Meissner", + 15,"LGKT", + 16,"LGKTExp", + 17,"LGKTSExp", + 18,"None" + ); + + my $FT1=this->{ui}->fitType1->currentIndex; + my $FT2=this->{ui}->fitType2->currentIndex; + my $FT3=this->{ui}->fitType3->currentIndex; + $All{"FitType1"} = $FTs{$FT1}; + $All{"FitType2"} = $FTs{$FT2}; + $All{"FitType3"} = $FTs{$FT3}; + my @FitTypes =(); + my $FitType=""; + foreach $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Also theory block and paramets list + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); + $All{"Full_T_Block"}=$Full_T_Block; + $All{"Paramcomp_ref"}=$Paramcomp_ref; + my @Paramcomp = @$Paramcomp_ref; + +# Functions block + $All{"FunctionsBlock"}=this->{ui}->functionsBlock->toPlainText; +# and the associated theory block + $All{"Func_T_Block"}=this->{ui}->theoryBlock->toPlainText; + +# Shared settings are detected here + $All{"EnableSharing"} = this->{ui}->buttonGroupSharing->isChecked(); + + my $Shared = 0; + my $PCount =0; + my $Component=1; + foreach $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + +# This is the counter for parameters of this component + my $NP=1; + $Shared = 0; +# Change state/label of parameters + foreach my $Param (@Params) { + my $Param_ORG = $Param; +# TODO: I need to take care of single hist fits here + if ( $All{"FitAsyType"} eq "SingleHist" ) { + $Param=$Param.$Hists[0]; + } + if ( $#FitTypes != 0 && ( $Param ne "Alpha" && $Param ne "No" && $Param ne "NBg" ) ){ + $Param = join( "", $Param, "_", $Component); + } + +# Is there any point of sharing, multiple runs? + if ( $#RUNS == 0 && $All{"FitAsyType"} eq "Asymmetry") { + $Shared = 1; + } + elsif ( $#RUNS == 0 && $#Hists == 0 && $All{"FitAsyType"} eq "SingleHist" ) { + $Shared = 1; + } else { +# Check if shared or not, construct name of checkbox, find its handle and then +# check if it is checked + my $ChkName="shParam_".$Component."_".$NP; + my $ChkBx = child("Qt::Widget",$ChkName); + $Shared = $ChkBx->isChecked(); + } + $All{"Sh_$Param"}=$Shared; + $NP++; + } +#Loop on parameters + $Component++; + } +# Loop on components +# Done with shared parameters detecting + +# Construct a default filename if empty + if (defined($RUNS[0])) { + if ( $All{"FILENAME"} eq "" && !$All{"RUNSType"}) { + $All{"FILENAME"}=$RUNS[0]."_".$All{"BeamLine"}."_".$All{"YEAR"}; + if ($All{"BeamLine"} eq "LEM (PPC)") { + $All{"FILENAME"}=$RUNS[0]."_LEM_".$All{"YEAR"}; + } + } + } else { + $All{"FILENAME"}="TMP"; + } + + +# This has to be at the end of CreateAll + my %PTable=MSR::PrepParamTable(\%All); + +# Setup the table with the right size + my $NParam=keys( %PTable ); + +# Read initial values of paramets from tabel + my $erradd = "d"; + my $minadd = "_min"; + my $maxadd = "_max"; + my $QTable=this->{ui}->initParamTable; +# TODO: Should not go over all rows, only on parameters. + if ($NParam > 0) { +# Set appropriate number of rows + $QTable->setRowCount($NParam); + for (my $i=0;$i<=$NParam;$i++) { + # Make sure the row items exist/defined + if (defined($QTable->verticalHeaderItem($i)) && defined($QTable->item($i,0)) && defined($QTable->item($i,1)) && defined($QTable->item($i,2)) && defined($QTable->item($i,3))) { + # Take label of row, i.e. name of parameter + my $Param=$QTable->verticalHeaderItem($i)->text(); + # Then take the value, error, max and min (as numbers) + $All{"$Param"}=1.0*$QTable->item($i,0)->text(); + $All{"$erradd$Param"}=1.0*$QTable->item($i,1)->text(); + $All{"$Param$minadd"}=1.0*$QTable->item($i,2)->text(); + $All{"$Param$maxadd"}=1.0*$QTable->item($i,3)->text(); + } + } + } +# Return Hash with all important values + return %All; +} + +sub CallMSRCreate() +{ + use MSR; + my %All=CreateAllInput(); + +# Check if the option for checking for existing files is selected + my $FileExistCheck= this->{ui}->fileExistCheck->isChecked(); + my $FILENAME=$All{"FILENAME"}.".msr"; + my $Answer=0; + if ($All{"RunNumbers"} ne "" || $All{"RunFiles"} ne "") { + if ( $FileExistCheck==1 ) { + if (-e $FILENAME) { +# Warning: MSR file exists +# my $Warning = "Warning: MSR file $FILENAME Already exists!\nIf you continue it will overwriten."; + my $Warning = "Warning: MSR file $FILENAME Already exists!\nDo you want to overwrite it?"; +# my $WarningWindow = Qt::MessageBox::information( this, "Warning",$Warning); +# $Answer =1,0 for yes and no + $Answer= Qt::MessageBox::warning( this, "Warning",$Warning, "&No", "&Yes", undef, 1,1); + } + } else { +# Just overwrite file + $Answer=1; + } + + if ($Answer) { + if ( $All{"FitAsyType"} eq "Asymmetry" ) { + if ($All{"RUNSType"}) { + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSR(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + } else { +# my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSRSh(\%All); + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSR(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + +# if it is multiple runs then the produced file is a template + my $FILENAME=$All{"FILENAME"}.".msr"; + my $Extension = "_".$All{"BeamLine"}."_".$All{"YEAR"}; + if ($All{"BeamLine"} eq "LEM (PPC)") { + $Extension = "_LEM_".$All{"YEAR"}; + } + + if (-e $FILENAME) { + my $RUN0 = $FILENAME; + $RUN0 =~ s/$Extension//g; + $RUN0 =~ s/.msr//g; + my $cmd = $All{"RunNumbers"}; + $cmd =~ s/,/ /g; + $cmd = "msr2data \[".$cmd."\] ".$Extension." msr-".$RUN0." global"; + $cmd = $cmd."; mv $RUN0+global$Extension.msr ".$FILENAME; + print $cmd."\n"; + my $pid = open(FTO,"$cmd 2>&1 |"); + while () { + this->{ui}->fitTextOutput->append("$_"); + } + close(FTO); + } + } + } + elsif ( $All{"FitAsyType"} eq "SingleHist" ) { + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSRSingleHist(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + } + UpdateMSRFileInitTable(); + } + } + return $Answer; +} + +sub UpdateMSRFileInitTable() +{ + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}; + my @lines=(); + if (-e "$FILENAME.msr") { + open (MSRF,q{<},"$FILENAME.msr" ); + @lines = ; + close(IFILE); + } + this->{ui}->textMSROutput->setText(""); + foreach my $line (@lines) { + this->{ui}->textMSROutput->insertPlainText("$line"); + } + + (my $TBlock_ref, my $FPBlock_ref)=MSR::ExtractBlks(@lines); + my @FPBloc = @$FPBlock_ref; + + my $PCount=0; + foreach my $line (@FPBloc) { + my @Param=split(/\s+/,$line); + +# Depending on how many elements in @Param determine what they mean +# 0th element is empty (always) +# 1st element is the order (always) +# 2nd element is the name (always) +# 3rd element is the value (always) +# 4th element can be taken as step/error (always) +# 5th element can be +# if it is last element or there are two more = positive error, check $#Param=5/7 +# if there is only one more = minimum, check $#Param=6 + +# To summarize, check the value of $#Param + my $value=1.0*$Param[3]; + my $error = 1.0*$Param[4]; + my $minvalue=0.0; + my $maxvalue=0.0; +# for (my $i=0;$i<=$#Param;$i++) { print "$i - $Param[$i]\n";} + if ($#Param == 4 || $#Param == 5) { + $minvalue=0.0; + $maxvalue=0.0; + } + elsif ($#Param == 6) { + $minvalue=1.0*$Param[5]; + $maxvalue=1.0*$Param[6]; + } + elsif ($#Param == 7) { + $minvalue=1.0*$Param[6]; + $maxvalue=1.0*$Param[7]; + } +# Now update the initialization tabel + my $QTable = this->{ui}->initParamTable; +# print "PCount=$PCount and value=$value\n"; + if (defined($QTable->item($PCount,0)) & defined($QTable->item($PCount,1)) & defined($QTable->item($PCount,2)) & defined($QTable->item($PCount,3))) { + $QTable->setItem($PCount,0,Qt::TableWidgetItem()); + $QTable->setItem($PCount,1,Qt::TableWidgetItem()); + $QTable->setItem($PCount,2,Qt::TableWidgetItem()); + $QTable->setItem($PCount,3,Qt::TableWidgetItem()); + $QTable->item($PCount,0)->setText($value); + $QTable->item($PCount,1)->setText($error); + $QTable->item($PCount,2)->setText($minvalue); + $QTable->item($PCount,3)->setText($maxvalue); + } +# Set bg color to mark different runs + $PCount++; + } + return; +} + +sub ActivateT0Hists() +{ + my %All=CreateAllInput(); + my @Hists = split(/,/, $All{"LRBF"} ); + my $HistBox = ""; + for (my $iHist=1; $iHist<=4; $iHist++) { + $HistBox="groupHist$iHist"; + my $HistBoxHandle = child("Qt::Widget",$HistBox); + if ($iHist<=$#Hists+1) { +# Activate this histogram box + $HistBoxHandle->setHidden(0); + $HistBoxHandle->setEnabled(1); + $HistBoxHandle->setTitle("Hist # $Hists[$iHist-1]"); + } else { +# Deactivate this histogram box + $HistBoxHandle->setHidden(1); + $HistBoxHandle->setEnabled(0); + } + } + +# TODO: Set default values + +} + +sub ActivateShComp() +{ + my %All=CreateAllInput(); + my @RUNS = split( /,/, $All{"RunNumbers"} ); + +# Hide all sharing components + this->{ui}->sharingComp1->setHidden(1); + this->{ui}->sharingComp2->setHidden(1); + this->{ui}->sharingComp3->setHidden(1); + this->{ui}->sharingComp1->setEnabled(0); + this->{ui}->sharingComp2->setEnabled(0); + this->{ui}->sharingComp3->setEnabled(0); + + my @FitTypes =(); + foreach my $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Get number of parameters to determine the size of the table + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); +# For now the line below does not work. Why? +# my $Paramcomp_ref=$All{"Paramcomp_ref"}; + my @Paramcomp = @$Paramcomp_ref; + $Full_T_Block= $All{"Full_T_Block"}; + +# Possible to share only if sharing is enabled altogether + my $EnableSharing = $All{"EnableSharing"}; + if ($EnableSharing) { + my $Component=1; + foreach my $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + + +# Make the component appear first (only if we have multiple runs) + my $ShCompG="sharingComp".$Component; + my $ShCG = child("Qt::Widget",$ShCompG); + if ($#RUNS>0) { + $ShCG->setHidden(0); + $ShCG->setEnabled(1); + } + my $CompShLabel = "comp".$Component."ShLabel"; + my $CompShL = child("Qt::Widget",$CompShLabel); + $CompShL->setText($All{"FitType$Component"}); + +# Change state/label of parameters + for (my $i=1; $i<=9;$i++) { + my $ParamChkBx="shParam_".$Component."_".$i; + my $ChkBx = child("Qt::Widget",$ParamChkBx); + if (defined($Params[$i-1])) { + $ChkBx->setHidden(0); + $ChkBx->setEnabled(1); + $ChkBx ->setText($Params[$i-1]); + } else { + $ChkBx->setHidden(1); + } + } + $Component++; + } + } +} + +sub InitializeTab() +{ + my %All=CreateAllInput(); + my $QTable = this->{ui}->initParamTable; + my $NRows = $QTable->rowCount(); + +# Remove any rows in table + if ($NRows > 0) { + for (my $i=0;$i<$NRows;$i++) { +# TODO: Better remove the row rather than hide it. + $QTable->hideRow($i); +# $QTable->removeRow($i); + } + } + + my %PTable=MSR::PrepParamTable(\%All); + +# Setup the table with the right size +# my $NParam=scalar keys( %PTable ); + my $NParam=keys( %PTable ); + if ($NParam>$NRows) { + $QTable->setNumRows($NParam); + } + +# for (my $i=0;$i<$NParam;$i++) {print "Line=$PTable{$i}\n";} + + +# Fill the table with labels and values of parameter + for (my $PCount=0;$PCount<$NParam;$PCount++) { + my ($Param,$value,$error,$minvalue,$maxvalue,$RUN) = split(/,/,$PTable{$PCount}); +# Now make sure we have no nans + if ($error eq "nan") { $error=0.1;} + # Make sure items exist before addressing them + $QTable->setVerticalHeaderItem($PCount,Qt::TableWidgetItem()); + # Make sure that the row exists + $QTable->showRow($PCount); + $QTable->setItem($PCount,0,Qt::TableWidgetItem()); + $QTable->setItem($PCount,1,Qt::TableWidgetItem()); + $QTable->setItem($PCount,2,Qt::TableWidgetItem()); + $QTable->setItem($PCount,3,Qt::TableWidgetItem()); + # Fill in the values... + $QTable->verticalHeaderItem($PCount)->setText($Param); + $QTable->item($PCount,0)->setText($value); + $QTable->item($PCount,1)->setText($error); + $QTable->item($PCount,2)->setText($minvalue); + $QTable->item($PCount,3)->setText($maxvalue); + } +} + +sub TabChanged() +{ +# TODO: First check if there are some runs given, otherwise disbale + my %All=CreateAllInput(); + +# First make sure we have sharing initialized + ActivateShComp(); +# Here we need to apply sharing if selected... + InitializeTab(); + UpdateMSRFileInitTable(); +# And also setup T0 and Bg bins + ActivateT0Hists(); + +# Initialize FUNCTIONS block only if it has not been initialized yet + if ($All{"Func_T_Block"} eq "" ) { + InitializeFunctions(); + } +} + + +sub GoFit() +{ + my %All=CreateAllInput(); +# Check here is the number of histograms makes sense +# other wise give error. + my @Hists = split( /,/, $All{"LRBF"} ); + if ($All{"FitAsyType"} eq "Asymmetry" && $#Hists != 1) { +# we have a problem here send error message + my $Warning = "Error: The number of histograms should be 2 for an asymmetry fit!"; + my $WarningWindow = Qt::MessageBox::information( this, "Error",$Warning); + } else { + this->{ui}->musrfit_tabs->setCurrentIndex(1); + my $Answer=CallMSRCreate(); + if ($Answer) { + my $FILENAME=$All{"FILENAME"}.".msr"; + if (-e $FILENAME) { + my $cmd="musrfit -t $FILENAME"; + my $pid = open(FTO,"$cmd 2>&1 |"); + while () { + this->{ui}->fitTextOutput->insertPlainText("$_"); + } + close(FTO); + $cmd="musrview $FILENAME &"; + $pid = system($cmd); + } else { + this->{ui}->fitTextOutput->insertPlainText("Cannot find MSR file!"); + } + this->{ui}->fitTextOutput->insertPlainText("-----------------------------------------------------------------------------------------------------------------------------"); +# update MSR File tab and initialization table + UpdateMSRFileInitTable(); + } + } + return; +} + +sub GoPlot() +{ + my %All=CreateAllInput(); +# Check here is the number of histograms makes sense +# other wise give error. + my @Hists = split( /,/, $All{"LRBF"} ); + if ($All{"FitAsyType"} eq "Asymmetry" && $#Hists != 1) { +# we have a problem here send error message + my $Warning = "Error: The number of histograms should be 2 for an asymmetry fit!"; + my $WarningWindow = Qt::MessageBox::information( this, "Error",$Warning); + } else { + my $Answer=CallMSRCreate(); + my $FILENAME=$All{"FILENAME"}.".msr"; + if ($Answer) { + if (-e $FILENAME) { + my $cmd="musrview $FILENAME &"; + my $pid = system($cmd); + } else { + this->{ui}->fitTextOutput->insertPlainText("Cannot find MSR file!"); + this->{ui}->fitTextOutput->insertPlainText("-----------------------------------------------------------------------------------------------------------------------------"); + } + } + } + return; +} + + +sub ShowMuSRT0() +{ +# Open musrt0 to check and adjust t0 , Bg and Data bins + my %All=CreateAllInput(); + this->{ui}->musrfit_tabs->setCurrentIndex(6); +# Create MSR file and then run musrt0 + my $Answer=CallMSRCreate(); + + if ($Answer) { + my $FILENAME=$All{"FILENAME"}.".msr"; + if (-e $FILENAME) { + my $cmd="musrt0 $FILENAME &"; + my $pid = system($cmd); + this->{ui}->t0Update->setEnabled(1) + } else { + print STDERR "Cannot find MSR file!\n"; + } + } + return; +} + + +sub t0Update() +{ + my %All = CreateAllInput(); + my @Hists = split(/,/, $All{"LRBF"} ); + +# Get values of t0 and Bg/Data bins if given + my $NHist = 1; + foreach my $Hist (@Hists) { + foreach ("t0","Bg1","Bg2","Data1","Data2") { + my $Name = "$_$NHist"; + my $tmp=MSR::T0BgData($_,$Hist,$All{"BeamLine"}); + if (defined(child("Qt::Widget",$Name))) { + child("Qt::Widget",$Name)->setText($tmp); + } + } + $NHist++ + } +} + + +sub RunSelectionToggle() +{ + my $ManualFile= this->{ui}->manualFile->isChecked(); + if ($ManualFile) { +# Manual RUN selection + this->{ui}->runsMan->setEnabled(1); + this->{ui}->runsMan->setHidden(0); + this->{ui}->runNumbers->setText(""); + this->{ui}->runsAuto->setEnabled(0); + this->{ui}->runsAuto->setHidden(1); + } else { +# Auto RUN selection + this->{ui}->runsMan->setEnabled(0); + this->{ui}->runsMan->setHidden(1); + this->{ui}->runFiles->setText(""); + this->{ui}->runsAuto->setEnabled(1); + this->{ui}->runsAuto->setHidden(0); + } + +} + +sub fileBrowse() +{ + my $RunFiles=this->{ui}->runFiles->text(); + print "Runs:$RunFiles\n"; + my $files_ref=Qt::FileDialog::getOpenFileNames( + "Data files (*.root *.bin)", + "./", + this, + "open files dialog", + "Select one or more files to fit"); + my @files = @$files_ref; + if ($RunFiles eq "") { +# We started with an empty list + $RunFiles=join(",",@files); + } else { +# Add files to existing list + $RunFiles=join(",",$RunFiles,@files); + } + this->{ui}->runFiles->setText($RunFiles); +} + +sub AppendToFunctions() +{ + my $ParName=this->{ui}->cParamsCombo->currentText(); + my $Full_T_Block=""; + my $Constraint=""; + if (defined(this->{ui}->theoryBlock->toPlainText)) { + $Full_T_Block=this->{ui}->theoryBlock->toPlainText; + } + if (defined(this->{ui}->constraintLine->text)) { + $Constraint=this->{ui}->constraintLine->text; + } +# Then clear the text + this->{ui}->constraintLine->setText(""); + +# Check how many constraints (lines) in FUNCTIONS Block +# my $i=this->{ui}->functionsBlock->blockCount(); + my $fun_lines=this->{ui}->functionsBlock->toPlainText(); + my $i= ($fun_lines =~ tr/\n//)+1; + my $ConstLine="fun$i = $Constraint\n"; + this->{ui}->functionsBlock->insertPlainText($ConstLine); + +# Replace parameter in theory block with fun$i + $Full_T_Block=~ s/$ParName/fun$i/; + this->{ui}->theoryBlock->setText($Full_T_Block); +} + +sub InitializeFunctions() +{ + my %All=CreateAllInput(); + my @RUNS = split( /,/, $All{"RunNumbers"} ); + + my @FitTypes =(); + foreach my $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Get number of parameters to determine the size of the table + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); + my @Paramcomp = @$Paramcomp_ref; + $Full_T_Block= $All{"Full_T_Block"}; + +# Initialize Parameters List in function block (constraints). + my $ParametersList=""; + this->{ui}->parametersList->setText(""); +# Counter for function block (with out Alpha etc.) + my $ParCount=0; + this->{ui}->cParamsCombo->clear(); + +# Possibly use the parameters block to axtract names for the dropdown menu +# this makes sense if we can use fun in map line. Check! + my $Component=1; + foreach my $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + +# Alpha, No and NBg are counted in the parameters + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + +# Add list to the constraints drop down menu + for (my $i=1; $i<=9;$i++) { + if (defined($Params[$i-1])) { + my $CParam = $Params[$i-1]."_".$Component; + if ($Params[$i-1] ne "Alpha" && $Params[$i-1] ne "No" && $Params[$i-1] ne "NBg") { + this->{ui}->cParamsCombo->addItem($CParam); + $Full_T_Block=~ s/\b$Params[$i-1]\b/$CParam/; + } +# also enumerate the parameters as should be used in the FUNCTIONS Block + $ParCount++; + $ParametersList=$ParametersList."$CParam \t is \t par$ParCount\n"; + this->{ui}->parametersList->setText($ParametersList); + } + } + $Component++; + } +# Set theory block in Constraints + this->{ui}->theoryBlock->setText($Full_T_Block); +# Then clear the text + this->{ui}->constraintLine->setText(""); + this->{ui}->functionsBlock->setText(""); +} + + + + +sub t0UpdateClicked() +{ +# Read MSR file and get new values of t0,Bg and Data + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}; + open (MSRF,q{<},"$FILENAME.msr" ); + my @lines = ; + close(IFILE); + + my @T0s = grep {/t0 /} @lines; + my @Bgs = grep {/background /} @lines; + my @Datas = grep {/data /} @lines; + + my @Hists = split(/,/, $All{"LRBF"} ); + my $NHist = $#Hists+1; + print "Histograms: $NHist\n"; + + my $FinHist = 1; +# First T0s + while ($FinHist) { + my $counter=0; + (my $tmp,my @SplitT0) = split( /\s+/, $T0s[$counter]); + ($tmp,my @SplitBg) = split( /\s+/, $Bgs[$counter]); + ($tmp,my @SplitData) = split( /\s+/, $Datas[$counter]); + if ($#SplitBg>0) { + foreach (@SplitBg) { + print $_."\n"; + } + } + $counter++; + if ($counter>=$#Bgs) {$FinHist=0;} + } + +# Finally, disable the update button + this->{ui}->t0Update->setEnabled(0); +# t0Update->setText("musrt0") +} + +# Function: return widget attribute given its type and name +sub child { +# Take type and name from input + my ( $object, $name ) = @_; + + my $Attrib = this->findChildren($object,$name); + if (@$Attrib) { + $Attrib = @$Attrib[0]; + } else { + $Attrib = 0; + } +# print "name = $name and attrib = $Attrib\n"; + +# Return handle on widget + return($Attrib); +} + + +1; diff --git a/src/external/MuSRFitGUI/MuSRFit4.ui b/src/external/MuSRFitGUI/MuSRFit4.ui new file mode 100644 index 00000000..d6b8805e --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.ui @@ -0,0 +1,6096 @@ + + + MuSRFit4 + + + + 0 + 0 + 600 + 505 + + + + + 1 + 1 + + + + + 600 + 505 + + + + MuSRFit GUI + + + + icos/MuSRFit.pngicos/MuSRFit.png + + + MuSRFitGUI + + + + + + + true + + + + 1 + 1 + + + + + 600 + 400 + + + + + 32767 + 32767 + + + + 0 + + + + RUNS + + + + + + QLayout::SetMinimumSize + + + 0 + + + + + + 1 + 1 + + + + + 0 + 80 + + + + + 1 + 1 + + + + RUN Files + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 411 + 21 + + + + + + + + true + + + + 0 + 0 + + + + + 0 + 23 + + + + + 16777215 + 25 + + + + Names of data files to be fit. Multiple data files are comma separated. + + + Names of data files to be fit. Multiple data files are comma separated. + + + + + + + true + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + Browse to select data files for fitting. + + + Browse to select data files for fitting. + + + Browse + + + + + + + + + + + + QLayout::SetMinimumSize + + + + + + 0 + 0 + + + + Fit type + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + Asymmetry + + + + + SingleHist + + + + + + + + + 0 + 0 + + + + Histograms list + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1 5,3 7 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 81 + 21 + + + + + + + + + + + 1 + 1 + + + + + 0 + 80 + + + + RUN Numbers + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + false + + + QComboBox::InsertAtTop + + + true + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + Year + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 30 + + + + On beam line + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + + LEM + + + + + GPS + + + + + Dolly + + + + + LTF + + + + + LEM (PPC) + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 181 + 21 + + + + + + + + + 0 + 0 + + + + + 0 + 23 + + + + + 16777215 + 25 + + + + Numbers of RUNs to fit. Multiple runs are comma separated. + + + Numbers of RUNs to fit. Multiple runs are comma separated. + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 220 + + + + + 0 + 0 + + + + Theory Function + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + First Component + + + false + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Second Component + + + false + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Third Component + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + false + + + false + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 18 + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + None + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 18 + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + None + + + + + + + + + 0 + 0 + + + + Initial Fit Time + + + false + + + + + + + + 0 + 0 + + + + Final Fit Time + + + false + + + + + + + + 0 + 0 + + + + Fit Binning Factor + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 8 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 100 + + + + + + + Min X + + + false + + + + + + + Max X + + + false + + + + + + + View Binning Factor + + + false + + + + + + + + 0 + 25 + + + + + + + + + 0 + 25 + + + + + + + + + 0 + 25 + + + + + + + + Min Y + + + false + + + + + + + Max Y + + + false + + + + + + + + + + false + + + + + + + + + + + + + Life time correction + + + true + + + + + + + + + + + + + Fitting + + + + + + + + + + + 0 + 25 + + + + + 150 + 16777215 + + + + + HESSE + + + + + MINOS + + + + + + + + + 0 + 25 + + + + + 150 + 16777215 + + + + + MINIMIZE + + + + + MIGRAD + + + + + SIMPLEX + + + + + + + + Minimization type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + Error estimation + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + + + + + + Sharing + + + + + + + 0 + 0 + + + + Shared parameters among different runs + + + Qt::AlignLeading + + + true + + + false + + + + + + + + false + + + + 0 + 0 + + + + 1st Component + + + Qt::AlignLeading + + + + + 40 + 60 + 81 + 266 + + + + + 0 + + + 0 + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + false + + + Param5 + + + false + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + 2 + 30 + 141 + 20 + + + + FitType1 + + + false + + + + + + + + false + + + + 0 + 0 + + + + 2nd Component + + + + + 2 + 30 + 141 + 20 + + + + FitType2 + + + false + + + + + + 40 + 60 + 81 + 266 + + + + + 0 + + + 0 + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + Param5 + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + + + false + + + + 0 + 0 + + + + 3rd Component + + + Qt::AlignJustify|Qt::AlignVCenter + + + + + 2 + 30 + 141 + 20 + + + + FitType3 + + + false + + + + + + 41 + 58 + 81 + 266 + + + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + Param5 + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + + + + + + + + + Initialization + + + + + + 1 + + + 4 + + + false + + + false + + + true + + + false + + + + Alpha + + + + + Value + + + + + Error + + + + + Min + + + + + Max + + + + + + + + + MSR File + + + + + + 0 + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + 0 + + + + Enter the label (defaul is run title from the first run) + + + false + + + + + + + + 1 + 1 + + + + Title line for MSR file (optional) + + + Title line for MSR file (optional) + + + + + + + + + + + + Enter [name] for output [name].msr file (optional) + + + false + + + + + + + + 0 + 0 + + + + Name of the produced MSR file (optional) + + + Name of the produced MSR file (optional) + + + + + + + + + + + + + + true + + + + + + + + + + FFT/RRF + + + + + + + 0 + 0 + + + + Fourier transform parameters + + + + + 12 + 19 + 510 + 117 + + + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + MHz + + + + + Gauss + + + + + Mc/s + + + + + + + + + 0 + 0 + + + + + power + + + + + real + + + + + imag + + + + + real_and_imag + + + + + phase + + + + + + + + + + + false + + + + + + + Phase: + + + false + + + + + + + Plot + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + STRONG + + + + + MEDIUM + + + + + WEAK + + + + + NONE + + + + + + + + Apodization + + + false + + + + + + + + + + false + + + + + + + to + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + + + + Range: from + + + false + + + + + + + Units + + + + + + + + + + + + 0 + 0 + + + + Rotatting reference frame (RRF) parameters + + + + + 10 + 18 + 265 + 100 + + + + + 5 + + + 5 + + + + + Phase + + + false + + + + + + + Frequency + + + false + + + + + + + + + + false + + + + + + + + + + + + + + + + + false + + + + + + + + + + Packing + + + false + + + + + + + + MHz + + + + + kHz + + + + + Mc/s + + + + + G + + + + + T + + + + + + + + + + + + + + + + t0/Bg + + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + + + + + + 5 + 18 + 100 + 150 + + + + + + + t0 + + + false + + + + + + + Bg1 + + + false + + + + + + + Bg2 + + + false + + + + + + + Data 1 + + + false + + + + + + + Data 2 + + + false + + + + + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + Hist1 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist2 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist3 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist4 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 461 + 20 + + + + + + + + false + + + + 0 + 0 + + + + Use musrt0 to set values + + + Update + + + + + + + + + + Constraints + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + THEORY Block + + + false + + + + + + + true + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Parameters List + + + false + + + + + + + true + + + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + = + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + 0 + 0 + + + + Add + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + FUNCTIONS Block + + + false + + + + + + + + + + + + + + + false + + + + + + + + 100 + 32767 + + + + Reset + + + + + + + + + + + + + + + + true + + + + 0 + 0 + 600 + 20 + + + + + &File + + + + + + + + + Actions + + + + + + + + Parameters + + + + + + + Options + + + + + + + &Help + + + + + + + + + + + + + File Menu + + + TopToolBarArea + + + false + + + + + + + + + 0 + 0 + + + + Actions Menu + + + TopToolBarArea + + + false + + + + + + + + + + + icos/save.pngicos/save.png + + + &Save MSR... + + + &Save MSR... + + + &Save MSR + + + Ctrl+S + + + + + + icos/exit.pngicos/exit.png + + + E&xit + + + Exit + + + + + + + + &About + + + About + + + + + + + + true + + + false + + + No Overwrite + + + Overwrite MSR File + + + Enable overwriting MSR files + + + Enable/Disable checking for MSR files. + + + + + true + + + Maual file selection + + + Maual file selection + + + + + + icos/chdir.pngicos/chdir.png + + + &Change dir + + + &Change dir + + + Ctrl+C + + + + + new item + + + new item + + + + + + icos/Export.pngicos/Export.png + + + &Export As... + + + Export As... + + + Alt+E + + + + + + icos/Append.pngicos/Append.png + + + &Append To... + + + Append To... + + + Alt+A + + + + + + icos/Fit.pngicos/Fit.png + + + Fit and Plot + + + Ctrl+F + + + + + false + + + + icos/Plot.pngicos/Plot.png + + + Plot + + + Ctrl+P + + + + + + icos/T0.pngicos/T0.png + + + Show t0 and Bg Bins + + + Ctrl+T + + + + + true + + + Fourier + + + Fourier + + + + + true + + + T0 and Bg bins + + + T0 and Bg bins + + + + + + musrfit_tabs + runNumbers + beamLine + year + runFiles + browse + fitType1 + fitType2 + fitType3 + tis + tfs + bins + xi + xf + viewBin + yi + yf + ltc + fitAsyType + histsLRBF + minimization + errorCalc + fitTextOutput + buttonGroupSharing + shParam_1_1 + shParam_1_2 + shParam_1_3 + shParam_1_4 + shParam_1_5 + shParam_1_6 + shParam_1_7 + shParam_1_8 + shParam_1_9 + shParam_2_1 + shParam_2_2 + shParam_2_3 + shParam_2_4 + shParam_2_5 + shParam_2_6 + shParam_2_7 + shParam_2_8 + shParam_2_9 + shParam_3_1 + shParam_3_2 + shParam_3_3 + shParam_3_4 + shParam_3_5 + shParam_3_6 + shParam_3_7 + shParam_3_8 + shParam_3_9 + initParamTable + title + fileName + textMSROutput + funits + fapodization + fplot + frqMin + fphase + frqMax + rrfFrq + rrfUnits + rrfPack + rrfPhase + t01 + bg11 + bg21 + data11 + data21 + t02 + bg12 + bg22 + data12 + data22 + t03 + bg13 + bg23 + data13 + data23 + t04 + bg14 + bg24 + data14 + data24 + t0Update + theoryBlock + parametersList + cParamsCombo + constraintLine + addConstraint + functionsBlock + resetFunc + + + + + fit + activated() + MuSRFit4 + GoFit() + + + -1 + -1 + + + 20 + 20 + + + + + parametersAppend_ToAction + activated() + MuSRFit4 + parametersAppend() + + + -1 + -1 + + + 20 + 20 + + + + + parametersExport_AsAction + activated() + MuSRFit4 + parametersExport() + + + -1 + -1 + + + 20 + 20 + + + + + fileChangeDirAction + activated() + MuSRFit4 + fileChangeDir() + + + -1 + -1 + + + 20 + 20 + + + + + fileSaveAction + activated() + MuSRFit4 + fileSave() + + + -1 + -1 + + + 20 + 20 + + + + + fileExitAction + activated() + MuSRFit4 + fileExit() + + + -1 + -1 + + + 20 + 20 + + + + + helpAboutAction + activated() + MuSRFit4 + helpAbout() + + + -1 + -1 + + + 20 + 20 + + + + + t0 + activated() + MuSRFit4 + ShowMuSRT0() + + + -1 + -1 + + + 20 + 20 + + + + + plot + activated() + MuSRFit4 + GoPlot() + + + -1 + -1 + + + 20 + 20 + + + + + resetFunc + clicked() + MuSRFit4 + InitializeFunctions() + + + 593 + 489 + + + 20 + 20 + + + + + addConstraint + clicked() + MuSRFit4 + AppendToFunctions() + + + 593 + 284 + + + 20 + 20 + + + + + buttonGroupSharing + toggled(bool) + MuSRFit4 + ActivateShComp() + + + 28 + 98 + + + 20 + 20 + + + + + musrfit_tabs + currentChanged(int) + MuSRFit4 + TabChanged() + + + 24 + 74 + + + 20 + 20 + + + + + t0Update + clicked() + MuSRFit4 + t0UpdateClicked() + + + 594 + 490 + + + 20 + 20 + + + + + buttonGroupSharing + toggled(bool) + MuSRFit4 + ActivateShComp() + + + 28 + 98 + + + 20 + 20 + + + + + menuBar + triggered(QAction*) + MuSRFit4 + RunSelectionToggle() + + + 208 + 9 + + + 626 + 246 + + + + + fitType1 + currentIndexChanged(int) + MuSRFit4 + InitializeFunctions() + + + 79 + 304 + + + 601 + 323 + + + + + beamLine + currentIndexChanged(int) + MuSRFit4 + t0Update() + + + 416 + 144 + + + 603 + 191 + + + + + + t0UpdateClicked() + GoFit() + parametersAppend() + parametersExport() + fileChangeDir() + fileOpen() + fileSave() + filePrint() + fileExit() + helpAbout() + ShowMuSRT0() + GoPlot() + RunSelectionToggle() + InitializeFunctions() + AppendToFunctions() + ActivateShComp() + TabChanged() + t0Update() + + diff --git a/src/external/MuSRFitGUI/Ui_MuSRFit4.pm b/src/external/MuSRFitGUI/Ui_MuSRFit4.pm new file mode 100644 index 00000000..8a0fe95f --- /dev/null +++ b/src/external/MuSRFitGUI/Ui_MuSRFit4.pm @@ -0,0 +1,3438 @@ +############################################################################### +# +############################################################################### + +################################################################################# +## Form generated from reading UI file 'MuSRFit4.ui' +## +## Created: Thu Mar 23 16:58:52 2017 +## by: Qt User Interface Compiler version 4.8.6 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +package Ui_MuSRFit4; + +use strict; +use warnings; +use QtCore4; +use QtGui4; + +sub fileSaveAction { + return shift->{fileSaveAction}; +} + +sub fileExitAction { + return shift->{fileExitAction}; +} + +sub helpAboutAction { + return shift->{helpAboutAction}; +} + +sub fileExistCheck { + return shift->{fileExistCheck}; +} + +sub manualFile { + return shift->{manualFile}; +} + +sub fileChangeDirAction { + return shift->{fileChangeDirAction}; +} + +sub optionsnew_itemAction { + return shift->{optionsnew_itemAction}; +} + +sub parametersExport_AsAction { + return shift->{parametersExport_AsAction}; +} + +sub parametersAppend_ToAction { + return shift->{parametersAppend_ToAction}; +} + +sub fit { + return shift->{fit}; +} + +sub plot { + return shift->{plot}; +} + +sub t0 { + return shift->{t0}; +} + +sub optionsFourier { + return shift->{optionsFourier}; +} + +sub optionsT0 { + return shift->{optionsT0}; +} + +sub widget { + return shift->{widget}; +} + +sub gridLayout { + return shift->{gridLayout}; +} + +sub musrfit_tabs { + return shift->{musrfit_tabs}; +} + +sub runsPage { + return shift->{runsPage}; +} + +sub gridLayout_1 { + return shift->{gridLayout_1}; +} + +sub gridLayout_2 { + return shift->{gridLayout_2}; +} + +sub runsMan { + return shift->{runsMan}; +} + +sub gridLayout_4 { + return shift->{gridLayout_4}; +} + +sub runFiles_2 { + return shift->{runFiles_2}; +} + +sub spacer3 { + return shift->{spacer3}; +} + +sub runFiles { + return shift->{runFiles}; +} + +sub browse { + return shift->{browse}; +} + +sub gridLayout_6 { + return shift->{gridLayout_6}; +} + +sub fitAsyTypeLabel { + return shift->{fitAsyTypeLabel}; +} + +sub fitAsyType { + return shift->{fitAsyType}; +} + +sub histsLRBFLabel { + return shift->{histsLRBFLabel}; +} + +sub histsLRBF { + return shift->{histsLRBF}; +} + +sub spacer4 { + return shift->{spacer4}; +} + +sub runsAuto { + return shift->{runsAuto}; +} + +sub gridLayout_3 { + return shift->{gridLayout_3}; +} + +sub runNumbers_2 { + return shift->{runNumbers_2}; +} + +sub year { + return shift->{year}; +} + +sub yearLabel { + return shift->{yearLabel}; +} + +sub beamLineLabel { + return shift->{beamLineLabel}; +} + +sub beamLine { + return shift->{beamLine}; +} + +sub spacer2 { + return shift->{spacer2}; +} + +sub runNumbers { + return shift->{runNumbers}; +} + +sub groupBox { + return shift->{groupBox}; +} + +sub gridLayout_8 { + return shift->{gridLayout_8}; +} + +sub comp1Label { + return shift->{comp1Label}; +} + +sub comp2Label { + return shift->{comp2Label}; +} + +sub comp3Label { + return shift->{comp3Label}; +} + +sub fitType1 { + return shift->{fitType1}; +} + +sub fitType2 { + return shift->{fitType2}; +} + +sub fitType3 { + return shift->{fitType3}; +} + +sub tisLabel { + return shift->{tisLabel}; +} + +sub tfsLabel { + return shift->{tfsLabel}; +} + +sub binsLabel { + return shift->{binsLabel}; +} + +sub tis { + return shift->{tis}; +} + +sub tfs { + return shift->{tfs}; +} + +sub bins { + return shift->{bins}; +} + +sub textLabel1_4 { + return shift->{textLabel1_4}; +} + +sub textLabel1_8 { + return shift->{textLabel1_8}; +} + +sub textLabel1_4_2_2 { + return shift->{textLabel1_4_2_2}; +} + +sub xi { + return shift->{xi}; +} + +sub xf { + return shift->{xf}; +} + +sub viewBin { + return shift->{viewBin}; +} + +sub textLabel1_4_2 { + return shift->{textLabel1_4_2}; +} + +sub textLabel1_4_3 { + return shift->{textLabel1_4_3}; +} + +sub textLabel1_4_4 { + return shift->{textLabel1_4_4}; +} + +sub yi { + return shift->{yi}; +} + +sub yf { + return shift->{yf}; +} + +sub ltc { + return shift->{ltc}; +} + +sub fittingPage { + return shift->{fittingPage}; +} + +sub gridLayout1 { + return shift->{gridLayout1}; +} + +sub fitGrid { + return shift->{fitGrid}; +} + +sub fitLayout { + return shift->{fitLayout}; +} + +sub errorCalc { + return shift->{errorCalc}; +} + +sub minimization { + return shift->{minimization}; +} + +sub textLabel1_5 { + return shift->{textLabel1_5}; +} + +sub textLabel1_5_2 { + return shift->{textLabel1_5_2}; +} + +sub fitTextOutput { + return shift->{fitTextOutput}; +} + +sub sharingPage { + return shift->{sharingPage}; +} + +sub gridLayout2 { + return shift->{gridLayout2}; +} + +sub buttonGroupSharing { + return shift->{buttonGroupSharing}; +} + +sub gridLayout_7 { + return shift->{gridLayout_7}; +} + +sub horizontalLayout { + return shift->{horizontalLayout}; +} + +sub sharingComp1 { + return shift->{sharingComp1}; +} + +sub layout14 { + return shift->{layout14}; +} + +sub _5 { + return shift->{_5}; +} + +sub shParam_1_1 { + return shift->{shParam_1_1}; +} + +sub shParam_1_2 { + return shift->{shParam_1_2}; +} + +sub shParam_1_3 { + return shift->{shParam_1_3}; +} + +sub shParam_1_4 { + return shift->{shParam_1_4}; +} + +sub shParam_1_5 { + return shift->{shParam_1_5}; +} + +sub shParam_1_6 { + return shift->{shParam_1_6}; +} + +sub shParam_1_7 { + return shift->{shParam_1_7}; +} + +sub shParam_1_8 { + return shift->{shParam_1_8}; +} + +sub shParam_1_9 { + return shift->{shParam_1_9}; +} + +sub comp1ShLabel { + return shift->{comp1ShLabel}; +} + +sub sharingComp2 { + return shift->{sharingComp2}; +} + +sub comp2ShLabel { + return shift->{comp2ShLabel}; +} + +sub layout13 { + return shift->{layout13}; +} + +sub _1 { + return shift->{_1}; +} + +sub shParam_2_1 { + return shift->{shParam_2_1}; +} + +sub shParam_2_2 { + return shift->{shParam_2_2}; +} + +sub shParam_2_3 { + return shift->{shParam_2_3}; +} + +sub shParam_2_4 { + return shift->{shParam_2_4}; +} + +sub shParam_2_5 { + return shift->{shParam_2_5}; +} + +sub shParam_2_6 { + return shift->{shParam_2_6}; +} + +sub shParam_2_7 { + return shift->{shParam_2_7}; +} + +sub shParam_2_8 { + return shift->{shParam_2_8}; +} + +sub shParam_2_9 { + return shift->{shParam_2_9}; +} + +sub sharingComp3 { + return shift->{sharingComp3}; +} + +sub comp3ShLabel { + return shift->{comp3ShLabel}; +} + +sub layout15 { + return shift->{layout15}; +} + +sub _3 { + return shift->{_3}; +} + +sub shParam_3_1 { + return shift->{shParam_3_1}; +} + +sub shParam_3_2 { + return shift->{shParam_3_2}; +} + +sub shParam_3_3 { + return shift->{shParam_3_3}; +} + +sub shParam_3_4 { + return shift->{shParam_3_4}; +} + +sub shParam_3_5 { + return shift->{shParam_3_5}; +} + +sub shParam_3_6 { + return shift->{shParam_3_6}; +} + +sub shParam_3_7 { + return shift->{shParam_3_7}; +} + +sub shParam_3_8 { + return shift->{shParam_3_8}; +} + +sub shParam_3_9 { + return shift->{shParam_3_9}; +} + +sub initializationPage { + return shift->{initializationPage}; +} + +sub gridLayout3 { + return shift->{gridLayout3}; +} + +sub initParamTable { + return shift->{initParamTable}; +} + +sub msrPage { + return shift->{msrPage}; +} + +sub gridLayout4 { + return shift->{gridLayout4}; +} + +sub vboxLayout { + return shift->{vboxLayout}; +} + +sub groupTitle { + return shift->{groupTitle}; +} + +sub gridLayout5 { + return shift->{gridLayout5}; +} + +sub vboxLayout1 { + return shift->{vboxLayout1}; +} + +sub titleLabel { + return shift->{titleLabel}; +} + +sub title { + return shift->{title}; +} + +sub hboxLayout { + return shift->{hboxLayout}; +} + +sub fileNameLabel { + return shift->{fileNameLabel}; +} + +sub fileName { + return shift->{fileName}; +} + +sub textMSROutput { + return shift->{textMSROutput}; +} + +sub fourierPage { + return shift->{fourierPage}; +} + +sub gridLayout6 { + return shift->{gridLayout6}; +} + +sub fourierBox { + return shift->{fourierBox}; +} + +sub layout34 { + return shift->{layout34}; +} + +sub gridLayout7 { + return shift->{gridLayout7}; +} + +sub frqMax { + return shift->{frqMax}; +} + +sub funits { + return shift->{funits}; +} + +sub fplot { + return shift->{fplot}; +} + +sub textLabel1_3_8 { + return shift->{textLabel1_3_8}; +} + +sub textLabel1_7 { + return shift->{textLabel1_7}; +} + +sub fplotLabel { + return shift->{fplotLabel}; +} + +sub textLabel1_3_4 { + return shift->{textLabel1_3_4}; +} + +sub fapodization { + return shift->{fapodization}; +} + +sub fapodizationLabel { + return shift->{fapodizationLabel}; +} + +sub textLabel1_3_3 { + return shift->{textLabel1_3_3}; +} + +sub textLabel1_2 { + return shift->{textLabel1_2}; +} + +sub textLabel1_3_6 { + return shift->{textLabel1_3_6}; +} + +sub fphase { + return shift->{fphase}; +} + +sub textLabel1_3_5 { + return shift->{textLabel1_3_5}; +} + +sub textLabel1_3_7 { + return shift->{textLabel1_3_7}; +} + +sub frqMin { + return shift->{frqMin}; +} + +sub textLabel1 { + return shift->{textLabel1}; +} + +sub label { + return shift->{label}; +} + +sub rrfBox { + return shift->{rrfBox}; +} + +sub layout35 { + return shift->{layout35}; +} + +sub gridLayout8 { + return shift->{gridLayout8}; +} + +sub textLabel1_6_2_2 { + return shift->{textLabel1_6_2_2}; +} + +sub textLabel1_6 { + return shift->{textLabel1_6}; +} + +sub textLabel1_6_2_4 { + return shift->{textLabel1_6_2_4}; +} + +sub rrfFrq { + return shift->{rrfFrq}; +} + +sub textLabel1_6_2_3 { + return shift->{textLabel1_6_2_3}; +} + +sub rrfPack { + return shift->{rrfPack}; +} + +sub textLabel1_6_2 { + return shift->{textLabel1_6_2}; +} + +sub rrfUnits { + return shift->{rrfUnits}; +} + +sub rrfPhase { + return shift->{rrfPhase}; +} + +sub t0Page { + return shift->{t0Page}; +} + +sub gridLayout9 { + return shift->{gridLayout9}; +} + +sub hboxLayout1 { + return shift->{hboxLayout1}; +} + +sub groupHist0 { + return shift->{groupHist0}; +} + +sub layout16_2 { + return shift->{layout16_2}; +} + +sub vboxLayout2 { + return shift->{vboxLayout2}; +} + +sub textLabel2 { + return shift->{textLabel2}; +} + +sub textLabel2_2_2_3 { + return shift->{textLabel2_2_2_3}; +} + +sub textLabel2_2_2 { + return shift->{textLabel2_2_2}; +} + +sub textLabel2_2_2_2 { + return shift->{textLabel2_2_2_2}; +} + +sub textLabel2_2_2_2_2 { + return shift->{textLabel2_2_2_2_2}; +} + +sub groupHist1 { + return shift->{groupHist1}; +} + +sub layout18 { + return shift->{layout18}; +} + +sub vboxLayout3 { + return shift->{vboxLayout3}; +} + +sub t01 { + return shift->{t01}; +} + +sub bg11 { + return shift->{bg11}; +} + +sub bg21 { + return shift->{bg21}; +} + +sub data11 { + return shift->{data11}; +} + +sub data21 { + return shift->{data21}; +} + +sub groupHist2 { + return shift->{groupHist2}; +} + +sub layout18_2 { + return shift->{layout18_2}; +} + +sub vboxLayout4 { + return shift->{vboxLayout4}; +} + +sub t02 { + return shift->{t02}; +} + +sub bg12 { + return shift->{bg12}; +} + +sub bg22 { + return shift->{bg22}; +} + +sub data12 { + return shift->{data12}; +} + +sub data22 { + return shift->{data22}; +} + +sub groupHist3 { + return shift->{groupHist3}; +} + +sub layout18_3 { + return shift->{layout18_3}; +} + +sub vboxLayout5 { + return shift->{vboxLayout5}; +} + +sub t03 { + return shift->{t03}; +} + +sub bg13 { + return shift->{bg13}; +} + +sub bg23 { + return shift->{bg23}; +} + +sub data13 { + return shift->{data13}; +} + +sub data23 { + return shift->{data23}; +} + +sub groupHist4 { + return shift->{groupHist4}; +} + +sub layout18_4 { + return shift->{layout18_4}; +} + +sub vboxLayout6 { + return shift->{vboxLayout6}; +} + +sub t04 { + return shift->{t04}; +} + +sub bg14 { + return shift->{bg14}; +} + +sub bg24 { + return shift->{bg24}; +} + +sub data14 { + return shift->{data14}; +} + +sub data24 { + return shift->{data24}; +} + +sub hboxLayout2 { + return shift->{hboxLayout2}; +} + +sub spacer1 { + return shift->{spacer1}; +} + +sub t0Update { + return shift->{t0Update}; +} + +sub tabPage { + return shift->{tabPage}; +} + +sub gridLayout10 { + return shift->{gridLayout10}; +} + +sub vboxLayout7 { + return shift->{vboxLayout7}; +} + +sub gridLayout11 { + return shift->{gridLayout11}; +} + +sub theoryBlock_Label { + return shift->{theoryBlock_Label}; +} + +sub theoryBlock { + return shift->{theoryBlock}; +} + +sub parametersList_Label { + return shift->{parametersList_Label}; +} + +sub parametersList { + return shift->{parametersList}; +} + +sub hboxLayout3 { + return shift->{hboxLayout3}; +} + +sub cParamsCombo { + return shift->{cParamsCombo}; +} + +sub textLabel1_4_6 { + return shift->{textLabel1_4_6}; +} + +sub constraintLine { + return shift->{constraintLine}; +} + +sub addConstraint { + return shift->{addConstraint}; +} + +sub textLabel2_2_3_4 { + return shift->{textLabel2_2_3_4}; +} + +sub functionsBlock { + return shift->{functionsBlock}; +} + +sub hboxLayout4 { + return shift->{hboxLayout4}; +} + +sub textLabel1_6_3 { + return shift->{textLabel1_6_3}; +} + +sub resetFunc { + return shift->{resetFunc}; +} + +sub menuBar { + return shift->{menuBar}; +} + +sub fileMenu { + return shift->{fileMenu}; +} + +sub actions { + return shift->{actions}; +} + +sub parameters { + return shift->{parameters}; +} + +sub options { + return shift->{options}; +} + +sub helpMenu { + return shift->{helpMenu}; +} + +sub fileToolBar { + return shift->{fileToolBar}; +} + +sub actionsToolBar { + return shift->{actionsToolBar}; +} + + +sub setupUi { + my ( $class, $muSRFit4 ) = @_; + my $self = bless {}, $class; + if ( !defined $muSRFit4->objectName() ) { + $muSRFit4->setObjectName( "muSRFit4" ); + } + $muSRFit4->resize( 600, 505 ); + my $sizePolicy = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding() ); + $self->{$sizePolicy} = $sizePolicy; + $sizePolicy->setHorizontalStretch( 1 ); + $sizePolicy->setVerticalStretch( 1 ); + $sizePolicy->setHeightForWidth( $muSRFit4->sizePolicy()->hasHeightForWidth() ); + $muSRFit4->setSizePolicy( $sizePolicy ); + $muSRFit4->setMinimumSize( Qt::Size(600, 505) ); + my $icon = Qt::Icon(); + $icon->addPixmap(Qt::Pixmap("icos/MuSRFit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $muSRFit4->setWindowIcon( $icon ); + my $fileSaveAction = Qt::Action($muSRFit4); + $self->{fileSaveAction} = $fileSaveAction; + $fileSaveAction->setObjectName( "fileSaveAction" ); + my $icon1 = Qt::Icon(); + $icon1->addPixmap(Qt::Pixmap("icos/save.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileSaveAction->setIcon( $icon1 ); + my $fileExitAction = Qt::Action($muSRFit4); + $self->{fileExitAction} = $fileExitAction; + $fileExitAction->setObjectName( "fileExitAction" ); + my $icon2 = Qt::Icon(); + $icon2->addPixmap(Qt::Pixmap("icos/exit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileExitAction->setIcon( $icon2 ); + my $helpAboutAction = Qt::Action($muSRFit4); + $self->{helpAboutAction} = $helpAboutAction; + $helpAboutAction->setObjectName( "helpAboutAction" ); + my $fileExistCheck = Qt::Action($muSRFit4); + $self->{fileExistCheck} = $fileExistCheck; + $fileExistCheck->setObjectName( "fileExistCheck" ); + $fileExistCheck->setCheckable( 1 ); + $fileExistCheck->setChecked( 0 ); + my $manualFile = Qt::Action($muSRFit4); + $self->{manualFile} = $manualFile; + $manualFile->setObjectName( "manualFile" ); + $manualFile->setCheckable( 1 ); + my $fileChangeDirAction = Qt::Action($muSRFit4); + $self->{fileChangeDirAction} = $fileChangeDirAction; + $fileChangeDirAction->setObjectName( "fileChangeDirAction" ); + my $icon3 = Qt::Icon(); + $icon3->addPixmap(Qt::Pixmap("icos/chdir.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileChangeDirAction->setIcon( $icon3 ); + my $optionsnew_itemAction = Qt::Action($muSRFit4); + $self->{optionsnew_itemAction} = $optionsnew_itemAction; + $optionsnew_itemAction->setObjectName( "optionsnew_itemAction" ); + my $parametersExport_AsAction = Qt::Action($muSRFit4); + $self->{parametersExport_AsAction} = $parametersExport_AsAction; + $parametersExport_AsAction->setObjectName( "parametersExport_AsAction" ); + my $icon4 = Qt::Icon(); + $icon4->addPixmap(Qt::Pixmap("icos/Export.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $parametersExport_AsAction->setIcon( $icon4 ); + my $parametersAppend_ToAction = Qt::Action($muSRFit4); + $self->{parametersAppend_ToAction} = $parametersAppend_ToAction; + $parametersAppend_ToAction->setObjectName( "parametersAppend_ToAction" ); + my $icon5 = Qt::Icon(); + $icon5->addPixmap(Qt::Pixmap("icos/Append.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $parametersAppend_ToAction->setIcon( $icon5 ); + my $fit = Qt::Action($muSRFit4); + $self->{fit} = $fit; + $fit->setObjectName( "fit" ); + my $icon6 = Qt::Icon(); + $icon6->addPixmap(Qt::Pixmap("icos/Fit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fit->setIcon( $icon6 ); + my $plot = Qt::Action($muSRFit4); + $self->{plot} = $plot; + $plot->setObjectName( "plot" ); + $plot->setCheckable( 0 ); + my $icon7 = Qt::Icon(); + $icon7->addPixmap(Qt::Pixmap("icos/Plot.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $plot->setIcon( $icon7 ); + my $t0 = Qt::Action($muSRFit4); + $self->{t0} = $t0; + $t0->setObjectName( "t0" ); + my $icon8 = Qt::Icon(); + $icon8->addPixmap(Qt::Pixmap("icos/T0.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $t0->setIcon( $icon8 ); + my $optionsFourier = Qt::Action($muSRFit4); + $self->{optionsFourier} = $optionsFourier; + $optionsFourier->setObjectName( "optionsFourier" ); + $optionsFourier->setCheckable( 1 ); + my $optionsT0 = Qt::Action($muSRFit4); + $self->{optionsT0} = $optionsT0; + $optionsT0->setObjectName( "optionsT0" ); + $optionsT0->setCheckable( 1 ); + my $widget = Qt::Widget( $muSRFit4 ); + $self->{widget} = $widget; + $widget->setObjectName( "widget" ); + my $gridLayout = Qt::GridLayout( $widget ); + $self->{gridLayout} = $gridLayout; + $gridLayout->setSpacing( 6 ); + $gridLayout->setMargin( 11 ); + $gridLayout->setObjectName( "gridLayout" ); + my $musrfit_tabs = Qt::TabWidget( $widget ); + $self->{musrfit_tabs} = $musrfit_tabs; + $musrfit_tabs->setObjectName( "musrfit_tabs" ); + $musrfit_tabs->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $musrfit_tabs->sizePolicy()->hasHeightForWidth() ); + $musrfit_tabs->setSizePolicy( $sizePolicy ); + $musrfit_tabs->setMinimumSize( Qt::Size(600, 400) ); + $musrfit_tabs->setMaximumSize( Qt::Size(32767, 32767) ); + my $runsPage = Qt::Widget( ); + $self->{runsPage} = $runsPage; + $runsPage->setObjectName( "runsPage" ); + my $gridLayout_1 = Qt::GridLayout( $runsPage ); + $self->{gridLayout_1} = $gridLayout_1; + $gridLayout_1->setSpacing( 6 ); + $gridLayout_1->setMargin( 11 ); + $gridLayout_1->setObjectName( "gridLayout_1" ); + my $gridLayout_2 = Qt::GridLayout( ); + $self->{gridLayout_2} = $gridLayout_2; + $gridLayout_2->setSpacing( 0 ); + $gridLayout_2->setObjectName( "gridLayout_2" ); + $gridLayout_2->setSizeConstraint( Qt::Layout::SetMinimumSize() ); + my $runsMan = Qt::GroupBox( $runsPage ); + $self->{runsMan} = $runsMan; + $runsMan->setObjectName( "runsMan" ); + $sizePolicy->setHeightForWidth( $runsMan->sizePolicy()->hasHeightForWidth() ); + $runsMan->setSizePolicy( $sizePolicy ); + $runsMan->setMinimumSize( Qt::Size(0, 80) ); + $runsMan->setBaseSize( Qt::Size(1, 1) ); + $runsMan->setAlignment( Qt::AlignHCenter()|Qt::AlignTop() ); + my $gridLayout_4 = Qt::GridLayout( $runsMan ); + $self->{gridLayout_4} = $gridLayout_4; + $gridLayout_4->setSpacing( 6 ); + $gridLayout_4->setMargin( 11 ); + $gridLayout_4->setObjectName( "gridLayout_4" ); + my $runFiles_2 = Qt::GridLayout( ); + $self->{runFiles_2} = $runFiles_2; + $runFiles_2->setSpacing( 6 ); + $runFiles_2->setObjectName( "runFiles_2" ); + my $spacer3 = Qt::SpacerItem( 411, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $runFiles_2->addItem( $spacer3, 1, 0, 1, 1 ); + + my $runFiles = Qt::LineEdit( $runsMan ); + $self->{runFiles} = $runFiles; + $runFiles->setObjectName( "runFiles" ); + $runFiles->setEnabled( 1 ); + my $sizePolicy1 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy1} = $sizePolicy1; + $sizePolicy1->setHorizontalStretch( 0 ); + $sizePolicy1->setVerticalStretch( 0 ); + $sizePolicy1->setHeightForWidth( $runFiles->sizePolicy()->hasHeightForWidth() ); + $runFiles->setSizePolicy( $sizePolicy1 ); + $runFiles->setMinimumSize( Qt::Size(0, 23) ); + $runFiles->setMaximumSize( Qt::Size(16777215, 25) ); + + $runFiles_2->addWidget( $runFiles, 0, 0, 1, 2 ); + + my $browse = Qt::PushButton( $runsMan ); + $self->{browse} = $browse; + $browse->setObjectName( "browse" ); + $browse->setEnabled( 1 ); + my $sizePolicy2 = Qt::SizePolicy( Qt::SizePolicy::Fixed(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy2} = $sizePolicy2; + $sizePolicy2->setHorizontalStretch( 0 ); + $sizePolicy2->setVerticalStretch( 0 ); + $sizePolicy2->setHeightForWidth( $browse->sizePolicy()->hasHeightForWidth() ); + $browse->setSizePolicy( $sizePolicy2 ); + $browse->setMinimumSize( Qt::Size(0, 20) ); + $browse->setMaximumSize( Qt::Size(16777215, 25) ); + + $runFiles_2->addWidget( $browse, 1, 1, 1, 1 ); + + + $gridLayout_4->addLayout( $runFiles_2, 0, 0, 1, 1 ); + + + $gridLayout_2->addWidget( $runsMan, 1, 0, 1, 1 ); + + my $gridLayout_6 = Qt::GridLayout( ); + $self->{gridLayout_6} = $gridLayout_6; + $gridLayout_6->setSpacing( 6 ); + $gridLayout_6->setObjectName( "gridLayout_6" ); + $gridLayout_6->setSizeConstraint( Qt::Layout::SetMinimumSize() ); + my $fitAsyTypeLabel = Qt::Label( $runsPage ); + $self->{fitAsyTypeLabel} = $fitAsyTypeLabel; + $fitAsyTypeLabel->setObjectName( "fitAsyTypeLabel" ); + my $sizePolicy3 = Qt::SizePolicy( Qt::SizePolicy::Preferred(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy3} = $sizePolicy3; + $sizePolicy3->setHorizontalStretch( 0 ); + $sizePolicy3->setVerticalStretch( 0 ); + $sizePolicy3->setHeightForWidth( $fitAsyTypeLabel->sizePolicy()->hasHeightForWidth() ); + $fitAsyTypeLabel->setSizePolicy( $sizePolicy3 ); + $fitAsyTypeLabel->setWordWrap( 0 ); + + $gridLayout_6->addWidget( $fitAsyTypeLabel, 0, 0, 1, 1 ); + + my $fitAsyType = Qt::ComboBox( $runsPage ); + $self->{fitAsyType} = $fitAsyType; + $fitAsyType->setObjectName( "fitAsyType" ); + $sizePolicy3->setHeightForWidth( $fitAsyType->sizePolicy()->hasHeightForWidth() ); + $fitAsyType->setSizePolicy( $sizePolicy3 ); + $fitAsyType->setMinimumSize( Qt::Size(0, 25) ); + $fitAsyType->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_6->addWidget( $fitAsyType, 0, 1, 1, 1 ); + + my $histsLRBFLabel = Qt::Label( $runsPage ); + $self->{histsLRBFLabel} = $histsLRBFLabel; + $histsLRBFLabel->setObjectName( "histsLRBFLabel" ); + $sizePolicy3->setHeightForWidth( $histsLRBFLabel->sizePolicy()->hasHeightForWidth() ); + $histsLRBFLabel->setSizePolicy( $sizePolicy3 ); + $histsLRBFLabel->setWordWrap( 0 ); + + $gridLayout_6->addWidget( $histsLRBFLabel, 0, 2, 1, 1 ); + + my $histsLRBF = Qt::LineEdit( $runsPage ); + $self->{histsLRBF} = $histsLRBF; + $histsLRBF->setObjectName( "histsLRBF" ); + $sizePolicy3->setHeightForWidth( $histsLRBF->sizePolicy()->hasHeightForWidth() ); + $histsLRBF->setSizePolicy( $sizePolicy3 ); + $histsLRBF->setMinimumSize( Qt::Size(0, 25) ); + $histsLRBF->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_6->addWidget( $histsLRBF, 0, 3, 1, 1 ); + + my $spacer4 = Qt::SpacerItem( 81, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $gridLayout_6->addItem( $spacer4, 0, 4, 1, 1 ); + + + $gridLayout_2->addLayout( $gridLayout_6, 3, 0, 1, 1 ); + + my $runsAuto = Qt::GroupBox( $runsPage ); + $self->{runsAuto} = $runsAuto; + $runsAuto->setObjectName( "runsAuto" ); + $sizePolicy->setHeightForWidth( $runsAuto->sizePolicy()->hasHeightForWidth() ); + $runsAuto->setSizePolicy( $sizePolicy ); + $runsAuto->setMinimumSize( Qt::Size(0, 80) ); + $runsAuto->setAlignment( Qt::AlignHCenter()|Qt::AlignTop() ); + my $gridLayout_3 = Qt::GridLayout( $runsAuto ); + $self->{gridLayout_3} = $gridLayout_3; + $gridLayout_3->setSpacing( 6 ); + $gridLayout_3->setMargin( 11 ); + $gridLayout_3->setObjectName( "gridLayout_3" ); + my $runNumbers_2 = Qt::GridLayout( ); + $self->{runNumbers_2} = $runNumbers_2; + $runNumbers_2->setSpacing( 0 ); + $runNumbers_2->setObjectName( "runNumbers_2" ); + my $year = Qt::ComboBox( $runsAuto ); + $self->{year} = $year; + $year->setObjectName( "year" ); + $sizePolicy2->setHeightForWidth( $year->sizePolicy()->hasHeightForWidth() ); + $year->setSizePolicy( $sizePolicy2 ); + $year->setMinimumSize( Qt::Size(0, 20) ); + $year->setMaximumSize( Qt::Size(16777215, 25) ); + $year->setEditable( 0 ); + $year->setInsertPolicy( Qt::ComboBox::InsertAtTop() ); + $year->setAutoCompletion( 1 ); + $year->setDuplicatesEnabled( 0 ); + + $runNumbers_2->addWidget( $year, 1, 4, 1, 1 ); + + my $yearLabel = Qt::Label( $runsAuto ); + $self->{yearLabel} = $yearLabel; + $yearLabel->setObjectName( "yearLabel" ); + my $sizePolicy4 = Qt::SizePolicy( Qt::SizePolicy::Preferred(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy4} = $sizePolicy4; + $sizePolicy4->setHorizontalStretch( 0 ); + $sizePolicy4->setVerticalStretch( 0 ); + $sizePolicy4->setHeightForWidth( $yearLabel->sizePolicy()->hasHeightForWidth() ); + $yearLabel->setSizePolicy( $sizePolicy4 ); + $yearLabel->setMinimumSize( Qt::Size(0, 20) ); + $yearLabel->setWordWrap( 0 ); + + $runNumbers_2->addWidget( $yearLabel, 1, 3, 1, 1 ); + + my $beamLineLabel = Qt::Label( $runsAuto ); + $self->{beamLineLabel} = $beamLineLabel; + $beamLineLabel->setObjectName( "beamLineLabel" ); + $sizePolicy4->setHeightForWidth( $beamLineLabel->sizePolicy()->hasHeightForWidth() ); + $beamLineLabel->setSizePolicy( $sizePolicy4 ); + $beamLineLabel->setMinimumSize( Qt::Size(0, 20) ); + $beamLineLabel->setMaximumSize( Qt::Size(16777215, 30) ); + $beamLineLabel->setWordWrap( 0 ); + + $runNumbers_2->addWidget( $beamLineLabel, 1, 1, 1, 1 ); + + my $beamLine = Qt::ComboBox( $runsAuto ); + $self->{beamLine} = $beamLine; + $beamLine->setObjectName( "beamLine" ); + $sizePolicy2->setHeightForWidth( $beamLine->sizePolicy()->hasHeightForWidth() ); + $beamLine->setSizePolicy( $sizePolicy2 ); + $beamLine->setMinimumSize( Qt::Size(0, 20) ); + $beamLine->setMaximumSize( Qt::Size(16777215, 25) ); + + $runNumbers_2->addWidget( $beamLine, 1, 2, 1, 1 ); + + my $spacer2 = Qt::SpacerItem( 181, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $runNumbers_2->addItem( $spacer2, 1, 0, 1, 1 ); + + my $runNumbers = Qt::LineEdit( $runsAuto ); + $self->{runNumbers} = $runNumbers; + $runNumbers->setObjectName( "runNumbers" ); + $sizePolicy1->setHeightForWidth( $runNumbers->sizePolicy()->hasHeightForWidth() ); + $runNumbers->setSizePolicy( $sizePolicy1 ); + $runNumbers->setMinimumSize( Qt::Size(0, 23) ); + $runNumbers->setMaximumSize( Qt::Size(16777215, 25) ); + $runNumbers->setAlignment( Qt::AlignLeading()|Qt::AlignLeft()|Qt::AlignTop() ); + + $runNumbers_2->addWidget( $runNumbers, 0, 0, 1, 5 ); + + + $gridLayout_3->addLayout( $runNumbers_2, 0, 0, 1, 1 ); + + + $gridLayout_2->addWidget( $runsAuto, 0, 0, 1, 1 ); + + my $groupBox = Qt::GroupBox( $runsPage ); + $self->{groupBox} = $groupBox; + $groupBox->setObjectName( "groupBox" ); + my $sizePolicy5 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding() ); + $self->{$sizePolicy5} = $sizePolicy5; + $sizePolicy5->setHorizontalStretch( 0 ); + $sizePolicy5->setVerticalStretch( 0 ); + $sizePolicy5->setHeightForWidth( $groupBox->sizePolicy()->hasHeightForWidth() ); + $groupBox->setSizePolicy( $sizePolicy5 ); + $groupBox->setMinimumSize( Qt::Size(0, 220) ); + $groupBox->setBaseSize( Qt::Size(0, 0) ); + my $gridLayout_8 = Qt::GridLayout( $groupBox ); + $self->{gridLayout_8} = $gridLayout_8; + $gridLayout_8->setSpacing( 6 ); + $gridLayout_8->setMargin( 11 ); + $gridLayout_8->setObjectName( "gridLayout_8" ); + my $comp1Label = Qt::Label( $groupBox ); + $self->{comp1Label} = $comp1Label; + $comp1Label->setObjectName( "comp1Label" ); + my $palette = Qt::Palette(); + my $brush = Qt::Brush(Qt::Color(0, 0, 0, 255)); + $brush->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + my $brush1 = Qt::Brush(Qt::Color(230, 240, 249, 255)); + $brush1->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + my $brush2 = Qt::Brush(Qt::Color(255, 255, 255, 255)); + $brush2->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + my $brush3 = Qt::Brush(Qt::Color(242, 247, 252, 255)); + $brush3->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + my $brush4 = Qt::Brush(Qt::Color(115, 120, 124, 255)); + $brush4->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + my $brush5 = Qt::Brush(Qt::Color(154, 160, 166, 255)); + $brush5->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + my $brush6 = Qt::Brush(Qt::Color(255, 255, 127, 255)); + $brush6->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + my $brush7 = Qt::Brush(Qt::Color(0, 0, 128, 255)); + $brush7->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + my $brush8 = Qt::Brush(Qt::Color(0, 0, 238, 255)); + $brush8->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + my $brush9 = Qt::Brush(Qt::Color(82, 24, 139, 255)); + $brush9->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + my $brush10 = Qt::Brush(Qt::Color(128, 128, 128, 255)); + $brush10->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp1Label->setPalette( $palette ); + $comp1Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp1Label, 0, 0, 1, 1 ); + + my $comp2Label = Qt::Label( $groupBox ); + $self->{comp2Label} = $comp2Label; + $comp2Label->setObjectName( "comp2Label" ); + my $palette1 = Qt::Palette(); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp2Label->setPalette( $palette1 ); + $comp2Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp2Label, 0, 2, 1, 1 ); + + my $comp3Label = Qt::Label( $groupBox ); + $self->{comp3Label} = $comp3Label; + $comp3Label->setObjectName( "comp3Label" ); + my $palette2 = Qt::Palette(); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp3Label->setPalette( $palette2 ); + $comp3Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp3Label, 0, 4, 1, 1 ); + + my $fitType1 = Qt::ComboBox( $groupBox ); + $self->{fitType1} = $fitType1; + $fitType1->setObjectName( "fitType1" ); + $sizePolicy3->setHeightForWidth( $fitType1->sizePolicy()->hasHeightForWidth() ); + $fitType1->setSizePolicy( $sizePolicy3 ); + $fitType1->setMinimumSize( Qt::Size(0, 25) ); + $fitType1->setMaximumSize( Qt::Size(16777215, 25) ); + $fitType1->setAutoCompletion( 0 ); + $fitType1->setDuplicatesEnabled( 0 ); + + $gridLayout_8->addWidget( $fitType1, 1, 0, 1, 2 ); + + my $fitType2 = Qt::ComboBox( $groupBox ); + $self->{fitType2} = $fitType2; + $fitType2->setObjectName( "fitType2" ); + $sizePolicy3->setHeightForWidth( $fitType2->sizePolicy()->hasHeightForWidth() ); + $fitType2->setSizePolicy( $sizePolicy3 ); + $fitType2->setMinimumSize( Qt::Size(0, 25) ); + $fitType2->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $fitType2, 1, 2, 1, 2 ); + + my $fitType3 = Qt::ComboBox( $groupBox ); + $self->{fitType3} = $fitType3; + $fitType3->setObjectName( "fitType3" ); + $sizePolicy3->setHeightForWidth( $fitType3->sizePolicy()->hasHeightForWidth() ); + $fitType3->setSizePolicy( $sizePolicy3 ); + $fitType3->setMinimumSize( Qt::Size(0, 25) ); + $fitType3->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $fitType3, 1, 4, 1, 1 ); + + my $tisLabel = Qt::Label( $groupBox ); + $self->{tisLabel} = $tisLabel; + $tisLabel->setObjectName( "tisLabel" ); + $sizePolicy3->setHeightForWidth( $tisLabel->sizePolicy()->hasHeightForWidth() ); + $tisLabel->setSizePolicy( $sizePolicy3 ); + $tisLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $tisLabel, 2, 0, 1, 1 ); + + my $tfsLabel = Qt::Label( $groupBox ); + $self->{tfsLabel} = $tfsLabel; + $tfsLabel->setObjectName( "tfsLabel" ); + $sizePolicy3->setHeightForWidth( $tfsLabel->sizePolicy()->hasHeightForWidth() ); + $tfsLabel->setSizePolicy( $sizePolicy3 ); + $tfsLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $tfsLabel, 2, 2, 1, 1 ); + + my $binsLabel = Qt::Label( $groupBox ); + $self->{binsLabel} = $binsLabel; + $binsLabel->setObjectName( "binsLabel" ); + $sizePolicy3->setHeightForWidth( $binsLabel->sizePolicy()->hasHeightForWidth() ); + $binsLabel->setSizePolicy( $sizePolicy3 ); + $binsLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $binsLabel, 2, 4, 1, 1 ); + + my $tis = Qt::LineEdit( $groupBox ); + $self->{tis} = $tis; + $tis->setObjectName( "tis" ); + $sizePolicy3->setHeightForWidth( $tis->sizePolicy()->hasHeightForWidth() ); + $tis->setSizePolicy( $sizePolicy3 ); + $tis->setMinimumSize( Qt::Size(0, 25) ); + $tis->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $tis, 3, 0, 1, 1 ); + + my $tfs = Qt::LineEdit( $groupBox ); + $self->{tfs} = $tfs; + $tfs->setObjectName( "tfs" ); + $sizePolicy3->setHeightForWidth( $tfs->sizePolicy()->hasHeightForWidth() ); + $tfs->setSizePolicy( $sizePolicy3 ); + $tfs->setMinimumSize( Qt::Size(0, 25) ); + $tfs->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $tfs, 3, 2, 1, 1 ); + + my $bins = Qt::LineEdit( $groupBox ); + $self->{bins} = $bins; + $bins->setObjectName( "bins" ); + $sizePolicy3->setHeightForWidth( $bins->sizePolicy()->hasHeightForWidth() ); + $bins->setSizePolicy( $sizePolicy3 ); + $bins->setMinimumSize( Qt::Size(0, 25) ); + $bins->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $bins, 3, 4, 1, 1 ); + + my $textLabel1_4 = Qt::Label( $groupBox ); + $self->{textLabel1_4} = $textLabel1_4; + $textLabel1_4->setObjectName( "textLabel1_4" ); + $textLabel1_4->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4, 4, 0, 1, 1 ); + + my $textLabel1_8 = Qt::Label( $groupBox ); + $self->{textLabel1_8} = $textLabel1_8; + $textLabel1_8->setObjectName( "textLabel1_8" ); + $textLabel1_8->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_8, 4, 2, 1, 1 ); + + my $textLabel1_4_2_2 = Qt::Label( $groupBox ); + $self->{textLabel1_4_2_2} = $textLabel1_4_2_2; + $textLabel1_4_2_2->setObjectName( "textLabel1_4_2_2" ); + $textLabel1_4_2_2->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_2_2, 4, 4, 1, 1 ); + + my $xi = Qt::LineEdit( $groupBox ); + $self->{xi} = $xi; + $xi->setObjectName( "xi" ); + $xi->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $xi, 5, 0, 1, 1 ); + + my $xf = Qt::LineEdit( $groupBox ); + $self->{xf} = $xf; + $xf->setObjectName( "xf" ); + $xf->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $xf, 5, 2, 1, 1 ); + + my $viewBin = Qt::LineEdit( $groupBox ); + $self->{viewBin} = $viewBin; + $viewBin->setObjectName( "viewBin" ); + $viewBin->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $viewBin, 5, 3, 1, 2 ); + + my $textLabel1_4_2 = Qt::Label( $groupBox ); + $self->{textLabel1_4_2} = $textLabel1_4_2; + $textLabel1_4_2->setObjectName( "textLabel1_4_2" ); + $textLabel1_4_2->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_2, 6, 0, 1, 1 ); + + my $textLabel1_4_3 = Qt::Label( $groupBox ); + $self->{textLabel1_4_3} = $textLabel1_4_3; + $textLabel1_4_3->setObjectName( "textLabel1_4_3" ); + $textLabel1_4_3->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_3, 6, 2, 1, 1 ); + + my $textLabel1_4_4 = Qt::Label( $groupBox ); + $self->{textLabel1_4_4} = $textLabel1_4_4; + $textLabel1_4_4->setObjectName( "textLabel1_4_4" ); + $textLabel1_4_4->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_4, 6, 4, 1, 1 ); + + my $yi = Qt::LineEdit( $groupBox ); + $self->{yi} = $yi; + $yi->setObjectName( "yi" ); + + $gridLayout_8->addWidget( $yi, 7, 0, 1, 1 ); + + my $yf = Qt::LineEdit( $groupBox ); + $self->{yf} = $yf; + $yf->setObjectName( "yf" ); + + $gridLayout_8->addWidget( $yf, 7, 1, 1, 2 ); + + my $ltc = Qt::CheckBox( $groupBox ); + $self->{ltc} = $ltc; + $ltc->setObjectName( "ltc" ); + $ltc->setChecked( 1 ); + + $gridLayout_8->addWidget( $ltc, 7, 4, 1, 1 ); + + + $gridLayout_2->addWidget( $groupBox, 2, 0, 1, 1 ); + + + $gridLayout_1->addLayout( $gridLayout_2, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $runsPage, Qt::Application::translate( 'MuSRFit4', "RUNS", undef, Qt::Application::UnicodeUTF8() ) ); + my $fittingPage = Qt::Widget( ); + $self->{fittingPage} = $fittingPage; + $fittingPage->setObjectName( "fittingPage" ); + my $gridLayout1 = Qt::GridLayout( $fittingPage ); + $self->{gridLayout1} = $gridLayout1; + $gridLayout1->setSpacing( 6 ); + $gridLayout1->setMargin( 11 ); + $gridLayout1->setObjectName( "gridLayout1" ); + my $fitGrid = Qt::VBoxLayout( ); + $self->{fitGrid} = $fitGrid; + $fitGrid->setSpacing( 6 ); + $fitGrid->setObjectName( "fitGrid" ); + my $fitLayout = Qt::GridLayout( ); + $self->{fitLayout} = $fitLayout; + $fitLayout->setSpacing( 6 ); + $fitLayout->setObjectName( "fitLayout" ); + my $errorCalc = Qt::ComboBox( $fittingPage ); + $self->{errorCalc} = $errorCalc; + $errorCalc->setObjectName( "errorCalc" ); + $errorCalc->setMinimumSize( Qt::Size(0, 25) ); + $errorCalc->setMaximumSize( Qt::Size(150, 16777215) ); + + $fitLayout->addWidget( $errorCalc, 1, 1, 1, 1 ); + + my $minimization = Qt::ComboBox( $fittingPage ); + $self->{minimization} = $minimization; + $minimization->setObjectName( "minimization" ); + $minimization->setMinimumSize( Qt::Size(0, 25) ); + $minimization->setMaximumSize( Qt::Size(150, 16777215) ); + + $fitLayout->addWidget( $minimization, 0, 1, 1, 1 ); + + my $textLabel1_5 = Qt::Label( $fittingPage ); + $self->{textLabel1_5} = $textLabel1_5; + $textLabel1_5->setObjectName( "textLabel1_5" ); + $textLabel1_5->setAlignment( Qt::AlignRight()|Qt::AlignTrailing()|Qt::AlignVCenter() ); + $textLabel1_5->setWordWrap( 0 ); + + $fitLayout->addWidget( $textLabel1_5, 0, 0, 1, 1 ); + + my $textLabel1_5_2 = Qt::Label( $fittingPage ); + $self->{textLabel1_5_2} = $textLabel1_5_2; + $textLabel1_5_2->setObjectName( "textLabel1_5_2" ); + $textLabel1_5_2->setAlignment( Qt::AlignRight()|Qt::AlignTrailing()|Qt::AlignVCenter() ); + $textLabel1_5_2->setWordWrap( 0 ); + + $fitLayout->addWidget( $textLabel1_5_2, 1, 0, 1, 1 ); + + + $fitGrid->addLayout( $fitLayout ); + + + $gridLayout1->addLayout( $fitGrid, 0, 0, 1, 1 ); + + my $fitTextOutput = Qt::TextEdit( $fittingPage ); + $self->{fitTextOutput} = $fitTextOutput; + $fitTextOutput->setObjectName( "fitTextOutput" ); + + $gridLayout1->addWidget( $fitTextOutput, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $fittingPage, Qt::Application::translate( 'MuSRFit4', "Fitting", undef, Qt::Application::UnicodeUTF8() ) ); + my $sharingPage = Qt::Widget( ); + $self->{sharingPage} = $sharingPage; + $sharingPage->setObjectName( "sharingPage" ); + my $gridLayout2 = Qt::GridLayout( $sharingPage ); + $self->{gridLayout2} = $gridLayout2; + $gridLayout2->setSpacing( 6 ); + $gridLayout2->setMargin( 11 ); + $gridLayout2->setObjectName( "gridLayout2" ); + my $buttonGroupSharing = Qt::GroupBox( $sharingPage ); + $self->{buttonGroupSharing} = $buttonGroupSharing; + $buttonGroupSharing->setObjectName( "buttonGroupSharing" ); + $sizePolicy5->setHeightForWidth( $buttonGroupSharing->sizePolicy()->hasHeightForWidth() ); + $buttonGroupSharing->setSizePolicy( $sizePolicy5 ); + $buttonGroupSharing->setAlignment( Qt::AlignLeading() ); + $buttonGroupSharing->setCheckable( 1 ); + $buttonGroupSharing->setChecked( 0 ); + my $gridLayout_7 = Qt::GridLayout( $buttonGroupSharing ); + $self->{gridLayout_7} = $gridLayout_7; + $gridLayout_7->setSpacing( 6 ); + $gridLayout_7->setMargin( 11 ); + $gridLayout_7->setObjectName( "gridLayout_7" ); + my $horizontalLayout = Qt::HBoxLayout( ); + $self->{horizontalLayout} = $horizontalLayout; + $horizontalLayout->setSpacing( 6 ); + $horizontalLayout->setObjectName( "horizontalLayout" ); + my $sharingComp1 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp1} = $sharingComp1; + $sharingComp1->setObjectName( "sharingComp1" ); + $sharingComp1->setEnabled( 0 ); + my $sizePolicy6 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::MinimumExpanding() ); + $self->{$sizePolicy6} = $sizePolicy6; + $sizePolicy6->setHorizontalStretch( 0 ); + $sizePolicy6->setVerticalStretch( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp1->sizePolicy()->hasHeightForWidth() ); + $sharingComp1->setSizePolicy( $sizePolicy6 ); + $sharingComp1->setAlignment( Qt::AlignLeading() ); + my $layout14 = Qt::Widget( $sharingComp1 ); + $self->{layout14} = $layout14; + $layout14->setObjectName( "layout14" ); + $layout14->setGeometry( Qt::Rect(40, 60, 81, 266) ); + my $_5 = Qt::VBoxLayout( $layout14 ); + $self->{_5} = $_5; + $_5->setSpacing( 0 ); + $_5->setMargin( 0 ); + $_5->setObjectName( "_5" ); + $_5->setContentsMargins(0, 0, 0, 0 ); + my $shParam_1_1 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_1} = $shParam_1_1; + $shParam_1_1->setObjectName( "shParam_1_1" ); + + $_5->addWidget( $shParam_1_1 ); + + my $shParam_1_2 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_2} = $shParam_1_2; + $shParam_1_2->setObjectName( "shParam_1_2" ); + + $_5->addWidget( $shParam_1_2 ); + + my $shParam_1_3 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_3} = $shParam_1_3; + $shParam_1_3->setObjectName( "shParam_1_3" ); + + $_5->addWidget( $shParam_1_3 ); + + my $shParam_1_4 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_4} = $shParam_1_4; + $shParam_1_4->setObjectName( "shParam_1_4" ); + + $_5->addWidget( $shParam_1_4 ); + + my $shParam_1_5 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_5} = $shParam_1_5; + $shParam_1_5->setObjectName( "shParam_1_5" ); + $shParam_1_5->setEnabled( 0 ); + $shParam_1_5->setTristate( 0 ); + + $_5->addWidget( $shParam_1_5 ); + + my $shParam_1_6 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_6} = $shParam_1_6; + $shParam_1_6->setObjectName( "shParam_1_6" ); + $shParam_1_6->setEnabled( 0 ); + $shParam_1_6->setTristate( 0 ); + + $_5->addWidget( $shParam_1_6 ); + + my $shParam_1_7 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_7} = $shParam_1_7; + $shParam_1_7->setObjectName( "shParam_1_7" ); + $shParam_1_7->setEnabled( 0 ); + $shParam_1_7->setTristate( 0 ); + + $_5->addWidget( $shParam_1_7 ); + + my $shParam_1_8 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_8} = $shParam_1_8; + $shParam_1_8->setObjectName( "shParam_1_8" ); + $shParam_1_8->setEnabled( 0 ); + $shParam_1_8->setTristate( 0 ); + + $_5->addWidget( $shParam_1_8 ); + + my $shParam_1_9 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_9} = $shParam_1_9; + $shParam_1_9->setObjectName( "shParam_1_9" ); + $shParam_1_9->setEnabled( 0 ); + $shParam_1_9->setTristate( 0 ); + + $_5->addWidget( $shParam_1_9 ); + + my $comp1ShLabel = Qt::Label( $sharingComp1 ); + $self->{comp1ShLabel} = $comp1ShLabel; + $comp1ShLabel->setObjectName( "comp1ShLabel" ); + $comp1ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp1ShLabel->setWordWrap( 0 ); + + $horizontalLayout->addWidget( $sharingComp1 ); + + my $sharingComp2 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp2} = $sharingComp2; + $sharingComp2->setObjectName( "sharingComp2" ); + $sharingComp2->setEnabled( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp2->sizePolicy()->hasHeightForWidth() ); + $sharingComp2->setSizePolicy( $sizePolicy6 ); + my $comp2ShLabel = Qt::Label( $sharingComp2 ); + $self->{comp2ShLabel} = $comp2ShLabel; + $comp2ShLabel->setObjectName( "comp2ShLabel" ); + $comp2ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp2ShLabel->setWordWrap( 0 ); + my $layout13 = Qt::Widget( $sharingComp2 ); + $self->{layout13} = $layout13; + $layout13->setObjectName( "layout13" ); + $layout13->setGeometry( Qt::Rect(40, 60, 81, 266) ); + my $_1 = Qt::VBoxLayout( $layout13 ); + $self->{_1} = $_1; + $_1->setSpacing( 0 ); + $_1->setMargin( 0 ); + $_1->setObjectName( "_1" ); + $_1->setContentsMargins(0, 0, 0, 0 ); + my $shParam_2_1 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_1} = $shParam_2_1; + $shParam_2_1->setObjectName( "shParam_2_1" ); + + $_1->addWidget( $shParam_2_1 ); + + my $shParam_2_2 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_2} = $shParam_2_2; + $shParam_2_2->setObjectName( "shParam_2_2" ); + + $_1->addWidget( $shParam_2_2 ); + + my $shParam_2_3 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_3} = $shParam_2_3; + $shParam_2_3->setObjectName( "shParam_2_3" ); + + $_1->addWidget( $shParam_2_3 ); + + my $shParam_2_4 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_4} = $shParam_2_4; + $shParam_2_4->setObjectName( "shParam_2_4" ); + + $_1->addWidget( $shParam_2_4 ); + + my $shParam_2_5 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_5} = $shParam_2_5; + $shParam_2_5->setObjectName( "shParam_2_5" ); + + $_1->addWidget( $shParam_2_5 ); + + my $shParam_2_6 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_6} = $shParam_2_6; + $shParam_2_6->setObjectName( "shParam_2_6" ); + $shParam_2_6->setEnabled( 0 ); + $shParam_2_6->setTristate( 0 ); + + $_1->addWidget( $shParam_2_6 ); + + my $shParam_2_7 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_7} = $shParam_2_7; + $shParam_2_7->setObjectName( "shParam_2_7" ); + $shParam_2_7->setEnabled( 0 ); + $shParam_2_7->setTristate( 0 ); + + $_1->addWidget( $shParam_2_7 ); + + my $shParam_2_8 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_8} = $shParam_2_8; + $shParam_2_8->setObjectName( "shParam_2_8" ); + $shParam_2_8->setEnabled( 0 ); + $shParam_2_8->setTristate( 0 ); + + $_1->addWidget( $shParam_2_8 ); + + my $shParam_2_9 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_9} = $shParam_2_9; + $shParam_2_9->setObjectName( "shParam_2_9" ); + $shParam_2_9->setEnabled( 0 ); + $shParam_2_9->setTristate( 0 ); + + $_1->addWidget( $shParam_2_9 ); + + + $horizontalLayout->addWidget( $sharingComp2 ); + + my $sharingComp3 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp3} = $sharingComp3; + $sharingComp3->setObjectName( "sharingComp3" ); + $sharingComp3->setEnabled( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp3->sizePolicy()->hasHeightForWidth() ); + $sharingComp3->setSizePolicy( $sizePolicy6 ); + $sharingComp3->setAlignment( Qt::AlignJustify()|Qt::AlignVCenter() ); + my $comp3ShLabel = Qt::Label( $sharingComp3 ); + $self->{comp3ShLabel} = $comp3ShLabel; + $comp3ShLabel->setObjectName( "comp3ShLabel" ); + $comp3ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp3ShLabel->setWordWrap( 0 ); + my $layout15 = Qt::Widget( $sharingComp3 ); + $self->{layout15} = $layout15; + $layout15->setObjectName( "layout15" ); + $layout15->setGeometry( Qt::Rect(41, 58, 81, 266) ); + my $_3 = Qt::VBoxLayout( $layout15 ); + $self->{_3} = $_3; + $_3->setSpacing( 6 ); + $_3->setMargin( 11 ); + $_3->setObjectName( "_3" ); + $_3->setContentsMargins(0, 0, 0, 0 ); + my $shParam_3_1 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_1} = $shParam_3_1; + $shParam_3_1->setObjectName( "shParam_3_1" ); + + $_3->addWidget( $shParam_3_1 ); + + my $shParam_3_2 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_2} = $shParam_3_2; + $shParam_3_2->setObjectName( "shParam_3_2" ); + + $_3->addWidget( $shParam_3_2 ); + + my $shParam_3_3 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_3} = $shParam_3_3; + $shParam_3_3->setObjectName( "shParam_3_3" ); + + $_3->addWidget( $shParam_3_3 ); + + my $shParam_3_4 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_4} = $shParam_3_4; + $shParam_3_4->setObjectName( "shParam_3_4" ); + + $_3->addWidget( $shParam_3_4 ); + + my $shParam_3_5 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_5} = $shParam_3_5; + $shParam_3_5->setObjectName( "shParam_3_5" ); + + $_3->addWidget( $shParam_3_5 ); + + my $shParam_3_6 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_6} = $shParam_3_6; + $shParam_3_6->setObjectName( "shParam_3_6" ); + $shParam_3_6->setEnabled( 0 ); + $shParam_3_6->setTristate( 0 ); + + $_3->addWidget( $shParam_3_6 ); + + my $shParam_3_7 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_7} = $shParam_3_7; + $shParam_3_7->setObjectName( "shParam_3_7" ); + $shParam_3_7->setEnabled( 0 ); + $shParam_3_7->setTristate( 0 ); + + $_3->addWidget( $shParam_3_7 ); + + my $shParam_3_8 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_8} = $shParam_3_8; + $shParam_3_8->setObjectName( "shParam_3_8" ); + $shParam_3_8->setEnabled( 0 ); + $shParam_3_8->setTristate( 0 ); + + $_3->addWidget( $shParam_3_8 ); + + my $shParam_3_9 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_9} = $shParam_3_9; + $shParam_3_9->setObjectName( "shParam_3_9" ); + $shParam_3_9->setEnabled( 0 ); + $shParam_3_9->setTristate( 0 ); + + $_3->addWidget( $shParam_3_9 ); + + + $horizontalLayout->addWidget( $sharingComp3 ); + + + $gridLayout_7->addLayout( $horizontalLayout, 0, 0, 1, 1 ); + + + $gridLayout2->addWidget( $buttonGroupSharing, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $sharingPage, Qt::Application::translate( 'MuSRFit4', "Sharing", undef, Qt::Application::UnicodeUTF8() ) ); + my $initializationPage = Qt::Widget( ); + $self->{initializationPage} = $initializationPage; + $initializationPage->setObjectName( "initializationPage" ); + my $gridLayout3 = Qt::GridLayout( $initializationPage ); + $self->{gridLayout3} = $gridLayout3; + $gridLayout3->setSpacing( 6 ); + $gridLayout3->setMargin( 11 ); + $gridLayout3->setObjectName( "gridLayout3" ); + my $initParamTable = Qt::TableWidget( $initializationPage ); + $self->{initParamTable} = $initParamTable; + $initParamTable->setObjectName( "initParamTable" ); + $initParamTable->setRowCount( 1 ); + $initParamTable->setColumnCount( 4 ); + + $gridLayout3->addWidget( $initParamTable, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $initializationPage, Qt::Application::translate( 'MuSRFit4', "Initialization", undef, Qt::Application::UnicodeUTF8() ) ); + my $msrPage = Qt::Widget( ); + $self->{msrPage} = $msrPage; + $msrPage->setObjectName( "msrPage" ); + my $gridLayout4 = Qt::GridLayout( $msrPage ); + $self->{gridLayout4} = $gridLayout4; + $gridLayout4->setSpacing( 6 ); + $gridLayout4->setMargin( 11 ); + $gridLayout4->setObjectName( "gridLayout4" ); + my $vboxLayout = Qt::VBoxLayout( ); + $self->{vboxLayout} = $vboxLayout; + $vboxLayout->setSpacing( 6 ); + $vboxLayout->setMargin( 0 ); + $vboxLayout->setObjectName( "vboxLayout" ); + my $groupTitle = Qt::GroupBox( $msrPage ); + $self->{groupTitle} = $groupTitle; + $groupTitle->setObjectName( "groupTitle" ); + $sizePolicy1->setHeightForWidth( $groupTitle->sizePolicy()->hasHeightForWidth() ); + $groupTitle->setSizePolicy( $sizePolicy1 ); + my $gridLayout5 = Qt::GridLayout( $groupTitle ); + $self->{gridLayout5} = $gridLayout5; + $gridLayout5->setSpacing( 6 ); + $gridLayout5->setMargin( 11 ); + $gridLayout5->setObjectName( "gridLayout5" ); + my $vboxLayout1 = Qt::VBoxLayout( ); + $self->{vboxLayout1} = $vboxLayout1; + $vboxLayout1->setSpacing( 6 ); + $vboxLayout1->setObjectName( "vboxLayout1" ); + my $titleLabel = Qt::Label( $groupTitle ); + $self->{titleLabel} = $titleLabel; + $titleLabel->setObjectName( "titleLabel" ); + $sizePolicy4->setHeightForWidth( $titleLabel->sizePolicy()->hasHeightForWidth() ); + $titleLabel->setSizePolicy( $sizePolicy4 ); + $titleLabel->setWordWrap( 0 ); + + $vboxLayout1->addWidget( $titleLabel ); + + my $title = Qt::LineEdit( $groupTitle ); + $self->{title} = $title; + $title->setObjectName( "title" ); + my $sizePolicy7 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy7} = $sizePolicy7; + $sizePolicy7->setHorizontalStretch( 1 ); + $sizePolicy7->setVerticalStretch( 1 ); + $sizePolicy7->setHeightForWidth( $title->sizePolicy()->hasHeightForWidth() ); + $title->setSizePolicy( $sizePolicy7 ); + + $vboxLayout1->addWidget( $title ); + + my $hboxLayout = Qt::HBoxLayout( ); + $self->{hboxLayout} = $hboxLayout; + $hboxLayout->setSpacing( 6 ); + $hboxLayout->setObjectName( "hboxLayout" ); + my $fileNameLabel = Qt::Label( $groupTitle ); + $self->{fileNameLabel} = $fileNameLabel; + $fileNameLabel->setObjectName( "fileNameLabel" ); + $fileNameLabel->setWordWrap( 0 ); + + $hboxLayout->addWidget( $fileNameLabel ); + + my $fileName = Qt::LineEdit( $groupTitle ); + $self->{fileName} = $fileName; + $fileName->setObjectName( "fileName" ); + $sizePolicy1->setHeightForWidth( $fileName->sizePolicy()->hasHeightForWidth() ); + $fileName->setSizePolicy( $sizePolicy1 ); + + $hboxLayout->addWidget( $fileName ); + + + $vboxLayout1->addLayout( $hboxLayout ); + + + $gridLayout5->addLayout( $vboxLayout1, 0, 0, 1, 1 ); + + + $vboxLayout->addWidget( $groupTitle ); + + my $textMSROutput = Qt::TextEdit( $msrPage ); + $self->{textMSROutput} = $textMSROutput; + $textMSROutput->setObjectName( "textMSROutput" ); + $textMSROutput->setOverwriteMode( 1 ); + + $vboxLayout->addWidget( $textMSROutput ); + + + $gridLayout4->addLayout( $vboxLayout, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $msrPage, Qt::Application::translate( 'MuSRFit4', "MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + my $fourierPage = Qt::Widget( ); + $self->{fourierPage} = $fourierPage; + $fourierPage->setObjectName( "fourierPage" ); + my $gridLayout6 = Qt::GridLayout( $fourierPage ); + $self->{gridLayout6} = $gridLayout6; + $gridLayout6->setSpacing( 6 ); + $gridLayout6->setMargin( 11 ); + $gridLayout6->setObjectName( "gridLayout6" ); + my $fourierBox = Qt::GroupBox( $fourierPage ); + $self->{fourierBox} = $fourierBox; + $fourierBox->setObjectName( "fourierBox" ); + $sizePolicy5->setHeightForWidth( $fourierBox->sizePolicy()->hasHeightForWidth() ); + $fourierBox->setSizePolicy( $sizePolicy5 ); + my $layout34 = Qt::Widget( $fourierBox ); + $self->{layout34} = $layout34; + $layout34->setObjectName( "layout34" ); + $layout34->setGeometry( Qt::Rect(12, 19, 510, 117) ); + my $gridLayout7 = Qt::GridLayout( $layout34 ); + $self->{gridLayout7} = $gridLayout7; + $gridLayout7->setSpacing( 5 ); + $gridLayout7->setMargin( 5 ); + $gridLayout7->setObjectName( "gridLayout7" ); + $gridLayout7->setContentsMargins(0, 0, 0, 0 ); + my $frqMax = Qt::LineEdit( $layout34 ); + $self->{frqMax} = $frqMax; + $frqMax->setObjectName( "frqMax" ); + $sizePolicy4->setHeightForWidth( $frqMax->sizePolicy()->hasHeightForWidth() ); + $frqMax->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $frqMax, 0, 6, 1, 1 ); + + my $funits = Qt::ComboBox( $layout34 ); + $self->{funits} = $funits; + $funits->setObjectName( "funits" ); + my $sizePolicy8 = Qt::SizePolicy( Qt::SizePolicy::Ignored(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy8} = $sizePolicy8; + $sizePolicy8->setHorizontalStretch( 0 ); + $sizePolicy8->setVerticalStretch( 0 ); + $sizePolicy8->setHeightForWidth( $funits->sizePolicy()->hasHeightForWidth() ); + $funits->setSizePolicy( $sizePolicy8 ); + + $gridLayout7->addWidget( $funits, 0, 2, 1, 1 ); + + my $fplot = Qt::ComboBox( $layout34 ); + $self->{fplot} = $fplot; + $fplot->setObjectName( "fplot" ); + $sizePolicy4->setHeightForWidth( $fplot->sizePolicy()->hasHeightForWidth() ); + $fplot->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fplot, 2, 2, 1, 1 ); + + my $textLabel1_3_8 = Qt::Label( $layout34 ); + $self->{textLabel1_3_8} = $textLabel1_3_8; + $textLabel1_3_8->setObjectName( "textLabel1_3_8" ); + $textLabel1_3_8->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_8, 2, 6, 1, 1 ); + + my $textLabel1_7 = Qt::Label( $layout34 ); + $self->{textLabel1_7} = $textLabel1_7; + $textLabel1_7->setObjectName( "textLabel1_7" ); + $textLabel1_7->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_7, 1, 3, 1, 1 ); + + my $fplotLabel = Qt::Label( $layout34 ); + $self->{fplotLabel} = $fplotLabel; + $fplotLabel->setObjectName( "fplotLabel" ); + $fplotLabel->setWordWrap( 0 ); + + $gridLayout7->addWidget( $fplotLabel, 2, 1, 1, 1 ); + + my $textLabel1_3_4 = Qt::Label( $layout34 ); + $self->{textLabel1_3_4} = $textLabel1_3_4; + $textLabel1_3_4->setObjectName( "textLabel1_3_4" ); + $textLabel1_3_4->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_4, 1, 6, 1, 1 ); + + my $fapodization = Qt::ComboBox( $layout34 ); + $self->{fapodization} = $fapodization; + $fapodization->setObjectName( "fapodization" ); + $sizePolicy4->setHeightForWidth( $fapodization->sizePolicy()->hasHeightForWidth() ); + $fapodization->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fapodization, 1, 2, 1, 1 ); + + my $fapodizationLabel = Qt::Label( $layout34 ); + $self->{fapodizationLabel} = $fapodizationLabel; + $fapodizationLabel->setObjectName( "fapodizationLabel" ); + $fapodizationLabel->setWordWrap( 0 ); + + $gridLayout7->addWidget( $fapodizationLabel, 1, 1, 1, 1 ); + + my $textLabel1_3_3 = Qt::Label( $layout34 ); + $self->{textLabel1_3_3} = $textLabel1_3_3; + $textLabel1_3_3->setObjectName( "textLabel1_3_3" ); + $textLabel1_3_3->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_3, 1, 5, 1, 1 ); + + my $textLabel1_2 = Qt::Label( $layout34 ); + $self->{textLabel1_2} = $textLabel1_2; + $textLabel1_2->setObjectName( "textLabel1_2" ); + $textLabel1_2->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_2, 0, 5, 1, 1 ); + + my $textLabel1_3_6 = Qt::Label( $layout34 ); + $self->{textLabel1_3_6} = $textLabel1_3_6; + $textLabel1_3_6->setObjectName( "textLabel1_3_6" ); + $textLabel1_3_6->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_6, 2, 4, 1, 1 ); + + my $fphase = Qt::LineEdit( $layout34 ); + $self->{fphase} = $fphase; + $fphase->setObjectName( "fphase" ); + $sizePolicy4->setHeightForWidth( $fphase->sizePolicy()->hasHeightForWidth() ); + $fphase->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fphase, 1, 4, 1, 1 ); + + my $textLabel1_3_5 = Qt::Label( $layout34 ); + $self->{textLabel1_3_5} = $textLabel1_3_5; + $textLabel1_3_5->setObjectName( "textLabel1_3_5" ); + $textLabel1_3_5->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_5, 2, 3, 1, 1 ); + + my $textLabel1_3_7 = Qt::Label( $layout34 ); + $self->{textLabel1_3_7} = $textLabel1_3_7; + $textLabel1_3_7->setObjectName( "textLabel1_3_7" ); + $textLabel1_3_7->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_7, 2, 5, 1, 1 ); + + my $frqMin = Qt::LineEdit( $layout34 ); + $self->{frqMin} = $frqMin; + $frqMin->setObjectName( "frqMin" ); + $sizePolicy4->setHeightForWidth( $frqMin->sizePolicy()->hasHeightForWidth() ); + $frqMin->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $frqMin, 0, 4, 1, 1 ); + + my $textLabel1 = Qt::Label( $layout34 ); + $self->{textLabel1} = $textLabel1; + $textLabel1->setObjectName( "textLabel1" ); + $textLabel1->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1, 0, 3, 1, 1 ); + + my $label = Qt::Label( $layout34 ); + $self->{label} = $label; + $label->setObjectName( "label" ); + + $gridLayout7->addWidget( $label, 0, 1, 1, 1 ); + + + $gridLayout6->addWidget( $fourierBox, 0, 0, 1, 1 ); + + my $rrfBox = Qt::GroupBox( $fourierPage ); + $self->{rrfBox} = $rrfBox; + $rrfBox->setObjectName( "rrfBox" ); + $sizePolicy5->setHeightForWidth( $rrfBox->sizePolicy()->hasHeightForWidth() ); + $rrfBox->setSizePolicy( $sizePolicy5 ); + my $layout35 = Qt::Widget( $rrfBox ); + $self->{layout35} = $layout35; + $layout35->setObjectName( "layout35" ); + $layout35->setGeometry( Qt::Rect(10, 18, 265, 100) ); + my $gridLayout8 = Qt::GridLayout( $layout35 ); + $self->{gridLayout8} = $gridLayout8; + $gridLayout8->setSpacing( 5 ); + $gridLayout8->setMargin( 5 ); + $gridLayout8->setObjectName( "gridLayout8" ); + $gridLayout8->setContentsMargins(0, 0, 0, 0 ); + my $textLabel1_6_2_2 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_2} = $textLabel1_6_2_2; + $textLabel1_6_2_2->setObjectName( "textLabel1_6_2_2" ); + $textLabel1_6_2_2->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_2, 2, 0, 1, 1 ); + + my $textLabel1_6 = Qt::Label( $layout35 ); + $self->{textLabel1_6} = $textLabel1_6; + $textLabel1_6->setObjectName( "textLabel1_6" ); + $textLabel1_6->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6, 0, 0, 1, 1 ); + + my $textLabel1_6_2_4 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_4} = $textLabel1_6_2_4; + $textLabel1_6_2_4->setObjectName( "textLabel1_6_2_4" ); + $textLabel1_6_2_4->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_4, 2, 2, 1, 1 ); + + my $rrfFrq = Qt::LineEdit( $layout35 ); + $self->{rrfFrq} = $rrfFrq; + $rrfFrq->setObjectName( "rrfFrq" ); + + $gridLayout8->addWidget( $rrfFrq, 0, 1, 1, 1 ); + + my $textLabel1_6_2_3 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_3} = $textLabel1_6_2_3; + $textLabel1_6_2_3->setObjectName( "textLabel1_6_2_3" ); + $textLabel1_6_2_3->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_3, 1, 2, 1, 1 ); + + my $rrfPack = Qt::LineEdit( $layout35 ); + $self->{rrfPack} = $rrfPack; + $rrfPack->setObjectName( "rrfPack" ); + + $gridLayout8->addWidget( $rrfPack, 1, 1, 1, 1 ); + + my $textLabel1_6_2 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2} = $textLabel1_6_2; + $textLabel1_6_2->setObjectName( "textLabel1_6_2" ); + $textLabel1_6_2->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2, 1, 0, 1, 1 ); + + my $rrfUnits = Qt::ComboBox( $layout35 ); + $self->{rrfUnits} = $rrfUnits; + $rrfUnits->setObjectName( "rrfUnits" ); + + $gridLayout8->addWidget( $rrfUnits, 0, 2, 1, 1 ); + + my $rrfPhase = Qt::LineEdit( $layout35 ); + $self->{rrfPhase} = $rrfPhase; + $rrfPhase->setObjectName( "rrfPhase" ); + + $gridLayout8->addWidget( $rrfPhase, 2, 1, 1, 1 ); + + + $gridLayout6->addWidget( $rrfBox, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $fourierPage, Qt::Application::translate( 'MuSRFit4', "FFT/RRF", undef, Qt::Application::UnicodeUTF8() ) ); + my $t0Page = Qt::Widget( ); + $self->{t0Page} = $t0Page; + $t0Page->setObjectName( "t0Page" ); + my $gridLayout9 = Qt::GridLayout( $t0Page ); + $self->{gridLayout9} = $gridLayout9; + $gridLayout9->setSpacing( 6 ); + $gridLayout9->setMargin( 11 ); + $gridLayout9->setObjectName( "gridLayout9" ); + my $hboxLayout1 = Qt::HBoxLayout( ); + $self->{hboxLayout1} = $hboxLayout1; + $hboxLayout1->setSpacing( 6 ); + $hboxLayout1->setObjectName( "hboxLayout1" ); + my $groupHist0 = Qt::GroupBox( $t0Page ); + $self->{groupHist0} = $groupHist0; + $groupHist0->setObjectName( "groupHist0" ); + $sizePolicy->setHeightForWidth( $groupHist0->sizePolicy()->hasHeightForWidth() ); + $groupHist0->setSizePolicy( $sizePolicy ); + $groupHist0->setMinimumSize( Qt::Size(0, 0) ); + my $layout16_2 = Qt::Widget( $groupHist0 ); + $self->{layout16_2} = $layout16_2; + $layout16_2->setObjectName( "layout16_2" ); + $layout16_2->setGeometry( Qt::Rect(5, 18, 100, 150) ); + my $vboxLayout2 = Qt::VBoxLayout( $layout16_2 ); + $self->{vboxLayout2} = $vboxLayout2; + $vboxLayout2->setSpacing( 6 ); + $vboxLayout2->setMargin( 11 ); + $vboxLayout2->setObjectName( "vboxLayout2" ); + $vboxLayout2->setContentsMargins(0, 0, 0, 0 ); + my $textLabel2 = Qt::Label( $layout16_2 ); + $self->{textLabel2} = $textLabel2; + $textLabel2->setObjectName( "textLabel2" ); + $textLabel2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2 ); + + my $textLabel2_2_2_3 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_3} = $textLabel2_2_2_3; + $textLabel2_2_2_3->setObjectName( "textLabel2_2_2_3" ); + $textLabel2_2_2_3->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_3 ); + + my $textLabel2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2} = $textLabel2_2_2; + $textLabel2_2_2->setObjectName( "textLabel2_2_2" ); + $textLabel2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2 ); + + my $textLabel2_2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_2} = $textLabel2_2_2_2; + $textLabel2_2_2_2->setObjectName( "textLabel2_2_2_2" ); + $textLabel2_2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_2 ); + + my $textLabel2_2_2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_2_2} = $textLabel2_2_2_2_2; + $textLabel2_2_2_2_2->setObjectName( "textLabel2_2_2_2_2" ); + $textLabel2_2_2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_2_2 ); + + + $hboxLayout1->addWidget( $groupHist0 ); + + my $groupHist1 = Qt::GroupBox( $t0Page ); + $self->{groupHist1} = $groupHist1; + $groupHist1->setObjectName( "groupHist1" ); + $sizePolicy->setHeightForWidth( $groupHist1->sizePolicy()->hasHeightForWidth() ); + $groupHist1->setSizePolicy( $sizePolicy ); + $groupHist1->setMinimumSize( Qt::Size(0, 0) ); + my $layout18 = Qt::Widget( $groupHist1 ); + $self->{layout18} = $layout18; + $layout18->setObjectName( "layout18" ); + $layout18->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout3 = Qt::VBoxLayout( $layout18 ); + $self->{vboxLayout3} = $vboxLayout3; + $vboxLayout3->setSpacing( 0 ); + $vboxLayout3->setMargin( 0 ); + $vboxLayout3->setObjectName( "vboxLayout3" ); + $vboxLayout3->setContentsMargins(0, 0, 0, 0 ); + my $t01 = Qt::LineEdit( $layout18 ); + $self->{t01} = $t01; + $t01->setObjectName( "t01" ); + + $vboxLayout3->addWidget( $t01 ); + + my $bg11 = Qt::LineEdit( $layout18 ); + $self->{bg11} = $bg11; + $bg11->setObjectName( "bg11" ); + + $vboxLayout3->addWidget( $bg11 ); + + my $bg21 = Qt::LineEdit( $layout18 ); + $self->{bg21} = $bg21; + $bg21->setObjectName( "bg21" ); + + $vboxLayout3->addWidget( $bg21 ); + + my $data11 = Qt::LineEdit( $layout18 ); + $self->{data11} = $data11; + $data11->setObjectName( "data11" ); + + $vboxLayout3->addWidget( $data11 ); + + my $data21 = Qt::LineEdit( $layout18 ); + $self->{data21} = $data21; + $data21->setObjectName( "data21" ); + + $vboxLayout3->addWidget( $data21 ); + + + $hboxLayout1->addWidget( $groupHist1 ); + + my $groupHist2 = Qt::GroupBox( $t0Page ); + $self->{groupHist2} = $groupHist2; + $groupHist2->setObjectName( "groupHist2" ); + $groupHist2->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist2->sizePolicy()->hasHeightForWidth() ); + $groupHist2->setSizePolicy( $sizePolicy ); + my $layout18_2 = Qt::Widget( $groupHist2 ); + $self->{layout18_2} = $layout18_2; + $layout18_2->setObjectName( "layout18_2" ); + $layout18_2->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout4 = Qt::VBoxLayout( $layout18_2 ); + $self->{vboxLayout4} = $vboxLayout4; + $vboxLayout4->setSpacing( 0 ); + $vboxLayout4->setMargin( 0 ); + $vboxLayout4->setObjectName( "vboxLayout4" ); + $vboxLayout4->setContentsMargins(0, 0, 0, 0 ); + my $t02 = Qt::LineEdit( $layout18_2 ); + $self->{t02} = $t02; + $t02->setObjectName( "t02" ); + + $vboxLayout4->addWidget( $t02 ); + + my $bg12 = Qt::LineEdit( $layout18_2 ); + $self->{bg12} = $bg12; + $bg12->setObjectName( "bg12" ); + + $vboxLayout4->addWidget( $bg12 ); + + my $bg22 = Qt::LineEdit( $layout18_2 ); + $self->{bg22} = $bg22; + $bg22->setObjectName( "bg22" ); + + $vboxLayout4->addWidget( $bg22 ); + + my $data12 = Qt::LineEdit( $layout18_2 ); + $self->{data12} = $data12; + $data12->setObjectName( "data12" ); + + $vboxLayout4->addWidget( $data12 ); + + my $data22 = Qt::LineEdit( $layout18_2 ); + $self->{data22} = $data22; + $data22->setObjectName( "data22" ); + + $vboxLayout4->addWidget( $data22 ); + + + $hboxLayout1->addWidget( $groupHist2 ); + + my $groupHist3 = Qt::GroupBox( $t0Page ); + $self->{groupHist3} = $groupHist3; + $groupHist3->setObjectName( "groupHist3" ); + $groupHist3->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist3->sizePolicy()->hasHeightForWidth() ); + $groupHist3->setSizePolicy( $sizePolicy ); + my $layout18_3 = Qt::Widget( $groupHist3 ); + $self->{layout18_3} = $layout18_3; + $layout18_3->setObjectName( "layout18_3" ); + $layout18_3->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout5 = Qt::VBoxLayout( $layout18_3 ); + $self->{vboxLayout5} = $vboxLayout5; + $vboxLayout5->setSpacing( 0 ); + $vboxLayout5->setMargin( 0 ); + $vboxLayout5->setObjectName( "vboxLayout5" ); + $vboxLayout5->setContentsMargins(0, 0, 0, 0 ); + my $t03 = Qt::LineEdit( $layout18_3 ); + $self->{t03} = $t03; + $t03->setObjectName( "t03" ); + + $vboxLayout5->addWidget( $t03 ); + + my $bg13 = Qt::LineEdit( $layout18_3 ); + $self->{bg13} = $bg13; + $bg13->setObjectName( "bg13" ); + + $vboxLayout5->addWidget( $bg13 ); + + my $bg23 = Qt::LineEdit( $layout18_3 ); + $self->{bg23} = $bg23; + $bg23->setObjectName( "bg23" ); + + $vboxLayout5->addWidget( $bg23 ); + + my $data13 = Qt::LineEdit( $layout18_3 ); + $self->{data13} = $data13; + $data13->setObjectName( "data13" ); + + $vboxLayout5->addWidget( $data13 ); + + my $data23 = Qt::LineEdit( $layout18_3 ); + $self->{data23} = $data23; + $data23->setObjectName( "data23" ); + + $vboxLayout5->addWidget( $data23 ); + + + $hboxLayout1->addWidget( $groupHist3 ); + + my $groupHist4 = Qt::GroupBox( $t0Page ); + $self->{groupHist4} = $groupHist4; + $groupHist4->setObjectName( "groupHist4" ); + $groupHist4->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist4->sizePolicy()->hasHeightForWidth() ); + $groupHist4->setSizePolicy( $sizePolicy ); + my $layout18_4 = Qt::Widget( $groupHist4 ); + $self->{layout18_4} = $layout18_4; + $layout18_4->setObjectName( "layout18_4" ); + $layout18_4->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout6 = Qt::VBoxLayout( $layout18_4 ); + $self->{vboxLayout6} = $vboxLayout6; + $vboxLayout6->setSpacing( 0 ); + $vboxLayout6->setMargin( 0 ); + $vboxLayout6->setObjectName( "vboxLayout6" ); + $vboxLayout6->setContentsMargins(0, 0, 0, 0 ); + my $t04 = Qt::LineEdit( $layout18_4 ); + $self->{t04} = $t04; + $t04->setObjectName( "t04" ); + + $vboxLayout6->addWidget( $t04 ); + + my $bg14 = Qt::LineEdit( $layout18_4 ); + $self->{bg14} = $bg14; + $bg14->setObjectName( "bg14" ); + + $vboxLayout6->addWidget( $bg14 ); + + my $bg24 = Qt::LineEdit( $layout18_4 ); + $self->{bg24} = $bg24; + $bg24->setObjectName( "bg24" ); + + $vboxLayout6->addWidget( $bg24 ); + + my $data14 = Qt::LineEdit( $layout18_4 ); + $self->{data14} = $data14; + $data14->setObjectName( "data14" ); + + $vboxLayout6->addWidget( $data14 ); + + my $data24 = Qt::LineEdit( $layout18_4 ); + $self->{data24} = $data24; + $data24->setObjectName( "data24" ); + + $vboxLayout6->addWidget( $data24 ); + + + $hboxLayout1->addWidget( $groupHist4 ); + + + $gridLayout9->addLayout( $hboxLayout1, 0, 0, 1, 1 ); + + my $hboxLayout2 = Qt::HBoxLayout( ); + $self->{hboxLayout2} = $hboxLayout2; + $hboxLayout2->setSpacing( 6 ); + $hboxLayout2->setObjectName( "hboxLayout2" ); + my $spacer1 = Qt::SpacerItem( 461, 20, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $hboxLayout2->addItem( $spacer1 ); + + my $t0Update = Qt::PushButton( $t0Page ); + $self->{t0Update} = $t0Update; + $t0Update->setObjectName( "t0Update" ); + $t0Update->setEnabled( 0 ); + my $sizePolicy9 = Qt::SizePolicy( Qt::SizePolicy::Fixed(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy9} = $sizePolicy9; + $sizePolicy9->setHorizontalStretch( 0 ); + $sizePolicy9->setVerticalStretch( 0 ); + $sizePolicy9->setHeightForWidth( $t0Update->sizePolicy()->hasHeightForWidth() ); + $t0Update->setSizePolicy( $sizePolicy9 ); + + $hboxLayout2->addWidget( $t0Update ); + + + $gridLayout9->addLayout( $hboxLayout2, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $t0Page, Qt::Application::translate( 'MuSRFit4', "t0/Bg", undef, Qt::Application::UnicodeUTF8() ) ); + my $tabPage = Qt::Widget( ); + $self->{tabPage} = $tabPage; + $tabPage->setObjectName( "tabPage" ); + my $gridLayout10 = Qt::GridLayout( $tabPage ); + $self->{gridLayout10} = $gridLayout10; + $gridLayout10->setSpacing( 6 ); + $gridLayout10->setMargin( 11 ); + $gridLayout10->setObjectName( "gridLayout10" ); + my $vboxLayout7 = Qt::VBoxLayout( ); + $self->{vboxLayout7} = $vboxLayout7; + $vboxLayout7->setSpacing( 6 ); + $vboxLayout7->setObjectName( "vboxLayout7" ); + my $gridLayout11 = Qt::GridLayout( ); + $self->{gridLayout11} = $gridLayout11; + $gridLayout11->setSpacing( 6 ); + $gridLayout11->setObjectName( "gridLayout11" ); + my $theoryBlock_Label = Qt::Label( $tabPage ); + $self->{theoryBlock_Label} = $theoryBlock_Label; + $theoryBlock_Label->setObjectName( "theoryBlock_Label" ); + my $palette3 = Qt::Palette(); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $theoryBlock_Label->setPalette( $palette3 ); + $theoryBlock_Label->setWordWrap( 0 ); + + $gridLayout11->addWidget( $theoryBlock_Label, 0, 0, 1, 1 ); + + my $theoryBlock = Qt::TextEdit( $tabPage ); + $self->{theoryBlock} = $theoryBlock; + $theoryBlock->setObjectName( "theoryBlock" ); + $theoryBlock->setEnabled( 1 ); + + $gridLayout11->addWidget( $theoryBlock, 1, 0, 1, 1 ); + + my $parametersList_Label = Qt::Label( $tabPage ); + $self->{parametersList_Label} = $parametersList_Label; + $parametersList_Label->setObjectName( "parametersList_Label" ); + my $palette4 = Qt::Palette(); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $parametersList_Label->setPalette( $palette4 ); + $parametersList_Label->setWordWrap( 0 ); + + $gridLayout11->addWidget( $parametersList_Label, 0, 1, 1, 1 ); + + my $parametersList = Qt::TextEdit( $tabPage ); + $self->{parametersList} = $parametersList; + $parametersList->setObjectName( "parametersList" ); + $parametersList->setEnabled( 1 ); + + $gridLayout11->addWidget( $parametersList, 1, 1, 1, 1 ); + + + $vboxLayout7->addLayout( $gridLayout11 ); + + my $hboxLayout3 = Qt::HBoxLayout( ); + $self->{hboxLayout3} = $hboxLayout3; + $hboxLayout3->setSpacing( 6 ); + $hboxLayout3->setObjectName( "hboxLayout3" ); + my $cParamsCombo = Qt::ComboBox( $tabPage ); + $self->{cParamsCombo} = $cParamsCombo; + $cParamsCombo->setObjectName( "cParamsCombo" ); + $sizePolicy9->setHeightForWidth( $cParamsCombo->sizePolicy()->hasHeightForWidth() ); + $cParamsCombo->setSizePolicy( $sizePolicy9 ); + + $hboxLayout3->addWidget( $cParamsCombo ); + + my $textLabel1_4_6 = Qt::Label( $tabPage ); + $self->{textLabel1_4_6} = $textLabel1_4_6; + $textLabel1_4_6->setObjectName( "textLabel1_4_6" ); + $sizePolicy9->setHeightForWidth( $textLabel1_4_6->sizePolicy()->hasHeightForWidth() ); + $textLabel1_4_6->setSizePolicy( $sizePolicy9 ); + $textLabel1_4_6->setWordWrap( 0 ); + + $hboxLayout3->addWidget( $textLabel1_4_6 ); + + my $constraintLine = Qt::LineEdit( $tabPage ); + $self->{constraintLine} = $constraintLine; + $constraintLine->setObjectName( "constraintLine" ); + $sizePolicy1->setHeightForWidth( $constraintLine->sizePolicy()->hasHeightForWidth() ); + $constraintLine->setSizePolicy( $sizePolicy1 ); + $constraintLine->setMinimumSize( Qt::Size(0, 25) ); + + $hboxLayout3->addWidget( $constraintLine ); + + my $addConstraint = Qt::PushButton( $tabPage ); + $self->{addConstraint} = $addConstraint; + $addConstraint->setObjectName( "addConstraint" ); + $sizePolicy9->setHeightForWidth( $addConstraint->sizePolicy()->hasHeightForWidth() ); + $addConstraint->setSizePolicy( $sizePolicy9 ); + + $hboxLayout3->addWidget( $addConstraint ); + + + $vboxLayout7->addLayout( $hboxLayout3 ); + + my $textLabel2_2_3_4 = Qt::Label( $tabPage ); + $self->{textLabel2_2_3_4} = $textLabel2_2_3_4; + $textLabel2_2_3_4->setObjectName( "textLabel2_2_3_4" ); + my $palette5 = Qt::Palette(); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $textLabel2_2_3_4->setPalette( $palette5 ); + $textLabel2_2_3_4->setWordWrap( 0 ); + + $vboxLayout7->addWidget( $textLabel2_2_3_4 ); + + my $functionsBlock = Qt::TextEdit( $tabPage ); + $self->{functionsBlock} = $functionsBlock; + $functionsBlock->setObjectName( "functionsBlock" ); + + $vboxLayout7->addWidget( $functionsBlock ); + + my $hboxLayout4 = Qt::HBoxLayout( ); + $self->{hboxLayout4} = $hboxLayout4; + $hboxLayout4->setSpacing( 6 ); + $hboxLayout4->setObjectName( "hboxLayout4" ); + my $textLabel1_6_3 = Qt::Label( $tabPage ); + $self->{textLabel1_6_3} = $textLabel1_6_3; + $textLabel1_6_3->setObjectName( "textLabel1_6_3" ); + $textLabel1_6_3->setWordWrap( 0 ); + + $hboxLayout4->addWidget( $textLabel1_6_3 ); + + my $resetFunc = Qt::PushButton( $tabPage ); + $self->{resetFunc} = $resetFunc; + $resetFunc->setObjectName( "resetFunc" ); + $resetFunc->setMaximumSize( Qt::Size(100, 32767) ); + + $hboxLayout4->addWidget( $resetFunc ); + + + $vboxLayout7->addLayout( $hboxLayout4 ); + + + $gridLayout10->addLayout( $vboxLayout7, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $tabPage, Qt::Application::translate( 'MuSRFit4', "Constraints", undef, Qt::Application::UnicodeUTF8() ) ); + + $gridLayout->addWidget( $musrfit_tabs, 0, 0, 1, 1 ); + + $muSRFit4->setCentralWidget( $widget ); + my $menuBar = Qt::MenuBar( $muSRFit4 ); + $self->{menuBar} = $menuBar; + $menuBar->setObjectName( "menuBar" ); + $menuBar->setEnabled( 1 ); + $menuBar->setGeometry( Qt::Rect(0, 0, 600, 20) ); + my $fileMenu = Qt::Menu( $menuBar ); + $self->{fileMenu} = $fileMenu; + $fileMenu->setObjectName( "fileMenu" ); + my $actions = Qt::Menu( $menuBar ); + $self->{actions} = $actions; + $actions->setObjectName( "actions" ); + my $parameters = Qt::Menu( $menuBar ); + $self->{parameters} = $parameters; + $parameters->setObjectName( "parameters" ); + my $options = Qt::Menu( $menuBar ); + $self->{options} = $options; + $options->setObjectName( "options" ); + my $helpMenu = Qt::Menu( $menuBar ); + $self->{helpMenu} = $helpMenu; + $helpMenu->setObjectName( "helpMenu" ); + $muSRFit4->setMenuBar( $menuBar ); + my $fileToolBar = Qt::ToolBar( $muSRFit4 ); + $self->{fileToolBar} = $fileToolBar; + $fileToolBar->setObjectName( "fileToolBar" ); + $muSRFit4->addToolBar( Qt::TopToolBarArea(), $fileToolBar ); + my $actionsToolBar = Qt::ToolBar( $muSRFit4 ); + $self->{actionsToolBar} = $actionsToolBar; + $actionsToolBar->setObjectName( "actionsToolBar" ); + $actionsToolBar->setMinimumSize( Qt::Size(0, 0) ); + $muSRFit4->addToolBar( Qt::TopToolBarArea(), $actionsToolBar ); + Qt::Widget::setTabOrder( $musrfit_tabs, $runNumbers ); + Qt::Widget::setTabOrder( $runNumbers, $beamLine ); + Qt::Widget::setTabOrder( $beamLine, $year ); + Qt::Widget::setTabOrder( $year, $runFiles ); + Qt::Widget::setTabOrder( $runFiles, $browse ); + Qt::Widget::setTabOrder( $browse, $fitType1 ); + Qt::Widget::setTabOrder( $fitType1, $fitType2 ); + Qt::Widget::setTabOrder( $fitType2, $fitType3 ); + Qt::Widget::setTabOrder( $fitType3, $tis ); + Qt::Widget::setTabOrder( $tis, $tfs ); + Qt::Widget::setTabOrder( $tfs, $bins ); + Qt::Widget::setTabOrder( $bins, $xi ); + Qt::Widget::setTabOrder( $xi, $xf ); + Qt::Widget::setTabOrder( $xf, $viewBin ); + Qt::Widget::setTabOrder( $viewBin, $yi ); + Qt::Widget::setTabOrder( $yi, $yf ); + Qt::Widget::setTabOrder( $yf, $ltc ); + Qt::Widget::setTabOrder( $ltc, $fitAsyType ); + Qt::Widget::setTabOrder( $fitAsyType, $histsLRBF ); + Qt::Widget::setTabOrder( $histsLRBF, $minimization ); + Qt::Widget::setTabOrder( $minimization, $errorCalc ); + Qt::Widget::setTabOrder( $errorCalc, $fitTextOutput ); + Qt::Widget::setTabOrder( $fitTextOutput, $buttonGroupSharing ); + Qt::Widget::setTabOrder( $buttonGroupSharing, $shParam_1_1 ); + Qt::Widget::setTabOrder( $shParam_1_1, $shParam_1_2 ); + Qt::Widget::setTabOrder( $shParam_1_2, $shParam_1_3 ); + Qt::Widget::setTabOrder( $shParam_1_3, $shParam_1_4 ); + Qt::Widget::setTabOrder( $shParam_1_4, $shParam_1_5 ); + Qt::Widget::setTabOrder( $shParam_1_5, $shParam_1_6 ); + Qt::Widget::setTabOrder( $shParam_1_6, $shParam_1_7 ); + Qt::Widget::setTabOrder( $shParam_1_7, $shParam_1_8 ); + Qt::Widget::setTabOrder( $shParam_1_8, $shParam_1_9 ); + Qt::Widget::setTabOrder( $shParam_1_9, $shParam_2_1 ); + Qt::Widget::setTabOrder( $shParam_2_1, $shParam_2_2 ); + Qt::Widget::setTabOrder( $shParam_2_2, $shParam_2_3 ); + Qt::Widget::setTabOrder( $shParam_2_3, $shParam_2_4 ); + Qt::Widget::setTabOrder( $shParam_2_4, $shParam_2_5 ); + Qt::Widget::setTabOrder( $shParam_2_5, $shParam_2_6 ); + Qt::Widget::setTabOrder( $shParam_2_6, $shParam_2_7 ); + Qt::Widget::setTabOrder( $shParam_2_7, $shParam_2_8 ); + Qt::Widget::setTabOrder( $shParam_2_8, $shParam_2_9 ); + Qt::Widget::setTabOrder( $shParam_2_9, $shParam_3_1 ); + Qt::Widget::setTabOrder( $shParam_3_1, $shParam_3_2 ); + Qt::Widget::setTabOrder( $shParam_3_2, $shParam_3_3 ); + Qt::Widget::setTabOrder( $shParam_3_3, $shParam_3_4 ); + Qt::Widget::setTabOrder( $shParam_3_4, $shParam_3_5 ); + Qt::Widget::setTabOrder( $shParam_3_5, $shParam_3_6 ); + Qt::Widget::setTabOrder( $shParam_3_6, $shParam_3_7 ); + Qt::Widget::setTabOrder( $shParam_3_7, $shParam_3_8 ); + Qt::Widget::setTabOrder( $shParam_3_8, $shParam_3_9 ); + Qt::Widget::setTabOrder( $shParam_3_9, $initParamTable ); + Qt::Widget::setTabOrder( $initParamTable, $title ); + Qt::Widget::setTabOrder( $title, $fileName ); + Qt::Widget::setTabOrder( $fileName, $textMSROutput ); + Qt::Widget::setTabOrder( $textMSROutput, $funits ); + Qt::Widget::setTabOrder( $funits, $fapodization ); + Qt::Widget::setTabOrder( $fapodization, $fplot ); + Qt::Widget::setTabOrder( $fplot, $frqMin ); + Qt::Widget::setTabOrder( $frqMin, $fphase ); + Qt::Widget::setTabOrder( $fphase, $frqMax ); + Qt::Widget::setTabOrder( $frqMax, $rrfFrq ); + Qt::Widget::setTabOrder( $rrfFrq, $rrfUnits ); + Qt::Widget::setTabOrder( $rrfUnits, $rrfPack ); + Qt::Widget::setTabOrder( $rrfPack, $rrfPhase ); + Qt::Widget::setTabOrder( $rrfPhase, $t01 ); + Qt::Widget::setTabOrder( $t01, $bg11 ); + Qt::Widget::setTabOrder( $bg11, $bg21 ); + Qt::Widget::setTabOrder( $bg21, $data11 ); + Qt::Widget::setTabOrder( $data11, $data21 ); + Qt::Widget::setTabOrder( $data21, $t02 ); + Qt::Widget::setTabOrder( $t02, $bg12 ); + Qt::Widget::setTabOrder( $bg12, $bg22 ); + Qt::Widget::setTabOrder( $bg22, $data12 ); + Qt::Widget::setTabOrder( $data12, $data22 ); + Qt::Widget::setTabOrder( $data22, $t03 ); + Qt::Widget::setTabOrder( $t03, $bg13 ); + Qt::Widget::setTabOrder( $bg13, $bg23 ); + Qt::Widget::setTabOrder( $bg23, $data13 ); + Qt::Widget::setTabOrder( $data13, $data23 ); + Qt::Widget::setTabOrder( $data23, $t04 ); + Qt::Widget::setTabOrder( $t04, $bg14 ); + Qt::Widget::setTabOrder( $bg14, $bg24 ); + Qt::Widget::setTabOrder( $bg24, $data14 ); + Qt::Widget::setTabOrder( $data14, $data24 ); + Qt::Widget::setTabOrder( $data24, $t0Update ); + Qt::Widget::setTabOrder( $t0Update, $theoryBlock ); + Qt::Widget::setTabOrder( $theoryBlock, $parametersList ); + Qt::Widget::setTabOrder( $parametersList, $cParamsCombo ); + Qt::Widget::setTabOrder( $cParamsCombo, $constraintLine ); + Qt::Widget::setTabOrder( $constraintLine, $addConstraint ); + Qt::Widget::setTabOrder( $addConstraint, $functionsBlock ); + Qt::Widget::setTabOrder( $functionsBlock, $resetFunc ); + + $menuBar->addAction( $fileMenu->menuAction() ); + $menuBar->addAction( $actions->menuAction() ); + $menuBar->addAction( $parameters->menuAction() ); + $menuBar->addAction( $options->menuAction() ); + $menuBar->addAction( $helpMenu->menuAction() ); + $menuBar->addSeparator(); + $fileMenu->addAction( $fileSaveAction ); + $fileMenu->addAction( $fileChangeDirAction ); + $fileMenu->addSeparator(); + $fileMenu->addAction( $fileExitAction ); + $actions->addAction( $fit ); + $actions->addAction( $plot ); + $actions->addAction( $t0 ); + $parameters->addAction( $parametersExport_AsAction ); + $parameters->addAction( $parametersAppend_ToAction ); + $options->addAction( $fileExistCheck ); + $options->addAction( $manualFile ); + $helpMenu->addAction( $helpAboutAction ); + $fileToolBar->addAction( $fileExitAction ); + $fileToolBar->addAction( $fileChangeDirAction ); + $fileToolBar->addAction( $fileSaveAction ); + $actionsToolBar->addAction( $fit ); + $actionsToolBar->addAction( $plot ); + $actionsToolBar->addAction( $t0 ); + $actionsToolBar->addAction( $parametersExport_AsAction ); + $actionsToolBar->addAction( $parametersAppend_ToAction ); + + $self->retranslateUi( $muSRFit4 ); + Qt::Object::connect($fit, SIGNAL 'activated()' , $muSRFit4, SLOT 'GoFit()' ); + Qt::Object::connect($parametersAppend_ToAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'parametersAppend()' ); + Qt::Object::connect($parametersExport_AsAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'parametersExport()' ); + Qt::Object::connect($fileChangeDirAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileChangeDir()' ); + Qt::Object::connect($fileSaveAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileSave()' ); + Qt::Object::connect($fileExitAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileExit()' ); + Qt::Object::connect($helpAboutAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'helpAbout()' ); + Qt::Object::connect($t0, SIGNAL 'activated()' , $muSRFit4, SLOT 'ShowMuSRT0()' ); + Qt::Object::connect($plot, SIGNAL 'activated()' , $muSRFit4, SLOT 'GoPlot()' ); + Qt::Object::connect($resetFunc, SIGNAL 'clicked()' , $muSRFit4, SLOT 'InitializeFunctions()' ); + Qt::Object::connect($addConstraint, SIGNAL 'clicked()' , $muSRFit4, SLOT 'AppendToFunctions()' ); + Qt::Object::connect($buttonGroupSharing, SIGNAL 'toggled(bool)' , $muSRFit4, SLOT 'ActivateShComp()' ); + Qt::Object::connect($musrfit_tabs, SIGNAL 'currentChanged(int)' , $muSRFit4, SLOT 'TabChanged()' ); + Qt::Object::connect($t0Update, SIGNAL 'clicked()' , $muSRFit4, SLOT 't0UpdateClicked()' ); + Qt::Object::connect($buttonGroupSharing, SIGNAL 'toggled(bool)' , $muSRFit4, SLOT 'ActivateShComp()' ); + Qt::Object::connect($menuBar, SIGNAL 'triggered(QAction*)' , $muSRFit4, SLOT 'RunSelectionToggle()' ); + Qt::Object::connect($fitType1, SIGNAL 'currentIndexChanged(int)' , $muSRFit4, SLOT 'InitializeFunctions()' ); + Qt::Object::connect($beamLine, SIGNAL 'currentIndexChanged(int)' , $muSRFit4, SLOT 't0Update()' ); + + $musrfit_tabs->setCurrentIndex( 0 ); + $fitType2->setCurrentIndex( 18 ); + $fitType3->setCurrentIndex( 18 ); + + + Qt::MetaObject::connectSlotsByName( $muSRFit4 ); + return $self; +} # setupUi + +sub setup_ui { + my ( $muSRFit4 ) = @_; + return setupUi( $muSRFit4 ); +} + +sub retranslateUi { + my ( $self, $muSRFit4 ) = @_; + $muSRFit4->setWindowTitle( Qt::Application::translate( 'MuSRFit4', "MuSRFit GUI", undef, Qt::Application::UnicodeUTF8() ) ); + $muSRFit4->setWindowIconText( Qt::Application::translate( 'MuSRFit4', "MuSRFitGUI", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Save MSR...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "&Save MSR...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setStatusTip( Qt::Application::translate( 'MuSRFit4', "&Save MSR", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+S", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{fileExitAction}->setText( Qt::Application::translate( 'MuSRFit4', "E&xit", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExitAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Exit", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExitAction}->setShortcut( Qt::KeySequence( '' ) ); + $self->{helpAboutAction}->setText( Qt::Application::translate( 'MuSRFit4', "&About", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpAboutAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "About", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpAboutAction}->setShortcut( Qt::KeySequence( '' ) ); + $self->{fileExistCheck}->setText( Qt::Application::translate( 'MuSRFit4', "No Overwrite", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setIconText( Qt::Application::translate( 'MuSRFit4', "Overwrite MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Enable overwriting MSR files", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Enable/Disable checking for MSR files.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{manualFile}->setText( Qt::Application::translate( 'MuSRFit4', "Maual file selection", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{manualFile}->setIconText( Qt::Application::translate( 'MuSRFit4', "Maual file selection", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Change dir", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "&Change dir", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+C", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{optionsnew_itemAction}->setText( Qt::Application::translate( 'MuSRFit4', "new item", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsnew_itemAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "new item", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Export As...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Export As...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Alt+E", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{parametersAppend_ToAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Append To...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersAppend_ToAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Append To...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersAppend_ToAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Alt+A", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{fit}->setIconText( Qt::Application::translate( 'MuSRFit4', "Fit and Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fit}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+F", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{plot}->setIconText( Qt::Application::translate( 'MuSRFit4', "Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{plot}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+P", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{t0}->setIconText( Qt::Application::translate( 'MuSRFit4', "Show t0 and Bg Bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+T", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{optionsFourier}->setText( Qt::Application::translate( 'MuSRFit4', "Fourier", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsFourier}->setIconText( Qt::Application::translate( 'MuSRFit4', "Fourier", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsT0}->setText( Qt::Application::translate( 'MuSRFit4', "T0 and Bg bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsT0}->setIconText( Qt::Application::translate( 'MuSRFit4', "T0 and Bg bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runsMan}->setTitle( Qt::Application::translate( 'MuSRFit4', "RUN Files", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runFiles}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Names of data files to be fit. Multiple data files are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runFiles}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Names of data files to be fit. Multiple data files are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Browse to select data files for fitting.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Browse to select data files for fitting.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setText( Qt::Application::translate( 'MuSRFit4', "Browse", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitAsyTypeLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Fit type", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitAsyType}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Asymmetry", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "SingleHist", undef, Qt::Application::UnicodeUTF8() )]); + $self->{histsLRBFLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Histograms list", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{histsLRBF}->setText( Qt::Application::translate( 'MuSRFit4', "1 5,3 7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runsAuto}->setTitle( Qt::Application::translate( 'MuSRFit4', "RUN Numbers", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{yearLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Year", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{beamLineLabel}->setText( Qt::Application::translate( 'MuSRFit4', "On beam line", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{beamLine}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "LEM", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "GPS", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Dolly", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "LTF", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "LEM (PPC)", undef, Qt::Application::UnicodeUTF8() )]); + $self->{runNumbers}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Numbers of RUNs to fit. Multiple runs are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runNumbers}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Numbers of RUNs to fit. Multiple runs are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runNumbers}->setText( '' ); + $self->{groupBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Theory Function", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp1Label}->setText( Qt::Application::translate( 'MuSRFit4', "First Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp2Label}->setText( Qt::Application::translate( 'MuSRFit4', "Second Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp3Label}->setText( Qt::Application::translate( 'MuSRFit4', "Third Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitType1}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fitType2}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "None", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fitType3}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "None", undef, Qt::Application::UnicodeUTF8() )]); + $self->{tisLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Initial Fit Time", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tfsLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Final Fit Time", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{binsLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Fit Binning Factor", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tis}->setText( Qt::Application::translate( 'MuSRFit4', "0", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tfs}->setText( Qt::Application::translate( 'MuSRFit4', "8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{bins}->setText( Qt::Application::translate( 'MuSRFit4', "100", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4}->setText( Qt::Application::translate( 'MuSRFit4', "Min X", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_8}->setText( Qt::Application::translate( 'MuSRFit4', "Max X", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "View Binning Factor", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_2}->setText( Qt::Application::translate( 'MuSRFit4', "Min Y", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_3}->setText( Qt::Application::translate( 'MuSRFit4', "Max Y", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_4}->setText( '' ); + $self->{ltc}->setText( Qt::Application::translate( 'MuSRFit4', "Life time correction", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{runsPage}), Qt::Application::translate( 'MuSRFit4', "RUNS", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{errorCalc}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "HESSE", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MINOS", undef, Qt::Application::UnicodeUTF8() )]); + $self->{minimization}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MINIMIZE", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MIGRAD", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "SIMPLEX", undef, Qt::Application::UnicodeUTF8() )]); + $self->{textLabel1_5}->setText( Qt::Application::translate( 'MuSRFit4', "Minimization type", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_5_2}->setText( Qt::Application::translate( 'MuSRFit4', "Error estimation", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{fittingPage}), Qt::Application::translate( 'MuSRFit4', "Fitting", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{buttonGroupSharing}->setTitle( Qt::Application::translate( 'MuSRFit4', "Shared parameters among different runs", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp1}->setTitle( Qt::Application::translate( 'MuSRFit4', "1st Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp1ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp2}->setTitle( Qt::Application::translate( 'MuSRFit4', "2nd Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp2ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp3}->setTitle( Qt::Application::translate( 'MuSRFit4', "3rd Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp3ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{sharingPage}), Qt::Application::translate( 'MuSRFit4', "Sharing", undef, Qt::Application::UnicodeUTF8() ) ); + my $initParamTable = $self->{initParamTable}; + if ( $initParamTable->columnCount < 4 ) { + $initParamTable->setColumnCount(4); + } + + my $__colItem = Qt::TableWidgetItem(); + $__colItem->setText( Qt::Application::translate( 'MuSRFit4', "Value", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 0, $__colItem ); + + my $__colItem1 = Qt::TableWidgetItem(); + $__colItem1->setText( Qt::Application::translate( 'MuSRFit4', "Error", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 1, $__colItem1 ); + + my $__colItem2 = Qt::TableWidgetItem(); + $__colItem2->setText( Qt::Application::translate( 'MuSRFit4', "Min", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 2, $__colItem2 ); + + my $__colItem3 = Qt::TableWidgetItem(); + $__colItem3->setText( Qt::Application::translate( 'MuSRFit4', "Max", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 3, $__colItem3 ); + if ( $initParamTable->rowCount() < 1 ) { + $initParamTable->setRowCount(1); + } + + my $__rowItem = Qt::TableWidgetItem(); + $__rowItem->setText( Qt::Application::translate( 'MuSRFit4', "Alpha", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setVerticalHeaderItem( 0, $__rowItem ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{initializationPage}), Qt::Application::translate( 'MuSRFit4', "Initialization", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupTitle}->setTitle( '' ); + $self->{titleLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Enter the label (defaul is run title from the first run)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Title line for MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Title line for MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setText( '' ); + $self->{fileNameLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Enter [name] for output [name].msr file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileName}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Name of the produced MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileName}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Name of the produced MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{msrPage}), Qt::Application::translate( 'MuSRFit4', "MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fourierBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Fourier transform parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{funits}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gauss", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Mc/s", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fplot}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "power", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "real", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "imag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "real_and_imag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "phase", undef, Qt::Application::UnicodeUTF8() )]); + $self->{textLabel1_3_8}->setText( '' ); + $self->{textLabel1_7}->setText( Qt::Application::translate( 'MuSRFit4', "Phase:", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fplotLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_4}->setText( '' ); + $self->{fapodization}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "STRONG", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MEDIUM", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "WEAK", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "NONE", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fapodizationLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Apodization", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_3}->setText( '' ); + $self->{textLabel1_2}->setText( Qt::Application::translate( 'MuSRFit4', "to", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_6}->setText( '' ); + $self->{textLabel1_3_5}->setText( '' ); + $self->{textLabel1_3_7}->setText( '' ); + $self->{textLabel1}->setText( Qt::Application::translate( 'MuSRFit4', "Range: from", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{label}->setText( Qt::Application::translate( 'MuSRFit4', "Units", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{rrfBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Rotatting reference frame (RRF) parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Phase", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6}->setText( Qt::Application::translate( 'MuSRFit4', "Frequency", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_2_4}->setText( '' ); + $self->{rrfFrq}->setText( '' ); + $self->{textLabel1_6_2_3}->setText( '' ); + $self->{textLabel1_6_2}->setText( Qt::Application::translate( 'MuSRFit4', "Packing", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{rrfUnits}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "kHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Mc/s", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "G", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "T", undef, Qt::Application::UnicodeUTF8() )]); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{fourierPage}), Qt::Application::translate( 'MuSRFit4', "FFT/RRF", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist0}->setTitle( '' ); + $self->{textLabel2}->setText( Qt::Application::translate( 'MuSRFit4', "t0", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_3}->setText( Qt::Application::translate( 'MuSRFit4', "Bg1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Bg2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Data 1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Data 2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist1}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist2}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist3}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist4}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0Update}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Use musrt0 to set values", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0Update}->setText( Qt::Application::translate( 'MuSRFit4', "Update", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{t0Page}), Qt::Application::translate( 'MuSRFit4', "t0/Bg", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{theoryBlock_Label}->setText( Qt::Application::translate( 'MuSRFit4', "THEORY Block", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersList_Label}->setText( Qt::Application::translate( 'MuSRFit4', "Parameters List", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_6}->setText( Qt::Application::translate( 'MuSRFit4', "=", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{addConstraint}->setText( Qt::Application::translate( 'MuSRFit4', "Add", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_3_4}->setText( Qt::Application::translate( 'MuSRFit4', "FUNCTIONS Block", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_3}->setText( '' ); + $self->{resetFunc}->setText( Qt::Application::translate( 'MuSRFit4', "Reset", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{tabPage}), Qt::Application::translate( 'MuSRFit4', "Constraints", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileMenu}->setTitle( Qt::Application::translate( 'MuSRFit4', "&File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{actions}->setTitle( Qt::Application::translate( 'MuSRFit4', "Actions", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parameters}->setTitle( Qt::Application::translate( 'MuSRFit4', "Parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{options}->setTitle( Qt::Application::translate( 'MuSRFit4', "Options", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpMenu}->setTitle( Qt::Application::translate( 'MuSRFit4', "&Help", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileToolBar}->setProperty("label", Qt::Variant( Qt::Application::translate( 'MuSRFit4', "File Menu", undef, Qt::Application::UnicodeUTF8() ) )); + $self->{actionsToolBar}->setProperty("label", Qt::Variant( Qt::Application::translate( 'MuSRFit4', "Actions Menu", undef, Qt::Application::UnicodeUTF8() ) )); +} # retranslateUi + +sub retranslate_ui { + my ( $muSRFit4 ) = @_; + retranslateUi( $muSRFit4 ); +} + +1; \ No newline at end of file diff --git a/src/external/MuSRFitGUI/icos/Append.odg b/src/external/MuSRFitGUI/icos/Append.odg new file mode 100644 index 0000000000000000000000000000000000000000..070faea887c5a0d8271c2ddfb9e21ea94714b3fb GIT binary patch literal 10937 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 literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Append.png b/src/external/MuSRFitGUI/icos/Append.png new file mode 100644 index 0000000000000000000000000000000000000000..e799c7bb8520fef116f250c02608253416c328ab GIT binary patch literal 404 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 literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Export.png b/src/external/MuSRFitGUI/icos/Export.png new file mode 100644 index 0000000000000000000000000000000000000000..eadae1401cad8faca5fdb8762b6efaa6e45a56fd GIT binary patch literal 374 zcmV-+0g3*JP)Pnf-!&SXnXRmi{3;%+YL>~c7J$F(@M|ta z0RPoNxAu%xP`0X1l3_@0ga+U0v0!1Hu(;wa}YZITrroyDOOnwmOi)a|4y#N3J literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Fit.odg b/src/external/MuSRFitGUI/icos/Fit.odg index 538821986e39d3d881d69d7f13728f3a48e673ac..57b22fcbd477da83073030e441689e3b3e499b27 100644 GIT binary patch literal 11811 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 n)%5Rh@JGVN|2|dVot)p|s)_@bh literal 11570 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 diff --git a/src/external/MuSRFitGUI/icos/MuSRFit.odg b/src/external/MuSRFitGUI/icos/MuSRFit.odg index 4ac0254cc7fdb23954cac80344cc7c1bad05cbc6..a3365d8b957bff449e8a3820446dcb8066c56aec 100644 GIT binary patch literal 13391 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 literal 15336 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 diff --git a/src/external/MuSRFitGUI/icos/Plot.odg b/src/external/MuSRFitGUI/icos/Plot.odg index 902d076e9063f987a9db34538b3ff265b40ae538..c550f2e67fe82beea982574b5acbe59399d53524 100644 GIT binary patch literal 12961 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

nz(S+>@gXBW-G&^&*`fhVd?ani}Y_ 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 F`+wj3H&p-t diff --git a/src/external/MuSRFitGUI/icos/chdir.png b/src/external/MuSRFitGUI/icos/chdir.png new file mode 100644 index 0000000000000000000000000000000000000000..35755c4b533e62dce89621c2b6233e7172c6a0b8 GIT binary patch literal 3623 zcmV+?4%qRDP)`^=on z%sDR?eG76|L_0* z)`I`%kNUrQ@#^x5`mNviva`CN+MSj^e`M|G+|p9FC1U2&QM{9iN- z7khtit$l6n;b&&{asMZR`?V*Juz77?KlbS}?MEJeV(#7}N4v(Dm3F7I(pz3yb};vf z&5yQQ!J#nly4DmuSJMkT9Vm>OWuB87$5T$I1J~ecFoAwUL|!}iuDb?ssHNCSM1Ad7 ze>(ikXP=(;Ja=XJ(DFU=3-fD^>)qd7UODDyj%cNhbmrz49M_2yv^7&Qi z9u7nQ%zUSHGzh$&)+|PW=W8#}PS8bbU2#;(C4!8uBa(xHq9{m`j3jqZ{v54#M90nX zlm!eT7O@s<6#`0-j|U(KLhgU?;ln?5=FHzb`P36nwj*D=jzZM|*2{5FT7lTv;BAi0 z2Y|4o!|^et>p;j5v&QMec!#I^;tsvno=pX#kXg+X(=rv{EQW+iwvqJ=DacZzu2v zAAFE2SFVt+KDlz@sV_b4&fgd9m=%)XBzpM?!h1hW*!?7q<6cXx;V!9H1XV3orB}c6WE__xr?gOr96mqNr$X%L-Jo*(g>ep=BjN zL|j{>cLyLz5&)IwdDr)SUnx~JU75e}c!U62DMW;#C@6{or4+^(hQlFo923VegTbH# zoR6De%TH4UUe%y!V5vY@x5!2}#CBU0T3=sBMC{hq*7-C|p`uBWB<$_&v9Ym%H3p>= zVl72cRKW<=m}Z|Qm^yG_3P72C)p*7PfGsQH7wM29PwyOnwU(D&dWox7uf97PjmA>_ zT|69;Bnjj380|PsfQX>9ZZy2gVDr5OH&L5O!x>*shHu}ZCn0EF%1n|l$ukh_} ze|x{*?_V&cEN|fZ%+1f!YPE1(x2Zr9$MpC1*sIs>E_=JX3>R_67som^{AP@( z>C#AVT>%l=fv1kF9b#7&?~XzM*(m1x57sxgw>Gagnhu0P(3HC7dY0$qN>fHjLXsqm zMkA6WVHn3`X*x@v8Sa~Ezp4V|yEK5~xOWd==gRwhfBl_wYvbBZp67@a(lkXodIms4 z4VXA-`D3Cw%_G%e#!eJRCf{oi)>g-|10(evQRtE5J!mDF#ycB1I`>mlKt%>iDQBw zB+D{f*KJHJP0LwDJ5Jdjj)U)c1VKO$1cYIT;}m#i#N@0z$@;YZH`y=0tD9Bejwtj; zfB79)_O-TShJ!vL!e~6gb3KePWyZ6N(P+eQIAkywus;|us8*6BjMJ1fOD9xg!uh%a zwxQ1SXGJ@8=SHRg2MB=9s~7T~Ez)S53^3MGrBS)c;nQTAt@6^{9uq zDGF5;u+tT=(g=n+0N_>>(pAuI6?gzdK=A09lP5oMZ1oY7^(peA8jWe1csg5(iL)}* z$N+^nZ1=|;>PC~%d4@_B(*P(d0id;WO8~0+?N0?ARx1G9pMB!g$rrx*rLRA7s(140 zu+M0e%rtRb0bBV)-N<%I)9Xx*ZNR_(=S2j?iNkKG|2Jg5q?0j%h*f0)Ze9UZWw=vk zx&q==%LUZKr#|tiPaf+%)>>G_*Gt4nf(XsYODRPdMU%sfwJ5-IT^!dfZ|YPzMq6Ne zkhA{7%N$?5Z{o(*&QfPmf%0xe&EW7ZZZCL_dziY17ON)F(N*!*Sy1W17ln5!vs z0|09s5e3Sj(}}o#?FvyCH30IWAkVU9L#0%8H7}Z?lZCZq4Js4~XNqQ6O72>Woe|cRH#((1c;*8AVZ$WqCDv%dC7J z^Z+ARvC&}ndXSB05BAd(5+DZpz~TY^*A;N3I)sE#NRg*lQ>%{PI2y)4?>O?jRN z3dW-rVG!WCZh5{yntLDB@ZVN@%8UnCYr`TP`y%F+000cIUjgYIppr6H+*&fV*7&YM zsoFiKZ~m%LL4j5p9KrW|!Z0KZ13cfy%k!#YdJ?#uuE6BCsVHP^;i=mgB}}zyNv#2B zYprV=6%gh+Ej-VwG+L$vVgjJ9hD==>miNrFha4pb`7a06$P;kUA8uq0&;?e2)`1FW zTU7u+YYjHz+SMy8EcS3+w>gE?H*%mW5VZ$zU@EO{9cHOAqd?Y5Nhz_O0#|8XG-Es-G1%W@ zXX_fn{uYD14YJVy#E=)3QEEsFL2&4LtB9;N!J10<>tzKN4;|U)uCDz_cjd@WcCTOh zPykXj@daRkSx+b_gfK`AacWRnVUp`?Ui$!3WDNJW$&x*a@gA;>Sab}ByU;lj;JXpy zG-qRbz}3xt`oj_9)Zo*>T0u32HOagPEG!?rynO8R*N>e3rGHGe-?2-_KYLqEyb1hh z3WPtQP~D3Pr8K=@$fX~B2Zf~*IkX~|R@cM#A{iXf1@}l=7m3M}Fo9ADB^T*rY{oWhJd+%SA zKY0GRFI$mQYN}xcMQ3U4{kfGBFSJj7{#zehSm)UBM{XMEhn>hq!24A*XTVBP*xZOR zEBV{Hr&DG78qw06+0FRmXXuHU-s`mOi8u>HE@x6ZlI!aJGjT>kan{NvH<|M9I5 zSO)F^dP=FRq)|VaU^T9X%?qz%Z z@}uFI-}~CnE#I>|a{Sg?!QAo%x3#n*CO5r%PJhIf{`L=U_a!$;N(~|(=jLVOFPnDjaA4iJzrFwT z7tY<~zW?h_eb#n@sH2{F_N&gH{nbC;@h1NbsL$D@CGS9}0000YdQ@0+Q*UN;cVTj6 t004N}D=#nC%goCzPEIUH)ypqR2LLwM23QbN%3J^d002ovPDHLkV1m!n5Gw!x literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/exit.png b/src/external/MuSRFitGUI/icos/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..0237eac069cfdd6d1c61b22f2248c2ec2a8f5905 GIT binary patch literal 2073 zcmV+!2RP)- zl~wsCMKtR8pZn96hnW0_j8i}aR8$BXkTPN z13ljSXn#KogM(yKsjUdXvK&x=&@?n%$GmwHb8>Rg;#G#$F-&8*zOp1S(3Gh@7a6czI52>sGoRdkifc1|i6&QcQpOCCawzqM-mG#Nwbd zk){ry6iO+Sl!!8n!A0uQ#c_yk+QhmC9&k|r^kkBmufIl`rth@ym#9IYyk6blE!zRl zFey<&R2y1{w@8VSvaue=arJoAs*QNCtpy~OcA%`pi-xE*xMqyr-cEe`c8U`d^_|c( zl0!pS)6kC@LvIHZR~UQHZiK6|4jS*hMJBn)~mk`@jKW0|TVreHUuWZh74L zXPzP4)y3?$-!lEh7g&>%P=l=U*1Xdcs<)7yNYH!e5S@=af}Tj=?H8(E;wy#Fbt1jJ z^gi_z$vu0xaq1MtrAr`$n;SutTcD8E+;&w_7NC=o5Be822{YQ?F92^AOuF%HIBM*g@H~%5plNg;JV?j>{Rmz6$2#-#STi&A zcUH^7ymhOpExK_dcfI^FZJRf{B{o3WR+6~613?5lM;wRtp&_~-eYDE>!q^zsPn^KG zcoDS4s-0qy%=_;%{rTs}Qps3KI8vf)o5YSC zBzErf`|X7VZhiP6`OBBxhDPu!g%AQ+D3Ja5WB&g6XTM92#prnGA+$)utzcf@nn>$q z)T5CQB=_z`kH`HX3%~yA8zah5Gt+5|3l|XKFlZXarAw$%$v4WLnPK|eIg&#|Xt5Xo ziQT)2^z=}gn5fdVat8v@(4$de+qPA@ZJXTr^T>SO&4;p+#^@+xufOi*f>J2cL|Inl zP^M`ZqoWkY#z^eiq`L3HCrN@HVgH47ryz>(JWfxxb)MWci}JN+)lFes(deu))c zp%;=5Xfck%dClnW*+mFUp8kfo&N6I3a|40(Kvk z_d-*JK!A(VFp!4fckAu#=+P*}t5>n-=8%QLqW6V*#)C_ls(i96?8!-&hO|~9TPmYL zCuE^O@y|ai4#eX`@4g%J#tonIo&n9S_`m>(y?cFK_UtUBt5?x##;wc&k3Lc<PtC z{QbiZl{YJ(>(C+M_uNz0NUeO;KI@uB&$G|c*5B{z$zQyPdF4vgoRuRGNMKnkQks}x z>hx*ysgyq?wqpkyj~*r5-tI5l$Z+qu?Ay1bYI}B;>|1X!dEx}Zqhl=# znn+7I5OhGRxzGRf6XVZ6&(z72*wfRks6*K{#*aUee(5Eqjva%1ev#f*_kpGe1Qj-l zjx|0`=ExD|&YYq1@L>`oBZN0?LW{)^y6zswP17v|qod59J4f!5Pq1&@YN)r>eW0bo zTre8-jspOgCdPN)kw1T)a9dhHrNJO5L3!r00000NkvXXu0mjf DS+oXE literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/save.png b/src/external/MuSRFitGUI/icos/save.png new file mode 100644 index 0000000000000000000000000000000000000000..d43622c2546755dae427552f1e3f49e62d4d651f GIT binary patch literal 1646 zcmV-!29f!RP)NtVT%}qq)3~)tNUmadhkxeD|^B;+iCnJ1fV6D8Z#glDC z4xOZt@fF~g2Wy9KRMqn$(o@yYx{xu#8|Qu?MLcT?=aEsbTR0S@mnFPmLj3YS+ea^3 zRegPgZ2P0}F;ta}jhA`vr|-$Vd;jM8KR=6NL^Nolf#pVlHZq72q>g|QjfspZFgf~w z7$a}K`8_UQz9KjOb(0%6K9|G@>#I3=Vp*~QKq1c(l3?ai)ffR0*xTFV>C>lt`^`7% zL*T8~&+x&OpK*|xmJAW$(@(zTW>k!st+5FN4BOk={PuUhiG#s_s`9$FlF5bdzj~md zE6?B)+N%CNhhVo&?9Ta81a=~N;y-l-8W5B z#F)A7n}6k!A;&at(q*wRhAhvPPNs`}I}uQAYQd2mW^dR<9I3NT2Xk~H5M#uZt|l?h z9y;;o)Wsq~p63{AmqWlBLvN+m<(AHnxyT-q0J7{(s5`p3PzaRHEj0%6JX@X%i7}*U zdQ4r-2h*VjbSEG}l63RB<6wztG~#_&sHCG47g%dMRpO2WAcQbkN1ftg8U)+H|2q>f z#?b36H;r~BKbNguMCzP(&$$RV=MG+PoCs9wJ?Fr4T}VXO`s<(7mt~xlpBHJR7$blG z$KO=u=!xbc;49DFyLTrKNK$Led%qCjMPO%VhlgK(%|ZyMDi!Rh`P%Ce+%j>=agnIX;0p`Z$?a+v>BQLU8}V{G1`2pUDxG(Fx-{5(w4h=|Z` zs;X#=RHa8Xl4f=6JbC<-s)~rnfiXgeHU6=mhf({u`niZJEvuyho9;RI9_=PUM#0#wPfY>Y%5v{R&%Hn!UT0#29!Kv_Bl z#s0zZBofw6F8l|X_Q3y_G}O-|P&jsX2P2KxFbP$~nkkiBKn!R+JU&qZs!CZn3ilcwAXg3`(rEtgUab+Uv2J=j3^cF$UF0dg8u;;Bh0S9S3D2^001I-R9JLVZ)S9NVRB^v s0C?IfFE7{2%*!rLPAo{(%P&d?05;eLSP)anTmS$707*qoM6N<$f(?Baod5s; literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/saveMSR.png b/src/external/MuSRFitGUI/icos/saveMSR.png new file mode 100644 index 0000000000000000000000000000000000000000..59fcdc4336d3f605c723d3f06b44970a7bade416 GIT binary patch literal 2587 zcmV+$3gq>PP)F3t_dk1rM)Jlik`#F0JA*?0c?-#HG5qf zgV~yo*I)YsE}TDS?{W7QyaL_2`nFeg?%X*V;`SmYLYRlX`K`NWW@g0I>8nsuVQ}z9 z0KkHB8AD5NLT^tul$4z%A_QQ6PC`}~ArZ$P5CYO&5JEsW0w2uQQC?6+z1B!P+iwK& z-FN;z%*>JSyrdbCnx2_~?*|C<90qYi0+^JdBY_CN$PyC{ZA45u0gGzN}PwRtwRbZDZp**zbVb+m?I@q=OS_$06>pd#1Mc7WA{F=b5{maE`d-z`wt!f z0NlT0X9ApZ1OT8=Q~-d$Hz^S}PYa&PB}zmIf((EdP%7WQ_8oXO!b2$&l4O(_X&sM%95f9lD-*s=W^nfreF)RXO!g8$hYn%yoohi1luO;Y z5Bbs;?z9VP-q`2Y0N`lRot~`&3~Y>lZsUO3P*b{2((%`X8pyrfAReM z2&7|dt2S|^iW>&X^CGagznnO~G&vmsX17>z)99mSh;o5Hxa)r4+5Pz@ly>5;Y~7l9 zz<6aETBpoJTXP6pZ`YPA?n^`--NN*C@BUtkw4dhh#6-ZhEnD%+7Y+je#x7mKAK&;3 z0AN>a-tXMCs2w|jT^rZ6B(ZF;ANyWDfwbr!=%D#+TehM^ZA=JhXL09`KmG*n+5A-$ z4dJdkKAB0{?z-bP2ZW;#czS#?5fd4}%8xB>g1vVg-n}r{lxPR*-L`oPz|>(OOL-G9 z+fKFzCX6;F<)}J}HbFeXgr?=Ly>qUTHN6%l^ys6HyVIdEE%nvQ2eEqjU^Euwqzh?hPLqqbBfmOo zv9!%b^IZTZ-+BX=CMxjjwPuDGo45C|N0Qm&zNe$(+gC1Wshy{Pl)P_E?D*}IZ(-BM zQ5-$?QW8(QD3rFZ@Z9qx{`JqXmOHNxE>{wpllwMp!jYp#+dAcz(M{kh??>j5HZRXp z89Yaiy_5;fWWss9M5Z`!z0i-fYI7^V?boG zD{%}@lsFzf+p%dfO>GV^sM&1`S6 zG!wPeKxg3heR&(!es*m$dZZScYtbPyM2F5ve5=JbJbitWZGyzw;|vu z57JW!HA^X>lxmhr9PkiaNKT~cjNzuAh+vF?k_u8ufbHrpJq1sBxp*Y$b{c4HLk0$o zdIMVP2;fhi_%Uj=dSu*w5I_jv`wu_t3SqWFZMTP<(10-p#u!K`o!JSnV1Na{6y0}C zKG2SUfPnH8lv4Jk%(!@QJmH*y)@U>uku%3NKtxdwwWPIjMzB9EezSNz7+Nl8s9^ zJdZngNJ?w%h!6}BKut2_=7pv4Fum61I(+~VZb#I@Mj6oBf@(CH&K?Jy?%^CV21X|} z#BNTgDPn>YvXc|H4x^F;Jf-YHqqPNLOw;kekx6N-n{#4X2u&$8Clg84&JWiCVrpin zLO>}6f3AUIv8z*Es5Jp&1nRXK>h%VE-v<$4c5cprv0FePt%Pc|S_W(@Ekwk$-Cia& zVDU8SwJ2hB&;XwVcujsuoZ%G;ATkJo0LB>f_4Z-%%4INF=}RIEELwyh2qIviz32Hy zs3oHfwA9fiiWx9uBCz#(9i`F&%+1xpZwN9>eBuP;<*BLR{=UB73V}~&HDEwSLu*Sw zYmFZ~^25kELvUJaOixcIq#H^#9i8GfZj5#rw9^(-LfX~pjB{uY07?LA08ByyXV0Ij z_m<1wT{`s9=RD85C8+@dAR_zLS|bR8M5v4}SUTEiQO1nY$(b<*+GwQ9ocZN^0{{a6 zDgek!56@JqwbNr`2X0=rY)@CQxUgBnF{oB&F?o5?<}FTgY1ML8b+$V%!Ddm*!2XBVv1Ax;6d;pUG-u8pw9~19ay2A$!4GqaptXj2r)v8r}eSLji zS65e|P$(#+l;^+;XC9K7r4WLdSx70FnaQ0qGi$B2@qIt2R;zPUQ&SB9SKm8*db(Dt zwfi>300ICr0H)kAixwX}lymU-19`=Y6J-kLIg|gTJWIj=&@Kw`zX89>)jL|FXa@iQ002ovPDHLkV1oGE!EFEl literal 0 HcmV?d00001 From 7f1691800708206a9d4814eafecf19f5e9b257a7 Mon Sep 17 00:00:00 2001 From: Zaher Salman Date: Thu, 23 Mar 2017 17:24:19 +0100 Subject: [PATCH 17/43] Ported MuSRFit GUI to qt4. May need more debugging. --- src/external/MuSRFitGUI/MuSRFit4.pl | 17 + src/external/MuSRFitGUI/MuSRFit4.pm | 1107 ++++ src/external/MuSRFitGUI/MuSRFit4.ui | 6096 ++++++++++++++++++++++ src/external/MuSRFitGUI/Ui_MuSRFit4.pm | 3438 ++++++++++++ src/external/MuSRFitGUI/icos/Append.odg | Bin 0 -> 10937 bytes src/external/MuSRFitGUI/icos/Append.png | Bin 0 -> 404 bytes src/external/MuSRFitGUI/icos/Export.odg | Bin 0 -> 10837 bytes src/external/MuSRFitGUI/icos/Export.png | Bin 0 -> 374 bytes src/external/MuSRFitGUI/icos/Fit.odg | Bin 11570 -> 11811 bytes src/external/MuSRFitGUI/icos/MuSRFit.odg | Bin 15336 -> 13391 bytes src/external/MuSRFitGUI/icos/Plot.odg | Bin 14709 -> 12961 bytes src/external/MuSRFitGUI/icos/chdir.png | Bin 0 -> 3623 bytes src/external/MuSRFitGUI/icos/exit.png | Bin 0 -> 2073 bytes src/external/MuSRFitGUI/icos/save.png | Bin 0 -> 1646 bytes src/external/MuSRFitGUI/icos/saveMSR.png | Bin 0 -> 2587 bytes 15 files changed, 10658 insertions(+) create mode 100755 src/external/MuSRFitGUI/MuSRFit4.pl create mode 100644 src/external/MuSRFitGUI/MuSRFit4.pm create mode 100644 src/external/MuSRFitGUI/MuSRFit4.ui create mode 100644 src/external/MuSRFitGUI/Ui_MuSRFit4.pm create mode 100644 src/external/MuSRFitGUI/icos/Append.odg create mode 100644 src/external/MuSRFitGUI/icos/Append.png create mode 100644 src/external/MuSRFitGUI/icos/Export.odg create mode 100644 src/external/MuSRFitGUI/icos/Export.png create mode 100644 src/external/MuSRFitGUI/icos/chdir.png create mode 100644 src/external/MuSRFitGUI/icos/exit.png create mode 100644 src/external/MuSRFitGUI/icos/save.png create mode 100644 src/external/MuSRFitGUI/icos/saveMSR.png diff --git a/src/external/MuSRFitGUI/MuSRFit4.pl b/src/external/MuSRFitGUI/MuSRFit4.pl new file mode 100755 index 00000000..61dd0118 --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.pl @@ -0,0 +1,17 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use QtCore4; +use QtGui4; +use MuSRFit4; + +sub main { + my $app = Qt::Application(\@ARGV); + my $musrfit = MuSRFit4(); + $musrfit->show(); + exit $app->exec(); +} + +main(); diff --git a/src/external/MuSRFitGUI/MuSRFit4.pm b/src/external/MuSRFitGUI/MuSRFit4.pm new file mode 100644 index 00000000..2bb46742 --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.pm @@ -0,0 +1,1107 @@ +package MuSRFit4; + +use strict; +use warnings; +use QtCore4; +use QtGui4; +use QtCore4::isa qw( Qt::MainWindow ); +# This is redundant +#use QtCore4::isa qw( Qt::Widget ); +use QtCore4::debug qw(ambiguous); +use QtCore4::slots + fileOpen => [], + fileSave => [], + fileChangeDir => [], + filePrint => [], + fileExit => [], + parametersExport => [], + parametersAppend => [], + editUndo => [], + editRedo => [], + editCut => [], + editCopy => [], + editPaste => [], + helpIndex => [], + helpContents => [], + helpAbout => [], + CreateAllInput => [], + CallMSRCreate => [], + UpdateMSRFileInitTable => [], + ActivateT0Hists => [], + ActivateShComp => [], + InitializeTab => [], + TabChanged => [], + GoFit => [], + GoPlot => [], + ShowMuSRT0 => [], + t0Update => [], + RunSelectionToggle => [], + fileBrowse => [], + AppendToFunctions => [], + InitializeFunctions => [], + t0UpdateClicked => []; +use Ui_MuSRFit4; + +sub NEW { + my ( $class, $parent ) = @_; + $class->SUPER::NEW($parent); + this->{ui} = Ui_MuSRFit4->setupUi(this); + my %All=CreateAllInput(); +} + +# This file is part of MuSRFitGUI. +# +# MuSRFitGUI is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# MuSRFitGUI is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with MuSRFitGUI. If not, see . +# +# Copyright 2009 by Zaher Salman and the LEM Group. +# + +sub fileOpen() +{ + my $file=Qt::FileDialog::getOpenFileName( + ".", + "MSR Files (*.msr *.mlog)", + this, + "open file dialog", + "Choose a MSR file"); + print "Selected file: $file\n"; +# TODO: Possibly decipher the MSR file and setup the GUI accordingly +# Find run numbers, beamlines etc. +# Get theory block and understand it +# Get parameters list and update table + +} + + +sub fileSave() +{ + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}.".msr"; + my $file=Qt::FileDialog::getSaveFileName( + this, + "Save file", + "$FILENAME", + "MSR Files (*.msr *.mlog)"); + +# If the user gave a filename the copy to it + if ($file ne "") { +# TODO: check if the extension is correct, or add it. + if (-e $FILENAME) { + my $cmd="cp $FILENAME $file"; + my $pid=system($cmd); + } else { + if ($file ne "") { + my $Warning = "Warning: No MSR file found yet!"; + my $WarningWindow = Qt::MessageBox::information( this, "Warning",$Warning); + } + } + } +} + +sub fileChangeDir() +{ + my $newdir=Qt::FileDialog::getExistingDirectory( + this, + "Change work directory", + "./", + ""); + chdir ("$newdir"); +} + +sub filePrint() +{ + +} + + +sub fileExit() +{ + my $Ans = Qt::MessageBox::question( this, "Quit?","Are you sure you want to quit?","&Yes","&No","",0,1); + if ($Ans==0) { +# Then quit + Qt::Application::exit( 0 ); + } +# Otherwize go back +} + +sub parametersExport() +{ +# Exports the fit parameters for a table format file +# This works only after a fit call, i.e. a plot call is not sufficient! + my %All=CreateAllInput(); +# Add also a flag for header + $All{"Header"}=1; + my $FILENAME=$All{"FILENAME"}.".dat"; + my $file=Qt::FileDialog::getSaveFileName( + this, + "Export parameters to file", + "$FILENAME", + "Data Files (*.dat)"); + +# If the user gave a filename the copy to it + if ($file ne "") { + my $Text = MSR::ExportParams(\%All); + open( DATF,q{>},"$file" ); + print DATF $Text; + close(DATF); + } +} + + +sub parametersAppend() +{ +# Appends the fit parameters for a table format file +# This works only after a fit call, i.e. a plot call is not sufficient! + my %All=CreateAllInput(); +# Add also a flag for header + $All{"Header"}=0; + my $FILENAME=$All{"FILENAME"}.".dat"; + my $file=Qt::FileDialog::getOpenFileName( + this, + "Append parameters to file", + "./", + "Data Files (*.dat)"); + +# If the user gave a filename the copy to it + if ($file ne "") { + my $Text = MSR::ExportParams(\%All); + open( DATF,q{>>},"$file" ); + print DATF $Text; + close(DATF); + } +} + + +sub editUndo() +{ + +} + + +sub editRedo() +{ + +} + + +sub editCut() +{ + +} + + +sub editCopy() +{ + +} + + +sub editPaste() +{ + +} + + +sub helpIndex() +{ + +} + + +sub helpContents() +{ + +} + +sub helpAbout() +{ + my $AboutText=" +This is a GUI that uses the musrfit binary to fit +muSR spectra. + +MuSRFitGUI is free software: you can redistribute it +and/or modify it under the terms of the GNU General +Public License as published by the Free Software +Foundation, either version 3 of the License, or (at +your option) any later version. + +MuSRFitGUI is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public +License along with MuSRFitGUI. If not, see +. + +Copyright 2009-2017 by Zaher Salman +. +"; + my $AboutWindow = Qt::MessageBox::information( this, "About MuSRFit GUI",$AboutText); +} + +sub CreateAllInput() +{ + my %All=(); + +# From RUNS Tab +# Run data file + $All{"RunNumbers"} = this->{ui}->runNumbers->text(); + $All{"RunFiles"} = this->{ui}->runFiles->text(); + $All{"BeamLine"} = this->{ui}->beamLine->currentText; + $All{"RUNSType"} = this->{ui}->manualFile->isChecked(); + $All{"YEAR"} = this->{ui}->year->currentText; + if (!defined($All{"YEAR"}) || $All{"YEAR"} eq "") { +# If year combobox is empty fill it up from 2004 up to current year + my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); + my $current_year = 1900 + $yearOffset; +# my @years = ($current_year..2004); +# this->{ui}->year->addItems(@years); + for (my $i=$current_year;$i>=2004;$i--) { + this->{ui}->year->addItem($i); + } + } +# Time range and BINS + $All{"Tis"} = this->{ui}->tis->text; + $All{"Tfs"} = this->{ui}->tfs->text; + $All{"BINS"} = this->{ui}->bins->text; + $All{"FitAsyType"} = this->{ui}->fitAsyType->currentText; + $All{"LRBF"} = this->{ui}->histsLRBF->text; + my @Hists = split(/,/, $All{"LRBF"} ); +# Lifetime corrections in enabled/visible only for SingleHis fits + if ( $All{"FitAsyType"} eq "Asymmetry" ) { + this->{ui}->ltc->setHidden(1); + } + elsif ( $All{"FitAsyType"} eq "SingleHist" ) { + this->{ui}->ltc->setHidden(0); + } + +# From Fitting Tab +# Plot range + $All{"Xi"}=this->{ui}->xi->text; + $All{"Xf"}=this->{ui}->xf->text; + $All{"Yi"}=this->{ui}->yi->text; + $All{"Yf"}=this->{ui}->yf->text; + $All{"ViewBin"}=this->{ui}->viewBin->text; +# Life time correction + if (this->{ui}->ltc->isChecked()) { + $All{"ltc"}="y"; + } else { + $All{"ltc"}="n"; + } +# Minuit commands + if ( !defined($All{"go"}) || $All{"go"} eq "" ) { + $All{"go"}="PLOT"; + } +# Get minimization process + $All{"Minimization"} = this->{ui}->minimization->currentText(); + $All{"go"}=$All{"Minimization"}; + +# Get Error calculation process + $All{"ErrorCalc"} = this->{ui}->errorCalc->currentText(); + $All{"go"}=$All{"ErrorCalc"}; + + RunSelectionToggle(); + my @RUNS = (); + if ($All{"RUNSType"} ) { + @RUNS = split( /,/, $All{"RunFiles"}); + } else { + $All{"RunNumbers"} =~ s/[\ \.\~\/\&\*\[\;\>\<\^\$\(\)\`\|\]\'\@]/,/g; + @RUNS = split( /,/, $All{"RunNumbers"} ); + } + +# From MSR File Tab + $All{"TITLE"}= this->{ui}->title->text; + $All{"FILENAME"}= this->{ui}->fileName->text; + +# From Fourier Tab + $All{"FUNITS"}= this->{ui}->funits->currentText; + $All{"FAPODIZATION"}= this->{ui}->fapodization->currentText; + $All{"FPLOT"}= this->{ui}->fplot->currentText; + $All{"FPHASE"}=this->{ui}->fphase->text; +# Fourier range + $All{"FrqMin"}=this->{ui}->frqMin->text; + $All{"FrqMax"}=this->{ui}->frqMax->text; + +# Rotating reference frame parameters + $All{"RRFFrq"}=this->{ui}->rrfFrq->text; + $All{"RRFPack"}=this->{ui}->rrfPack->text; + $All{"RRFPhase"}=this->{ui}->rrfPhase->text; + $All{"RRFUnits"}=this->{ui}->rrfUnits->currentText; + +# Get values of t0 and Bg/Data bins if given + my $NHist = 1; + foreach my $Hist (@Hists) { + foreach ("t0","bg1","bg2","data1","data2") { + my $Name = "$_$NHist"; + $All{$Name}=child("Qt::LineEdit",$Name)->text; +# TODO: If empty fill with defaults + if ($All{$Name} eq "") { + $All{$Name}=MSR::T0BgData($_,$Hist,$All{"BeamLine"}); + child("Qt::LineEdit",$Name)->setText($All{$Name}); + } + } + $NHist++; + } + +# Construct fittypes that can be understood by MSR.pm + my %FTs=(0,"Exponential", + 1,"Gaussian", + 2,"Stretch", + 3,"ExponentialCos", + 4,"GaussianCos", + 5,"StretchCos", + 6,"LDKTLF", + 7,"GDKTLF", + 8,"Background", + 9,"LLFExp", + 10,"GLFExp", + 11,"LLFSExp", + 12,"GLFSExp", + 13,"MolMag", + 14,"Meissner", + 15,"LGKT", + 16,"LGKTExp", + 17,"LGKTSExp", + 18,"None" + ); + + my $FT1=this->{ui}->fitType1->currentIndex; + my $FT2=this->{ui}->fitType2->currentIndex; + my $FT3=this->{ui}->fitType3->currentIndex; + $All{"FitType1"} = $FTs{$FT1}; + $All{"FitType2"} = $FTs{$FT2}; + $All{"FitType3"} = $FTs{$FT3}; + my @FitTypes =(); + my $FitType=""; + foreach $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Also theory block and paramets list + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); + $All{"Full_T_Block"}=$Full_T_Block; + $All{"Paramcomp_ref"}=$Paramcomp_ref; + my @Paramcomp = @$Paramcomp_ref; + +# Functions block + $All{"FunctionsBlock"}=this->{ui}->functionsBlock->toPlainText; +# and the associated theory block + $All{"Func_T_Block"}=this->{ui}->theoryBlock->toPlainText; + +# Shared settings are detected here + $All{"EnableSharing"} = this->{ui}->buttonGroupSharing->isChecked(); + + my $Shared = 0; + my $PCount =0; + my $Component=1; + foreach $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + +# This is the counter for parameters of this component + my $NP=1; + $Shared = 0; +# Change state/label of parameters + foreach my $Param (@Params) { + my $Param_ORG = $Param; +# TODO: I need to take care of single hist fits here + if ( $All{"FitAsyType"} eq "SingleHist" ) { + $Param=$Param.$Hists[0]; + } + if ( $#FitTypes != 0 && ( $Param ne "Alpha" && $Param ne "No" && $Param ne "NBg" ) ){ + $Param = join( "", $Param, "_", $Component); + } + +# Is there any point of sharing, multiple runs? + if ( $#RUNS == 0 && $All{"FitAsyType"} eq "Asymmetry") { + $Shared = 1; + } + elsif ( $#RUNS == 0 && $#Hists == 0 && $All{"FitAsyType"} eq "SingleHist" ) { + $Shared = 1; + } else { +# Check if shared or not, construct name of checkbox, find its handle and then +# check if it is checked + my $ChkName="shParam_".$Component."_".$NP; + my $ChkBx = child("Qt::Widget",$ChkName); + $Shared = $ChkBx->isChecked(); + } + $All{"Sh_$Param"}=$Shared; + $NP++; + } +#Loop on parameters + $Component++; + } +# Loop on components +# Done with shared parameters detecting + +# Construct a default filename if empty + if (defined($RUNS[0])) { + if ( $All{"FILENAME"} eq "" && !$All{"RUNSType"}) { + $All{"FILENAME"}=$RUNS[0]."_".$All{"BeamLine"}."_".$All{"YEAR"}; + if ($All{"BeamLine"} eq "LEM (PPC)") { + $All{"FILENAME"}=$RUNS[0]."_LEM_".$All{"YEAR"}; + } + } + } else { + $All{"FILENAME"}="TMP"; + } + + +# This has to be at the end of CreateAll + my %PTable=MSR::PrepParamTable(\%All); + +# Setup the table with the right size + my $NParam=keys( %PTable ); + +# Read initial values of paramets from tabel + my $erradd = "d"; + my $minadd = "_min"; + my $maxadd = "_max"; + my $QTable=this->{ui}->initParamTable; +# TODO: Should not go over all rows, only on parameters. + if ($NParam > 0) { +# Set appropriate number of rows + $QTable->setRowCount($NParam); + for (my $i=0;$i<=$NParam;$i++) { + # Make sure the row items exist/defined + if (defined($QTable->verticalHeaderItem($i)) && defined($QTable->item($i,0)) && defined($QTable->item($i,1)) && defined($QTable->item($i,2)) && defined($QTable->item($i,3))) { + # Take label of row, i.e. name of parameter + my $Param=$QTable->verticalHeaderItem($i)->text(); + # Then take the value, error, max and min (as numbers) + $All{"$Param"}=1.0*$QTable->item($i,0)->text(); + $All{"$erradd$Param"}=1.0*$QTable->item($i,1)->text(); + $All{"$Param$minadd"}=1.0*$QTable->item($i,2)->text(); + $All{"$Param$maxadd"}=1.0*$QTable->item($i,3)->text(); + } + } + } +# Return Hash with all important values + return %All; +} + +sub CallMSRCreate() +{ + use MSR; + my %All=CreateAllInput(); + +# Check if the option for checking for existing files is selected + my $FileExistCheck= this->{ui}->fileExistCheck->isChecked(); + my $FILENAME=$All{"FILENAME"}.".msr"; + my $Answer=0; + if ($All{"RunNumbers"} ne "" || $All{"RunFiles"} ne "") { + if ( $FileExistCheck==1 ) { + if (-e $FILENAME) { +# Warning: MSR file exists +# my $Warning = "Warning: MSR file $FILENAME Already exists!\nIf you continue it will overwriten."; + my $Warning = "Warning: MSR file $FILENAME Already exists!\nDo you want to overwrite it?"; +# my $WarningWindow = Qt::MessageBox::information( this, "Warning",$Warning); +# $Answer =1,0 for yes and no + $Answer= Qt::MessageBox::warning( this, "Warning",$Warning, "&No", "&Yes", undef, 1,1); + } + } else { +# Just overwrite file + $Answer=1; + } + + if ($Answer) { + if ( $All{"FitAsyType"} eq "Asymmetry" ) { + if ($All{"RUNSType"}) { + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSR(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + } else { +# my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSRSh(\%All); + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSR(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + +# if it is multiple runs then the produced file is a template + my $FILENAME=$All{"FILENAME"}.".msr"; + my $Extension = "_".$All{"BeamLine"}."_".$All{"YEAR"}; + if ($All{"BeamLine"} eq "LEM (PPC)") { + $Extension = "_LEM_".$All{"YEAR"}; + } + + if (-e $FILENAME) { + my $RUN0 = $FILENAME; + $RUN0 =~ s/$Extension//g; + $RUN0 =~ s/.msr//g; + my $cmd = $All{"RunNumbers"}; + $cmd =~ s/,/ /g; + $cmd = "msr2data \[".$cmd."\] ".$Extension." msr-".$RUN0." global"; + $cmd = $cmd."; mv $RUN0+global$Extension.msr ".$FILENAME; + print $cmd."\n"; + my $pid = open(FTO,"$cmd 2>&1 |"); + while () { + this->{ui}->fitTextOutput->append("$_"); + } + close(FTO); + } + } + } + elsif ( $All{"FitAsyType"} eq "SingleHist" ) { + my ($Full_T_Block,$Paramcomp_ref,$FullMSRFile)= MSR::CreateMSRSingleHist(\%All); +# Open output file FILENAME.msr + open( OUTF,q{>},"$FILENAME" ); + print OUTF ("$FullMSRFile"); + close(OUTF); + } + UpdateMSRFileInitTable(); + } + } + return $Answer; +} + +sub UpdateMSRFileInitTable() +{ + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}; + my @lines=(); + if (-e "$FILENAME.msr") { + open (MSRF,q{<},"$FILENAME.msr" ); + @lines = ; + close(IFILE); + } + this->{ui}->textMSROutput->setText(""); + foreach my $line (@lines) { + this->{ui}->textMSROutput->insertPlainText("$line"); + } + + (my $TBlock_ref, my $FPBlock_ref)=MSR::ExtractBlks(@lines); + my @FPBloc = @$FPBlock_ref; + + my $PCount=0; + foreach my $line (@FPBloc) { + my @Param=split(/\s+/,$line); + +# Depending on how many elements in @Param determine what they mean +# 0th element is empty (always) +# 1st element is the order (always) +# 2nd element is the name (always) +# 3rd element is the value (always) +# 4th element can be taken as step/error (always) +# 5th element can be +# if it is last element or there are two more = positive error, check $#Param=5/7 +# if there is only one more = minimum, check $#Param=6 + +# To summarize, check the value of $#Param + my $value=1.0*$Param[3]; + my $error = 1.0*$Param[4]; + my $minvalue=0.0; + my $maxvalue=0.0; +# for (my $i=0;$i<=$#Param;$i++) { print "$i - $Param[$i]\n";} + if ($#Param == 4 || $#Param == 5) { + $minvalue=0.0; + $maxvalue=0.0; + } + elsif ($#Param == 6) { + $minvalue=1.0*$Param[5]; + $maxvalue=1.0*$Param[6]; + } + elsif ($#Param == 7) { + $minvalue=1.0*$Param[6]; + $maxvalue=1.0*$Param[7]; + } +# Now update the initialization tabel + my $QTable = this->{ui}->initParamTable; +# print "PCount=$PCount and value=$value\n"; + if (defined($QTable->item($PCount,0)) & defined($QTable->item($PCount,1)) & defined($QTable->item($PCount,2)) & defined($QTable->item($PCount,3))) { + $QTable->setItem($PCount,0,Qt::TableWidgetItem()); + $QTable->setItem($PCount,1,Qt::TableWidgetItem()); + $QTable->setItem($PCount,2,Qt::TableWidgetItem()); + $QTable->setItem($PCount,3,Qt::TableWidgetItem()); + $QTable->item($PCount,0)->setText($value); + $QTable->item($PCount,1)->setText($error); + $QTable->item($PCount,2)->setText($minvalue); + $QTable->item($PCount,3)->setText($maxvalue); + } +# Set bg color to mark different runs + $PCount++; + } + return; +} + +sub ActivateT0Hists() +{ + my %All=CreateAllInput(); + my @Hists = split(/,/, $All{"LRBF"} ); + my $HistBox = ""; + for (my $iHist=1; $iHist<=4; $iHist++) { + $HistBox="groupHist$iHist"; + my $HistBoxHandle = child("Qt::Widget",$HistBox); + if ($iHist<=$#Hists+1) { +# Activate this histogram box + $HistBoxHandle->setHidden(0); + $HistBoxHandle->setEnabled(1); + $HistBoxHandle->setTitle("Hist # $Hists[$iHist-1]"); + } else { +# Deactivate this histogram box + $HistBoxHandle->setHidden(1); + $HistBoxHandle->setEnabled(0); + } + } + +# TODO: Set default values + +} + +sub ActivateShComp() +{ + my %All=CreateAllInput(); + my @RUNS = split( /,/, $All{"RunNumbers"} ); + +# Hide all sharing components + this->{ui}->sharingComp1->setHidden(1); + this->{ui}->sharingComp2->setHidden(1); + this->{ui}->sharingComp3->setHidden(1); + this->{ui}->sharingComp1->setEnabled(0); + this->{ui}->sharingComp2->setEnabled(0); + this->{ui}->sharingComp3->setEnabled(0); + + my @FitTypes =(); + foreach my $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Get number of parameters to determine the size of the table + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); +# For now the line below does not work. Why? +# my $Paramcomp_ref=$All{"Paramcomp_ref"}; + my @Paramcomp = @$Paramcomp_ref; + $Full_T_Block= $All{"Full_T_Block"}; + +# Possible to share only if sharing is enabled altogether + my $EnableSharing = $All{"EnableSharing"}; + if ($EnableSharing) { + my $Component=1; + foreach my $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + + +# Make the component appear first (only if we have multiple runs) + my $ShCompG="sharingComp".$Component; + my $ShCG = child("Qt::Widget",$ShCompG); + if ($#RUNS>0) { + $ShCG->setHidden(0); + $ShCG->setEnabled(1); + } + my $CompShLabel = "comp".$Component."ShLabel"; + my $CompShL = child("Qt::Widget",$CompShLabel); + $CompShL->setText($All{"FitType$Component"}); + +# Change state/label of parameters + for (my $i=1; $i<=9;$i++) { + my $ParamChkBx="shParam_".$Component."_".$i; + my $ChkBx = child("Qt::Widget",$ParamChkBx); + if (defined($Params[$i-1])) { + $ChkBx->setHidden(0); + $ChkBx->setEnabled(1); + $ChkBx ->setText($Params[$i-1]); + } else { + $ChkBx->setHidden(1); + } + } + $Component++; + } + } +} + +sub InitializeTab() +{ + my %All=CreateAllInput(); + my $QTable = this->{ui}->initParamTable; + my $NRows = $QTable->rowCount(); + +# Remove any rows in table + if ($NRows > 0) { + for (my $i=0;$i<$NRows;$i++) { +# TODO: Better remove the row rather than hide it. + $QTable->hideRow($i); +# $QTable->removeRow($i); + } + } + + my %PTable=MSR::PrepParamTable(\%All); + +# Setup the table with the right size +# my $NParam=scalar keys( %PTable ); + my $NParam=keys( %PTable ); + if ($NParam>$NRows) { + $QTable->setNumRows($NParam); + } + +# for (my $i=0;$i<$NParam;$i++) {print "Line=$PTable{$i}\n";} + + +# Fill the table with labels and values of parameter + for (my $PCount=0;$PCount<$NParam;$PCount++) { + my ($Param,$value,$error,$minvalue,$maxvalue,$RUN) = split(/,/,$PTable{$PCount}); +# Now make sure we have no nans + if ($error eq "nan") { $error=0.1;} + # Make sure items exist before addressing them + $QTable->setVerticalHeaderItem($PCount,Qt::TableWidgetItem()); + # Make sure that the row exists + $QTable->showRow($PCount); + $QTable->setItem($PCount,0,Qt::TableWidgetItem()); + $QTable->setItem($PCount,1,Qt::TableWidgetItem()); + $QTable->setItem($PCount,2,Qt::TableWidgetItem()); + $QTable->setItem($PCount,3,Qt::TableWidgetItem()); + # Fill in the values... + $QTable->verticalHeaderItem($PCount)->setText($Param); + $QTable->item($PCount,0)->setText($value); + $QTable->item($PCount,1)->setText($error); + $QTable->item($PCount,2)->setText($minvalue); + $QTable->item($PCount,3)->setText($maxvalue); + } +} + +sub TabChanged() +{ +# TODO: First check if there are some runs given, otherwise disbale + my %All=CreateAllInput(); + +# First make sure we have sharing initialized + ActivateShComp(); +# Here we need to apply sharing if selected... + InitializeTab(); + UpdateMSRFileInitTable(); +# And also setup T0 and Bg bins + ActivateT0Hists(); + +# Initialize FUNCTIONS block only if it has not been initialized yet + if ($All{"Func_T_Block"} eq "" ) { + InitializeFunctions(); + } +} + + +sub GoFit() +{ + my %All=CreateAllInput(); +# Check here is the number of histograms makes sense +# other wise give error. + my @Hists = split( /,/, $All{"LRBF"} ); + if ($All{"FitAsyType"} eq "Asymmetry" && $#Hists != 1) { +# we have a problem here send error message + my $Warning = "Error: The number of histograms should be 2 for an asymmetry fit!"; + my $WarningWindow = Qt::MessageBox::information( this, "Error",$Warning); + } else { + this->{ui}->musrfit_tabs->setCurrentIndex(1); + my $Answer=CallMSRCreate(); + if ($Answer) { + my $FILENAME=$All{"FILENAME"}.".msr"; + if (-e $FILENAME) { + my $cmd="musrfit -t $FILENAME"; + my $pid = open(FTO,"$cmd 2>&1 |"); + while () { + this->{ui}->fitTextOutput->insertPlainText("$_"); + } + close(FTO); + $cmd="musrview $FILENAME &"; + $pid = system($cmd); + } else { + this->{ui}->fitTextOutput->insertPlainText("Cannot find MSR file!"); + } + this->{ui}->fitTextOutput->insertPlainText("-----------------------------------------------------------------------------------------------------------------------------"); +# update MSR File tab and initialization table + UpdateMSRFileInitTable(); + } + } + return; +} + +sub GoPlot() +{ + my %All=CreateAllInput(); +# Check here is the number of histograms makes sense +# other wise give error. + my @Hists = split( /,/, $All{"LRBF"} ); + if ($All{"FitAsyType"} eq "Asymmetry" && $#Hists != 1) { +# we have a problem here send error message + my $Warning = "Error: The number of histograms should be 2 for an asymmetry fit!"; + my $WarningWindow = Qt::MessageBox::information( this, "Error",$Warning); + } else { + my $Answer=CallMSRCreate(); + my $FILENAME=$All{"FILENAME"}.".msr"; + if ($Answer) { + if (-e $FILENAME) { + my $cmd="musrview $FILENAME &"; + my $pid = system($cmd); + } else { + this->{ui}->fitTextOutput->insertPlainText("Cannot find MSR file!"); + this->{ui}->fitTextOutput->insertPlainText("-----------------------------------------------------------------------------------------------------------------------------"); + } + } + } + return; +} + + +sub ShowMuSRT0() +{ +# Open musrt0 to check and adjust t0 , Bg and Data bins + my %All=CreateAllInput(); + this->{ui}->musrfit_tabs->setCurrentIndex(6); +# Create MSR file and then run musrt0 + my $Answer=CallMSRCreate(); + + if ($Answer) { + my $FILENAME=$All{"FILENAME"}.".msr"; + if (-e $FILENAME) { + my $cmd="musrt0 $FILENAME &"; + my $pid = system($cmd); + this->{ui}->t0Update->setEnabled(1) + } else { + print STDERR "Cannot find MSR file!\n"; + } + } + return; +} + + +sub t0Update() +{ + my %All = CreateAllInput(); + my @Hists = split(/,/, $All{"LRBF"} ); + +# Get values of t0 and Bg/Data bins if given + my $NHist = 1; + foreach my $Hist (@Hists) { + foreach ("t0","Bg1","Bg2","Data1","Data2") { + my $Name = "$_$NHist"; + my $tmp=MSR::T0BgData($_,$Hist,$All{"BeamLine"}); + if (defined(child("Qt::Widget",$Name))) { + child("Qt::Widget",$Name)->setText($tmp); + } + } + $NHist++ + } +} + + +sub RunSelectionToggle() +{ + my $ManualFile= this->{ui}->manualFile->isChecked(); + if ($ManualFile) { +# Manual RUN selection + this->{ui}->runsMan->setEnabled(1); + this->{ui}->runsMan->setHidden(0); + this->{ui}->runNumbers->setText(""); + this->{ui}->runsAuto->setEnabled(0); + this->{ui}->runsAuto->setHidden(1); + } else { +# Auto RUN selection + this->{ui}->runsMan->setEnabled(0); + this->{ui}->runsMan->setHidden(1); + this->{ui}->runFiles->setText(""); + this->{ui}->runsAuto->setEnabled(1); + this->{ui}->runsAuto->setHidden(0); + } + +} + +sub fileBrowse() +{ + my $RunFiles=this->{ui}->runFiles->text(); + print "Runs:$RunFiles\n"; + my $files_ref=Qt::FileDialog::getOpenFileNames( + "Data files (*.root *.bin)", + "./", + this, + "open files dialog", + "Select one or more files to fit"); + my @files = @$files_ref; + if ($RunFiles eq "") { +# We started with an empty list + $RunFiles=join(",",@files); + } else { +# Add files to existing list + $RunFiles=join(",",$RunFiles,@files); + } + this->{ui}->runFiles->setText($RunFiles); +} + +sub AppendToFunctions() +{ + my $ParName=this->{ui}->cParamsCombo->currentText(); + my $Full_T_Block=""; + my $Constraint=""; + if (defined(this->{ui}->theoryBlock->toPlainText)) { + $Full_T_Block=this->{ui}->theoryBlock->toPlainText; + } + if (defined(this->{ui}->constraintLine->text)) { + $Constraint=this->{ui}->constraintLine->text; + } +# Then clear the text + this->{ui}->constraintLine->setText(""); + +# Check how many constraints (lines) in FUNCTIONS Block +# my $i=this->{ui}->functionsBlock->blockCount(); + my $fun_lines=this->{ui}->functionsBlock->toPlainText(); + my $i= ($fun_lines =~ tr/\n//)+1; + my $ConstLine="fun$i = $Constraint\n"; + this->{ui}->functionsBlock->insertPlainText($ConstLine); + +# Replace parameter in theory block with fun$i + $Full_T_Block=~ s/$ParName/fun$i/; + this->{ui}->theoryBlock->setText($Full_T_Block); +} + +sub InitializeFunctions() +{ + my %All=CreateAllInput(); + my @RUNS = split( /,/, $All{"RunNumbers"} ); + + my @FitTypes =(); + foreach my $FitType ($All{"FitType1"}, $All{"FitType2"}, $All{"FitType3"}) { + if ( $FitType ne "None" ) { + push( @FitTypes, $FitType ); + } + } + +# Get number of parameters to determine the size of the table + my ($Full_T_Block,$Paramcomp_ref)= MSR::CreateTheory(@FitTypes); + my @Paramcomp = @$Paramcomp_ref; + $Full_T_Block= $All{"Full_T_Block"}; + +# Initialize Parameters List in function block (constraints). + my $ParametersList=""; + this->{ui}->parametersList->setText(""); +# Counter for function block (with out Alpha etc.) + my $ParCount=0; + this->{ui}->cParamsCombo->clear(); + +# Possibly use the parameters block to axtract names for the dropdown menu +# this makes sense if we can use fun in map line. Check! + my $Component=1; + foreach my $FitType (@FitTypes) { + my $Parameters=$Paramcomp[$Component-1]; + my @Params = split( /\s+/, $Parameters ); + +# Alpha, No and NBg are counted in the parameters + if ( $Component == 1 && $All{"FitAsyType"} eq "Asymmetry" ) { + unshift( @Params, "Alpha" ); + } + elsif ( $Component == 1 && $All{"FitAsyType"} eq "SingleHist" ) { + unshift( @Params, ( "No", "NBg" ) ); + } + +# Add list to the constraints drop down menu + for (my $i=1; $i<=9;$i++) { + if (defined($Params[$i-1])) { + my $CParam = $Params[$i-1]."_".$Component; + if ($Params[$i-1] ne "Alpha" && $Params[$i-1] ne "No" && $Params[$i-1] ne "NBg") { + this->{ui}->cParamsCombo->addItem($CParam); + $Full_T_Block=~ s/\b$Params[$i-1]\b/$CParam/; + } +# also enumerate the parameters as should be used in the FUNCTIONS Block + $ParCount++; + $ParametersList=$ParametersList."$CParam \t is \t par$ParCount\n"; + this->{ui}->parametersList->setText($ParametersList); + } + } + $Component++; + } +# Set theory block in Constraints + this->{ui}->theoryBlock->setText($Full_T_Block); +# Then clear the text + this->{ui}->constraintLine->setText(""); + this->{ui}->functionsBlock->setText(""); +} + + + + +sub t0UpdateClicked() +{ +# Read MSR file and get new values of t0,Bg and Data + my %All=CreateAllInput(); + my $FILENAME=$All{"FILENAME"}; + open (MSRF,q{<},"$FILENAME.msr" ); + my @lines = ; + close(IFILE); + + my @T0s = grep {/t0 /} @lines; + my @Bgs = grep {/background /} @lines; + my @Datas = grep {/data /} @lines; + + my @Hists = split(/,/, $All{"LRBF"} ); + my $NHist = $#Hists+1; + print "Histograms: $NHist\n"; + + my $FinHist = 1; +# First T0s + while ($FinHist) { + my $counter=0; + (my $tmp,my @SplitT0) = split( /\s+/, $T0s[$counter]); + ($tmp,my @SplitBg) = split( /\s+/, $Bgs[$counter]); + ($tmp,my @SplitData) = split( /\s+/, $Datas[$counter]); + if ($#SplitBg>0) { + foreach (@SplitBg) { + print $_."\n"; + } + } + $counter++; + if ($counter>=$#Bgs) {$FinHist=0;} + } + +# Finally, disable the update button + this->{ui}->t0Update->setEnabled(0); +# t0Update->setText("musrt0") +} + +# Function: return widget attribute given its type and name +sub child { +# Take type and name from input + my ( $object, $name ) = @_; + + my $Attrib = this->findChildren($object,$name); + if (@$Attrib) { + $Attrib = @$Attrib[0]; + } else { + $Attrib = 0; + } +# print "name = $name and attrib = $Attrib\n"; + +# Return handle on widget + return($Attrib); +} + + +1; diff --git a/src/external/MuSRFitGUI/MuSRFit4.ui b/src/external/MuSRFitGUI/MuSRFit4.ui new file mode 100644 index 00000000..d6b8805e --- /dev/null +++ b/src/external/MuSRFitGUI/MuSRFit4.ui @@ -0,0 +1,6096 @@ + + + MuSRFit4 + + + + 0 + 0 + 600 + 505 + + + + + 1 + 1 + + + + + 600 + 505 + + + + MuSRFit GUI + + + + icos/MuSRFit.pngicos/MuSRFit.png + + + MuSRFitGUI + + + + + + + true + + + + 1 + 1 + + + + + 600 + 400 + + + + + 32767 + 32767 + + + + 0 + + + + RUNS + + + + + + QLayout::SetMinimumSize + + + 0 + + + + + + 1 + 1 + + + + + 0 + 80 + + + + + 1 + 1 + + + + RUN Files + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 411 + 21 + + + + + + + + true + + + + 0 + 0 + + + + + 0 + 23 + + + + + 16777215 + 25 + + + + Names of data files to be fit. Multiple data files are comma separated. + + + Names of data files to be fit. Multiple data files are comma separated. + + + + + + + true + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + Browse to select data files for fitting. + + + Browse to select data files for fitting. + + + Browse + + + + + + + + + + + + QLayout::SetMinimumSize + + + + + + 0 + 0 + + + + Fit type + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + + Asymmetry + + + + + SingleHist + + + + + + + + + 0 + 0 + + + + Histograms list + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 1 5,3 7 + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 81 + 21 + + + + + + + + + + + 1 + 1 + + + + + 0 + 80 + + + + RUN Numbers + + + Qt::AlignHCenter|Qt::AlignTop + + + + + + 0 + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + false + + + QComboBox::InsertAtTop + + + true + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + Year + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 30 + + + + On beam line + + + false + + + + + + + + 0 + 0 + + + + + 0 + 20 + + + + + 16777215 + 25 + + + + + LEM + + + + + GPS + + + + + Dolly + + + + + LTF + + + + + LEM (PPC) + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 181 + 21 + + + + + + + + + 0 + 0 + + + + + 0 + 23 + + + + + 16777215 + 25 + + + + Numbers of RUNs to fit. Multiple runs are comma separated. + + + Numbers of RUNs to fit. Multiple runs are comma separated. + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 220 + + + + + 0 + 0 + + + + Theory Function + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + First Component + + + false + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Second Component + + + false + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Third Component + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + false + + + false + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 18 + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + None + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 18 + + + + Exponential + + + + + Gaussian + + + + + Stretch Exp. + + + + + Exponential Cos + + + + + Gaussian Cos + + + + + Stretch Cos + + + + + Lorentzian Dynamic KT + + + + + Gaussian Dynamic KT + + + + + Background + + + + + Lorentzian Kubo-Toyabe LF x Exp + + + + + Gaussian Kubo-Toyabe LF x Exp + + + + + Lorentzian Kubo-Toyabe LF x Str Exp + + + + + Gaussian Kubo-Toyabe LF x Str Exp + + + + + MolMag + + + + + Meissner State Model + + + + + Lor-Gss combi KT + + + + + Lor-Gss combi KT x Exp + + + + + Lor-Gss combi KT x SExp + + + + + None + + + + + + + + + 0 + 0 + + + + Initial Fit Time + + + false + + + + + + + + 0 + 0 + + + + Final Fit Time + + + false + + + + + + + + 0 + 0 + + + + Fit Binning Factor + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 0 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 8 + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + 16777215 + 25 + + + + 100 + + + + + + + Min X + + + false + + + + + + + Max X + + + false + + + + + + + View Binning Factor + + + false + + + + + + + + 0 + 25 + + + + + + + + + 0 + 25 + + + + + + + + + 0 + 25 + + + + + + + + Min Y + + + false + + + + + + + Max Y + + + false + + + + + + + + + + false + + + + + + + + + + + + + Life time correction + + + true + + + + + + + + + + + + + Fitting + + + + + + + + + + + 0 + 25 + + + + + 150 + 16777215 + + + + + HESSE + + + + + MINOS + + + + + + + + + 0 + 25 + + + + + 150 + 16777215 + + + + + MINIMIZE + + + + + MIGRAD + + + + + SIMPLEX + + + + + + + + Minimization type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + Error estimation + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + false + + + + + + + + + + + + + + + Sharing + + + + + + + 0 + 0 + + + + Shared parameters among different runs + + + Qt::AlignLeading + + + true + + + false + + + + + + + + false + + + + 0 + 0 + + + + 1st Component + + + Qt::AlignLeading + + + + + 40 + 60 + 81 + 266 + + + + + 0 + + + 0 + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + false + + + Param5 + + + false + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + 2 + 30 + 141 + 20 + + + + FitType1 + + + false + + + + + + + + false + + + + 0 + 0 + + + + 2nd Component + + + + + 2 + 30 + 141 + 20 + + + + FitType2 + + + false + + + + + + 40 + 60 + 81 + 266 + + + + + 0 + + + 0 + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + Param5 + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + + + false + + + + 0 + 0 + + + + 3rd Component + + + Qt::AlignJustify|Qt::AlignVCenter + + + + + 2 + 30 + 141 + 20 + + + + FitType3 + + + false + + + + + + 41 + 58 + 81 + 266 + + + + + + + Param1 + + + + + + + Param2 + + + + + + + Param3 + + + + + + + Param4 + + + + + + + Param5 + + + + + + + false + + + Param6 + + + false + + + + + + + false + + + Param7 + + + false + + + + + + + false + + + Param8 + + + false + + + + + + + false + + + Param9 + + + false + + + + + + + + + + + + + + + + + Initialization + + + + + + 1 + + + 4 + + + false + + + false + + + true + + + false + + + + Alpha + + + + + Value + + + + + Error + + + + + Min + + + + + Max + + + + + + + + + MSR File + + + + + + 0 + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + 0 + + + + Enter the label (defaul is run title from the first run) + + + false + + + + + + + + 1 + 1 + + + + Title line for MSR file (optional) + + + Title line for MSR file (optional) + + + + + + + + + + + + Enter [name] for output [name].msr file (optional) + + + false + + + + + + + + 0 + 0 + + + + Name of the produced MSR file (optional) + + + Name of the produced MSR file (optional) + + + + + + + + + + + + + + true + + + + + + + + + + FFT/RRF + + + + + + + 0 + 0 + + + + Fourier transform parameters + + + + + 12 + 19 + 510 + 117 + + + + + 5 + + + 5 + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + MHz + + + + + Gauss + + + + + Mc/s + + + + + + + + + 0 + 0 + + + + + power + + + + + real + + + + + imag + + + + + real_and_imag + + + + + phase + + + + + + + + + + + false + + + + + + + Phase: + + + false + + + + + + + Plot + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + STRONG + + + + + MEDIUM + + + + + WEAK + + + + + NONE + + + + + + + + Apodization + + + false + + + + + + + + + + false + + + + + + + to + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + false + + + + + + + + + + false + + + + + + + + 0 + 0 + + + + + + + + Range: from + + + false + + + + + + + Units + + + + + + + + + + + + 0 + 0 + + + + Rotatting reference frame (RRF) parameters + + + + + 10 + 18 + 265 + 100 + + + + + 5 + + + 5 + + + + + Phase + + + false + + + + + + + Frequency + + + false + + + + + + + + + + false + + + + + + + + + + + + + + + + + false + + + + + + + + + + Packing + + + false + + + + + + + + MHz + + + + + kHz + + + + + Mc/s + + + + + G + + + + + T + + + + + + + + + + + + + + + + t0/Bg + + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + + + + + + 5 + 18 + 100 + 150 + + + + + + + t0 + + + false + + + + + + + Bg1 + + + false + + + + + + + Bg2 + + + false + + + + + + + Data 1 + + + false + + + + + + + Data 2 + + + false + + + + + + + + + + + + 1 + 1 + + + + + 0 + 0 + + + + Hist1 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist2 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist3 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + true + + + + 1 + 1 + + + + Hist4 + + + + + 8 + 17 + 75 + 150 + + + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 461 + 20 + + + + + + + + false + + + + 0 + 0 + + + + Use musrt0 to set values + + + Update + + + + + + + + + + Constraints + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + THEORY Block + + + false + + + + + + + true + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + Parameters List + + + false + + + + + + + true + + + + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + = + + + false + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + + + + + + 0 + 0 + + + + Add + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 247 + 252 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + + 128 + 128 + 128 + + + + + + + 230 + 240 + 249 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 115 + 120 + 124 + + + + + + + 154 + 160 + 166 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 128 + 128 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 127 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 128 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 238 + + + + + + + 82 + 24 + 139 + + + + + + + + FUNCTIONS Block + + + false + + + + + + + + + + + + + + + false + + + + + + + + 100 + 32767 + + + + Reset + + + + + + + + + + + + + + + + true + + + + 0 + 0 + 600 + 20 + + + + + &File + + + + + + + + + Actions + + + + + + + + Parameters + + + + + + + Options + + + + + + + &Help + + + + + + + + + + + + + File Menu + + + TopToolBarArea + + + false + + + + + + + + + 0 + 0 + + + + Actions Menu + + + TopToolBarArea + + + false + + + + + + + + + + + icos/save.pngicos/save.png + + + &Save MSR... + + + &Save MSR... + + + &Save MSR + + + Ctrl+S + + + + + + icos/exit.pngicos/exit.png + + + E&xit + + + Exit + + + + + + + + &About + + + About + + + + + + + + true + + + false + + + No Overwrite + + + Overwrite MSR File + + + Enable overwriting MSR files + + + Enable/Disable checking for MSR files. + + + + + true + + + Maual file selection + + + Maual file selection + + + + + + icos/chdir.pngicos/chdir.png + + + &Change dir + + + &Change dir + + + Ctrl+C + + + + + new item + + + new item + + + + + + icos/Export.pngicos/Export.png + + + &Export As... + + + Export As... + + + Alt+E + + + + + + icos/Append.pngicos/Append.png + + + &Append To... + + + Append To... + + + Alt+A + + + + + + icos/Fit.pngicos/Fit.png + + + Fit and Plot + + + Ctrl+F + + + + + false + + + + icos/Plot.pngicos/Plot.png + + + Plot + + + Ctrl+P + + + + + + icos/T0.pngicos/T0.png + + + Show t0 and Bg Bins + + + Ctrl+T + + + + + true + + + Fourier + + + Fourier + + + + + true + + + T0 and Bg bins + + + T0 and Bg bins + + + + + + musrfit_tabs + runNumbers + beamLine + year + runFiles + browse + fitType1 + fitType2 + fitType3 + tis + tfs + bins + xi + xf + viewBin + yi + yf + ltc + fitAsyType + histsLRBF + minimization + errorCalc + fitTextOutput + buttonGroupSharing + shParam_1_1 + shParam_1_2 + shParam_1_3 + shParam_1_4 + shParam_1_5 + shParam_1_6 + shParam_1_7 + shParam_1_8 + shParam_1_9 + shParam_2_1 + shParam_2_2 + shParam_2_3 + shParam_2_4 + shParam_2_5 + shParam_2_6 + shParam_2_7 + shParam_2_8 + shParam_2_9 + shParam_3_1 + shParam_3_2 + shParam_3_3 + shParam_3_4 + shParam_3_5 + shParam_3_6 + shParam_3_7 + shParam_3_8 + shParam_3_9 + initParamTable + title + fileName + textMSROutput + funits + fapodization + fplot + frqMin + fphase + frqMax + rrfFrq + rrfUnits + rrfPack + rrfPhase + t01 + bg11 + bg21 + data11 + data21 + t02 + bg12 + bg22 + data12 + data22 + t03 + bg13 + bg23 + data13 + data23 + t04 + bg14 + bg24 + data14 + data24 + t0Update + theoryBlock + parametersList + cParamsCombo + constraintLine + addConstraint + functionsBlock + resetFunc + + + + + fit + activated() + MuSRFit4 + GoFit() + + + -1 + -1 + + + 20 + 20 + + + + + parametersAppend_ToAction + activated() + MuSRFit4 + parametersAppend() + + + -1 + -1 + + + 20 + 20 + + + + + parametersExport_AsAction + activated() + MuSRFit4 + parametersExport() + + + -1 + -1 + + + 20 + 20 + + + + + fileChangeDirAction + activated() + MuSRFit4 + fileChangeDir() + + + -1 + -1 + + + 20 + 20 + + + + + fileSaveAction + activated() + MuSRFit4 + fileSave() + + + -1 + -1 + + + 20 + 20 + + + + + fileExitAction + activated() + MuSRFit4 + fileExit() + + + -1 + -1 + + + 20 + 20 + + + + + helpAboutAction + activated() + MuSRFit4 + helpAbout() + + + -1 + -1 + + + 20 + 20 + + + + + t0 + activated() + MuSRFit4 + ShowMuSRT0() + + + -1 + -1 + + + 20 + 20 + + + + + plot + activated() + MuSRFit4 + GoPlot() + + + -1 + -1 + + + 20 + 20 + + + + + resetFunc + clicked() + MuSRFit4 + InitializeFunctions() + + + 593 + 489 + + + 20 + 20 + + + + + addConstraint + clicked() + MuSRFit4 + AppendToFunctions() + + + 593 + 284 + + + 20 + 20 + + + + + buttonGroupSharing + toggled(bool) + MuSRFit4 + ActivateShComp() + + + 28 + 98 + + + 20 + 20 + + + + + musrfit_tabs + currentChanged(int) + MuSRFit4 + TabChanged() + + + 24 + 74 + + + 20 + 20 + + + + + t0Update + clicked() + MuSRFit4 + t0UpdateClicked() + + + 594 + 490 + + + 20 + 20 + + + + + buttonGroupSharing + toggled(bool) + MuSRFit4 + ActivateShComp() + + + 28 + 98 + + + 20 + 20 + + + + + menuBar + triggered(QAction*) + MuSRFit4 + RunSelectionToggle() + + + 208 + 9 + + + 626 + 246 + + + + + fitType1 + currentIndexChanged(int) + MuSRFit4 + InitializeFunctions() + + + 79 + 304 + + + 601 + 323 + + + + + beamLine + currentIndexChanged(int) + MuSRFit4 + t0Update() + + + 416 + 144 + + + 603 + 191 + + + + + + t0UpdateClicked() + GoFit() + parametersAppend() + parametersExport() + fileChangeDir() + fileOpen() + fileSave() + filePrint() + fileExit() + helpAbout() + ShowMuSRT0() + GoPlot() + RunSelectionToggle() + InitializeFunctions() + AppendToFunctions() + ActivateShComp() + TabChanged() + t0Update() + + diff --git a/src/external/MuSRFitGUI/Ui_MuSRFit4.pm b/src/external/MuSRFitGUI/Ui_MuSRFit4.pm new file mode 100644 index 00000000..8a0fe95f --- /dev/null +++ b/src/external/MuSRFitGUI/Ui_MuSRFit4.pm @@ -0,0 +1,3438 @@ +############################################################################### +# +############################################################################### + +################################################################################# +## Form generated from reading UI file 'MuSRFit4.ui' +## +## Created: Thu Mar 23 16:58:52 2017 +## by: Qt User Interface Compiler version 4.8.6 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +package Ui_MuSRFit4; + +use strict; +use warnings; +use QtCore4; +use QtGui4; + +sub fileSaveAction { + return shift->{fileSaveAction}; +} + +sub fileExitAction { + return shift->{fileExitAction}; +} + +sub helpAboutAction { + return shift->{helpAboutAction}; +} + +sub fileExistCheck { + return shift->{fileExistCheck}; +} + +sub manualFile { + return shift->{manualFile}; +} + +sub fileChangeDirAction { + return shift->{fileChangeDirAction}; +} + +sub optionsnew_itemAction { + return shift->{optionsnew_itemAction}; +} + +sub parametersExport_AsAction { + return shift->{parametersExport_AsAction}; +} + +sub parametersAppend_ToAction { + return shift->{parametersAppend_ToAction}; +} + +sub fit { + return shift->{fit}; +} + +sub plot { + return shift->{plot}; +} + +sub t0 { + return shift->{t0}; +} + +sub optionsFourier { + return shift->{optionsFourier}; +} + +sub optionsT0 { + return shift->{optionsT0}; +} + +sub widget { + return shift->{widget}; +} + +sub gridLayout { + return shift->{gridLayout}; +} + +sub musrfit_tabs { + return shift->{musrfit_tabs}; +} + +sub runsPage { + return shift->{runsPage}; +} + +sub gridLayout_1 { + return shift->{gridLayout_1}; +} + +sub gridLayout_2 { + return shift->{gridLayout_2}; +} + +sub runsMan { + return shift->{runsMan}; +} + +sub gridLayout_4 { + return shift->{gridLayout_4}; +} + +sub runFiles_2 { + return shift->{runFiles_2}; +} + +sub spacer3 { + return shift->{spacer3}; +} + +sub runFiles { + return shift->{runFiles}; +} + +sub browse { + return shift->{browse}; +} + +sub gridLayout_6 { + return shift->{gridLayout_6}; +} + +sub fitAsyTypeLabel { + return shift->{fitAsyTypeLabel}; +} + +sub fitAsyType { + return shift->{fitAsyType}; +} + +sub histsLRBFLabel { + return shift->{histsLRBFLabel}; +} + +sub histsLRBF { + return shift->{histsLRBF}; +} + +sub spacer4 { + return shift->{spacer4}; +} + +sub runsAuto { + return shift->{runsAuto}; +} + +sub gridLayout_3 { + return shift->{gridLayout_3}; +} + +sub runNumbers_2 { + return shift->{runNumbers_2}; +} + +sub year { + return shift->{year}; +} + +sub yearLabel { + return shift->{yearLabel}; +} + +sub beamLineLabel { + return shift->{beamLineLabel}; +} + +sub beamLine { + return shift->{beamLine}; +} + +sub spacer2 { + return shift->{spacer2}; +} + +sub runNumbers { + return shift->{runNumbers}; +} + +sub groupBox { + return shift->{groupBox}; +} + +sub gridLayout_8 { + return shift->{gridLayout_8}; +} + +sub comp1Label { + return shift->{comp1Label}; +} + +sub comp2Label { + return shift->{comp2Label}; +} + +sub comp3Label { + return shift->{comp3Label}; +} + +sub fitType1 { + return shift->{fitType1}; +} + +sub fitType2 { + return shift->{fitType2}; +} + +sub fitType3 { + return shift->{fitType3}; +} + +sub tisLabel { + return shift->{tisLabel}; +} + +sub tfsLabel { + return shift->{tfsLabel}; +} + +sub binsLabel { + return shift->{binsLabel}; +} + +sub tis { + return shift->{tis}; +} + +sub tfs { + return shift->{tfs}; +} + +sub bins { + return shift->{bins}; +} + +sub textLabel1_4 { + return shift->{textLabel1_4}; +} + +sub textLabel1_8 { + return shift->{textLabel1_8}; +} + +sub textLabel1_4_2_2 { + return shift->{textLabel1_4_2_2}; +} + +sub xi { + return shift->{xi}; +} + +sub xf { + return shift->{xf}; +} + +sub viewBin { + return shift->{viewBin}; +} + +sub textLabel1_4_2 { + return shift->{textLabel1_4_2}; +} + +sub textLabel1_4_3 { + return shift->{textLabel1_4_3}; +} + +sub textLabel1_4_4 { + return shift->{textLabel1_4_4}; +} + +sub yi { + return shift->{yi}; +} + +sub yf { + return shift->{yf}; +} + +sub ltc { + return shift->{ltc}; +} + +sub fittingPage { + return shift->{fittingPage}; +} + +sub gridLayout1 { + return shift->{gridLayout1}; +} + +sub fitGrid { + return shift->{fitGrid}; +} + +sub fitLayout { + return shift->{fitLayout}; +} + +sub errorCalc { + return shift->{errorCalc}; +} + +sub minimization { + return shift->{minimization}; +} + +sub textLabel1_5 { + return shift->{textLabel1_5}; +} + +sub textLabel1_5_2 { + return shift->{textLabel1_5_2}; +} + +sub fitTextOutput { + return shift->{fitTextOutput}; +} + +sub sharingPage { + return shift->{sharingPage}; +} + +sub gridLayout2 { + return shift->{gridLayout2}; +} + +sub buttonGroupSharing { + return shift->{buttonGroupSharing}; +} + +sub gridLayout_7 { + return shift->{gridLayout_7}; +} + +sub horizontalLayout { + return shift->{horizontalLayout}; +} + +sub sharingComp1 { + return shift->{sharingComp1}; +} + +sub layout14 { + return shift->{layout14}; +} + +sub _5 { + return shift->{_5}; +} + +sub shParam_1_1 { + return shift->{shParam_1_1}; +} + +sub shParam_1_2 { + return shift->{shParam_1_2}; +} + +sub shParam_1_3 { + return shift->{shParam_1_3}; +} + +sub shParam_1_4 { + return shift->{shParam_1_4}; +} + +sub shParam_1_5 { + return shift->{shParam_1_5}; +} + +sub shParam_1_6 { + return shift->{shParam_1_6}; +} + +sub shParam_1_7 { + return shift->{shParam_1_7}; +} + +sub shParam_1_8 { + return shift->{shParam_1_8}; +} + +sub shParam_1_9 { + return shift->{shParam_1_9}; +} + +sub comp1ShLabel { + return shift->{comp1ShLabel}; +} + +sub sharingComp2 { + return shift->{sharingComp2}; +} + +sub comp2ShLabel { + return shift->{comp2ShLabel}; +} + +sub layout13 { + return shift->{layout13}; +} + +sub _1 { + return shift->{_1}; +} + +sub shParam_2_1 { + return shift->{shParam_2_1}; +} + +sub shParam_2_2 { + return shift->{shParam_2_2}; +} + +sub shParam_2_3 { + return shift->{shParam_2_3}; +} + +sub shParam_2_4 { + return shift->{shParam_2_4}; +} + +sub shParam_2_5 { + return shift->{shParam_2_5}; +} + +sub shParam_2_6 { + return shift->{shParam_2_6}; +} + +sub shParam_2_7 { + return shift->{shParam_2_7}; +} + +sub shParam_2_8 { + return shift->{shParam_2_8}; +} + +sub shParam_2_9 { + return shift->{shParam_2_9}; +} + +sub sharingComp3 { + return shift->{sharingComp3}; +} + +sub comp3ShLabel { + return shift->{comp3ShLabel}; +} + +sub layout15 { + return shift->{layout15}; +} + +sub _3 { + return shift->{_3}; +} + +sub shParam_3_1 { + return shift->{shParam_3_1}; +} + +sub shParam_3_2 { + return shift->{shParam_3_2}; +} + +sub shParam_3_3 { + return shift->{shParam_3_3}; +} + +sub shParam_3_4 { + return shift->{shParam_3_4}; +} + +sub shParam_3_5 { + return shift->{shParam_3_5}; +} + +sub shParam_3_6 { + return shift->{shParam_3_6}; +} + +sub shParam_3_7 { + return shift->{shParam_3_7}; +} + +sub shParam_3_8 { + return shift->{shParam_3_8}; +} + +sub shParam_3_9 { + return shift->{shParam_3_9}; +} + +sub initializationPage { + return shift->{initializationPage}; +} + +sub gridLayout3 { + return shift->{gridLayout3}; +} + +sub initParamTable { + return shift->{initParamTable}; +} + +sub msrPage { + return shift->{msrPage}; +} + +sub gridLayout4 { + return shift->{gridLayout4}; +} + +sub vboxLayout { + return shift->{vboxLayout}; +} + +sub groupTitle { + return shift->{groupTitle}; +} + +sub gridLayout5 { + return shift->{gridLayout5}; +} + +sub vboxLayout1 { + return shift->{vboxLayout1}; +} + +sub titleLabel { + return shift->{titleLabel}; +} + +sub title { + return shift->{title}; +} + +sub hboxLayout { + return shift->{hboxLayout}; +} + +sub fileNameLabel { + return shift->{fileNameLabel}; +} + +sub fileName { + return shift->{fileName}; +} + +sub textMSROutput { + return shift->{textMSROutput}; +} + +sub fourierPage { + return shift->{fourierPage}; +} + +sub gridLayout6 { + return shift->{gridLayout6}; +} + +sub fourierBox { + return shift->{fourierBox}; +} + +sub layout34 { + return shift->{layout34}; +} + +sub gridLayout7 { + return shift->{gridLayout7}; +} + +sub frqMax { + return shift->{frqMax}; +} + +sub funits { + return shift->{funits}; +} + +sub fplot { + return shift->{fplot}; +} + +sub textLabel1_3_8 { + return shift->{textLabel1_3_8}; +} + +sub textLabel1_7 { + return shift->{textLabel1_7}; +} + +sub fplotLabel { + return shift->{fplotLabel}; +} + +sub textLabel1_3_4 { + return shift->{textLabel1_3_4}; +} + +sub fapodization { + return shift->{fapodization}; +} + +sub fapodizationLabel { + return shift->{fapodizationLabel}; +} + +sub textLabel1_3_3 { + return shift->{textLabel1_3_3}; +} + +sub textLabel1_2 { + return shift->{textLabel1_2}; +} + +sub textLabel1_3_6 { + return shift->{textLabel1_3_6}; +} + +sub fphase { + return shift->{fphase}; +} + +sub textLabel1_3_5 { + return shift->{textLabel1_3_5}; +} + +sub textLabel1_3_7 { + return shift->{textLabel1_3_7}; +} + +sub frqMin { + return shift->{frqMin}; +} + +sub textLabel1 { + return shift->{textLabel1}; +} + +sub label { + return shift->{label}; +} + +sub rrfBox { + return shift->{rrfBox}; +} + +sub layout35 { + return shift->{layout35}; +} + +sub gridLayout8 { + return shift->{gridLayout8}; +} + +sub textLabel1_6_2_2 { + return shift->{textLabel1_6_2_2}; +} + +sub textLabel1_6 { + return shift->{textLabel1_6}; +} + +sub textLabel1_6_2_4 { + return shift->{textLabel1_6_2_4}; +} + +sub rrfFrq { + return shift->{rrfFrq}; +} + +sub textLabel1_6_2_3 { + return shift->{textLabel1_6_2_3}; +} + +sub rrfPack { + return shift->{rrfPack}; +} + +sub textLabel1_6_2 { + return shift->{textLabel1_6_2}; +} + +sub rrfUnits { + return shift->{rrfUnits}; +} + +sub rrfPhase { + return shift->{rrfPhase}; +} + +sub t0Page { + return shift->{t0Page}; +} + +sub gridLayout9 { + return shift->{gridLayout9}; +} + +sub hboxLayout1 { + return shift->{hboxLayout1}; +} + +sub groupHist0 { + return shift->{groupHist0}; +} + +sub layout16_2 { + return shift->{layout16_2}; +} + +sub vboxLayout2 { + return shift->{vboxLayout2}; +} + +sub textLabel2 { + return shift->{textLabel2}; +} + +sub textLabel2_2_2_3 { + return shift->{textLabel2_2_2_3}; +} + +sub textLabel2_2_2 { + return shift->{textLabel2_2_2}; +} + +sub textLabel2_2_2_2 { + return shift->{textLabel2_2_2_2}; +} + +sub textLabel2_2_2_2_2 { + return shift->{textLabel2_2_2_2_2}; +} + +sub groupHist1 { + return shift->{groupHist1}; +} + +sub layout18 { + return shift->{layout18}; +} + +sub vboxLayout3 { + return shift->{vboxLayout3}; +} + +sub t01 { + return shift->{t01}; +} + +sub bg11 { + return shift->{bg11}; +} + +sub bg21 { + return shift->{bg21}; +} + +sub data11 { + return shift->{data11}; +} + +sub data21 { + return shift->{data21}; +} + +sub groupHist2 { + return shift->{groupHist2}; +} + +sub layout18_2 { + return shift->{layout18_2}; +} + +sub vboxLayout4 { + return shift->{vboxLayout4}; +} + +sub t02 { + return shift->{t02}; +} + +sub bg12 { + return shift->{bg12}; +} + +sub bg22 { + return shift->{bg22}; +} + +sub data12 { + return shift->{data12}; +} + +sub data22 { + return shift->{data22}; +} + +sub groupHist3 { + return shift->{groupHist3}; +} + +sub layout18_3 { + return shift->{layout18_3}; +} + +sub vboxLayout5 { + return shift->{vboxLayout5}; +} + +sub t03 { + return shift->{t03}; +} + +sub bg13 { + return shift->{bg13}; +} + +sub bg23 { + return shift->{bg23}; +} + +sub data13 { + return shift->{data13}; +} + +sub data23 { + return shift->{data23}; +} + +sub groupHist4 { + return shift->{groupHist4}; +} + +sub layout18_4 { + return shift->{layout18_4}; +} + +sub vboxLayout6 { + return shift->{vboxLayout6}; +} + +sub t04 { + return shift->{t04}; +} + +sub bg14 { + return shift->{bg14}; +} + +sub bg24 { + return shift->{bg24}; +} + +sub data14 { + return shift->{data14}; +} + +sub data24 { + return shift->{data24}; +} + +sub hboxLayout2 { + return shift->{hboxLayout2}; +} + +sub spacer1 { + return shift->{spacer1}; +} + +sub t0Update { + return shift->{t0Update}; +} + +sub tabPage { + return shift->{tabPage}; +} + +sub gridLayout10 { + return shift->{gridLayout10}; +} + +sub vboxLayout7 { + return shift->{vboxLayout7}; +} + +sub gridLayout11 { + return shift->{gridLayout11}; +} + +sub theoryBlock_Label { + return shift->{theoryBlock_Label}; +} + +sub theoryBlock { + return shift->{theoryBlock}; +} + +sub parametersList_Label { + return shift->{parametersList_Label}; +} + +sub parametersList { + return shift->{parametersList}; +} + +sub hboxLayout3 { + return shift->{hboxLayout3}; +} + +sub cParamsCombo { + return shift->{cParamsCombo}; +} + +sub textLabel1_4_6 { + return shift->{textLabel1_4_6}; +} + +sub constraintLine { + return shift->{constraintLine}; +} + +sub addConstraint { + return shift->{addConstraint}; +} + +sub textLabel2_2_3_4 { + return shift->{textLabel2_2_3_4}; +} + +sub functionsBlock { + return shift->{functionsBlock}; +} + +sub hboxLayout4 { + return shift->{hboxLayout4}; +} + +sub textLabel1_6_3 { + return shift->{textLabel1_6_3}; +} + +sub resetFunc { + return shift->{resetFunc}; +} + +sub menuBar { + return shift->{menuBar}; +} + +sub fileMenu { + return shift->{fileMenu}; +} + +sub actions { + return shift->{actions}; +} + +sub parameters { + return shift->{parameters}; +} + +sub options { + return shift->{options}; +} + +sub helpMenu { + return shift->{helpMenu}; +} + +sub fileToolBar { + return shift->{fileToolBar}; +} + +sub actionsToolBar { + return shift->{actionsToolBar}; +} + + +sub setupUi { + my ( $class, $muSRFit4 ) = @_; + my $self = bless {}, $class; + if ( !defined $muSRFit4->objectName() ) { + $muSRFit4->setObjectName( "muSRFit4" ); + } + $muSRFit4->resize( 600, 505 ); + my $sizePolicy = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding() ); + $self->{$sizePolicy} = $sizePolicy; + $sizePolicy->setHorizontalStretch( 1 ); + $sizePolicy->setVerticalStretch( 1 ); + $sizePolicy->setHeightForWidth( $muSRFit4->sizePolicy()->hasHeightForWidth() ); + $muSRFit4->setSizePolicy( $sizePolicy ); + $muSRFit4->setMinimumSize( Qt::Size(600, 505) ); + my $icon = Qt::Icon(); + $icon->addPixmap(Qt::Pixmap("icos/MuSRFit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $muSRFit4->setWindowIcon( $icon ); + my $fileSaveAction = Qt::Action($muSRFit4); + $self->{fileSaveAction} = $fileSaveAction; + $fileSaveAction->setObjectName( "fileSaveAction" ); + my $icon1 = Qt::Icon(); + $icon1->addPixmap(Qt::Pixmap("icos/save.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileSaveAction->setIcon( $icon1 ); + my $fileExitAction = Qt::Action($muSRFit4); + $self->{fileExitAction} = $fileExitAction; + $fileExitAction->setObjectName( "fileExitAction" ); + my $icon2 = Qt::Icon(); + $icon2->addPixmap(Qt::Pixmap("icos/exit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileExitAction->setIcon( $icon2 ); + my $helpAboutAction = Qt::Action($muSRFit4); + $self->{helpAboutAction} = $helpAboutAction; + $helpAboutAction->setObjectName( "helpAboutAction" ); + my $fileExistCheck = Qt::Action($muSRFit4); + $self->{fileExistCheck} = $fileExistCheck; + $fileExistCheck->setObjectName( "fileExistCheck" ); + $fileExistCheck->setCheckable( 1 ); + $fileExistCheck->setChecked( 0 ); + my $manualFile = Qt::Action($muSRFit4); + $self->{manualFile} = $manualFile; + $manualFile->setObjectName( "manualFile" ); + $manualFile->setCheckable( 1 ); + my $fileChangeDirAction = Qt::Action($muSRFit4); + $self->{fileChangeDirAction} = $fileChangeDirAction; + $fileChangeDirAction->setObjectName( "fileChangeDirAction" ); + my $icon3 = Qt::Icon(); + $icon3->addPixmap(Qt::Pixmap("icos/chdir.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fileChangeDirAction->setIcon( $icon3 ); + my $optionsnew_itemAction = Qt::Action($muSRFit4); + $self->{optionsnew_itemAction} = $optionsnew_itemAction; + $optionsnew_itemAction->setObjectName( "optionsnew_itemAction" ); + my $parametersExport_AsAction = Qt::Action($muSRFit4); + $self->{parametersExport_AsAction} = $parametersExport_AsAction; + $parametersExport_AsAction->setObjectName( "parametersExport_AsAction" ); + my $icon4 = Qt::Icon(); + $icon4->addPixmap(Qt::Pixmap("icos/Export.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $parametersExport_AsAction->setIcon( $icon4 ); + my $parametersAppend_ToAction = Qt::Action($muSRFit4); + $self->{parametersAppend_ToAction} = $parametersAppend_ToAction; + $parametersAppend_ToAction->setObjectName( "parametersAppend_ToAction" ); + my $icon5 = Qt::Icon(); + $icon5->addPixmap(Qt::Pixmap("icos/Append.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $parametersAppend_ToAction->setIcon( $icon5 ); + my $fit = Qt::Action($muSRFit4); + $self->{fit} = $fit; + $fit->setObjectName( "fit" ); + my $icon6 = Qt::Icon(); + $icon6->addPixmap(Qt::Pixmap("icos/Fit.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $fit->setIcon( $icon6 ); + my $plot = Qt::Action($muSRFit4); + $self->{plot} = $plot; + $plot->setObjectName( "plot" ); + $plot->setCheckable( 0 ); + my $icon7 = Qt::Icon(); + $icon7->addPixmap(Qt::Pixmap("icos/Plot.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $plot->setIcon( $icon7 ); + my $t0 = Qt::Action($muSRFit4); + $self->{t0} = $t0; + $t0->setObjectName( "t0" ); + my $icon8 = Qt::Icon(); + $icon8->addPixmap(Qt::Pixmap("icos/T0.png"), Qt::Icon::Normal(), Qt::Icon::Off() ); + $t0->setIcon( $icon8 ); + my $optionsFourier = Qt::Action($muSRFit4); + $self->{optionsFourier} = $optionsFourier; + $optionsFourier->setObjectName( "optionsFourier" ); + $optionsFourier->setCheckable( 1 ); + my $optionsT0 = Qt::Action($muSRFit4); + $self->{optionsT0} = $optionsT0; + $optionsT0->setObjectName( "optionsT0" ); + $optionsT0->setCheckable( 1 ); + my $widget = Qt::Widget( $muSRFit4 ); + $self->{widget} = $widget; + $widget->setObjectName( "widget" ); + my $gridLayout = Qt::GridLayout( $widget ); + $self->{gridLayout} = $gridLayout; + $gridLayout->setSpacing( 6 ); + $gridLayout->setMargin( 11 ); + $gridLayout->setObjectName( "gridLayout" ); + my $musrfit_tabs = Qt::TabWidget( $widget ); + $self->{musrfit_tabs} = $musrfit_tabs; + $musrfit_tabs->setObjectName( "musrfit_tabs" ); + $musrfit_tabs->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $musrfit_tabs->sizePolicy()->hasHeightForWidth() ); + $musrfit_tabs->setSizePolicy( $sizePolicy ); + $musrfit_tabs->setMinimumSize( Qt::Size(600, 400) ); + $musrfit_tabs->setMaximumSize( Qt::Size(32767, 32767) ); + my $runsPage = Qt::Widget( ); + $self->{runsPage} = $runsPage; + $runsPage->setObjectName( "runsPage" ); + my $gridLayout_1 = Qt::GridLayout( $runsPage ); + $self->{gridLayout_1} = $gridLayout_1; + $gridLayout_1->setSpacing( 6 ); + $gridLayout_1->setMargin( 11 ); + $gridLayout_1->setObjectName( "gridLayout_1" ); + my $gridLayout_2 = Qt::GridLayout( ); + $self->{gridLayout_2} = $gridLayout_2; + $gridLayout_2->setSpacing( 0 ); + $gridLayout_2->setObjectName( "gridLayout_2" ); + $gridLayout_2->setSizeConstraint( Qt::Layout::SetMinimumSize() ); + my $runsMan = Qt::GroupBox( $runsPage ); + $self->{runsMan} = $runsMan; + $runsMan->setObjectName( "runsMan" ); + $sizePolicy->setHeightForWidth( $runsMan->sizePolicy()->hasHeightForWidth() ); + $runsMan->setSizePolicy( $sizePolicy ); + $runsMan->setMinimumSize( Qt::Size(0, 80) ); + $runsMan->setBaseSize( Qt::Size(1, 1) ); + $runsMan->setAlignment( Qt::AlignHCenter()|Qt::AlignTop() ); + my $gridLayout_4 = Qt::GridLayout( $runsMan ); + $self->{gridLayout_4} = $gridLayout_4; + $gridLayout_4->setSpacing( 6 ); + $gridLayout_4->setMargin( 11 ); + $gridLayout_4->setObjectName( "gridLayout_4" ); + my $runFiles_2 = Qt::GridLayout( ); + $self->{runFiles_2} = $runFiles_2; + $runFiles_2->setSpacing( 6 ); + $runFiles_2->setObjectName( "runFiles_2" ); + my $spacer3 = Qt::SpacerItem( 411, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $runFiles_2->addItem( $spacer3, 1, 0, 1, 1 ); + + my $runFiles = Qt::LineEdit( $runsMan ); + $self->{runFiles} = $runFiles; + $runFiles->setObjectName( "runFiles" ); + $runFiles->setEnabled( 1 ); + my $sizePolicy1 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy1} = $sizePolicy1; + $sizePolicy1->setHorizontalStretch( 0 ); + $sizePolicy1->setVerticalStretch( 0 ); + $sizePolicy1->setHeightForWidth( $runFiles->sizePolicy()->hasHeightForWidth() ); + $runFiles->setSizePolicy( $sizePolicy1 ); + $runFiles->setMinimumSize( Qt::Size(0, 23) ); + $runFiles->setMaximumSize( Qt::Size(16777215, 25) ); + + $runFiles_2->addWidget( $runFiles, 0, 0, 1, 2 ); + + my $browse = Qt::PushButton( $runsMan ); + $self->{browse} = $browse; + $browse->setObjectName( "browse" ); + $browse->setEnabled( 1 ); + my $sizePolicy2 = Qt::SizePolicy( Qt::SizePolicy::Fixed(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy2} = $sizePolicy2; + $sizePolicy2->setHorizontalStretch( 0 ); + $sizePolicy2->setVerticalStretch( 0 ); + $sizePolicy2->setHeightForWidth( $browse->sizePolicy()->hasHeightForWidth() ); + $browse->setSizePolicy( $sizePolicy2 ); + $browse->setMinimumSize( Qt::Size(0, 20) ); + $browse->setMaximumSize( Qt::Size(16777215, 25) ); + + $runFiles_2->addWidget( $browse, 1, 1, 1, 1 ); + + + $gridLayout_4->addLayout( $runFiles_2, 0, 0, 1, 1 ); + + + $gridLayout_2->addWidget( $runsMan, 1, 0, 1, 1 ); + + my $gridLayout_6 = Qt::GridLayout( ); + $self->{gridLayout_6} = $gridLayout_6; + $gridLayout_6->setSpacing( 6 ); + $gridLayout_6->setObjectName( "gridLayout_6" ); + $gridLayout_6->setSizeConstraint( Qt::Layout::SetMinimumSize() ); + my $fitAsyTypeLabel = Qt::Label( $runsPage ); + $self->{fitAsyTypeLabel} = $fitAsyTypeLabel; + $fitAsyTypeLabel->setObjectName( "fitAsyTypeLabel" ); + my $sizePolicy3 = Qt::SizePolicy( Qt::SizePolicy::Preferred(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy3} = $sizePolicy3; + $sizePolicy3->setHorizontalStretch( 0 ); + $sizePolicy3->setVerticalStretch( 0 ); + $sizePolicy3->setHeightForWidth( $fitAsyTypeLabel->sizePolicy()->hasHeightForWidth() ); + $fitAsyTypeLabel->setSizePolicy( $sizePolicy3 ); + $fitAsyTypeLabel->setWordWrap( 0 ); + + $gridLayout_6->addWidget( $fitAsyTypeLabel, 0, 0, 1, 1 ); + + my $fitAsyType = Qt::ComboBox( $runsPage ); + $self->{fitAsyType} = $fitAsyType; + $fitAsyType->setObjectName( "fitAsyType" ); + $sizePolicy3->setHeightForWidth( $fitAsyType->sizePolicy()->hasHeightForWidth() ); + $fitAsyType->setSizePolicy( $sizePolicy3 ); + $fitAsyType->setMinimumSize( Qt::Size(0, 25) ); + $fitAsyType->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_6->addWidget( $fitAsyType, 0, 1, 1, 1 ); + + my $histsLRBFLabel = Qt::Label( $runsPage ); + $self->{histsLRBFLabel} = $histsLRBFLabel; + $histsLRBFLabel->setObjectName( "histsLRBFLabel" ); + $sizePolicy3->setHeightForWidth( $histsLRBFLabel->sizePolicy()->hasHeightForWidth() ); + $histsLRBFLabel->setSizePolicy( $sizePolicy3 ); + $histsLRBFLabel->setWordWrap( 0 ); + + $gridLayout_6->addWidget( $histsLRBFLabel, 0, 2, 1, 1 ); + + my $histsLRBF = Qt::LineEdit( $runsPage ); + $self->{histsLRBF} = $histsLRBF; + $histsLRBF->setObjectName( "histsLRBF" ); + $sizePolicy3->setHeightForWidth( $histsLRBF->sizePolicy()->hasHeightForWidth() ); + $histsLRBF->setSizePolicy( $sizePolicy3 ); + $histsLRBF->setMinimumSize( Qt::Size(0, 25) ); + $histsLRBF->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_6->addWidget( $histsLRBF, 0, 3, 1, 1 ); + + my $spacer4 = Qt::SpacerItem( 81, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $gridLayout_6->addItem( $spacer4, 0, 4, 1, 1 ); + + + $gridLayout_2->addLayout( $gridLayout_6, 3, 0, 1, 1 ); + + my $runsAuto = Qt::GroupBox( $runsPage ); + $self->{runsAuto} = $runsAuto; + $runsAuto->setObjectName( "runsAuto" ); + $sizePolicy->setHeightForWidth( $runsAuto->sizePolicy()->hasHeightForWidth() ); + $runsAuto->setSizePolicy( $sizePolicy ); + $runsAuto->setMinimumSize( Qt::Size(0, 80) ); + $runsAuto->setAlignment( Qt::AlignHCenter()|Qt::AlignTop() ); + my $gridLayout_3 = Qt::GridLayout( $runsAuto ); + $self->{gridLayout_3} = $gridLayout_3; + $gridLayout_3->setSpacing( 6 ); + $gridLayout_3->setMargin( 11 ); + $gridLayout_3->setObjectName( "gridLayout_3" ); + my $runNumbers_2 = Qt::GridLayout( ); + $self->{runNumbers_2} = $runNumbers_2; + $runNumbers_2->setSpacing( 0 ); + $runNumbers_2->setObjectName( "runNumbers_2" ); + my $year = Qt::ComboBox( $runsAuto ); + $self->{year} = $year; + $year->setObjectName( "year" ); + $sizePolicy2->setHeightForWidth( $year->sizePolicy()->hasHeightForWidth() ); + $year->setSizePolicy( $sizePolicy2 ); + $year->setMinimumSize( Qt::Size(0, 20) ); + $year->setMaximumSize( Qt::Size(16777215, 25) ); + $year->setEditable( 0 ); + $year->setInsertPolicy( Qt::ComboBox::InsertAtTop() ); + $year->setAutoCompletion( 1 ); + $year->setDuplicatesEnabled( 0 ); + + $runNumbers_2->addWidget( $year, 1, 4, 1, 1 ); + + my $yearLabel = Qt::Label( $runsAuto ); + $self->{yearLabel} = $yearLabel; + $yearLabel->setObjectName( "yearLabel" ); + my $sizePolicy4 = Qt::SizePolicy( Qt::SizePolicy::Preferred(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy4} = $sizePolicy4; + $sizePolicy4->setHorizontalStretch( 0 ); + $sizePolicy4->setVerticalStretch( 0 ); + $sizePolicy4->setHeightForWidth( $yearLabel->sizePolicy()->hasHeightForWidth() ); + $yearLabel->setSizePolicy( $sizePolicy4 ); + $yearLabel->setMinimumSize( Qt::Size(0, 20) ); + $yearLabel->setWordWrap( 0 ); + + $runNumbers_2->addWidget( $yearLabel, 1, 3, 1, 1 ); + + my $beamLineLabel = Qt::Label( $runsAuto ); + $self->{beamLineLabel} = $beamLineLabel; + $beamLineLabel->setObjectName( "beamLineLabel" ); + $sizePolicy4->setHeightForWidth( $beamLineLabel->sizePolicy()->hasHeightForWidth() ); + $beamLineLabel->setSizePolicy( $sizePolicy4 ); + $beamLineLabel->setMinimumSize( Qt::Size(0, 20) ); + $beamLineLabel->setMaximumSize( Qt::Size(16777215, 30) ); + $beamLineLabel->setWordWrap( 0 ); + + $runNumbers_2->addWidget( $beamLineLabel, 1, 1, 1, 1 ); + + my $beamLine = Qt::ComboBox( $runsAuto ); + $self->{beamLine} = $beamLine; + $beamLine->setObjectName( "beamLine" ); + $sizePolicy2->setHeightForWidth( $beamLine->sizePolicy()->hasHeightForWidth() ); + $beamLine->setSizePolicy( $sizePolicy2 ); + $beamLine->setMinimumSize( Qt::Size(0, 20) ); + $beamLine->setMaximumSize( Qt::Size(16777215, 25) ); + + $runNumbers_2->addWidget( $beamLine, 1, 2, 1, 1 ); + + my $spacer2 = Qt::SpacerItem( 181, 21, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $runNumbers_2->addItem( $spacer2, 1, 0, 1, 1 ); + + my $runNumbers = Qt::LineEdit( $runsAuto ); + $self->{runNumbers} = $runNumbers; + $runNumbers->setObjectName( "runNumbers" ); + $sizePolicy1->setHeightForWidth( $runNumbers->sizePolicy()->hasHeightForWidth() ); + $runNumbers->setSizePolicy( $sizePolicy1 ); + $runNumbers->setMinimumSize( Qt::Size(0, 23) ); + $runNumbers->setMaximumSize( Qt::Size(16777215, 25) ); + $runNumbers->setAlignment( Qt::AlignLeading()|Qt::AlignLeft()|Qt::AlignTop() ); + + $runNumbers_2->addWidget( $runNumbers, 0, 0, 1, 5 ); + + + $gridLayout_3->addLayout( $runNumbers_2, 0, 0, 1, 1 ); + + + $gridLayout_2->addWidget( $runsAuto, 0, 0, 1, 1 ); + + my $groupBox = Qt::GroupBox( $runsPage ); + $self->{groupBox} = $groupBox; + $groupBox->setObjectName( "groupBox" ); + my $sizePolicy5 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Expanding() ); + $self->{$sizePolicy5} = $sizePolicy5; + $sizePolicy5->setHorizontalStretch( 0 ); + $sizePolicy5->setVerticalStretch( 0 ); + $sizePolicy5->setHeightForWidth( $groupBox->sizePolicy()->hasHeightForWidth() ); + $groupBox->setSizePolicy( $sizePolicy5 ); + $groupBox->setMinimumSize( Qt::Size(0, 220) ); + $groupBox->setBaseSize( Qt::Size(0, 0) ); + my $gridLayout_8 = Qt::GridLayout( $groupBox ); + $self->{gridLayout_8} = $gridLayout_8; + $gridLayout_8->setSpacing( 6 ); + $gridLayout_8->setMargin( 11 ); + $gridLayout_8->setObjectName( "gridLayout_8" ); + my $comp1Label = Qt::Label( $groupBox ); + $self->{comp1Label} = $comp1Label; + $comp1Label->setObjectName( "comp1Label" ); + my $palette = Qt::Palette(); + my $brush = Qt::Brush(Qt::Color(0, 0, 0, 255)); + $brush->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + my $brush1 = Qt::Brush(Qt::Color(230, 240, 249, 255)); + $brush1->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + my $brush2 = Qt::Brush(Qt::Color(255, 255, 255, 255)); + $brush2->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + my $brush3 = Qt::Brush(Qt::Color(242, 247, 252, 255)); + $brush3->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + my $brush4 = Qt::Brush(Qt::Color(115, 120, 124, 255)); + $brush4->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + my $brush5 = Qt::Brush(Qt::Color(154, 160, 166, 255)); + $brush5->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + my $brush6 = Qt::Brush(Qt::Color(255, 255, 127, 255)); + $brush6->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + my $brush7 = Qt::Brush(Qt::Color(0, 0, 128, 255)); + $brush7->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + my $brush8 = Qt::Brush(Qt::Color(0, 0, 238, 255)); + $brush8->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + my $brush9 = Qt::Brush(Qt::Color(82, 24, 139, 255)); + $brush9->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + my $brush10 = Qt::Brush(Qt::Color(128, 128, 128, 255)); + $brush10->setStyle( Qt::SolidPattern() ); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp1Label->setPalette( $palette ); + $comp1Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp1Label, 0, 0, 1, 1 ); + + my $comp2Label = Qt::Label( $groupBox ); + $self->{comp2Label} = $comp2Label; + $comp2Label->setObjectName( "comp2Label" ); + my $palette1 = Qt::Palette(); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette1->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette1->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette1->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp2Label->setPalette( $palette1 ); + $comp2Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp2Label, 0, 2, 1, 1 ); + + my $comp3Label = Qt::Label( $groupBox ); + $self->{comp3Label} = $comp3Label; + $comp3Label->setObjectName( "comp3Label" ); + my $palette2 = Qt::Palette(); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette2->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette2->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette2->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $comp3Label->setPalette( $palette2 ); + $comp3Label->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $comp3Label, 0, 4, 1, 1 ); + + my $fitType1 = Qt::ComboBox( $groupBox ); + $self->{fitType1} = $fitType1; + $fitType1->setObjectName( "fitType1" ); + $sizePolicy3->setHeightForWidth( $fitType1->sizePolicy()->hasHeightForWidth() ); + $fitType1->setSizePolicy( $sizePolicy3 ); + $fitType1->setMinimumSize( Qt::Size(0, 25) ); + $fitType1->setMaximumSize( Qt::Size(16777215, 25) ); + $fitType1->setAutoCompletion( 0 ); + $fitType1->setDuplicatesEnabled( 0 ); + + $gridLayout_8->addWidget( $fitType1, 1, 0, 1, 2 ); + + my $fitType2 = Qt::ComboBox( $groupBox ); + $self->{fitType2} = $fitType2; + $fitType2->setObjectName( "fitType2" ); + $sizePolicy3->setHeightForWidth( $fitType2->sizePolicy()->hasHeightForWidth() ); + $fitType2->setSizePolicy( $sizePolicy3 ); + $fitType2->setMinimumSize( Qt::Size(0, 25) ); + $fitType2->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $fitType2, 1, 2, 1, 2 ); + + my $fitType3 = Qt::ComboBox( $groupBox ); + $self->{fitType3} = $fitType3; + $fitType3->setObjectName( "fitType3" ); + $sizePolicy3->setHeightForWidth( $fitType3->sizePolicy()->hasHeightForWidth() ); + $fitType3->setSizePolicy( $sizePolicy3 ); + $fitType3->setMinimumSize( Qt::Size(0, 25) ); + $fitType3->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $fitType3, 1, 4, 1, 1 ); + + my $tisLabel = Qt::Label( $groupBox ); + $self->{tisLabel} = $tisLabel; + $tisLabel->setObjectName( "tisLabel" ); + $sizePolicy3->setHeightForWidth( $tisLabel->sizePolicy()->hasHeightForWidth() ); + $tisLabel->setSizePolicy( $sizePolicy3 ); + $tisLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $tisLabel, 2, 0, 1, 1 ); + + my $tfsLabel = Qt::Label( $groupBox ); + $self->{tfsLabel} = $tfsLabel; + $tfsLabel->setObjectName( "tfsLabel" ); + $sizePolicy3->setHeightForWidth( $tfsLabel->sizePolicy()->hasHeightForWidth() ); + $tfsLabel->setSizePolicy( $sizePolicy3 ); + $tfsLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $tfsLabel, 2, 2, 1, 1 ); + + my $binsLabel = Qt::Label( $groupBox ); + $self->{binsLabel} = $binsLabel; + $binsLabel->setObjectName( "binsLabel" ); + $sizePolicy3->setHeightForWidth( $binsLabel->sizePolicy()->hasHeightForWidth() ); + $binsLabel->setSizePolicy( $sizePolicy3 ); + $binsLabel->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $binsLabel, 2, 4, 1, 1 ); + + my $tis = Qt::LineEdit( $groupBox ); + $self->{tis} = $tis; + $tis->setObjectName( "tis" ); + $sizePolicy3->setHeightForWidth( $tis->sizePolicy()->hasHeightForWidth() ); + $tis->setSizePolicy( $sizePolicy3 ); + $tis->setMinimumSize( Qt::Size(0, 25) ); + $tis->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $tis, 3, 0, 1, 1 ); + + my $tfs = Qt::LineEdit( $groupBox ); + $self->{tfs} = $tfs; + $tfs->setObjectName( "tfs" ); + $sizePolicy3->setHeightForWidth( $tfs->sizePolicy()->hasHeightForWidth() ); + $tfs->setSizePolicy( $sizePolicy3 ); + $tfs->setMinimumSize( Qt::Size(0, 25) ); + $tfs->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $tfs, 3, 2, 1, 1 ); + + my $bins = Qt::LineEdit( $groupBox ); + $self->{bins} = $bins; + $bins->setObjectName( "bins" ); + $sizePolicy3->setHeightForWidth( $bins->sizePolicy()->hasHeightForWidth() ); + $bins->setSizePolicy( $sizePolicy3 ); + $bins->setMinimumSize( Qt::Size(0, 25) ); + $bins->setMaximumSize( Qt::Size(16777215, 25) ); + + $gridLayout_8->addWidget( $bins, 3, 4, 1, 1 ); + + my $textLabel1_4 = Qt::Label( $groupBox ); + $self->{textLabel1_4} = $textLabel1_4; + $textLabel1_4->setObjectName( "textLabel1_4" ); + $textLabel1_4->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4, 4, 0, 1, 1 ); + + my $textLabel1_8 = Qt::Label( $groupBox ); + $self->{textLabel1_8} = $textLabel1_8; + $textLabel1_8->setObjectName( "textLabel1_8" ); + $textLabel1_8->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_8, 4, 2, 1, 1 ); + + my $textLabel1_4_2_2 = Qt::Label( $groupBox ); + $self->{textLabel1_4_2_2} = $textLabel1_4_2_2; + $textLabel1_4_2_2->setObjectName( "textLabel1_4_2_2" ); + $textLabel1_4_2_2->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_2_2, 4, 4, 1, 1 ); + + my $xi = Qt::LineEdit( $groupBox ); + $self->{xi} = $xi; + $xi->setObjectName( "xi" ); + $xi->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $xi, 5, 0, 1, 1 ); + + my $xf = Qt::LineEdit( $groupBox ); + $self->{xf} = $xf; + $xf->setObjectName( "xf" ); + $xf->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $xf, 5, 2, 1, 1 ); + + my $viewBin = Qt::LineEdit( $groupBox ); + $self->{viewBin} = $viewBin; + $viewBin->setObjectName( "viewBin" ); + $viewBin->setMinimumSize( Qt::Size(0, 25) ); + + $gridLayout_8->addWidget( $viewBin, 5, 3, 1, 2 ); + + my $textLabel1_4_2 = Qt::Label( $groupBox ); + $self->{textLabel1_4_2} = $textLabel1_4_2; + $textLabel1_4_2->setObjectName( "textLabel1_4_2" ); + $textLabel1_4_2->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_2, 6, 0, 1, 1 ); + + my $textLabel1_4_3 = Qt::Label( $groupBox ); + $self->{textLabel1_4_3} = $textLabel1_4_3; + $textLabel1_4_3->setObjectName( "textLabel1_4_3" ); + $textLabel1_4_3->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_3, 6, 2, 1, 1 ); + + my $textLabel1_4_4 = Qt::Label( $groupBox ); + $self->{textLabel1_4_4} = $textLabel1_4_4; + $textLabel1_4_4->setObjectName( "textLabel1_4_4" ); + $textLabel1_4_4->setWordWrap( 0 ); + + $gridLayout_8->addWidget( $textLabel1_4_4, 6, 4, 1, 1 ); + + my $yi = Qt::LineEdit( $groupBox ); + $self->{yi} = $yi; + $yi->setObjectName( "yi" ); + + $gridLayout_8->addWidget( $yi, 7, 0, 1, 1 ); + + my $yf = Qt::LineEdit( $groupBox ); + $self->{yf} = $yf; + $yf->setObjectName( "yf" ); + + $gridLayout_8->addWidget( $yf, 7, 1, 1, 2 ); + + my $ltc = Qt::CheckBox( $groupBox ); + $self->{ltc} = $ltc; + $ltc->setObjectName( "ltc" ); + $ltc->setChecked( 1 ); + + $gridLayout_8->addWidget( $ltc, 7, 4, 1, 1 ); + + + $gridLayout_2->addWidget( $groupBox, 2, 0, 1, 1 ); + + + $gridLayout_1->addLayout( $gridLayout_2, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $runsPage, Qt::Application::translate( 'MuSRFit4', "RUNS", undef, Qt::Application::UnicodeUTF8() ) ); + my $fittingPage = Qt::Widget( ); + $self->{fittingPage} = $fittingPage; + $fittingPage->setObjectName( "fittingPage" ); + my $gridLayout1 = Qt::GridLayout( $fittingPage ); + $self->{gridLayout1} = $gridLayout1; + $gridLayout1->setSpacing( 6 ); + $gridLayout1->setMargin( 11 ); + $gridLayout1->setObjectName( "gridLayout1" ); + my $fitGrid = Qt::VBoxLayout( ); + $self->{fitGrid} = $fitGrid; + $fitGrid->setSpacing( 6 ); + $fitGrid->setObjectName( "fitGrid" ); + my $fitLayout = Qt::GridLayout( ); + $self->{fitLayout} = $fitLayout; + $fitLayout->setSpacing( 6 ); + $fitLayout->setObjectName( "fitLayout" ); + my $errorCalc = Qt::ComboBox( $fittingPage ); + $self->{errorCalc} = $errorCalc; + $errorCalc->setObjectName( "errorCalc" ); + $errorCalc->setMinimumSize( Qt::Size(0, 25) ); + $errorCalc->setMaximumSize( Qt::Size(150, 16777215) ); + + $fitLayout->addWidget( $errorCalc, 1, 1, 1, 1 ); + + my $minimization = Qt::ComboBox( $fittingPage ); + $self->{minimization} = $minimization; + $minimization->setObjectName( "minimization" ); + $minimization->setMinimumSize( Qt::Size(0, 25) ); + $minimization->setMaximumSize( Qt::Size(150, 16777215) ); + + $fitLayout->addWidget( $minimization, 0, 1, 1, 1 ); + + my $textLabel1_5 = Qt::Label( $fittingPage ); + $self->{textLabel1_5} = $textLabel1_5; + $textLabel1_5->setObjectName( "textLabel1_5" ); + $textLabel1_5->setAlignment( Qt::AlignRight()|Qt::AlignTrailing()|Qt::AlignVCenter() ); + $textLabel1_5->setWordWrap( 0 ); + + $fitLayout->addWidget( $textLabel1_5, 0, 0, 1, 1 ); + + my $textLabel1_5_2 = Qt::Label( $fittingPage ); + $self->{textLabel1_5_2} = $textLabel1_5_2; + $textLabel1_5_2->setObjectName( "textLabel1_5_2" ); + $textLabel1_5_2->setAlignment( Qt::AlignRight()|Qt::AlignTrailing()|Qt::AlignVCenter() ); + $textLabel1_5_2->setWordWrap( 0 ); + + $fitLayout->addWidget( $textLabel1_5_2, 1, 0, 1, 1 ); + + + $fitGrid->addLayout( $fitLayout ); + + + $gridLayout1->addLayout( $fitGrid, 0, 0, 1, 1 ); + + my $fitTextOutput = Qt::TextEdit( $fittingPage ); + $self->{fitTextOutput} = $fitTextOutput; + $fitTextOutput->setObjectName( "fitTextOutput" ); + + $gridLayout1->addWidget( $fitTextOutput, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $fittingPage, Qt::Application::translate( 'MuSRFit4', "Fitting", undef, Qt::Application::UnicodeUTF8() ) ); + my $sharingPage = Qt::Widget( ); + $self->{sharingPage} = $sharingPage; + $sharingPage->setObjectName( "sharingPage" ); + my $gridLayout2 = Qt::GridLayout( $sharingPage ); + $self->{gridLayout2} = $gridLayout2; + $gridLayout2->setSpacing( 6 ); + $gridLayout2->setMargin( 11 ); + $gridLayout2->setObjectName( "gridLayout2" ); + my $buttonGroupSharing = Qt::GroupBox( $sharingPage ); + $self->{buttonGroupSharing} = $buttonGroupSharing; + $buttonGroupSharing->setObjectName( "buttonGroupSharing" ); + $sizePolicy5->setHeightForWidth( $buttonGroupSharing->sizePolicy()->hasHeightForWidth() ); + $buttonGroupSharing->setSizePolicy( $sizePolicy5 ); + $buttonGroupSharing->setAlignment( Qt::AlignLeading() ); + $buttonGroupSharing->setCheckable( 1 ); + $buttonGroupSharing->setChecked( 0 ); + my $gridLayout_7 = Qt::GridLayout( $buttonGroupSharing ); + $self->{gridLayout_7} = $gridLayout_7; + $gridLayout_7->setSpacing( 6 ); + $gridLayout_7->setMargin( 11 ); + $gridLayout_7->setObjectName( "gridLayout_7" ); + my $horizontalLayout = Qt::HBoxLayout( ); + $self->{horizontalLayout} = $horizontalLayout; + $horizontalLayout->setSpacing( 6 ); + $horizontalLayout->setObjectName( "horizontalLayout" ); + my $sharingComp1 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp1} = $sharingComp1; + $sharingComp1->setObjectName( "sharingComp1" ); + $sharingComp1->setEnabled( 0 ); + my $sizePolicy6 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::MinimumExpanding() ); + $self->{$sizePolicy6} = $sizePolicy6; + $sizePolicy6->setHorizontalStretch( 0 ); + $sizePolicy6->setVerticalStretch( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp1->sizePolicy()->hasHeightForWidth() ); + $sharingComp1->setSizePolicy( $sizePolicy6 ); + $sharingComp1->setAlignment( Qt::AlignLeading() ); + my $layout14 = Qt::Widget( $sharingComp1 ); + $self->{layout14} = $layout14; + $layout14->setObjectName( "layout14" ); + $layout14->setGeometry( Qt::Rect(40, 60, 81, 266) ); + my $_5 = Qt::VBoxLayout( $layout14 ); + $self->{_5} = $_5; + $_5->setSpacing( 0 ); + $_5->setMargin( 0 ); + $_5->setObjectName( "_5" ); + $_5->setContentsMargins(0, 0, 0, 0 ); + my $shParam_1_1 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_1} = $shParam_1_1; + $shParam_1_1->setObjectName( "shParam_1_1" ); + + $_5->addWidget( $shParam_1_1 ); + + my $shParam_1_2 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_2} = $shParam_1_2; + $shParam_1_2->setObjectName( "shParam_1_2" ); + + $_5->addWidget( $shParam_1_2 ); + + my $shParam_1_3 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_3} = $shParam_1_3; + $shParam_1_3->setObjectName( "shParam_1_3" ); + + $_5->addWidget( $shParam_1_3 ); + + my $shParam_1_4 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_4} = $shParam_1_4; + $shParam_1_4->setObjectName( "shParam_1_4" ); + + $_5->addWidget( $shParam_1_4 ); + + my $shParam_1_5 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_5} = $shParam_1_5; + $shParam_1_5->setObjectName( "shParam_1_5" ); + $shParam_1_5->setEnabled( 0 ); + $shParam_1_5->setTristate( 0 ); + + $_5->addWidget( $shParam_1_5 ); + + my $shParam_1_6 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_6} = $shParam_1_6; + $shParam_1_6->setObjectName( "shParam_1_6" ); + $shParam_1_6->setEnabled( 0 ); + $shParam_1_6->setTristate( 0 ); + + $_5->addWidget( $shParam_1_6 ); + + my $shParam_1_7 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_7} = $shParam_1_7; + $shParam_1_7->setObjectName( "shParam_1_7" ); + $shParam_1_7->setEnabled( 0 ); + $shParam_1_7->setTristate( 0 ); + + $_5->addWidget( $shParam_1_7 ); + + my $shParam_1_8 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_8} = $shParam_1_8; + $shParam_1_8->setObjectName( "shParam_1_8" ); + $shParam_1_8->setEnabled( 0 ); + $shParam_1_8->setTristate( 0 ); + + $_5->addWidget( $shParam_1_8 ); + + my $shParam_1_9 = Qt::CheckBox( $layout14 ); + $self->{shParam_1_9} = $shParam_1_9; + $shParam_1_9->setObjectName( "shParam_1_9" ); + $shParam_1_9->setEnabled( 0 ); + $shParam_1_9->setTristate( 0 ); + + $_5->addWidget( $shParam_1_9 ); + + my $comp1ShLabel = Qt::Label( $sharingComp1 ); + $self->{comp1ShLabel} = $comp1ShLabel; + $comp1ShLabel->setObjectName( "comp1ShLabel" ); + $comp1ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp1ShLabel->setWordWrap( 0 ); + + $horizontalLayout->addWidget( $sharingComp1 ); + + my $sharingComp2 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp2} = $sharingComp2; + $sharingComp2->setObjectName( "sharingComp2" ); + $sharingComp2->setEnabled( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp2->sizePolicy()->hasHeightForWidth() ); + $sharingComp2->setSizePolicy( $sizePolicy6 ); + my $comp2ShLabel = Qt::Label( $sharingComp2 ); + $self->{comp2ShLabel} = $comp2ShLabel; + $comp2ShLabel->setObjectName( "comp2ShLabel" ); + $comp2ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp2ShLabel->setWordWrap( 0 ); + my $layout13 = Qt::Widget( $sharingComp2 ); + $self->{layout13} = $layout13; + $layout13->setObjectName( "layout13" ); + $layout13->setGeometry( Qt::Rect(40, 60, 81, 266) ); + my $_1 = Qt::VBoxLayout( $layout13 ); + $self->{_1} = $_1; + $_1->setSpacing( 0 ); + $_1->setMargin( 0 ); + $_1->setObjectName( "_1" ); + $_1->setContentsMargins(0, 0, 0, 0 ); + my $shParam_2_1 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_1} = $shParam_2_1; + $shParam_2_1->setObjectName( "shParam_2_1" ); + + $_1->addWidget( $shParam_2_1 ); + + my $shParam_2_2 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_2} = $shParam_2_2; + $shParam_2_2->setObjectName( "shParam_2_2" ); + + $_1->addWidget( $shParam_2_2 ); + + my $shParam_2_3 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_3} = $shParam_2_3; + $shParam_2_3->setObjectName( "shParam_2_3" ); + + $_1->addWidget( $shParam_2_3 ); + + my $shParam_2_4 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_4} = $shParam_2_4; + $shParam_2_4->setObjectName( "shParam_2_4" ); + + $_1->addWidget( $shParam_2_4 ); + + my $shParam_2_5 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_5} = $shParam_2_5; + $shParam_2_5->setObjectName( "shParam_2_5" ); + + $_1->addWidget( $shParam_2_5 ); + + my $shParam_2_6 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_6} = $shParam_2_6; + $shParam_2_6->setObjectName( "shParam_2_6" ); + $shParam_2_6->setEnabled( 0 ); + $shParam_2_6->setTristate( 0 ); + + $_1->addWidget( $shParam_2_6 ); + + my $shParam_2_7 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_7} = $shParam_2_7; + $shParam_2_7->setObjectName( "shParam_2_7" ); + $shParam_2_7->setEnabled( 0 ); + $shParam_2_7->setTristate( 0 ); + + $_1->addWidget( $shParam_2_7 ); + + my $shParam_2_8 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_8} = $shParam_2_8; + $shParam_2_8->setObjectName( "shParam_2_8" ); + $shParam_2_8->setEnabled( 0 ); + $shParam_2_8->setTristate( 0 ); + + $_1->addWidget( $shParam_2_8 ); + + my $shParam_2_9 = Qt::CheckBox( $layout13 ); + $self->{shParam_2_9} = $shParam_2_9; + $shParam_2_9->setObjectName( "shParam_2_9" ); + $shParam_2_9->setEnabled( 0 ); + $shParam_2_9->setTristate( 0 ); + + $_1->addWidget( $shParam_2_9 ); + + + $horizontalLayout->addWidget( $sharingComp2 ); + + my $sharingComp3 = Qt::GroupBox( $buttonGroupSharing ); + $self->{sharingComp3} = $sharingComp3; + $sharingComp3->setObjectName( "sharingComp3" ); + $sharingComp3->setEnabled( 0 ); + $sizePolicy6->setHeightForWidth( $sharingComp3->sizePolicy()->hasHeightForWidth() ); + $sharingComp3->setSizePolicy( $sizePolicy6 ); + $sharingComp3->setAlignment( Qt::AlignJustify()|Qt::AlignVCenter() ); + my $comp3ShLabel = Qt::Label( $sharingComp3 ); + $self->{comp3ShLabel} = $comp3ShLabel; + $comp3ShLabel->setObjectName( "comp3ShLabel" ); + $comp3ShLabel->setGeometry( Qt::Rect(2, 30, 141, 20) ); + $comp3ShLabel->setWordWrap( 0 ); + my $layout15 = Qt::Widget( $sharingComp3 ); + $self->{layout15} = $layout15; + $layout15->setObjectName( "layout15" ); + $layout15->setGeometry( Qt::Rect(41, 58, 81, 266) ); + my $_3 = Qt::VBoxLayout( $layout15 ); + $self->{_3} = $_3; + $_3->setSpacing( 6 ); + $_3->setMargin( 11 ); + $_3->setObjectName( "_3" ); + $_3->setContentsMargins(0, 0, 0, 0 ); + my $shParam_3_1 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_1} = $shParam_3_1; + $shParam_3_1->setObjectName( "shParam_3_1" ); + + $_3->addWidget( $shParam_3_1 ); + + my $shParam_3_2 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_2} = $shParam_3_2; + $shParam_3_2->setObjectName( "shParam_3_2" ); + + $_3->addWidget( $shParam_3_2 ); + + my $shParam_3_3 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_3} = $shParam_3_3; + $shParam_3_3->setObjectName( "shParam_3_3" ); + + $_3->addWidget( $shParam_3_3 ); + + my $shParam_3_4 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_4} = $shParam_3_4; + $shParam_3_4->setObjectName( "shParam_3_4" ); + + $_3->addWidget( $shParam_3_4 ); + + my $shParam_3_5 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_5} = $shParam_3_5; + $shParam_3_5->setObjectName( "shParam_3_5" ); + + $_3->addWidget( $shParam_3_5 ); + + my $shParam_3_6 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_6} = $shParam_3_6; + $shParam_3_6->setObjectName( "shParam_3_6" ); + $shParam_3_6->setEnabled( 0 ); + $shParam_3_6->setTristate( 0 ); + + $_3->addWidget( $shParam_3_6 ); + + my $shParam_3_7 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_7} = $shParam_3_7; + $shParam_3_7->setObjectName( "shParam_3_7" ); + $shParam_3_7->setEnabled( 0 ); + $shParam_3_7->setTristate( 0 ); + + $_3->addWidget( $shParam_3_7 ); + + my $shParam_3_8 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_8} = $shParam_3_8; + $shParam_3_8->setObjectName( "shParam_3_8" ); + $shParam_3_8->setEnabled( 0 ); + $shParam_3_8->setTristate( 0 ); + + $_3->addWidget( $shParam_3_8 ); + + my $shParam_3_9 = Qt::CheckBox( $layout15 ); + $self->{shParam_3_9} = $shParam_3_9; + $shParam_3_9->setObjectName( "shParam_3_9" ); + $shParam_3_9->setEnabled( 0 ); + $shParam_3_9->setTristate( 0 ); + + $_3->addWidget( $shParam_3_9 ); + + + $horizontalLayout->addWidget( $sharingComp3 ); + + + $gridLayout_7->addLayout( $horizontalLayout, 0, 0, 1, 1 ); + + + $gridLayout2->addWidget( $buttonGroupSharing, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $sharingPage, Qt::Application::translate( 'MuSRFit4', "Sharing", undef, Qt::Application::UnicodeUTF8() ) ); + my $initializationPage = Qt::Widget( ); + $self->{initializationPage} = $initializationPage; + $initializationPage->setObjectName( "initializationPage" ); + my $gridLayout3 = Qt::GridLayout( $initializationPage ); + $self->{gridLayout3} = $gridLayout3; + $gridLayout3->setSpacing( 6 ); + $gridLayout3->setMargin( 11 ); + $gridLayout3->setObjectName( "gridLayout3" ); + my $initParamTable = Qt::TableWidget( $initializationPage ); + $self->{initParamTable} = $initParamTable; + $initParamTable->setObjectName( "initParamTable" ); + $initParamTable->setRowCount( 1 ); + $initParamTable->setColumnCount( 4 ); + + $gridLayout3->addWidget( $initParamTable, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $initializationPage, Qt::Application::translate( 'MuSRFit4', "Initialization", undef, Qt::Application::UnicodeUTF8() ) ); + my $msrPage = Qt::Widget( ); + $self->{msrPage} = $msrPage; + $msrPage->setObjectName( "msrPage" ); + my $gridLayout4 = Qt::GridLayout( $msrPage ); + $self->{gridLayout4} = $gridLayout4; + $gridLayout4->setSpacing( 6 ); + $gridLayout4->setMargin( 11 ); + $gridLayout4->setObjectName( "gridLayout4" ); + my $vboxLayout = Qt::VBoxLayout( ); + $self->{vboxLayout} = $vboxLayout; + $vboxLayout->setSpacing( 6 ); + $vboxLayout->setMargin( 0 ); + $vboxLayout->setObjectName( "vboxLayout" ); + my $groupTitle = Qt::GroupBox( $msrPage ); + $self->{groupTitle} = $groupTitle; + $groupTitle->setObjectName( "groupTitle" ); + $sizePolicy1->setHeightForWidth( $groupTitle->sizePolicy()->hasHeightForWidth() ); + $groupTitle->setSizePolicy( $sizePolicy1 ); + my $gridLayout5 = Qt::GridLayout( $groupTitle ); + $self->{gridLayout5} = $gridLayout5; + $gridLayout5->setSpacing( 6 ); + $gridLayout5->setMargin( 11 ); + $gridLayout5->setObjectName( "gridLayout5" ); + my $vboxLayout1 = Qt::VBoxLayout( ); + $self->{vboxLayout1} = $vboxLayout1; + $vboxLayout1->setSpacing( 6 ); + $vboxLayout1->setObjectName( "vboxLayout1" ); + my $titleLabel = Qt::Label( $groupTitle ); + $self->{titleLabel} = $titleLabel; + $titleLabel->setObjectName( "titleLabel" ); + $sizePolicy4->setHeightForWidth( $titleLabel->sizePolicy()->hasHeightForWidth() ); + $titleLabel->setSizePolicy( $sizePolicy4 ); + $titleLabel->setWordWrap( 0 ); + + $vboxLayout1->addWidget( $titleLabel ); + + my $title = Qt::LineEdit( $groupTitle ); + $self->{title} = $title; + $title->setObjectName( "title" ); + my $sizePolicy7 = Qt::SizePolicy( Qt::SizePolicy::Expanding(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy7} = $sizePolicy7; + $sizePolicy7->setHorizontalStretch( 1 ); + $sizePolicy7->setVerticalStretch( 1 ); + $sizePolicy7->setHeightForWidth( $title->sizePolicy()->hasHeightForWidth() ); + $title->setSizePolicy( $sizePolicy7 ); + + $vboxLayout1->addWidget( $title ); + + my $hboxLayout = Qt::HBoxLayout( ); + $self->{hboxLayout} = $hboxLayout; + $hboxLayout->setSpacing( 6 ); + $hboxLayout->setObjectName( "hboxLayout" ); + my $fileNameLabel = Qt::Label( $groupTitle ); + $self->{fileNameLabel} = $fileNameLabel; + $fileNameLabel->setObjectName( "fileNameLabel" ); + $fileNameLabel->setWordWrap( 0 ); + + $hboxLayout->addWidget( $fileNameLabel ); + + my $fileName = Qt::LineEdit( $groupTitle ); + $self->{fileName} = $fileName; + $fileName->setObjectName( "fileName" ); + $sizePolicy1->setHeightForWidth( $fileName->sizePolicy()->hasHeightForWidth() ); + $fileName->setSizePolicy( $sizePolicy1 ); + + $hboxLayout->addWidget( $fileName ); + + + $vboxLayout1->addLayout( $hboxLayout ); + + + $gridLayout5->addLayout( $vboxLayout1, 0, 0, 1, 1 ); + + + $vboxLayout->addWidget( $groupTitle ); + + my $textMSROutput = Qt::TextEdit( $msrPage ); + $self->{textMSROutput} = $textMSROutput; + $textMSROutput->setObjectName( "textMSROutput" ); + $textMSROutput->setOverwriteMode( 1 ); + + $vboxLayout->addWidget( $textMSROutput ); + + + $gridLayout4->addLayout( $vboxLayout, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $msrPage, Qt::Application::translate( 'MuSRFit4', "MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + my $fourierPage = Qt::Widget( ); + $self->{fourierPage} = $fourierPage; + $fourierPage->setObjectName( "fourierPage" ); + my $gridLayout6 = Qt::GridLayout( $fourierPage ); + $self->{gridLayout6} = $gridLayout6; + $gridLayout6->setSpacing( 6 ); + $gridLayout6->setMargin( 11 ); + $gridLayout6->setObjectName( "gridLayout6" ); + my $fourierBox = Qt::GroupBox( $fourierPage ); + $self->{fourierBox} = $fourierBox; + $fourierBox->setObjectName( "fourierBox" ); + $sizePolicy5->setHeightForWidth( $fourierBox->sizePolicy()->hasHeightForWidth() ); + $fourierBox->setSizePolicy( $sizePolicy5 ); + my $layout34 = Qt::Widget( $fourierBox ); + $self->{layout34} = $layout34; + $layout34->setObjectName( "layout34" ); + $layout34->setGeometry( Qt::Rect(12, 19, 510, 117) ); + my $gridLayout7 = Qt::GridLayout( $layout34 ); + $self->{gridLayout7} = $gridLayout7; + $gridLayout7->setSpacing( 5 ); + $gridLayout7->setMargin( 5 ); + $gridLayout7->setObjectName( "gridLayout7" ); + $gridLayout7->setContentsMargins(0, 0, 0, 0 ); + my $frqMax = Qt::LineEdit( $layout34 ); + $self->{frqMax} = $frqMax; + $frqMax->setObjectName( "frqMax" ); + $sizePolicy4->setHeightForWidth( $frqMax->sizePolicy()->hasHeightForWidth() ); + $frqMax->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $frqMax, 0, 6, 1, 1 ); + + my $funits = Qt::ComboBox( $layout34 ); + $self->{funits} = $funits; + $funits->setObjectName( "funits" ); + my $sizePolicy8 = Qt::SizePolicy( Qt::SizePolicy::Ignored(), Qt::SizePolicy::Preferred() ); + $self->{$sizePolicy8} = $sizePolicy8; + $sizePolicy8->setHorizontalStretch( 0 ); + $sizePolicy8->setVerticalStretch( 0 ); + $sizePolicy8->setHeightForWidth( $funits->sizePolicy()->hasHeightForWidth() ); + $funits->setSizePolicy( $sizePolicy8 ); + + $gridLayout7->addWidget( $funits, 0, 2, 1, 1 ); + + my $fplot = Qt::ComboBox( $layout34 ); + $self->{fplot} = $fplot; + $fplot->setObjectName( "fplot" ); + $sizePolicy4->setHeightForWidth( $fplot->sizePolicy()->hasHeightForWidth() ); + $fplot->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fplot, 2, 2, 1, 1 ); + + my $textLabel1_3_8 = Qt::Label( $layout34 ); + $self->{textLabel1_3_8} = $textLabel1_3_8; + $textLabel1_3_8->setObjectName( "textLabel1_3_8" ); + $textLabel1_3_8->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_8, 2, 6, 1, 1 ); + + my $textLabel1_7 = Qt::Label( $layout34 ); + $self->{textLabel1_7} = $textLabel1_7; + $textLabel1_7->setObjectName( "textLabel1_7" ); + $textLabel1_7->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_7, 1, 3, 1, 1 ); + + my $fplotLabel = Qt::Label( $layout34 ); + $self->{fplotLabel} = $fplotLabel; + $fplotLabel->setObjectName( "fplotLabel" ); + $fplotLabel->setWordWrap( 0 ); + + $gridLayout7->addWidget( $fplotLabel, 2, 1, 1, 1 ); + + my $textLabel1_3_4 = Qt::Label( $layout34 ); + $self->{textLabel1_3_4} = $textLabel1_3_4; + $textLabel1_3_4->setObjectName( "textLabel1_3_4" ); + $textLabel1_3_4->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_4, 1, 6, 1, 1 ); + + my $fapodization = Qt::ComboBox( $layout34 ); + $self->{fapodization} = $fapodization; + $fapodization->setObjectName( "fapodization" ); + $sizePolicy4->setHeightForWidth( $fapodization->sizePolicy()->hasHeightForWidth() ); + $fapodization->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fapodization, 1, 2, 1, 1 ); + + my $fapodizationLabel = Qt::Label( $layout34 ); + $self->{fapodizationLabel} = $fapodizationLabel; + $fapodizationLabel->setObjectName( "fapodizationLabel" ); + $fapodizationLabel->setWordWrap( 0 ); + + $gridLayout7->addWidget( $fapodizationLabel, 1, 1, 1, 1 ); + + my $textLabel1_3_3 = Qt::Label( $layout34 ); + $self->{textLabel1_3_3} = $textLabel1_3_3; + $textLabel1_3_3->setObjectName( "textLabel1_3_3" ); + $textLabel1_3_3->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_3, 1, 5, 1, 1 ); + + my $textLabel1_2 = Qt::Label( $layout34 ); + $self->{textLabel1_2} = $textLabel1_2; + $textLabel1_2->setObjectName( "textLabel1_2" ); + $textLabel1_2->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_2, 0, 5, 1, 1 ); + + my $textLabel1_3_6 = Qt::Label( $layout34 ); + $self->{textLabel1_3_6} = $textLabel1_3_6; + $textLabel1_3_6->setObjectName( "textLabel1_3_6" ); + $textLabel1_3_6->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_6, 2, 4, 1, 1 ); + + my $fphase = Qt::LineEdit( $layout34 ); + $self->{fphase} = $fphase; + $fphase->setObjectName( "fphase" ); + $sizePolicy4->setHeightForWidth( $fphase->sizePolicy()->hasHeightForWidth() ); + $fphase->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $fphase, 1, 4, 1, 1 ); + + my $textLabel1_3_5 = Qt::Label( $layout34 ); + $self->{textLabel1_3_5} = $textLabel1_3_5; + $textLabel1_3_5->setObjectName( "textLabel1_3_5" ); + $textLabel1_3_5->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_5, 2, 3, 1, 1 ); + + my $textLabel1_3_7 = Qt::Label( $layout34 ); + $self->{textLabel1_3_7} = $textLabel1_3_7; + $textLabel1_3_7->setObjectName( "textLabel1_3_7" ); + $textLabel1_3_7->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1_3_7, 2, 5, 1, 1 ); + + my $frqMin = Qt::LineEdit( $layout34 ); + $self->{frqMin} = $frqMin; + $frqMin->setObjectName( "frqMin" ); + $sizePolicy4->setHeightForWidth( $frqMin->sizePolicy()->hasHeightForWidth() ); + $frqMin->setSizePolicy( $sizePolicy4 ); + + $gridLayout7->addWidget( $frqMin, 0, 4, 1, 1 ); + + my $textLabel1 = Qt::Label( $layout34 ); + $self->{textLabel1} = $textLabel1; + $textLabel1->setObjectName( "textLabel1" ); + $textLabel1->setWordWrap( 0 ); + + $gridLayout7->addWidget( $textLabel1, 0, 3, 1, 1 ); + + my $label = Qt::Label( $layout34 ); + $self->{label} = $label; + $label->setObjectName( "label" ); + + $gridLayout7->addWidget( $label, 0, 1, 1, 1 ); + + + $gridLayout6->addWidget( $fourierBox, 0, 0, 1, 1 ); + + my $rrfBox = Qt::GroupBox( $fourierPage ); + $self->{rrfBox} = $rrfBox; + $rrfBox->setObjectName( "rrfBox" ); + $sizePolicy5->setHeightForWidth( $rrfBox->sizePolicy()->hasHeightForWidth() ); + $rrfBox->setSizePolicy( $sizePolicy5 ); + my $layout35 = Qt::Widget( $rrfBox ); + $self->{layout35} = $layout35; + $layout35->setObjectName( "layout35" ); + $layout35->setGeometry( Qt::Rect(10, 18, 265, 100) ); + my $gridLayout8 = Qt::GridLayout( $layout35 ); + $self->{gridLayout8} = $gridLayout8; + $gridLayout8->setSpacing( 5 ); + $gridLayout8->setMargin( 5 ); + $gridLayout8->setObjectName( "gridLayout8" ); + $gridLayout8->setContentsMargins(0, 0, 0, 0 ); + my $textLabel1_6_2_2 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_2} = $textLabel1_6_2_2; + $textLabel1_6_2_2->setObjectName( "textLabel1_6_2_2" ); + $textLabel1_6_2_2->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_2, 2, 0, 1, 1 ); + + my $textLabel1_6 = Qt::Label( $layout35 ); + $self->{textLabel1_6} = $textLabel1_6; + $textLabel1_6->setObjectName( "textLabel1_6" ); + $textLabel1_6->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6, 0, 0, 1, 1 ); + + my $textLabel1_6_2_4 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_4} = $textLabel1_6_2_4; + $textLabel1_6_2_4->setObjectName( "textLabel1_6_2_4" ); + $textLabel1_6_2_4->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_4, 2, 2, 1, 1 ); + + my $rrfFrq = Qt::LineEdit( $layout35 ); + $self->{rrfFrq} = $rrfFrq; + $rrfFrq->setObjectName( "rrfFrq" ); + + $gridLayout8->addWidget( $rrfFrq, 0, 1, 1, 1 ); + + my $textLabel1_6_2_3 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2_3} = $textLabel1_6_2_3; + $textLabel1_6_2_3->setObjectName( "textLabel1_6_2_3" ); + $textLabel1_6_2_3->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2_3, 1, 2, 1, 1 ); + + my $rrfPack = Qt::LineEdit( $layout35 ); + $self->{rrfPack} = $rrfPack; + $rrfPack->setObjectName( "rrfPack" ); + + $gridLayout8->addWidget( $rrfPack, 1, 1, 1, 1 ); + + my $textLabel1_6_2 = Qt::Label( $layout35 ); + $self->{textLabel1_6_2} = $textLabel1_6_2; + $textLabel1_6_2->setObjectName( "textLabel1_6_2" ); + $textLabel1_6_2->setWordWrap( 0 ); + + $gridLayout8->addWidget( $textLabel1_6_2, 1, 0, 1, 1 ); + + my $rrfUnits = Qt::ComboBox( $layout35 ); + $self->{rrfUnits} = $rrfUnits; + $rrfUnits->setObjectName( "rrfUnits" ); + + $gridLayout8->addWidget( $rrfUnits, 0, 2, 1, 1 ); + + my $rrfPhase = Qt::LineEdit( $layout35 ); + $self->{rrfPhase} = $rrfPhase; + $rrfPhase->setObjectName( "rrfPhase" ); + + $gridLayout8->addWidget( $rrfPhase, 2, 1, 1, 1 ); + + + $gridLayout6->addWidget( $rrfBox, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $fourierPage, Qt::Application::translate( 'MuSRFit4', "FFT/RRF", undef, Qt::Application::UnicodeUTF8() ) ); + my $t0Page = Qt::Widget( ); + $self->{t0Page} = $t0Page; + $t0Page->setObjectName( "t0Page" ); + my $gridLayout9 = Qt::GridLayout( $t0Page ); + $self->{gridLayout9} = $gridLayout9; + $gridLayout9->setSpacing( 6 ); + $gridLayout9->setMargin( 11 ); + $gridLayout9->setObjectName( "gridLayout9" ); + my $hboxLayout1 = Qt::HBoxLayout( ); + $self->{hboxLayout1} = $hboxLayout1; + $hboxLayout1->setSpacing( 6 ); + $hboxLayout1->setObjectName( "hboxLayout1" ); + my $groupHist0 = Qt::GroupBox( $t0Page ); + $self->{groupHist0} = $groupHist0; + $groupHist0->setObjectName( "groupHist0" ); + $sizePolicy->setHeightForWidth( $groupHist0->sizePolicy()->hasHeightForWidth() ); + $groupHist0->setSizePolicy( $sizePolicy ); + $groupHist0->setMinimumSize( Qt::Size(0, 0) ); + my $layout16_2 = Qt::Widget( $groupHist0 ); + $self->{layout16_2} = $layout16_2; + $layout16_2->setObjectName( "layout16_2" ); + $layout16_2->setGeometry( Qt::Rect(5, 18, 100, 150) ); + my $vboxLayout2 = Qt::VBoxLayout( $layout16_2 ); + $self->{vboxLayout2} = $vboxLayout2; + $vboxLayout2->setSpacing( 6 ); + $vboxLayout2->setMargin( 11 ); + $vboxLayout2->setObjectName( "vboxLayout2" ); + $vboxLayout2->setContentsMargins(0, 0, 0, 0 ); + my $textLabel2 = Qt::Label( $layout16_2 ); + $self->{textLabel2} = $textLabel2; + $textLabel2->setObjectName( "textLabel2" ); + $textLabel2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2 ); + + my $textLabel2_2_2_3 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_3} = $textLabel2_2_2_3; + $textLabel2_2_2_3->setObjectName( "textLabel2_2_2_3" ); + $textLabel2_2_2_3->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_3 ); + + my $textLabel2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2} = $textLabel2_2_2; + $textLabel2_2_2->setObjectName( "textLabel2_2_2" ); + $textLabel2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2 ); + + my $textLabel2_2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_2} = $textLabel2_2_2_2; + $textLabel2_2_2_2->setObjectName( "textLabel2_2_2_2" ); + $textLabel2_2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_2 ); + + my $textLabel2_2_2_2_2 = Qt::Label( $layout16_2 ); + $self->{textLabel2_2_2_2_2} = $textLabel2_2_2_2_2; + $textLabel2_2_2_2_2->setObjectName( "textLabel2_2_2_2_2" ); + $textLabel2_2_2_2_2->setWordWrap( 0 ); + + $vboxLayout2->addWidget( $textLabel2_2_2_2_2 ); + + + $hboxLayout1->addWidget( $groupHist0 ); + + my $groupHist1 = Qt::GroupBox( $t0Page ); + $self->{groupHist1} = $groupHist1; + $groupHist1->setObjectName( "groupHist1" ); + $sizePolicy->setHeightForWidth( $groupHist1->sizePolicy()->hasHeightForWidth() ); + $groupHist1->setSizePolicy( $sizePolicy ); + $groupHist1->setMinimumSize( Qt::Size(0, 0) ); + my $layout18 = Qt::Widget( $groupHist1 ); + $self->{layout18} = $layout18; + $layout18->setObjectName( "layout18" ); + $layout18->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout3 = Qt::VBoxLayout( $layout18 ); + $self->{vboxLayout3} = $vboxLayout3; + $vboxLayout3->setSpacing( 0 ); + $vboxLayout3->setMargin( 0 ); + $vboxLayout3->setObjectName( "vboxLayout3" ); + $vboxLayout3->setContentsMargins(0, 0, 0, 0 ); + my $t01 = Qt::LineEdit( $layout18 ); + $self->{t01} = $t01; + $t01->setObjectName( "t01" ); + + $vboxLayout3->addWidget( $t01 ); + + my $bg11 = Qt::LineEdit( $layout18 ); + $self->{bg11} = $bg11; + $bg11->setObjectName( "bg11" ); + + $vboxLayout3->addWidget( $bg11 ); + + my $bg21 = Qt::LineEdit( $layout18 ); + $self->{bg21} = $bg21; + $bg21->setObjectName( "bg21" ); + + $vboxLayout3->addWidget( $bg21 ); + + my $data11 = Qt::LineEdit( $layout18 ); + $self->{data11} = $data11; + $data11->setObjectName( "data11" ); + + $vboxLayout3->addWidget( $data11 ); + + my $data21 = Qt::LineEdit( $layout18 ); + $self->{data21} = $data21; + $data21->setObjectName( "data21" ); + + $vboxLayout3->addWidget( $data21 ); + + + $hboxLayout1->addWidget( $groupHist1 ); + + my $groupHist2 = Qt::GroupBox( $t0Page ); + $self->{groupHist2} = $groupHist2; + $groupHist2->setObjectName( "groupHist2" ); + $groupHist2->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist2->sizePolicy()->hasHeightForWidth() ); + $groupHist2->setSizePolicy( $sizePolicy ); + my $layout18_2 = Qt::Widget( $groupHist2 ); + $self->{layout18_2} = $layout18_2; + $layout18_2->setObjectName( "layout18_2" ); + $layout18_2->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout4 = Qt::VBoxLayout( $layout18_2 ); + $self->{vboxLayout4} = $vboxLayout4; + $vboxLayout4->setSpacing( 0 ); + $vboxLayout4->setMargin( 0 ); + $vboxLayout4->setObjectName( "vboxLayout4" ); + $vboxLayout4->setContentsMargins(0, 0, 0, 0 ); + my $t02 = Qt::LineEdit( $layout18_2 ); + $self->{t02} = $t02; + $t02->setObjectName( "t02" ); + + $vboxLayout4->addWidget( $t02 ); + + my $bg12 = Qt::LineEdit( $layout18_2 ); + $self->{bg12} = $bg12; + $bg12->setObjectName( "bg12" ); + + $vboxLayout4->addWidget( $bg12 ); + + my $bg22 = Qt::LineEdit( $layout18_2 ); + $self->{bg22} = $bg22; + $bg22->setObjectName( "bg22" ); + + $vboxLayout4->addWidget( $bg22 ); + + my $data12 = Qt::LineEdit( $layout18_2 ); + $self->{data12} = $data12; + $data12->setObjectName( "data12" ); + + $vboxLayout4->addWidget( $data12 ); + + my $data22 = Qt::LineEdit( $layout18_2 ); + $self->{data22} = $data22; + $data22->setObjectName( "data22" ); + + $vboxLayout4->addWidget( $data22 ); + + + $hboxLayout1->addWidget( $groupHist2 ); + + my $groupHist3 = Qt::GroupBox( $t0Page ); + $self->{groupHist3} = $groupHist3; + $groupHist3->setObjectName( "groupHist3" ); + $groupHist3->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist3->sizePolicy()->hasHeightForWidth() ); + $groupHist3->setSizePolicy( $sizePolicy ); + my $layout18_3 = Qt::Widget( $groupHist3 ); + $self->{layout18_3} = $layout18_3; + $layout18_3->setObjectName( "layout18_3" ); + $layout18_3->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout5 = Qt::VBoxLayout( $layout18_3 ); + $self->{vboxLayout5} = $vboxLayout5; + $vboxLayout5->setSpacing( 0 ); + $vboxLayout5->setMargin( 0 ); + $vboxLayout5->setObjectName( "vboxLayout5" ); + $vboxLayout5->setContentsMargins(0, 0, 0, 0 ); + my $t03 = Qt::LineEdit( $layout18_3 ); + $self->{t03} = $t03; + $t03->setObjectName( "t03" ); + + $vboxLayout5->addWidget( $t03 ); + + my $bg13 = Qt::LineEdit( $layout18_3 ); + $self->{bg13} = $bg13; + $bg13->setObjectName( "bg13" ); + + $vboxLayout5->addWidget( $bg13 ); + + my $bg23 = Qt::LineEdit( $layout18_3 ); + $self->{bg23} = $bg23; + $bg23->setObjectName( "bg23" ); + + $vboxLayout5->addWidget( $bg23 ); + + my $data13 = Qt::LineEdit( $layout18_3 ); + $self->{data13} = $data13; + $data13->setObjectName( "data13" ); + + $vboxLayout5->addWidget( $data13 ); + + my $data23 = Qt::LineEdit( $layout18_3 ); + $self->{data23} = $data23; + $data23->setObjectName( "data23" ); + + $vboxLayout5->addWidget( $data23 ); + + + $hboxLayout1->addWidget( $groupHist3 ); + + my $groupHist4 = Qt::GroupBox( $t0Page ); + $self->{groupHist4} = $groupHist4; + $groupHist4->setObjectName( "groupHist4" ); + $groupHist4->setEnabled( 1 ); + $sizePolicy->setHeightForWidth( $groupHist4->sizePolicy()->hasHeightForWidth() ); + $groupHist4->setSizePolicy( $sizePolicy ); + my $layout18_4 = Qt::Widget( $groupHist4 ); + $self->{layout18_4} = $layout18_4; + $layout18_4->setObjectName( "layout18_4" ); + $layout18_4->setGeometry( Qt::Rect(8, 17, 75, 150) ); + my $vboxLayout6 = Qt::VBoxLayout( $layout18_4 ); + $self->{vboxLayout6} = $vboxLayout6; + $vboxLayout6->setSpacing( 0 ); + $vboxLayout6->setMargin( 0 ); + $vboxLayout6->setObjectName( "vboxLayout6" ); + $vboxLayout6->setContentsMargins(0, 0, 0, 0 ); + my $t04 = Qt::LineEdit( $layout18_4 ); + $self->{t04} = $t04; + $t04->setObjectName( "t04" ); + + $vboxLayout6->addWidget( $t04 ); + + my $bg14 = Qt::LineEdit( $layout18_4 ); + $self->{bg14} = $bg14; + $bg14->setObjectName( "bg14" ); + + $vboxLayout6->addWidget( $bg14 ); + + my $bg24 = Qt::LineEdit( $layout18_4 ); + $self->{bg24} = $bg24; + $bg24->setObjectName( "bg24" ); + + $vboxLayout6->addWidget( $bg24 ); + + my $data14 = Qt::LineEdit( $layout18_4 ); + $self->{data14} = $data14; + $data14->setObjectName( "data14" ); + + $vboxLayout6->addWidget( $data14 ); + + my $data24 = Qt::LineEdit( $layout18_4 ); + $self->{data24} = $data24; + $data24->setObjectName( "data24" ); + + $vboxLayout6->addWidget( $data24 ); + + + $hboxLayout1->addWidget( $groupHist4 ); + + + $gridLayout9->addLayout( $hboxLayout1, 0, 0, 1, 1 ); + + my $hboxLayout2 = Qt::HBoxLayout( ); + $self->{hboxLayout2} = $hboxLayout2; + $hboxLayout2->setSpacing( 6 ); + $hboxLayout2->setObjectName( "hboxLayout2" ); + my $spacer1 = Qt::SpacerItem( 461, 20, Qt::SizePolicy::Expanding(), Qt::SizePolicy::Minimum() ); + + $hboxLayout2->addItem( $spacer1 ); + + my $t0Update = Qt::PushButton( $t0Page ); + $self->{t0Update} = $t0Update; + $t0Update->setObjectName( "t0Update" ); + $t0Update->setEnabled( 0 ); + my $sizePolicy9 = Qt::SizePolicy( Qt::SizePolicy::Fixed(), Qt::SizePolicy::Fixed() ); + $self->{$sizePolicy9} = $sizePolicy9; + $sizePolicy9->setHorizontalStretch( 0 ); + $sizePolicy9->setVerticalStretch( 0 ); + $sizePolicy9->setHeightForWidth( $t0Update->sizePolicy()->hasHeightForWidth() ); + $t0Update->setSizePolicy( $sizePolicy9 ); + + $hboxLayout2->addWidget( $t0Update ); + + + $gridLayout9->addLayout( $hboxLayout2, 1, 0, 1, 1 ); + + $musrfit_tabs->addTab( $t0Page, Qt::Application::translate( 'MuSRFit4', "t0/Bg", undef, Qt::Application::UnicodeUTF8() ) ); + my $tabPage = Qt::Widget( ); + $self->{tabPage} = $tabPage; + $tabPage->setObjectName( "tabPage" ); + my $gridLayout10 = Qt::GridLayout( $tabPage ); + $self->{gridLayout10} = $gridLayout10; + $gridLayout10->setSpacing( 6 ); + $gridLayout10->setMargin( 11 ); + $gridLayout10->setObjectName( "gridLayout10" ); + my $vboxLayout7 = Qt::VBoxLayout( ); + $self->{vboxLayout7} = $vboxLayout7; + $vboxLayout7->setSpacing( 6 ); + $vboxLayout7->setObjectName( "vboxLayout7" ); + my $gridLayout11 = Qt::GridLayout( ); + $self->{gridLayout11} = $gridLayout11; + $gridLayout11->setSpacing( 6 ); + $gridLayout11->setObjectName( "gridLayout11" ); + my $theoryBlock_Label = Qt::Label( $tabPage ); + $self->{theoryBlock_Label} = $theoryBlock_Label; + $theoryBlock_Label->setObjectName( "theoryBlock_Label" ); + my $palette3 = Qt::Palette(); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette3->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette3->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette3->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $theoryBlock_Label->setPalette( $palette3 ); + $theoryBlock_Label->setWordWrap( 0 ); + + $gridLayout11->addWidget( $theoryBlock_Label, 0, 0, 1, 1 ); + + my $theoryBlock = Qt::TextEdit( $tabPage ); + $self->{theoryBlock} = $theoryBlock; + $theoryBlock->setObjectName( "theoryBlock" ); + $theoryBlock->setEnabled( 1 ); + + $gridLayout11->addWidget( $theoryBlock, 1, 0, 1, 1 ); + + my $parametersList_Label = Qt::Label( $tabPage ); + $self->{parametersList_Label} = $parametersList_Label; + $parametersList_Label->setObjectName( "parametersList_Label" ); + my $palette4 = Qt::Palette(); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette4->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette4->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette4->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $parametersList_Label->setPalette( $palette4 ); + $parametersList_Label->setWordWrap( 0 ); + + $gridLayout11->addWidget( $parametersList_Label, 0, 1, 1, 1 ); + + my $parametersList = Qt::TextEdit( $tabPage ); + $self->{parametersList} = $parametersList; + $parametersList->setObjectName( "parametersList" ); + $parametersList->setEnabled( 1 ); + + $gridLayout11->addWidget( $parametersList, 1, 1, 1, 1 ); + + + $vboxLayout7->addLayout( $gridLayout11 ); + + my $hboxLayout3 = Qt::HBoxLayout( ); + $self->{hboxLayout3} = $hboxLayout3; + $hboxLayout3->setSpacing( 6 ); + $hboxLayout3->setObjectName( "hboxLayout3" ); + my $cParamsCombo = Qt::ComboBox( $tabPage ); + $self->{cParamsCombo} = $cParamsCombo; + $cParamsCombo->setObjectName( "cParamsCombo" ); + $sizePolicy9->setHeightForWidth( $cParamsCombo->sizePolicy()->hasHeightForWidth() ); + $cParamsCombo->setSizePolicy( $sizePolicy9 ); + + $hboxLayout3->addWidget( $cParamsCombo ); + + my $textLabel1_4_6 = Qt::Label( $tabPage ); + $self->{textLabel1_4_6} = $textLabel1_4_6; + $textLabel1_4_6->setObjectName( "textLabel1_4_6" ); + $sizePolicy9->setHeightForWidth( $textLabel1_4_6->sizePolicy()->hasHeightForWidth() ); + $textLabel1_4_6->setSizePolicy( $sizePolicy9 ); + $textLabel1_4_6->setWordWrap( 0 ); + + $hboxLayout3->addWidget( $textLabel1_4_6 ); + + my $constraintLine = Qt::LineEdit( $tabPage ); + $self->{constraintLine} = $constraintLine; + $constraintLine->setObjectName( "constraintLine" ); + $sizePolicy1->setHeightForWidth( $constraintLine->sizePolicy()->hasHeightForWidth() ); + $constraintLine->setSizePolicy( $sizePolicy1 ); + $constraintLine->setMinimumSize( Qt::Size(0, 25) ); + + $hboxLayout3->addWidget( $constraintLine ); + + my $addConstraint = Qt::PushButton( $tabPage ); + $self->{addConstraint} = $addConstraint; + $addConstraint->setObjectName( "addConstraint" ); + $sizePolicy9->setHeightForWidth( $addConstraint->sizePolicy()->hasHeightForWidth() ); + $addConstraint->setSizePolicy( $sizePolicy9 ); + + $hboxLayout3->addWidget( $addConstraint ); + + + $vboxLayout7->addLayout( $hboxLayout3 ); + + my $textLabel2_2_3_4 = Qt::Label( $tabPage ); + $self->{textLabel2_2_3_4} = $textLabel2_2_3_4; + $textLabel2_2_3_4->setObjectName( "textLabel2_2_3_4" ); + my $palette5 = Qt::Palette(); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::WindowText(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Midlight(), $brush3); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Text(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::ButtonText(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::Link(), $brush); + $palette5->setBrush(Qt::Palette::Active(), Qt::Palette::LinkVisited(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::WindowText(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Midlight(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Text(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::ButtonText(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::Link(), $brush8); + $palette5->setBrush(Qt::Palette::Inactive(), Qt::Palette::LinkVisited(), $brush9); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::WindowText(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Button(), $brush1); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Light(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Midlight(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Dark(), $brush4); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Mid(), $brush5); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Text(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::BrightText(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::ButtonText(), $brush10); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Base(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Window(), $brush6); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Shadow(), $brush); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Highlight(), $brush7); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::HighlightedText(), $brush2); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::Link(), $brush8); + $palette5->setBrush(Qt::Palette::Disabled(), Qt::Palette::LinkVisited(), $brush9); + $textLabel2_2_3_4->setPalette( $palette5 ); + $textLabel2_2_3_4->setWordWrap( 0 ); + + $vboxLayout7->addWidget( $textLabel2_2_3_4 ); + + my $functionsBlock = Qt::TextEdit( $tabPage ); + $self->{functionsBlock} = $functionsBlock; + $functionsBlock->setObjectName( "functionsBlock" ); + + $vboxLayout7->addWidget( $functionsBlock ); + + my $hboxLayout4 = Qt::HBoxLayout( ); + $self->{hboxLayout4} = $hboxLayout4; + $hboxLayout4->setSpacing( 6 ); + $hboxLayout4->setObjectName( "hboxLayout4" ); + my $textLabel1_6_3 = Qt::Label( $tabPage ); + $self->{textLabel1_6_3} = $textLabel1_6_3; + $textLabel1_6_3->setObjectName( "textLabel1_6_3" ); + $textLabel1_6_3->setWordWrap( 0 ); + + $hboxLayout4->addWidget( $textLabel1_6_3 ); + + my $resetFunc = Qt::PushButton( $tabPage ); + $self->{resetFunc} = $resetFunc; + $resetFunc->setObjectName( "resetFunc" ); + $resetFunc->setMaximumSize( Qt::Size(100, 32767) ); + + $hboxLayout4->addWidget( $resetFunc ); + + + $vboxLayout7->addLayout( $hboxLayout4 ); + + + $gridLayout10->addLayout( $vboxLayout7, 0, 0, 1, 1 ); + + $musrfit_tabs->addTab( $tabPage, Qt::Application::translate( 'MuSRFit4', "Constraints", undef, Qt::Application::UnicodeUTF8() ) ); + + $gridLayout->addWidget( $musrfit_tabs, 0, 0, 1, 1 ); + + $muSRFit4->setCentralWidget( $widget ); + my $menuBar = Qt::MenuBar( $muSRFit4 ); + $self->{menuBar} = $menuBar; + $menuBar->setObjectName( "menuBar" ); + $menuBar->setEnabled( 1 ); + $menuBar->setGeometry( Qt::Rect(0, 0, 600, 20) ); + my $fileMenu = Qt::Menu( $menuBar ); + $self->{fileMenu} = $fileMenu; + $fileMenu->setObjectName( "fileMenu" ); + my $actions = Qt::Menu( $menuBar ); + $self->{actions} = $actions; + $actions->setObjectName( "actions" ); + my $parameters = Qt::Menu( $menuBar ); + $self->{parameters} = $parameters; + $parameters->setObjectName( "parameters" ); + my $options = Qt::Menu( $menuBar ); + $self->{options} = $options; + $options->setObjectName( "options" ); + my $helpMenu = Qt::Menu( $menuBar ); + $self->{helpMenu} = $helpMenu; + $helpMenu->setObjectName( "helpMenu" ); + $muSRFit4->setMenuBar( $menuBar ); + my $fileToolBar = Qt::ToolBar( $muSRFit4 ); + $self->{fileToolBar} = $fileToolBar; + $fileToolBar->setObjectName( "fileToolBar" ); + $muSRFit4->addToolBar( Qt::TopToolBarArea(), $fileToolBar ); + my $actionsToolBar = Qt::ToolBar( $muSRFit4 ); + $self->{actionsToolBar} = $actionsToolBar; + $actionsToolBar->setObjectName( "actionsToolBar" ); + $actionsToolBar->setMinimumSize( Qt::Size(0, 0) ); + $muSRFit4->addToolBar( Qt::TopToolBarArea(), $actionsToolBar ); + Qt::Widget::setTabOrder( $musrfit_tabs, $runNumbers ); + Qt::Widget::setTabOrder( $runNumbers, $beamLine ); + Qt::Widget::setTabOrder( $beamLine, $year ); + Qt::Widget::setTabOrder( $year, $runFiles ); + Qt::Widget::setTabOrder( $runFiles, $browse ); + Qt::Widget::setTabOrder( $browse, $fitType1 ); + Qt::Widget::setTabOrder( $fitType1, $fitType2 ); + Qt::Widget::setTabOrder( $fitType2, $fitType3 ); + Qt::Widget::setTabOrder( $fitType3, $tis ); + Qt::Widget::setTabOrder( $tis, $tfs ); + Qt::Widget::setTabOrder( $tfs, $bins ); + Qt::Widget::setTabOrder( $bins, $xi ); + Qt::Widget::setTabOrder( $xi, $xf ); + Qt::Widget::setTabOrder( $xf, $viewBin ); + Qt::Widget::setTabOrder( $viewBin, $yi ); + Qt::Widget::setTabOrder( $yi, $yf ); + Qt::Widget::setTabOrder( $yf, $ltc ); + Qt::Widget::setTabOrder( $ltc, $fitAsyType ); + Qt::Widget::setTabOrder( $fitAsyType, $histsLRBF ); + Qt::Widget::setTabOrder( $histsLRBF, $minimization ); + Qt::Widget::setTabOrder( $minimization, $errorCalc ); + Qt::Widget::setTabOrder( $errorCalc, $fitTextOutput ); + Qt::Widget::setTabOrder( $fitTextOutput, $buttonGroupSharing ); + Qt::Widget::setTabOrder( $buttonGroupSharing, $shParam_1_1 ); + Qt::Widget::setTabOrder( $shParam_1_1, $shParam_1_2 ); + Qt::Widget::setTabOrder( $shParam_1_2, $shParam_1_3 ); + Qt::Widget::setTabOrder( $shParam_1_3, $shParam_1_4 ); + Qt::Widget::setTabOrder( $shParam_1_4, $shParam_1_5 ); + Qt::Widget::setTabOrder( $shParam_1_5, $shParam_1_6 ); + Qt::Widget::setTabOrder( $shParam_1_6, $shParam_1_7 ); + Qt::Widget::setTabOrder( $shParam_1_7, $shParam_1_8 ); + Qt::Widget::setTabOrder( $shParam_1_8, $shParam_1_9 ); + Qt::Widget::setTabOrder( $shParam_1_9, $shParam_2_1 ); + Qt::Widget::setTabOrder( $shParam_2_1, $shParam_2_2 ); + Qt::Widget::setTabOrder( $shParam_2_2, $shParam_2_3 ); + Qt::Widget::setTabOrder( $shParam_2_3, $shParam_2_4 ); + Qt::Widget::setTabOrder( $shParam_2_4, $shParam_2_5 ); + Qt::Widget::setTabOrder( $shParam_2_5, $shParam_2_6 ); + Qt::Widget::setTabOrder( $shParam_2_6, $shParam_2_7 ); + Qt::Widget::setTabOrder( $shParam_2_7, $shParam_2_8 ); + Qt::Widget::setTabOrder( $shParam_2_8, $shParam_2_9 ); + Qt::Widget::setTabOrder( $shParam_2_9, $shParam_3_1 ); + Qt::Widget::setTabOrder( $shParam_3_1, $shParam_3_2 ); + Qt::Widget::setTabOrder( $shParam_3_2, $shParam_3_3 ); + Qt::Widget::setTabOrder( $shParam_3_3, $shParam_3_4 ); + Qt::Widget::setTabOrder( $shParam_3_4, $shParam_3_5 ); + Qt::Widget::setTabOrder( $shParam_3_5, $shParam_3_6 ); + Qt::Widget::setTabOrder( $shParam_3_6, $shParam_3_7 ); + Qt::Widget::setTabOrder( $shParam_3_7, $shParam_3_8 ); + Qt::Widget::setTabOrder( $shParam_3_8, $shParam_3_9 ); + Qt::Widget::setTabOrder( $shParam_3_9, $initParamTable ); + Qt::Widget::setTabOrder( $initParamTable, $title ); + Qt::Widget::setTabOrder( $title, $fileName ); + Qt::Widget::setTabOrder( $fileName, $textMSROutput ); + Qt::Widget::setTabOrder( $textMSROutput, $funits ); + Qt::Widget::setTabOrder( $funits, $fapodization ); + Qt::Widget::setTabOrder( $fapodization, $fplot ); + Qt::Widget::setTabOrder( $fplot, $frqMin ); + Qt::Widget::setTabOrder( $frqMin, $fphase ); + Qt::Widget::setTabOrder( $fphase, $frqMax ); + Qt::Widget::setTabOrder( $frqMax, $rrfFrq ); + Qt::Widget::setTabOrder( $rrfFrq, $rrfUnits ); + Qt::Widget::setTabOrder( $rrfUnits, $rrfPack ); + Qt::Widget::setTabOrder( $rrfPack, $rrfPhase ); + Qt::Widget::setTabOrder( $rrfPhase, $t01 ); + Qt::Widget::setTabOrder( $t01, $bg11 ); + Qt::Widget::setTabOrder( $bg11, $bg21 ); + Qt::Widget::setTabOrder( $bg21, $data11 ); + Qt::Widget::setTabOrder( $data11, $data21 ); + Qt::Widget::setTabOrder( $data21, $t02 ); + Qt::Widget::setTabOrder( $t02, $bg12 ); + Qt::Widget::setTabOrder( $bg12, $bg22 ); + Qt::Widget::setTabOrder( $bg22, $data12 ); + Qt::Widget::setTabOrder( $data12, $data22 ); + Qt::Widget::setTabOrder( $data22, $t03 ); + Qt::Widget::setTabOrder( $t03, $bg13 ); + Qt::Widget::setTabOrder( $bg13, $bg23 ); + Qt::Widget::setTabOrder( $bg23, $data13 ); + Qt::Widget::setTabOrder( $data13, $data23 ); + Qt::Widget::setTabOrder( $data23, $t04 ); + Qt::Widget::setTabOrder( $t04, $bg14 ); + Qt::Widget::setTabOrder( $bg14, $bg24 ); + Qt::Widget::setTabOrder( $bg24, $data14 ); + Qt::Widget::setTabOrder( $data14, $data24 ); + Qt::Widget::setTabOrder( $data24, $t0Update ); + Qt::Widget::setTabOrder( $t0Update, $theoryBlock ); + Qt::Widget::setTabOrder( $theoryBlock, $parametersList ); + Qt::Widget::setTabOrder( $parametersList, $cParamsCombo ); + Qt::Widget::setTabOrder( $cParamsCombo, $constraintLine ); + Qt::Widget::setTabOrder( $constraintLine, $addConstraint ); + Qt::Widget::setTabOrder( $addConstraint, $functionsBlock ); + Qt::Widget::setTabOrder( $functionsBlock, $resetFunc ); + + $menuBar->addAction( $fileMenu->menuAction() ); + $menuBar->addAction( $actions->menuAction() ); + $menuBar->addAction( $parameters->menuAction() ); + $menuBar->addAction( $options->menuAction() ); + $menuBar->addAction( $helpMenu->menuAction() ); + $menuBar->addSeparator(); + $fileMenu->addAction( $fileSaveAction ); + $fileMenu->addAction( $fileChangeDirAction ); + $fileMenu->addSeparator(); + $fileMenu->addAction( $fileExitAction ); + $actions->addAction( $fit ); + $actions->addAction( $plot ); + $actions->addAction( $t0 ); + $parameters->addAction( $parametersExport_AsAction ); + $parameters->addAction( $parametersAppend_ToAction ); + $options->addAction( $fileExistCheck ); + $options->addAction( $manualFile ); + $helpMenu->addAction( $helpAboutAction ); + $fileToolBar->addAction( $fileExitAction ); + $fileToolBar->addAction( $fileChangeDirAction ); + $fileToolBar->addAction( $fileSaveAction ); + $actionsToolBar->addAction( $fit ); + $actionsToolBar->addAction( $plot ); + $actionsToolBar->addAction( $t0 ); + $actionsToolBar->addAction( $parametersExport_AsAction ); + $actionsToolBar->addAction( $parametersAppend_ToAction ); + + $self->retranslateUi( $muSRFit4 ); + Qt::Object::connect($fit, SIGNAL 'activated()' , $muSRFit4, SLOT 'GoFit()' ); + Qt::Object::connect($parametersAppend_ToAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'parametersAppend()' ); + Qt::Object::connect($parametersExport_AsAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'parametersExport()' ); + Qt::Object::connect($fileChangeDirAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileChangeDir()' ); + Qt::Object::connect($fileSaveAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileSave()' ); + Qt::Object::connect($fileExitAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'fileExit()' ); + Qt::Object::connect($helpAboutAction, SIGNAL 'activated()' , $muSRFit4, SLOT 'helpAbout()' ); + Qt::Object::connect($t0, SIGNAL 'activated()' , $muSRFit4, SLOT 'ShowMuSRT0()' ); + Qt::Object::connect($plot, SIGNAL 'activated()' , $muSRFit4, SLOT 'GoPlot()' ); + Qt::Object::connect($resetFunc, SIGNAL 'clicked()' , $muSRFit4, SLOT 'InitializeFunctions()' ); + Qt::Object::connect($addConstraint, SIGNAL 'clicked()' , $muSRFit4, SLOT 'AppendToFunctions()' ); + Qt::Object::connect($buttonGroupSharing, SIGNAL 'toggled(bool)' , $muSRFit4, SLOT 'ActivateShComp()' ); + Qt::Object::connect($musrfit_tabs, SIGNAL 'currentChanged(int)' , $muSRFit4, SLOT 'TabChanged()' ); + Qt::Object::connect($t0Update, SIGNAL 'clicked()' , $muSRFit4, SLOT 't0UpdateClicked()' ); + Qt::Object::connect($buttonGroupSharing, SIGNAL 'toggled(bool)' , $muSRFit4, SLOT 'ActivateShComp()' ); + Qt::Object::connect($menuBar, SIGNAL 'triggered(QAction*)' , $muSRFit4, SLOT 'RunSelectionToggle()' ); + Qt::Object::connect($fitType1, SIGNAL 'currentIndexChanged(int)' , $muSRFit4, SLOT 'InitializeFunctions()' ); + Qt::Object::connect($beamLine, SIGNAL 'currentIndexChanged(int)' , $muSRFit4, SLOT 't0Update()' ); + + $musrfit_tabs->setCurrentIndex( 0 ); + $fitType2->setCurrentIndex( 18 ); + $fitType3->setCurrentIndex( 18 ); + + + Qt::MetaObject::connectSlotsByName( $muSRFit4 ); + return $self; +} # setupUi + +sub setup_ui { + my ( $muSRFit4 ) = @_; + return setupUi( $muSRFit4 ); +} + +sub retranslateUi { + my ( $self, $muSRFit4 ) = @_; + $muSRFit4->setWindowTitle( Qt::Application::translate( 'MuSRFit4', "MuSRFit GUI", undef, Qt::Application::UnicodeUTF8() ) ); + $muSRFit4->setWindowIconText( Qt::Application::translate( 'MuSRFit4', "MuSRFitGUI", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Save MSR...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "&Save MSR...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setStatusTip( Qt::Application::translate( 'MuSRFit4', "&Save MSR", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileSaveAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+S", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{fileExitAction}->setText( Qt::Application::translate( 'MuSRFit4', "E&xit", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExitAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Exit", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExitAction}->setShortcut( Qt::KeySequence( '' ) ); + $self->{helpAboutAction}->setText( Qt::Application::translate( 'MuSRFit4', "&About", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpAboutAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "About", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpAboutAction}->setShortcut( Qt::KeySequence( '' ) ); + $self->{fileExistCheck}->setText( Qt::Application::translate( 'MuSRFit4', "No Overwrite", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setIconText( Qt::Application::translate( 'MuSRFit4', "Overwrite MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Enable overwriting MSR files", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileExistCheck}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Enable/Disable checking for MSR files.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{manualFile}->setText( Qt::Application::translate( 'MuSRFit4', "Maual file selection", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{manualFile}->setIconText( Qt::Application::translate( 'MuSRFit4', "Maual file selection", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Change dir", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "&Change dir", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileChangeDirAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+C", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{optionsnew_itemAction}->setText( Qt::Application::translate( 'MuSRFit4', "new item", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsnew_itemAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "new item", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Export As...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Export As...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersExport_AsAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Alt+E", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{parametersAppend_ToAction}->setText( Qt::Application::translate( 'MuSRFit4', "&Append To...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersAppend_ToAction}->setIconText( Qt::Application::translate( 'MuSRFit4', "Append To...", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersAppend_ToAction}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Alt+A", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{fit}->setIconText( Qt::Application::translate( 'MuSRFit4', "Fit and Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fit}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+F", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{plot}->setIconText( Qt::Application::translate( 'MuSRFit4', "Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{plot}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+P", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{t0}->setIconText( Qt::Application::translate( 'MuSRFit4', "Show t0 and Bg Bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0}->setShortcut( Qt::KeySequence( Qt::Application::translate( 'MuSRFit4', "Ctrl+T", undef, Qt::Application::UnicodeUTF8() ) ) ); + $self->{optionsFourier}->setText( Qt::Application::translate( 'MuSRFit4', "Fourier", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsFourier}->setIconText( Qt::Application::translate( 'MuSRFit4', "Fourier", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsT0}->setText( Qt::Application::translate( 'MuSRFit4', "T0 and Bg bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{optionsT0}->setIconText( Qt::Application::translate( 'MuSRFit4', "T0 and Bg bins", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runsMan}->setTitle( Qt::Application::translate( 'MuSRFit4', "RUN Files", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runFiles}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Names of data files to be fit. Multiple data files are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runFiles}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Names of data files to be fit. Multiple data files are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Browse to select data files for fitting.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Browse to select data files for fitting.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{browse}->setText( Qt::Application::translate( 'MuSRFit4', "Browse", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitAsyTypeLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Fit type", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitAsyType}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Asymmetry", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "SingleHist", undef, Qt::Application::UnicodeUTF8() )]); + $self->{histsLRBFLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Histograms list", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{histsLRBF}->setText( Qt::Application::translate( 'MuSRFit4', "1 5,3 7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runsAuto}->setTitle( Qt::Application::translate( 'MuSRFit4', "RUN Numbers", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{yearLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Year", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{beamLineLabel}->setText( Qt::Application::translate( 'MuSRFit4', "On beam line", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{beamLine}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "LEM", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "GPS", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Dolly", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "LTF", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "LEM (PPC)", undef, Qt::Application::UnicodeUTF8() )]); + $self->{runNumbers}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Numbers of RUNs to fit. Multiple runs are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runNumbers}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Numbers of RUNs to fit. Multiple runs are comma separated.", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{runNumbers}->setText( '' ); + $self->{groupBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Theory Function", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp1Label}->setText( Qt::Application::translate( 'MuSRFit4', "First Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp2Label}->setText( Qt::Application::translate( 'MuSRFit4', "Second Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp3Label}->setText( Qt::Application::translate( 'MuSRFit4', "Third Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fitType1}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fitType2}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "None", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fitType3}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "Exponential", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Exp.", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Exponential Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Stretch Cos", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Dynamic KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Background", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lorentzian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gaussian Kubo-Toyabe LF x Str Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MolMag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Meissner State Model", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x Exp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Lor-Gss combi KT x SExp", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "None", undef, Qt::Application::UnicodeUTF8() )]); + $self->{tisLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Initial Fit Time", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tfsLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Final Fit Time", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{binsLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Fit Binning Factor", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tis}->setText( Qt::Application::translate( 'MuSRFit4', "0", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{tfs}->setText( Qt::Application::translate( 'MuSRFit4', "8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{bins}->setText( Qt::Application::translate( 'MuSRFit4', "100", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4}->setText( Qt::Application::translate( 'MuSRFit4', "Min X", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_8}->setText( Qt::Application::translate( 'MuSRFit4', "Max X", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "View Binning Factor", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_2}->setText( Qt::Application::translate( 'MuSRFit4', "Min Y", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_3}->setText( Qt::Application::translate( 'MuSRFit4', "Max Y", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_4}->setText( '' ); + $self->{ltc}->setText( Qt::Application::translate( 'MuSRFit4', "Life time correction", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{runsPage}), Qt::Application::translate( 'MuSRFit4', "RUNS", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{errorCalc}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "HESSE", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MINOS", undef, Qt::Application::UnicodeUTF8() )]); + $self->{minimization}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MINIMIZE", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MIGRAD", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "SIMPLEX", undef, Qt::Application::UnicodeUTF8() )]); + $self->{textLabel1_5}->setText( Qt::Application::translate( 'MuSRFit4', "Minimization type", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_5_2}->setText( Qt::Application::translate( 'MuSRFit4', "Error estimation", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{fittingPage}), Qt::Application::translate( 'MuSRFit4', "Fitting", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{buttonGroupSharing}->setTitle( Qt::Application::translate( 'MuSRFit4', "Shared parameters among different runs", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp1}->setTitle( Qt::Application::translate( 'MuSRFit4', "1st Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_1_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp1ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp2}->setTitle( Qt::Application::translate( 'MuSRFit4', "2nd Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp2ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_2_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{sharingComp3}->setTitle( Qt::Application::translate( 'MuSRFit4', "3rd Component", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{comp3ShLabel}->setText( Qt::Application::translate( 'MuSRFit4', "FitType3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_1}->setText( Qt::Application::translate( 'MuSRFit4', "Param1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_2}->setText( Qt::Application::translate( 'MuSRFit4', "Param2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_3}->setText( Qt::Application::translate( 'MuSRFit4', "Param3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_4}->setText( Qt::Application::translate( 'MuSRFit4', "Param4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_5}->setText( Qt::Application::translate( 'MuSRFit4', "Param5", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_6}->setText( Qt::Application::translate( 'MuSRFit4', "Param6", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_7}->setText( Qt::Application::translate( 'MuSRFit4', "Param7", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_8}->setText( Qt::Application::translate( 'MuSRFit4', "Param8", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{shParam_3_9}->setText( Qt::Application::translate( 'MuSRFit4', "Param9", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{sharingPage}), Qt::Application::translate( 'MuSRFit4', "Sharing", undef, Qt::Application::UnicodeUTF8() ) ); + my $initParamTable = $self->{initParamTable}; + if ( $initParamTable->columnCount < 4 ) { + $initParamTable->setColumnCount(4); + } + + my $__colItem = Qt::TableWidgetItem(); + $__colItem->setText( Qt::Application::translate( 'MuSRFit4', "Value", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 0, $__colItem ); + + my $__colItem1 = Qt::TableWidgetItem(); + $__colItem1->setText( Qt::Application::translate( 'MuSRFit4', "Error", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 1, $__colItem1 ); + + my $__colItem2 = Qt::TableWidgetItem(); + $__colItem2->setText( Qt::Application::translate( 'MuSRFit4', "Min", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 2, $__colItem2 ); + + my $__colItem3 = Qt::TableWidgetItem(); + $__colItem3->setText( Qt::Application::translate( 'MuSRFit4', "Max", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setHorizontalHeaderItem( 3, $__colItem3 ); + if ( $initParamTable->rowCount() < 1 ) { + $initParamTable->setRowCount(1); + } + + my $__rowItem = Qt::TableWidgetItem(); + $__rowItem->setText( Qt::Application::translate( 'MuSRFit4', "Alpha", undef, Qt::Application::UnicodeUTF8() ) ); + $initParamTable->setVerticalHeaderItem( 0, $__rowItem ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{initializationPage}), Qt::Application::translate( 'MuSRFit4', "Initialization", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupTitle}->setTitle( '' ); + $self->{titleLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Enter the label (defaul is run title from the first run)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Title line for MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Title line for MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{title}->setText( '' ); + $self->{fileNameLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Enter [name] for output [name].msr file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileName}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Name of the produced MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileName}->setWhatsThis( Qt::Application::translate( 'MuSRFit4', "Name of the produced MSR file (optional)", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{msrPage}), Qt::Application::translate( 'MuSRFit4', "MSR File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fourierBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Fourier transform parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{funits}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Gauss", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Mc/s", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fplot}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "power", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "real", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "imag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "real_and_imag", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "phase", undef, Qt::Application::UnicodeUTF8() )]); + $self->{textLabel1_3_8}->setText( '' ); + $self->{textLabel1_7}->setText( Qt::Application::translate( 'MuSRFit4', "Phase:", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fplotLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Plot", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_4}->setText( '' ); + $self->{fapodization}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "STRONG", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "MEDIUM", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "WEAK", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "NONE", undef, Qt::Application::UnicodeUTF8() )]); + $self->{fapodizationLabel}->setText( Qt::Application::translate( 'MuSRFit4', "Apodization", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_3}->setText( '' ); + $self->{textLabel1_2}->setText( Qt::Application::translate( 'MuSRFit4', "to", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_3_6}->setText( '' ); + $self->{textLabel1_3_5}->setText( '' ); + $self->{textLabel1_3_7}->setText( '' ); + $self->{textLabel1}->setText( Qt::Application::translate( 'MuSRFit4', "Range: from", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{label}->setText( Qt::Application::translate( 'MuSRFit4', "Units", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{rrfBox}->setTitle( Qt::Application::translate( 'MuSRFit4', "Rotatting reference frame (RRF) parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Phase", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6}->setText( Qt::Application::translate( 'MuSRFit4', "Frequency", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_2_4}->setText( '' ); + $self->{rrfFrq}->setText( '' ); + $self->{textLabel1_6_2_3}->setText( '' ); + $self->{textLabel1_6_2}->setText( Qt::Application::translate( 'MuSRFit4', "Packing", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{rrfUnits}->insertItems(0, [Qt::Application::translate( 'MuSRFit4', "MHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "kHz", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "Mc/s", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "G", undef, Qt::Application::UnicodeUTF8() ), + Qt::Application::translate( 'MuSRFit4', "T", undef, Qt::Application::UnicodeUTF8() )]); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{fourierPage}), Qt::Application::translate( 'MuSRFit4', "FFT/RRF", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist0}->setTitle( '' ); + $self->{textLabel2}->setText( Qt::Application::translate( 'MuSRFit4', "t0", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_3}->setText( Qt::Application::translate( 'MuSRFit4', "Bg1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Bg2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Data 1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_2_2_2}->setText( Qt::Application::translate( 'MuSRFit4', "Data 2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist1}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist1", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist2}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist2", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist3}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist3", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{groupHist4}->setTitle( Qt::Application::translate( 'MuSRFit4', "Hist4", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0Update}->setToolTip( Qt::Application::translate( 'MuSRFit4', "Use musrt0 to set values", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{t0Update}->setText( Qt::Application::translate( 'MuSRFit4', "Update", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{t0Page}), Qt::Application::translate( 'MuSRFit4', "t0/Bg", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{theoryBlock_Label}->setText( Qt::Application::translate( 'MuSRFit4', "THEORY Block", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parametersList_Label}->setText( Qt::Application::translate( 'MuSRFit4', "Parameters List", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_4_6}->setText( Qt::Application::translate( 'MuSRFit4', "=", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{addConstraint}->setText( Qt::Application::translate( 'MuSRFit4', "Add", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel2_2_3_4}->setText( Qt::Application::translate( 'MuSRFit4', "FUNCTIONS Block", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{textLabel1_6_3}->setText( '' ); + $self->{resetFunc}->setText( Qt::Application::translate( 'MuSRFit4', "Reset", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{musrfit_tabs}->setTabText( $self->{musrfit_tabs}->indexOf( $self->{tabPage}), Qt::Application::translate( 'MuSRFit4', "Constraints", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileMenu}->setTitle( Qt::Application::translate( 'MuSRFit4', "&File", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{actions}->setTitle( Qt::Application::translate( 'MuSRFit4', "Actions", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{parameters}->setTitle( Qt::Application::translate( 'MuSRFit4', "Parameters", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{options}->setTitle( Qt::Application::translate( 'MuSRFit4', "Options", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{helpMenu}->setTitle( Qt::Application::translate( 'MuSRFit4', "&Help", undef, Qt::Application::UnicodeUTF8() ) ); + $self->{fileToolBar}->setProperty("label", Qt::Variant( Qt::Application::translate( 'MuSRFit4', "File Menu", undef, Qt::Application::UnicodeUTF8() ) )); + $self->{actionsToolBar}->setProperty("label", Qt::Variant( Qt::Application::translate( 'MuSRFit4', "Actions Menu", undef, Qt::Application::UnicodeUTF8() ) )); +} # retranslateUi + +sub retranslate_ui { + my ( $muSRFit4 ) = @_; + retranslateUi( $muSRFit4 ); +} + +1; \ No newline at end of file diff --git a/src/external/MuSRFitGUI/icos/Append.odg b/src/external/MuSRFitGUI/icos/Append.odg new file mode 100644 index 0000000000000000000000000000000000000000..070faea887c5a0d8271c2ddfb9e21ea94714b3fb GIT binary patch literal 10937 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 literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Append.png b/src/external/MuSRFitGUI/icos/Append.png new file mode 100644 index 0000000000000000000000000000000000000000..e799c7bb8520fef116f250c02608253416c328ab GIT binary patch literal 404 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 literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Export.png b/src/external/MuSRFitGUI/icos/Export.png new file mode 100644 index 0000000000000000000000000000000000000000..eadae1401cad8faca5fdb8762b6efaa6e45a56fd GIT binary patch literal 374 zcmV-+0g3*JP)Pnf-!&SXnXRmi{3;%+YL>~c7J$F(@M|ta z0RPoNxAu%xP`0X1l3_@0ga+U0v0!1Hu(;wa}YZITrroyDOOnwmOi)a|4y#N3J literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/Fit.odg b/src/external/MuSRFitGUI/icos/Fit.odg index 538821986e39d3d881d69d7f13728f3a48e673ac..57b22fcbd477da83073030e441689e3b3e499b27 100644 GIT binary patch literal 11811 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 n)%5Rh@JGVN|2|dVot)p|s)_@bh literal 11570 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 diff --git a/src/external/MuSRFitGUI/icos/MuSRFit.odg b/src/external/MuSRFitGUI/icos/MuSRFit.odg index 4ac0254cc7fdb23954cac80344cc7c1bad05cbc6..a3365d8b957bff449e8a3820446dcb8066c56aec 100644 GIT binary patch literal 13391 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 literal 15336 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 diff --git a/src/external/MuSRFitGUI/icos/Plot.odg b/src/external/MuSRFitGUI/icos/Plot.odg index 902d076e9063f987a9db34538b3ff265b40ae538..c550f2e67fe82beea982574b5acbe59399d53524 100644 GIT binary patch literal 12961 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

nz(S+>@gXBW-G&^&*`fhVd?ani}Y_ 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 F`+wj3H&p-t diff --git a/src/external/MuSRFitGUI/icos/chdir.png b/src/external/MuSRFitGUI/icos/chdir.png new file mode 100644 index 0000000000000000000000000000000000000000..35755c4b533e62dce89621c2b6233e7172c6a0b8 GIT binary patch literal 3623 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 literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/exit.png b/src/external/MuSRFitGUI/icos/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..0237eac069cfdd6d1c61b22f2248c2ec2a8f5905 GIT binary patch literal 2073 zcmV+!2RP)- zl~wsCMKtR8pZn96hnW0_j8i}aR8$BXkTPN z13ljSXn#KogM(yKsjUdXvK&x=&@?n%$GmwHb8>Rg;#G#$F-&8*zOp1S(3Gh@7a6czI52>sGoRdkifc1|i6&QcQpOCCawzqM-mG#Nwbd zk){ry6iO+Sl!!8n!A0uQ#c_yk+QhmC9&k|r^kkBmufIl`rth@ym#9IYyk6blE!zRl zFey<&R2y1{w@8VSvaue=arJoAs*QNCtpy~OcA%`pi-xE*xMqyr-cEe`c8U`d^_|c( zl0!pS)6kC@LvIHZR~UQHZiK6|4jS*hMJBn)~mk`@jKW0|TVreHUuWZh74L zXPzP4)y3?$-!lEh7g&>%P=l=U*1Xdcs<)7yNYH!e5S@=af}Tj=?H8(E;wy#Fbt1jJ z^gi_z$vu0xaq1MtrAr`$n;SutTcD8E+;&w_7NC=o5Be822{YQ?F92^AOuF%HIBM*g@H~%5plNg;JV?j>{Rmz6$2#-#STi&A zcUH^7ymhOpExK_dcfI^FZJRf{B{o3WR+6~613?5lM;wRtp&_~-eYDE>!q^zsPn^KG zcoDS4s-0qy%=_;%{rTs}Qps3KI8vf)o5YSC zBzErf`|X7VZhiP6`OBBxhDPu!g%AQ+D3Ja5WB&g6XTM92#prnGA+$)utzcf@nn>$q z)T5CQB=_z`kH`HX3%~yA8zah5Gt+5|3l|XKFlZXarAw$%$v4WLnPK|eIg&#|Xt5Xo ziQT)2^z=}gn5fdVat8v@(4$de+qPA@ZJXTr^T>SO&4;p+#^@+xufOi*f>J2cL|Inl zP^M`ZqoWkY#z^eiq`L3HCrN@HVgH47ryz>(JWfxxb)MWci}JN+)lFes(deu))c zp%;=5Xfck%dClnW*+mFUp8kfo&N6I3a|40(Kvk z_d-*JK!A(VFp!4fckAu#=+P*}t5>n-=8%QLqW6V*#)C_ls(i96?8!-&hO|~9TPmYL zCuE^O@y|ai4#eX`@4g%J#tonIo&n9S_`m>(y?cFK_UtUBt5?x##;wc&k3Lc<PtC z{QbiZl{YJ(>(C+M_uNz0NUeO;KI@uB&$G|c*5B{z$zQyPdF4vgoRuRGNMKnkQks}x z>hx*ysgyq?wqpkyj~*r5-tI5l$Z+qu?Ay1bYI}B;>|1X!dEx}Zqhl=# znn+7I5OhGRxzGRf6XVZ6&(z72*wfRks6*K{#*aUee(5Eqjva%1ev#f*_kpGe1Qj-l zjx|0`=ExD|&YYq1@L>`oBZN0?LW{)^y6zswP17v|qod59J4f!5Pq1&@YN)r>eW0bo zTre8-jspOgCdPN)kw1T)a9dhHrNJO5L3!r00000NkvXXu0mjf DS+oXE literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/save.png b/src/external/MuSRFitGUI/icos/save.png new file mode 100644 index 0000000000000000000000000000000000000000..d43622c2546755dae427552f1e3f49e62d4d651f GIT binary patch literal 1646 zcmV-!29f!RP)NtVT%}qq)3~)tNUmadhkxeD|^B;+iCnJ1fV6D8Z#glDC z4xOZt@fF~g2Wy9KRMqn$(o@yYx{xu#8|Qu?MLcT?=aEsbTR0S@mnFPmLj3YS+ea^3 zRegPgZ2P0}F;ta}jhA`vr|-$Vd;jM8KR=6NL^Nolf#pVlHZq72q>g|QjfspZFgf~w z7$a}K`8_UQz9KjOb(0%6K9|G@>#I3=Vp*~QKq1c(l3?ai)ffR0*xTFV>C>lt`^`7% zL*T8~&+x&OpK*|xmJAW$(@(zTW>k!st+5FN4BOk={PuUhiG#s_s`9$FlF5bdzj~md zE6?B)+N%CNhhVo&?9Ta81a=~N;y-l-8W5B z#F)A7n}6k!A;&at(q*wRhAhvPPNs`}I}uQAYQd2mW^dR<9I3NT2Xk~H5M#uZt|l?h z9y;;o)Wsq~p63{AmqWlBLvN+m<(AHnxyT-q0J7{(s5`p3PzaRHEj0%6JX@X%i7}*U zdQ4r-2h*VjbSEG}l63RB<6wztG~#_&sHCG47g%dMRpO2WAcQbkN1ftg8U)+H|2q>f z#?b36H;r~BKbNguMCzP(&$$RV=MG+PoCs9wJ?Fr4T}VXO`s<(7mt~xlpBHJR7$blG z$KO=u=!xbc;49DFyLTrKNK$Led%qCjMPO%VhlgK(%|ZyMDi!Rh`P%Ce+%j>=agnIX;0p`Z$?a+v>BQLU8}V{G1`2pUDxG(Fx-{5(w4h=|Z` zs;X#=RHa8Xl4f=6JbC<-s)~rnfiXgeHU6=mhf({u`niZJEvuyho9;RI9_=PUM#0#wPfY>Y%5v{R&%Hn!UT0#29!Kv_Bl z#s0zZBofw6F8l|X_Q3y_G}O-|P&jsX2P2KxFbP$~nkkiBKn!R+JU&qZs!CZn3ilcwAXg3`(rEtgUab+Uv2J=j3^cF$UF0dg8u;;Bh0S9S3D2^001I-R9JLVZ)S9NVRB^v s0C?IfFE7{2%*!rLPAo{(%P&d?05;eLSP)anTmS$707*qoM6N<$f(?Baod5s; literal 0 HcmV?d00001 diff --git a/src/external/MuSRFitGUI/icos/saveMSR.png b/src/external/MuSRFitGUI/icos/saveMSR.png new file mode 100644 index 0000000000000000000000000000000000000000..59fcdc4336d3f605c723d3f06b44970a7bade416 GIT binary patch literal 2587 zcmV+$3gq>PP)F3t_dk1rM)Jlik`#F0JA*?0c?-#HG5qf zgV~yo*I)YsE}TDS?{W7QyaL_2`nFeg?%X*V;`SmYLYRlX`K`NWW@g0I>8nsuVQ}z9 z0KkHB8AD5NLT^tul$4z%A_QQ6PC`}~ArZ$P5CYO&5JEsW0w2uQQC?6+z1B!P+iwK& z-FN;z%*>JSyrdbCnx2_~?*|C<90qYi0+^JdBY_CN$PyC{ZA45u0gGzN}PwRtwRbZDZp**zbVb+m?I@q=OS_$06>pd#1Mc7WA{F=b5{maE`d-z`wt!f z0NlT0X9ApZ1OT8=Q~-d$Hz^S}PYa&PB}zmIf((EdP%7WQ_8oXO!b2$&l4O(_X&sM%95f9lD-*s=W^nfreF)RXO!g8$hYn%yoohi1luO;Y z5Bbs;?z9VP-q`2Y0N`lRot~`&3~Y>lZsUO3P*b{2((%`X8pyrfAReM z2&7|dt2S|^iW>&X^CGagznnO~G&vmsX17>z)99mSh;o5Hxa)r4+5Pz@ly>5;Y~7l9 zz<6aETBpoJTXP6pZ`YPA?n^`--NN*C@BUtkw4dhh#6-ZhEnD%+7Y+je#x7mKAK&;3 z0AN>a-tXMCs2w|jT^rZ6B(ZF;ANyWDfwbr!=%D#+TehM^ZA=JhXL09`KmG*n+5A-$ z4dJdkKAB0{?z-bP2ZW;#czS#?5fd4}%8xB>g1vVg-n}r{lxPR*-L`oPz|>(OOL-G9 z+fKFzCX6;F<)}J}HbFeXgr?=Ly>qUTHN6%l^ys6HyVIdEE%nvQ2eEqjU^Euwqzh?hPLqqbBfmOo zv9!%b^IZTZ-+BX=CMxjjwPuDGo45C|N0Qm&zNe$(+gC1Wshy{Pl)P_E?D*}IZ(-BM zQ5-$?QW8(QD3rFZ@Z9qx{`JqXmOHNxE>{wpllwMp!jYp#+dAcz(M{kh??>j5HZRXp z89Yaiy_5;fWWss9M5Z`!z0i-fYI7^V?boG zD{%}@lsFzf+p%dfO>GV^sM&1`S6 zG!wPeKxg3heR&(!es*m$dZZScYtbPyM2F5ve5=JbJbitWZGyzw;|vu z57JW!HA^X>lxmhr9PkiaNKT~cjNzuAh+vF?k_u8ufbHrpJq1sBxp*Y$b{c4HLk0$o zdIMVP2;fhi_%Uj=dSu*w5I_jv`wu_t3SqWFZMTP<(10-p#u!K`o!JSnV1Na{6y0}C zKG2SUfPnH8lv4Jk%(!@QJmH*y)@U>uku%3NKtxdwwWPIjMzB9EezSNz7+Nl8s9^ zJdZngNJ?w%h!6}BKut2_=7pv4Fum61I(+~VZb#I@Mj6oBf@(CH&K?Jy?%^CV21X|} z#BNTgDPn>YvXc|H4x^F;Jf-YHqqPNLOw;kekx6N-n{#4X2u&$8Clg84&JWiCVrpin zLO>}6f3AUIv8z*Es5Jp&1nRXK>h%VE-v<$4c5cprv0FePt%Pc|S_W(@Ekwk$-Cia& zVDU8SwJ2hB&;XwVcujsuoZ%G;ATkJo0LB>f_4Z-%%4INF=}RIEELwyh2qIviz32Hy zs3oHfwA9fiiWx9uBCz#(9i`F&%+1xpZwN9>eBuP;<*BLR{=UB73V}~&HDEwSLu*Sw zYmFZ~^25kELvUJaOixcIq#H^#9i8GfZj5#rw9^(-LfX~pjB{uY07?LA08ByyXV0Ij z_m<1wT{`s9=RD85C8+@dAR_zLS|bR8M5v4}SUTEiQO1nY$(b<*+GwQ9ocZN^0{{a6 zDgek!56@JqwbNr`2X0=rY)@CQxUgBnF{oB&F?o5?<}FTgY1ML8b+$V%!Ddm*!2XBVv1Ax;6d;pUG-u8pw9~19ay2A$!4GqaptXj2r)v8r}eSLji zS65e|P$(#+l;^+;XC9K7r4WLdSx70FnaQ0qGi$B2@qIt2R;zPUQ&SB9SKm8*db(Dt zwfi>300ICr0H)kAixwX}lymU-19`=Y6J-kLIg|gTJWIj=&@Kw`zX89>)jL|FXa@iQ002ovPDHLkV1oGE!EFEl literal 0 HcmV?d00001 From 2f993cffaf29a229b0f9a4ed880d839350ef3877 Mon Sep 17 00:00:00 2001 From: suter_a Date: Sat, 25 Mar 2017 10:14:46 +0100 Subject: [PATCH 18/43] start to incorporate sub-projects, the first being musrStep. --- src/musredit_qt5/musrStep/LICENSE | 674 ++++++++++++++++++ src/musredit_qt5/musrStep/PMusrStep.cpp | 605 ++++++++++++++++ src/musredit_qt5/musrStep/PMusrStep.h | 121 ++++ src/musredit_qt5/musrStep/README.md | 2 + .../musrStep/icons/musrStep-22x22-dark.svg | 134 ++++ .../musrStep/icons/musrStep-22x22.svg | 134 ++++ .../musrStep/icons/musrStep-32x32-dark.svg | 142 ++++ .../musrStep/icons/musrStep-32x32.svg | 140 ++++ src/musredit_qt5/musrStep/musrStep | Bin 0 -> 1072800 bytes src/musredit_qt5/musrStep/musrStep.cpp | 57 ++ src/musredit_qt5/musrStep/musrStep.pro | 25 + src/musredit_qt5/musrStep/musrStep.qrc | 8 + src/musredit_qt5/{ => musredit}/PAdmin.cpp | 0 src/musredit_qt5/{ => musredit}/PAdmin.h | 0 .../PChangeDefaultPathsDialog.cpp | 0 .../PChangeDefaultPathsDialog.h | 0 .../{ => musredit}/PDumpOutputHandler.cpp | 0 .../{ => musredit}/PDumpOutputHandler.h | 0 .../{ => musredit}/PFindDialog.cpp | 0 src/musredit_qt5/{ => musredit}/PFindDialog.h | 0 .../{ => musredit}/PFitOutputHandler.cpp | 0 .../{ => musredit}/PFitOutputHandler.h | 0 .../PGetAsymmetryRunBlockDialog.cpp | 0 .../PGetAsymmetryRunBlockDialog.h | 0 .../{ => musredit}/PGetDefaultDialog.cpp | 0 .../{ => musredit}/PGetDefaultDialog.h | 0 .../{ => musredit}/PGetFourierBlockDialog.cpp | 0 .../{ => musredit}/PGetFourierBlockDialog.h | 0 .../PGetFunctionsBlockDialog.cpp | 0 .../{ => musredit}/PGetFunctionsBlockDialog.h | 0 .../PGetMusrFTOptionsDialog.cpp | 0 .../{ => musredit}/PGetMusrFTOptionsDialog.h | 0 .../PGetNonMusrRunBlockDialog.cpp | 0 .../PGetNonMusrRunBlockDialog.h | 0 .../PGetParameterBlockDialog.cpp | 0 .../{ => musredit}/PGetParameterBlockDialog.h | 0 .../{ => musredit}/PGetPlotBlockDialog.cpp | 0 .../{ => musredit}/PGetPlotBlockDialog.h | 0 .../PGetSingleHistoRunBlockDialog.cpp | 0 .../PGetSingleHistoRunBlockDialog.h | 0 .../{ => musredit}/PGetTheoryBlockDialog.cpp | 0 .../{ => musredit}/PGetTheoryBlockDialog.h | 0 .../{ => musredit}/PGetTitleBlockDialog.cpp | 0 .../{ => musredit}/PGetTitleBlockDialog.h | 0 src/musredit_qt5/{ => musredit}/PHelp.cpp | 0 src/musredit_qt5/{ => musredit}/PHelp.h | 0 .../{ => musredit}/PMsr2DataDialog.cpp | 0 .../{ => musredit}/PMsr2DataDialog.h | 0 .../{ => musredit}/PMusrEditAbout.cpp | 0 .../{ => musredit}/PMusrEditAbout.h | 0 .../{ => musredit}/PPrefsDialog.cpp | 0 .../{ => musredit}/PPrefsDialog.h | 0 .../PReplaceConfirmationDialog.cpp | 0 .../PReplaceConfirmationDialog.h | 0 .../{ => musredit}/PReplaceDialog.cpp | 0 .../{ => musredit}/PReplaceDialog.h | 0 .../{ => musredit}/PSubTextEdit.cpp | 0 .../{ => musredit}/PSubTextEdit.h | 0 src/musredit_qt5/{ => musredit}/PTextEdit.cpp | 0 src/musredit_qt5/{ => musredit}/PTextEdit.h | 0 src/musredit_qt5/{ => musredit}/README | 0 .../forms/PChangeDefaultPathsDialog.ui | 0 .../{ => musredit}/forms/PFindDialog.ui | 0 .../forms/PGetAsymmetryRunBlockDialog.ui | 0 .../forms/PGetFourierBlockDialog.ui | 0 .../forms/PGetFunctionsBlockDialog.ui | 0 .../forms/PGetMusrFTOptionsDialog.ui | 0 .../forms/PGetNonMusrRunBlockDialog.ui | 0 .../forms/PGetParameterBlockDialog.ui | 0 .../forms/PGetPlotBlockDialog.ui | 0 .../forms/PGetSingleHistoRunBlockDialog.ui | 0 .../forms/PGetTheoryBlockDialog.ui | 0 .../forms/PGetTitleBlockDialog.ui | 0 .../{ => musredit}/forms/PMsr2DataDialog.ui | 0 .../{ => musredit}/forms/PMusrEditAbout.ui | 0 .../{ => musredit}/forms/PPrefsDialog.ui | 0 .../forms/PReplaceConfirmationDialog.ui | 0 .../{ => musredit}/forms/PReplaceDialog.ui | 0 .../{ => musredit}/icons/MuonSpin-Avatar.gif | Bin .../{ => musredit}/icons/MuonSpin-Avatar.nb | 0 .../icons/document-new-dark.svg | 0 .../icons/document-new-plain.svg | 0 .../icons/document-open-dark.svg | 0 .../icons/document-open-plain.svg | 0 .../icons/document-print-dark.svg | 0 .../icons/document-print-plain.svg | 0 .../icons/document-save-dark.svg | 0 .../icons/document-save-plain.svg | 0 .../{ => musredit}/icons/edit-copy-dark.svg | 0 .../{ => musredit}/icons/edit-copy-plain.svg | 0 .../{ => musredit}/icons/edit-cut-dark.svg | 0 .../{ => musredit}/icons/edit-cut-plain.svg | 0 .../{ => musredit}/icons/edit-find-dark.svg | 0 .../{ => musredit}/icons/edit-find-plain.svg | 0 .../{ => musredit}/icons/edit-paste-dark.svg | 0 .../{ => musredit}/icons/edit-paste-plain.svg | 0 .../{ => musredit}/icons/edit-redo-dark.svg | 0 .../{ => musredit}/icons/edit-redo-plain.svg | 0 .../{ => musredit}/icons/edit-undo-dark.svg | 0 .../{ => musredit}/icons/edit-undo-plain.svg | 0 .../{ => musredit}/icons/go-next-use-dark.svg | 0 .../icons/go-next-use-plain.svg | 0 .../icons/go-previous-use-dark.svg | 0 .../icons/go-previous-use-plain.svg | 0 .../icons/inkscape/document-new.svg | 0 .../icons/inkscape/document-open.svg | 0 .../icons/inkscape/document-print.svg | 0 .../icons/inkscape/document-save.svg | 0 .../icons/inkscape/edit-copy.svg | 0 .../icons/inkscape/edit-cut.svg | 0 .../icons/inkscape/edit-find.svg | 0 .../icons/inkscape/edit-paste.svg | 0 .../icons/inkscape/edit-redo.svg | 0 .../icons/inkscape/edit-undo.svg | 0 .../icons/inkscape/go-next-use.svg | 0 .../icons/inkscape/go-previous-use.svg | 0 .../icons/inkscape/msr2data.svg | 0 .../icons/inkscape/musrAsym.svg | 0 .../{ => musredit}/icons/inkscape/musrFT.svg | 0 .../icons/inkscape/musrSingleHisto.svg | 0 .../icons/inkscape/musrchisq.svg | 0 .../icons/inkscape/musrdump.svg | 0 .../{ => musredit}/icons/inkscape/musrfit.svg | 0 .../icons/inkscape/musrprefs.svg | 0 .../icons/inkscape/musrswap.svg | 0 .../{ => musredit}/icons/inkscape/musrt0.svg | 0 .../icons/inkscape/musrview.svg | 0 .../icons/inkscape/view-refresh.svg | 0 .../{ => musredit}/icons/msr2data-dark.svg | 0 .../{ => musredit}/icons/msr2data-plain.svg | 0 .../{ => musredit}/icons/musrAsym-plain.svg | 0 .../{ => musredit}/icons/musrFT-dark.svg | 0 .../{ => musredit}/icons/musrFT-plain.svg | 0 .../icons/musrSingleHisto-plain.svg | 0 .../icons/musrStep-32x32-dark.svg | 0 .../{ => musredit}/icons/musrStep-32x32.svg | 0 .../icons/musrWiz-32x32-dark.svg | 0 .../{ => musredit}/icons/musrWiz-32x32.svg | 0 .../{ => musredit}/icons/musrchisq-dark.svg | 0 .../{ => musredit}/icons/musrchisq-plain.svg | 0 .../{ => musredit}/icons/musrdump-dark.svg | 0 .../{ => musredit}/icons/musrdump-plain.svg | 0 .../{ => musredit}/icons/musredit.icns | Bin .../{ => musredit}/icons/musredit.ico | Bin .../{ => musredit}/icons/musrfit-16x16.gif | Bin .../{ => musredit}/icons/musrfit-16x16.ico | Bin .../{ => musredit}/icons/musrfit-16x16.png | Bin .../{ => musredit}/icons/musrfit-16x16.xpm | 0 .../{ => musredit}/icons/musrfit-dark.svg | 0 .../{ => musredit}/icons/musrfit-plain.svg | 0 .../{ => musredit}/icons/musrfit.gif | Bin .../{ => musredit}/icons/musrprefs-dark.svg | 0 .../{ => musredit}/icons/musrprefs-plain.svg | 0 .../{ => musredit}/icons/musrswap-dark.svg | 0 .../{ => musredit}/icons/musrswap-plain.svg | 0 .../{ => musredit}/icons/musrt0-dark.svg | 0 .../{ => musredit}/icons/musrt0-plain.svg | 0 .../{ => musredit}/icons/musrview-dark.svg | 0 .../{ => musredit}/icons/musrview-plain.svg | 0 .../icons/view-refresh-dark.svg | 0 .../icons/view-refresh-plain.svg | 0 .../{ => musredit}/latex_images/abragam.png | Bin .../{ => musredit}/latex_images/abragam.tex | 0 .../{ => musredit}/latex_images/asymmetry.png | Bin .../{ => musredit}/latex_images/asymmetry.tex | 0 .../{ => musredit}/latex_images/bessel.png | Bin .../{ => musredit}/latex_images/bessel.tex | 0 .../{ => musredit}/latex_images/combiLGKT.png | Bin .../{ => musredit}/latex_images/combiLGKT.tex | 0 .../latex_images/generalExp.png | Bin .../latex_images/generalExp.tex | 0 .../latex_images/internalBessel.png | Bin .../latex_images/internalBessel.tex | 0 .../latex_images/internalField.png | Bin .../latex_images/internalField.tex | 0 .../latex_images/internalFieldGK.png | Bin .../latex_images/internalFieldLL.png | Bin .../{ => musredit}/latex_images/polynom.png | Bin .../{ => musredit}/latex_images/polynom.tex | 0 .../{ => musredit}/latex_images/simpleExp.png | Bin .../{ => musredit}/latex_images/simpleExp.tex | 0 .../latex_images/simpleGauss.png | Bin .../latex_images/simpleGauss.tex | 0 .../{ => musredit}/latex_images/statExpKT.png | Bin .../{ => musredit}/latex_images/statExpKT.tex | 0 .../{ => musredit}/latex_images/statGssKT.png | Bin .../{ => musredit}/latex_images/statGssKT.tex | 0 .../{ => musredit}/latex_images/textogif | 0 .../{ => musredit}/latex_images/tfCos.png | Bin .../{ => musredit}/latex_images/tfCos.tex | 0 src/musredit_qt5/{ => musredit}/main.cpp | 0 src/musredit_qt5/{ => musredit}/musredit.cfg | 0 src/musredit_qt5/{ => musredit}/musredit.dox | 0 src/musredit_qt5/{ => musredit}/musredit.h | 0 src/musredit_qt5/{ => musredit}/musredit.pro | 7 +- src/musredit_qt5/{ => musredit}/musredit.qrc | 0 196 files changed, 2046 insertions(+), 3 deletions(-) create mode 100644 src/musredit_qt5/musrStep/LICENSE create mode 100644 src/musredit_qt5/musrStep/PMusrStep.cpp create mode 100644 src/musredit_qt5/musrStep/PMusrStep.h create mode 100644 src/musredit_qt5/musrStep/README.md create mode 100644 src/musredit_qt5/musrStep/icons/musrStep-22x22-dark.svg create mode 100644 src/musredit_qt5/musrStep/icons/musrStep-22x22.svg create mode 100644 src/musredit_qt5/musrStep/icons/musrStep-32x32-dark.svg create mode 100644 src/musredit_qt5/musrStep/icons/musrStep-32x32.svg create mode 100755 src/musredit_qt5/musrStep/musrStep create mode 100644 src/musredit_qt5/musrStep/musrStep.cpp create mode 100644 src/musredit_qt5/musrStep/musrStep.pro create mode 100644 src/musredit_qt5/musrStep/musrStep.qrc rename src/musredit_qt5/{ => musredit}/PAdmin.cpp (100%) rename src/musredit_qt5/{ => musredit}/PAdmin.h (100%) rename src/musredit_qt5/{ => musredit}/PChangeDefaultPathsDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PChangeDefaultPathsDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PDumpOutputHandler.cpp (100%) rename src/musredit_qt5/{ => musredit}/PDumpOutputHandler.h (100%) rename src/musredit_qt5/{ => musredit}/PFindDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PFindDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PFitOutputHandler.cpp (100%) rename src/musredit_qt5/{ => musredit}/PFitOutputHandler.h (100%) rename src/musredit_qt5/{ => musredit}/PGetAsymmetryRunBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetAsymmetryRunBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetDefaultDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetDefaultDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetFourierBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetFourierBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetFunctionsBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetFunctionsBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetMusrFTOptionsDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetMusrFTOptionsDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetNonMusrRunBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetNonMusrRunBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetParameterBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetParameterBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetPlotBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetPlotBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetSingleHistoRunBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetSingleHistoRunBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetTheoryBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetTheoryBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PGetTitleBlockDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PGetTitleBlockDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PHelp.cpp (100%) rename src/musredit_qt5/{ => musredit}/PHelp.h (100%) rename src/musredit_qt5/{ => musredit}/PMsr2DataDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PMsr2DataDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PMusrEditAbout.cpp (100%) rename src/musredit_qt5/{ => musredit}/PMusrEditAbout.h (100%) rename src/musredit_qt5/{ => musredit}/PPrefsDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PPrefsDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PReplaceConfirmationDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PReplaceConfirmationDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PReplaceDialog.cpp (100%) rename src/musredit_qt5/{ => musredit}/PReplaceDialog.h (100%) rename src/musredit_qt5/{ => musredit}/PSubTextEdit.cpp (100%) rename src/musredit_qt5/{ => musredit}/PSubTextEdit.h (100%) rename src/musredit_qt5/{ => musredit}/PTextEdit.cpp (100%) rename src/musredit_qt5/{ => musredit}/PTextEdit.h (100%) rename src/musredit_qt5/{ => musredit}/README (100%) rename src/musredit_qt5/{ => musredit}/forms/PChangeDefaultPathsDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PFindDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetAsymmetryRunBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetFourierBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetFunctionsBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetMusrFTOptionsDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetNonMusrRunBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetParameterBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetPlotBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetSingleHistoRunBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetTheoryBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PGetTitleBlockDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PMsr2DataDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PMusrEditAbout.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PPrefsDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PReplaceConfirmationDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/forms/PReplaceDialog.ui (100%) rename src/musredit_qt5/{ => musredit}/icons/MuonSpin-Avatar.gif (100%) rename src/musredit_qt5/{ => musredit}/icons/MuonSpin-Avatar.nb (100%) rename src/musredit_qt5/{ => musredit}/icons/document-new-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-new-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-open-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-open-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-print-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-print-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-save-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/document-save-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-copy-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-copy-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-cut-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-cut-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-find-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-find-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-paste-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-paste-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-redo-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-redo-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-undo-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/edit-undo-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/go-next-use-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/go-next-use-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/go-previous-use-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/go-previous-use-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/document-new.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/document-open.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/document-print.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/document-save.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-copy.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-cut.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-find.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-paste.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-redo.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/edit-undo.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/go-next-use.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/go-previous-use.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/msr2data.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrAsym.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrFT.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrSingleHisto.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrchisq.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrdump.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrfit.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrprefs.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrswap.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrt0.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/musrview.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/inkscape/view-refresh.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/msr2data-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/msr2data-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrAsym-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrFT-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrFT-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrSingleHisto-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrStep-32x32-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrStep-32x32.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrWiz-32x32-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrWiz-32x32.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrchisq-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrchisq-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrdump-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrdump-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musredit.icns (100%) rename src/musredit_qt5/{ => musredit}/icons/musredit.ico (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-16x16.gif (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-16x16.ico (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-16x16.png (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-16x16.xpm (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrfit.gif (100%) rename src/musredit_qt5/{ => musredit}/icons/musrprefs-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrprefs-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrswap-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrswap-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrt0-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrt0-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrview-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/musrview-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/view-refresh-dark.svg (100%) rename src/musredit_qt5/{ => musredit}/icons/view-refresh-plain.svg (100%) rename src/musredit_qt5/{ => musredit}/latex_images/abragam.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/abragam.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/asymmetry.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/asymmetry.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/bessel.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/bessel.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/combiLGKT.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/combiLGKT.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/generalExp.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/generalExp.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalBessel.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalBessel.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalField.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalField.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalFieldGK.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/internalFieldLL.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/polynom.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/polynom.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/simpleExp.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/simpleExp.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/simpleGauss.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/simpleGauss.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/statExpKT.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/statExpKT.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/statGssKT.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/statGssKT.tex (100%) rename src/musredit_qt5/{ => musredit}/latex_images/textogif (100%) rename src/musredit_qt5/{ => musredit}/latex_images/tfCos.png (100%) rename src/musredit_qt5/{ => musredit}/latex_images/tfCos.tex (100%) rename src/musredit_qt5/{ => musredit}/main.cpp (100%) rename src/musredit_qt5/{ => musredit}/musredit.cfg (100%) rename src/musredit_qt5/{ => musredit}/musredit.dox (100%) rename src/musredit_qt5/{ => musredit}/musredit.h (100%) rename src/musredit_qt5/{ => musredit}/musredit.pro (97%) rename src/musredit_qt5/{ => musredit}/musredit.qrc (100%) diff --git a/src/musredit_qt5/musrStep/LICENSE b/src/musredit_qt5/musrStep/LICENSE new file mode 100644 index 00000000..53503fbf --- /dev/null +++ b/src/musredit_qt5/musrStep/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + musrStep_qt5 + Copyright (C) 2016 Andreas Suter + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + musrStep_qt5 Copyright (C) 2016 Andreas Suter + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/musredit_qt5/musrStep/PMusrStep.cpp b/src/musredit_qt5/musrStep/PMusrStep.cpp new file mode 100644 index 00000000..4bded029 --- /dev/null +++ b/src/musredit_qt5/musrStep/PMusrStep.cpp @@ -0,0 +1,605 @@ +/*************************************************************************** + + PMusrStep.cpp + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2007-2016 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PMusrStep.h" + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * + */ +PModSelect::PModSelect(QWidget *parent) : + QDialog(parent) +{ + setWindowTitle("Modify Selected"); + + fScaleByFactor = new QPushButton("Scale by &Factor"); + fScaleByFactor->setWhatsThis("if pressed it will use the Factor value, and the absolut value selection to change the selected parameter steps."); + fFactorLabel = new QLabel("Factor"); + fFactorLineEdit = new QLineEdit("0.01"); + fFactorLineEdit->setValidator(new QDoubleValidator); + fAbsVal = new QCheckBox("Absolute Value"); + fAbsVal->setWhatsThis("if checked, the factor is used as an absolut value rather than a multiplication factor for the selected steps."); + + QHBoxLayout *top = new QHBoxLayout; + top->addWidget(fScaleByFactor); + top->addWidget(fFactorLabel); + top->addWidget(fFactorLineEdit); + top->addWidget(fAbsVal); + + fScaleAutomatic = new QPushButton("Scale &Automatically"); + fScaleAutomatic->setWhatsThis("Will try to reset the step size of the selected items based on some crude rules"); + fCancel = new QPushButton("&Cancel"); + + QHBoxLayout *bottom = new QHBoxLayout; + bottom->addWidget(fScaleAutomatic); + bottom->addWidget(fCancel); + + QVBoxLayout *main = new QVBoxLayout; + main->addLayout(top); + main->addLayout(bottom); + + setLayout(main); + + connect(fScaleAutomatic, SIGNAL(pressed()), this, SLOT(scaleAuto())); + connect(fScaleByFactor, SIGNAL(pressed()), this, SLOT(getFactor())); + connect(fCancel, SIGNAL(pressed()), this, SLOT(reject())); +} + +//------------------------------------------------------------------------- +/** + * + */ +void PModSelect::scaleAuto() +{ + emit scale(true, 0.01, false); + done(1); +} + +//------------------------------------------------------------------------- +/** + * + */ +void PModSelect::getFactor() +{ + double factor = fFactorLineEdit->text().toDouble(); + bool state = fAbsVal->isChecked(); + + emit scale(false, factor, state); + done(1); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * + */ +PMusrStep::PMusrStep(const char *fln, QWidget *parent) : + QDialog(parent), + fMsrFileName(fln) +{ + setWindowTitle("musrStep"); + QString str = QIcon::themeName(); + bool isDarkTheme = false; + if (str.contains("dark", Qt::CaseInsensitive)) + isDarkTheme = true; + + if (isDarkTheme) + str = QString(":/icons/musrStep-22x22-dark.svg"); + else + str = QString(":/icons/musrStep-22x22.svg"); + setWindowIcon(QIcon(QPixmap(str))); + + fValid = false; + + QString title = QString("%1").arg(fMsrFileName); + fTitleLabel = new QLabel(title); + QLabel *icon = new QLabel(); + if (isDarkTheme) + str = QString(":/icons/musrStep-32x32-dark.svg"); + else + str = QString(":/icons/musrStep-32x32.svg"); + icon->setPixmap(QPixmap(str)); + + QHBoxLayout *titleLayout = new QHBoxLayout; + titleLayout->addWidget(fTitleLabel); + titleLayout->addWidget(icon); + titleLayout->insertStretch(1); + + int status = 0; + if ((status=readMsrFile()) == 1) { + fValid = true; + } else { + QString msg = QString("Failed to read msr-file: %1 (status=%2)").arg(fMsrFileName).arg(status); + QMessageBox::critical(0, "ERROR", msg); + } + + int height; + if (fParamVec.size() < 70) + height = 20*fParamVec.size(); + else + height = 900; + setMinimumSize(400, height); + + // populate dialog + fParamTable = new QTableWidget(fParamVec.size(), 3); + QStringList strL; + strL << "name" << "value" << "step"; + fParamTable->setHorizontalHeaderLabels(strL); + + QTableWidgetItem *item; + for (int i=0; isetFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable); + item->setCheckState(Qt::Unchecked); + fParamTable->setItem(i, 0, item); + item = new QTableWidgetItem(fParamVec[i].value); + item->setFlags(Qt::ItemIsEnabled); + fParamTable->setItem(i, 1, item); + item = new QTableWidgetItem(fParamVec[i].step); + fParamTable->setItem(i, 2, item); + } + fCheckSpecific = new QPushButton("Check S&pecific"); + fCheckSpecific->setWhatsThis("Allows to specify a template name which is used\nto select parameter names fitting to it."); + fCheckAll = new QPushButton("Check A&ll"); + fCheckAll->setWhatsThis("Select all parameter names,\nexcept the ones with step == 0"); + fUnCheckAll = new QPushButton("&Uncheck All"); + fUnCheckAll->setWhatsThis("Unselect all parameter names"); + + QHBoxLayout *checkLayout = new QHBoxLayout; + checkLayout->addWidget(fCheckSpecific); + checkLayout->addWidget(fCheckAll); + checkLayout->addWidget(fUnCheckAll); + + fModifyAuto = new QPushButton("Modify &Automatic"); + fModifyAuto->setWhatsThis("Will try to reset the step size,\nbased on some crude rules"); + fModifyAuto->setDefault(true); + fModifySelected = new QPushButton("&Modify Selected"); + fModifySelected->setWhatsThis("Will call a dialog which all to specify how\nto proceed with the selected parameter steps."); + + QHBoxLayout *modifyLayout = new QHBoxLayout; + modifyLayout->addWidget(fModifyAuto); + modifyLayout->addWidget(fModifySelected); + + fSave = new QPushButton("&Save&&Quit"); + fCancel = new QPushButton("&Cancel"); + + QHBoxLayout *buttomLayout = new QHBoxLayout; + buttomLayout->addWidget(fSave); + buttomLayout->addWidget(fCancel); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(titleLayout); + mainLayout->addWidget(fParamTable); + mainLayout->addLayout(checkLayout); + mainLayout->addLayout(modifyLayout); + mainLayout->addLayout(buttomLayout); + + setLayout(mainLayout); + + connect(fParamTable, SIGNAL(cellChanged(int, int)), this, SLOT(handleCellChanged(int, int))); + + connect(fCheckSpecific, SIGNAL(pressed()), this, SLOT(checkSpecific())); + connect(fCheckAll, SIGNAL(pressed()), this, SLOT(checkAll())); + connect(fUnCheckAll, SIGNAL(pressed()), this, SLOT(unCheckAll())); + + connect(fModifyAuto, SIGNAL(pressed()), this, SLOT(modifyAuto())); + connect(fModifySelected, SIGNAL(pressed()), this, SLOT(modifyChecked())); + connect(fSave, SIGNAL(pressed()), this, SLOT(saveAndQuit())); + connect(fCancel, SIGNAL(pressed()), this, SLOT(reject())); + + fModSelect = new PModSelect(this); + connect(fModSelect, SIGNAL(scale(bool,double,bool)), this, SLOT(handleModSelect(bool,double,bool))); +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::handleCellChanged(int row, int column) +{ + QString str; + bool ok; + if (column == 0) { + str = fParamTable->item(row, 2)->text(); + if ((fParamTable->item(row, column)->checkState() == Qt::Checked) && + ((str == "0") || (str == "0.0"))) { + fParamTable->item(row, column)->setCheckState(Qt::Unchecked); + QMessageBox::warning(0, "WARNING", "You cannot select a fixed value (step == 0)."); + } + } else if (column == 2) { + str = fParamTable->item(row, column)->text(); + str.toDouble(&ok); // result is of no interest + if (ok) { + fParamVec[row].step = str; + } else { + fParamTable->item(row, column)->setText(fParamVec[row].step); + } + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::checkSpecific() +{ + bool ok; + QString str = QInputDialog::getText(this, "Enter Param Name Template", "Template:", + QLineEdit::Normal, "", &ok); + if (!ok) + return; + + QString step(""); + for (int i=0; irowCount(); i++) { + if (fParamTable->item(i,0)->text().contains(str)) { + step = fParamTable->item(i,2)->text(); + if ((step != "0") && (step != "0.0")) + fParamTable->item(i,0)->setCheckState(Qt::Checked); + } + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::checkAll() +{ + QString str(""); + for (int i=0; irowCount(); i++) { + str = fParamTable->item(i,2)->text(); + if ((str != "0") && (str != "0.0")) + fParamTable->item(i,0)->setCheckState(Qt::Checked); + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::unCheckAll() +{ + for (int i=0; irowCount(); i++) { + fParamTable->item(i,0)->setCheckState(Qt::Unchecked); + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::modifyAuto() +{ + QString str; + bool absVal; + double factor; + for (int i=0; irowCount(); i++) { + str = fParamTable->item(i,2)->text(); + if ((str != "0") && (str != "0.0")) { + factor = lookupTable(fParamTable->item(i,0)->text(), absVal); + str = adoptStep(fParamTable->item(i,1)->text(), factor, absVal); + fParamTable->item(i,2)->setText(str); + fParamVec[i].step = str; + } + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::modifyChecked() +{ + fModSelect->show(); +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::handleModSelect(bool automatic, double factor, bool absVal) +{ + QString str; + for (int i=0; irowCount(); i++) { + if (fParamTable->item(i,0)->checkState() == Qt::Checked) { + if (automatic) { + factor = lookupTable(fParamTable->item(i,0)->text(), absVal); + } + str = adoptStep(fParamTable->item(i,1)->text(), factor, absVal); + fParamTable->item(i,2)->setText(str); + fParamVec[i].step = str; + } + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::saveAndQuit() +{ + writeMsrFile(); + accept(); +} + +//------------------------------------------------------------------------- +/** + * + */ +void PMusrStep::initParam(PParam ¶m) +{ + param.number = ""; + param.name = ""; + param.value = ""; + param.step = ""; + param.posErr = ""; + param.boundLow = ""; + param.boundHigh = ""; +} + +//------------------------------------------------------------------------- +/** + * + */ +double PMusrStep::lookupTable(const QString str, bool &absVal) +{ + double factor = 0.01; + absVal = false; + + if (str.startsWith("freq", Qt::CaseInsensitive) || + str.startsWith("frq", Qt::CaseInsensitive) || + str.startsWith("field", Qt::CaseInsensitive)) { + factor = 1.0e-3; + } else if (str.startsWith("lambda", Qt::CaseInsensitive) || + str.startsWith("sigma", Qt::CaseInsensitive) || + str.startsWith("rlx", Qt::CaseInsensitive) || + str.startsWith("rate", Qt::CaseInsensitive)) { + factor = 0.1; + } else if (str.startsWith("phase", Qt::CaseInsensitive) || + str.startsWith("phs", Qt::CaseInsensitive)) { + factor = 5.0; + absVal = true; + } else if (str.startsWith("N0", Qt::CaseInsensitive) || + str.startsWith("Nrm", Qt::CaseInsensitive) || + str.startsWith("N_bkg", Qt::CaseInsensitive) || + str.startsWith("Bgr", Qt::CaseInsensitive)) { + factor = 0.01; + } + + return factor; +} + +//------------------------------------------------------------------------- +/** + * + */ +QString PMusrStep::adoptStep(const QString str, double factor, bool absVal) +{ + bool ok; + double dval = str.toDouble(&ok); + + QString step(""); + if (absVal) + step = QString("%1").arg(factor); + else + step = QString("%1").arg(factor*dval); + + return step; +} + +//------------------------------------------------------------------------- +/** + * + */ +int PMusrStep::readMsrFile() +{ + fParamVec.clear(); + + QFile fin(fMsrFileName); + + if (!fin.open(QIODevice::ReadOnly|QIODevice::Text)) + return -1; + + bool done = false, parameter = false; + QByteArray line; + QString str; + QStringList strL; + PParam param; + + while(!done && !fin.atEnd()) { + line = fin.readLine(); + str = line.data(); + str = str.trimmed(); + if (str.isEmpty() || str.startsWith("#")) { + continue; + } else if (str.startsWith("FITPARAMETER")) { + parameter = true; + continue; + } else if (str.startsWith("THEORY")) { + done = true; + continue; + } + + if (parameter) { + strL = str.split(" ", QString::SkipEmptyParts); + if ((strL.size() != 5) && (strL.size() != 7)) { + fin.close(); + return -2; + } + initParam(param); + + param.number = strL[0]; + param.name = strL[1]; + param.value = strL[2]; + param.step = strL[3]; + param.posErr = strL[4]; + if (strL.size() == 7) { + param.boundLow = strL[5]; + param.boundHigh= strL[6]; + } + fParamVec.push_back(param); + } + } + + fin.close(); + + return 1; +} + +//------------------------------------------------------------------------- +/** + * + */ +int PMusrStep::writeMsrFile() +{ + // read whole msr-file + QFile fin(fMsrFileName); + + if (!fin.open(QIODevice::ReadOnly|QIODevice::Text)) + return -1; + + QByteArray data = fin.readAll(); + + fin.close(); + + QFile fileOut(fMsrFileName); + + if (!fileOut.open(QIODevice::WriteOnly|QIODevice::Text)) + return -2; + + QTextStream fout(&fileOut); + + int idx = 0; + QString line, paramLine; + bool done = false; + bool paramBlock = false; + do { + line = getLine(data, idx); + if ((idx == -1) || (idx == data.count())) { + done = true; + } else { + if (line.startsWith("FITPARAMETER")) { + paramBlock = true; + } else if (line.startsWith("THEORY")) { + paramBlock = false; + } + if (paramBlock) { + paramLine = updateParamLine(line); + if (paramLine == "") // comment line, etc. + fout << line << "\n"; + else + fout << paramLine << "\n"; + } else { + fout << line << "\n"; + } + } + } while (!done); + fout << "*** FIT DID NOT CONVERGE ***\n"; + + fileOut.close(); + + return 1; +} + +//------------------------------------------------------------------------- +/** + * + */ +QString PMusrStep::getLine(QByteArray &data, int &idx) +{ + int newIdx = data.indexOf('\n', idx); + QString line(""); + + if (newIdx != -1) { + line = data.mid(idx, newIdx-idx).data(); + idx = newIdx+1; + } + + return line; +} + +//------------------------------------------------------------------------- +/** + * + */ +QString PMusrStep::updateParamLine(const QString str) +{ + // find proper parameter index + int idx = -1; + QString paramStr; + for (int i=0; i= 12) + width = fParamVec[idx].name.length()+1; + ss.setFieldWidth(width); + ss << fParamVec[idx].name; + ss.setFieldWidth(11); + ss << fParamVec[idx].value; + ss << fParamVec[idx].step; + ss << fParamVec[idx].posErr; + if (fParamVec[idx].boundLow != "") { + ss << fParamVec[idx].boundLow; + ss << fParamVec[idx].boundHigh; + } + + return result; +} diff --git a/src/musredit_qt5/musrStep/PMusrStep.h b/src/musredit_qt5/musrStep/PMusrStep.h new file mode 100644 index 00000000..a66e80da --- /dev/null +++ b/src/musredit_qt5/musrStep/PMusrStep.h @@ -0,0 +1,121 @@ +/*************************************************************************** + + PMusrStep.h + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2007-2016 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _PMUSRSTEP_H_ +#define _PMUSRSTEP_H_ + +#include +#include +#include +#include +#include +#include +#include + +typedef struct { + QString number; + QString name; + QString value; + QString step; + QString posErr; + QString boundLow; + QString boundHigh; +} PParam; + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +class PModSelect : public QDialog +{ + Q_OBJECT + + public: + PModSelect(QWidget *parent=Q_NULLPTR); + + signals: + void scale(bool automatic, double factor, bool absVal); + + private slots: + void scaleAuto(); + void getFactor(); + + private: + QCheckBox *fAbsVal; + QLabel *fFactorLabel; + QLineEdit *fFactorLineEdit; + QPushButton *fScaleByFactor; + QPushButton *fScaleAutomatic; + QPushButton *fCancel; +}; + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +class PMusrStep : public QDialog +{ + Q_OBJECT + + public: + PMusrStep(const char *fln, QWidget *parent=Q_NULLPTR); + bool isValid() { return fValid; } + + private slots: + void handleCellChanged(int row, int column); + void checkSpecific(); + void checkAll(); + void unCheckAll(); + void modifyAuto(); + void modifyChecked(); + void saveAndQuit(); + void handleModSelect(bool automatic, double factor, bool absVal); + + private: + QString fMsrFileName; + bool fValid; + + QVector fParamVec; + + QLabel *fTitleLabel; + QTableWidget *fParamTable; + QPushButton *fCheckSpecific; + QPushButton *fCheckAll; + QPushButton *fUnCheckAll; + QPushButton *fModifyAuto; + QPushButton *fModifySelected; + QPushButton *fSave; + QPushButton *fCancel; + + PModSelect *fModSelect; + + void initParam(PParam ¶m); + double lookupTable(const QString str, bool &absVal); + QString adoptStep(const QString str, double factor, bool absVal); + int readMsrFile(); + int writeMsrFile(); + QString getLine(QByteArray &data, int &idx); + QString updateParamLine(const QString str); +}; + +#endif // _PMUSRSTEP_H_ diff --git a/src/musredit_qt5/musrStep/README.md b/src/musredit_qt5/musrStep/README.md new file mode 100644 index 00000000..e4ed1aea --- /dev/null +++ b/src/musredit_qt5/musrStep/README.md @@ -0,0 +1,2 @@ +musrStep helps to intelligently reset the steps of a msr-file after a fit. +Often this is needed for refinement purposes. \ No newline at end of file diff --git a/src/musredit_qt5/musrStep/icons/musrStep-22x22-dark.svg b/src/musredit_qt5/musrStep/icons/musrStep-22x22-dark.svg new file mode 100644 index 00000000..a4855a18 --- /dev/null +++ b/src/musredit_qt5/musrStep/icons/musrStep-22x22-dark.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrStep/icons/musrStep-22x22.svg b/src/musredit_qt5/musrStep/icons/musrStep-22x22.svg new file mode 100644 index 00000000..0532ca29 --- /dev/null +++ b/src/musredit_qt5/musrStep/icons/musrStep-22x22.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrStep/icons/musrStep-32x32-dark.svg b/src/musredit_qt5/musrStep/icons/musrStep-32x32-dark.svg new file mode 100644 index 00000000..b7a44516 --- /dev/null +++ b/src/musredit_qt5/musrStep/icons/musrStep-32x32-dark.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrStep/icons/musrStep-32x32.svg b/src/musredit_qt5/musrStep/icons/musrStep-32x32.svg new file mode 100644 index 00000000..a0c6dbe1 --- /dev/null +++ b/src/musredit_qt5/musrStep/icons/musrStep-32x32.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrStep/musrStep b/src/musredit_qt5/musrStep/musrStep new file mode 100755 index 0000000000000000000000000000000000000000..de79630e3cbe79ff85a0c793dc1153a296c59c36 GIT binary patch literal 1072800 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�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 z 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 f&%|%9#h=b6F_CYN=tpEQ4SoM~d diff --git a/src/musredit_qt5/musrWiz/PAdmin.cpp b/src/musredit_qt5/musrWiz/PAdmin.cpp new file mode 100644 index 00000000..e9e27101 --- /dev/null +++ b/src/musredit_qt5/musrWiz/PAdmin.cpp @@ -0,0 +1,1303 @@ +/**************************************************************************** + + PAdmin.cpp + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +*****************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2010-2016 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include +#include +using namespace std; + +#include +#include +#include +#include +#include + +#include "PAdmin.h" + +//-------------------------------------------------------------------------- +// implementation of PFuncXMLParser class +//-------------------------------------------------------------------------- +/** + *

XML Parser class for the musrWiz function file. + * + * \param admin pointer to an admin class instance. + */ +PFuncXMLParser::PFuncXMLParser(PAdmin *admin) : fAdmin(admin) +{ + fKeyWord = eEmpty; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::startDocument() +{ + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::startElement(const QString&, const QString&, + const QString& qName, + const QXmlAttributes& qAttr) +{ + QString errMsg(""); + int ival; + double dval; + bool ok; + + if (qName == "theo_template") { + fTheoTemplate.init(); + } else if (qName == "pre_def_name") { + fKeyWord = eTemplateName; + } else if (qName == "theory") { + fKeyWord = eTemplateTheo; + } else if (qName == "theo_fun") { + fKeyWord = eTemplateFunc; + } else if (qName == "theo_map") { + if (qAttr.count() != 2) { + errMsg = QString("theo_map should have 2 attributes, called 'no', and 'name', found %1").arg(qAttr.count()); + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + PParam map; + for (int i=0; i + */ +bool PFuncXMLParser::endElement( const QString&, const QString&, const QString &qName ) +{ + fKeyWord = eEmpty; + + if (qName == "theo_template") { + fAdmin->fTheoTemplate.push_back(fTheoTemplate); + } else if (qName == "func") { + fAdmin->fMusrfitFunc.push_back(fFunc); + } else if (qName == "parameter") { + fFunc.addFuncParam(fParam); + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::characters(const QString &str) +{ + bool ok; + int ival; + double dval; + + switch (fKeyWord) { + case eTemplateName: + fTheoTemplate.setName(str); + break; + case eTemplateTheo: + fTheoTemplate.setTheory(str); + break; + case eTemplateFunc: + fTheoTemplate.appendFunc(str); + break; + case eName: + fFunc.setName(str); + break; + case eAbbrv: + fFunc.setAbbrv(str); + break; + case eNoOfParam: + ival = str.toInt(&ok); + if (ok) + fFunc.setNoOfParam(ival); + break; + case eParamName: + fParam.setParamName(str); + break; + case eParamValue: + dval = str.toDouble(&ok); + if (ok) + fParam.setParamValue(dval); + break; + case eParamMap: + if ((str == "y") || (str == "yes") || (str == "1")) + fParam.setParamMap(true); + break; + default: + break; + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::endDocument() +{ + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::warning( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**WARNING** while parsing musrfit_funcs.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**WARNING MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::warning(0, "WARNING", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::error( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**ERROR** while parsing musrfit_funcs.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::warning(0, "ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

+ */ +bool PFuncXMLParser::fatalError( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**FATAL ERROR** while parsing musrfit_funcs.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**FATAL ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::warning(0, "FATAL ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +// implementation of PInstrumentDefXMLParser class +//-------------------------------------------------------------------------- +/** + *

XML Parser class for the instrument definition file(s). + * + * \param admin pointer to an admin class instance. + */ +PInstrumentDefXMLParser::PInstrumentDefXMLParser(PAdmin *admin) : fAdmin(admin) +{ + fKeyWord = eEmpty; + + fInstituteName = ""; + fInstrument = 0; + fSetup = 0; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called at the beginning of the XML parsing process. + */ +bool PInstrumentDefXMLParser::startDocument() +{ + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called when a new XML tag is found. Here it is used + * to set a tag for filtering afterwards the content. + * + * \param qName name of the XML tag. + */ +bool PInstrumentDefXMLParser::startElement( const QString&, const QString&, + const QString& qName, + const QXmlAttributes& qAttr) +{ + bool ok; + double dval; + double ival; + QString str, errMsg; + QStringList strL; + QVector forward; + QVector backward; + + if (qName == "institute") { + fKeyWord = eInstitute; + } else if (qName == "instrument") { + fKeyWord = eInstrument; + if (qAttr.count() != 1) { + errMsg = QString("instrument should have 1 attribute, called 'name', found %1").arg(qAttr.count()); + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + if (fInstituteName == "") { + errMsg = QString("found instrument without institute set."); + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + // create an instrument object + fInstrument = new PInstrument(); + fInstrument->setInstitue(fInstituteName); + fInstrument->setName(qAttr.value(0)); + } else if (qName == "run_name_template") { + fKeyWord = eRunNameTemplate; + } else if (qName == "beamline") { + fKeyWord = eBeamline; + } else if (qName == "data_file_format") { + fKeyWord = eDataFileFormat; + } else if (qName == "tf") { + fKeyWord = eTf; + fSetup = new PSetup(); + if (qAttr.count() == 1) + fSetup->setName(qAttr.value(0)); + else + fSetup->setName("Default"); + } else if (qName == "zf") { + fKeyWord = eZf; + fSetup = new PSetup(); + if (qAttr.count() == 1) + fSetup->setName(qAttr.value(0)); + else + fSetup->setName("Default"); + } else if (qName == "lf") { + fKeyWord = eLf; + fSetup = new PSetup(); + if (qAttr.count() == 1) + fSetup->setName(qAttr.value(0)); + else + fSetup->setName("Default"); + } else if (qName == "no_of_detectors") { + fKeyWord = eNoOfDetectors; + } else if (qName == "fgb_offset") { + fKeyWord = eFgbOffset; + } else if (qName == "lgb") { + fKeyWord = eLgb; + } else if (qName == "asym_bkg_range") { + fKeyWord = eBkgRange; + } else if (qName == "logic_detector") { + if (qAttr.count() < 3) + return false; + PDetector detect; + int count=0; + for (int i=0; iaddDetector(detect); + } else if (qName == "logic_asym_detector") { + if (qAttr.count() != 5) + return false; + PDetector detect; + int count=0; + for (int i=0; i<5; i++) { + if (qAttr.localName(i) == "name") { + detect.setName(qAttr.value(i)); // detector name + count++; + } else if (qAttr.localName(i) == "rel_phase") { + str = qAttr.value(i); + dval = str.toDouble(&ok); + if (ok) { + detect.setRelGeomPhase(dval); + count++; + } + } else if (qAttr.localName(i) == "forward") { + str = qAttr.value(i); + strL.clear(); + strL = str.split(' '); + forward.clear(); + for (int j=0; jaddAsymDetector(detect); + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called when the end XML tag is found. It is used to + * put the filtering tag to 'empty'. It also resets the fFunc flag in case + * the entry was a theory function. + * + * \param qName name of the element. + */ +bool PInstrumentDefXMLParser::endElement( const QString&, const QString&, const QString &qName ) +{ + fKeyWord = eEmpty; + + if (qName == "instrument") { + // store instrument + fAdmin->addInstrument(fInstituteName, *fInstrument); + + // delete instrument object + if (fInstrument) { + delete fInstrument; + fInstrument = 0; + } + } else if (qName == "zf") { + // store setup + fInstrument->addSetupZF(*fSetup); + + // delete setup object + if (fSetup) { + delete fSetup; + fSetup = 0; + } + } else if (qName == "tf") { + // store setup + fInstrument->addSetupTF(*fSetup); + + // delete setup object + if (fSetup) { + delete fSetup; + fSetup = 0; + } + } else if (qName == "lf") { + // store setup + fInstrument->addSetupLF(*fSetup); + + // delete setup object + if (fSetup) { + delete fSetup; + fSetup = 0; + } + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

This routine delivers the content of an XML tag. It fills the + * content into the load data structure. + * + * \param str keeps the content of the XML tag. + */ +bool PInstrumentDefXMLParser::characters(const QString& str) +{ + bool ok; + int ival, start, end; + QString errMsg; + QStringList strList; + + switch (fKeyWord) { + case eInstitute: + fInstituteName = str; + break; + case eRunNameTemplate: + fInstrument->setRunNameTemplate(str); + break; + case eBeamline: + fInstrument->setBeamline(str); + break; + case eDataFileFormat: + fInstrument->setDataFileFormat(str); + break; + case eNoOfDetectors: + if (fSetup == 0) { + errMsg = "setup object not found."; + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + ival = str.toInt(&ok); + if (!ok) { + errMsg = QString("Setup Error: No of Detectors = '%1', which is not an int.").arg(str); + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + fSetup->setNoOfDetectors(ival); + break; + case eFgbOffset: + if (fSetup == 0) + return false; + ival = str.toInt(&ok); + if (!ok) + return false; + fSetup->setFgbOffset(ival); + break; + case eLgb: + if (fSetup == 0) + return false; + ival = str.toInt(&ok); + if (!ok) + return false; + fSetup->setLgb(ival); + break; + case eBkgRange: + strList = str.split(' ', QString::SkipEmptyParts); + if (strList.size() != 2) { + errMsg = QString("Found wrong Asymmetry background range: '%1'").arg(str); + QMessageBox::critical(0, "ERROR", errMsg); + return false; + } + start = strList[0].toInt(&ok); + if (!ok) { + return false; + } + end = strList[1].toInt(&ok); + if (!ok) { + return false; + } + fSetup->setBkgRange(start, end); + break; + default: + break; + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Called at the end of the XML parse process. It checks if default paths + * contain system variables, and if so expand them for the further use. + */ +bool PInstrumentDefXMLParser::endDocument() +{ + if (fInstituteName == "") { + QMessageBox::critical(0, "FATAL ERROR", "Didn't find any institute name in the instrument definitions."); + return false; + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report XML warnings. + * + * \param exception holds the information of the XML warning + */ +bool PInstrumentDefXMLParser::warning( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**WARNING** while parsing instrument_def_XXX.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**WARNING MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::warning(0, "WARNING", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report recoverable XML errors. + * + * \param exception holds the information of the XML recoverable errors. + */ +bool PInstrumentDefXMLParser::error( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**ERROR** while parsing instrument_def_XXX.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::critical(0, "ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report fatal XML errors. + * + * \param exception holds the information of the XML fatal errors. + */ +bool PInstrumentDefXMLParser::fatalError( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**FATAL ERROR** while parsing parsing instrument_def_XXX.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**FATAL ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::critical(0, "FATAL ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +// implementation of PMusrWizDefault class +//-------------------------------------------------------------------------- +/** + *

Initializes that PMusrWizDefault object. + */ +PMusrWizDefault::PMusrWizDefault() +{ + fInstitute = "UnDef"; + fInstrument = "UnDef"; + fFitType = "UnDef"; +} + +//-------------------------------------------------------------------------- +// implementation of PMusrWizDefaultXMLParser class +//-------------------------------------------------------------------------- +/** + *

XML Parser class for the musrWiz default settings. + * + * \param admin pointer to an admin class instance. + */ +PMusrWizDefaultXMLParser::PMusrWizDefaultXMLParser(PAdmin *admin) : fAdmin(admin) +{ + fKeyWord = eEmpty; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called at the beginning of the XML parsing process. + */ +bool PMusrWizDefaultXMLParser::startDocument() +{ + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called when a new XML tag is found. Here it is used + * to set a tag for filtering afterwards the content. + * + * \param qName name of the XML tag. + */ +bool PMusrWizDefaultXMLParser::startElement( const QString&, const QString&, + const QString& qName, + const QXmlAttributes& ) +{ + if (qName == "institute") { + fKeyWord = eInstitute; + } else if (qName == "instrument") { + fKeyWord = eInstrument; + } else if (qName == "fit_type") { + fKeyWord = eFitType; + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Routine called when the end XML tag is found. It is used to + * put the filtering tag to 'empty'. It also resets the fFunc flag in case + * the entry was a theory function. + * + * \param qName name of the element. + */ +bool PMusrWizDefaultXMLParser::endElement( const QString&, const QString&, const QString& ) +{ + fKeyWord = eEmpty; + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

This routine delivers the content of an XML tag. It fills the + * content into the load data structure. + * + * \param str keeps the content of the XML tag. + */ +bool PMusrWizDefaultXMLParser::characters(const QString& str) +{ + switch (fKeyWord) { + case eInstitute: + fDefault.setInstitute(str); + break; + case eInstrument: + fDefault.setInstrument(str); + break; + case eFitType: + fDefault.setFitType(str); + break; + default: + break; + } + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Called at the end of the XML parse process. + */ +bool PMusrWizDefaultXMLParser::endDocument() +{ + fAdmin->fDefault = fDefault; + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report XML warnings. + * + * \param exception holds the information of the XML warning + */ +bool PMusrWizDefaultXMLParser::warning( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**WARNING** while parsing musrWiz.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**WARNING MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::warning(0, "WARNING", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report recoverable XML errors. + * + * \param exception holds the information of the XML recoverable errors. + */ +bool PMusrWizDefaultXMLParser::error( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**ERROR** while parsing musrWiz.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::critical(0, "ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +/** + *

Report fatal XML errors. + * + * \param exception holds the information of the XML fatal errors. + */ +bool PMusrWizDefaultXMLParser::fatalError( const QXmlParseException & exception ) +{ + QString msg; + + msg = QString("**FATAL ERROR** while parsing parsing musrWiz.xml in line no %1\n").arg(exception.lineNumber()); + msg += QString("**FATAL ERROR MESSAGE** ") + exception.message(); + + qWarning() << endl << msg << endl; + + QMessageBox::critical(0, "FATAL ERROR", msg, QMessageBox::Ok, QMessageBox::NoButton); + + return true; +} + +//-------------------------------------------------------------------------- +// implementation of PAdmin class +//-------------------------------------------------------------------------- +/** + *

Initializes that PAdmin object, and calls the XML parser which feeds + * the object variables. + */ +PAdmin::PAdmin() : QObject() +{ + QString path, fln, pathFln; + bool found = false; + int count = 0; + + fValid = true; + + // load musrWiz default settings + // 1st: check local directory + pathFln = QString("./musrWiz.xml"); + if (!QFile::exists(pathFln)) { + // 2nd: check $HOME/.musrfit/musrWiz/musrWiz.xml + path = std::getenv("HOME"); + pathFln = path + "/.musrfit/musrWiz/musrWiz.xml"; + if (QFile::exists(pathFln)) { + found = true; + } + } else { + found = true; + } + if (found) { + if (loadMusrWizDefault(pathFln)) { + QMessageBox::warning(0, "WARNING", "Couldn't find musrWiz.xml file."); + } + } + + // load musrfit funcs + found = false; + // 1st: check local directory + pathFln = QString("./musrfit_funcs.xml"); + if (!QFile::exists(pathFln)) { + // 2nd: check $HOME/.musrfit/musrWiz/musrfit_funcs.xml + path = std::getenv("HOME"); + pathFln = path + "/.musrfit/musrWiz/musrfit_funcs.xml"; + if (QFile::exists(pathFln)) { + found = true; + } + } else { + found = true; + } + if (!found) { + fValid = false; + QMessageBox::critical(0, "FATAL ERROR", "Couldn't find musrfit_funcs.xml."); + return; + } + if (loadMusrfitFunc(pathFln)) { + fValid = false; + QMessageBox::critical(0, "FATAL ERROR", "Couldn't find any musrfit function definitions."); + return; + } + + // load instrument definitions + found = false; + + QStringList instStr; + instStr << "psi" << "triumf" << "isis" << "jparc"; + + for (int i=0; i instrument = fInstitute[idx].getInstruments(); + for (int i=0; i= fTheoTemplate.size())) + return theoTemplate; + + return fTheoTemplate[idx]; +} + +//-------------------------------------------------------------------------- +/** + * + */ +PMusrfitFunc PAdmin::getMusrfitFunc(QString name) +{ + PMusrfitFunc func; + + int idx=-1; + for (int i=0; idump all the instrument defs to stdout. This routine is there for debug + * purposes only. + */ +void PAdmin::dump(int tag) +{ + if (tag == -1) + return; + + if (tag != 1) { + QVector instrument; + QVector setup; + PDetector *detec; + QVector forward; + QString forwardStr; + QVector backward; + QString backwardStr; + + for (int i=0; i +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"; + qInfo() << "debug> Institute: " << fInstitute[i].getName(); + qInfo() << "debug> ----"; + instrument = fInstitute[i].getInstruments(); + for (int j=0; j ----"; + qInfo() << "debug> Instrument Name: " << instrument[j].getName(); + // all TF setups + setup = instrument[j].getTFSetups(); + for (int k=0; k ----"; + qInfo() << "debug> TF setup, name: " << setup[k].getName(); + qInfo() << "debug> No of Detectors: " << setup[k].getNoOfDetectors(); + qInfo() << "debug> fgb Offset: " << setup[k].getFgbOffset(); + qInfo() << "debug> lgb: " << setup[k].getLgb(); + qInfo() << "debug> asymmetry bkg range: " << setup[k].getBkgStartBin() << " " << setup[k].getBkgEndBin(); + qInfo() << "debug> ----"; + for (int l=0; l detec == 0 for k=" << k << ", l=" << l; + return; + } + forward = detec->getForwards(); + forwardStr = ""; + for (int m=0; m detector : " << detec->getName() << ", " << detec->getRelGeomPhase() << "°, " << forwardStr; + } + qInfo() << "debug> ----"; + for (int l=0; l detec == 0 for k=" << k << ", l=" << l; + return; + } + forward = detec->getForwards(); + forwardStr = ""; + backward = detec->getBackwards(); + backwardStr = ""; + for (int m=0; m detectorAsym : " << detec->getName() << ", " << detec->getRelGeomPhase() << "°, " << forwardStr << "/" << backwardStr << ", alpha=" << detec->getAlpha(); + } + } + // all ZF setups + setup.clear(); + setup = instrument[j].getZFSetups(); + for (int k=0; k ----"; + qInfo() << "debug> ZF setup, name: " << setup[k].getName(); + qInfo() << "debug> No of Detectors: " << setup[k].getNoOfDetectors(); + qInfo() << "debug> fgb Offset: " << setup[k].getFgbOffset(); + qInfo() << "debug> lgb: " << setup[k].getLgb(); + qInfo() << "debug> asymmetry bkg range: " << setup[k].getBkgStartBin() << " " << setup[k].getBkgEndBin(); + qInfo() << "debug> ----"; + for (int l=0; l detec == 0 for k=" << k << ", l=" << l; + return; + } + forward = detec->getForwards(); + forwardStr = ""; + backward = detec->getBackwards(); + backwardStr = ""; + for (int m=0; m detectorAsym : " << detec->getName() << ", " << detec->getRelGeomPhase() << "°, " << forwardStr << "/" << backwardStr << ", alpha=" << detec->getAlpha(); + } + } + // all LF setups + setup.clear(); + setup = instrument[j].getLFSetups(); + for (int k=0; k ----"; + qInfo() << "debug> LF setup, name: " << setup[k].getName(); + qInfo() << "debug> No of Detectors: " << setup[k].getNoOfDetectors(); + qInfo() << "debug> fgb Offset: " << setup[k].getFgbOffset(); + qInfo() << "debug> lgb: " << setup[k].getLgb(); + qInfo() << "debug> asymmetry bkg range: " << setup[k].getBkgStartBin() << " " << setup[k].getBkgEndBin(); + qInfo() << "debug> ----"; + for (int l=0; l detec == 0 for k=" << k << ", l=" << l; + return; + } + forward = detec->getForwards(); + forwardStr = ""; + backward = detec->getBackwards(); + backwardStr = ""; + for (int m=0; m detectorAsym : " << detec->getName() << ", " << detec->getRelGeomPhase() << "°, " << forwardStr << "/" << backwardStr << ", alpha=" << detec->getAlpha(); + } + } + } + qInfo() << "debug> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"; + } + } else if (tag != 0) { + qInfo() << "debug> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"; + qInfo() << "debug> Available Musrfit Funcs of the Wizard"; + qInfo() << "debug> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"; + PMusrfitFunc fun; + for (int i=0; i " << i << ": " << fun.getName() << " / " << fun.getAbbrv(); + qInfo() << "deubg> " << i << ": no of Parameters: " << fun.getNoOfParam(); + for (int j=0; jsize(); j++) { + qInfo() << "debug> " << i << "/" << j << ": param name: " << fun.getFuncParam(j).getParamName() << ", val: " << fun.getFuncParam(j).getParamValue(); + } + qInfo() << "debug> ----"; + } + qInfo() << "debug> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-"; + } +} + +//-------------------------------------------------------------------------- +/** + * + */ +PInstrument *PAdmin::getInstrument(QString institute, QString instrument) +{ + for (int i=0; i +#include +#include + +#include "PTheoTemplate.h" +#include "PMusrfitFunc.h" +#include "PInstrumentDef.h" + +class PAdmin; + +//--------------------------------------------------------------------------- +class PFuncXMLParser : public QXmlDefaultHandler +{ + public: + PFuncXMLParser(PAdmin*); + virtual ~PFuncXMLParser() {} + + private: + enum EFuncKeyWords {eEmpty, + eTemplateName, eTemplateTheo, eTemplateFunc, + eName, eAbbrv, eNoOfParam, eParam, + eParamName, eParamValue, eParamMap}; + + bool startDocument(); + bool startElement(const QString&, const QString&, const QString& , + const QXmlAttributes& qAttr); + bool endElement( const QString&, const QString&, const QString& ); + + bool characters(const QString&); + bool endDocument(); + + bool warning( const QXmlParseException & exception ); + bool error( const QXmlParseException & exception ); + bool fatalError( const QXmlParseException & exception ); + + EFuncKeyWords fKeyWord; ///< key word tag to know how to handle the content + PAdmin *fAdmin; ///< a pointer to the main administration class object + + PTheoTemplate fTheoTemplate; + PMusrfitFunc fFunc; + PFuncParam fParam; +}; + +//--------------------------------------------------------------------------- +class PInstrumentDefXMLParser : public QXmlDefaultHandler +{ + public: + PInstrumentDefXMLParser(PAdmin*); + virtual ~PInstrumentDefXMLParser() {} + + private: + enum EKeyWords {eEmpty, eInstitute, eInstrument, eRunNameTemplate, + eBeamline, eDataFileFormat, eTf, eZf, eLf, + eNoOfDetectors, eFgbOffset, eLgb, eBkgRange, + eLogicDetector}; + + bool startDocument(); + bool startElement(const QString&, const QString&, const QString& , + const QXmlAttributes& qAttr); + bool endElement( const QString&, const QString&, const QString& ); + + bool characters(const QString&); + bool endDocument(); + + bool warning( const QXmlParseException & exception ); + bool error( const QXmlParseException & exception ); + bool fatalError( const QXmlParseException & exception ); + + EKeyWords fKeyWord; ///< key word tag to know how to handle the content + PAdmin *fAdmin; ///< a pointer to the main administration class object + + QString fInstituteName; + PInstrument *fInstrument; + PSetup *fSetup; +}; + +//--------------------------------------------------------------------------- +class PMusrWizDefault +{ + public: + PMusrWizDefault(); + ~PMusrWizDefault() {} + + QString getInstitute() { return fInstitute; } + QString getInstrument() { return fInstrument; } + QString getFitType() { return fFitType; } + + void setInstitute(QString str) { fInstitute = str; } + void setInstrument(QString str) { fInstrument = str; } + void setFitType(QString str) { fFitType = str; } + + private: + QString fInstitute; + QString fInstrument; + QString fFitType; +}; + +//--------------------------------------------------------------------------- +class PMusrWizDefaultXMLParser : public QXmlDefaultHandler +{ + public: + PMusrWizDefaultXMLParser(PAdmin*); + virtual ~PMusrWizDefaultXMLParser() {} + + private: + enum EKeyWords {eEmpty, eInstitute, eInstrument, eFitType}; + + bool startDocument(); + bool startElement(const QString&, const QString&, const QString& , + const QXmlAttributes& ); + bool endElement( const QString&, const QString&, const QString& ); + + bool characters(const QString&); + bool endDocument(); + + bool warning( const QXmlParseException & exception ); + bool error( const QXmlParseException & exception ); + bool fatalError( const QXmlParseException & exception ); + + EKeyWords fKeyWord; ///< key word tag to know how to handle the content + PAdmin *fAdmin; ///< a pointer to the main administration class object + + PMusrWizDefault fDefault; +}; + +//--------------------------------------------------------------------------- +class PAdmin : public QObject +{ + public: + PAdmin(); + ~PAdmin() {} + + bool IsValid() { return fValid; } + void dump(int tag); + + QString getDefaultInstitute() { return fDefault.getInstitute(); } + QString getDefaultInstrument() { return fDefault.getInstrument(); } + QString getDefaultFitType() { return fDefault.getFitType(); } + + QStringList getInstituteList(); + QStringList getInstrumentList(QString institute); + PInstrument *getInstrument(QString institute, QString instrument); + int getTheoTemplateSize() { return fTheoTemplate.size(); } + QVector getTheoTemplates() { return fTheoTemplate; } + PTheoTemplate getTheoTemplate(int idx); + int getMusrfitFuncSize() { return fMusrfitFunc.size(); } + QVector getMusrfitFunc() { return fMusrfitFunc; } + PMusrfitFunc getMusrfitFunc(QString name); + + protected: + int addInstrument(QString institute, PInstrument instrument); + + private: + friend class PFuncXMLParser; + friend class PInstrumentDefXMLParser; + friend class PMusrWizDefaultXMLParser; + + bool fValid; + + PMusrWizDefault fDefault; + QVector fInstitute; + QVector fTheoTemplate; + QVector fMusrfitFunc; + + int loadMusrWizDefault(QString fln); + int loadMusrfitFunc(QString fln); + int loadInstrumentDef(QString fln); +}; + +#endif // _PADMIN_H_ diff --git a/src/musredit_qt5/musrWiz/PInstrumentDef.cpp b/src/musredit_qt5/musrWiz/PInstrumentDef.cpp new file mode 100644 index 00000000..49235bb6 --- /dev/null +++ b/src/musredit_qt5/musrWiz/PInstrumentDef.cpp @@ -0,0 +1,153 @@ +/*************************************************************************** + + PInstrumentDef.cpp + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2007-2016 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "PInstrumentDef.h" + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * + */ +PSetup::PSetup() +{ + fName = ""; + fNoOfDetectors = -1; + fFgbOffset = -1; + fLgb = -1; + fBkgStartBin = -1; + fBkgEndBin = -1; +} + +//-------------------------------------------------------------------------- +/** + * @brief PSetup::getDetector + * @param idx + * @return + */ +PDetector* PSetup::getDetector(int idx) +{ + if (idx >= fLogicDetectors.size()) + return 0; + + return &fLogicDetectors[idx]; +} + +//-------------------------------------------------------------------------- +/** + * @brief PSetup::getAsymDetector + * @param idx + * @return + */ +PDetector* PSetup::getAsymDetector(int idx) +{ + if (idx >= fLogicAsymDetectors.size()) + return 0; + + return &fLogicAsymDetectors[idx]; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * + */ +PInstrument::PInstrument() +{ + fRunNameTemplate = ""; + fBeamline = ""; + fDataFileFormat = ""; + fInstitue = ""; + fName = ""; +} + +//-------------------------------------------------------------------------- +/** + * @brief PInstrument::getZFSetup + * @param name + * @return + */ +PSetup* PInstrument::getZFSetup(QString name) +{ + for (int i=0; i +#include + +//--------------------------------------------------------------------------- +class PDetector +{ + public: + PDetector() {} + ~PDetector() {} + + void setName(QString str) { fName = str; } + void setRelGeomPhase(double phase) { fRelGeomPhase = phase; } + void setForwards(QVector num) { fForward = num; } + void setBackwards(QVector num) { fBackward = num; } + void setAlpha(double alpha) { fAlpha = alpha; } + + QString getName() { return fName; } + double getRelGeomPhase() { return fRelGeomPhase; } + QVector getForwards() { return fForward; } + QVector getBackwards() { return fBackward; } + double getAlpha() { return fAlpha; } + + private: + QString fName; + QVector fForward; + QVector fBackward; + double fAlpha; + double fRelGeomPhase; +}; + +//--------------------------------------------------------------------------- +class PSetup +{ + public: + PSetup(); + ~PSetup() {} + + void setName(QString str) { fName = str; } + void setNoOfDetectors(int no) { fNoOfDetectors = no; } + void setFgbOffset(int fgbOffset) { fFgbOffset = fgbOffset; } + void setLgb(int lgb) { fLgb = lgb; } + void setBkgRange(int start, int end) { fBkgStartBin = start; fBkgEndBin = end; } + void addDetector(PDetector detector) { fLogicDetectors.push_back(detector); } + void addAsymDetector(PDetector detector) { fLogicAsymDetectors.push_back(detector); } + + QString getName() { return fName; } + int getNoOfDetectors() { return fNoOfDetectors; } + int getNoOfLogicalDetectors() { return fLogicDetectors.size(); } + int getNoOfLogicalAsymDetectors() { return fLogicAsymDetectors.size(); } + int getFgbOffset() { return fFgbOffset; } + int getLgb() { return fLgb; } + int getBkgStartBin() { return fBkgStartBin; } + int getBkgEndBin() { return fBkgEndBin; } + PDetector* getDetector(int idx); + PDetector* getAsymDetector(int idx); + + private: + QString fName; + int fNoOfDetectors; + int fFgbOffset; + int fLgb; + int fBkgStartBin; + int fBkgEndBin; + + QVector fLogicDetectors; + QVector fLogicAsymDetectors; +}; + +//--------------------------------------------------------------------------- +class PInstrument +{ + public: + PInstrument(); + ~PInstrument() {} + + void setRunNameTemplate(QString str) { fRunNameTemplate = str; } + void setBeamline(QString str) { fBeamline = str; } + void setDataFileFormat(QString str) { fDataFileFormat = str; } + void setInstitue(QString str) { fInstitue = str; } + void setName(QString str) { fName = str; } + + void addSetupZF(PSetup zf) { fZF.push_back(zf); } + void addSetupTF(PSetup tf) { fTF.push_back(tf); } + void addSetupLF(PSetup lf) { fLF.push_back(lf); } + + QString getRunNameTemplate() { return fRunNameTemplate; } + QString getBeamline() { return fBeamline; } + QString getDataFileFormat() { return fDataFileFormat; } + QString getInstitute() { return fInstitue; } + QString getName() { return fName; } + + QVector getZFSetups() { return fZF; } + QVector getTFSetups() { return fTF; } + QVector getLFSetups() { return fLF; } + + PSetup* getZFSetup(QString name=""); + PSetup* getTFSetup(QString name=""); + PSetup* getLFSetup(QString name=""); + + private: + QString fRunNameTemplate; + QString fBeamline; + QString fDataFileFormat; + QString fInstitue; + QString fName; + + QVector fZF; + QVector fTF; + QVector fLF; +}; + +//--------------------------------------------------------------------------- +class PInstitute +{ + public: + PInstitute(); + ~PInstitute() {} + + void setName(QString str) { fName = str; } + void addInstrument(PInstrument instrument) { fInstrument.push_back(instrument); } + + QString getName() { return fName; } + QVector getInstruments() { return fInstrument; } + PInstrument *getInstrument(QString name); + + private: + QString fName; + QVector fInstrument; +}; + +#endif // _PINSTRUMENTDEF_H_ diff --git a/src/musredit_qt5/musrWiz/PMusrWiz.cpp b/src/musredit_qt5/musrWiz/PMusrWiz.cpp new file mode 100644 index 00000000..b374740d --- /dev/null +++ b/src/musredit_qt5/musrWiz/PMusrWiz.cpp @@ -0,0 +1,2573 @@ +/*************************************************************************** + + PMusrWiz.cpp + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2007-2017 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "musrWiz.h" +#include "PTheoTemplate.h" +#include "PMusrfitFunc.h" +#include "PMusrWiz.h" + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PMsrData::PMsrData + */ +PMsrData::PMsrData() +{ + fTemplate = -1; + + fMsrFileName = QString(""); + fRunNumber = -1; + fInstitute = "PSI"; + fInstrument = "HAL9500"; + fFitType = FIT_TYPE_SINGLE_HISTO; + fTypeOfMeasurement = MEASURE_UNDEF; + fT0Tag = T0_FROM_FILE; + fT0 = -1; + QDate date = QDate::currentDate(); + fYear = QString("%1").arg(date.year()); + + fPacking = 1; + fFitStart = 0.0; + fFitEnd = 10.0; + fCommands = ""; + + fTheo = ""; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::~PMsrData + */ +PMsrData::~PMsrData() +{ + +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::getFitTypeString + * @return + */ +QString PMsrData::getFitTypeString() +{ + QString str("UnDef"); + + switch (fFitType) { + case FIT_TYPE_ASYMMETRY: + str = QString("Asymmetry"); + break; + case FIT_TYPE_ASYMMETRY_RRF: + str = QString("Asymmetry RRF"); + break; + case FIT_TYPE_SINGLE_HISTO: + str = QString("Single Histo"); + break; + case FIT_TYPE_SINGLE_HISTO_RRF: + str = QString("Single Histo RRF"); + break; + case FIT_TYPE_MU_MINUS: + str = QString("Mu Minus"); + break; + case FIT_TYPE_NONE_MUSR: + str = QString("None Musr"); + break; + case FIT_TYPE_UNDEF: + default: + break; + } + + return str; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::setParam + * @param idx + * @param param + */ +void PMsrData::setParam(int idx, PParam param) +{ + if (idx >= fParam.size()) + fParam.resize(idx+1); + + fParam[idx] = param; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::setMap + * @param idx + * @param map + */ +void PMsrData::setMap(int idx, PParam map) +{ + if (idx >= fMap.size()) + fMap.resize(idx+1); + + fMap[idx] = map; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::appendParam + * @param param + */ +void PMsrData::appendParam(QVector param) +{ + // check if parameter is aleady present. If yes, ignore it, otherwise add it + bool present = false; + for (int i=0; i map) +{ + // check if map is aleady present. If yes, replace it, otherwise add it + bool present = false; + for (int i=0; i fMap.size())) + return; + + fMap[idx].setName(name); +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::setFunc + * @param funNo + * @param str + */ +void PMsrData::setFunc(int funNo, QString str) +{ + if (funNo < 0) + return; + + // check if not already present + for (int i=0; i fParam.size()) + return param; + + return fParam[idx]; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::getMap + * @param idx + * @return + */ +PParam PMsrData::getMap(int idx) +{ + PParam map; + + if (idx >= fMap.size()) + return map; + + return fMap[idx]; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::getFuncNo + * @param idx + * @return + */ +int PMsrData::getFuncNo(int idx) +{ + if ((idx < 0) || (idx >= fFunc.size())) + return -1; + + return fFunc[idx].number; +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::isPresent + * @param funStr + * @return + */ +bool PMsrData::isPresent(const QString funStr) +{ + for (int i=0; i fParam[i+1].getNumber()) { + swap = fParam[i]; + fParam[i] = fParam[i+1]; + fParam[i+1] = swap; + swapped = true; + } + } + } + } else if (whichVec == "map") { + PParam swap; + while (swapped) { + swapped = false; + j++; + for (int i=0; i < fMap.size() - j; i++) { + if (fMap[i].getNumber() > fMap[i+1].getNumber()) { + swap = fMap[i]; + fMap[i] = fMap[i+1]; + fMap[i+1] = swap; + swapped = true; + } + } + } + } else if (whichVec == "func") { + PFunc swap; + while (swapped) { + swapped = false; + j++; + for (int i=0; i < fFunc.size() - j; i++) { + if (fFunc[i].number > fFunc[i+1].number) { + swap = fFunc[i]; + fFunc[i] = fFunc[i+1]; + fFunc[i+1] = swap; + swapped = true; + } + } + } + } +} + +//------------------------------------------------------------------------- +/** + * @brief PMsrData::removeFunc + * @param funList + */ +void PMsrData::removeFunc(QVector &funList) +{ + int idx; + for (int i=0; iused Theory"); + QPlainTextEdit *theoTextEdit = new QPlainTextEdit(theo); + theoTextEdit->setReadOnly(true); + QPlainTextEdit *funcTextEdit = 0; + if (!func.isEmpty()) { + funcTextEdit = new QPlainTextEdit(func); + funcTextEdit->setReadOnly(true); + } + QPushButton *cancel = new QPushButton("&Cancel"); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(label); + layout->addWidget(theoTextEdit); + if (funcTextEdit) + layout->addWidget(funcTextEdit); + layout->addWidget(cancel); + + setLayout(layout); + + connect(cancel, SIGNAL(pressed()), this, SLOT(accept())); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PIntroPage::PIntroPage + * @param data + * @param parent + */ +PIntroPage::PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent) : + QWizardPage(parent), + fAdmin(admin), + fMsrData(data) +{ + setTitle("

Introduction

"); + setSubTitle("This wizard will help you to create your msr-file."); + + fMsrFileName = new QLineEdit(); + fMsrFileName->setToolTip("enter msr-file name or leave it empty."); + fMsrFileName->setWhatsThis("If empty the file name will be generate,\nbased on the run number, the fit type\nand the type of measurement."); + + fYear = new QLineEdit(); + fYear->setValidator(new QIntValidator()); + QDate date = QDate::currentDate(); + fYear->setText(QString("%1").arg(date.year())); + fYear->setToolTip("year when the run took place."); + fYear->setWhatsThis("The year is used to generate\nthe RUN header information where\nmusrfit will look for the data."); + + fRunNumber = new QLineEdit(); + fRunNumber->setValidator(new QIntValidator()); + fRunNumber->setText(QString("%1").arg(fMsrData->getRunNumber())); + fRunNumber->setToolTip("enter the run number here."); + + fInstitute = new QComboBox(); + QStringList list = fAdmin->getInstituteList(); // get list form the instrument_def's + list.prepend("UnDef"); + fInstitute->addItems(list); + int idx = fInstitute->findText(fAdmin->getDefaultInstitute()); + if (idx != -1) + fInstitute->setCurrentIndex(idx); + + fInstrument = new QComboBox(); + list.clear(); + list << fAdmin->getInstrumentList(fMsrData->getInstitute()); + list.prepend("UnDef"); + fInstrument->addItems(list); + idx = fInstrument->findText(fAdmin->getDefaultInstrument()); + if (idx != -1) + fInstrument->setCurrentIndex(idx); + + fFitType = new QComboBox(); + list.clear(); + list << "UnDef" << "Single Histo" << "Single Histo RRF" << "Asymmetry" << "Asymmetry RRF" << "Mu Minus" << "None muSR"; + fFitType->addItems(list); + idx = fFitType->findText(fAdmin->getDefaultFitType()); + fFitType->setCurrentIndex(idx); + + fMeasurementType = new QComboBox(); + list.clear(); + list << "UnDef" << "ZF" << "TF" << "LF"; + fMeasurementType->addItems(list); + fMeasurementType->setCurrentIndex(fMsrData->getTypeOfMeasurement()); + + fT0 = new QComboBox(); + list.clear(); + list << "from data file" << "call musrT0" << "enter here"; + fT0->addItems(list); + fT0->setCurrentIndex(fMsrData->getT0Tag()); + fT0->setWhatsThis("choose if you want the t0's from the data file,\ncall musrT0 after the msr-files is generated,\nor enter the values within the wizard."); + + QFormLayout *layout = new QFormLayout; + + layout->addRow("Add msr-file name:", fMsrFileName); + layout->addRow("Year:", fYear); + layout->addRow("Run Number:", fRunNumber); + layout->addRow("Institute:", fInstitute); + layout->addRow("Instrument:", fInstrument); + layout->addRow("Fit Type:", fFitType); + layout->addRow("Type of Measurement:", fMeasurementType); + layout->addRow("T0's:", fT0); + + setLayout(layout); + + registerField("runNumber*", fRunNumber); + + QObject::connect(fInstitute, SIGNAL(activated(int)), this, SLOT(handleInstituteChanged(int))); + QObject::connect(fFitType, SIGNAL(activated(int)), this , SLOT(handleFitType(int))); + QObject::connect(fMeasurementType, SIGNAL(activated(int)), this, SLOT(checkSetup(int))); + QObject::connect(fT0, SIGNAL(activated(int)), this, SLOT(handleT0(int))); +} + +//------------------------------------------------------------------------- +void PIntroPage::handleInstituteChanged(int idx) +{ + QString str = fInstitute->itemText(idx); + QStringList list = fAdmin->getInstrumentList(str); + list.prepend("UnDef"); + + fInstrument->clear(); + fInstrument->addItems(list); +} + +//------------------------------------------------------------------------- +/** + * @brief PIntroPage::handleFitType + * @param idx + */ +void PIntroPage::handleFitType(int idx) +{ + if ( (idx != FIT_TYPE_SINGLE_HISTO) && + (idx != FIT_TYPE_ASYMMETRY) ){ + QMessageBox::warning(0, "WARNING", "Currently only fit type: single histo and asymmetry available."); + fFitType->setCurrentIndex(FIT_TYPE_SINGLE_HISTO); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PIntroPage::checkSetup + * @param idx + */ +void PIntroPage::checkSetup(int idx) +{ + QString measure(""); + PInstrument *instru = fAdmin->getInstrument(fInstitute->currentText(), fInstrument->currentText()); + QVector setup; + switch (idx) { + case MEASURE_ZF: + setup = instru->getZFSetups(); + measure = "ZF"; + break; + case MEASURE_TF: + setup = instru->getTFSetups(); + measure = "TF"; + break; + case MEASURE_LF: + setup = instru->getLFSetups(); + measure = "LF"; + QMessageBox::information(0, "INFO", "Not yet implemented."); + break; + case MEASURE_UNDEF: + default: + break; + } + + if (setup.size() == 0) { + QString msg = QString("Didn't find any setup for:\nInstitute: %1\nInstrument: %2").arg(fInstitute->currentText()).arg(fInstrument->currentText()); + QMessageBox::critical(0, "ERROR", msg); + return; + } else if (setup.size() == 1) { + if (setup[0].getName() == "Default") { + fMsrData->setSetup("Default"); + return; + } + } + + QStringList items; + for (int i=0; isetSetup(setupName); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PIntroPage::handleT0 + * @param idx + */ +void PIntroPage::handleT0(int idx) +{ + bool ok; + if (idx == T0_ENTER_WIZ) { + int t0 = QInputDialog::getInt(this, "Enter T0:", "T0:", 0, 0, 2147483647, 1, &ok); + if (ok) + fMsrData->setT0(t0); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PIntroPage::nextId + * @return + */ +int PIntroPage::nextId() const +{ + return PMusrWiz::ePageTheory; +} + +//------------------------------------------------------------------------- +/** + * @brief PIntroPage::validatePage + * @return + */ +bool PIntroPage::validatePage() +{ + fMsrData->setMsrFileName(fMsrFileName->text()); + fMsrData->setYear(fYear->text()); + fMsrData->setRunNumber(fRunNumber->text().toInt()); + if (fInstitute->currentIndex() == INST_UNDEF) + return false; + fMsrData->setInstitute(fInstitute->currentText()); + if (fInstrument->currentIndex() == 0) // i.e. undefined + return false; + fMsrData->setInstrument(fInstrument->currentText()); + if (fFitType->currentIndex() == FIT_TYPE_UNDEF) + return false; + fMsrData->setFitType(fFitType->currentIndex()); + if (fMeasurementType->currentIndex() == MEASURE_UNDEF) + return false; + fMsrData->setTypeOfMeasurement(fMeasurementType->currentIndex()); + fMsrData->setT0Tag(fT0->currentIndex()); + + return true; +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PTheoPage::PTheoPage + * @param data + * @param parent + */ +PTheoPage::PTheoPage(PAdmin *admin, PMsrData *data, QWidget *parent) : + QWizardPage(parent), + fAdmin(admin), + fMsrData(data) +{ + fTheoBlockNo = 0; + + fTheoValid = false; + fHaveMap = false; + fHaveFunc = false; + + setTitle("

Theory

"); + QString str = QString("Now you will need to enter your theory - fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + fTheo = new QPlainTextEdit(); + fTheo->setWhatsThis("Enter the theory function here."); + + fEditTemplate = new QCheckBox("Edit Template"); + fEditTemplate->setToolTip("if checked, it allows to edit the template"); + fEditTemplate->hide(); + + fClearAll = new QPushButton(); + fClearAll->setText("Clear All"); + fClearAll->setToolTip("will clear the theory edit field."); + fClearAll->setWhatsThis("will clear the theory edit field."); + + fCheckTheo = new QPushButton(); + fCheckTheo->setText("Check"); + fCheckTheo->setToolTip("check if the theory is valid."); + fCheckTheo->setWhatsThis("Check is the theory string is valid."); + + QVector templ = fAdmin->getTheoTemplates(); + QVector funcs = fAdmin->getMusrfitFunc(); + fTheoSelect = new QComboBox(); + QStringList list; + // all the templates defined in musrfit_func.xml + for (int i=0; iaddItems(list); + fTheoSelect->setWhatsThis("select some predef. theory functions.\nFor all theory functions available check the help"); + + fTheoAdd = new QPushButton("Add"); + + QHBoxLayout *hLayout = new QHBoxLayout(); + hLayout->addWidget(fTheoSelect); + hLayout->addWidget(fTheoAdd); + + QFormLayout *layout = new QFormLayout; + layout->addRow("Enter Theory:", fTheo); + layout->addRow(fEditTemplate); + layout->addRow("Clear Theory:", fClearAll); + layout->addRow("Pre Def. Theory Select:", hLayout); + layout->addRow("Press for Validation:", fCheckTheo); + + setLayout(layout); + + QObject::connect(fEditTemplate, SIGNAL(stateChanged(int)), this, SLOT(templateState(int))); + QObject::connect(fClearAll, SIGNAL(clicked()), this, SLOT(clearAll())); + QObject::connect(fCheckTheo, SIGNAL(clicked()), this, SLOT(checkTheory())); + QObject::connect(fTheoAdd, SIGNAL(clicked()), this, SLOT(addTheory())); +} + +//------------------------------------------------------------------------- +void PTheoPage::initializePage() +{ + QString str = QString("Now you will need to enter your theory. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::nextId + * @return + */ +int PTheoPage::nextId() const +{ + if (fHaveFunc) + return PMusrWiz::ePageFunctions; + else if (fHaveMap) + return PMusrWiz::ePageMaps; + else + return PMusrWiz::ePageParameters; +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::validatePage + * @return + */ +bool PTheoPage::validatePage() +{ + if (fTheo->toPlainText().isEmpty()) + return false; + + fMsrData->clearParam(); + fFunList.clear(); +// fMsrData->clearFunc(); + fMsrData->clearMap(); + + checkTheory(); + if (!fTheoValid) + return false; + + // transfer theory string + fMsrData->setTheory(fTheo->toPlainText()); + + // transfer found parameters + fMsrData->setParam(fParamList); + + // transfer found maps + fMsrData->setMap(fMapList); + + // transfer found functions + if (fHaveFunc) { + QString funStr; + for (int i=0; iisPresent(funStr)) { + funStr = QString("fun%1 = ??").arg(fFunList[i]); + fMsrData->setFunc(fFunList[i], funStr); + } + } + } + + // check if it is necessary to eliminate functions which are not present anymore + if (fFunList.size() != fMsrData->getNoOfFunc()) { + // remove functions from fMsrData which are NOT found in fFuncList + fMsrData->removeFunc(fFunList); + } + + return true; +} + +//------------------------------------------------------------------------- +/** + * + */ +void PTheoPage::templateState(int state) +{ + if (state == Qt::Checked) { + fTheo->setTextInteractionFlags(Qt::TextEditorInteraction); + fMsrData->setTemplate(-1); + fEditTemplate->hide(); + fEditTemplate->setCheckState(Qt::Unchecked); + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PTheoPage::clearAll() +{ + fTheo->clear(); + fTheo->setTextInteractionFlags(Qt::TextEditorInteraction); + fEditTemplate->hide(); + fMsrData->setTemplate(-1); +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::addTheory + */ +void PTheoPage::addTheory() +{ + int idx = fTheoSelect->currentIndex(); + bool isTempl = false; + QString item = fTheoSelect->currentText(); + if (item.startsWith("T:")) { + fEditTemplate->show(); + isTempl = true; + } + + QString theo(""); + bool emptyTheo = false; + if (fTheo->toPlainText().isEmpty()) { // empty theory + emptyTheo = true; + theo = getTheoryFunction(idx); + if (theo == "??") + return; + fTheo->setPlainText(theo); + } else { // theory already has some stuff + emptyTheo = false; + theo = getTheoryFunction(idx); + if (theo == "??") + return; + fTheo->appendPlainText("+"); + fTheo->appendPlainText(theo); + } + + if (isTempl && emptyTheo) { + fTheo->setTextInteractionFlags(Qt::TextBrowserInteraction); + fMsrData->setTemplate(idx); + fMsrData->setTemplate(fAdmin->getTheoTemplate(idx)); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::checkTheory + */ +void PTheoPage::checkTheory() +{ + fTheoValid = false; + + // reset all lists: + fParamList.clear(); + fMapList.clear(); + fFunList.clear(); + + // check theory the following way: + // (i) make sure that line by line is a valid function + // (ii) make a collection of parameters with names suggested + // (iii) make a collection of functions if present + // (iv) make a map list if present + + QString str = fTheo->toPlainText(); + QStringList line = str.split("\n"); + bool ok = true; + PMusrfitFunc func; + for (int i=0; igetMusrfitFunc(strList[0]); + if (func.getName() == "UnDef") { // function not found + QString str = QString("**ERROR** in line %1, '%2' is not a recognized musrfit function.").arg(i+1).arg(line[i]); + QMessageBox::critical(0, "Check Theory", str); + // eventually it would be nice to highlight the faulty line + return; + } + ok = analyzeTokens(line[i], func.getNoOfParam()); + if (!ok) { + QString str = QString("**ERROR** in line %1.\n %2 takes %3 parameter.").arg(i+1).arg(func.getName()).arg(func.getNoOfParam()); + QMessageBox::critical(0, "Check Theory", str); + // eventually it would be nice to highlight the faulty line + return; + } + } + } + + if (fMapList.size() > 0) + fHaveMap = true; + else + fHaveMap = false; + + if (fFunList.size() > 0) + fHaveFunc = true; + else + fHaveFunc = false; + + fTheoValid = true; + + QObject *obj = sender(); + if (obj == fCheckTheo) + QMessageBox::information(0, "Check Theory", "Theory seems to be OK."); +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::getTheoryFunction + * @param idx + * @return + */ +QString PTheoPage::getTheoryFunction(int idx) +{ + QString result("??"); + QVector templ = fAdmin->getTheoTemplates(); + QVector func = fAdmin->getMusrfitFunc(); + static int mapCount = 1; + + if (idx >= templ.size()) { // deal with musrfit functions + if (idx >= templ.size() + func.size()) + return result; + result = func[idx-templ.size()].getAbbrv(); + for (int i=0; igetMusrfitFunc(theo); + if (func.getName() == "UnDef") { + // something is fundamentaly wrong + return; + } + + QString str; + par.setNumber(paramNo); + str = QString("%1_%2").arg(func.getFuncParam(paramIdx-1).getParamName()).arg(fTheoBlockNo); + par.setName(str); + par.setValue(func.getFuncParam(paramIdx-1).getParamValue()); + if (par.getName().contains("Ph_")) + par.setStep(10.0); + else + par.setStep(par.getValue() * 0.1); + + // keep parameter entry + fParamList.push_back(par); +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::dealWithMap + * @param theo + * @param mapNo + * @param paramIdx + */ +void PTheoPage::dealWithMap(QString theo, int mapNo, int paramIdx) +{ + // check if mapNo is already in the map list + for (int i=0; igetMusrfitFunc(theo); + if (func.getName() == "UnDef") { + // something is fundamentaly wrong + return; + } + + map.setNumber(mapNo); + str = QString("%1_%2").arg(func.getFuncParam(paramIdx-1).getParamName()).arg(mapNo); + map.setName(str); + fMapList.push_back(map); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PTheoPage::dealWithFun + * @param funNo + */ +void PTheoPage::dealWithFun(int funNo) +{ + // check if funNo is already in the fun list + for (int i=0; iMaps"); + QString str = QString("Here you can fine tune your map template names. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + // sort maps + fMsrData->sort("map"); + + fMapPageLayout = new QFormLayout; + setLayout(fMapPageLayout); + + // make sure that the map list is empty + fMapGuiVec.clear(); + + // fill Map + PParamGui mapGui; + PParam map; + + // check if this is a template. If this is the case, fill fMsrData maps with the template info. + if (fMsrData->isTemplate()) { + PTheoTemplate templ = fMsrData->getTemplate(); + fMsrData->clearMap(); + for (int i=0; isetMap(i, templ.getMap(i)); + } + } + + for (int i=0; igetNoOfMap(); i++) { + map = fMsrData->getMap(i); + mapGui.paramName = new QLineEdit(map.getName()); + mapGui.paramVal = new QLineEdit("3.45"); + mapGui.paramStep = new QLineEdit("0.01"); + mapGui.paramBoundLow = new QLineEdit(); + mapGui.paramBoundHigh = new QLineEdit(); + fMapGuiVec.push_back(mapGui); + } + + QHBoxLayout *hLayout; + + // header + hLayout = new QHBoxLayout(); + mapGui.paramName = new QLineEdit("Name"); + mapGui.paramName->setReadOnly(true); + mapGui.paramVal = new QLineEdit("Value"); + mapGui.paramVal->setReadOnly(true); + mapGui.paramStep = new QLineEdit("Step"); + mapGui.paramStep->setReadOnly(true); + mapGui.paramBoundLow = new QLineEdit("BoundLow"); + mapGui.paramBoundLow->setReadOnly(true); + mapGui.paramBoundHigh = new QLineEdit("BoundHigh"); + mapGui.paramBoundHigh->setReadOnly(true); + hLayout->addWidget(mapGui.paramName); + hLayout->addWidget(mapGui.paramVal); + hLayout->addWidget(mapGui.paramStep); + hLayout->addWidget(mapGui.paramBoundLow); + hLayout->addWidget(mapGui.paramBoundHigh); + + fMapPageLayout->addRow("No", hLayout); + + for (int i=0; iaddWidget(fMapGuiVec[i].paramName); + hLayout->addWidget(fMapGuiVec[i].paramVal); + hLayout->addWidget(fMapGuiVec[i].paramStep); + hLayout->addWidget(fMapGuiVec[i].paramBoundLow); + hLayout->addWidget(fMapGuiVec[i].paramBoundHigh); + + fMapPageLayout->addRow(QString("map%1").arg(i+1), hLayout); + } + + fShowTheo = new QPushButton("Show &Theory"); + fMapPageLayout->addRow(fShowTheo); + + update(); + + connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); +} + +//------------------------------------------------------------------------- +/** + * @brief PMapPage::validatePage + * @return + */ +bool PMapPage::validatePage() +{ + // collect the map information + PParam map; + QString str; + double dval; + bool ok; + + for (int i=0; igetMap(i).getNumber()); + str = fMapGuiVec[i].paramName->text(); + map.setName(str); + + dval = fMapGuiVec[i].paramVal->text().toDouble(&ok); + if (ok) + map.setValue(dval); + else + map.setValue(0.0); + + dval = fMapGuiVec[i].paramStep->text().toDouble(&ok); + if (ok) + map.setStep(dval); + else + map.setStep(0.0); + + map.setPosErr("none"); + map.setBoundLow(fMapGuiVec[i].paramBoundLow->text()); + map.setBoundHigh(fMapGuiVec[i].paramBoundHigh->text()); + + fMsrData->setMap(i, map); + } + + return true; +} + +//------------------------------------------------------------------------- +/** + * @brief PMapPage::showTheo + */ +void PMapPage::showTheo() +{ + PShowTheo *showTheo = new PShowTheo(fMsrData->getTheory(), fMsrData->getFuncAll(), this); + showTheo->show(); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PFuncPage::PFuncPage + */ +PFuncPage::PFuncPage(PMsrData *data, QWidget *parent) : + QWizardPage(parent), + fMsrData(data) +{ + setTitle("

Functions

"); + QString str = QString("Now you will need to enter your functions. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + fFunc = new QPlainTextEdit(); + fFunc->setWhatsThis("Enter the function(s) here."); + + fShowTheo = new QPushButton("Show &Theory"); + + QFormLayout *layout = new QFormLayout; + layout->addRow("Enter Function(s):", fFunc); + layout->addRow(fShowTheo); + + setLayout(layout); + + connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); +} + +//------------------------------------------------------------------------- +/** + * @brief PFuncPage::showTheo + */ +void PFuncPage::showTheo() +{ + PShowTheo *showTheo = new PShowTheo(fMsrData->getTheory(), "", this); + showTheo->show(); +} + +//------------------------------------------------------------------------- +/** + * @brief PFuncPage::nextId + * @return + */ +int PFuncPage::nextId() const +{ + if (fMsrData->getNoOfMap() > 0) + return PMusrWiz::ePageMaps; + else + return PMusrWiz::ePageParameters; +} + +//------------------------------------------------------------------------- +/** + * + */ +void PFuncPage::initializePage() +{ + QString str = QString("Now you will need to enter your functions. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + // check if this is a template. If this is the case, fill fMsrData functions with the template info. + if (fMsrData->isTemplate()) { + // fill functions according to the template + PTheoTemplate templ = fMsrData->getTemplate(); + fMsrData->clearFunc(); + for (int i=0; isetFunc(templ.getFuncNo(i), templ.getFunc(i)); + } + } + + fMsrData->sort("func"); + fFunc->clear(); + for (int i=0; igetNoOfFunc(); i++) { + fFunc->appendPlainText(fMsrData->getFunc(fMsrData->getFuncNo(i))); + } +} + +//------------------------------------------------------------------------- +/** + * + */ +void PFuncPage::cleanupPage() +{ + fMsrData->clearFunc(); + + // keep the function information + QString str = fFunc->toPlainText(); + QStringList funList = str.split("\n"); + int funNo=0; + for (int i=0; isetFunc(funNo, funList[i]); + } +} + +//------------------------------------------------------------------------- +/** + * @brief PFuncPage::validatePage + * @return + */ +bool PFuncPage::validatePage() +{ + QVector paramList; + QVector mapList; + + QString str = fFunc->toPlainText(); + QString sstr; + QString tok; + int idx = 0, parNo, mapNo; + bool ok; + + // collect potentially present parameters + PParam param; + while ((idx = str.indexOf("par", idx)) != -1) { + tok = ""; + idx += 3; + while (str[idx].isDigit()) { + tok += str[idx++]; + } + parNo = tok.toInt(&ok); + if (ok) { + param.setNumber(parNo); + sstr = QString("par%1").arg(parNo); + param.setName(sstr); + param.setValue(0.0); + param.setStep(0.1); + paramList.push_back(param); + } + } + fMsrData->appendParam(paramList); + + // collect potentially present maps + str = fFunc->toPlainText(); + PParam map; + idx = 0; + while ((idx = str.indexOf("map", idx)) != -1) { + tok = ""; + idx += 3; + while (str[idx].isDigit()) { + tok += str[idx++]; + } + mapNo = tok.toInt(&ok); + if (ok) { + map.setNumber(mapNo); + sstr = QString("map%1").arg(mapNo); + map.setName(sstr); + mapList.push_back(map); + } + } + fMsrData->appendMap(mapList); + + // keep the function information + str = fFunc->toPlainText(); + QStringList funList = str.split("\n"); + int funNo = 0; + fMsrData->clearFunc(); + for (int i=0; isetFunc(i, funList[i]); + } + + return true; +} + +//------------------------------------------------------------------------- +/** + * @brief PFuncPage::getFuncNo + * @param str + * @return + */ +int PFuncPage::getFuncNo(const QString str) +{ + QString strNo = str; + + // str should have to form fun = , where is an int + if (!str.startsWith("fun")) + return -1; + + strNo.remove(0, 3); // get rid of 'fun' + int idx = strNo.indexOf("="); + if (idx == -1) + return -1; + + strNo.remove(idx, str.length()-idx); + + bool ok; + int ival = strNo.toInt(&ok); + if (!ok) + return -1; + + return ival; +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PParamPage::PParamPage + */ +PParamPage::PParamPage(PMsrData *data, QWidget *parent) : + QWizardPage(parent), + fMsrData(data) +{ + fParameterPageLayout = 0; +} + +//------------------------------------------------------------------------- +/** + * @brief PParamPage::nextId + * @return + */ +int PParamPage::nextId() const +{ + return PMusrWiz::ePageFitInfo; +} + +//------------------------------------------------------------------------- +/** + * @brief PParamPage::initializePage + */ +void PParamPage::initializePage() +{ + // sort parameter vector + fMsrData->sort("param"); + + setTitle("

Fit Parameters

"); + QString str = QString("Here you can fine tune your parameters. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + fParameterPageLayout = new QFormLayout; + setLayout(fParameterPageLayout); + + // make sure that parameter list is empty + fParamGuiVec.clear(); + + // fill parameters + PParamGui paramGui; + PParam param; + + // if a template replace the parameters found so far by the template parameter settings + if (fMsrData->isTemplate()) { + fMsrData->clearParam(); + PTheoTemplate templ = fMsrData->getTemplate(); + for (int i=0; isetParam(i, templ.getParam(i)); + } + } + + for (int i=0; igetNoOfParam(); i++) { + param = fMsrData->getParam(i); + paramGui.paramName = new QLineEdit(param.getName()); + paramGui.paramVal = new QLineEdit(QString("%1").arg(param.getValue())); + paramGui.paramStep = new QLineEdit(QString("%1").arg(param.getStep())); + paramGui.paramBoundLow = new QLineEdit(); + paramGui.paramBoundHigh = new QLineEdit(); + fParamGuiVec.push_back(paramGui); + } + + QHBoxLayout *hLayout; + + // header + hLayout = new QHBoxLayout(); + paramGui.paramName = new QLineEdit("Name"); + paramGui.paramName->setReadOnly(true); + paramGui.paramVal = new QLineEdit("Value"); + paramGui.paramVal->setReadOnly(true); + paramGui.paramStep = new QLineEdit("Step"); + paramGui.paramStep->setReadOnly(true); + paramGui.paramBoundLow = new QLineEdit("BoundLow"); + paramGui.paramBoundLow->setReadOnly(true); + paramGui.paramBoundHigh = new QLineEdit("BoundHigh"); + paramGui.paramBoundHigh->setReadOnly(true); + hLayout->addWidget(paramGui.paramName); + hLayout->addWidget(paramGui.paramVal); + hLayout->addWidget(paramGui.paramStep); + hLayout->addWidget(paramGui.paramBoundLow); + hLayout->addWidget(paramGui.paramBoundHigh); + fParameterPageLayout->addRow("No", hLayout); + + for (int i=0; iaddWidget(fParamGuiVec[i].paramName); + hLayout->addWidget(fParamGuiVec[i].paramVal); + hLayout->addWidget(fParamGuiVec[i].paramStep); + hLayout->addWidget(fParamGuiVec[i].paramBoundLow); + hLayout->addWidget(fParamGuiVec[i].paramBoundHigh); + fParameterPageLayout->addRow(QString("%1").arg(i+1), hLayout); + } + + fShowTheo = new QPushButton("Show &Theory"); + fParameterPageLayout->addRow(fShowTheo); + + update(); + + connect(fShowTheo, SIGNAL(pressed()), this, SLOT(showTheo())); +} + +//------------------------------------------------------------------------- +/** + * @brief PParamPage::validatePage + * @return + */ +bool PParamPage::validatePage() +{ + PParam param; + QString str; + double dval; + bool ok; + + for (int i=0; igetParam(i).getNumber()); + str = fParamGuiVec[i].paramName->text(); + param.setName(str); + + dval = fParamGuiVec[i].paramVal->text().toDouble(&ok); + if (ok) + param.setValue(dval); + else + param.setValue(0.0); + + dval = fParamGuiVec[i].paramStep->text().toDouble(&ok); + if (ok) + param.setStep(dval); + else + param.setStep(0.0); + + param.setPosErr("none"); + param.setBoundLow(fParamGuiVec[i].paramBoundLow->text()); + param.setBoundHigh(fParamGuiVec[i].paramBoundHigh->text()); + + fMsrData->setParam(i, param); + } + + return true; +} + +//------------------------------------------------------------------------- +/** + * @brief PParamPage::showTheo + */ +void PParamPage::showTheo() +{ + PShowTheo *showTheo = new PShowTheo(fMsrData->getTheory(), fMsrData->getFuncAll(), this); + showTheo->show(); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PFitInfoPage::PFitInfoPage + */ +PFitInfoPage::PFitInfoPage(PMsrData *data, QWidget *parent) : + QWizardPage(parent), + fMsrData(data) +{ + setTitle("

Fit Info

"); + QString str = QString("Collect necessary fit information. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); + + fFitRangeStart = new QLineEdit("0.0"); + fFitRangeStart->setValidator(new QDoubleValidator()); + fFitRangeEnd = new QLineEdit("9.0"); + fFitRangeEnd->setValidator(new QDoubleValidator()); + + QHBoxLayout *hLayout = new QHBoxLayout(); + hLayout->addWidget(fFitRangeStart); + hLayout->addWidget(fFitRangeEnd); + + fPacking = new QLineEdit("1"); + fPacking->setValidator(new QIntValidator()); + + fCommands = new QPlainTextEdit(); + fCommands->setPlainText("#MAX_LIKELIHOOD\nPRINT_LEVEL 2\nMINIMIZE\nMINOS\nSAVE"); + + QFormLayout *layout = new QFormLayout; + layout->addRow("Fit Range:", hLayout); + layout->addRow("Packing:", fPacking); + layout->addRow("Commands:", fCommands); + + setLayout(layout); +} + +//------------------------------------------------------------------------- +/** + * @brief PFitInfoPage::initializePage + */ +void PFitInfoPage::initializePage() +{ + QString str = QString("Collect necessary fit information. Fit type: %1").arg(fMsrData->getFitTypeString()); + setSubTitle(str); +} + +//------------------------------------------------------------------------- +/** + * @brief PFitInfoPage::nextId + * @return + */ +int PFitInfoPage::nextId() const +{ + return PMusrWiz::ePageConclusion; +} + +//------------------------------------------------------------------------- +/** + * @brief PFitInfoPage::validatePage + * @return + */ +bool PFitInfoPage::validatePage() +{ + bool ok; + int ival = fPacking->text().toInt(&ok); + if (ok) + fMsrData->setPacking(ival); + + double dval = fFitRangeStart->text().toDouble(&ok); + if (ok) + fMsrData->setFitStart(dval); + dval = fFitRangeEnd->text().toDouble(&ok); + if (ok) + fMsrData->setFitEnd(dval); + + fMsrData->setCmd(fCommands->toPlainText()); + + return true; +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/** + * @brief PConclusionPage::PConclusionPage + */ +PConclusionPage::PConclusionPage(PAdmin *admin, PMsrData *data, QString *msrFilePath, QWidget *parent) : + QWizardPage(parent), + fMsrFilePath(msrFilePath), + fAdmin(admin), + fMsrData(data) +{ + setTitle("

Create

"); + setSubTitle("Now we create the msr-file."); + + QVBoxLayout *vLayout = new QVBoxLayout; + + fSaveAsMsrFile = new QPushButton("Save As (msr-file path)"); + fSaveAsTemplate = new QPushButton("Save As (template)"); + + vLayout->addWidget(fSaveAsMsrFile); + vLayout->addWidget(fSaveAsTemplate); + + setLayout(vLayout); + + connect(fSaveAsMsrFile, SIGNAL(pressed()), this, SLOT(saveAsMsrFile())); + connect(fSaveAsTemplate, SIGNAL(pressed()), this, SLOT(saveAsTemplate())); +} + +//------------------------------------------------------------------------- +void PConclusionPage::saveAsMsrFile() +{ + QString str = QFileDialog::getExistingDirectory(this, tr("Save in Directory"), "./", + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if (!str.isEmpty()) + *fMsrFilePath = str; +} + +//------------------------------------------------------------------------- +/** + * + */ +void PConclusionPage::saveAsTemplate() +{ + bool newTemplate = false; + + QStringList list; + list << ""; + for (int i=0; igetTheoTemplateSize(); i++) + list << fAdmin->getTheoTemplate(i).getName(); + + bool ok; + QString result = QInputDialog::getItem(this, "Save As Template", "Template Name", list, 0, false, &ok); + if (!ok) + return; + + if (result == "") { + QString text(""); + result = QInputDialog::getText(this, "New Template Name", "Enter Template Name", QLineEdit::Normal, text, &ok); + if (!ok) + return; + // analyze the name: it has to start with 'T: ' + if (!result.startsWith("T: ")) + result.prepend("T: "); + newTemplate = true; + } + + // read musrfit_funcs.xml + QString path = std::getenv("HOME"); + QString pathFln = path + "/.musrfit/musrWiz/musrfit_funcs.xml"; + bool found = false; + if (QFile::exists(pathFln)) { + found = true; + } + if (!found) { + QMessageBox::critical(this, "ERROR", "Couldn't find musrfit_funcs.xml"); + return; + } + + QFile fin(pathFln); + if (!fin.open(QIODevice::ReadOnly | QIODevice::Text)) { + QMessageBox::critical(this, "ERROR", "Couldn't open musrfit_funcs.xml for reading."); + return; + } + + QTextStream in(&fin); + QString data = in.readAll(); + fin.close(); + + int idx, idxEnd; + QString insertStr, errMsg; + if (newTemplate) { // new template + // first find the proper place where to insert the new template + idx = data.lastIndexOf(""); + if (idx == -1) { + QMessageBox::critical(this, "ERROR", "Couldn't find last theo_template. Something is very wrong."); + return; + } + idx = data.indexOf(" + + + + T: 1 [exp x cos](TF) + a 1\nse 2\ntf fun1 4 + fun1=par3+map1 + + + + + + + + T: 2 [exp x cos](TF) + a 1\nse 2\ntf fun1 4\n+\na 5\nse 6\ntf fun1 7 + fun1=par3+map1 + + + + + + + + + + + T: 3 [exp x cos](TF) + a 1\nse 2\ntf fun1 4\n+\na 5\nse 6\ntf fun1 7\n+\na 8\nse 9\ntf fun1 10 + fun1=par3+map1 + + + + + + + + + + + + + + T: 1 [gauss x cos](TF) + a 1\nsg 2\ntf fun1 4 + fun1=par3+map1 + + + + + + + + T: 2 [gauss x cos](TF) + a 1\nsg 2\ntf fun1 4\n+\na 5\nsg 6\ntf fun1 7 + fun1=par3+map1 + + + + + + + + + + + T: 3 [gauss x cos](TF) + a 1\nsg 2\ntf fun1 4\n+\na 5\nsg 6\ntf fun1 7\n+\na 8\nsg 9\ntf fun1 10 + fun1=par3+map1 + + + + + + + + + + + + + + + + + + asymmetry + a + 1 + + Asym + 0.2 + + + + + simplExpo + se + 1 + + Lambda + 0.5 + + + + + simpleGss + sg + 1 + + Sigma + 0.5 + + + + + generExpo + ge + 2 + + Lambda + 0.5 + + + Beta + 1.5 + + + + + TFieldCos + tf + 2 + + Ph + 0.0 + y + + + Freq + 10.0 + + + + + internFld + if + 5 + + Weight + 0.66 + + + Ph + 0.0 + + + Freq + 10.0 + + + LambdaT + 0.5 + + + LambdaL + 0.1 + + + + + Bessel + b + 2 + + Ph + 0.0 + + + Freq + 10.0 + + + + + internBsl + ib + 5 + + Weight + 0.66 + + + Ph + 0.0 + + + Freq + 10.0 + + + LambdaT + 0.5 + + + LambdaL + 0.1 + + + + + statGssKT + stg + 1 + + Sigma + 0.3 + + + + + statGssKTLF + sgktlf + 2 + + Hopp + 0.1 + + + Sigma + 0.3 + + + + + dynGssKTLF + dgktlf + 3 + + Freq + 0.0 + + + Sigma + 0.3 + + + Gamma + 0.5 + + + + + statExpKT + sekt + 1 + + Lambda + 0.3 + + + + + statExpKTLF + sektlf + 2 + + Hopp + 0.1 + + + Lambda + 0.3 + + + + + dynExpKTLF + dektlf + 3 + + Freq + 0.1 + + + Lambda + 0.3 + + + Gamma + 0.5 + + + + + combiLGKT + lgkt + 2 + + Lambda + 0.2 + + + Sigma + 0.3 + + + + + strKT + skt + 2 + + Sigma + 0.3 + + + Beta + 2.0 + + + + + spinGlass + spg + 3 + + Lambda + 0.3 + + + Gamma + 0.1 + + + q + 0.8 + + + + + rdAnisoHf + rahf + 2 + + Nu + 1.5 + + + Lambda + 0.3 + + + + + abragam + ab + 2 + + Sigma + 0.5 + + + Gamma + 0.2 + + + + + skewedGss + skg + 4 + + Ph + 0.0 + + + Freq + 10.0 + + + SigmaPlus + 1.1 + + + SigmaMinus + 0.3 + + + + + staticNKZF + snkzf + 2 + + Delta + 0.5 + + + Rb + 0.2 + + + + + staticNKTF + snktf + 4 + + Ph + 0.0 + + + Frq + 10.5 + + + Delta + 0.5 + + + Rb + 0.2 + + + + + dynamicNKZF + dnkzf + 3 + + Delta + 0.5 + + + Rb + 0.2 + + + Hopp + 1.0 + + + + + dynamicNKTF + dnktf + 5 + + Ph + 0.0 + + + Frq + 10.5 + + + Delta + 0.5 + + + Rb + 0.2 + + + Hopp + 1.0 + + + + + muMinusExpTF + mmsetf + 6 + + N0 + 100.0 + + + Tau + 1.0 + + + Asym + 0.08 + + + Lambda + 1.1 + + + Ph + 0.0 + + + Frq + 10.2 + + + diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-22x22-dark.svg b/src/musredit_qt5/musrWiz/icons/musrWiz-22x22-dark.svg new file mode 100644 index 00000000..69f78f45 --- /dev/null +++ b/src/musredit_qt5/musrWiz/icons/musrWiz-22x22-dark.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-22x22.png b/src/musredit_qt5/musrWiz/icons/musrWiz-22x22.png new file mode 100644 index 0000000000000000000000000000000000000000..17139ff347fc39c88906dffc1da59a91de5c5ff6 GIT binary patch literal 387 zcmV-}0et?6P)*^VUUoz^aSk&Gh!tZf}zLg z9hkUFx0>aFoQD&=kkpbT%g^~_|F$AC<3Fq_DUwu6st1wHtk;1W_(@&|?*jI~*5_w~ zx`^!ne5A=Rvn|jD-^Vqxi<{^o=`+teTex`sh_bO7pec~20+uPB0pICcJ!+he4e*=1 zA<)x7Pk@o>>b>YHoKzKX1lB3Fk+ckpOQpyX%YBUXfJpS zv=cl8+PRkrpy7X{b;rS-0-S+&Gy4ngwaZ3tzfX#>i|Sk+u$vOzZb!)G?A) hz#H&27TN+&Z8uXxfmP+8muLV0002ovPDHLkV1jmJqKyCm literal 0 HcmV?d00001 diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-22x22.svg b/src/musredit_qt5/musrWiz/icons/musrWiz-22x22.svg new file mode 100644 index 00000000..94ad8bac --- /dev/null +++ b/src/musredit_qt5/musrWiz/icons/musrWiz-22x22.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-32x32-dark.svg b/src/musredit_qt5/musrWiz/icons/musrWiz-32x32-dark.svg new file mode 100644 index 00000000..05c4e5fa --- /dev/null +++ b/src/musredit_qt5/musrWiz/icons/musrWiz-32x32-dark.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-32x32.png b/src/musredit_qt5/musrWiz/icons/musrWiz-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa3f62940952efb7dc2d699e69c4f129eefe5f3 GIT binary patch literal 542 zcmV+(0^$9MP)ugK~z|U#h1-W!$1^;zuQGcH&VfEL8#yxh!4=bfm^|M=o7hi zA-EJ=s;knS6ofuNi?00H)axQQn52^?lg#LafhOtnJ9EwrGZj_kKdaYvqKG6Sl5|#} zs@}td&usJ>eE$Sk0JlKD@T>(qF|gX00Z9$~6<7oBz&)^&J#QUBlM<0b-~re-*Yp?$s}wLXI{fss>y!6!MjlWig@ z;3I>40_S$`(yj~ef&jC9TCz*+US%8(_{vtQW`8E)2pE*-1ZzSO839jbfA+h(z?Fy$ zRdu1NZyOUsM8L1@Yc?Bh=~{W`CTs{_QOdklK$F)n6ueS^XSY|`UJGw6AQZfnfRJ!+ z0ioeu0%E`$3y1}8B%mvtEt^)YfB^8?Z9DeLYfnzj&B!*EN8o_s!S$Q;cy*?#FRr=X z6|>>+jUXi4y9r~!yn{7|C%+aA1*b&+e)qdApigX07*qoM6N<$g8IhezyJUM literal 0 HcmV?d00001 diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz-32x32.svg b/src/musredit_qt5/musrWiz/icons/musrWiz-32x32.svg new file mode 100644 index 00000000..1b3cafe5 --- /dev/null +++ b/src/musredit_qt5/musrWiz/icons/musrWiz-32x32.svg @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_isis.xml b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_isis.xml new file mode 100644 index 00000000..7b5e2135 --- /dev/null +++ b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_isis.xml @@ -0,0 +1,23 @@ + + + ISIS + + + HIFINNNNNNNN + HIFI + NEXUS + + 128 + 0 + 2047 + + + + + + + + + + + \ No newline at end of file diff --git a/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml new file mode 100644 index 00000000..f9aa287c --- /dev/null +++ b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml @@ -0,0 +1,145 @@ + + + PSI + + + dYYYY/tdc/tdc_hifi_YYYY_NNNNN + PIE3 + PSI-MDU + + 16 + 50 + 409500 + 500 15000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + YYYY/lemYY_his_NNNN + MUE4 + MUSR-ROOT + + 8 + 0 + 63000 + 200 1500 + + + + + + + + + 4 + 0 + 63000 + 200 1500 + + + + + + 4 + 0 + 63000 + 200 1500 + + + + 4 + 0 + 63000 + 200 1500 + + + + 8 + 0 + 63000 + 200 1500 + + + + 8 + 0 + 63000 + 200 1500 + + + + + + dYYYY/tdc/deltat_tdc_gps_NNNN + PIM3 + PSI-BIN + + 6 + 10 + 25600 + 50 300 + + + + + + + + + 6 + 10 + 25600 + 50 300 + + + + + + + + + 6 + 10 + 25600 + 50 300 + + + + 6 + 20 + 25600 + 50 300 + + + + diff --git a/src/musredit_qt5/musrWiz/musrWiz.cpp b/src/musredit_qt5/musrWiz/musrWiz.cpp new file mode 100644 index 00000000..57befbf5 --- /dev/null +++ b/src/musredit_qt5/musrWiz/musrWiz.cpp @@ -0,0 +1,138 @@ +#include +#include + +#include +#include +#include +#include + +#include "git-revision.h" +#include "musrWiz.h" +#include "PAdmin.h" +#include "PMusrWiz.h" + +//------------------------------------------------------------------- +/** + * + */ +void PParam::init() +{ + fName = QString("UnDef"); + fNumber = -1; + fValue = 0.0; + fStep = 0.0; + fPosErr = QString("UnDef"); + fBoundLow = QString("UnDef"); + fBoundHigh = QString("UnDef"); +} + +//------------------------------------------------------------------- +/** + * + */ +void musrWiz_syntax() +{ + std::cout << "usage: musrWiz [[--version | -v] | --debug [0|1|2] | --help]" << std::endl << std::endl; + std::cout << " --version | -v : print current git-version." << std::endl; + std::cout << " --debug 0 : dump's the instrument definition(s) at startup." << std::endl; + std::cout << " --debug 1 : dump's the musrfit functions at startup." << std::endl; + std::cout << " --debug 2 : dump's the musrfit functions and instrument definition(s) at startup." << std::endl; + std::cout << " --log : writes a log-file '.musrWiz.log' which contains the path-file-name of" << std::endl; + std::cout << " the created msr-file." << std::endl; + std::cout << " --help : shows this help." << std::endl << std::endl; +} + +//------------------------------------------------------------------- +/** + * + */ +int main(int argc, char *argv[]) +{ + int dump = -1; + bool logFile = false; + + if (argc == 2) { + if (!strcmp(argv[1], "--version") || (!strcmp(argv[1], "-v"))) { + std::cout << std::endl << "musrWiz - alpha - git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl; + return 0; + } else if (!strcmp(argv[1], "--help")) { + musrWiz_syntax(); + return 0; + } else if (!strcmp(argv[1], "--log")) { // thought to be used from within musredit only + logFile = true; + } else { + musrWiz_syntax(); + return 0; + } + } else if (argc == 3) { + dump = atoi(argv[2]); + if ((dump < 0) || (dump > 2)) { + musrWiz_syntax(); + return 0; + } + } + + Q_INIT_RESOURCE(musrWiz); + + QApplication app(argc, argv); + + PAdmin *admin = new PAdmin(); + if (!admin->IsValid()) { + delete admin; + return 1; + } + admin->dump(dump); + + PMsrData *info = new PMsrData(); // this content will eventually be set by the xml-handler + + PMusrWiz wizard(admin, info); + wizard.show(); + + app.exec(); + + int result = wizard.result(); + + if (result == 1) { // if everything went fine up to this point + // check if a log-file shall be written + if (logFile) { + std::ofstream fout(".musrWiz.log", std::ofstream::out); + fout << "path-file-name: " << info->getMsrPathName().toLatin1().data() << "/" << info->getMsrFileName().toLatin1().data() << std::endl; + fout.close(); + } + + // check if musrt0 shall be called. If the option --log is set, only add musrt0 flag to in the .musrWiz.log file + if (info->getT0Tag() == T0_FROM_MUSR_T0) { + if (logFile) { + std::ofstream fout(".musrWiz.log", std::ofstream::app); + fout << "musrt0-tag: yes" << std::endl; + fout.close(); + } else { + QProcessEnvironment pe = QProcessEnvironment::systemEnvironment(); + QString musrt0Path = pe.value("MUSRFITPATH", "??"); + if (musrt0Path == "??") { // not found hence try ROOTSYS + musrt0Path = pe.value("ROOTSYS", "??"); + if (musrt0Path != "??") { + musrt0Path += "/bin"; + } + } + + if (musrt0Path != "??") { + QString musrt0 = musrt0Path + "/musrt0"; + QString pathFln = QString("%1/%2").arg(info->getMsrPathName()).arg(info->getMsrFileName()); + QStringList arguments; + arguments << pathFln; + QProcess::startDetached(musrt0, arguments, "./"); + } else { + QMessageBox::warning(0, "WARNING", "Couldn't find musrt0 :-(.\n Only the msr-file has been generated."); + } + } + } + } + + if (info) + delete info; + if (admin) + delete admin; + + return result; +} diff --git a/src/musredit_qt5/musrWiz/musrWiz.h b/src/musredit_qt5/musrWiz/musrWiz.h new file mode 100644 index 00000000..c04ff7a3 --- /dev/null +++ b/src/musredit_qt5/musrWiz/musrWiz.h @@ -0,0 +1,75 @@ +/*************************************************************************** + + musrWiz.h + + Author: Andreas Suter + e-mail: andreas.suter@psi.ch + +***************************************************************************/ + +/*************************************************************************** + * Copyright (C) 2007-2016 by Andreas Suter * + * andreas.suter@psi.ch * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _MUSRWIZ_H_ +#define _MUSRWIZ_H_ + +#include + +//------------------------------------------------------------------- +class PParam { + public: + PParam() { init(); } + ~PParam() {} + + void init(); + + QString getName() { return fName; } + int getNumber() { return fNumber; } + double getValue() { return fValue; } + double getStep() { return fStep; } + QString getPosErr() { return fPosErr; } + QString getBoundLow() { return fBoundLow; } + QString getBoundHigh() { return fBoundHigh; } + + void setName(QString str) { fName = str; } + void setNumber(int ival) { fNumber = ival; } + void setValue(double dval) { fValue = dval; } + void setStep(double dval) { fStep = dval; } + void setPosErr(QString str) { fPosErr = str; } + void setBoundLow(QString str) { fBoundLow = str; } + void setBoundHigh(QString str) { fBoundHigh = str; } + + private: + QString fName; + int fNumber; + double fValue; + double fStep; + QString fPosErr; + QString fBoundLow; + QString fBoundHigh; +}; + +//------------------------------------------------------------------- +typedef struct { + int number; + QString fun; +} PFunc; + +#endif // _MUSRWIZ_H_ diff --git a/src/musredit_qt5/musrWiz/musrWiz.pro b/src/musredit_qt5/musrWiz/musrWiz.pro new file mode 100644 index 00000000..579c923c --- /dev/null +++ b/src/musredit_qt5/musrWiz/musrWiz.pro @@ -0,0 +1,58 @@ +TEMPLATE = app +TARGET = musrWiz + +# install path for the application +unix:target.path = $$(ROOTSYS)/bin +INSTALLS += target + +# install path for the XML instrument def file +unix:instrumendDef.path = $$(HOME)/.musrfit/musrWiz +instrumendDef.files = instrument_defs/instrument_def_psi.xml +exists( $$(HOME)/.musrfit/musrWiz/instrument_def_psi.xml ) { + unix:instrumendDef.extra = mv $$(HOME)/.musrfit/musrWiz/instrument_def_psi.xml $$(HOME)/.musrfit/musrWiz/instrument_def_psi.xml.backup +} +INSTALLS += instrumendDef + +# install path for the XML musrfit funcs file +unix:musrfitFunc.path = $$(HOME)/.musrfit/musrWiz +musrfitFunc.files = func_defs/musrfit_funcs.xml +exists( $$(HOME)/.musrfit/musrWiz/musrfit_funcs.xml ) { + unix:musrfitFunc.extra = mv $$(HOME)/.musrfit/musrWiz/musrfit_funcs.xml $$(HOME)/.musrfit/musrWiz/musrfit_funcs.xml.backup +} +INSTALLS += musrfitFunc + +# install path for the musrWiz defaults XML +unix:musrWizDefault.path = $$(HOME)/.musrfit/musrWiz +musrWizDefault.files = musrWiz.xml +exists( $$(HOME)/.musrfit/musrWiz/musrWiz.xml ) { + unix:musrWizDefault.extra = mv $$(HOME)/.musrfit/musrWiz/musrWiz.xml $$(HOME)/.musrfit/musrWiz/musrWiz.xml.backup +} +INSTALLS += musrWizDefault + +CONFIG += qt \ + warn_on \ + release \ +#CONFIG += console + +QT += widgets +QT += xml +QT += core +QT += svg + +INCLUDEPATH += "../../include" + +HEADERS = musrWiz.h \ + PTheoTemplate.h \ + PMusrfitFunc.h \ + PInstrumentDef.h \ + PAdmin.h \ + PMusrWiz.h + +SOURCES = PTheoTemplate.cpp \ + PMusrfitFunc.cpp \ + PInstrumentDef.cpp \ + PAdmin.cpp \ + PMusrWiz.cpp \ + musrWiz.cpp + +RESOURCES = musrWiz.qrc diff --git a/src/musredit_qt5/musrWiz/musrWiz.qrc b/src/musredit_qt5/musrWiz/musrWiz.qrc new file mode 100644 index 00000000..fb9507f9 --- /dev/null +++ b/src/musredit_qt5/musrWiz/musrWiz.qrc @@ -0,0 +1,8 @@ + + + icons/musrWiz-22x22.svg + icons/musrWiz-22x22-dark.svg + icons/musrWiz-32x32.svg + icons/musrWiz-32x32-dark.svg + + diff --git a/src/musredit_qt5/musrWiz/musrWiz.xml b/src/musredit_qt5/musrWiz/musrWiz.xml new file mode 100644 index 00000000..1d0225c4 --- /dev/null +++ b/src/musredit_qt5/musrWiz/musrWiz.xml @@ -0,0 +1,8 @@ + + + + PSI + LEM + Single Histo + + diff --git a/src/musredit_qt5/musredit.pro b/src/musredit_qt5/musredit.pro new file mode 100644 index 00000000..4262cdaf --- /dev/null +++ b/src/musredit_qt5/musredit.pro @@ -0,0 +1,20 @@ +TEMPLATE = subdirs + +TARGET = musredit + +SUBDIRS = \ + musrStep \ + musrWiz \ + musredit + +# where to find the sub-projects - give the folders +musrStep.subdir = musrStep +musrWiz.subdir = musrWiz +musredit.subdir = musredit + +# what sub-project depends on others +musredit.depends = musrStep musrWiz + +# build the project sequentially as listed in SUBDIRS ! +CONFIG += ordered + From bfe501f6f2c7f7f816048d0dc0b3e70e684b3075 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 31 Mar 2017 18:18:14 +0200 Subject: [PATCH 20/43] some improvement towards a full functional implementation of musrWiz and musrStep under macos. --- src/musredit_qt5/musrStep/icons/musrStep.icns | Bin 0 -> 88254 bytes src/musredit_qt5/musrStep/musrStep.pro | 51 +++++++++++++++++- src/musredit_qt5/musrWiz/icons/musrWiz.icns | Bin 0 -> 100998 bytes src/musredit_qt5/musrWiz/musrWiz.pro | 20 ++++++- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 src/musredit_qt5/musrStep/icons/musrStep.icns create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz.icns diff --git a/src/musredit_qt5/musrStep/icons/musrStep.icns b/src/musredit_qt5/musrStep/icons/musrStep.icns new file mode 100644 index 0000000000000000000000000000000000000000..4a14ce55fa43065c19db6ab385859cc5bf023196 GIT binary patch literal 88254 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 P*OcFa39#Vs3DExns7&I7 literal 0 HcmV?d00001 diff --git a/src/musredit_qt5/musrStep/musrStep.pro b/src/musredit_qt5/musrStep/musrStep.pro index 8db5b34f..a47b30be 100644 --- a/src/musredit_qt5/musrStep/musrStep.pro +++ b/src/musredit_qt5/musrStep/musrStep.pro @@ -1,14 +1,60 @@ TEMPLATE = app TARGET = musrStep +# install path for musrStep via given prefix +count( PREFIX, 1 ) { + MUSRSTEP_INSTALL_PATH = $${PREFIX}/bin +} +isEmpty( MUSRSTEP_INSTALL_PATH ) { + MUSR_FIT_PATH = $$(MUSRFITPATH) + count( MUSR_FIT_PATH, 1) { + MUSRSTEP_INSTALL_PATH = $$(MUSRFITPATH) + } +} +isEmpty( MUSRSTEP_INSTALL_PATH ) { + ROOT_SYS_PATH = $$(ROOTSYS) + count( ROOT_SYS_PATH, 1) { + MUSRSTEP_INSTALL_PATH = $$(ROOTSYS)/bin + } +} +isEmpty( MUSRSTEP_INSTALL_PATH ) { + MUSRSTEP_INSTALL_PATH = /usr/local/bin +} + +exists( /usr/bin/cygwin1.dll ) { + QMAKE_CXXFLAGS += -D_WIN32GCC + QMAKE_LFLAGS_APP = -Wl,--enable-auto-import +} + +isEmpty( CC ) { + CC = gcc +} + +isEmpty( CXX ) { + CXX = g++ +} + +QMAKE_CC = $${CC} +QMAKE_CXX = $${CXX} +QMAKE_LINK = $${CXX} + +# set proper permission for Mac OSX +macx { + QMAKE_INSTALL_FILE = install -m 6755 -p -o $$(USER) -g staff + QMAKE_INSTALL_PROGRAM = install -m 6755 -p -o root -g admin +} + # install path for the application unix:target.path = $$(ROOTSYS)/bin +macx:target.path = /Applications +win32:target.path = c:/musrfit/bin + INSTALLS += target CONFIG += qt \ warn_on \ - debug \ -CONFIG += console + release \ + console QT += widgets QT += svg @@ -23,3 +69,4 @@ SOURCES = PMusrStep.cpp \ RESOURCES = musrStep.qrc +macx:ICON = icons/musrStep.icns diff --git a/src/musredit_qt5/musrWiz/icons/musrWiz.icns b/src/musredit_qt5/musrWiz/icons/musrWiz.icns new file mode 100644 index 0000000000000000000000000000000000000000..1b8773c684e8a04f1c23726a00db06f41fcb22f9 GIT binary patch literal 100998 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 Date: Fri, 31 Mar 2017 21:13:04 +0200 Subject: [PATCH 21/43] a first ugly solution to get musrWiz and musrStep started under macos. Definitely will need some improvements. --- src/musredit_qt5/musredit/PTextEdit.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index a83455e5..554af6a1 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -1829,6 +1829,9 @@ void PTextEdit::textSize( const QString &p ) void PTextEdit::musrWiz() { QString cmd = fAdmin->getExecPath() + "/musrWiz"; +#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) + cmd = QString("/Applications/musrWiz.app/Contents/MacOS/musrWiz"); +#endif QString workDir = "./"; // think about it!! QStringList arg; arg << "--log"; @@ -2533,6 +2536,9 @@ void PTextEdit::musrSetSteps() // fill the command queue QString cmd = fAdmin->getExecPath() + "/musrStep"; +#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) + cmd = QString("/Applications/musrStep.app/Contents/MacOS/musrStep"); +#endif QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); QStringList arg; QString str; From 9374f18d54e82acc6d641869911413300ec12224 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 1 Apr 2017 16:12:48 +0200 Subject: [PATCH 22/43] make save as msr-file path more transparent for the user. --- src/musredit_qt5/musrWiz/PMusrWiz.cpp | 12 +++++++++++- src/musredit_qt5/musrWiz/PMusrWiz.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/musrWiz/PMusrWiz.cpp b/src/musredit_qt5/musrWiz/PMusrWiz.cpp index b374740d..71179ba9 100644 --- a/src/musredit_qt5/musrWiz/PMusrWiz.cpp +++ b/src/musredit_qt5/musrWiz/PMusrWiz.cpp @@ -1769,15 +1769,23 @@ PConclusionPage::PConclusionPage(PAdmin *admin, PMsrData *data, QString *msrFile fAdmin(admin), fMsrData(data) { + QDir ddir = QDir(*fMsrFilePath); + setTitle("

Create

"); setSubTitle("Now we create the msr-file."); QVBoxLayout *vLayout = new QVBoxLayout; + fMsrPathFileLabel = new QLabel("Current msr-File Path:"); + fMsrFilePathLineEdit = new QLineEdit(ddir.absolutePath()); + fMsrFilePathLineEdit->setReadOnly(true); fSaveAsMsrFile = new QPushButton("Save As (msr-file path)"); fSaveAsTemplate = new QPushButton("Save As (template)"); + vLayout->addWidget(fMsrPathFileLabel); + vLayout->addWidget(fMsrFilePathLineEdit); vLayout->addWidget(fSaveAsMsrFile); + vLayout->addStretch(1); vLayout->addWidget(fSaveAsTemplate); setLayout(vLayout); @@ -1791,8 +1799,10 @@ void PConclusionPage::saveAsMsrFile() { QString str = QFileDialog::getExistingDirectory(this, tr("Save in Directory"), "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - if (!str.isEmpty()) + if (!str.isEmpty()) { *fMsrFilePath = str; + fMsrFilePathLineEdit->setText(str); + } } //------------------------------------------------------------------------- diff --git a/src/musredit_qt5/musrWiz/PMusrWiz.h b/src/musredit_qt5/musrWiz/PMusrWiz.h index d95a65d7..711d286a 100644 --- a/src/musredit_qt5/musrWiz/PMusrWiz.h +++ b/src/musredit_qt5/musrWiz/PMusrWiz.h @@ -370,6 +370,8 @@ class PConclusionPage : public QWizardPage PAdmin *fAdmin; PMsrData *fMsrData; + QLabel *fMsrPathFileLabel; + QLineEdit *fMsrFilePathLineEdit; QPushButton *fSaveAsMsrFile; QPushButton *fSaveAsTemplate; }; From f906c81448662d4adf1ba4b53cae8ad74de2523b Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 1 Apr 2017 17:30:25 +0200 Subject: [PATCH 23/43] removed unnecessary QMAKE_INSTALL_PROGRAM. --- src/musredit_qt5/musrStep/musrStep.pro | 1 - src/musredit_qt5/musrWiz/musrWiz.pro | 1 - src/musredit_qt5/musredit/musredit.pro | 1 - 3 files changed, 3 deletions(-) diff --git a/src/musredit_qt5/musrStep/musrStep.pro b/src/musredit_qt5/musrStep/musrStep.pro index a47b30be..565b46c2 100644 --- a/src/musredit_qt5/musrStep/musrStep.pro +++ b/src/musredit_qt5/musrStep/musrStep.pro @@ -41,7 +41,6 @@ QMAKE_LINK = $${CXX} # set proper permission for Mac OSX macx { QMAKE_INSTALL_FILE = install -m 6755 -p -o $$(USER) -g staff - QMAKE_INSTALL_PROGRAM = install -m 6755 -p -o root -g admin } # install path for the application diff --git a/src/musredit_qt5/musrWiz/musrWiz.pro b/src/musredit_qt5/musrWiz/musrWiz.pro index 4a62a160..78db62d4 100644 --- a/src/musredit_qt5/musrWiz/musrWiz.pro +++ b/src/musredit_qt5/musrWiz/musrWiz.pro @@ -50,7 +50,6 @@ QT += svg # set proper permission for Mac OSX macx { QMAKE_INSTALL_FILE = install -m 6755 -p -o $$(USER) -g staff - QMAKE_INSTALL_PROGRAM = install -m 6755 -p -o root -g admin } INCLUDEPATH += "../../include" diff --git a/src/musredit_qt5/musredit/musredit.pro b/src/musredit_qt5/musredit/musredit.pro index e8598821..2a15854c 100644 --- a/src/musredit_qt5/musredit/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -58,7 +58,6 @@ QMAKE_LINK = $${CXX} # set proper permission for Mac OSX macx { QMAKE_INSTALL_FILE = install -m 6755 -p -o $$(USER) -g staff - QMAKE_INSTALL_PROGRAM = install -m 6755 -p -o root -g admin } # install path for the XML configuration file From 9cad7580b7c86a0628d73a3ef85677879f769fcf Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 3 Apr 2017 18:17:38 +0200 Subject: [PATCH 24/43] moved musrWiz.log to /home/suter_a/.musrfit/musredit --- src/musredit_qt5/musrWiz/musrWiz.cpp | 278 +- src/musredit_qt5/musredit/PTextEdit.cpp | 6200 ++++++++++++----------- 2 files changed, 3246 insertions(+), 3232 deletions(-) diff --git a/src/musredit_qt5/musrWiz/musrWiz.cpp b/src/musredit_qt5/musrWiz/musrWiz.cpp index 57befbf5..e9854757 100644 --- a/src/musredit_qt5/musrWiz/musrWiz.cpp +++ b/src/musredit_qt5/musrWiz/musrWiz.cpp @@ -1,138 +1,140 @@ -#include -#include - -#include -#include -#include -#include - -#include "git-revision.h" -#include "musrWiz.h" -#include "PAdmin.h" -#include "PMusrWiz.h" - -//------------------------------------------------------------------- -/** - * - */ -void PParam::init() -{ - fName = QString("UnDef"); - fNumber = -1; - fValue = 0.0; - fStep = 0.0; - fPosErr = QString("UnDef"); - fBoundLow = QString("UnDef"); - fBoundHigh = QString("UnDef"); -} - -//------------------------------------------------------------------- -/** - * - */ -void musrWiz_syntax() -{ - std::cout << "usage: musrWiz [[--version | -v] | --debug [0|1|2] | --help]" << std::endl << std::endl; - std::cout << " --version | -v : print current git-version." << std::endl; - std::cout << " --debug 0 : dump's the instrument definition(s) at startup." << std::endl; - std::cout << " --debug 1 : dump's the musrfit functions at startup." << std::endl; - std::cout << " --debug 2 : dump's the musrfit functions and instrument definition(s) at startup." << std::endl; - std::cout << " --log : writes a log-file '.musrWiz.log' which contains the path-file-name of" << std::endl; - std::cout << " the created msr-file." << std::endl; - std::cout << " --help : shows this help." << std::endl << std::endl; -} - -//------------------------------------------------------------------- -/** - * - */ -int main(int argc, char *argv[]) -{ - int dump = -1; - bool logFile = false; - - if (argc == 2) { - if (!strcmp(argv[1], "--version") || (!strcmp(argv[1], "-v"))) { - std::cout << std::endl << "musrWiz - alpha - git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl; - return 0; - } else if (!strcmp(argv[1], "--help")) { - musrWiz_syntax(); - return 0; - } else if (!strcmp(argv[1], "--log")) { // thought to be used from within musredit only - logFile = true; - } else { - musrWiz_syntax(); - return 0; - } - } else if (argc == 3) { - dump = atoi(argv[2]); - if ((dump < 0) || (dump > 2)) { - musrWiz_syntax(); - return 0; - } - } - - Q_INIT_RESOURCE(musrWiz); - - QApplication app(argc, argv); - - PAdmin *admin = new PAdmin(); - if (!admin->IsValid()) { - delete admin; - return 1; - } - admin->dump(dump); - - PMsrData *info = new PMsrData(); // this content will eventually be set by the xml-handler - - PMusrWiz wizard(admin, info); - wizard.show(); - - app.exec(); - - int result = wizard.result(); - - if (result == 1) { // if everything went fine up to this point - // check if a log-file shall be written - if (logFile) { - std::ofstream fout(".musrWiz.log", std::ofstream::out); - fout << "path-file-name: " << info->getMsrPathName().toLatin1().data() << "/" << info->getMsrFileName().toLatin1().data() << std::endl; - fout.close(); - } - - // check if musrt0 shall be called. If the option --log is set, only add musrt0 flag to in the .musrWiz.log file - if (info->getT0Tag() == T0_FROM_MUSR_T0) { - if (logFile) { - std::ofstream fout(".musrWiz.log", std::ofstream::app); - fout << "musrt0-tag: yes" << std::endl; - fout.close(); - } else { - QProcessEnvironment pe = QProcessEnvironment::systemEnvironment(); - QString musrt0Path = pe.value("MUSRFITPATH", "??"); - if (musrt0Path == "??") { // not found hence try ROOTSYS - musrt0Path = pe.value("ROOTSYS", "??"); - if (musrt0Path != "??") { - musrt0Path += "/bin"; - } - } - - if (musrt0Path != "??") { - QString musrt0 = musrt0Path + "/musrt0"; - QString pathFln = QString("%1/%2").arg(info->getMsrPathName()).arg(info->getMsrFileName()); - QStringList arguments; - arguments << pathFln; - QProcess::startDetached(musrt0, arguments, "./"); - } else { - QMessageBox::warning(0, "WARNING", "Couldn't find musrt0 :-(.\n Only the msr-file has been generated."); - } - } - } - } - - if (info) - delete info; - if (admin) - delete admin; - - return result; -} +#include +#include + +#include +#include +#include +#include + +#include "git-revision.h" +#include "musrWiz.h" +#include "PAdmin.h" +#include "PMusrWiz.h" + +//------------------------------------------------------------------- +/** + * + */ +void PParam::init() +{ + fName = QString("UnDef"); + fNumber = -1; + fValue = 0.0; + fStep = 0.0; + fPosErr = QString("UnDef"); + fBoundLow = QString("UnDef"); + fBoundHigh = QString("UnDef"); +} + +//------------------------------------------------------------------- +/** + * + */ +void musrWiz_syntax() +{ + std::cout << "usage: musrWiz [[--version | -v] | --debug [0|1|2] | --help]" << std::endl << std::endl; + std::cout << " --version | -v : print current git-version." << std::endl; + std::cout << " --debug 0 : dump's the instrument definition(s) at startup." << std::endl; + std::cout << " --debug 1 : dump's the musrfit functions at startup." << std::endl; + std::cout << " --debug 2 : dump's the musrfit functions and instrument definition(s) at startup." << std::endl; + std::cout << " --log : writes a log-file 'musrWiz.log' which contains the path-file-name of" << std::endl; + std::cout << " the created msr-file." << std::endl; + std::cout << " --help : shows this help." << std::endl << std::endl; +} + +//------------------------------------------------------------------- +/** + * + */ +int main(int argc, char *argv[]) +{ + int dump = -1; + bool logFile = false; + + if (argc == 2) { + if (!strcmp(argv[1], "--version") || (!strcmp(argv[1], "-v"))) { + std::cout << std::endl << "musrWiz - alpha - git-branch: " << GIT_BRANCH << ", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl; + return 0; + } else if (!strcmp(argv[1], "--help")) { + musrWiz_syntax(); + return 0; + } else if (!strcmp(argv[1], "--log")) { // thought to be used from within musredit only + logFile = true; + } else { + musrWiz_syntax(); + return 0; + } + } else if (argc == 3) { + dump = atoi(argv[2]); + if ((dump < 0) || (dump > 2)) { + musrWiz_syntax(); + return 0; + } + } + + Q_INIT_RESOURCE(musrWiz); + + QApplication app(argc, argv); + + PAdmin *admin = new PAdmin(); + if (!admin->IsValid()) { + delete admin; + return 1; + } + admin->dump(dump); + + PMsrData *info = new PMsrData(); // this content will eventually be set by the xml-handler + + PMusrWiz wizard(admin, info); + wizard.show(); + + app.exec(); + + int result = wizard.result(); + + if (result == 1) { // if everything went fine up to this point + // check if a log-file shall be written + QProcessEnvironment procEnv = QProcessEnvironment::systemEnvironment(); + QString pathName = procEnv.value("HOME", ""); + pathName += "/.musrfit/musredit/musrWiz.log"; + if (logFile) { + std::ofstream fout(pathName.toLatin1().data(), std::ofstream::out); + fout << "path-file-name: " << info->getMsrPathName().toLatin1().data() << "/" << info->getMsrFileName().toLatin1().data() << std::endl; + fout.close(); + } + + // check if musrt0 shall be called. If the option --log is set, only add musrt0 flag to in the musrWiz.log file + if (info->getT0Tag() == T0_FROM_MUSR_T0) { + if (logFile) { + std::ofstream fout(pathName.toLatin1().data(), std::ofstream::app); + fout << "musrt0-tag: yes" << std::endl; + fout.close(); + } else { + QString musrt0Path = procEnv.value("MUSRFITPATH", "??"); + if (musrt0Path == "??") { // not found hence try ROOTSYS + musrt0Path = procEnv.value("ROOTSYS", "??"); + if (musrt0Path != "??") { + musrt0Path += "/bin"; + } + } + + if (musrt0Path != "??") { + QString musrt0 = musrt0Path + "/musrt0"; + QString pathFln = QString("%1/%2").arg(info->getMsrPathName()).arg(info->getMsrFileName()); + QStringList arguments; + arguments << pathFln; + QProcess::startDetached(musrt0, arguments, "./"); + } else { + QMessageBox::warning(0, "WARNING", "Couldn't find musrt0 :-(.\n Only the msr-file has been generated."); + } + } + } + } + + if (info) + delete info; + if (admin) + delete admin; + + return result; +} diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index 554af6a1..077ad0b4 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -1,3094 +1,3106 @@ -/**************************************************************************** - - PTextEdit.cpp - - Author: Andreas Suter - e-mail: andreas.suter@psi.ch - -*****************************************************************************/ - -/*************************************************************************** - * Copyright (C) 2010-2016 by Andreas Suter * - * andreas.suter@psi.ch * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include -#include -using namespace std; - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "PTextEdit.h" -#include "PHelp.h" -#include "PSubTextEdit.h" -#include "PAdmin.h" -#include "PFindDialog.h" -#include "PReplaceDialog.h" -#include "PReplaceConfirmationDialog.h" -#include "PFitOutputHandler.h" -#include "PDumpOutputHandler.h" -#include "PPrefsDialog.h" -#include "PGetMusrFTOptionsDialog.h" -#include "PMusrEditAbout.h" -#include "PMsr2DataDialog.h" - -//---------------------------------------------------------------------------------------------------- -/** - *

Constructor - * - * \param parent pointer to the parent object - * \param f qt windows flags - */ -PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f ) - : QMainWindow( parent, f ) -{ - getTheme(); - - // reads and manages the conents of the xml-startup (musredit_startup.xml) file - fAdmin = new PAdmin(); - - // enable file system watcher. Needed to get notification if the msr-file is changed outside of musrfit at runtime - fFileSystemWatcherActive = true; - fFileSystemWatcher = new QFileSystemWatcher(); - if (fFileSystemWatcher == 0) { - QMessageBox::information(this, "**ERROR**", "Couldn't invoke QFileSystemWatcher!"); - } else { - connect( fFileSystemWatcher, SIGNAL(fileChanged(const QString&)), this, SLOT(fileChanged(const QString&))); - } - - // initialize stuff - fMusrT0Action = 0; - - fMsr2DataParam = 0; - fFindReplaceData = 0, - - // setup menus - setupFileActions(); - setupEditActions(); - setupTextActions(); - setupMusrActions(); - setupHelpActions(); - - fTabWidget = new QTabWidget( this ); - fTabWidget->setMovable(true); // allows to shuffle around tabs - setCentralWidget( fTabWidget ); - - textFamily(fAdmin->getFontName()); - textSize(QString("%1").arg(fAdmin->getFontSize())); - fFontChanging = false; - - QString iconName(""); - if (fDarkTheme) - iconName = QString(":/icons/musrfit-dark.svg"); - else - iconName = QString(":/icons/musrfit-plain.svg"); - setWindowIcon( QIcon( QPixmap(iconName) ) ); - - // if arguments are give, try to load those files, otherwise create an empty new file - if ( qApp->arguments().size() != 1 ) { - for ( int i = 1; i < qApp->arguments().size(); ++i ) - load( qApp->arguments()[ i ] ); - } else { - fileNew(); - } - - connect( fTabWidget, SIGNAL( currentChanged(int) ), this, SLOT( applyFontSettings(int) )); - - fLastDirInUse = fAdmin->getDefaultSavePath(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

This slot is called if the main application is on the way to quit. This ensures that allocated - * memory indeed can be free'd. - */ -void PTextEdit::aboutToQuit() -{ - if (fAdmin) { - delete fAdmin; - fAdmin = 0; - } - if (fMusrT0Action) { - delete fMusrT0Action; - fMusrT0Action = 0; - } - if (fMsr2DataParam) { - delete fMsr2DataParam; - fMsr2DataParam = 0; - } - if (fFindReplaceData) { - delete fFindReplaceData; - fFindReplaceData = 0; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the file menu and the necessary actions. - */ -void PTextEdit::setupFileActions() -{ - QToolBar *tb = new QToolBar( this ); - tb->setWindowTitle( "File Actions" ); - addToolBar( tb ); - - QMenu *menu = new QMenu( tr( "F&ile" ), this ); - menuBar()->addMenu( menu ); - - QAction *a; - - QString iconName(""); - if (fDarkTheme) - iconName = QString(":/icons/document-new-dark.svg"); - else - iconName = QString(":/icons/document-new-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); - a->setShortcut( tr("Ctrl+N") ); - a->setStatusTip( tr("Create a new msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/document-new-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/document-open-dark.svg"); - else - iconName = QString(":/icons/document-open-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); - a->setShortcut( tr("Ctrl+O") ); - a->setStatusTip( tr("Opens a msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/document-open-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); - } - tb->addAction(a); - - fRecentFilesMenu = menu->addMenu( tr("Recent Files") ); - for (int i=0; isetVisible(false); - connect( fRecentFilesAction[i], SIGNAL(triggered()), this, SLOT(fileOpenRecent())); - fRecentFilesMenu->addAction(fRecentFilesAction[i]); - } - fillRecentFiles(); - - if (fDarkTheme) - iconName = QString(":/icons/view-refresh-dark.svg"); - else - iconName = QString(":/icons/view-refresh-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); - a->setShortcut( tr("F5") ); - a->setStatusTip( tr("Reload msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/view-refresh-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); - } - tb->addAction(a); - - a = new QAction( tr( "Open Prefs..." ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileOpenPrefs() ) ); - menu->addAction(a); - - menu->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/document-save-dark.svg"); - else - iconName = QString(":/icons/document-save-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); - a->setShortcut( tr("Ctrl+S") ); - a->setStatusTip( tr("Save msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/document-save-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); - } - tb->addAction(a); - - a = new QAction( tr( "Save &As..." ), this ); - a->setStatusTip( tr("Save msr-file As") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSaveAs() ) ); - menu->addAction(a); - - a = new QAction( tr( "Save Prefs..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSavePrefs() ) ); - menu->addAction(a); - - menu->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/document-print-dark.svg"); - else - iconName = QString(":/icons/document-print-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); - a->setShortcut( tr("Ctrl+P") ); - a->setStatusTip( tr("Print msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/document-print-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - - a = new QAction( tr( "&Close" ), this ); - a->setShortcut( tr("Ctrl+W") ); - a->setStatusTip( tr("Close msr-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileClose() ) ); - menu->addAction(a); - - a = new QAction( tr( "Close &All" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseAll() ) ); - menu->addAction(a); - - a = new QAction( tr( "Clo&se All Others" ), this ); - a->setShortcut( tr("Ctrl+Shift+W") ); - a->setStatusTip( tr("Close All Other Tabs") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseAllOthers() ) ); - menu->addAction(a); - - menu->addSeparator(); - - a = new QAction( tr( "E&xit" ), this ); - a->setShortcut( tr("Ctrl+Q") ); - a->setStatusTip( tr("Exit Program") ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExit() ) ); - menu->addAction(a); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the edit menu and the necessary actions. - */ -void PTextEdit::setupEditActions() -{ - QToolBar *tb = new QToolBar( this ); - tb->setWindowTitle( "Edit Actions" ); - addToolBar( tb ); - - QMenu *menu = new QMenu( tr( "&Edit" ), this ); - menuBar()->addMenu( menu ); - - QAction *a; - QString iconName(""); - - if (fDarkTheme) - iconName = QString(":/icons/edit-undo-dark.svg"); - else - iconName = QString(":/icons/edit-undo-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); - a->setShortcut( tr("Ctrl+Z") ); - a->setStatusTip( tr("Edit Undo") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-undo-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/edit-redo-dark.svg"); - else - iconName = QString(":/icons/edit-redo-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); - a->setShortcut( tr("Ctrl+Y") ); - a->setStatusTip( tr("Edit Redo") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-redo-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - - a = new QAction( tr( "Select &All" ), this ); - a->setShortcut( tr("Ctrl+A") ); - a->setStatusTip( tr("Edit Select All") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editSelectAll() ) ); - menu->addAction(a); - - menu->addSeparator(); - tb->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/edit-copy-dark.svg"); - else - iconName = QString(":/icons/edit-copy-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); - a->setShortcut( tr("Ctrl+C") ); - a->setStatusTip( tr("Edit Copy") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-copy-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/edit-cut-dark.svg"); - else - iconName = QString(":/icons/edit-cut-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); - a->setShortcut( tr("Ctrl+X") ); - a->setStatusTip( tr("Edit Cut") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-cut-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/edit-paste-dark.svg"); - else - iconName = QString(":/icons/edit-paste-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); - a->setShortcut( tr("Ctrl+V") ); - a->setStatusTip( tr("Edit Paste") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-paste-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - tb->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/edit-find-dark.svg"); - else - iconName = QString(":/icons/edit-find-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); - a->setShortcut( tr("Ctrl+F") ); - a->setStatusTip( tr("Edit Find") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/edit-find-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/go-next-use-dark.svg"); - else - iconName = QString(":/icons/go-next-use-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); - a->setShortcut( tr("F3") ); - a->setStatusTip( tr("Edit Find Next") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/go-next-use-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/go-previous-use-dark.svg"); - else - iconName = QString(":/icons/go-previous-use-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ) , tr( "Find Pre&vious" ), this ); - a->setShortcut( tr("Shift+F4") ); - a->setStatusTip( tr("Edit Find Previous") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/go-previous-use-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find Pre&vious" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); - } - tb->addAction(a); - - a = new QAction( tr( "Replace..." ), this ); - a->setShortcut( tr("Ctrl+R") ); - a->setStatusTip( tr("Edit Replace") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindAndReplace() ) ); - menu->addAction(a); - menu->addSeparator(); - - QMenu *addSubMenu = new QMenu( tr ("Add Block"), this); - - a = new QAction( tr("Title Block"), this ); - a->setStatusTip( tr("Invokes MSR Title Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertTitle() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Parameter Block"), this ); - a->setStatusTip( tr("Invokes MSR Parameter Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertParameterBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Theory Block"), this ); - a->setStatusTip( tr("Invokes MSR Theory Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertTheoryBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Function Block"), this ); - a->setStatusTip( tr("Invokes MSR Function Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertFunctionBlock() )); - addSubMenu->addAction(a); - - // feed the theoryFunctions popup menu - QMenu *theoryFunctions = new QMenu( tr("Add Theory Function"), this ); - for (unsigned int i=0; igetTheoryCounts(); i++) { - PTheory *theoryItem = fAdmin->getTheoryItem(i); - a = new QAction( theoryItem->label, this); - theoryFunctions->addAction(a); - } - connect( theoryFunctions, SIGNAL( triggered(QAction*)), this, SLOT( insertTheoryFunction(QAction*) ) ); - - a = new QAction( tr("Asymmetry Run Block"), this ); - a->setStatusTip( tr("Invokes MSR Asymmetry Run Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertAsymRunBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Single Histo Run Block"), this ); - a->setStatusTip( tr("Invokes MSR Single Histo Run Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertSingleHistRunBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("NonMuSR Run Block"), this ); - a->setStatusTip( tr("Invokes MSR NonMuSR Run Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertNonMusrRunBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Command Block"), this ); - a->setStatusTip( tr("Invokes MSR Command Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertCommandBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Fourier Block"), this ); - a->setStatusTip( tr("Invokes MSR Fourier Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertFourierBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Plot Block"), this ); - a->setStatusTip( tr("Invokes MSR Plot Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertPlotBlock() )); - addSubMenu->addAction(a); - - a = new QAction( tr("Statistic Block"), this ); - a->setStatusTip( tr("Invokes MSR Statistic Block Dialog") ); - connect( a, SIGNAL( triggered() ), this, SLOT( insertStatisticBlock() )); - addSubMenu->addAction(a); - - menu->addMenu(addSubMenu); - menu->addMenu(theoryFunctions); - menu->addSeparator(); - - a = new QAction( tr( "Co&mment" ), this ); - a->setShortcut( tr("Ctrl+M") ); - a->setStatusTip( tr("Edit Comment Selected Lines") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editComment() ) ); - menu->addAction(a); - - a = new QAction( tr( "Unco&mment" ), this ); - a->setShortcut( tr("Ctrl+Shift+M") ); - a->setStatusTip( tr("Edit Uncomment Selected Lines") ); - connect( a, SIGNAL( triggered() ), this, SLOT( editUncomment() ) ); - menu->addAction(a); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the font/font size menu. - */ -void PTextEdit::setupTextActions() -{ - QToolBar *tb = new QToolBar( this ); - tb->setWindowTitle( "Format Actions" ); - addToolBar( tb ); - - fComboFont = new QComboBox(); - fComboFont->setEditable(true); - QFontDatabase db; - fComboFont->addItems( db.families() ); - connect( fComboFont, SIGNAL( activated( const QString & ) ), - this, SLOT( textFamily( const QString & ) ) ); - QLineEdit *edit = fComboFont->lineEdit(); - if (edit == 0) { - return; - } - edit->setText( fAdmin->getFontName() ); - tb->addWidget(fComboFont); - - fComboSize = new QComboBox( tb ); - fComboSize->setEditable(true); - QList sizes = db.standardSizes(); - QList::Iterator it = sizes.begin(); - for ( ; it != sizes.end(); ++it ) - fComboSize->addItem( QString::number( *it ) ); - connect( fComboSize, SIGNAL( activated( const QString & ) ), - this, SLOT( textSize( const QString & ) ) ); - edit = fComboSize->lineEdit(); - if (edit == 0) { - return; - } - edit->setText( QString("%1").arg(fAdmin->getFontSize()) ); - tb->addWidget(fComboSize); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the musrfit menu and the necessary actions. - */ -void PTextEdit::setupMusrActions() -{ - addToolBarBreak(); - - QToolBar *tb = new QToolBar( this ); - tb->setWindowTitle( "Musr Actions" ); - addToolBar( tb ); - - QMenu *menu = new QMenu( tr( "&MusrFit" ), this ); - menuBar()->addMenu( menu ); - - QAction *a; - QString iconName(""); - if (fDarkTheme) - iconName = QString(":/icons/musrWiz-32x32-dark.svg"); - else - iconName = QString(":/icons/musrWiz-32x32.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); - a->setShortcut( tr("Alt+W") ); - a->setStatusTip( tr("Call musrWiz which helps to create msr-files") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrWiz-32x32.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - tb->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/musrchisq-dark.svg"); - else - iconName = QString(":/icons/musrchisq-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); - a->setShortcut( tr("Alt+C") ); - a->setStatusTip( tr("Calculate Chi Square (Log Max Likelihood)") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrchisq-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/musrfit-dark.svg"); - else - iconName = QString(":/icons/musrfit-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); - a->setShortcut( tr("Alt+F") ); - a->setStatusTip( tr("Fit") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrfit-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/musrswap-dark.svg"); - else - iconName = QString(":/icons/musrswap-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); - a->setShortcut( tr("Alt+S") ); - a->setStatusTip( tr("Swap msr-file <-> mlog-file") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrswap-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/musrStep-32x32-dark.svg"); - else - iconName = QString(":/icons/musrStep-32x32.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); - a->setShortcut( tr("Alt+P") ); - a->setStatusTip( tr("Set Steps") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrStep-32x32.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/msr2data-dark.svg"); - else - iconName = QString(":/icons/msr2data-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); - a->setShortcut( tr("Alt+M") ); - a->setStatusTip( tr("Start msr2data interface") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/msr2data-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - tb->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/musrview-dark.svg"); - else - iconName = QString(":/icons/musrview-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); - a->setShortcut( tr("Alt+V") ); - a->setStatusTip( tr("Start musrview") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrview-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/musrt0-dark.svg"); - else - iconName = QString(":/icons/musrt0-plain.svg"); - fMusrT0Action = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); - fMusrT0Action->setStatusTip( tr("Start musrt0") ); - connect( fMusrT0Action, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); - menu->addAction(fMusrT0Action); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrt0-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); - } - tb->addAction(a); - fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); - - if (fDarkTheme) - iconName = QString(":/icons/musrFT-dark.svg"); - else - iconName = QString(":/icons/musrFT-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); - a->setStatusTip( tr("Start musrFT") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrFT-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); - } - tb->addAction(a); - - if (fDarkTheme) - iconName = QString(":/icons/musrprefs-dark.svg"); - else - iconName = QString(":/icons/musrprefs-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); - a->setStatusTip( tr("Show Preferences") ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrprefs-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); - } - tb->addAction(a); - - menu->addSeparator(); - tb->addSeparator(); - - if (fDarkTheme) - iconName = QString(":/icons/musrdump-dark.svg"); - else - iconName = QString(":/icons/musrdump-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName)), tr( "&Dump Header"), this); - a->setStatusTip( tr("Dumps muSR File Header Information") ); - connect( a, SIGNAL(triggered()), this, SLOT(musrDump())); - menu->addAction(a); - if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) - iconName = QString(":/icons/musrdump-plain.svg"); - a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Dump Header" ), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( musrDump() ) ); - } - tb->addAction(a); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the help menu and the necessary actions. - */ -void PTextEdit::setupHelpActions() -{ - QMenu *menu = new QMenu( tr( "&Help" ), this ); - menuBar()->addMenu( menu); - - QAction *a; - a = new QAction(tr( "Contents ..." ), this ); - a->setStatusTip( tr("Help Contents") ); - connect( a, SIGNAL( triggered() ), this, SLOT( helpContents() )); - menu->addAction(a); - - a = new QAction(tr( "About ..." ), this ); - a->setStatusTip( tr("Help About") ); - connect( a, SIGNAL( triggered() ), this, SLOT( helpAbout() )); - menu->addAction(a); - - a = new QAction(tr( "About Qt..." ), this ); - a->setStatusTip( tr("Help About Qt") ); - connect( a, SIGNAL( triggered() ), this, SLOT( helpAboutQt() )); - menu->addAction(a); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

load an msr-file. - * - * \param f filename - * \param index if == -1, add the file as a new tab, otherwise, replace the contents of the tab at index. - */ -void PTextEdit::load( const QString &f, const int index ) -{ - // check if the file exists - if ( !QFile::exists( f ) ) - return; - - // create a new text edit object - PSubTextEdit *edit = new PSubTextEdit( fAdmin ); - edit->setFont(QFont(fAdmin->getFontName(), fAdmin->getFontSize())); - - // place the text edit object at the appropriate tab position - if (index == -1) - fTabWidget->addTab( edit, QFileInfo( f ).fileName() ); - else - fTabWidget->insertTab( index, edit, QFileInfo( f ).fileName() ); - QFile file( f ); - if ( !file.open( QIODevice::ReadOnly ) ) - return; - - // add file name to recent file names - fAdmin->addRecentFile(f); // keep it in admin - fillRecentFiles(); // update menu - - // add the msr-file to the file system watchersssss - fFileSystemWatcher->addPath(f); - - // read the file - QTextStream ts( &file ); - QString txt = ts.readAll(); - edit->setPlainText( txt ); - doConnections( edit ); // add all necessary signal/slot connections - - // set the tab widget to the current tab - fTabWidget->setCurrentIndex(fTabWidget->indexOf(edit)); - edit->viewport()->setFocus(); - - // update the filename mapper - fFilenames.remove( edit ); - fFilenames.insert( edit, f ); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

returns the currently tab selected textedit object. - */ -PSubTextEdit *PTextEdit::currentEditor() const -{ - if ( fTabWidget->currentWidget() ) { - if (fTabWidget->currentWidget()->inherits( "PSubTextEdit" )) { - return (PSubTextEdit*)fTabWidget->currentWidget(); - } - } - - return 0; -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Setup the necessray signal/slot connections for the textedit object. - * - * \param e textedit object - */ -void PTextEdit::doConnections( PSubTextEdit *e ) -{ -// connect( e, SIGNAL( currentFontChanged( const QFont & ) ), -// this, SLOT( fontChanged( const QFont & ) ) ); - - connect( e, SIGNAL( textChanged() ), this, SLOT( textChanged() )); - - connect( e, SIGNAL( cursorPositionChanged() ), this, SLOT( currentCursorPosition() )); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file title. See also https://intranet.psi.ch/MUSR/MusrFit#4_1_The_Title - */ -void PTextEdit::insertTitle() -{ - currentEditor()->insertTitle(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file fit-parameter block. See also https://intranet.psi.ch/MUSR/MusrFit#4_2_The_FITPARAMETER_Block - */ -void PTextEdit::insertParameterBlock() -{ - currentEditor()->insertParameterBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file theory block. See also https://intranet.psi.ch/MUSR/MusrFit#4_3_The_THEORY_Block - */ -void PTextEdit::insertTheoryBlock() -{ - currentEditor()->insertTheoryBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Insert a selected theory function. See also https://intranet.psi.ch/MUSR/MusrFit#4_3_The_THEORY_Block - * - * \param a action of the selected theory function - */ -void PTextEdit::insertTheoryFunction(QAction *a) -{ - currentEditor()->insertTheoryFunction(a->text()); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file function block. See also https://intranet.psi.ch/MUSR/MusrFit#4_4_The_FUNCTIONS_Block - */ -void PTextEdit::insertFunctionBlock() -{ - currentEditor()->insertFunctionBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file asymmetry run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block - */ -void PTextEdit::insertAsymRunBlock() -{ - currentEditor()->insertAsymRunBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file single histogram run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block - */ -void PTextEdit::insertSingleHistRunBlock() -{ - currentEditor()->insertSingleHistRunBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file nonMusr run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block - */ -void PTextEdit::insertNonMusrRunBlock() -{ - currentEditor()->insertNonMusrRunBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Inserts a default command block. See also https://intranet.psi.ch/MUSR/MusrFit#4_6_The_COMMANDS_Block - */ -void PTextEdit::insertCommandBlock() -{ - currentEditor()->insertCommandBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file Fourier block. See also https://intranet.psi.ch/MUSR/MusrFit#4_7_The_FOURIER_Block - */ -void PTextEdit::insertFourierBlock() -{ - currentEditor()->insertFourierBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Start the dialog to enter a msr-file plot block. See also https://intranet.psi.ch/MUSR/MusrFit#4_7_The_PLOT_Block - */ -void PTextEdit::insertPlotBlock() -{ - currentEditor()->insertPlotBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Inserts a default statistics block. See also https://intranet.psi.ch/MUSR/MusrFit#4_9_The_STATISTIC_Block - */ -void PTextEdit::insertStatisticBlock() -{ - currentEditor()->insertStatisticBlock(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: called when File/New is selected. Will generate an empty tab-textedit field in musredit. - */ -void PTextEdit::fileNew() -{ - PSubTextEdit *edit = new PSubTextEdit( fAdmin ); - edit->setFont(QFont(fAdmin->getFontName(), fAdmin->getFontSize())); - doConnections( edit ); - fTabWidget->addTab( edit, tr( "noname" ) ); - fTabWidget->setCurrentIndex(fTabWidget->indexOf(edit)); - fFilenames.insert(edit, tr("noname")); - edit->viewport()->setFocus(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: called when File/Open is selected. Will open an msr-/mlog-file. It checks if the file is - * already open, and if so will just select the current tab. If you want to reload the file use the - * fileReload() slot. - */ -void PTextEdit::fileOpen() -{ - QStringList flns = QFileDialog::getOpenFileNames( this, tr("Open msr-/mlog-File"), - fLastDirInUse, - tr( "msr-Files (*.msr);;msr-Files (*.msr *.mlog);;All Files (*)" )); - - QStringList::Iterator it = flns.begin(); - QFileInfo finfo1, finfo2; - QString tabFln; - bool alreadyOpen = false; - - // if flns are present, keep the corresponding directory - if (flns.size() > 0) { - finfo1.setFile(flns.at(0)); - fLastDirInUse = finfo1.absoluteFilePath(); - } - - while( it != flns.end() ) { - // check if the file is not already open - finfo1.setFile(*it); - for (int i=0; icount(); i++) { - tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); - finfo2.setFile(tabFln); - if (finfo1.absoluteFilePath() == finfo2.absoluteFilePath()) { - alreadyOpen = true; - fTabWidget->setCurrentIndex(i); - break; - } - } - - if (!alreadyOpen) - load(*it); - else - fileReload(); - - ++it; - } - - // in case there is a 1st empty tab "noname", remove it - QString tabStr = fTabWidget->tabText(0); - tabStr.remove('&'); // this is needed since the QTabWidget adds short-cut info as '&' to the tab name - if (tabStr == "noname") { // has to be the first, otherwise do nothing - fFileSystemWatcher->removePath("noname"); - - delete fTabWidget->widget(0); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

This slot will open the file from the recent file list. If already open, it will reload it. - */ -void PTextEdit::fileOpenRecent() -{ - QAction *action = qobject_cast(sender()); - - if (action) { - // check if this file is already open and if so, switch the tab - QFileInfo finfo1, finfo2; - QString tabFln; - bool alreadyOpen = false; - QString fln = action->text(); - fln.remove('&'); - finfo1.setFile(fln); - - for (int i=0; icount(); i++) { - tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); - finfo2.setFile(tabFln); - if (finfo1.absoluteFilePath() == finfo2.absoluteFilePath()) { - alreadyOpen = true; - fTabWidget->setCurrentIndex(i); - break; - } - } - - if (!alreadyOpen) { - // make sure the file exists - if (!finfo1.exists()) { - QMessageBox::critical(this, "ERROR", QString("File '%1' does not exist.\nWill not do anything.").arg(fln)); - return; - } - load(fln); - } else { - fileReload(); - } - - // in case there is a 1st empty tab "noname", remove it - fln = fTabWidget->tabText(0); - fln.remove("&"); - if (fln == "noname") { // has to be the first, otherwise do nothing - fFileSystemWatcher->removePath("noname"); - - delete fTabWidget->widget(0); - } - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will reload the currently selected msr-file. - */ -void PTextEdit::fileReload() -{ - if ( fFilenames.find( currentEditor() ) == fFilenames.end() ) { - QMessageBox::critical(this, "**ERROR**", "Cannot reload a file not previously saved ;-)"); - } else { - int index = fTabWidget->currentIndex(); - QString fln = *fFilenames.find( currentEditor() ); - fileClose(false); - load(fln, index); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will save the currently selected file. - */ -void PTextEdit::fileOpenPrefs() -{ - QString fln(""); - QString msg(""); - QMessageBox msgBox; - msgBox.setText("Which Preferences do you want to open?"); - msgBox.addButton("Default", QMessageBox::AcceptRole); - msgBox.addButton("Custom", QMessageBox::AcceptRole); - msgBox.setStandardButtons(QMessageBox::Cancel); - int result = msgBox.exec(); - if (result == QMessageBox::Cancel) { - return; - } else if (result == 0) { // default dir - fln = fAdmin->getDefaultPrefPathName(); - msg = QString("Current Default Preferences Path-Name:\n") + fln; - if (QMessageBox::information(this, "Info", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) - return; - } else if (result == 1) { // custom dir - fln = QFileDialog::getOpenFileName( this, tr("Open Prefs"), - fLastDirInUse, - tr( "xml-Files (*.xml);; All Files (*)" )); - } - - if (fAdmin->loadPrefs(fln)) { - msg = QString("Prefs from '") + fln + QString("' loaded."); - QMessageBox::information(0, "Info", msg); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will save the currently selected file. - */ -void PTextEdit::fileSave() -{ - if ( !currentEditor() ) - return; - - fFileSystemWatcherActive = false; - - if ( *fFilenames.find( currentEditor() ) == QString("noname") ) { - fileSaveAs(); - } else { - QFile file( *fFilenames.find( currentEditor() ) ); - if ( !file.open( QIODevice::WriteOnly ) ) - return; - QTextStream ts( &file ); - ts << currentEditor()->toPlainText(); - - // remove trailing '*' modification indicators - QString fln = *fFilenames.find( currentEditor() ); - fTabWidget->setTabText(fTabWidget->indexOf( currentEditor() ), QFileInfo(fln).fileName()); - } - - fileSystemWatcherActivation(); // delayed activation of fFileSystemWatcherActive -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will open a file selector dialog to obtain a file name, and then save the file under the newly - * selected file name. - */ -void PTextEdit::fileSaveAs() -{ - if ( !currentEditor() ) - return; - - fFileSystemWatcherActive = false; - - QString fn = QFileDialog::getSaveFileName( this, - tr( "Save msr-/mlog-file As" ), *fFilenames.find( currentEditor() ), - tr( "msr-Files (*.msr *.mlog);;All Files (*)" ) ); - if ( !fn.isEmpty() ) { - fFilenames.remove( currentEditor() ); - fFilenames.insert( currentEditor(), fn ); - fileSave(); - fTabWidget->setTabText(fTabWidget->indexOf( currentEditor() ), QFileInfo(fn).fileName()); - } - - fileSystemWatcherActivation(); // delayed activation of fFileSystemWatcherActive -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will save the current preferences. - */ -void PTextEdit::fileSavePrefs() -{ - QString fln(""); - QString msg(""); - QMessageBox msgBox; - msgBox.setText("Which Preferences do you want to open?"); - msgBox.addButton("Default", QMessageBox::AcceptRole); - msgBox.addButton("Custom", QMessageBox::AcceptRole); - msgBox.setStandardButtons(QMessageBox::Cancel); - int result = msgBox.exec(); - if (result == QMessageBox::Cancel) { - return; - } else if (result == 0) { // default dir - fln = fAdmin->getDefaultPrefPathName(); - msg = QString("Current Default Preferences Path-Name:\n") + fln; - if (QMessageBox::information(this, "Info", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) - return; - } else if (result == 1) { // custom dir - fln = QFileDialog::getSaveFileName( this, - tr( "Save Prefs As" ), "musredit_startup.xml", - tr( "xml-Files (*.xml);;All Files (*)" ) ); - } - - if ( !fln.isEmpty() ) { - fAdmin->savePrefs(fln); - msg = QString("Prefs to '") + fln + QString("' saved."); - QMessageBox::information(0, "Info", msg); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will call a print dialog and print the msr-file. - */ -void PTextEdit::filePrint() -{ - if ( !currentEditor() ) - return; -#ifndef QT_NO_PRINTER - QPrinter printer( QPrinter::HighResolution ); - printer.setFullPage(true); - QPrintDialog dialog(&printer, this); - if (dialog.exec()) { // printer dialog - statusBar()->showMessage( "Printing..." ); - - QPainter p( &printer ); - // Check that there is a valid device to print to. - if ( !p.device() ) - return; - - QFont font( currentEditor()->QWidget::font() ); - font.setPointSize( 10 ); // we define 10pt to be a nice base size for printing - p.setFont( font ); - - int yPos = 0; // y-position for each line - QFontMetrics fm = p.fontMetrics(); - int dpiy = printer.logicalDpiY(); - int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins - - // print msr-file - QString fln = *fFilenames.find(currentEditor()); - QString header1(fln); - QFileInfo flnInfo(fln); - QString header2 = QString("last modified: ") + flnInfo.lastModified().toString("dd.MM.yyyy - hh:mm:ss"); - QString line("-------------------------------------"); - QStringList strList = currentEditor()->toPlainText().split("\n"); - for (QStringList::Iterator it = strList.begin(); it != strList.end(); ++it) { - // new page needed? - if ( margin + yPos > printer.height() - margin ) { - printer.newPage(); // no more room on this page - yPos = 0; // back to top of page - } - - if (yPos == 0) { // print header - font.setPointSize( 8 ); - p.setFont( font ); - - p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), - Qt::TextExpandTabs | Qt::TextDontClip, header1); - yPos += fm.lineSpacing(); - p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), - Qt::TextExpandTabs | Qt::TextDontClip, header2); - yPos += fm.lineSpacing(); - p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), - Qt::TextExpandTabs | Qt::TextDontClip, line); - yPos += 1.5*fm.lineSpacing(); - - font.setPointSize( 10 ); - p.setFont( font ); - } - - // print data - p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), - Qt::TextExpandTabs | Qt::TextDontClip, *it); - yPos += fm.lineSpacing(); - } - - p.end(); - } -#endif -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will remove a textedit tab from musredit. Depending on check it will done with or without checking - * if the file has been saved before. - * - * \param check if set to true, a warning dialog will popup if the file is not saved yet. - */ -void PTextEdit::fileClose(const bool check) -{ - // check if the has modification - int idx = fTabWidget->currentIndex(); - if ((fTabWidget->tabText(idx).indexOf("*")>0) && check) { - int result = QMessageBox::warning(this, "**WARNING**", - "Do you really want to close this file.\nChanges will be lost", - "Close", "Cancel"); - if (result == 1) // Cancel - return; - } - - QString str = *fFilenames.find(currentEditor()); - fFileSystemWatcher->removePath(str); - - delete currentEditor(); - - if ( currentEditor() ) - currentEditor()->viewport()->setFocus(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Removes all textedit tabs from musredit. It checks if the files haven't been saved, and if so it will - * popup a warning dialog. - */ -void PTextEdit::fileCloseAll() -{ - // check if any editor tab is present, if not: get out of here - if ( !currentEditor() ) - return; - - // check if there are any unsaved tabs - for (int i=0; icount(); i++) { - if (fTabWidget->tabText(i).indexOf("*") > 0) { - int result = QMessageBox::warning(this, "**WARNING**", - "Do you really want to close all files.\nChanges of unsaved files will be lost", - "Close", "Cancel"); - if (result == 1) // Cancel - return; - break; - } - } - - // close all editor tabs - QString str; - do { - // remove file from file system watcher - str = *fFilenames.find(currentEditor()); - fFileSystemWatcher->removePath(str); - - delete currentEditor(); - - if ( currentEditor() ) - currentEditor()->viewport()->setFocus(); - } while ( currentEditor() ); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will close all textedit tabs but the selected one. It checks if the files haven't been saved, and if so it will - * popup a warning dialog. - */ -void PTextEdit::fileCloseAllOthers() -{ - // check if any editor tab is present, if not: get out of here - if ( !currentEditor() ) - return; - - // check if there are any unsaved tabs - for (int i=0; icount(); i++) { - if (fTabWidget->tabText(i).indexOf("*") > 0) { - int result = QMessageBox::warning(this, "**WARNING**", - "Do you really want to close all files.\nChanges of unsaved files will be lost", - "Close", "Cancel"); - if (result == 1) // Cancel - return; - break; - } - } - - // keep label of the current editor - QString label = fTabWidget->tabText(fTabWidget->currentIndex()); - - // check if only the current editor is present. If yes: nothing to be done - if (fTabWidget->count() == 1) - return; - - // close all editor tabs - int i=0; - QString str; - do { - if (fTabWidget->tabText(i) != label) { - // remove file from file system watcher - str = *fFilenames.find(dynamic_cast(fTabWidget->widget(i))); - fFileSystemWatcher->removePath(str); - - delete fTabWidget->widget(i); - } else { - i++; - } - } while ( fTabWidget->count() > 1 ); - - currentEditor()->viewport()->setFocus(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Will quit musredit. - */ -void PTextEdit::fileExit() -{ - // check if there are still some modified files open - for (int i=0; i < fTabWidget->count(); i++) { - if (fTabWidget->tabText(i).indexOf("*") > 0) { - int result = QMessageBox::warning(this, "**WARNING**", - "Do you really want to exit from the applcation.\nChanges will be lost", - "Exit", "Cancel"); - if (result == 1) // Cancel - return; - break; - } - } - - qApp->quit(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Text undo of the current textedit tab. - */ -void PTextEdit::editUndo() -{ - if ( !currentEditor() ) - return; - currentEditor()->undo(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Text redo of the current textedit tab - */ -void PTextEdit::editRedo() -{ - if ( !currentEditor() ) - return; - currentEditor()->redo(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Select all text of the current textedit tab. - */ -void PTextEdit::editSelectAll() -{ - if ( !currentEditor() ) - return; - currentEditor()->selectAll(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Cut the selection of the current textedit tab. - */ -void PTextEdit::editCut() -{ - if ( !currentEditor() ) - return; - currentEditor()->cut(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Copy the selection of the current textedit tab. - */ -void PTextEdit::editCopy() -{ - if ( !currentEditor() ) - return; - currentEditor()->copy(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Paste at the cursor position of the current textedit tab. - */ -void PTextEdit::editPaste() -{ - if ( !currentEditor() ) - return; - currentEditor()->paste(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts a find dialog, and searches for a find string. - */ -void PTextEdit::editFind() -{ - if ( !currentEditor() ) - return; - - // check if first time called, and if yes create find and replace data structure - if (fFindReplaceData == 0) { - fFindReplaceData = new PFindReplaceData(); - fFindReplaceData->findText = QString(""); - fFindReplaceData->replaceText = QString(""); - fFindReplaceData->caseSensitive = true; - fFindReplaceData->wholeWordsOnly = false; - fFindReplaceData->fromCursor = true; - fFindReplaceData->findBackwards = false; - fFindReplaceData->selectedText = false; - fFindReplaceData->promptOnReplace = true; - } - - if (fFindReplaceData == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find data structure, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - PFindDialog *dlg = new PFindDialog(fFindReplaceData, currentEditor()->textCursor().hasSelection()); - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - dlg->exec(); - - if (dlg->result() != QDialog::Accepted) { - delete dlg; - return; - } - - fFindReplaceData = dlg->getData(); - - delete dlg; - dlg = 0; - - // try to find the search text - if (!fFindReplaceData->fromCursor) - currentEditor()->textCursor().setPosition(0); - - QTextDocument::FindFlags flags = 0; - if (fFindReplaceData->caseSensitive) - flags |= QTextDocument::FindCaseSensitively; - else if (fFindReplaceData->findBackwards) - flags |= QTextDocument::FindBackward; - else if (fFindReplaceData->wholeWordsOnly) - flags |= QTextDocument::FindWholeWords; - - currentEditor()->find(fFindReplaceData->findText, flags); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Searches for a find string in the forward direction. - */ -void PTextEdit::editFindNext() -{ - QTextDocument::FindFlags flags = 0; - if (fFindReplaceData->caseSensitive) - flags |= QTextDocument::FindCaseSensitively; - else if (fFindReplaceData->wholeWordsOnly) - flags |= QTextDocument::FindWholeWords; - - currentEditor()->find(fFindReplaceData->findText, flags); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Searches for a find string in the backward direction. - */ -void PTextEdit::editFindPrevious() -{ - QTextDocument::FindFlags flags = 0; - if (fFindReplaceData->caseSensitive) - flags |= QTextDocument::FindCaseSensitively; - else if (fFindReplaceData->wholeWordsOnly) - flags |= QTextDocument::FindWholeWords; - - flags |= QTextDocument::FindBackward; - - currentEditor()->find(fFindReplaceData->findText, flags); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts a find/replace dialog, and searches for a find string and replaces it depending of the replace options. - */ -void PTextEdit::editFindAndReplace() -{ - if ( !currentEditor() ) - return; - - // check if first time called, and if yes create find and replace data structure - if (fFindReplaceData == 0) { - fFindReplaceData = new PFindReplaceData(); - fFindReplaceData->findText = QString(""); - fFindReplaceData->replaceText = QString(""); - fFindReplaceData->caseSensitive = true; - fFindReplaceData->wholeWordsOnly = false; - fFindReplaceData->fromCursor = true; - fFindReplaceData->findBackwards = false; - fFindReplaceData->selectedText = false; - fFindReplaceData->promptOnReplace = true; - } - - if (fFindReplaceData == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find&replace data structure, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - PReplaceDialog *dlg = new PReplaceDialog(fFindReplaceData, currentEditor()->textCursor().hasSelection()); - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find&replace dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - dlg->exec(); - - if (dlg->result() != QDialog::Accepted) { - delete dlg; - return; - } - - fFindReplaceData = dlg->getData(); - - delete dlg; - dlg = 0; - - if (fFindReplaceData->promptOnReplace) { - editFindNext(); - - PReplaceConfirmationDialog confirmDlg(this); - - // connect all the necessary signals/slots - QObject::connect(confirmDlg.fReplace_pushButton, SIGNAL(clicked()), this, SLOT(replace())); - QObject::connect(confirmDlg.fReplaceAndClose_pushButton, SIGNAL(clicked()), this, SLOT(replaceAndClose())); - QObject::connect(confirmDlg.fReplaceAll_pushButton, SIGNAL(clicked()), this, SLOT(replaceAll())); - QObject::connect(confirmDlg.fFindNext_pushButton, SIGNAL(clicked()), this, SLOT(editFindNext())); - QObject::connect(this, SIGNAL(close()), &confirmDlg, SLOT(accept())); - - confirmDlg.exec(); - } else { - replaceAll(); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Comment a selection, i.e. add a '#' character in front of each line of the selection. - * (Multiple selections not yet supported). - */ -void PTextEdit::editComment() -{ - if ( !currentEditor() ) - return; - - - QTextCursor curs = currentEditor()->textCursor(); - - if (curs.hasComplexSelection()) { // multiple selections - // multiple selections (STILL MISSING) - } else if (curs.hasSelection()) { // simple selection - int pos = curs.position(); - int secStart = curs.selectionStart(); // keep start position of the selection - int secEnd = curs.selectionEnd(); // keep end position of the selection - curs.clearSelection(); - curs.setPosition(secStart); // set the anchor to the start of the selection - curs.movePosition(QTextCursor::StartOfBlock); - do { - curs.insertText("#"); - } while (curs.movePosition(QTextCursor::NextBlock) && (curs.position() <= secEnd)); - curs.setPosition(pos+1); - } else { // no selection - int pos = curs.position(); - curs.clearSelection(); - curs.movePosition(QTextCursor::StartOfLine); - curs.insertText("#"); - curs.setPosition(pos+1); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Uncomment a selection, i.e. remove a '#' character in front of each line of the selection. - * (Multiple selections not yet supported). - */ -void PTextEdit::editUncomment() -{ - if ( !currentEditor() ) - return; - - - QTextCursor curs = currentEditor()->textCursor(); - - if (curs.hasComplexSelection()) { - // multiple selections (STILL MISSING) - } else if (curs.hasSelection()) { - int pos = curs.position(); - int secStart = curs.selectionStart(); // keep start position of the selection - int secEnd = curs.selectionEnd(); // keep end position of the selection - curs.clearSelection(); - curs.setPosition(secStart); // set the anchor to the start of the selection - curs.movePosition(QTextCursor::StartOfBlock); - while (curs.position() < secEnd) { - QString line = curs.block().text(); - if (line.startsWith("#")) { - line.remove(0, 1); - curs.select(QTextCursor::BlockUnderCursor); - curs.removeSelectedText(); - curs.insertText("\n"+line); - pos -= 1; - } - curs.movePosition(QTextCursor::NextBlock); - } - curs.setPosition(pos); - currentEditor()->setTextCursor(curs); // needed to update document cursor - } else { // no selection - int pos = curs.position(); - curs.clearSelection(); - curs.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); - QString line = curs.block().text(); - if (line.startsWith("#")) { - line.remove(0, 1); - curs.select(QTextCursor::BlockUnderCursor); - curs.removeSelectedText(); - if (currentEditor()->textCursor().columnNumber() == 0) - curs.insertText(line); - else - curs.insertText("\n"+line); - pos -= 1; - } - curs.setPosition(pos); - currentEditor()->setTextCursor(curs); // needed to update document cursor - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Chances the font. - * - * \param f font name - */ -void PTextEdit::textFamily( const QString &f ) -{ - fAdmin->setFontName(f); - - if ( !currentEditor() ) - return; - - currentEditor()->setFont(QFont(f,fAdmin->getFontSize())); - currentEditor()->viewport()->setFocus(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Chances the font size. - * - * \param p font size in points. - */ -void PTextEdit::textSize( const QString &p ) -{ - fAdmin->setFontSize(p.toInt()); - - if ( !currentEditor() ) - return; - - currentEditor()->setFont(QFont(fAdmin->getFontName(), p.toInt())); - currentEditor()->viewport()->setFocus(); -} - -//---------------------------------------------------------------------------------------------------- -/** - * @brief PTextEdit::musrWiz - */ -void PTextEdit::musrWiz() -{ - QString cmd = fAdmin->getExecPath() + "/musrWiz"; -#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) - cmd = QString("/Applications/musrWiz.app/Contents/MacOS/musrWiz"); -#endif - QString workDir = "./"; // think about it!! - QStringList arg; - arg << "--log"; - - QProcess *proc = new QProcess(this); - if (proc == nullptr) { - QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); - return; - } - - // handle return status of musrWiz - connect(proc, static_cast(&QProcess::finished), - [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrWiz(exitCode, exitStatus); }); - - // make sure that the system environment variables are properly set - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( 0, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

calls musrfit --chisq-only . - */ -void PTextEdit::musrCalcChisq() -{ - if ( !currentEditor() ) - return; - - int result = 0; - int fittype = currentEditor()->getFitType(); - if (fAdmin->getEstimateN0Flag() && ((fittype==0) || (fittype==4))) - result = QMessageBox::question(this, "Estimate N0 active", - "Do you wish a chisq/mlh evaluation with an automatic N0 estimate?"); - - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - if (tabLabel == "noname") { - QMessageBox::critical(this, "**ERROR**", "For a fit a real msr-file is needed."); - return; - } else if (tabLabel == "noname*") { - fileSaveAs(); - } else if (tabLabel.indexOf("*") > 0) { - fileSave(); - } - - QVector cmd; - QString str; - str = fAdmin->getExecPath() + "/musrfit"; - - cmd.append(str); - cmd.append(QFileInfo(*fFilenames.find( currentEditor())).fileName() ); - cmd.append("--chisq-only"); - if (fAdmin->getEstimateN0Flag() && (result == QMessageBox::Yes) && ((fittype==0) || (fittype==4))) - cmd.append("--estimateN0"); - PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); - fitOutputHandler.setModal(true); - fitOutputHandler.exec(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

calls musrfit . can be set in the MusrFit/Preferences. - */ -void PTextEdit::musrFit() -{ - if ( !currentEditor() ) - return; - - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - if (tabLabel == "noname") { - QMessageBox::critical(this, "**ERROR**", "For a fit a real msr-file is needed."); - return; - } else if (tabLabel == "noname*") { - fileSaveAs(); - } else if (tabLabel.indexOf("*") > 0) { - fileSave(); - } - - QVector cmd; - QString str; - str = fAdmin->getExecPath() + "/musrfit"; - - cmd.append(str); - cmd.append(QFileInfo(*fFilenames.find( currentEditor())).fileName() ); - - // check if keep minuit2 output is wished - if (fAdmin->getKeepMinuit2OutputFlag()) - cmd.append("--keep-mn2-output"); - - // check if title of the data file should be used to replace the msr-file title - if (fAdmin->getTitleFromDataFileFlag()) - cmd.append("--title-from-data-file"); - - // check if dump files are wished - if (fAdmin->getDumpAsciiFlag()) { - cmd.append("--dump"); - cmd.append("ascii"); - } - if (fAdmin->getDumpRootFlag()) { - cmd.append("--dump"); - cmd.append("root"); - } - - // check estimate N0 flag - if (fAdmin->getEstimateN0Flag()) { - cmd.append("--estimateN0"); - } - - // check per-run-block-chisq flag - if (fAdmin->getChisqPerRunBlockFlag()) { - cmd.append("--per-run-block-chisq"); - } - - // add timeout - cmd.append("--timeout"); - QString numStr; - numStr.setNum(fAdmin->getTimeout()); - cmd.append(numStr); - - PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); - fitOutputHandler.setModal(true); - fFileSystemWatcherActive = false; - fitOutputHandler.exec(); - - // handle the reloading of the files - - // get current file name - QString currentFileName = *fFilenames.find( currentEditor() ); - QString complementFileName; - // check if it is a msr-, mlog-, or another file - int idx; - if ((idx = currentFileName.indexOf(".msr")) > 0) { // msr-file - complementFileName = currentFileName; - complementFileName.replace(idx, 5, ".mlog"); - } else if ((idx = currentFileName.indexOf(".mlog")) > 0) { // mlog-file - complementFileName = currentFileName; - complementFileName.replace(idx, 5, ".msr "); - complementFileName = complementFileName.trimmed(); - } else { // neither a msr- nor a mlog-file - QMessageBox::information( this, "musrFit", - "This is neither a msr- nor a mlog-file, hence no idea what to be done.\n", - QMessageBox::Ok ); - return; - } - - int currentIdx = fTabWidget->currentIndex(); - - // reload current file - fileClose(); - load(currentFileName, currentIdx); - - // check if swap file is open as well, and if yes, reload it - idx = -1; - for (int i=0; icount(); i++) { - if (fTabWidget->tabText(i).indexOf(complementFileName) >= 0) { - idx = i; - break; - } - } - if (idx >= 0) { // complement file is open - fTabWidget->setCurrentIndex(idx); - fileClose(); - load(complementFileName, idx); - fTabWidget->setCurrentIndex(currentIdx); - } - - fileSystemWatcherActivation(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts a msr2data input dialog which collects all the necessary data before calling msr2data. - */ -void PTextEdit::musrMsr2Data() -{ - if (fMsr2DataParam == 0) { - fMsr2DataParam = new PMsr2DataParam(); - *fMsr2DataParam = fAdmin->getMsr2DataParam(); - } - - // init fMsr2DataParam - fMsr2DataParam->keepMinuit2Output = fAdmin->getKeepMinuit2OutputFlag(); - fMsr2DataParam->titleFromDataFile = fAdmin->getTitleFromDataFileFlag(); - fMsr2DataParam->estimateN0 = fAdmin->getEstimateN0Flag(); - fMsr2DataParam->perRunBlockChisq = fAdmin->getChisqPerRunBlockFlag(); - - PMsr2DataDialog *dlg = new PMsr2DataDialog(fMsr2DataParam, fAdmin->getHelpUrl("msr2data")); - - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR**", "Couldn't invoke msr2data dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - if (dlg->exec() == QDialog::Accepted) { - QString first, last; - QString runList; - QString runListFileName; - QFileInfo fi; - QString str; - int i, end; - QStringList list; - bool ok; - - fMsr2DataParam = dlg->getMsr2DataParam(); - fAdmin->setKeepMinuit2OutputFlag(fMsr2DataParam->keepMinuit2Output); - fAdmin->setTitleFromDataFileFlag(fMsr2DataParam->titleFromDataFile); - fAdmin->setEstimateN0Flag(fMsr2DataParam->estimateN0); - fAdmin->setChisqPerRunBlockFlag(fMsr2DataParam->perRunBlockChisq); - - // analyze parameters - switch (dlg->getRunTag()) { - case -1: // not valid - QMessageBox::critical(this, "**ERROR**", - "No valid run list input found :-(\nCannot do anything.", - QMessageBox::Ok, QMessageBox::NoButton); - return; - break; - case 0: // run list - runList = fMsr2DataParam->runList; - break; - case 1: // run list file name - runListFileName = fMsr2DataParam->runListFileName; - fi.setFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + runListFileName); - if (!fi.exists()) { - str = QString("Run List File '%1' doesn't exist.").arg(runListFileName); - QMessageBox::critical(this, "**ERROR**", - str, QMessageBox::Ok, QMessageBox::NoButton); - return; - } - break; - default: // never should reach this point - QMessageBox::critical(this, "**ERROR**", - "No idea how you could reach this point.\nPlease contact the developers.", - QMessageBox::Ok, QMessageBox::NoButton); - return; - break; - } - - // form command - QVector cmd; - - str = fAdmin->getExecPath() + "/msr2data"; - cmd.append(str); - - // run list argument - switch (dlg->getRunTag()) { - case 0: - end = 0; - while (!runList.section(' ', end, end, QString::SectionSkipEmpty).isEmpty()) { - end++; - } - // first element - if (end == 1) { - str = "[" + runList + "]"; - cmd.append(str); - } else { - str = "[" + runList.section(' ', 0, 0, QString::SectionSkipEmpty); - cmd.append(str); - // middle elements - for (i=1; imsrFileExtension; - if (str.isEmpty()) - cmd.append(""); - else - cmd.append(str); - - // options - - // parameter export list - if (!fMsr2DataParam->paramList.isEmpty()) { - cmd.append("paramList"); - QStringList list = fMsr2DataParam->paramList.split(' '); - for (int i=0; iwriteDbHeader) - cmd.append("noheader"); - - // ignore data header info flag present? - if (fMsr2DataParam->ignoreDataHeaderInfo) - cmd.append("nosummary"); - - // template run no fitting but: (i) no fit only flag, (ii) no create msr-file only flag - if ((fMsr2DataParam->templateRunNo != -1) && !fMsr2DataParam->fitOnly && !fMsr2DataParam->createMsrFileOnly) { - str = QString("%1").arg(fMsr2DataParam->templateRunNo); - str = "fit-" + str; - if (!fMsr2DataParam->chainFit) { - str += "!"; - } - cmd.append(str); - } - - // template run no AND create msr-file only flag - if ((fMsr2DataParam->templateRunNo != -1) && fMsr2DataParam->createMsrFileOnly) { - str = QString("%1").arg(fMsr2DataParam->templateRunNo); - str = "msr-" + str; - cmd.append(str); - } - - // fit only - if (fMsr2DataParam->fitOnly) { - str = "fit"; - cmd.append(str); - } - - // keep minuit2 output - if (fMsr2DataParam->keepMinuit2Output) { - cmd.append("-k"); - } - - // replace msr-file title by data file title. Add flag only if a fit is done - if (fMsr2DataParam->titleFromDataFile && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { - cmd.append("-t"); - } - - // estimate N0 (makes sence for single histo and muMinus fits only). Add flag only if a fit is done - if (fMsr2DataParam->estimateN0 && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { - cmd.append("-e"); - } - - // write per-run-block chisq. Add flag only if a fit is done - if (fMsr2DataParam->perRunBlockChisq && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { - cmd.append("-p"); - } - - // DB output wished - if (!fMsr2DataParam->dbOutputFileName.isEmpty()) { - str = "-o" + fMsr2DataParam->dbOutputFileName; - cmd.append(str); - } - - // write column data - if (fMsr2DataParam->writeColumnData) { - cmd.append("data"); - } - - // global flag check - if (fMsr2DataParam->global) { - cmd.append("global"); - } - - // global+ flag check - if (fMsr2DataParam->globalPlus) { - if (fMsr2DataParam->chainFit) { - cmd.append("global+"); - } else { - cmd.append("global+!"); - } - } - - // recreate db file - if (fMsr2DataParam->recreateDbFile) { - cmd.append("new"); - } - - PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); - fitOutputHandler.setModal(true); - fFileSystemWatcherActive = false; - fitOutputHandler.exec(); - - // check if it is necessary to load msr-files - if (fMsr2DataParam->openFilesAfterFitting) { - QString fln; - QFile *file; - QTextStream *stream; - - if (!fMsr2DataParam->global) { // standard fits - switch(dlg->getRunTag()) { - case 0: // run list - list = getRunList(runList, ok); - if (!ok) - return; - for (int i=0; imsrFileExtension.isEmpty()) - fln += ".msr"; - else - fln += fMsr2DataParam->msrFileExtension + ".msr"; - - load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); - } - break; - case 1: // run list file - file = new QFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fMsr2DataParam->runListFileName); - if (!file->open(QIODevice::ReadOnly)) { - str = QString("Couldn't open run list file %1, sorry.").arg(fMsr2DataParam->runListFileName); - QMessageBox::critical(this, "**ERROR**", str.toLatin1(), QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - stream = new QTextStream(file); - while ( !stream->atEnd() ) { - str = stream->readLine(); // line of text excluding '\n' - str.trimmed(); - if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { - fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); - if (fMsr2DataParam->msrFileExtension.isEmpty()) - fln += ".msr"; - else - fln += fMsr2DataParam->msrFileExtension + ".msr"; - - load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); - } - } - - file->close(); - - // clean up - delete stream; - delete file; - break; - default: - break; - } - } else { // global tag set - // get the first run number needed to build the global fit file name - fln = QString(""); - switch(dlg->getRunTag()) { - case 0: // run list - fln = runList.section(" ", 0, 0, QString::SectionSkipEmpty) + QString("+global") + fMsr2DataParam->msrFileExtension + QString(".msr"); - break; - case 1: // run list file name - file = new QFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fMsr2DataParam->runListFileName); - if (!file->open(QIODevice::ReadOnly)) { - str = QString("Couldn't open run list file %1, sorry.").arg(fMsr2DataParam->runListFileName); - QMessageBox::critical(this, "**ERROR**", str.toLatin1(), QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - stream = new QTextStream(file); - while ( !stream->atEnd() ) { - str = stream->readLine(); // line of text excluding '\n' - str.trimmed(); - if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { - fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); - break; - } - } - - file->close(); - - fln += QString("+global") + fMsr2DataParam->msrFileExtension + QString(".msr"); - - // clean up - delete stream; - delete file; - break; - default: - break; - } - - load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); - } - } - } - - delete dlg; - dlg = 0; - - fileSystemWatcherActivation(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Calls musrview . - */ -void PTextEdit::musrView() -{ - if ( !currentEditor() ) - return; - - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - if (tabLabel == "noname") { - QMessageBox::critical(this, "**ERROR**", "For a view a real mlog/msr-file is needed."); - return; - } else if (tabLabel == "noname*") { - fileSaveAs(); - } else if (tabLabel.indexOf("*") > 0) { - fileSave(); - } - - QString cmd = fAdmin->getExecPath() + "/musrview"; - QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); - QStringList arg; - QString str; - - // file name - str = *fFilenames.find( currentEditor() ); - int pos = str.lastIndexOf("/"); - if (pos != -1) - str.remove(0, pos+1); - arg << str; - - // timeout - str.setNum(fAdmin->getTimeout()); - arg << "--timeout" << str; - - // start with Fourier? - if (fAdmin->getMusrviewShowFourierFlag()) - arg << "-f"; - - // start with averaged data/Fourier? - if (fAdmin->getMusrviewShowAvgFlag()) - arg << "-a"; - - QProcess *proc = new QProcess(this); - - // make sure that the system environment variables are properly set - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( 0, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } - } - -//---------------------------------------------------------------------------------------------------- -/** - *

Callse musrt0 . - */ -void PTextEdit::musrT0() -{ - if ( !currentEditor() ) - return; - - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - if (tabLabel == "noname") { - QMessageBox::critical(this, "**ERROR**", "For a view a real mlog/msr-file is needed."); - return; - } else if (tabLabel == "noname*") { - fileSaveAs(); - } else if (tabLabel.indexOf("*") > 0) { - fileSave(); - } - - QString cmd = fAdmin->getExecPath() + "/musrt0"; - QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); - QStringList arg; - QString str; - - // file name - str = *fFilenames.find( currentEditor() ); - int pos = str.lastIndexOf("/"); - if (pos != -1) - str.remove(0, pos+1); - arg << str; - - // timeout - str.setNum(fAdmin->getTimeout()); - arg << "--timeout" << str; - - QProcess *proc = new QProcess(this); - - // make sure that the system environment variables are properly set - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( 0, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Calls musrFT via selection/option dialog. It will ask the user if he/she wants to overwrite some - * of the default settings. - */ -void PTextEdit::musrFT() -{ - - PGetMusrFTOptionsDialog *dlg = new PGetMusrFTOptionsDialog(*fFilenames.find( currentEditor() ), fMusrFTPrevCmd, fAdmin->getHelpUrl("musrFT")); - - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR** musrFT", "Couldn't invoke musrFT Options Dialog."); - return; - } - - if (dlg->exec() == QDialog::Accepted) { - fMusrFTPrevCmd = dlg->getMusrFTOptions(); - QProcess *proc = new QProcess(this); - proc->setStandardOutputFile("musrFT.log"); - proc->setStandardErrorFile("musrFT.log"); - QString cmd = fAdmin->getExecPath() + "/musrFT"; - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); - proc->setProcessEnvironment(env); - proc->start(cmd, fMusrFTPrevCmd); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( 0, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } - } - - delete dlg; - dlg = 0; -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Calls the preferences dialog which is used to set some global options. - */ -void PTextEdit::musrPrefs() -{ - PPrefsDialog *dlg = new PPrefsDialog(fAdmin); - - if (dlg == 0) { - QMessageBox::critical(this, "**ERROR** musrPrefs", "Couldn't invoke Preferences Dialog."); - return; - } - - if (dlg->exec() == QDialog::Accepted) { - fAdmin->setMusrviewShowFourierFlag(dlg->getMusrviewShowFourierFlag()); - fAdmin->setMusrviewShowAvgFlag(dlg->getMusrviewShowAvgFlag()); - fAdmin->setKeepMinuit2OutputFlag(dlg->getKeepMinuit2OutputFlag()); - fAdmin->setTitleFromDataFileFlag(dlg->getTitleFromDataFileFlag()); - fAdmin->setEnableMusrT0Flag(dlg->getEnableMusrT0Flag()); - fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); - if (dlg->getDump() == 1) { - fAdmin->setDumpAsciiFlag(true); - fAdmin->setDumpRootFlag(false); - } else if (dlg->getDump() == 2) { - fAdmin->setDumpAsciiFlag(false); - fAdmin->setDumpRootFlag(true); - } else { - fAdmin->setDumpAsciiFlag(false); - fAdmin->setDumpRootFlag(false); - } - fAdmin->setTimeout(dlg->getTimeout()); - fAdmin->setChisqPerRunBlockFlag(dlg->getKeepRunPerBlockChisqFlag()); - fAdmin->setEstimateN0Flag(dlg->getEstimateN0Flag()); - } - - delete dlg; - dlg = 0; -} - -//---------------------------------------------------------------------------------------------------- -void PTextEdit::musrSetSteps() -{ - if ( !currentEditor() ) - return; - - // make sure I have a saved msr-file to work on - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - if (tabLabel == "noname") { - QMessageBox::critical(this, "**ERROR**", "For musrStep a real mlog/msr-file is needed."); - return; - } else if (tabLabel == "noname*") { - fileSaveAs(); - } else if (tabLabel.indexOf("*") > 0) { - fileSave(); - } - - // fill the command queue - QString cmd = fAdmin->getExecPath() + "/musrStep"; -#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) - cmd = QString("/Applications/musrStep.app/Contents/MacOS/musrStep"); -#endif - QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); - QStringList arg; - QString str; - - // get file name and feed it to the command queue - str = *fFilenames.find( currentEditor() ); - int pos = str.lastIndexOf("/"); - if (pos != -1) - str.remove(0, pos+1); - arg << str; - - QProcess *proc = new QProcess(this); - if (proc == nullptr) { - QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); - return; - } - - // handle return status of musrStep - connect(proc, static_cast(&QProcess::finished), - [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrSetSteps(exitCode, exitStatus); }); - - // make sure that the system environment variables are properly set - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( 0, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Swaps the currently open msr-file with its mlog-file (if present) and updates musredit accordingly. - */ -void PTextEdit::musrSwapMsrMlog() -{ - if ( !currentEditor() ) - return; - - // get current file name - QString currentFileName = *fFilenames.find( currentEditor() ); - QString swapFileName; - QString tempFileName = QString("__swap__.msr"); - - // check if it is a msr-, mlog-, or another file - int idx; - if ((idx = currentFileName.indexOf(".msr")) > 0) { // msr-file - swapFileName = currentFileName; - swapFileName.replace(idx, 5, ".mlog"); - } else if ((idx = currentFileName.indexOf(".mlog")) > 0) { // mlog-file - swapFileName = currentFileName; - swapFileName.replace(idx, 5, ".msr "); - swapFileName = swapFileName.trimmed(); - } else { // neither a msr- nor a mlog-file - QMessageBox::information( this, "musrSwapMsrMlog", - "This is neither a msr- nor a mlog-file, hence nothing to be swapped.\n", - QMessageBox::Ok ); - return; - } - - // check if the swapFile exists - if (!QFile::exists(swapFileName)) { - QString msg = "swap file '" + swapFileName + "' doesn't exist.\nCannot swap anything."; - QMessageBox::warning( this, "musrSwapMsrMlog", - msg, QMessageBox::Ok, QMessageBox::NoButton ); - return; - } - - // check if the file needs to be saved - if (fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") > 0) { // needs to be saved first - fileSave(); - } - - QMessageBox::information(0, "INFO", QString("Will now swap files: %1 <-> %2").arg(currentFileName).arg(swapFileName)); - - // swap files - - // copy currentFile -> tempFile - if (QFile::exists(tempFileName)) { - if (!QFile::remove(tempFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(tempFileName)); - return; - } - } - if (!QFile::copy(currentFileName, tempFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(currentFileName).arg(tempFileName)); - return; - } - // copy swapFile -> currentFile - if (!QFile::remove(currentFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(currentFileName)); - return; - } - if (!QFile::copy(swapFileName, currentFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(swapFileName).arg(currentFileName)); - return; - } - // copy tempFile -> swapFile - if (!QFile::remove(swapFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(swapFileName)); - return; - } - if (!QFile::copy(tempFileName, swapFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(tempFileName).arg(swapFileName)); - return; - } - // clean up - if (!QFile::remove(tempFileName)) { - QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(tempFileName)); - return; - } - - int currentIdx = fTabWidget->currentIndex(); - - // reload current file - fileClose(); - load(currentFileName); - - // check if swap file is open as well, and if yes, reload it - idx = -1; - for (int i=0; icount(); i++) { - if (fTabWidget->tabText(i).indexOf(swapFileName) >= 0) { - idx = i; - break; - } - } - if (idx >= 0) { // swap file is open - fTabWidget->setCurrentIndex(idx); - fileClose(); - load(swapFileName); - fTabWidget->setCurrentIndex(currentIdx); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Dumps the run header information of a selected muSR data file. - */ -void PTextEdit::musrDump() -{ - // select a muSR data filename - QString fileName = QFileDialog::getOpenFileName(this, tr("Select muSR Data File"), "./", tr("muSR Data Files (*.root *.bin *.msr *.nxs)")); - if (fileName.isEmpty()) - return; - - QVector cmd; - QString str = fAdmin->getExecPath() + "/dump_header"; - cmd.append(str); - cmd.append("-fn"); - cmd.append(fileName); - - PDumpOutputHandler dumpOutputHandler(cmd); - dumpOutputHandler.setModal(false); - dumpOutputHandler.exec(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts the help content browser. - */ -void PTextEdit::helpContents() -{ - PHelp *help = new PHelp(fAdmin->getHelpUrl("main")); - help->show(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts the help about info box. - */ -void PTextEdit::helpAbout() -{ - PMusrEditAbout *about = new PMusrEditAbout(); - about->show(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Starts the help about Qt info box. - */ -void PTextEdit::helpAboutQt() -{ - QMessageBox::aboutQt(this); -} - - -//---------------------------------------------------------------------------------------------------- -/** - * @brief PTextEdit::exitStatusMusrWiz - * @param exitCode - * @param exitStatus - */ -void PTextEdit::exitStatusMusrWiz(int exitCode, QProcess::ExitStatus exitStatus) -{ - if (exitStatus == QProcess::CrashExit) { - QMessageBox::critical(0, "**FATAL**", "musrWiz returned CrashExit."); - return; - } - - // dialog finished with reject - if (exitCode == 0) - return; - - // read .musrWiz.log - ifstream fin(".musrWiz.log", ifstream::in); - if (!fin.is_open()) { - QMessageBox::critical(0, "**ERROR**", "PTextEdit::exitStatusMusrWiz: couldn't read .musrWiz.log file."); - return; - } - char line[128]; - bool musrT0tag = false; - QString str, pathFileName(""); - while (fin.good()) { - fin.getline(line, 128); - str = line; - if (str.startsWith("path-file-name:")) { - pathFileName = str.mid(16); - } else if (str.startsWith("musrt0-tag: yes")) { - musrT0tag = true; - } - } - fin.close(); - - load(pathFileName); - - // in case there is a 1st empty tab "noname", remove it - QString tabStr = fTabWidget->tabText(0); - tabStr.remove('&'); // this is needed since the QTabWidget adds short-cut info as '&' to the tab name - if (tabStr == "noname") { // has to be the first, otherwise do nothing - fFileSystemWatcher->removePath("noname"); - - delete fTabWidget->widget(0); - } - - if (musrT0tag) - musrT0(); -} - -//---------------------------------------------------------------------------------------------------- -/** - * @brief PTextEdit::existStatusMusrSetSteps - * @param exitCode - * @param exitStatus - */ -void PTextEdit::exitStatusMusrSetSteps(int exitCode, QProcess::ExitStatus exitStatus) -{ - if (exitStatus == QProcess::CrashExit) { - QMessageBox::critical(0, "**FATAL**", "musrStep returned CrashExit."); - return; - } - - // dialog finished with reject - if (exitCode == 0) - return; - - // dialog finished with save and quite, i.e. accept, hence reload - QString fln = *fFilenames.find( currentEditor() ); - int idx = fTabWidget->currentIndex(); - - fileClose(); - load(fln, idx); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: called when the font shall be changed. - * - * \param f font object - */ -void PTextEdit::fontChanged( const QFont &f ) -{ - fFontChanging = true; - fComboFont->lineEdit()->setText( f.family() ); - fComboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); - - if (!currentEditor()) - return; - - currentEditor()->setFont(f); - currentEditor()->setWindowModified(false); - currentEditor()->viewport()->setFocus(); - fFontChanging = false; -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: called when the text of the document has changed. It adds a star to the tab label if the - * document has been modified. - * - * \param forced - */ -void PTextEdit::textChanged(const bool forced) -{ - - if (!currentEditor()) - return; - - if (fFontChanging) - return; - - QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); - - if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") > 0) && - !currentEditor()->document()->isModified()) { - tabLabel.truncate(tabLabel.length()-1); - fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel); - } - - if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") < 0) && - currentEditor()->document()->isModified()) { - fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel+"*"); - } - - if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") < 0) && - forced) - fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel+"*"); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: called when the cursor position has changed. Updates the status bar with the current - * cursor position. - */ -void PTextEdit::currentCursorPosition() -{ - QString str; - int line=0, pos=0; - - pos = currentEditor()->textCursor().columnNumber(); - line = currentEditor()->textCursor().blockNumber(); - - str = QString("cursor pos: %1, %2").arg(line+1).arg(pos+1); - statusBar()->showMessage(str); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: handles the replaced command. - */ -void PTextEdit::replace() -{ - currentEditor()->insertPlainText(fFindReplaceData->replaceText); - - editFindNext(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: handles the repalce and close command. - */ -void PTextEdit::replaceAndClose() -{ - currentEditor()->insertPlainText(fFindReplaceData->replaceText); - - emit close(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: handles the replace all command. - */ -void PTextEdit::replaceAll() -{ - // set the cursor to the start of the document - currentEditor()->moveCursor(QTextCursor::Start); - - // construct search flags - QTextDocument::FindFlags flags = 0; - if (fFindReplaceData->caseSensitive) - flags |= QTextDocument::FindCaseSensitively; - else if (fFindReplaceData->findBackwards) - flags |= QTextDocument::FindBackward; - else if (fFindReplaceData->wholeWordsOnly) - flags |= QTextDocument::FindWholeWords; - - while (currentEditor()->find(fFindReplaceData->findText, flags)) { - currentEditor()->insertPlainText(fFindReplaceData->replaceText); - } - - emit close(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

SLOT: updates the fonts if the textedit tab has changed. - */ -void PTextEdit::applyFontSettings(int) -{ - QFont font(fAdmin->getFontName(), fAdmin->getFontSize()); - fontChanged(font); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Called when an open file is changing outside the editor (SLOT). - * - * \param fileName file name of the changed file. - */ -void PTextEdit::fileChanged(const QString &fileName) -{ - if (!fFileSystemWatcherActive) - return; - - fFileSystemWatcherActive = false; - - QString str = "File '" + fileName + "' changed on the system.\nDo you want to reload it?"; - int result = QMessageBox::question(this, "**INFO**", str, QMessageBox::Yes, QMessageBox::No); - if (result == QMessageBox::Yes) { - // find correct file - int idx = -1; - for (int i=0; icount(); i++) { - if (fTabWidget->tabText(i) == QFileInfo(fileName).fileName()) { - idx = i; - break; - } - } - - if (idx == -1) { - fileSystemWatcherActivation(); - return; - } - - // remove file from file system watcher - fFileSystemWatcher->removePath(fileName); - - // close tab - fTabWidget->removeTab(idx); - // load it - load(fileName, idx); - } - - fileSystemWatcherActivation(); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Delayed reactivation of file system watcher, needed when saving files. At the moment the delay - * is set to 2000 ms. - */ -void PTextEdit::fileSystemWatcherActivation() -{ - if (fFileSystemWatcherTimeout.isActive()) - return; - - fFileSystemWatcherTimeout.singleShot(2000, this, SLOT(setFileSystemWatcherActive())); -} - -//---------------------------------------------------------------------------------------------------- -/** - *

slot needed to reactivate the file system watcher. It is called by PTextEdit::fileSystemWatcherActivation() - * after some given timeout. - */ -void PTextEdit::setFileSystemWatcherActive() -{ - fFileSystemWatcherActive = true; -} - -//---------------------------------------------------------------------------------------------------- -/** - * @brief PTextEdit::getTheme - */ -void PTextEdit::getTheme() -{ - fDarkTheme = false; // true if theme is dark - fDarkToolBarIcon = false; // needed for ubuntu dark since there the menu icons are dark, however the toolbar icons are plain! - - QString str = QIcon::themeName(); - - if (str.contains("dark", Qt::CaseInsensitive)) { - fDarkTheme = true; - if (str.contains("ubuntu", Qt::CaseInsensitive)) { - fDarkToolBarIcon = false; - } else { - fDarkToolBarIcon = true; - } - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

fill the recent file list in the menu. - */ -void PTextEdit::fillRecentFiles() -{ - for (int i=0; igetNumRecentFiles(); i++) { - fRecentFilesAction[i]->setText(fAdmin->getRecentFile(i)); - fRecentFilesAction[i]->setVisible(true); - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

run list is split (space separated) and expanded (start-end -> start, start+1, ..., end) to a list - * - * \param runListStr list to be split and expanded - * \param ok true if everything is fine; false if an error has been encountered - * - * \return fully expanded run list - */ -QStringList PTextEdit::getRunList(QString runListStr, bool &ok) -{ - QStringList result; - bool isInt; - QString str; - - ok = true; - - // first split space separated parts - QStringList tok = runListStr.split(' ', QString::SkipEmptyParts); - for (int i=0; i +#include +using namespace std; + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "PTextEdit.h" +#include "PHelp.h" +#include "PSubTextEdit.h" +#include "PAdmin.h" +#include "PFindDialog.h" +#include "PReplaceDialog.h" +#include "PReplaceConfirmationDialog.h" +#include "PFitOutputHandler.h" +#include "PDumpOutputHandler.h" +#include "PPrefsDialog.h" +#include "PGetMusrFTOptionsDialog.h" +#include "PMusrEditAbout.h" +#include "PMsr2DataDialog.h" + +//---------------------------------------------------------------------------------------------------- +/** + *

Constructor + * + * \param parent pointer to the parent object + * \param f qt windows flags + */ +PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f ) + : QMainWindow( parent, f ) +{ + getTheme(); + + // reads and manages the conents of the xml-startup (musredit_startup.xml) file + fAdmin = new PAdmin(); + + // enable file system watcher. Needed to get notification if the msr-file is changed outside of musrfit at runtime + fFileSystemWatcherActive = true; + fFileSystemWatcher = new QFileSystemWatcher(); + if (fFileSystemWatcher == 0) { + QMessageBox::information(this, "**ERROR**", "Couldn't invoke QFileSystemWatcher!"); + } else { + connect( fFileSystemWatcher, SIGNAL(fileChanged(const QString&)), this, SLOT(fileChanged(const QString&))); + } + + // initialize stuff + fMusrT0Action = 0; + + fMsr2DataParam = 0; + fFindReplaceData = 0, + + // setup menus + setupFileActions(); + setupEditActions(); + setupTextActions(); + setupMusrActions(); + setupHelpActions(); + + fTabWidget = new QTabWidget( this ); + fTabWidget->setMovable(true); // allows to shuffle around tabs + setCentralWidget( fTabWidget ); + + textFamily(fAdmin->getFontName()); + textSize(QString("%1").arg(fAdmin->getFontSize())); + fFontChanging = false; + + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/musrfit-dark.svg"); + else + iconName = QString(":/icons/musrfit-plain.svg"); + setWindowIcon( QIcon( QPixmap(iconName) ) ); + + // if arguments are give, try to load those files, otherwise create an empty new file + if ( qApp->arguments().size() != 1 ) { + for ( int i = 1; i < qApp->arguments().size(); ++i ) + load( qApp->arguments()[ i ] ); + } else { + fileNew(); + } + + connect( fTabWidget, SIGNAL( currentChanged(int) ), this, SLOT( applyFontSettings(int) )); + + fLastDirInUse = fAdmin->getDefaultSavePath(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

This slot is called if the main application is on the way to quit. This ensures that allocated + * memory indeed can be free'd. + */ +void PTextEdit::aboutToQuit() +{ + if (fAdmin) { + delete fAdmin; + fAdmin = 0; + } + if (fMusrT0Action) { + delete fMusrT0Action; + fMusrT0Action = 0; + } + if (fMsr2DataParam) { + delete fMsr2DataParam; + fMsr2DataParam = 0; + } + if (fFindReplaceData) { + delete fFindReplaceData; + fFindReplaceData = 0; + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the file menu and the necessary actions. + */ +void PTextEdit::setupFileActions() +{ + QToolBar *tb = new QToolBar( this ); + tb->setWindowTitle( "File Actions" ); + addToolBar( tb ); + + QMenu *menu = new QMenu( tr( "F&ile" ), this ); + menuBar()->addMenu( menu ); + + QAction *a; + + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/document-new-dark.svg"); + else + iconName = QString(":/icons/document-new-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); + a->setShortcut( tr("Ctrl+N") ); + a->setStatusTip( tr("Create a new msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-new-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&New..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/document-open-dark.svg"); + else + iconName = QString(":/icons/document-open-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); + a->setShortcut( tr("Ctrl+O") ); + a->setStatusTip( tr("Opens a msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-open-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Open..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileOpen() ) ); + } + tb->addAction(a); + + fRecentFilesMenu = menu->addMenu( tr("Recent Files") ); + for (int i=0; isetVisible(false); + connect( fRecentFilesAction[i], SIGNAL(triggered()), this, SLOT(fileOpenRecent())); + fRecentFilesMenu->addAction(fRecentFilesAction[i]); + } + fillRecentFiles(); + + if (fDarkTheme) + iconName = QString(":/icons/view-refresh-dark.svg"); + else + iconName = QString(":/icons/view-refresh-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); + a->setShortcut( tr("F5") ); + a->setStatusTip( tr("Reload msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/view-refresh-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Reload..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileReload() ) ); + } + tb->addAction(a); + + a = new QAction( tr( "Open Prefs..." ), this); + connect( a, SIGNAL( triggered() ), this, SLOT( fileOpenPrefs() ) ); + menu->addAction(a); + + menu->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/document-save-dark.svg"); + else + iconName = QString(":/icons/document-save-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); + a->setShortcut( tr("Ctrl+S") ); + a->setStatusTip( tr("Save msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-save-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Save..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); + } + tb->addAction(a); + + a = new QAction( tr( "Save &As..." ), this ); + a->setStatusTip( tr("Save msr-file As") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileSaveAs() ) ); + menu->addAction(a); + + a = new QAction( tr( "Save Prefs..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileSavePrefs() ) ); + menu->addAction(a); + + menu->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/document-print-dark.svg"); + else + iconName = QString(":/icons/document-print-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); + a->setShortcut( tr("Ctrl+P") ); + a->setStatusTip( tr("Print msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/document-print-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Print..." ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + + a = new QAction( tr( "&Close" ), this ); + a->setShortcut( tr("Ctrl+W") ); + a->setStatusTip( tr("Close msr-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileClose() ) ); + menu->addAction(a); + + a = new QAction( tr( "Close &All" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseAll() ) ); + menu->addAction(a); + + a = new QAction( tr( "Clo&se All Others" ), this ); + a->setShortcut( tr("Ctrl+Shift+W") ); + a->setStatusTip( tr("Close All Other Tabs") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseAllOthers() ) ); + menu->addAction(a); + + menu->addSeparator(); + + a = new QAction( tr( "E&xit" ), this ); + a->setShortcut( tr("Ctrl+Q") ); + a->setStatusTip( tr("Exit Program") ); + connect( a, SIGNAL( triggered() ), this, SLOT( fileExit() ) ); + menu->addAction(a); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the edit menu and the necessary actions. + */ +void PTextEdit::setupEditActions() +{ + QToolBar *tb = new QToolBar( this ); + tb->setWindowTitle( "Edit Actions" ); + addToolBar( tb ); + + QMenu *menu = new QMenu( tr( "&Edit" ), this ); + menuBar()->addMenu( menu ); + + QAction *a; + QString iconName(""); + + if (fDarkTheme) + iconName = QString(":/icons/edit-undo-dark.svg"); + else + iconName = QString(":/icons/edit-undo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); + a->setShortcut( tr("Ctrl+Z") ); + a->setStatusTip( tr("Edit Undo") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-undo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Undo" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/edit-redo-dark.svg"); + else + iconName = QString(":/icons/edit-redo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); + a->setShortcut( tr("Ctrl+Y") ); + a->setStatusTip( tr("Edit Redo") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-redo-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Redo" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + + a = new QAction( tr( "Select &All" ), this ); + a->setShortcut( tr("Ctrl+A") ); + a->setStatusTip( tr("Edit Select All") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editSelectAll() ) ); + menu->addAction(a); + + menu->addSeparator(); + tb->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/edit-copy-dark.svg"); + else + iconName = QString(":/icons/edit-copy-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); + a->setShortcut( tr("Ctrl+C") ); + a->setStatusTip( tr("Edit Copy") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-copy-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Copy" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/edit-cut-dark.svg"); + else + iconName = QString(":/icons/edit-cut-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); + a->setShortcut( tr("Ctrl+X") ); + a->setStatusTip( tr("Edit Cut") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-cut-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Cu&t" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/edit-paste-dark.svg"); + else + iconName = QString(":/icons/edit-paste-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); + a->setShortcut( tr("Ctrl+V") ); + a->setStatusTip( tr("Edit Paste") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-paste-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Paste" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + tb->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/edit-find-dark.svg"); + else + iconName = QString(":/icons/edit-find-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); + a->setShortcut( tr("Ctrl+F") ); + a->setStatusTip( tr("Edit Find") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/edit-find-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Find" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFind() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/go-next-use-dark.svg"); + else + iconName = QString(":/icons/go-next-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); + a->setShortcut( tr("F3") ); + a->setStatusTip( tr("Edit Find Next") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/go-next-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find &Next" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindNext() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/go-previous-use-dark.svg"); + else + iconName = QString(":/icons/go-previous-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ) , tr( "Find Pre&vious" ), this ); + a->setShortcut( tr("Shift+F4") ); + a->setStatusTip( tr("Edit Find Previous") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/go-previous-use-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Find Pre&vious" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindPrevious() ) ); + } + tb->addAction(a); + + a = new QAction( tr( "Replace..." ), this ); + a->setShortcut( tr("Ctrl+R") ); + a->setStatusTip( tr("Edit Replace") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editFindAndReplace() ) ); + menu->addAction(a); + menu->addSeparator(); + + QMenu *addSubMenu = new QMenu( tr ("Add Block"), this); + + a = new QAction( tr("Title Block"), this ); + a->setStatusTip( tr("Invokes MSR Title Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertTitle() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Parameter Block"), this ); + a->setStatusTip( tr("Invokes MSR Parameter Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertParameterBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Theory Block"), this ); + a->setStatusTip( tr("Invokes MSR Theory Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertTheoryBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Function Block"), this ); + a->setStatusTip( tr("Invokes MSR Function Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertFunctionBlock() )); + addSubMenu->addAction(a); + + // feed the theoryFunctions popup menu + QMenu *theoryFunctions = new QMenu( tr("Add Theory Function"), this ); + for (unsigned int i=0; igetTheoryCounts(); i++) { + PTheory *theoryItem = fAdmin->getTheoryItem(i); + a = new QAction( theoryItem->label, this); + theoryFunctions->addAction(a); + } + connect( theoryFunctions, SIGNAL( triggered(QAction*)), this, SLOT( insertTheoryFunction(QAction*) ) ); + + a = new QAction( tr("Asymmetry Run Block"), this ); + a->setStatusTip( tr("Invokes MSR Asymmetry Run Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertAsymRunBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Single Histo Run Block"), this ); + a->setStatusTip( tr("Invokes MSR Single Histo Run Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertSingleHistRunBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("NonMuSR Run Block"), this ); + a->setStatusTip( tr("Invokes MSR NonMuSR Run Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertNonMusrRunBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Command Block"), this ); + a->setStatusTip( tr("Invokes MSR Command Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertCommandBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Fourier Block"), this ); + a->setStatusTip( tr("Invokes MSR Fourier Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertFourierBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Plot Block"), this ); + a->setStatusTip( tr("Invokes MSR Plot Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertPlotBlock() )); + addSubMenu->addAction(a); + + a = new QAction( tr("Statistic Block"), this ); + a->setStatusTip( tr("Invokes MSR Statistic Block Dialog") ); + connect( a, SIGNAL( triggered() ), this, SLOT( insertStatisticBlock() )); + addSubMenu->addAction(a); + + menu->addMenu(addSubMenu); + menu->addMenu(theoryFunctions); + menu->addSeparator(); + + a = new QAction( tr( "Co&mment" ), this ); + a->setShortcut( tr("Ctrl+M") ); + a->setStatusTip( tr("Edit Comment Selected Lines") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editComment() ) ); + menu->addAction(a); + + a = new QAction( tr( "Unco&mment" ), this ); + a->setShortcut( tr("Ctrl+Shift+M") ); + a->setStatusTip( tr("Edit Uncomment Selected Lines") ); + connect( a, SIGNAL( triggered() ), this, SLOT( editUncomment() ) ); + menu->addAction(a); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the font/font size menu. + */ +void PTextEdit::setupTextActions() +{ + QToolBar *tb = new QToolBar( this ); + tb->setWindowTitle( "Format Actions" ); + addToolBar( tb ); + + fComboFont = new QComboBox(); + fComboFont->setEditable(true); + QFontDatabase db; + fComboFont->addItems( db.families() ); + connect( fComboFont, SIGNAL( activated( const QString & ) ), + this, SLOT( textFamily( const QString & ) ) ); + QLineEdit *edit = fComboFont->lineEdit(); + if (edit == 0) { + return; + } + edit->setText( fAdmin->getFontName() ); + tb->addWidget(fComboFont); + + fComboSize = new QComboBox( tb ); + fComboSize->setEditable(true); + QList sizes = db.standardSizes(); + QList::Iterator it = sizes.begin(); + for ( ; it != sizes.end(); ++it ) + fComboSize->addItem( QString::number( *it ) ); + connect( fComboSize, SIGNAL( activated( const QString & ) ), + this, SLOT( textSize( const QString & ) ) ); + edit = fComboSize->lineEdit(); + if (edit == 0) { + return; + } + edit->setText( QString("%1").arg(fAdmin->getFontSize()) ); + tb->addWidget(fComboSize); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the musrfit menu and the necessary actions. + */ +void PTextEdit::setupMusrActions() +{ + addToolBarBreak(); + + QToolBar *tb = new QToolBar( this ); + tb->setWindowTitle( "Musr Actions" ); + addToolBar( tb ); + + QMenu *menu = new QMenu( tr( "&MusrFit" ), this ); + menuBar()->addMenu( menu ); + + QAction *a; + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/musrWiz-32x32-dark.svg"); + else + iconName = QString(":/icons/musrWiz-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); + a->setShortcut( tr("Alt+W") ); + a->setStatusTip( tr("Call musrWiz which helps to create msr-files") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrWiz-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "musr&Wiz" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrWiz() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + tb->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/musrchisq-dark.svg"); + else + iconName = QString(":/icons/musrchisq-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); + a->setShortcut( tr("Alt+C") ); + a->setStatusTip( tr("Calculate Chi Square (Log Max Likelihood)") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrchisq-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Calculate &Chisq" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrCalcChisq() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/musrfit-dark.svg"); + else + iconName = QString(":/icons/musrfit-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); + a->setShortcut( tr("Alt+F") ); + a->setStatusTip( tr("Fit") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrfit-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Fit" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFit() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/musrswap-dark.svg"); + else + iconName = QString(":/icons/musrswap-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); + a->setShortcut( tr("Alt+S") ); + a->setStatusTip( tr("Swap msr-file <-> mlog-file") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrswap-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Swap Msr <-> Mlog" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSwapMsrMlog() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/musrStep-32x32-dark.svg"); + else + iconName = QString(":/icons/musrStep-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); + a->setShortcut( tr("Alt+P") ); + a->setStatusTip( tr("Set Steps") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrStep-32x32.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Set Ste&ps" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrSetSteps() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/msr2data-dark.svg"); + else + iconName = QString(":/icons/msr2data-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); + a->setShortcut( tr("Alt+M") ); + a->setStatusTip( tr("Start msr2data interface") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/msr2data-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Msr2Data" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrMsr2Data() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + tb->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/musrview-dark.svg"); + else + iconName = QString(":/icons/musrview-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); + a->setShortcut( tr("Alt+V") ); + a->setStatusTip( tr("Start musrview") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrview-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&View" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrView() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/musrt0-dark.svg"); + else + iconName = QString(":/icons/musrt0-plain.svg"); + fMusrT0Action = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); + fMusrT0Action->setStatusTip( tr("Start musrt0") ); + connect( fMusrT0Action, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); + menu->addAction(fMusrT0Action); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrt0-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); + } + tb->addAction(a); + fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); + + if (fDarkTheme) + iconName = QString(":/icons/musrFT-dark.svg"); + else + iconName = QString(":/icons/musrFT-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); + a->setStatusTip( tr("Start musrFT") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrFT-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "Raw Fourier" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrFT() ) ); + } + tb->addAction(a); + + if (fDarkTheme) + iconName = QString(":/icons/musrprefs-dark.svg"); + else + iconName = QString(":/icons/musrprefs-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); + a->setStatusTip( tr("Show Preferences") ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrprefs-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Preferences" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrPrefs() ) ); + } + tb->addAction(a); + + menu->addSeparator(); + tb->addSeparator(); + + if (fDarkTheme) + iconName = QString(":/icons/musrdump-dark.svg"); + else + iconName = QString(":/icons/musrdump-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName)), tr( "&Dump Header"), this); + a->setStatusTip( tr("Dumps muSR File Header Information") ); + connect( a, SIGNAL(triggered()), this, SLOT(musrDump())); + menu->addAction(a); + if (!fDarkToolBarIcon) { // tool bar icon is not dark, even though the theme is (ubuntu) + iconName = QString(":/icons/musrdump-plain.svg"); + a = new QAction( QIcon( QPixmap(iconName) ), tr( "&Dump Header" ), this ); + connect( a, SIGNAL( triggered() ), this, SLOT( musrDump() ) ); + } + tb->addAction(a); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the help menu and the necessary actions. + */ +void PTextEdit::setupHelpActions() +{ + QMenu *menu = new QMenu( tr( "&Help" ), this ); + menuBar()->addMenu( menu); + + QAction *a; + a = new QAction(tr( "Contents ..." ), this ); + a->setStatusTip( tr("Help Contents") ); + connect( a, SIGNAL( triggered() ), this, SLOT( helpContents() )); + menu->addAction(a); + + a = new QAction(tr( "About ..." ), this ); + a->setStatusTip( tr("Help About") ); + connect( a, SIGNAL( triggered() ), this, SLOT( helpAbout() )); + menu->addAction(a); + + a = new QAction(tr( "About Qt..." ), this ); + a->setStatusTip( tr("Help About Qt") ); + connect( a, SIGNAL( triggered() ), this, SLOT( helpAboutQt() )); + menu->addAction(a); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

load an msr-file. + * + * \param f filename + * \param index if == -1, add the file as a new tab, otherwise, replace the contents of the tab at index. + */ +void PTextEdit::load( const QString &f, const int index ) +{ + // check if the file exists + if ( !QFile::exists( f ) ) + return; + + // create a new text edit object + PSubTextEdit *edit = new PSubTextEdit( fAdmin ); + edit->setFont(QFont(fAdmin->getFontName(), fAdmin->getFontSize())); + + // place the text edit object at the appropriate tab position + if (index == -1) + fTabWidget->addTab( edit, QFileInfo( f ).fileName() ); + else + fTabWidget->insertTab( index, edit, QFileInfo( f ).fileName() ); + QFile file( f ); + if ( !file.open( QIODevice::ReadOnly ) ) + return; + + // add file name to recent file names + fAdmin->addRecentFile(f); // keep it in admin + fillRecentFiles(); // update menu + + // add the msr-file to the file system watchersssss + fFileSystemWatcher->addPath(f); + + // read the file + QTextStream ts( &file ); + QString txt = ts.readAll(); + edit->setPlainText( txt ); + doConnections( edit ); // add all necessary signal/slot connections + + // set the tab widget to the current tab + fTabWidget->setCurrentIndex(fTabWidget->indexOf(edit)); + edit->viewport()->setFocus(); + + // update the filename mapper + fFilenames.remove( edit ); + fFilenames.insert( edit, f ); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

returns the currently tab selected textedit object. + */ +PSubTextEdit *PTextEdit::currentEditor() const +{ + if ( fTabWidget->currentWidget() ) { + if (fTabWidget->currentWidget()->inherits( "PSubTextEdit" )) { + return (PSubTextEdit*)fTabWidget->currentWidget(); + } + } + + return 0; +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Setup the necessray signal/slot connections for the textedit object. + * + * \param e textedit object + */ +void PTextEdit::doConnections( PSubTextEdit *e ) +{ +// connect( e, SIGNAL( currentFontChanged( const QFont & ) ), +// this, SLOT( fontChanged( const QFont & ) ) ); + + connect( e, SIGNAL( textChanged() ), this, SLOT( textChanged() )); + + connect( e, SIGNAL( cursorPositionChanged() ), this, SLOT( currentCursorPosition() )); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file title. See also https://intranet.psi.ch/MUSR/MusrFit#4_1_The_Title + */ +void PTextEdit::insertTitle() +{ + currentEditor()->insertTitle(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file fit-parameter block. See also https://intranet.psi.ch/MUSR/MusrFit#4_2_The_FITPARAMETER_Block + */ +void PTextEdit::insertParameterBlock() +{ + currentEditor()->insertParameterBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file theory block. See also https://intranet.psi.ch/MUSR/MusrFit#4_3_The_THEORY_Block + */ +void PTextEdit::insertTheoryBlock() +{ + currentEditor()->insertTheoryBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Insert a selected theory function. See also https://intranet.psi.ch/MUSR/MusrFit#4_3_The_THEORY_Block + * + * \param a action of the selected theory function + */ +void PTextEdit::insertTheoryFunction(QAction *a) +{ + currentEditor()->insertTheoryFunction(a->text()); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file function block. See also https://intranet.psi.ch/MUSR/MusrFit#4_4_The_FUNCTIONS_Block + */ +void PTextEdit::insertFunctionBlock() +{ + currentEditor()->insertFunctionBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file asymmetry run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block + */ +void PTextEdit::insertAsymRunBlock() +{ + currentEditor()->insertAsymRunBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file single histogram run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block + */ +void PTextEdit::insertSingleHistRunBlock() +{ + currentEditor()->insertSingleHistRunBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file nonMusr run block. See also https://intranet.psi.ch/MUSR/MusrFit#4_5_The_RUN_Block + */ +void PTextEdit::insertNonMusrRunBlock() +{ + currentEditor()->insertNonMusrRunBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Inserts a default command block. See also https://intranet.psi.ch/MUSR/MusrFit#4_6_The_COMMANDS_Block + */ +void PTextEdit::insertCommandBlock() +{ + currentEditor()->insertCommandBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file Fourier block. See also https://intranet.psi.ch/MUSR/MusrFit#4_7_The_FOURIER_Block + */ +void PTextEdit::insertFourierBlock() +{ + currentEditor()->insertFourierBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Start the dialog to enter a msr-file plot block. See also https://intranet.psi.ch/MUSR/MusrFit#4_7_The_PLOT_Block + */ +void PTextEdit::insertPlotBlock() +{ + currentEditor()->insertPlotBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Inserts a default statistics block. See also https://intranet.psi.ch/MUSR/MusrFit#4_9_The_STATISTIC_Block + */ +void PTextEdit::insertStatisticBlock() +{ + currentEditor()->insertStatisticBlock(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: called when File/New is selected. Will generate an empty tab-textedit field in musredit. + */ +void PTextEdit::fileNew() +{ + PSubTextEdit *edit = new PSubTextEdit( fAdmin ); + edit->setFont(QFont(fAdmin->getFontName(), fAdmin->getFontSize())); + doConnections( edit ); + fTabWidget->addTab( edit, tr( "noname" ) ); + fTabWidget->setCurrentIndex(fTabWidget->indexOf(edit)); + fFilenames.insert(edit, tr("noname")); + edit->viewport()->setFocus(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: called when File/Open is selected. Will open an msr-/mlog-file. It checks if the file is + * already open, and if so will just select the current tab. If you want to reload the file use the + * fileReload() slot. + */ +void PTextEdit::fileOpen() +{ + QStringList flns = QFileDialog::getOpenFileNames( this, tr("Open msr-/mlog-File"), + fLastDirInUse, + tr( "msr-Files (*.msr);;msr-Files (*.msr *.mlog);;All Files (*)" )); + + QStringList::Iterator it = flns.begin(); + QFileInfo finfo1, finfo2; + QString tabFln; + bool alreadyOpen = false; + + // if flns are present, keep the corresponding directory + if (flns.size() > 0) { + finfo1.setFile(flns.at(0)); + fLastDirInUse = finfo1.absoluteFilePath(); + } + + while( it != flns.end() ) { + // check if the file is not already open + finfo1.setFile(*it); + for (int i=0; icount(); i++) { + tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); + finfo2.setFile(tabFln); + if (finfo1.absoluteFilePath() == finfo2.absoluteFilePath()) { + alreadyOpen = true; + fTabWidget->setCurrentIndex(i); + break; + } + } + + if (!alreadyOpen) + load(*it); + else + fileReload(); + + ++it; + } + + // in case there is a 1st empty tab "noname", remove it + QString tabStr = fTabWidget->tabText(0); + tabStr.remove('&'); // this is needed since the QTabWidget adds short-cut info as '&' to the tab name + if (tabStr == "noname") { // has to be the first, otherwise do nothing + fFileSystemWatcher->removePath("noname"); + + delete fTabWidget->widget(0); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

This slot will open the file from the recent file list. If already open, it will reload it. + */ +void PTextEdit::fileOpenRecent() +{ + QAction *action = qobject_cast(sender()); + + if (action) { + // check if this file is already open and if so, switch the tab + QFileInfo finfo1, finfo2; + QString tabFln; + bool alreadyOpen = false; + QString fln = action->text(); + fln.remove('&'); + finfo1.setFile(fln); + + for (int i=0; icount(); i++) { + tabFln = *fFilenames.find( dynamic_cast(fTabWidget->widget(i))); + finfo2.setFile(tabFln); + if (finfo1.absoluteFilePath() == finfo2.absoluteFilePath()) { + alreadyOpen = true; + fTabWidget->setCurrentIndex(i); + break; + } + } + + if (!alreadyOpen) { + // make sure the file exists + if (!finfo1.exists()) { + QMessageBox::critical(this, "ERROR", QString("File '%1' does not exist.\nWill not do anything.").arg(fln)); + return; + } + load(fln); + } else { + fileReload(); + } + + // in case there is a 1st empty tab "noname", remove it + fln = fTabWidget->tabText(0); + fln.remove("&"); + if (fln == "noname") { // has to be the first, otherwise do nothing + fFileSystemWatcher->removePath("noname"); + + delete fTabWidget->widget(0); + } + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will reload the currently selected msr-file. + */ +void PTextEdit::fileReload() +{ + if ( fFilenames.find( currentEditor() ) == fFilenames.end() ) { + QMessageBox::critical(this, "**ERROR**", "Cannot reload a file not previously saved ;-)"); + } else { + int index = fTabWidget->currentIndex(); + QString fln = *fFilenames.find( currentEditor() ); + fileClose(false); + load(fln, index); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will save the currently selected file. + */ +void PTextEdit::fileOpenPrefs() +{ + QString fln(""); + QString msg(""); + QMessageBox msgBox; + msgBox.setText("Which Preferences do you want to open?"); + msgBox.addButton("Default", QMessageBox::AcceptRole); + msgBox.addButton("Custom", QMessageBox::AcceptRole); + msgBox.setStandardButtons(QMessageBox::Cancel); + int result = msgBox.exec(); + if (result == QMessageBox::Cancel) { + return; + } else if (result == 0) { // default dir + fln = fAdmin->getDefaultPrefPathName(); + msg = QString("Current Default Preferences Path-Name:\n") + fln; + if (QMessageBox::information(this, "Info", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) + return; + } else if (result == 1) { // custom dir + fln = QFileDialog::getOpenFileName( this, tr("Open Prefs"), + fLastDirInUse, + tr( "xml-Files (*.xml);; All Files (*)" )); + } + + if (fAdmin->loadPrefs(fln)) { + msg = QString("Prefs from '") + fln + QString("' loaded."); + QMessageBox::information(0, "Info", msg); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will save the currently selected file. + */ +void PTextEdit::fileSave() +{ + if ( !currentEditor() ) + return; + + fFileSystemWatcherActive = false; + + if ( *fFilenames.find( currentEditor() ) == QString("noname") ) { + fileSaveAs(); + } else { + QFile file( *fFilenames.find( currentEditor() ) ); + if ( !file.open( QIODevice::WriteOnly ) ) + return; + QTextStream ts( &file ); + ts << currentEditor()->toPlainText(); + + // remove trailing '*' modification indicators + QString fln = *fFilenames.find( currentEditor() ); + fTabWidget->setTabText(fTabWidget->indexOf( currentEditor() ), QFileInfo(fln).fileName()); + } + + fileSystemWatcherActivation(); // delayed activation of fFileSystemWatcherActive +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will open a file selector dialog to obtain a file name, and then save the file under the newly + * selected file name. + */ +void PTextEdit::fileSaveAs() +{ + if ( !currentEditor() ) + return; + + fFileSystemWatcherActive = false; + + QString fn = QFileDialog::getSaveFileName( this, + tr( "Save msr-/mlog-file As" ), *fFilenames.find( currentEditor() ), + tr( "msr-Files (*.msr *.mlog);;All Files (*)" ) ); + if ( !fn.isEmpty() ) { + fFilenames.remove( currentEditor() ); + fFilenames.insert( currentEditor(), fn ); + fileSave(); + fTabWidget->setTabText(fTabWidget->indexOf( currentEditor() ), QFileInfo(fn).fileName()); + } + + fileSystemWatcherActivation(); // delayed activation of fFileSystemWatcherActive +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will save the current preferences. + */ +void PTextEdit::fileSavePrefs() +{ + QString fln(""); + QString msg(""); + QMessageBox msgBox; + msgBox.setText("Which Preferences do you want to open?"); + msgBox.addButton("Default", QMessageBox::AcceptRole); + msgBox.addButton("Custom", QMessageBox::AcceptRole); + msgBox.setStandardButtons(QMessageBox::Cancel); + int result = msgBox.exec(); + if (result == QMessageBox::Cancel) { + return; + } else if (result == 0) { // default dir + fln = fAdmin->getDefaultPrefPathName(); + msg = QString("Current Default Preferences Path-Name:\n") + fln; + if (QMessageBox::information(this, "Info", msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Cancel) + return; + } else if (result == 1) { // custom dir + fln = QFileDialog::getSaveFileName( this, + tr( "Save Prefs As" ), "musredit_startup.xml", + tr( "xml-Files (*.xml);;All Files (*)" ) ); + } + + if ( !fln.isEmpty() ) { + fAdmin->savePrefs(fln); + msg = QString("Prefs to '") + fln + QString("' saved."); + QMessageBox::information(0, "Info", msg); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will call a print dialog and print the msr-file. + */ +void PTextEdit::filePrint() +{ + if ( !currentEditor() ) + return; +#ifndef QT_NO_PRINTER + QPrinter printer( QPrinter::HighResolution ); + printer.setFullPage(true); + QPrintDialog dialog(&printer, this); + if (dialog.exec()) { // printer dialog + statusBar()->showMessage( "Printing..." ); + + QPainter p( &printer ); + // Check that there is a valid device to print to. + if ( !p.device() ) + return; + + QFont font( currentEditor()->QWidget::font() ); + font.setPointSize( 10 ); // we define 10pt to be a nice base size for printing + p.setFont( font ); + + int yPos = 0; // y-position for each line + QFontMetrics fm = p.fontMetrics(); + int dpiy = printer.logicalDpiY(); + int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins + + // print msr-file + QString fln = *fFilenames.find(currentEditor()); + QString header1(fln); + QFileInfo flnInfo(fln); + QString header2 = QString("last modified: ") + flnInfo.lastModified().toString("dd.MM.yyyy - hh:mm:ss"); + QString line("-------------------------------------"); + QStringList strList = currentEditor()->toPlainText().split("\n"); + for (QStringList::Iterator it = strList.begin(); it != strList.end(); ++it) { + // new page needed? + if ( margin + yPos > printer.height() - margin ) { + printer.newPage(); // no more room on this page + yPos = 0; // back to top of page + } + + if (yPos == 0) { // print header + font.setPointSize( 8 ); + p.setFont( font ); + + p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), + Qt::TextExpandTabs | Qt::TextDontClip, header1); + yPos += fm.lineSpacing(); + p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), + Qt::TextExpandTabs | Qt::TextDontClip, header2); + yPos += fm.lineSpacing(); + p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), + Qt::TextExpandTabs | Qt::TextDontClip, line); + yPos += 1.5*fm.lineSpacing(); + + font.setPointSize( 10 ); + p.setFont( font ); + } + + // print data + p.drawText(margin, margin+yPos, printer.width(), fm.lineSpacing(), + Qt::TextExpandTabs | Qt::TextDontClip, *it); + yPos += fm.lineSpacing(); + } + + p.end(); + } +#endif +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will remove a textedit tab from musredit. Depending on check it will done with or without checking + * if the file has been saved before. + * + * \param check if set to true, a warning dialog will popup if the file is not saved yet. + */ +void PTextEdit::fileClose(const bool check) +{ + // check if the has modification + int idx = fTabWidget->currentIndex(); + if ((fTabWidget->tabText(idx).indexOf("*")>0) && check) { + int result = QMessageBox::warning(this, "**WARNING**", + "Do you really want to close this file.\nChanges will be lost", + "Close", "Cancel"); + if (result == 1) // Cancel + return; + } + + QString str = *fFilenames.find(currentEditor()); + fFileSystemWatcher->removePath(str); + + delete currentEditor(); + + if ( currentEditor() ) + currentEditor()->viewport()->setFocus(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Removes all textedit tabs from musredit. It checks if the files haven't been saved, and if so it will + * popup a warning dialog. + */ +void PTextEdit::fileCloseAll() +{ + // check if any editor tab is present, if not: get out of here + if ( !currentEditor() ) + return; + + // check if there are any unsaved tabs + for (int i=0; icount(); i++) { + if (fTabWidget->tabText(i).indexOf("*") > 0) { + int result = QMessageBox::warning(this, "**WARNING**", + "Do you really want to close all files.\nChanges of unsaved files will be lost", + "Close", "Cancel"); + if (result == 1) // Cancel + return; + break; + } + } + + // close all editor tabs + QString str; + do { + // remove file from file system watcher + str = *fFilenames.find(currentEditor()); + fFileSystemWatcher->removePath(str); + + delete currentEditor(); + + if ( currentEditor() ) + currentEditor()->viewport()->setFocus(); + } while ( currentEditor() ); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will close all textedit tabs but the selected one. It checks if the files haven't been saved, and if so it will + * popup a warning dialog. + */ +void PTextEdit::fileCloseAllOthers() +{ + // check if any editor tab is present, if not: get out of here + if ( !currentEditor() ) + return; + + // check if there are any unsaved tabs + for (int i=0; icount(); i++) { + if (fTabWidget->tabText(i).indexOf("*") > 0) { + int result = QMessageBox::warning(this, "**WARNING**", + "Do you really want to close all files.\nChanges of unsaved files will be lost", + "Close", "Cancel"); + if (result == 1) // Cancel + return; + break; + } + } + + // keep label of the current editor + QString label = fTabWidget->tabText(fTabWidget->currentIndex()); + + // check if only the current editor is present. If yes: nothing to be done + if (fTabWidget->count() == 1) + return; + + // close all editor tabs + int i=0; + QString str; + do { + if (fTabWidget->tabText(i) != label) { + // remove file from file system watcher + str = *fFilenames.find(dynamic_cast(fTabWidget->widget(i))); + fFileSystemWatcher->removePath(str); + + delete fTabWidget->widget(i); + } else { + i++; + } + } while ( fTabWidget->count() > 1 ); + + currentEditor()->viewport()->setFocus(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Will quit musredit. + */ +void PTextEdit::fileExit() +{ + // check if there are still some modified files open + for (int i=0; i < fTabWidget->count(); i++) { + if (fTabWidget->tabText(i).indexOf("*") > 0) { + int result = QMessageBox::warning(this, "**WARNING**", + "Do you really want to exit from the applcation.\nChanges will be lost", + "Exit", "Cancel"); + if (result == 1) // Cancel + return; + break; + } + } + + qApp->quit(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Text undo of the current textedit tab. + */ +void PTextEdit::editUndo() +{ + if ( !currentEditor() ) + return; + currentEditor()->undo(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Text redo of the current textedit tab + */ +void PTextEdit::editRedo() +{ + if ( !currentEditor() ) + return; + currentEditor()->redo(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Select all text of the current textedit tab. + */ +void PTextEdit::editSelectAll() +{ + if ( !currentEditor() ) + return; + currentEditor()->selectAll(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Cut the selection of the current textedit tab. + */ +void PTextEdit::editCut() +{ + if ( !currentEditor() ) + return; + currentEditor()->cut(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Copy the selection of the current textedit tab. + */ +void PTextEdit::editCopy() +{ + if ( !currentEditor() ) + return; + currentEditor()->copy(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Paste at the cursor position of the current textedit tab. + */ +void PTextEdit::editPaste() +{ + if ( !currentEditor() ) + return; + currentEditor()->paste(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts a find dialog, and searches for a find string. + */ +void PTextEdit::editFind() +{ + if ( !currentEditor() ) + return; + + // check if first time called, and if yes create find and replace data structure + if (fFindReplaceData == 0) { + fFindReplaceData = new PFindReplaceData(); + fFindReplaceData->findText = QString(""); + fFindReplaceData->replaceText = QString(""); + fFindReplaceData->caseSensitive = true; + fFindReplaceData->wholeWordsOnly = false; + fFindReplaceData->fromCursor = true; + fFindReplaceData->findBackwards = false; + fFindReplaceData->selectedText = false; + fFindReplaceData->promptOnReplace = true; + } + + if (fFindReplaceData == 0) { + QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find data structure, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + PFindDialog *dlg = new PFindDialog(fFindReplaceData, currentEditor()->textCursor().hasSelection()); + if (dlg == 0) { + QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + dlg->exec(); + + if (dlg->result() != QDialog::Accepted) { + delete dlg; + return; + } + + fFindReplaceData = dlg->getData(); + + delete dlg; + dlg = 0; + + // try to find the search text + if (!fFindReplaceData->fromCursor) + currentEditor()->textCursor().setPosition(0); + + QTextDocument::FindFlags flags = 0; + if (fFindReplaceData->caseSensitive) + flags |= QTextDocument::FindCaseSensitively; + else if (fFindReplaceData->findBackwards) + flags |= QTextDocument::FindBackward; + else if (fFindReplaceData->wholeWordsOnly) + flags |= QTextDocument::FindWholeWords; + + currentEditor()->find(fFindReplaceData->findText, flags); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Searches for a find string in the forward direction. + */ +void PTextEdit::editFindNext() +{ + QTextDocument::FindFlags flags = 0; + if (fFindReplaceData->caseSensitive) + flags |= QTextDocument::FindCaseSensitively; + else if (fFindReplaceData->wholeWordsOnly) + flags |= QTextDocument::FindWholeWords; + + currentEditor()->find(fFindReplaceData->findText, flags); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Searches for a find string in the backward direction. + */ +void PTextEdit::editFindPrevious() +{ + QTextDocument::FindFlags flags = 0; + if (fFindReplaceData->caseSensitive) + flags |= QTextDocument::FindCaseSensitively; + else if (fFindReplaceData->wholeWordsOnly) + flags |= QTextDocument::FindWholeWords; + + flags |= QTextDocument::FindBackward; + + currentEditor()->find(fFindReplaceData->findText, flags); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts a find/replace dialog, and searches for a find string and replaces it depending of the replace options. + */ +void PTextEdit::editFindAndReplace() +{ + if ( !currentEditor() ) + return; + + // check if first time called, and if yes create find and replace data structure + if (fFindReplaceData == 0) { + fFindReplaceData = new PFindReplaceData(); + fFindReplaceData->findText = QString(""); + fFindReplaceData->replaceText = QString(""); + fFindReplaceData->caseSensitive = true; + fFindReplaceData->wholeWordsOnly = false; + fFindReplaceData->fromCursor = true; + fFindReplaceData->findBackwards = false; + fFindReplaceData->selectedText = false; + fFindReplaceData->promptOnReplace = true; + } + + if (fFindReplaceData == 0) { + QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find&replace data structure, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + PReplaceDialog *dlg = new PReplaceDialog(fFindReplaceData, currentEditor()->textCursor().hasSelection()); + if (dlg == 0) { + QMessageBox::critical(this, "**ERROR**", "Couldn't invoke find&replace dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + dlg->exec(); + + if (dlg->result() != QDialog::Accepted) { + delete dlg; + return; + } + + fFindReplaceData = dlg->getData(); + + delete dlg; + dlg = 0; + + if (fFindReplaceData->promptOnReplace) { + editFindNext(); + + PReplaceConfirmationDialog confirmDlg(this); + + // connect all the necessary signals/slots + QObject::connect(confirmDlg.fReplace_pushButton, SIGNAL(clicked()), this, SLOT(replace())); + QObject::connect(confirmDlg.fReplaceAndClose_pushButton, SIGNAL(clicked()), this, SLOT(replaceAndClose())); + QObject::connect(confirmDlg.fReplaceAll_pushButton, SIGNAL(clicked()), this, SLOT(replaceAll())); + QObject::connect(confirmDlg.fFindNext_pushButton, SIGNAL(clicked()), this, SLOT(editFindNext())); + QObject::connect(this, SIGNAL(close()), &confirmDlg, SLOT(accept())); + + confirmDlg.exec(); + } else { + replaceAll(); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Comment a selection, i.e. add a '#' character in front of each line of the selection. + * (Multiple selections not yet supported). + */ +void PTextEdit::editComment() +{ + if ( !currentEditor() ) + return; + + + QTextCursor curs = currentEditor()->textCursor(); + + if (curs.hasComplexSelection()) { // multiple selections + // multiple selections (STILL MISSING) + } else if (curs.hasSelection()) { // simple selection + int pos = curs.position(); + int secStart = curs.selectionStart(); // keep start position of the selection + int secEnd = curs.selectionEnd(); // keep end position of the selection + curs.clearSelection(); + curs.setPosition(secStart); // set the anchor to the start of the selection + curs.movePosition(QTextCursor::StartOfBlock); + do { + curs.insertText("#"); + } while (curs.movePosition(QTextCursor::NextBlock) && (curs.position() <= secEnd)); + curs.setPosition(pos+1); + } else { // no selection + int pos = curs.position(); + curs.clearSelection(); + curs.movePosition(QTextCursor::StartOfLine); + curs.insertText("#"); + curs.setPosition(pos+1); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Uncomment a selection, i.e. remove a '#' character in front of each line of the selection. + * (Multiple selections not yet supported). + */ +void PTextEdit::editUncomment() +{ + if ( !currentEditor() ) + return; + + + QTextCursor curs = currentEditor()->textCursor(); + + if (curs.hasComplexSelection()) { + // multiple selections (STILL MISSING) + } else if (curs.hasSelection()) { + int pos = curs.position(); + int secStart = curs.selectionStart(); // keep start position of the selection + int secEnd = curs.selectionEnd(); // keep end position of the selection + curs.clearSelection(); + curs.setPosition(secStart); // set the anchor to the start of the selection + curs.movePosition(QTextCursor::StartOfBlock); + while (curs.position() < secEnd) { + QString line = curs.block().text(); + if (line.startsWith("#")) { + line.remove(0, 1); + curs.select(QTextCursor::BlockUnderCursor); + curs.removeSelectedText(); + curs.insertText("\n"+line); + pos -= 1; + } + curs.movePosition(QTextCursor::NextBlock); + } + curs.setPosition(pos); + currentEditor()->setTextCursor(curs); // needed to update document cursor + } else { // no selection + int pos = curs.position(); + curs.clearSelection(); + curs.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor, 1); + QString line = curs.block().text(); + if (line.startsWith("#")) { + line.remove(0, 1); + curs.select(QTextCursor::BlockUnderCursor); + curs.removeSelectedText(); + if (currentEditor()->textCursor().columnNumber() == 0) + curs.insertText(line); + else + curs.insertText("\n"+line); + pos -= 1; + } + curs.setPosition(pos); + currentEditor()->setTextCursor(curs); // needed to update document cursor + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Chances the font. + * + * \param f font name + */ +void PTextEdit::textFamily( const QString &f ) +{ + fAdmin->setFontName(f); + + if ( !currentEditor() ) + return; + + currentEditor()->setFont(QFont(f,fAdmin->getFontSize())); + currentEditor()->viewport()->setFocus(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Chances the font size. + * + * \param p font size in points. + */ +void PTextEdit::textSize( const QString &p ) +{ + fAdmin->setFontSize(p.toInt()); + + if ( !currentEditor() ) + return; + + currentEditor()->setFont(QFont(fAdmin->getFontName(), p.toInt())); + currentEditor()->viewport()->setFocus(); +} + +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::musrWiz + */ +void PTextEdit::musrWiz() +{ + QString cmd = fAdmin->getExecPath() + "/musrWiz"; +#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) + cmd = QString("/Applications/musrWiz.app/Contents/MacOS/musrWiz"); +#endif + QString workDir = "./"; // think about it!! + QStringList arg; + arg << "--log"; + + QProcess *proc = new QProcess(this); + if (proc == nullptr) { + QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); + return; + } + + // handle return status of musrWiz + connect(proc, static_cast(&QProcess::finished), + [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrWiz(exitCode, exitStatus); }); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd, arg); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

calls musrfit --chisq-only . + */ +void PTextEdit::musrCalcChisq() +{ + if ( !currentEditor() ) + return; + + int result = 0; + int fittype = currentEditor()->getFitType(); + if (fAdmin->getEstimateN0Flag() && ((fittype==0) || (fittype==4))) + result = QMessageBox::question(this, "Estimate N0 active", + "Do you wish a chisq/mlh evaluation with an automatic N0 estimate?"); + + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For a fit a real msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + QVector cmd; + QString str; + str = fAdmin->getExecPath() + "/musrfit"; + + cmd.append(str); + cmd.append(QFileInfo(*fFilenames.find( currentEditor())).fileName() ); + cmd.append("--chisq-only"); + if (fAdmin->getEstimateN0Flag() && (result == QMessageBox::Yes) && ((fittype==0) || (fittype==4))) + cmd.append("--estimateN0"); + PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); + fitOutputHandler.setModal(true); + fitOutputHandler.exec(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

calls musrfit . can be set in the MusrFit/Preferences. + */ +void PTextEdit::musrFit() +{ + if ( !currentEditor() ) + return; + + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For a fit a real msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + QVector cmd; + QString str; + str = fAdmin->getExecPath() + "/musrfit"; + + cmd.append(str); + cmd.append(QFileInfo(*fFilenames.find( currentEditor())).fileName() ); + + // check if keep minuit2 output is wished + if (fAdmin->getKeepMinuit2OutputFlag()) + cmd.append("--keep-mn2-output"); + + // check if title of the data file should be used to replace the msr-file title + if (fAdmin->getTitleFromDataFileFlag()) + cmd.append("--title-from-data-file"); + + // check if dump files are wished + if (fAdmin->getDumpAsciiFlag()) { + cmd.append("--dump"); + cmd.append("ascii"); + } + if (fAdmin->getDumpRootFlag()) { + cmd.append("--dump"); + cmd.append("root"); + } + + // check estimate N0 flag + if (fAdmin->getEstimateN0Flag()) { + cmd.append("--estimateN0"); + } + + // check per-run-block-chisq flag + if (fAdmin->getChisqPerRunBlockFlag()) { + cmd.append("--per-run-block-chisq"); + } + + // add timeout + cmd.append("--timeout"); + QString numStr; + numStr.setNum(fAdmin->getTimeout()); + cmd.append(numStr); + + PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); + fitOutputHandler.setModal(true); + fFileSystemWatcherActive = false; + fitOutputHandler.exec(); + + // handle the reloading of the files + + // get current file name + QString currentFileName = *fFilenames.find( currentEditor() ); + QString complementFileName; + // check if it is a msr-, mlog-, or another file + int idx; + if ((idx = currentFileName.indexOf(".msr")) > 0) { // msr-file + complementFileName = currentFileName; + complementFileName.replace(idx, 5, ".mlog"); + } else if ((idx = currentFileName.indexOf(".mlog")) > 0) { // mlog-file + complementFileName = currentFileName; + complementFileName.replace(idx, 5, ".msr "); + complementFileName = complementFileName.trimmed(); + } else { // neither a msr- nor a mlog-file + QMessageBox::information( this, "musrFit", + "This is neither a msr- nor a mlog-file, hence no idea what to be done.\n", + QMessageBox::Ok ); + return; + } + + int currentIdx = fTabWidget->currentIndex(); + + // reload current file + fileClose(); + load(currentFileName, currentIdx); + + // check if swap file is open as well, and if yes, reload it + idx = -1; + for (int i=0; icount(); i++) { + if (fTabWidget->tabText(i).indexOf(complementFileName) >= 0) { + idx = i; + break; + } + } + if (idx >= 0) { // complement file is open + fTabWidget->setCurrentIndex(idx); + fileClose(); + load(complementFileName, idx); + fTabWidget->setCurrentIndex(currentIdx); + } + + fileSystemWatcherActivation(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts a msr2data input dialog which collects all the necessary data before calling msr2data. + */ +void PTextEdit::musrMsr2Data() +{ + if (fMsr2DataParam == 0) { + fMsr2DataParam = new PMsr2DataParam(); + *fMsr2DataParam = fAdmin->getMsr2DataParam(); + } + + // init fMsr2DataParam + fMsr2DataParam->keepMinuit2Output = fAdmin->getKeepMinuit2OutputFlag(); + fMsr2DataParam->titleFromDataFile = fAdmin->getTitleFromDataFileFlag(); + fMsr2DataParam->estimateN0 = fAdmin->getEstimateN0Flag(); + fMsr2DataParam->perRunBlockChisq = fAdmin->getChisqPerRunBlockFlag(); + + PMsr2DataDialog *dlg = new PMsr2DataDialog(fMsr2DataParam, fAdmin->getHelpUrl("msr2data")); + + if (dlg == 0) { + QMessageBox::critical(this, "**ERROR**", "Couldn't invoke msr2data dialog, sorry :-(", QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + if (dlg->exec() == QDialog::Accepted) { + QString first, last; + QString runList; + QString runListFileName; + QFileInfo fi; + QString str; + int i, end; + QStringList list; + bool ok; + + fMsr2DataParam = dlg->getMsr2DataParam(); + fAdmin->setKeepMinuit2OutputFlag(fMsr2DataParam->keepMinuit2Output); + fAdmin->setTitleFromDataFileFlag(fMsr2DataParam->titleFromDataFile); + fAdmin->setEstimateN0Flag(fMsr2DataParam->estimateN0); + fAdmin->setChisqPerRunBlockFlag(fMsr2DataParam->perRunBlockChisq); + + // analyze parameters + switch (dlg->getRunTag()) { + case -1: // not valid + QMessageBox::critical(this, "**ERROR**", + "No valid run list input found :-(\nCannot do anything.", + QMessageBox::Ok, QMessageBox::NoButton); + return; + break; + case 0: // run list + runList = fMsr2DataParam->runList; + break; + case 1: // run list file name + runListFileName = fMsr2DataParam->runListFileName; + fi.setFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + runListFileName); + if (!fi.exists()) { + str = QString("Run List File '%1' doesn't exist.").arg(runListFileName); + QMessageBox::critical(this, "**ERROR**", + str, QMessageBox::Ok, QMessageBox::NoButton); + return; + } + break; + default: // never should reach this point + QMessageBox::critical(this, "**ERROR**", + "No idea how you could reach this point.\nPlease contact the developers.", + QMessageBox::Ok, QMessageBox::NoButton); + return; + break; + } + + // form command + QVector cmd; + + str = fAdmin->getExecPath() + "/msr2data"; + cmd.append(str); + + // run list argument + switch (dlg->getRunTag()) { + case 0: + end = 0; + while (!runList.section(' ', end, end, QString::SectionSkipEmpty).isEmpty()) { + end++; + } + // first element + if (end == 1) { + str = "[" + runList + "]"; + cmd.append(str); + } else { + str = "[" + runList.section(' ', 0, 0, QString::SectionSkipEmpty); + cmd.append(str); + // middle elements + for (i=1; imsrFileExtension; + if (str.isEmpty()) + cmd.append(""); + else + cmd.append(str); + + // options + + // parameter export list + if (!fMsr2DataParam->paramList.isEmpty()) { + cmd.append("paramList"); + QStringList list = fMsr2DataParam->paramList.split(' '); + for (int i=0; iwriteDbHeader) + cmd.append("noheader"); + + // ignore data header info flag present? + if (fMsr2DataParam->ignoreDataHeaderInfo) + cmd.append("nosummary"); + + // template run no fitting but: (i) no fit only flag, (ii) no create msr-file only flag + if ((fMsr2DataParam->templateRunNo != -1) && !fMsr2DataParam->fitOnly && !fMsr2DataParam->createMsrFileOnly) { + str = QString("%1").arg(fMsr2DataParam->templateRunNo); + str = "fit-" + str; + if (!fMsr2DataParam->chainFit) { + str += "!"; + } + cmd.append(str); + } + + // template run no AND create msr-file only flag + if ((fMsr2DataParam->templateRunNo != -1) && fMsr2DataParam->createMsrFileOnly) { + str = QString("%1").arg(fMsr2DataParam->templateRunNo); + str = "msr-" + str; + cmd.append(str); + } + + // fit only + if (fMsr2DataParam->fitOnly) { + str = "fit"; + cmd.append(str); + } + + // keep minuit2 output + if (fMsr2DataParam->keepMinuit2Output) { + cmd.append("-k"); + } + + // replace msr-file title by data file title. Add flag only if a fit is done + if (fMsr2DataParam->titleFromDataFile && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { + cmd.append("-t"); + } + + // estimate N0 (makes sence for single histo and muMinus fits only). Add flag only if a fit is done + if (fMsr2DataParam->estimateN0 && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { + cmd.append("-e"); + } + + // write per-run-block chisq. Add flag only if a fit is done + if (fMsr2DataParam->perRunBlockChisq && (fMsr2DataParam->fitOnly || fMsr2DataParam->templateRunNo != -1)) { + cmd.append("-p"); + } + + // DB output wished + if (!fMsr2DataParam->dbOutputFileName.isEmpty()) { + str = "-o" + fMsr2DataParam->dbOutputFileName; + cmd.append(str); + } + + // write column data + if (fMsr2DataParam->writeColumnData) { + cmd.append("data"); + } + + // global flag check + if (fMsr2DataParam->global) { + cmd.append("global"); + } + + // global+ flag check + if (fMsr2DataParam->globalPlus) { + if (fMsr2DataParam->chainFit) { + cmd.append("global+"); + } else { + cmd.append("global+!"); + } + } + + // recreate db file + if (fMsr2DataParam->recreateDbFile) { + cmd.append("new"); + } + + PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); + fitOutputHandler.setModal(true); + fFileSystemWatcherActive = false; + fitOutputHandler.exec(); + + // check if it is necessary to load msr-files + if (fMsr2DataParam->openFilesAfterFitting) { + QString fln; + QFile *file; + QTextStream *stream; + + if (!fMsr2DataParam->global) { // standard fits + switch(dlg->getRunTag()) { + case 0: // run list + list = getRunList(runList, ok); + if (!ok) + return; + for (int i=0; imsrFileExtension.isEmpty()) + fln += ".msr"; + else + fln += fMsr2DataParam->msrFileExtension + ".msr"; + + load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); + } + break; + case 1: // run list file + file = new QFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fMsr2DataParam->runListFileName); + if (!file->open(QIODevice::ReadOnly)) { + str = QString("Couldn't open run list file %1, sorry.").arg(fMsr2DataParam->runListFileName); + QMessageBox::critical(this, "**ERROR**", str.toLatin1(), QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + stream = new QTextStream(file); + while ( !stream->atEnd() ) { + str = stream->readLine(); // line of text excluding '\n' + str.trimmed(); + if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { + fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); + if (fMsr2DataParam->msrFileExtension.isEmpty()) + fln += ".msr"; + else + fln += fMsr2DataParam->msrFileExtension + ".msr"; + + load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); + } + } + + file->close(); + + // clean up + delete stream; + delete file; + break; + default: + break; + } + } else { // global tag set + // get the first run number needed to build the global fit file name + fln = QString(""); + switch(dlg->getRunTag()) { + case 0: // run list + fln = runList.section(" ", 0, 0, QString::SectionSkipEmpty) + QString("+global") + fMsr2DataParam->msrFileExtension + QString(".msr"); + break; + case 1: // run list file name + file = new QFile(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fMsr2DataParam->runListFileName); + if (!file->open(QIODevice::ReadOnly)) { + str = QString("Couldn't open run list file %1, sorry.").arg(fMsr2DataParam->runListFileName); + QMessageBox::critical(this, "**ERROR**", str.toLatin1(), QMessageBox::Ok, QMessageBox::NoButton); + return; + } + + stream = new QTextStream(file); + while ( !stream->atEnd() ) { + str = stream->readLine(); // line of text excluding '\n' + str.trimmed(); + if (!str.isEmpty() && !str.startsWith("#") && !str.startsWith("run", Qt::CaseInsensitive)) { + fln = str.section(' ', 0, 0, QString::SectionSkipEmpty); + break; + } + } + + file->close(); + + fln += QString("+global") + fMsr2DataParam->msrFileExtension + QString(".msr"); + + // clean up + delete stream; + delete file; + break; + default: + break; + } + + load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); + } + } + } + + delete dlg; + dlg = 0; + + fileSystemWatcherActivation(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Calls musrview . + */ +void PTextEdit::musrView() +{ + if ( !currentEditor() ) + return; + + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For a view a real mlog/msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + QString cmd = fAdmin->getExecPath() + "/musrview"; + QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); + QStringList arg; + QString str; + + // file name + str = *fFilenames.find( currentEditor() ); + int pos = str.lastIndexOf("/"); + if (pos != -1) + str.remove(0, pos+1); + arg << str; + + // timeout + str.setNum(fAdmin->getTimeout()); + arg << "--timeout" << str; + + // start with Fourier? + if (fAdmin->getMusrviewShowFourierFlag()) + arg << "-f"; + + // start with averaged data/Fourier? + if (fAdmin->getMusrviewShowAvgFlag()) + arg << "-a"; + + QProcess *proc = new QProcess(this); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd, arg); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } + } + +//---------------------------------------------------------------------------------------------------- +/** + *

Callse musrt0 . + */ +void PTextEdit::musrT0() +{ + if ( !currentEditor() ) + return; + + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For a view a real mlog/msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + QString cmd = fAdmin->getExecPath() + "/musrt0"; + QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); + QStringList arg; + QString str; + + // file name + str = *fFilenames.find( currentEditor() ); + int pos = str.lastIndexOf("/"); + if (pos != -1) + str.remove(0, pos+1); + arg << str; + + // timeout + str.setNum(fAdmin->getTimeout()); + arg << "--timeout" << str; + + QProcess *proc = new QProcess(this); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd, arg); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Calls musrFT via selection/option dialog. It will ask the user if he/she wants to overwrite some + * of the default settings. + */ +void PTextEdit::musrFT() +{ + + PGetMusrFTOptionsDialog *dlg = new PGetMusrFTOptionsDialog(*fFilenames.find( currentEditor() ), fMusrFTPrevCmd, fAdmin->getHelpUrl("musrFT")); + + if (dlg == 0) { + QMessageBox::critical(this, "**ERROR** musrFT", "Couldn't invoke musrFT Options Dialog."); + return; + } + + if (dlg->exec() == QDialog::Accepted) { + fMusrFTPrevCmd = dlg->getMusrFTOptions(); + QProcess *proc = new QProcess(this); + proc->setStandardOutputFile("musrFT.log"); + proc->setStandardErrorFile("musrFT.log"); + QString cmd = fAdmin->getExecPath() + "/musrFT"; + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->start(cmd, fMusrFTPrevCmd); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } + } + + delete dlg; + dlg = 0; +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Calls the preferences dialog which is used to set some global options. + */ +void PTextEdit::musrPrefs() +{ + PPrefsDialog *dlg = new PPrefsDialog(fAdmin); + + if (dlg == 0) { + QMessageBox::critical(this, "**ERROR** musrPrefs", "Couldn't invoke Preferences Dialog."); + return; + } + + if (dlg->exec() == QDialog::Accepted) { + fAdmin->setMusrviewShowFourierFlag(dlg->getMusrviewShowFourierFlag()); + fAdmin->setMusrviewShowAvgFlag(dlg->getMusrviewShowAvgFlag()); + fAdmin->setKeepMinuit2OutputFlag(dlg->getKeepMinuit2OutputFlag()); + fAdmin->setTitleFromDataFileFlag(dlg->getTitleFromDataFileFlag()); + fAdmin->setEnableMusrT0Flag(dlg->getEnableMusrT0Flag()); + fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); + if (dlg->getDump() == 1) { + fAdmin->setDumpAsciiFlag(true); + fAdmin->setDumpRootFlag(false); + } else if (dlg->getDump() == 2) { + fAdmin->setDumpAsciiFlag(false); + fAdmin->setDumpRootFlag(true); + } else { + fAdmin->setDumpAsciiFlag(false); + fAdmin->setDumpRootFlag(false); + } + fAdmin->setTimeout(dlg->getTimeout()); + fAdmin->setChisqPerRunBlockFlag(dlg->getKeepRunPerBlockChisqFlag()); + fAdmin->setEstimateN0Flag(dlg->getEstimateN0Flag()); + } + + delete dlg; + dlg = 0; +} + +//---------------------------------------------------------------------------------------------------- +void PTextEdit::musrSetSteps() +{ + if ( !currentEditor() ) + return; + + // make sure I have a saved msr-file to work on + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + if (tabLabel == "noname") { + QMessageBox::critical(this, "**ERROR**", "For musrStep a real mlog/msr-file is needed."); + return; + } else if (tabLabel == "noname*") { + fileSaveAs(); + } else if (tabLabel.indexOf("*") > 0) { + fileSave(); + } + + // fill the command queue + QString cmd = fAdmin->getExecPath() + "/musrStep"; +#if defined(Q_OS_DARWIN) || defined(Q_OS_MAC) + cmd = QString("/Applications/musrStep.app/Contents/MacOS/musrStep"); +#endif + QString workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(); + QStringList arg; + QString str; + + // get file name and feed it to the command queue + str = *fFilenames.find( currentEditor() ); + int pos = str.lastIndexOf("/"); + if (pos != -1) + str.remove(0, pos+1); + arg << str; + + QProcess *proc = new QProcess(this); + if (proc == nullptr) { + QMessageBox::critical(0, "**ERROR**", "Couldn't invoke QProcess!"); + return; + } + + // handle return status of musrStep + connect(proc, static_cast(&QProcess::finished), + [=](int exitCode, QProcess::ExitStatus exitStatus){ exitStatusMusrSetSteps(exitCode, exitStatus); }); + + // make sure that the system environment variables are properly set + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); + proc->setProcessEnvironment(env); + proc->setWorkingDirectory(workDir); + proc->start(cmd, arg); + if (!proc->waitForStarted()) { + // error handling + QString msg(tr("Could not execute the output command: ")+cmd[0]); + QMessageBox::critical( 0, + tr("Fatal error"), + msg, + tr("Quit") ); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Swaps the currently open msr-file with its mlog-file (if present) and updates musredit accordingly. + */ +void PTextEdit::musrSwapMsrMlog() +{ + if ( !currentEditor() ) + return; + + // get current file name + QString currentFileName = *fFilenames.find( currentEditor() ); + QString swapFileName; + QString tempFileName = QString("__swap__.msr"); + + // check if it is a msr-, mlog-, or another file + int idx; + if ((idx = currentFileName.indexOf(".msr")) > 0) { // msr-file + swapFileName = currentFileName; + swapFileName.replace(idx, 5, ".mlog"); + } else if ((idx = currentFileName.indexOf(".mlog")) > 0) { // mlog-file + swapFileName = currentFileName; + swapFileName.replace(idx, 5, ".msr "); + swapFileName = swapFileName.trimmed(); + } else { // neither a msr- nor a mlog-file + QMessageBox::information( this, "musrSwapMsrMlog", + "This is neither a msr- nor a mlog-file, hence nothing to be swapped.\n", + QMessageBox::Ok ); + return; + } + + // check if the swapFile exists + if (!QFile::exists(swapFileName)) { + QString msg = "swap file '" + swapFileName + "' doesn't exist.\nCannot swap anything."; + QMessageBox::warning( this, "musrSwapMsrMlog", + msg, QMessageBox::Ok, QMessageBox::NoButton ); + return; + } + + // check if the file needs to be saved + if (fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") > 0) { // needs to be saved first + fileSave(); + } + + QMessageBox::information(0, "INFO", QString("Will now swap files: %1 <-> %2").arg(currentFileName).arg(swapFileName)); + + // swap files + + // copy currentFile -> tempFile + if (QFile::exists(tempFileName)) { + if (!QFile::remove(tempFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(tempFileName)); + return; + } + } + if (!QFile::copy(currentFileName, tempFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(currentFileName).arg(tempFileName)); + return; + } + // copy swapFile -> currentFile + if (!QFile::remove(currentFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(currentFileName)); + return; + } + if (!QFile::copy(swapFileName, currentFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(swapFileName).arg(currentFileName)); + return; + } + // copy tempFile -> swapFile + if (!QFile::remove(swapFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(swapFileName)); + return; + } + if (!QFile::copy(tempFileName, swapFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to copy %1 -> %2").arg(tempFileName).arg(swapFileName)); + return; + } + // clean up + if (!QFile::remove(tempFileName)) { + QMessageBox::critical(0, "ERROR", QString("failed to remove %1").arg(tempFileName)); + return; + } + + int currentIdx = fTabWidget->currentIndex(); + + // reload current file + fileClose(); + load(currentFileName); + + // check if swap file is open as well, and if yes, reload it + idx = -1; + for (int i=0; icount(); i++) { + if (fTabWidget->tabText(i).indexOf(swapFileName) >= 0) { + idx = i; + break; + } + } + if (idx >= 0) { // swap file is open + fTabWidget->setCurrentIndex(idx); + fileClose(); + load(swapFileName); + fTabWidget->setCurrentIndex(currentIdx); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Dumps the run header information of a selected muSR data file. + */ +void PTextEdit::musrDump() +{ + // select a muSR data filename + QString fileName = QFileDialog::getOpenFileName(this, tr("Select muSR Data File"), "./", tr("muSR Data Files (*.root *.bin *.msr *.nxs)")); + if (fileName.isEmpty()) + return; + + QVector cmd; + QString str = fAdmin->getExecPath() + "/dump_header"; + cmd.append(str); + cmd.append("-fn"); + cmd.append(fileName); + + PDumpOutputHandler dumpOutputHandler(cmd); + dumpOutputHandler.setModal(false); + dumpOutputHandler.exec(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts the help content browser. + */ +void PTextEdit::helpContents() +{ + PHelp *help = new PHelp(fAdmin->getHelpUrl("main")); + help->show(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts the help about info box. + */ +void PTextEdit::helpAbout() +{ + PMusrEditAbout *about = new PMusrEditAbout(); + about->show(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Starts the help about Qt info box. + */ +void PTextEdit::helpAboutQt() +{ + QMessageBox::aboutQt(this); +} + + +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::exitStatusMusrWiz + * @param exitCode + * @param exitStatus + */ +void PTextEdit::exitStatusMusrWiz(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus == QProcess::CrashExit) { + QMessageBox::critical(0, "**FATAL**", "musrWiz returned CrashExit."); + return; + } + + // dialog finished with reject + if (exitCode == 0) + return; + + // read .musrWiz.log + QProcessEnvironment procEnv = QProcessEnvironment::systemEnvironment(); + QString pathName = procEnv.value("HOME", ""); + pathName += "/.musrfit/musredit/musrWiz.log"; + QString errMsg; + ifstream fin(pathName.toLatin1().data(), ifstream::in); + if (!fin.is_open()) { + errMsg = QString("PTextEdit::exitStatusMusrWiz: couldn't read %1 file.").arg(pathName); + QMessageBox::critical(0, "**ERROR**", errMsg); + return; + } + char line[128]; + bool musrT0tag = false; + QString str, pathFileName(""); + while (fin.good()) { + fin.getline(line, 128); + str = line; + if (str.startsWith("path-file-name:")) { + pathFileName = str.mid(16); + } else if (str.startsWith("musrt0-tag: yes")) { + musrT0tag = true; + } + } + fin.close(); + + load(pathFileName); + + // in case there is a 1st empty tab "noname", remove it + QString tabStr = fTabWidget->tabText(0); + tabStr.remove('&'); // this is needed since the QTabWidget adds short-cut info as '&' to the tab name + if (tabStr == "noname") { // has to be the first, otherwise do nothing + fFileSystemWatcher->removePath("noname"); + + delete fTabWidget->widget(0); + } + + if (musrT0tag) + musrT0(); + + // remove musrWiz.log file + QFile logFile(pathName); + if (!logFile.remove()) { + errMsg = QString("PTextEdit::exitStatusMusrWiz: couldn't delete %1 file.").arg(pathName); + QMessageBox::critical(0, "**ERROR**", errMsg); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::existStatusMusrSetSteps + * @param exitCode + * @param exitStatus + */ +void PTextEdit::exitStatusMusrSetSteps(int exitCode, QProcess::ExitStatus exitStatus) +{ + if (exitStatus == QProcess::CrashExit) { + QMessageBox::critical(0, "**FATAL**", "musrStep returned CrashExit."); + return; + } + + // dialog finished with reject + if (exitCode == 0) + return; + + // dialog finished with save and quite, i.e. accept, hence reload + QString fln = *fFilenames.find( currentEditor() ); + int idx = fTabWidget->currentIndex(); + + fileClose(); + load(fln, idx); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: called when the font shall be changed. + * + * \param f font object + */ +void PTextEdit::fontChanged( const QFont &f ) +{ + fFontChanging = true; + fComboFont->lineEdit()->setText( f.family() ); + fComboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); + + if (!currentEditor()) + return; + + currentEditor()->setFont(f); + currentEditor()->setWindowModified(false); + currentEditor()->viewport()->setFocus(); + fFontChanging = false; +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: called when the text of the document has changed. It adds a star to the tab label if the + * document has been modified. + * + * \param forced + */ +void PTextEdit::textChanged(const bool forced) +{ + + if (!currentEditor()) + return; + + if (fFontChanging) + return; + + QString tabLabel = fTabWidget->tabText(fTabWidget->currentIndex()); + + if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") > 0) && + !currentEditor()->document()->isModified()) { + tabLabel.truncate(tabLabel.length()-1); + fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel); + } + + if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") < 0) && + currentEditor()->document()->isModified()) { + fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel+"*"); + } + + if ((fTabWidget->tabText(fTabWidget->currentIndex()).indexOf("*") < 0) && + forced) + fTabWidget->setTabText(fTabWidget->currentIndex(), tabLabel+"*"); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: called when the cursor position has changed. Updates the status bar with the current + * cursor position. + */ +void PTextEdit::currentCursorPosition() +{ + QString str; + int line=0, pos=0; + + pos = currentEditor()->textCursor().columnNumber(); + line = currentEditor()->textCursor().blockNumber(); + + str = QString("cursor pos: %1, %2").arg(line+1).arg(pos+1); + statusBar()->showMessage(str); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: handles the replaced command. + */ +void PTextEdit::replace() +{ + currentEditor()->insertPlainText(fFindReplaceData->replaceText); + + editFindNext(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: handles the repalce and close command. + */ +void PTextEdit::replaceAndClose() +{ + currentEditor()->insertPlainText(fFindReplaceData->replaceText); + + emit close(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: handles the replace all command. + */ +void PTextEdit::replaceAll() +{ + // set the cursor to the start of the document + currentEditor()->moveCursor(QTextCursor::Start); + + // construct search flags + QTextDocument::FindFlags flags = 0; + if (fFindReplaceData->caseSensitive) + flags |= QTextDocument::FindCaseSensitively; + else if (fFindReplaceData->findBackwards) + flags |= QTextDocument::FindBackward; + else if (fFindReplaceData->wholeWordsOnly) + flags |= QTextDocument::FindWholeWords; + + while (currentEditor()->find(fFindReplaceData->findText, flags)) { + currentEditor()->insertPlainText(fFindReplaceData->replaceText); + } + + emit close(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

SLOT: updates the fonts if the textedit tab has changed. + */ +void PTextEdit::applyFontSettings(int) +{ + QFont font(fAdmin->getFontName(), fAdmin->getFontSize()); + fontChanged(font); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Called when an open file is changing outside the editor (SLOT). + * + * \param fileName file name of the changed file. + */ +void PTextEdit::fileChanged(const QString &fileName) +{ + if (!fFileSystemWatcherActive) + return; + + fFileSystemWatcherActive = false; + + QString str = "File '" + fileName + "' changed on the system.\nDo you want to reload it?"; + int result = QMessageBox::question(this, "**INFO**", str, QMessageBox::Yes, QMessageBox::No); + if (result == QMessageBox::Yes) { + // find correct file + int idx = -1; + for (int i=0; icount(); i++) { + if (fTabWidget->tabText(i) == QFileInfo(fileName).fileName()) { + idx = i; + break; + } + } + + if (idx == -1) { + fileSystemWatcherActivation(); + return; + } + + // remove file from file system watcher + fFileSystemWatcher->removePath(fileName); + + // close tab + fTabWidget->removeTab(idx); + // load it + load(fileName, idx); + } + + fileSystemWatcherActivation(); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

Delayed reactivation of file system watcher, needed when saving files. At the moment the delay + * is set to 2000 ms. + */ +void PTextEdit::fileSystemWatcherActivation() +{ + if (fFileSystemWatcherTimeout.isActive()) + return; + + fFileSystemWatcherTimeout.singleShot(2000, this, SLOT(setFileSystemWatcherActive())); +} + +//---------------------------------------------------------------------------------------------------- +/** + *

slot needed to reactivate the file system watcher. It is called by PTextEdit::fileSystemWatcherActivation() + * after some given timeout. + */ +void PTextEdit::setFileSystemWatcherActive() +{ + fFileSystemWatcherActive = true; +} + +//---------------------------------------------------------------------------------------------------- +/** + * @brief PTextEdit::getTheme + */ +void PTextEdit::getTheme() +{ + fDarkTheme = false; // true if theme is dark + fDarkToolBarIcon = false; // needed for ubuntu dark since there the menu icons are dark, however the toolbar icons are plain! + + QString str = QIcon::themeName(); + + if (str.contains("dark", Qt::CaseInsensitive)) { + fDarkTheme = true; + if (str.contains("ubuntu", Qt::CaseInsensitive)) { + fDarkToolBarIcon = false; + } else { + fDarkToolBarIcon = true; + } + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

fill the recent file list in the menu. + */ +void PTextEdit::fillRecentFiles() +{ + for (int i=0; igetNumRecentFiles(); i++) { + fRecentFilesAction[i]->setText(fAdmin->getRecentFile(i)); + fRecentFilesAction[i]->setVisible(true); + } +} + +//---------------------------------------------------------------------------------------------------- +/** + *

run list is split (space separated) and expanded (start-end -> start, start+1, ..., end) to a list + * + * \param runListStr list to be split and expanded + * \param ok true if everything is fine; false if an error has been encountered + * + * \return fully expanded run list + */ +QStringList PTextEdit::getRunList(QString runListStr, bool &ok) +{ + QStringList result; + bool isInt; + QString str; + + ok = true; + + // first split space separated parts + QStringList tok = runListStr.split(' ', QString::SkipEmptyParts); + for (int i=0; i Date: Tue, 4 Apr 2017 17:27:03 +0200 Subject: [PATCH 25/43] added NPP/PPC for LEM TF --- .../instrument_defs/instrument_def_psi.xml | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml index f9aa287c..0c8dde48 100644 --- a/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml +++ b/src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml @@ -48,7 +48,7 @@ YYYY/lemYY_his_NNNN MUE4 MUSR-ROOT - + 8 0 63000 @@ -60,7 +60,19 @@ - + + 8 + 0 + 63000 + 200 1500 + + + + + + + + 4 0 63000 @@ -69,6 +81,15 @@ + + 4 + 0 + 63000 + 200 1500 + + + + 4 0 From e019efb272b7243d12a8697f45224915c11418a3 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 10 Apr 2017 15:57:43 +0200 Subject: [PATCH 26/43] slightly improved installation scheme. --- src/musredit_qt5/musrStep/musrStep.pro | 6 +++++- src/musredit_qt5/musrWiz/musrWiz.pro | 27 ++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/musredit_qt5/musrStep/musrStep.pro b/src/musredit_qt5/musrStep/musrStep.pro index 565b46c2..daedf7c5 100644 --- a/src/musredit_qt5/musrStep/musrStep.pro +++ b/src/musredit_qt5/musrStep/musrStep.pro @@ -44,7 +44,11 @@ macx { } # install path for the application -unix:target.path = $$(ROOTSYS)/bin +unix { + message( "Determined installation path: $${MUSRSTEP_INSTALL_PATH}" ) +} + +unix:target.path = $${MUSRSTEP_INSTALL_PATH} macx:target.path = /Applications win32:target.path = c:/musrfit/bin diff --git a/src/musredit_qt5/musrWiz/musrWiz.pro b/src/musredit_qt5/musrWiz/musrWiz.pro index 78db62d4..502533e7 100644 --- a/src/musredit_qt5/musrWiz/musrWiz.pro +++ b/src/musredit_qt5/musrWiz/musrWiz.pro @@ -1,8 +1,31 @@ TEMPLATE = app TARGET = musrWiz -# install path for the application -unix:target.path = $$(ROOTSYS)/bin +# install path for musrWiz +count( PREFIX, 1 ) { + MUSRWIZ_INSTALL_PATH = $${PREFIX}/bin +} +isEmpty( MUSREDIT_INSTALL_PATH ) { + MUSR_FIT_PATH = $$(MUSRFITPATH) + count( MUSR_FIT_PATH, 1 ) { + MUSRWIZ_INSTALL_PATH = $$(MUSRFITPATH) + } +} +isEmpty( MUSREDIT_INSTALL_PATH ) { + ROOT_SYS_PATH = $$(ROOTSYS) + count( ROOT_SYS_PATH, 1 ) { + MUSRWIZ_INSTALL_PATH = $$(ROOTSYS)/bin + } +} +isEmpty( MUSREDIT_INSTALL_PATH ) { + MUSRWIZ_INSTALL_PATH = /usr/local/bin +} + +unix { + message( "Determined installation path: $${MUSRWIZ_INSTALL_PATH}" ) +} + +unix:target.path = $${MUSRWIZ_INSTALL_PATH} macx:target.path = /Applications win32:target.path = c:/musrfit/bin From b1fce709593090ab9d70314e544c4685a8fd0ccd Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 10 Apr 2017 20:16:43 +0200 Subject: [PATCH 27/43] replace WebKit by WebEngine. Add a musrfit help icon. For now, not everywhere the help icon will be shown in the proper theme. --- src/musredit_qt5/musredit/PHelp.cpp | 22 ++- src/musredit_qt5/musredit/PHelp.h | 7 +- src/musredit_qt5/musredit/PTextEdit.cpp | 2 +- .../musredit/icons/musrfit-help-dark.svg | 171 ++++++++++++++++++ .../musredit/icons/musrfit-help-plain.svg | 171 ++++++++++++++++++ src/musredit_qt5/musredit/musredit.pro | 2 +- src/musredit_qt5/musredit/musredit.qrc | 2 + 7 files changed, 365 insertions(+), 12 deletions(-) create mode 100644 src/musredit_qt5/musredit/icons/musrfit-help-dark.svg create mode 100644 src/musredit_qt5/musredit/icons/musrfit-help-plain.svg diff --git a/src/musredit_qt5/musredit/PHelp.cpp b/src/musredit_qt5/musredit/PHelp.cpp index d8069257..5d261f41 100644 --- a/src/musredit_qt5/musredit/PHelp.cpp +++ b/src/musredit_qt5/musredit/PHelp.cpp @@ -28,7 +28,7 @@ ***************************************************************************/ #include -#include +#include #include #include @@ -41,13 +41,21 @@ * * \param url help url */ -PHelp::PHelp(const QString &url) +PHelp::PHelp(const QString &url, const bool isDarkTheme) : + fDarkTheme(isDarkTheme) { fProgress = 0; + QString iconName(""); + if (fDarkTheme) + iconName = QString(":/icons/musrfit-help-dark.svg"); + else + iconName = QString(":/icons/musrfit-help-plain.svg"); + setWindowIcon( QIcon( QPixmap(iconName) ) ); + QNetworkProxyFactory::setUseSystemConfiguration(true); - fView = new QWebView(this); + fView = new QWebEngineView(this); fView->load(QUrl(url)); connect(fView, SIGNAL(loadFinished(bool)), SLOT(adjustLocation())); connect(fView, SIGNAL(titleChanged(QString)), SLOT(adjustTitle())); @@ -59,10 +67,10 @@ PHelp::PHelp(const QString &url) connect(fLocationEdit, SIGNAL(returnPressed()), SLOT(changeLocation())); QToolBar *toolBar = addToolBar(tr("Navigation")); - toolBar->addAction(fView->pageAction(QWebPage::Back)); - toolBar->addAction(fView->pageAction(QWebPage::Forward)); - toolBar->addAction(fView->pageAction(QWebPage::Reload)); - toolBar->addAction(fView->pageAction(QWebPage::Stop)); + toolBar->addAction(fView->pageAction(QWebEnginePage::Back)); + toolBar->addAction(fView->pageAction(QWebEnginePage::Forward)); + toolBar->addAction(fView->pageAction(QWebEnginePage::Reload)); + toolBar->addAction(fView->pageAction(QWebEnginePage::Stop)); toolBar->addWidget(fLocationEdit); QMenu *exitMenu = menuBar()->addMenu(tr("&File")); diff --git a/src/musredit_qt5/musredit/PHelp.h b/src/musredit_qt5/musredit/PHelp.h index cc66bb02..b2335009 100644 --- a/src/musredit_qt5/musredit/PHelp.h +++ b/src/musredit_qt5/musredit/PHelp.h @@ -32,7 +32,7 @@ #include -class QWebView; +class QWebEngineView; QT_BEGIN_NAMESPACE class QLineEdit; QT_END_NAMESPACE @@ -47,7 +47,7 @@ class PHelp : public QMainWindow Q_OBJECT public: - PHelp(const QString &url); + PHelp(const QString &url, const bool isDarkTheme=false); virtual ~PHelp(); protected slots: @@ -59,7 +59,8 @@ class PHelp : public QMainWindow void finishLoading(bool); private: - QWebView *fView; ///< web viewer + bool fDarkTheme; + QWebEngineView *fView; ///< web viewer QLineEdit *fLocationEdit; ///< url address line edit int fProgress; ///< progress value (0-100) while loading an url }; diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index 077ad0b4..ee4d3b7c 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -2709,7 +2709,7 @@ void PTextEdit::musrDump() */ void PTextEdit::helpContents() { - PHelp *help = new PHelp(fAdmin->getHelpUrl("main")); + PHelp *help = new PHelp(fAdmin->getHelpUrl("main"), fDarkTheme); help->show(); } diff --git a/src/musredit_qt5/musredit/icons/musrfit-help-dark.svg b/src/musredit_qt5/musredit/icons/musrfit-help-dark.svg new file mode 100644 index 00000000..de27d7cd --- /dev/null +++ b/src/musredit_qt5/musredit/icons/musrfit-help-dark.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + + diff --git a/src/musredit_qt5/musredit/icons/musrfit-help-plain.svg b/src/musredit_qt5/musredit/icons/musrfit-help-plain.svg new file mode 100644 index 00000000..75338437 --- /dev/null +++ b/src/musredit_qt5/musredit/icons/musrfit-help-plain.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + + diff --git a/src/musredit_qt5/musredit/musredit.pro b/src/musredit_qt5/musredit/musredit.pro index 2a15854c..3650eb2a 100644 --- a/src/musredit_qt5/musredit/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -71,7 +71,7 @@ CONFIG += qt \ QT += widgets QT += xml -QT += webkitwidgets +QT += webenginewidgets QT += network QT += printsupport QT += svg diff --git a/src/musredit_qt5/musredit/musredit.qrc b/src/musredit_qt5/musredit/musredit.qrc index 3dbc000d..25d00e80 100644 --- a/src/musredit_qt5/musredit/musredit.qrc +++ b/src/musredit_qt5/musredit/musredit.qrc @@ -32,6 +32,8 @@ icons/musrchisq-dark.svg icons/musrfit-plain.svg icons/musrfit-dark.svg + icons/musrfit-help-plain.svg + icons/musrfit-help-dark.svg icons/msr2data-plain.svg icons/msr2data-dark.svg icons/musrprefs-plain.svg From bfbdb5af4b60a1e21a4c8b04f25bdb3ce2cc75f0 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 11 Apr 2017 10:38:08 +0200 Subject: [PATCH 28/43] allow both QtWebKit and QtWebEngine since a lot of distros are not ready yet for QtWebEngine. --- src/musredit_qt5/musredit/PHelp.cpp | 15 +++++++++++++++ src/musredit_qt5/musredit/PHelp.h | 8 ++++++++ src/musredit_qt5/musredit/musredit.pro | 20 +++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/PHelp.cpp b/src/musredit_qt5/musredit/PHelp.cpp index 5d261f41..092925af 100644 --- a/src/musredit_qt5/musredit/PHelp.cpp +++ b/src/musredit_qt5/musredit/PHelp.cpp @@ -28,7 +28,11 @@ ***************************************************************************/ #include +#ifdef HAVE_QT_WEB_ENGINE #include +#else +#include +#endif #include #include @@ -55,7 +59,11 @@ PHelp::PHelp(const QString &url, const bool isDarkTheme) : QNetworkProxyFactory::setUseSystemConfiguration(true); +#ifdef HAVE_QT_WEB_ENGINE fView = new QWebEngineView(this); +#else + fView = new QWebView(this); +#endif fView->load(QUrl(url)); connect(fView, SIGNAL(loadFinished(bool)), SLOT(adjustLocation())); connect(fView, SIGNAL(titleChanged(QString)), SLOT(adjustTitle())); @@ -67,10 +75,17 @@ PHelp::PHelp(const QString &url, const bool isDarkTheme) : connect(fLocationEdit, SIGNAL(returnPressed()), SLOT(changeLocation())); QToolBar *toolBar = addToolBar(tr("Navigation")); +#ifdef HAVE_QT_WEB_ENGINE toolBar->addAction(fView->pageAction(QWebEnginePage::Back)); toolBar->addAction(fView->pageAction(QWebEnginePage::Forward)); toolBar->addAction(fView->pageAction(QWebEnginePage::Reload)); toolBar->addAction(fView->pageAction(QWebEnginePage::Stop)); +#else + toolBar->addAction(fView->pageAction(QWebPage::Back)); + toolBar->addAction(fView->pageAction(QWebPage::Forward)); + toolBar->addAction(fView->pageAction(QWebPage::Reload)); + toolBar->addAction(fView->pageAction(QWebPage::Stop)); +#endif toolBar->addWidget(fLocationEdit); QMenu *exitMenu = menuBar()->addMenu(tr("&File")); diff --git a/src/musredit_qt5/musredit/PHelp.h b/src/musredit_qt5/musredit/PHelp.h index b2335009..5b1f7b70 100644 --- a/src/musredit_qt5/musredit/PHelp.h +++ b/src/musredit_qt5/musredit/PHelp.h @@ -32,7 +32,11 @@ #include +#ifdef HAVE_QT_WEB_ENGINE class QWebEngineView; +#else +class QWebView; +#endif QT_BEGIN_NAMESPACE class QLineEdit; QT_END_NAMESPACE @@ -60,7 +64,11 @@ class PHelp : public QMainWindow private: bool fDarkTheme; +#ifdef HAVE_QT_WEB_ENGINE QWebEngineView *fView; ///< web viewer +#else + QWebView *fView; ///< web viewer +#endif QLineEdit *fLocationEdit; ///< url address line edit int fProgress; ///< progress value (0-100) while loading an url }; diff --git a/src/musredit_qt5/musredit/musredit.pro b/src/musredit_qt5/musredit/musredit.pro index 3650eb2a..ba2f3e95 100644 --- a/src/musredit_qt5/musredit/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -1,6 +1,19 @@ TEMPLATE = app TARGET = musredit +packagesExist(Qt5WebEngine) { + message("Qt5WebEngine found") + DEFINES += HAVE_QT_WEB_ENGINE + HAVE_QT_WEB_ENGINE = 1 +} +packagesExist(QtWebKit) { + message("QtWebKit found") + HAVE_QT_WEB_ENGINE = 0 +} +isEmpty(HAVE_QT_WEB_ENGINE) { + message("Neither QtWebKit nor Qt5WebEngine found. Something is wrong, please check") +} + QMAKE_CXXFLAGS += -std=c++11 # install path for musredit @@ -71,7 +84,12 @@ CONFIG += qt \ QT += widgets QT += xml -QT += webenginewidgets +isEqual(HAVE_QT_WEB_ENGINE, 1) { + QT += webenginewidgets +} +isEqual(HAVE_QT_WEB_ENGINE, 0) { + QT += webkitwidgets +} QT += network QT += printsupport QT += svg From 815190d316d152b10f5323ddfac9df2de757ff75 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 11 Apr 2017 11:35:43 +0200 Subject: [PATCH 29/43] fixed copy/paste error --- src/musredit_qt5/musrWiz/musrWiz.pro | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/musredit_qt5/musrWiz/musrWiz.pro b/src/musredit_qt5/musrWiz/musrWiz.pro index 502533e7..8cd1eb7f 100644 --- a/src/musredit_qt5/musrWiz/musrWiz.pro +++ b/src/musredit_qt5/musrWiz/musrWiz.pro @@ -5,19 +5,19 @@ TARGET = musrWiz count( PREFIX, 1 ) { MUSRWIZ_INSTALL_PATH = $${PREFIX}/bin } -isEmpty( MUSREDIT_INSTALL_PATH ) { +isEmpty( MUSRWIZ_INSTALL_PATH ) { MUSR_FIT_PATH = $$(MUSRFITPATH) count( MUSR_FIT_PATH, 1 ) { MUSRWIZ_INSTALL_PATH = $$(MUSRFITPATH) } } -isEmpty( MUSREDIT_INSTALL_PATH ) { +isEmpty( MUSRWIZ_INSTALL_PATH ) { ROOT_SYS_PATH = $$(ROOTSYS) count( ROOT_SYS_PATH, 1 ) { MUSRWIZ_INSTALL_PATH = $$(ROOTSYS)/bin } } -isEmpty( MUSREDIT_INSTALL_PATH ) { +isEmpty( MUSRWIZ_INSTALL_PATH ) { MUSRWIZ_INSTALL_PATH = /usr/local/bin } From f6741a470a8d4f6989cfe883b81d815edd49d76f Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 11 Apr 2017 11:36:55 +0200 Subject: [PATCH 30/43] slightly adopted for macOS --- src/musredit_qt5/musredit/musredit.pro | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/musredit.pro b/src/musredit_qt5/musredit/musredit.pro index ba2f3e95..8e60c6ea 100644 --- a/src/musredit_qt5/musredit/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -10,8 +10,13 @@ packagesExist(QtWebKit) { message("QtWebKit found") HAVE_QT_WEB_ENGINE = 0 } +# Mac calls it Qt5WebKit, hence +packagesExist(Qt5WebKit) { + message("Qt5WebKit found") + HAVE_QT_WEB_ENGINE = 0 +} isEmpty(HAVE_QT_WEB_ENGINE) { - message("Neither QtWebKit nor Qt5WebEngine found. Something is wrong, please check") + message("Neither Qt(5)WebKit nor Qt5WebEngine found. Something is wrong, please check") } QMAKE_CXXFLAGS += -std=c++11 From de3d4ca932b7b60ee5114c1a62eaea516bb2e590 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 11 Apr 2017 18:52:02 +0200 Subject: [PATCH 31/43] adopted for the case where both QtWebKit and QtWebEngine is installed. --- src/musredit_qt5/musredit/musredit.pro | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/musredit_qt5/musredit/musredit.pro b/src/musredit_qt5/musredit/musredit.pro index 8e60c6ea..8c6be817 100644 --- a/src/musredit_qt5/musredit/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -6,14 +6,16 @@ packagesExist(Qt5WebEngine) { DEFINES += HAVE_QT_WEB_ENGINE HAVE_QT_WEB_ENGINE = 1 } -packagesExist(QtWebKit) { - message("QtWebKit found") - HAVE_QT_WEB_ENGINE = 0 -} -# Mac calls it Qt5WebKit, hence -packagesExist(Qt5WebKit) { - message("Qt5WebKit found") - HAVE_QT_WEB_ENGINE = 0 +isEmpty( HAVE_QT_WEB_ENGINE ) { + packagesExist(QtWebKit) { + message("QtWebKit found") + HAVE_QT_WEB_ENGINE = 0 + } + # Mac calls it Qt5WebKit, hence + packagesExist(Qt5WebKit) { + message("Qt5WebKit found") + HAVE_QT_WEB_ENGINE = 0 + } } isEmpty(HAVE_QT_WEB_ENGINE) { message("Neither Qt(5)WebKit nor Qt5WebEngine found. Something is wrong, please check") @@ -89,12 +91,12 @@ CONFIG += qt \ QT += widgets QT += xml -isEqual(HAVE_QT_WEB_ENGINE, 1) { - QT += webenginewidgets -} isEqual(HAVE_QT_WEB_ENGINE, 0) { QT += webkitwidgets } +isEqual(HAVE_QT_WEB_ENGINE, 1) { + QT += webenginewidgets +} QT += network QT += printsupport QT += svg From a1c5d1d4d9daaa09d1bfc7251951782669b86cde Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 24 Apr 2017 22:42:01 +0200 Subject: [PATCH 32/43] set proper action. --- src/musredit_qt5/musredit/PTextEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index ee4d3b7c..199d40be 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -750,7 +750,7 @@ void PTextEdit::setupMusrActions() a = new QAction( QIcon( QPixmap(iconName) ), tr( "&T0" ), this ); connect( a, SIGNAL( triggered() ), this, SLOT( musrT0() ) ); } - tb->addAction(a); + tb->addAction(fMusrT0Action); fMusrT0Action->setEnabled(fAdmin->getEnableMusrT0Flag()); if (fDarkTheme) From fdf604fff207fa684089b9a89659a724e835f4c0 Mon Sep 17 00:00:00 2001 From: Thomas Prokscha Date: Wed, 26 Apr 2017 17:49:15 +0200 Subject: [PATCH 33/43] Changed installation directory from ROOTSYS to /usr/local --- src/tests/MuTransition/Makefile.PSimulateMuTransition | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tests/MuTransition/Makefile.PSimulateMuTransition b/src/tests/MuTransition/Makefile.PSimulateMuTransition index ef5a1fe8..93d1a9ae 100644 --- a/src/tests/MuTransition/Makefile.PSimulateMuTransition +++ b/src/tests/MuTransition/Makefile.PSimulateMuTransition @@ -52,6 +52,9 @@ LDFLAGS = -g SOFLAGS = -dynamic endif +# installation directory +INSTALL_DIR = /usr/local + # the output from the root-config script: CXXFLAGS += $(ROOTCFLAGS) LDFLAGS += @@ -95,8 +98,8 @@ PSimulateMuTransitionDict.cpp: PSimulateMuTransition.h PSimulateMuTransitionLink install: all @echo "Installing shared lib: libPSimulateMuTransition.so" ifeq ($(OS),LINUX) - cp -pv $(SHLIB) $(ROOTSYS)/lib - cp -pv PSimulateMuTransition.h $(ROOTSYS)/include + cp -pv $(SHLIB) $(INSTALL_DIR)/lib + cp -pv PSimulateMuTransition.h $(INSTALL_DIR)/include # for root6 - cp -pv PSimulateMuTransitionDict_rdict.pcm $(ROOTSYS)/lib + cp -pv PSimulateMuTransitionDict_rdict.pcm $(INSTALL_DIR)/lib endif From b4aaa2bc154f84d50bb6792e5379c5ada7157a21 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Thu, 4 May 2017 15:25:42 +0200 Subject: [PATCH 34/43] add some additional output when minos is called. --- src/classes/PFitter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/classes/PFitter.cpp b/src/classes/PFitter.cpp index c921c250..b124490d 100644 --- a/src/classes/PFitter.cpp +++ b/src/classes/PFitter.cpp @@ -1343,6 +1343,8 @@ Bool_t PFitter::ExecuteMinos() // the 2nd condition is from an all together unused variable // the 3rd condition is a variable fixed via the FIX command if ((fMnUserParams.Error(i) != 0.0) && (fRunInfo->ParameterInUse(i) != 0) && (!fMnUserParams.Parameters().at(i).IsFixed())) { + cout << ">> PFitter::ExecuteMinos(): calculate errors for " << fParams[i].fName << endl; + // 1-sigma MINOS errors ROOT::Minuit2::MinosError err = minos.Minos(i); From fb3dc055059d0798dd8bd23aa9f850c14b1efcc5 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 7 May 2017 11:13:55 +0200 Subject: [PATCH 35/43] adopted to the case where ROOT is installed from the repo. There are still issues: the shared libs cannot loaded from within the function. The path handling needs to be sorted out. --- .../Makefile.PAddPoissonNoise | 7 + src/tests/analyticFakeData/analyticFakeData.C | 170 ++++++++++-------- 2 files changed, 102 insertions(+), 75 deletions(-) diff --git a/src/tests/analyticFakeData/Makefile.PAddPoissonNoise b/src/tests/analyticFakeData/Makefile.PAddPoissonNoise index 5ce9caeb..3744fdd4 100644 --- a/src/tests/analyticFakeData/Makefile.PAddPoissonNoise +++ b/src/tests/analyticFakeData/Makefile.PAddPoissonNoise @@ -94,6 +94,13 @@ PAddPoissonNoiseDict.cpp: PAddPoissonNoise.h PAddPoissonNoiseLinkDef.h install: all @echo "Installing shared lib: libPAddPoissonNoise.so ( you must be root ;-) )" ifeq ($(OS),LINUX) +ifeq ($(ROOTSYS),/usr) + cp -pv $(SHLIB) $(ROOTSYS)/lib64/root + cp -pv PAddPoissonNoiseDict_rdict.pcm $(ROOTSYS)/lib64/root + cp -pv PAddPoissonNoise.h $(ROOTSYS)/include/root +else cp -pv $(SHLIB) $(ROOTSYS)/lib + cp -pv PAddPoissonNoiseDict_rdict.pcm $(ROOTSYS)/lib cp -pv PAddPoissonNoise.h $(ROOTSYS)/include endif +endif diff --git a/src/tests/analyticFakeData/analyticFakeData.C b/src/tests/analyticFakeData/analyticFakeData.C index 65a954da..2e641b1e 100644 --- a/src/tests/analyticFakeData/analyticFakeData.C +++ b/src/tests/analyticFakeData/analyticFakeData.C @@ -31,12 +31,18 @@ #include using namespace std; +#include "/usr/local/include/TLemRunHeader.h" +#include "/usr/local/include/TMusrRunHeader.h" +#include "/usr/include/root/PAddPoissonNoise.h" + void analyticFakeData(const TString type, UInt_t runNo) { // load library - gSystem->Load("$ROOTSYS/lib/libTLemRunHeader"); - gSystem->Load("$ROOTSYS/lib/libTMusrRunHeader"); - gSystem->Load("$ROOTSYS/lib/libPAddPoissonNoise"); +/* + cout << ">> loading libTLemRunHeader: " << gSystem->Load("/usr/local/lib/libTLemRunHeader") << endl; + cout << ">> loading libTMusrRunHeader: " << gSystem->Load("/usr/local/lib/libTMusrRunHeader") << endl; + cout << ">> loading libPAddPoissonNoise: " << gSystem->Load("$ROOTSYS/lib64/root/libPAddPoissonNoise") << endl; +*/ // generate data TFolder *histosFolder; @@ -44,7 +50,7 @@ void analyticFakeData(const TString type, UInt_t runNo) TFolder *runHeader; TFolder *runInfo; UInt_t offset = 0; - const UInt_t noOfHistos = 4; + const UInt_t noOfHistos = 16; const UInt_t noOfChannels = 426600; const Double_t timeResolution = 0.025; // ns TRandom3 rand; @@ -63,95 +69,101 @@ void analyticFakeData(const TString type, UInt_t runNo) t0.push_back(5000.0); cout << ">> define header" << endl; + TLemRunHeader *headerOld; + TMusrRunHeader *headerNew; + TMusrRunPhysicalQuantity prop; if (!type.CompareTo("TLemRunHeader")) { // feed run info header runInfo = gROOT->GetRootFolder()->AddFolder("RunInfo", "LEM RunInfo"); gROOT->GetListOfBrowsables()->Add(runInfo, "RunInfo"); - TLemRunHeader *header = new TLemRunHeader(); + headerOld = new TLemRunHeader(); tstr.Form("0%d - test", runNo); - header->SetRunTitle(tstr); - header->SetLemSetup("trivial"); - header->SetRunNumber(runNo); - header->SetStartTime(0); - header->SetStopTime(1); - header->SetModeratorHV(32.0, 0.01); - header->SetSampleHV(0.0, 0.01); - header->SetImpEnergy(31.8); - header->SetSampleTemperature(0.2, 0.001); - header->SetSampleBField(-1.0, 0.1); - header->SetTimeResolution(timeResolution); - header->SetNChannels(noOfChannels); - header->SetNHist(8); - header->SetCuts("none"); - header->SetModerator("none"); - header->SetTimeZero(t0); - runInfo->Add(header); //add header to RunInfo folder + headerOld->SetRunTitle(tstr); + headerOld->SetLemSetup("trivial"); + headerOld->SetRunNumber(runNo); + headerOld->SetStartTime(0); + headerOld->SetStopTime(1); + headerOld->SetModeratorHV(32.0, 0.01); + headerOld->SetSampleHV(0.0, 0.01); + headerOld->SetImpEnergy(31.8); + headerOld->SetSampleTemperature(0.2, 0.001); + headerOld->SetSampleBField(-1.0, 0.1); + headerOld->SetTimeResolution(timeResolution); + headerOld->SetNChannels(noOfChannels); + headerOld->SetNHist(8); + headerOld->SetCuts("none"); + headerOld->SetModerator("none"); + Double_t *tt0 = new Double_t[noOfHistos]; + for (Int_t i=0; iSetTimeZero(tt0); + delete [] tt0; + runInfo->Add(headerOld); //add header to RunInfo folder } else { // TMusrRunHeader runHeader = gROOT->GetRootFolder()->AddFolder("RunHeader", "MusrRoot RunHeader"); gROOT->GetListOfBrowsables()->Add(runHeader, "RunHeader"); - TMusrRunHeader *header = new TMusrRunHeader(true); - TMusrRunPhysicalQuantity prop; + headerNew = new TMusrRunHeader(true); // 1st write all the required RunInfo entries - header->Set("RunInfo/Generic Validator URL", "http://lmu.web.psi.ch/facilities/software/MusrRoot/validation/MusrRoot.xsd"); - header->Set("RunInfo/Specific Validator URL", "http://lmu.web.psi.ch/facilities/software/MusrRoot/validation/MusrRootHAL9500.xsd"); - header->Set("RunInfo/Generator", "analyticFakeData"); - header->Set("RunInfo/File Name", fileName); + headerNew->Set("RunInfo/Generic Validator URL", "http://lmu.web.psi.ch/facilities/software/MusrRoot/validation/MusrRoot.xsd"); + headerNew->Set("RunInfo/Specific Validator URL", "http://lmu.web.psi.ch/facilities/software/MusrRoot/validation/MusrRootHAL9500.xsd"); + headerNew->Set("RunInfo/Generator", "analyticFakeData"); + headerNew->Set("RunInfo/File Name", fileName); tstr.Form("0%d - test", runNo); - header->Set("RunInfo/Run Title", tstr); - header->Set("RunInfo/Run Number", (Int_t)runNo); - header->Set("RunInfo/Start Time", "1970-01-01 00:00:00"); - header->Set("RunInfo/Stop Time", "1970-01-01 00:00:02"); + headerNew->Set("RunInfo/Run Title", tstr); + headerNew->Set("RunInfo/Run Number", (Int_t)runNo); + headerNew->Set("RunInfo/Start Time", "1970-01-01 00:00:00"); + headerNew->Set("RunInfo/Stop Time", "1970-01-01 00:00:02"); prop.Set("Run Duration", 2, "sec"); - header->Set("RunInfo/Run Duration", prop); - header->Set("RunInfo/Laboratory", "PSI"); - header->Set("RunInfo/Instrument", "virtual"); + headerNew->Set("RunInfo/Run Duration", prop); + headerNew->Set("RunInfo/Laboratory", "PSI"); + headerNew->Set("RunInfo/Instrument", "virtual"); prop.Set("Muon Beam Momentum", 28.1, "MeV/c"); - header->Set("RunInfo/Muon Beam Momentum", prop); - header->Set("RunInfo/Muon Species", "positive muon"); - header->Set("RunInfo/Muon Source", "computer"); - header->Set("RunInfo/Setup", "virtual"); - header->Set("RunInfo/Comment", "fake data runs"); - header->Set("RunInfo/Sample Name", "virtual"); + headerNew->Set("RunInfo/Muon Beam Momentum", prop); + headerNew->Set("RunInfo/Muon Species", "positive muon"); + headerNew->Set("RunInfo/Muon Source", "computer"); + headerNew->Set("RunInfo/Setup", "virtual"); + headerNew->Set("RunInfo/Comment", "fake data runs"); + headerNew->Set("RunInfo/Sample Name", "virtual"); prop.Set("Sample Temperature", 1.0, "mK"); - header->Set("RunInfo/Sample Temperature", prop); + headerNew->Set("RunInfo/Sample Temperature", prop); prop.Set("Sample Magnetic Field", 40.0, "T"); - header->Set("RunInfo/Sample Magnetic Field", prop); + headerNew->Set("RunInfo/Sample Magnetic Field", prop); prop.Set("Sample Temperature", 1.0, "mK"); - header->Set("RunInfo/No of Histos", (Int_t)noOfHistos); + headerNew->Set("RunInfo/No of Histos", (Int_t)noOfHistos); prop.Set("Time Resolution", timeResolution, "ns"); - header->Set("RunInfo/Time Resolution", prop); + headerNew->Set("RunInfo/Time Resolution", prop); vector ivec; ivec.push_back(0); - header->Set("RunInfo/RedGreen Offsets", ivec); + headerNew->Set("RunInfo/RedGreen Offsets", ivec); offset = 1; // 2nd write all the required DetectorInfo entries - for (UInt_t i=0; i<4; i++) { + for (UInt_t i=0; iSet(label, tstr1); + headerNew->Set(label, tstr1); label = tstr + TString("Histo No"); - header->Set(label, (Int_t)(i+offset)); + headerNew->Set(label, (Int_t)(i+offset)); label = tstr + TString("Histo Length"); - header->Set(label, (Int_t)noOfChannels); + headerNew->Set(label, (Int_t)noOfChannels); label = tstr + TString("Time Zero Bin"); - header->Set(label, t0[i]); + headerNew->Set(label, t0[i]); label = tstr + TString("First Good Bin"); - header->Set(label, (Int_t)t0[i]); + headerNew->Set(label, (Int_t)t0[i]); label = tstr + TString("Last Good Bin"); - header->Set(label, (Int_t)noOfChannels); + headerNew->Set(label, (Int_t)noOfChannels); } // 3rd write required SampleEnvironmentInfo entries - header->Set("SampleEnvironmentInfo/Cryo", "virtual"); + headerNew->Set("SampleEnvironmentInfo/Cryo", "virtual"); // 4th write required MagneticFieldEnvironmentInfo entries - header->Set("MagneticFieldEnvironmentInfo/Magnet Name", "virtual"); + headerNew->Set("MagneticFieldEnvironmentInfo/Magnet Name", "virtual"); // 5th write required BeamlineInfo entries - header->Set("BeamlineInfo/Name", "piE3"); + headerNew->Set("BeamlineInfo/Name", "piE3"); } // create histos @@ -176,52 +188,56 @@ void analyticFakeData(const TString type, UInt_t runNo) cout << ">> define phase" << endl; vector phase; for (UInt_t i=0; i> write fake header for TMusrRoot" << endl; if (type.CompareTo("TLemRunHeader")) { TDoubleVector dvec; - header->Set("FakeFct/Def", "N0 exp(-t/tau_mu) [1 + sum_{k=0}^2 frac_k A_0 exp(-1/2 (t sigma_k)^2) cos(gamma_mu B_k t + phi)] + bkg"); +// headerNew->Set("FakeFct/Def", "N0 exp(-t/tau_mu) [1 + sum_{k=0}^2 frac_k A_0 exp(-1/2 (t sigma_k)^2) cos(gamma_mu B_k t + phi)] + bkg"); + headerNew->Set("FakeFct/Def", "N0 exp(-t/tau_mu) [1 + A_0 exp(-1/2 (t sigma0)^2) cos(gamma_mu B0 t + phi)] + bkg"); for (UInt_t i=0; iSet("FakeFct/N0", dvec); + headerNew->Set("FakeFct/N0", dvec); dvec.clear(); for (UInt_t i=0; iSet("FakeFct/bkg", dvec); + headerNew->Set("FakeFct/bkg", dvec); dvec.clear(); for (UInt_t i=0; iSet("FakeFct/A", dvec); + headerNew->Set("FakeFct/A", dvec); dvec.clear(); for (UInt_t i=0; iSet("FakeFct/phase", dvec); + headerNew->Set("FakeFct/phase", dvec); prop.Set("B0", bb0, "G"); - header->Set("FakeFct/B0", prop); + headerNew->Set("FakeFct/B0", prop); prop.Set("rate0", 1.0e3*rate0, "1/usec"); - header->Set("FakeFct/rate0", prop); - header->Set("FakeFct/frac0", frac0); + headerNew->Set("FakeFct/rate0", prop); +/* + headerNew->Set("FakeFct/frac0", frac0); prop.Set("B1", bb1, "G"); - header->Set("FakeFct/B1", prop); + headerNew->Set("FakeFct/B1", prop); prop.Set("rate1", 1.0e3*rate1, "1/usec"); - header->Set("FakeFct/rate1", prop); - header->Set("FakeFct/frac1", frac1); + headerNew->Set("FakeFct/rate1", prop); + headerNew->Set("FakeFct/frac1", frac1); prop.Set("B2", bb2, "G"); - header->Set("FakeFct/B2", prop); + headerNew->Set("FakeFct/B2", prop); prop.Set("rate2", 1.0e3*rate2, "1/usec"); - header->Set("FakeFct/rate2", prop); + headerNew->Set("FakeFct/rate2", prop); +*/ } cout << ">> create histo objects" << endl; @@ -244,10 +260,14 @@ void analyticFakeData(const TString type, UInt_t runNo) histo[i]->SetBinContent(j+1, bkg[i]); } else { time = (Double_t)(j-t0[i])*timeResolution; +/* dval = (Double_t)n0[i]*TMath::Exp(-time/tau)*(1.0+ frac0*a0[i]*TMath::Exp(-0.5*TMath::Power(time*rate0,2))*TMath::Cos(TMath::TwoPi()*gamma*bb0*time+phase[i]) + frac1*a0[i]*TMath::Exp(-0.5*TMath::Power(time*rate1,2))*TMath::Cos(TMath::TwoPi()*gamma*bb1*time+phase[i]) + (1.0-frac0-frac1)*a0[i]*TMath::Exp(-0.5*TMath::Power(time*rate2,2))*TMath::Cos(TMath::TwoPi()*gamma*bb2*time+phase[i]))+(Double_t)bkg[i]; +*/ + dval = (Double_t)n0[i]*TMath::Exp(-time/tau)*(1.0+ + TMath::Exp(-0.5*TMath::Power(time*rate0,2))*TMath::Cos(TMath::TwoPi()*gamma*bb0*time+phase[i]))+(Double_t)bkg[i]; histo[i]->SetBinContent(j+1, dval); } } @@ -298,7 +318,7 @@ void analyticFakeData(const TString type, UInt_t runNo) if (!type.CompareTo("TLemRunHeader")) { runInfo->Write(); } else { - if (header->FillFolder(runHeader)) + if (headerNew->FillFolder(runHeader)) runHeader->Write(); } From ceaf7d0c6a40db589d27867d1ddb438ab8c03f9c Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Mon, 8 May 2017 09:48:14 +0200 Subject: [PATCH 36/43] added missing export tags for RRF. --- src/classes/PMusrCanvas.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index e335fac5..bf61d470 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -1582,7 +1582,9 @@ void PMusrCanvas::ExportData(const Char_t *fileName) switch (fPlotType) { case MSR_PLOT_SINGLE_HISTO: + case MSR_PLOT_SINGLE_HISTO_RRF: case MSR_PLOT_ASYM: + case MSR_PLOT_ASYM_RRF: case MSR_PLOT_MU_MINUS: if (fDifferenceView) { // difference view plot switch (fCurrentPlotView) { From c17924a7424581b90f3bca4f64e15626c334fdff Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Fri, 12 May 2017 21:39:05 +0200 Subject: [PATCH 37/43] moved all the xml-files into the resources. This make it much easier to handle if musrWiz is not locally installed. --- src/musredit_qt5/musrWiz/PAdmin.cpp | 116 ++++++++++++++++++--------- src/musredit_qt5/musrWiz/PAdmin.h | 2 +- src/musredit_qt5/musrWiz/musrWiz.pro | 30 ------- src/musredit_qt5/musrWiz/musrWiz.qrc | 4 + 4 files changed, 82 insertions(+), 70 deletions(-) diff --git a/src/musredit_qt5/musrWiz/PAdmin.cpp b/src/musredit_qt5/musrWiz/PAdmin.cpp index e9e27101..d6ec9d73 100644 --- a/src/musredit_qt5/musrWiz/PAdmin.cpp +++ b/src/musredit_qt5/musrWiz/PAdmin.cpp @@ -888,7 +888,6 @@ bool PMusrWizDefaultXMLParser::fatalError( const QXmlParseException & exception PAdmin::PAdmin() : QObject() { QString path, fln, pathFln; - bool found = false; int count = 0; fValid = true; @@ -900,51 +899,30 @@ PAdmin::PAdmin() : QObject() // 2nd: check $HOME/.musrfit/musrWiz/musrWiz.xml path = std::getenv("HOME"); pathFln = path + "/.musrfit/musrWiz/musrWiz.xml"; - if (QFile::exists(pathFln)) { - found = true; - } - } else { - found = true; - } - if (found) { if (loadMusrWizDefault(pathFln)) { QMessageBox::warning(0, "WARNING", "Couldn't find musrWiz.xml file."); } } // load musrfit funcs - found = false; // 1st: check local directory pathFln = QString("./musrfit_funcs.xml"); if (!QFile::exists(pathFln)) { // 2nd: check $HOME/.musrfit/musrWiz/musrfit_funcs.xml path = std::getenv("HOME"); pathFln = path + "/.musrfit/musrWiz/musrfit_funcs.xml"; - if (QFile::exists(pathFln)) { - found = true; + if (loadMusrfitFunc(pathFln)) { + fValid = false; + QMessageBox::critical(0, "FATAL ERROR", "Couldn't find any musrfit function definitions."); + return; } - } else { - found = true; - } - if (!found) { - fValid = false; - QMessageBox::critical(0, "FATAL ERROR", "Couldn't find musrfit_funcs.xml."); - return; - } - if (loadMusrfitFunc(pathFln)) { - fValid = false; - QMessageBox::critical(0, "FATAL ERROR", "Couldn't find any musrfit function definitions."); - return; } // load instrument definitions - found = false; - QStringList instStr; instStr << "psi" << "triumf" << "isis" << "jparc"; for (int i=0; iicons/musrWiz-22x22-dark.svg icons/musrWiz-32x32.svg icons/musrWiz-32x32-dark.svg + musrWiz.xml + func_defs/musrfit_funcs.xml + instrument_defs/instrument_def_psi.xml + instrument_defs/instrument_def_isis.xml From 3840b86efc18cc3aab1413889872ac09907db238 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 13 May 2017 09:48:58 +0200 Subject: [PATCH 38/43] moved musredit_startup.xml.in to the qt internal resources. This is more flexible than the previous version. --- src/musredit_qt5/musredit/PAdmin.cpp | 305 +++--------------- src/musredit_qt5/musredit/musredit.qrc | 1 + .../musredit/musredit_startup.xml.in | 260 +++++++++++++++ 3 files changed, 300 insertions(+), 266 deletions(-) create mode 100644 src/musredit_qt5/musredit/musredit_startup.xml.in diff --git a/src/musredit_qt5/musredit/PAdmin.cpp b/src/musredit_qt5/musredit/PAdmin.cpp index 28c13341..fe17816c 100644 --- a/src/musredit_qt5/musredit/PAdmin.cpp +++ b/src/musredit_qt5/musredit/PAdmin.cpp @@ -38,6 +38,7 @@ using namespace std; #include #include #include +#include #include "musrfit-info.h" #include "PAdmin.h" @@ -671,7 +672,7 @@ PAdmin::PAdmin() : QObject() path = procEnv.value("ROOTSYS", ""); pathFln = path + "/bin/" + fln; if (!QFile::exists(pathFln)) { - // 5th: not found anyware hence create it + // 5th: not found anywhere hence create it path = procEnv.value("HOME", ""); pathFln = path + "/.musrfit/musredit/" + fln; createMusreditStartupFile(); @@ -1000,280 +1001,52 @@ void PAdmin::createMusreditStartupFile() // create default musredit_startup.xml file in $HOME/.musrfit/musredit pathName += "/musredit_startup.xml"; + + // get the default musredit_startup.xml.in from the internal resources + QFile fres(":/musredit_startup.xml.in"); + if (!fres.exists()) { + QString msg = QString("Neither couldn't find nor create musredit_startup.xml. Things are likely not to work."); + QMessageBox::critical(0, "ERROR", msg); + return; + } + + if (!fres.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString msg = QString("Couldn't open internal resource file musredit_startup.xml.in. Things are likely not to work."); + QMessageBox::critical(0, "ERROR", msg); + return; + } + // text stream for fres + QTextStream fin(&fres); + + // musredit_startup.xml default file QFile file(pathName); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; + // text stream for file QTextStream fout(&file); - fout << "" << endl; - fout << "" << endl; - fout << " " << endl; - fout << " This is handling default setting parameters for the musredit." << endl; - fout << " " << endl; - fout << " " << endl; - fout << " " << MUSRFIT_PREFIX << "/bin" << endl; - fout << " ./" << endl; - fout << " " << MUSRFIT_DOC_DIR << "/templates" << endl; - fout << " 3600" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " y" << endl; - fout << " n" << endl; - fout << " y" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " y" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " " << MUSRFIT_DOC_DIR << "/examples/test-histo-PSI-BIN.msr" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheTitle" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheFitparameterBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheTheoryBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheFunctionsBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheRunBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheCommandsBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheFourierBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#ThePlotBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#TheStatisticBlock" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/Msr2Data.html" << endl; - fout << " file://" << MUSRFIT_DOC_DIR << "/html/user/MUSR/MusrFit.html#A_2.3_musrFT" << endl; - fout << " " << endl; - fout << " " << endl; -#ifdef Q_OS_MAC - fout << " Courier New" << endl; - fout << " 16" << endl; -#else - fout << " Monospace" << endl; - fout << " 12" << endl; -#endif - fout << " " << endl; - fout << " " << endl; - fout << " mue4" << endl; - fout << " psi" << endl; - fout << " root-npp" << endl; - fout << " y" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " y" << endl; - fout << " y" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " y" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " n" << endl; - fout << " " << endl; - fout << " " << MUSRFIT_DOC_DIR << "/latex_images" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " asymmetry" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " asymmetry.png" << endl; - fout << " 1" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " simplExpo" << endl; - fout << " (rate)" << endl; - fout << " " << endl; - fout << " simpleExp.png" << endl; - fout << " 1" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " generExpo" << endl; - fout << " (rate exponent)" << endl; - fout << " " << endl; - fout << " generalExp.png" << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " simpleGss" << endl; - fout << " (rate)" << endl; - fout << " " << endl; - fout << " simpleGauss.png" << endl; - fout << " 1" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " statGssKT" << endl; - fout << " (rate)" << endl; - fout << " " << endl; - fout << " statGssKT.png" << endl; - fout << " 1" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " statGssKTLF" << endl; - fout << " (frequency damping)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " dynGssKTLF" << endl; - fout << " (frequency damping hopping-rate)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 3" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " statExpKT" << endl; - fout << " (rate)" << endl; - fout << " " << endl; - fout << " statExpKT.png" << endl; - fout << " 1" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " statExpKTLF" << endl; - fout << " (frequency damping)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " dynExpKTLF" << endl; - fout << " (frequency damping hopping-rate)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 3" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " combiLGKT" << endl; - fout << " (lorentzRate gaussRate)" << endl; - fout << " " << endl; - fout << " combiLGKT.png" << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " strKT" << endl; - fout << " (rate beta)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " spinGlass" << endl; - fout << " (rate hopping-rate order)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 3" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " rdAnisoHf" << endl; - fout << " (frequency rate)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " abragam" << endl; - fout << " (rate hopping-rate)" << endl; - fout << " " << endl; - fout << " abragam.png" << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " TFieldCos" << endl; - fout << " (phase frequency)" << endl; - fout << " " << endl; - fout << " tfCos.png" << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " internFld" << endl; - fout << " (fraction phase frequency Trate Lrate)" << endl; - fout << " " << endl; - fout << " internalField.png" << endl; - fout << " 5" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " internFldGK" << endl; - fout << " (fraction frequency Trate Lrate beta)" << endl; - fout << " " << endl; - fout << " internalFieldGK.png" << endl; - fout << " 5" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " internFldLL" << endl; - fout << " (fraction frequency Trate Lrate)" << endl; - fout << " " << endl; - fout << " internalFieldLL.png" << endl; - fout << " 4" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " bessel" << endl; - fout << " (phase frequency)" << endl; - fout << " " << endl; - fout << " bessel.png" << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " internBsl" << endl; - fout << " (fraction phase frequency Trate Lrate)" << endl; - fout << " " << endl; - fout << " internalBessel.png" << endl; - fout << " 5" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " skewedGss" << endl; - fout << " (phase frequency rate_m rate_p)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 4" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " staticNKZF" << endl; - fout << " (damping_D0 R_b)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 2" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " staticNKTF" << endl; - fout << " (phase frequency damping_D0 R_b)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 4" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " dynamicNKZF" << endl; - fout << " (damping_D0 R_b nu_c)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 3" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " dynamicNKTF" << endl; - fout << " (phase frequency damping_D0 R_b nu_c)" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 5" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " polynom" << endl; - fout << " (tshift p0 p1 ... pn)" << endl; - fout << " " << endl; - fout << " polynom.png" << endl; - fout << " 4" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " userFcn" << endl; - fout << " " << endl; - fout << " " << endl; - fout << " " << endl; - fout << " 0" << endl; - fout << " " << endl; - fout << " " << endl; - fout << "" << endl; + QString line; + while (!fin.atEnd()) { + line = fin.readLine(); + line.replace("@prefix@", MUSRFIT_PREFIX); + line.replace("@DOCDIR@", MUSRFIT_DOC_DIR); + if (line.startsWith("")) { // defaults: linux: Monospace, macOS: Courier New + if (QSysInfo::macVersion() != QSysInfo::MV_None) { + line.replace("Monospace", "Courier New"); + } + } + if (line.startsWith("")) { // defaults: linux: 12, macOS: 16 + if (QSysInfo::macVersion() != QSysInfo::MV_None) { + line.replace("12", "16"); + } + } + fout << line << endl; + } file.close(); + fres.close(); } //-------------------------------------------------------------------------- diff --git a/src/musredit_qt5/musredit/musredit.qrc b/src/musredit_qt5/musredit/musredit.qrc index 25d00e80..fb3adb66 100644 --- a/src/musredit_qt5/musredit/musredit.qrc +++ b/src/musredit_qt5/musredit/musredit.qrc @@ -63,5 +63,6 @@ latex_images/statExpKT.png latex_images/statGssKT.png latex_images/tfCos.png + musredit_startup.xml.in diff --git a/src/musredit_qt5/musredit/musredit_startup.xml.in b/src/musredit_qt5/musredit/musredit_startup.xml.in new file mode 100644 index 00000000..98bb0d84 --- /dev/null +++ b/src/musredit_qt5/musredit/musredit_startup.xml.in @@ -0,0 +1,260 @@ + + + + This is handling default setting parameters for the musredit. + + + @prefix@/bin + ./ + @DOCDIR@/templates + 3600 + n + n + n + y + n + y + n + n + y + + + @DOCDIR@/examples/test-histo-PSI-BIN.msr + + + file://@DOCDIR@/html/user/MUSR/MusrFit.html + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheTitle + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheFitparameterBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheTheoryBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheFunctionsBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheRunBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheCommandsBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheFourierBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#ThePlotBlock + file://@DOCDIR@/html/user/MUSR/MusrFit.html#TheStatisticBlock + file://@DOCDIR@/html/user/MUSR/Msr2Data.html + file://@DOCDIR@/html/user/MUSR/MusrFit.html#A_2.3_musrFT + + + Monospace + 12 + + + mue4 + psi + root-npp + y + + + y + y + n + n + n + n + y + n + n + n + n + + @DOCDIR@/latex_images + + + asymmetry + + + asymmetry.png + 1 + + + simplExpo + (rate) + + simpleExp.png + 1 + + + generExpo + (rate exponent) + + generalExp.png + 2 + + + simpleGss + (rate) + + simpleGauss.png + 1 + + + statGssKT + (rate) + + statGssKT.png + 1 + + + statGssKTLF + (frequency damping) + + + 2 + + + dynGssKTLF + (frequency damping hopping-rate) + + + 3 + + + statExpKT + (rate) + + statExpKT.png + 1 + + + statExpKTLF + (frequency damping) + + + 2 + + + dynExpKTLF + (frequency damping hopping-rate) + + + 3 + + + combiLGKT + (lorentzRate gaussRate) + + combiLGKT.png + 2 + + + strKT + (rate beta) + + + 2 + + + spinGlass + (rate hopping-rate order) + + + 3 + + + rdAnisoHf + (frequency rate) + + + 2 + + + abragam + (rate hopping-rate) + + abragam.png + 2 + + + TFieldCos + (phase frequency) + + tfCos.png + 2 + + + internFld + (fraction phase frequency Trate Lrate) + + internalField.png + 5 + + + internFldGK + (fraction frequency Trate Lrate beta) + + internalFieldGK.png + 5 + + + internFldLL + (fraction frequency Trate Lrate) + + internalFieldLL.png + 4 + + + bessel + (phase frequency) + + bessel.png + 2 + + + internBsl + (fraction phase frequency Trate Lrate) + + internalBessel.png + 5 + + + skewedGss + (phase frequency rate_m rate_p) + + + 4 + + + staticNKZF + (damping_D0 R_b) + + + 2 + + + staticNKTF + (phase frequency damping_D0 R_b) + + + 4 + + + dynamicNKZF + (damping_D0 R_b nu_c) + + + 3 + + + dynamicNKTF + (phase frequency damping_D0 R_b nu_c) + + + 5 + + + polynom + (tshift p0 p1 ... pn) + + polynom.png + 4 + + + userFcn + + + + 0 + + + From 2bc6e2a8cf3a39ef9968fc18615fe4116af0fc93 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 13 May 2017 15:02:40 +0200 Subject: [PATCH 39/43] small bug fix for macOS font size of musredit. --- src/musredit_qt5/musredit/PAdmin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/musredit_qt5/musredit/PAdmin.cpp b/src/musredit_qt5/musredit/PAdmin.cpp index fe17816c..19f5288d 100644 --- a/src/musredit_qt5/musredit/PAdmin.cpp +++ b/src/musredit_qt5/musredit/PAdmin.cpp @@ -1032,12 +1032,12 @@ void PAdmin::createMusreditStartupFile() line = fin.readLine(); line.replace("@prefix@", MUSRFIT_PREFIX); line.replace("@DOCDIR@", MUSRFIT_DOC_DIR); - if (line.startsWith("")) { // defaults: linux: Monospace, macOS: Courier New + if (line.contains("")) { // defaults: linux: Monospace, macOS: Courier New if (QSysInfo::macVersion() != QSysInfo::MV_None) { line.replace("Monospace", "Courier New"); } } - if (line.startsWith("")) { // defaults: linux: 12, macOS: 16 + if (line.contains("")) { // defaults: linux: 12, macOS: 16 if (QSysInfo::macVersion() != QSysInfo::MV_None) { line.replace("12", "16"); } From 9bdcdcc66139121ba735eb4c27eb1ea779fb4d0d Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sun, 14 May 2017 20:42:46 +0200 Subject: [PATCH 40/43] docu update --- doc/html/user/MUSR/BmwLibs.html | 17 +- doc/html/user/MUSR/CiteMusrFit.html | 25 +- doc/html/user/MUSR/LibFitPofB.html | 27 +-- doc/html/user/MUSR/LibZFRelaxation.html | 31 ++- doc/html/user/MUSR/Msr2Data.html | 31 ++- doc/html/user/MUSR/MusrFit.html | 69 +++--- .../user/MUSR/MusrFitAcknowledgements.html | 17 +- doc/html/user/MUSR/MusrFitSetup.html | 203 ++++++++++------ doc/html/user/MUSR/MusrGui.html | 224 ++++++++++++++---- doc/html/user/MUSR/MusrRoot.html | 33 ++- doc/html/user/MUSR/QuickStart.html | 21 +- doc/html/user/MUSR/TutorialSingleHisto.html | 31 ++- doc/html/user/MUSR/WebHome.html | 29 ++- .../user/pub/MUSR/MusrGui/msr2data-plain.png | Bin 0 -> 1034 bytes .../user/pub/MUSR/MusrGui/musrFT-plain.png | Bin 0 -> 497 bytes .../user/pub/MUSR/MusrGui/musrStep-32x32.png | Bin 0 -> 1138 bytes .../user/pub/MUSR/MusrGui/musrStep_0_0.png | Bin 0 -> 85578 bytes .../user/pub/MUSR/MusrGui/musrStep_1_0.png | Bin 0 -> 88674 bytes .../user/pub/MUSR/MusrGui/musrWiz-32x32.png | Bin 0 -> 710 bytes .../pub/MUSR/MusrGui/musrWiz-Create-1_0.png | Bin 0 -> 34325 bytes .../pub/MUSR/MusrGui/musrWiz-FitInfo-1_0.png | Bin 0 -> 36414 bytes .../MusrGui/musrWiz-FitParameters-1_0.png | Bin 0 -> 52649 bytes .../MUSR/MusrGui/musrWiz-Functions-1_0.png | Bin 0 -> 31251 bytes .../MUSR/MusrGui/musrWiz-Functions-2_0.png | Bin 0 -> 60880 bytes .../MUSR/MusrGui/musrWiz-Introduction_0.png | Bin 0 -> 53696 bytes .../pub/MUSR/MusrGui/musrWiz-Maps-1_0.png | Bin 0 -> 35753 bytes .../pub/MUSR/MusrGui/musrWiz-Theory-1_0.png | Bin 0 -> 44180 bytes .../user/pub/MUSR/MusrGui/musrchisq-plain.png | Bin 0 -> 473 bytes .../user/pub/MUSR/MusrGui/musrdump-plain.png | Bin 0 -> 730 bytes .../user/pub/MUSR/MusrGui/musredit-main_0.png | Bin 0 -> 48740 bytes .../user/pub/MUSR/MusrGui/musrfit-plain.png | Bin 0 -> 871 bytes doc/html/user/pub/MUSR/MusrGui/musrfit.html | 2 + .../user/pub/MUSR/MusrGui/musrmsr2data.html | 2 + .../user/pub/MUSR/MusrGui/musrprefs-plain.png | Bin 0 -> 1054 bytes .../user/pub/MUSR/MusrGui/musrswap-plain.png | Bin 0 -> 933 bytes .../user/pub/MUSR/MusrGui/musrt0-plain.png | Bin 0 -> 553 bytes doc/html/user/pub/MUSR/MusrGui/musrt0.html | 2 + .../user/pub/MUSR/MusrGui/musrview-plain.png | Bin 0 -> 574 bytes .../pub/System/DocumentGraphics/updated.png | Bin 0 -> 891 bytes 39 files changed, 472 insertions(+), 292 deletions(-) create mode 100644 doc/html/user/pub/MUSR/MusrGui/msr2data-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrFT-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrStep-32x32.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrStep_0_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrStep_1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-32x32.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Create-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-FitInfo-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-FitParameters-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Functions-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Functions-2_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Introduction_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Maps-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrWiz-Theory-1_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrchisq-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrdump-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musredit-main_0.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrfit-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrfit.html create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrmsr2data.html create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrprefs-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrswap-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrt0-plain.png create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrt0.html create mode 100644 doc/html/user/pub/MUSR/MusrGui/musrview-plain.png create mode 100644 doc/html/user/pub/System/DocumentGraphics/updated.png diff --git a/doc/html/user/MUSR/BmwLibs.html b/doc/html/user/MUSR/BmwLibs.html index 051059ca..9f343c80 100644 --- a/doc/html/user/MUSR/BmwLibs.html +++ b/doc/html/user/MUSR/BmwLibs.html @@ -1,7 +1,7 @@ - - + + MUSR :: BmwLibs @@ -14,14 +14,14 @@ - + - - + + - - + + - + - + - - - - - + + - - + + + + - - - - - + + - - - - - + + + + +

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 f&%|%9#h=b6F_CYN=tpEQ4SoM~d literal 0 HcmV?d00001 diff --git a/src/musredit_qt5/musrStep/musrStep.cpp b/src/musredit_qt5/musrStep/musrStep.cpp new file mode 100644 index 00000000..b2314b26 --- /dev/null +++ b/src/musredit_qt5/musrStep/musrStep.cpp @@ -0,0 +1,57 @@ +#include +#include + +#include + +#include + +#include "git-revision.h" +#include "PMusrStep.h" + +//------------------------------------------------------------------------- +void musrStep_syntax() +{ + std::cout << std::endl; + std::cout << "usage: musrStep | [-v | --version] | [-h | --help]" << std::endl; + std::cout << " : msr-file name." << std::endl; + std::cout << " -v, --version: print the current git-version to the stdout" << std::endl; + std::cout << " -h, --help: print this help" << std::endl; + std::cout << std::endl << std::endl; +} + +//------------------------------------------------------------------------- +int main(int argc, char *argv[]) +{ + char fln[1024]; + + if (argc != 2) { + musrStep_syntax(); + return 1; + } else { + if (!strcmp(argv[1], "--version") || (!strcmp(argv[1], "-v"))) { + std::cout << std::endl << "musrStep git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl; + return 0; + } else if (!strcmp(argv[1], "--help") || (!strcmp(argv[1], "-h"))) { + musrStep_syntax(); + return 0; + } else { + strncpy(fln, argv[1], sizeof(fln)); + } + } + + Q_INIT_RESOURCE(musrStep); + + QApplication app(argc, argv); + + PMusrStep musrStep(fln); + if (!musrStep.isValid()) + return 1; + + musrStep.show(); + + app.exec(); + + int result = musrStep.result(); + + return result; +} diff --git a/src/musredit_qt5/musrStep/musrStep.pro b/src/musredit_qt5/musrStep/musrStep.pro new file mode 100644 index 00000000..8db5b34f --- /dev/null +++ b/src/musredit_qt5/musrStep/musrStep.pro @@ -0,0 +1,25 @@ +TEMPLATE = app +TARGET = musrStep + +# install path for the application +unix:target.path = $$(ROOTSYS)/bin +INSTALLS += target + +CONFIG += qt \ + warn_on \ + debug \ +CONFIG += console + +QT += widgets +QT += svg + +INCLUDEPATH += "../../include" + +HEADERS = ../../include/git-revision.h \ + PMusrStep.h + +SOURCES = PMusrStep.cpp \ + musrStep.cpp + +RESOURCES = musrStep.qrc + diff --git a/src/musredit_qt5/musrStep/musrStep.qrc b/src/musredit_qt5/musrStep/musrStep.qrc new file mode 100644 index 00000000..24bbe5af --- /dev/null +++ b/src/musredit_qt5/musrStep/musrStep.qrc @@ -0,0 +1,8 @@ + + + icons/musrStep-22x22.svg + icons/musrStep-22x22-dark.svg + icons/musrStep-32x32.svg + icons/musrStep-32x32-dark.svg + + diff --git a/src/musredit_qt5/PAdmin.cpp b/src/musredit_qt5/musredit/PAdmin.cpp similarity index 100% rename from src/musredit_qt5/PAdmin.cpp rename to src/musredit_qt5/musredit/PAdmin.cpp diff --git a/src/musredit_qt5/PAdmin.h b/src/musredit_qt5/musredit/PAdmin.h similarity index 100% rename from src/musredit_qt5/PAdmin.h rename to src/musredit_qt5/musredit/PAdmin.h diff --git a/src/musredit_qt5/PChangeDefaultPathsDialog.cpp b/src/musredit_qt5/musredit/PChangeDefaultPathsDialog.cpp similarity index 100% rename from src/musredit_qt5/PChangeDefaultPathsDialog.cpp rename to src/musredit_qt5/musredit/PChangeDefaultPathsDialog.cpp diff --git a/src/musredit_qt5/PChangeDefaultPathsDialog.h b/src/musredit_qt5/musredit/PChangeDefaultPathsDialog.h similarity index 100% rename from src/musredit_qt5/PChangeDefaultPathsDialog.h rename to src/musredit_qt5/musredit/PChangeDefaultPathsDialog.h diff --git a/src/musredit_qt5/PDumpOutputHandler.cpp b/src/musredit_qt5/musredit/PDumpOutputHandler.cpp similarity index 100% rename from src/musredit_qt5/PDumpOutputHandler.cpp rename to src/musredit_qt5/musredit/PDumpOutputHandler.cpp diff --git a/src/musredit_qt5/PDumpOutputHandler.h b/src/musredit_qt5/musredit/PDumpOutputHandler.h similarity index 100% rename from src/musredit_qt5/PDumpOutputHandler.h rename to src/musredit_qt5/musredit/PDumpOutputHandler.h diff --git a/src/musredit_qt5/PFindDialog.cpp b/src/musredit_qt5/musredit/PFindDialog.cpp similarity index 100% rename from src/musredit_qt5/PFindDialog.cpp rename to src/musredit_qt5/musredit/PFindDialog.cpp diff --git a/src/musredit_qt5/PFindDialog.h b/src/musredit_qt5/musredit/PFindDialog.h similarity index 100% rename from src/musredit_qt5/PFindDialog.h rename to src/musredit_qt5/musredit/PFindDialog.h diff --git a/src/musredit_qt5/PFitOutputHandler.cpp b/src/musredit_qt5/musredit/PFitOutputHandler.cpp similarity index 100% rename from src/musredit_qt5/PFitOutputHandler.cpp rename to src/musredit_qt5/musredit/PFitOutputHandler.cpp diff --git a/src/musredit_qt5/PFitOutputHandler.h b/src/musredit_qt5/musredit/PFitOutputHandler.h similarity index 100% rename from src/musredit_qt5/PFitOutputHandler.h rename to src/musredit_qt5/musredit/PFitOutputHandler.h diff --git a/src/musredit_qt5/PGetAsymmetryRunBlockDialog.cpp b/src/musredit_qt5/musredit/PGetAsymmetryRunBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetAsymmetryRunBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetAsymmetryRunBlockDialog.cpp diff --git a/src/musredit_qt5/PGetAsymmetryRunBlockDialog.h b/src/musredit_qt5/musredit/PGetAsymmetryRunBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetAsymmetryRunBlockDialog.h rename to src/musredit_qt5/musredit/PGetAsymmetryRunBlockDialog.h diff --git a/src/musredit_qt5/PGetDefaultDialog.cpp b/src/musredit_qt5/musredit/PGetDefaultDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetDefaultDialog.cpp rename to src/musredit_qt5/musredit/PGetDefaultDialog.cpp diff --git a/src/musredit_qt5/PGetDefaultDialog.h b/src/musredit_qt5/musredit/PGetDefaultDialog.h similarity index 100% rename from src/musredit_qt5/PGetDefaultDialog.h rename to src/musredit_qt5/musredit/PGetDefaultDialog.h diff --git a/src/musredit_qt5/PGetFourierBlockDialog.cpp b/src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetFourierBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetFourierBlockDialog.cpp diff --git a/src/musredit_qt5/PGetFourierBlockDialog.h b/src/musredit_qt5/musredit/PGetFourierBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetFourierBlockDialog.h rename to src/musredit_qt5/musredit/PGetFourierBlockDialog.h diff --git a/src/musredit_qt5/PGetFunctionsBlockDialog.cpp b/src/musredit_qt5/musredit/PGetFunctionsBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetFunctionsBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetFunctionsBlockDialog.cpp diff --git a/src/musredit_qt5/PGetFunctionsBlockDialog.h b/src/musredit_qt5/musredit/PGetFunctionsBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetFunctionsBlockDialog.h rename to src/musredit_qt5/musredit/PGetFunctionsBlockDialog.h diff --git a/src/musredit_qt5/PGetMusrFTOptionsDialog.cpp b/src/musredit_qt5/musredit/PGetMusrFTOptionsDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetMusrFTOptionsDialog.cpp rename to src/musredit_qt5/musredit/PGetMusrFTOptionsDialog.cpp diff --git a/src/musredit_qt5/PGetMusrFTOptionsDialog.h b/src/musredit_qt5/musredit/PGetMusrFTOptionsDialog.h similarity index 100% rename from src/musredit_qt5/PGetMusrFTOptionsDialog.h rename to src/musredit_qt5/musredit/PGetMusrFTOptionsDialog.h diff --git a/src/musredit_qt5/PGetNonMusrRunBlockDialog.cpp b/src/musredit_qt5/musredit/PGetNonMusrRunBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetNonMusrRunBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetNonMusrRunBlockDialog.cpp diff --git a/src/musredit_qt5/PGetNonMusrRunBlockDialog.h b/src/musredit_qt5/musredit/PGetNonMusrRunBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetNonMusrRunBlockDialog.h rename to src/musredit_qt5/musredit/PGetNonMusrRunBlockDialog.h diff --git a/src/musredit_qt5/PGetParameterBlockDialog.cpp b/src/musredit_qt5/musredit/PGetParameterBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetParameterBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetParameterBlockDialog.cpp diff --git a/src/musredit_qt5/PGetParameterBlockDialog.h b/src/musredit_qt5/musredit/PGetParameterBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetParameterBlockDialog.h rename to src/musredit_qt5/musredit/PGetParameterBlockDialog.h diff --git a/src/musredit_qt5/PGetPlotBlockDialog.cpp b/src/musredit_qt5/musredit/PGetPlotBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetPlotBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetPlotBlockDialog.cpp diff --git a/src/musredit_qt5/PGetPlotBlockDialog.h b/src/musredit_qt5/musredit/PGetPlotBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetPlotBlockDialog.h rename to src/musredit_qt5/musredit/PGetPlotBlockDialog.h diff --git a/src/musredit_qt5/PGetSingleHistoRunBlockDialog.cpp b/src/musredit_qt5/musredit/PGetSingleHistoRunBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetSingleHistoRunBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetSingleHistoRunBlockDialog.cpp diff --git a/src/musredit_qt5/PGetSingleHistoRunBlockDialog.h b/src/musredit_qt5/musredit/PGetSingleHistoRunBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetSingleHistoRunBlockDialog.h rename to src/musredit_qt5/musredit/PGetSingleHistoRunBlockDialog.h diff --git a/src/musredit_qt5/PGetTheoryBlockDialog.cpp b/src/musredit_qt5/musredit/PGetTheoryBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetTheoryBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetTheoryBlockDialog.cpp diff --git a/src/musredit_qt5/PGetTheoryBlockDialog.h b/src/musredit_qt5/musredit/PGetTheoryBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetTheoryBlockDialog.h rename to src/musredit_qt5/musredit/PGetTheoryBlockDialog.h diff --git a/src/musredit_qt5/PGetTitleBlockDialog.cpp b/src/musredit_qt5/musredit/PGetTitleBlockDialog.cpp similarity index 100% rename from src/musredit_qt5/PGetTitleBlockDialog.cpp rename to src/musredit_qt5/musredit/PGetTitleBlockDialog.cpp diff --git a/src/musredit_qt5/PGetTitleBlockDialog.h b/src/musredit_qt5/musredit/PGetTitleBlockDialog.h similarity index 100% rename from src/musredit_qt5/PGetTitleBlockDialog.h rename to src/musredit_qt5/musredit/PGetTitleBlockDialog.h diff --git a/src/musredit_qt5/PHelp.cpp b/src/musredit_qt5/musredit/PHelp.cpp similarity index 100% rename from src/musredit_qt5/PHelp.cpp rename to src/musredit_qt5/musredit/PHelp.cpp diff --git a/src/musredit_qt5/PHelp.h b/src/musredit_qt5/musredit/PHelp.h similarity index 100% rename from src/musredit_qt5/PHelp.h rename to src/musredit_qt5/musredit/PHelp.h diff --git a/src/musredit_qt5/PMsr2DataDialog.cpp b/src/musredit_qt5/musredit/PMsr2DataDialog.cpp similarity index 100% rename from src/musredit_qt5/PMsr2DataDialog.cpp rename to src/musredit_qt5/musredit/PMsr2DataDialog.cpp diff --git a/src/musredit_qt5/PMsr2DataDialog.h b/src/musredit_qt5/musredit/PMsr2DataDialog.h similarity index 100% rename from src/musredit_qt5/PMsr2DataDialog.h rename to src/musredit_qt5/musredit/PMsr2DataDialog.h diff --git a/src/musredit_qt5/PMusrEditAbout.cpp b/src/musredit_qt5/musredit/PMusrEditAbout.cpp similarity index 100% rename from src/musredit_qt5/PMusrEditAbout.cpp rename to src/musredit_qt5/musredit/PMusrEditAbout.cpp diff --git a/src/musredit_qt5/PMusrEditAbout.h b/src/musredit_qt5/musredit/PMusrEditAbout.h similarity index 100% rename from src/musredit_qt5/PMusrEditAbout.h rename to src/musredit_qt5/musredit/PMusrEditAbout.h diff --git a/src/musredit_qt5/PPrefsDialog.cpp b/src/musredit_qt5/musredit/PPrefsDialog.cpp similarity index 100% rename from src/musredit_qt5/PPrefsDialog.cpp rename to src/musredit_qt5/musredit/PPrefsDialog.cpp diff --git a/src/musredit_qt5/PPrefsDialog.h b/src/musredit_qt5/musredit/PPrefsDialog.h similarity index 100% rename from src/musredit_qt5/PPrefsDialog.h rename to src/musredit_qt5/musredit/PPrefsDialog.h diff --git a/src/musredit_qt5/PReplaceConfirmationDialog.cpp b/src/musredit_qt5/musredit/PReplaceConfirmationDialog.cpp similarity index 100% rename from src/musredit_qt5/PReplaceConfirmationDialog.cpp rename to src/musredit_qt5/musredit/PReplaceConfirmationDialog.cpp diff --git a/src/musredit_qt5/PReplaceConfirmationDialog.h b/src/musredit_qt5/musredit/PReplaceConfirmationDialog.h similarity index 100% rename from src/musredit_qt5/PReplaceConfirmationDialog.h rename to src/musredit_qt5/musredit/PReplaceConfirmationDialog.h diff --git a/src/musredit_qt5/PReplaceDialog.cpp b/src/musredit_qt5/musredit/PReplaceDialog.cpp similarity index 100% rename from src/musredit_qt5/PReplaceDialog.cpp rename to src/musredit_qt5/musredit/PReplaceDialog.cpp diff --git a/src/musredit_qt5/PReplaceDialog.h b/src/musredit_qt5/musredit/PReplaceDialog.h similarity index 100% rename from src/musredit_qt5/PReplaceDialog.h rename to src/musredit_qt5/musredit/PReplaceDialog.h diff --git a/src/musredit_qt5/PSubTextEdit.cpp b/src/musredit_qt5/musredit/PSubTextEdit.cpp similarity index 100% rename from src/musredit_qt5/PSubTextEdit.cpp rename to src/musredit_qt5/musredit/PSubTextEdit.cpp diff --git a/src/musredit_qt5/PSubTextEdit.h b/src/musredit_qt5/musredit/PSubTextEdit.h similarity index 100% rename from src/musredit_qt5/PSubTextEdit.h rename to src/musredit_qt5/musredit/PSubTextEdit.h diff --git a/src/musredit_qt5/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp similarity index 100% rename from src/musredit_qt5/PTextEdit.cpp rename to src/musredit_qt5/musredit/PTextEdit.cpp diff --git a/src/musredit_qt5/PTextEdit.h b/src/musredit_qt5/musredit/PTextEdit.h similarity index 100% rename from src/musredit_qt5/PTextEdit.h rename to src/musredit_qt5/musredit/PTextEdit.h diff --git a/src/musredit_qt5/README b/src/musredit_qt5/musredit/README similarity index 100% rename from src/musredit_qt5/README rename to src/musredit_qt5/musredit/README diff --git a/src/musredit_qt5/forms/PChangeDefaultPathsDialog.ui b/src/musredit_qt5/musredit/forms/PChangeDefaultPathsDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PChangeDefaultPathsDialog.ui rename to src/musredit_qt5/musredit/forms/PChangeDefaultPathsDialog.ui diff --git a/src/musredit_qt5/forms/PFindDialog.ui b/src/musredit_qt5/musredit/forms/PFindDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PFindDialog.ui rename to src/musredit_qt5/musredit/forms/PFindDialog.ui diff --git a/src/musredit_qt5/forms/PGetAsymmetryRunBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetAsymmetryRunBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetAsymmetryRunBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetAsymmetryRunBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetFourierBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetFourierBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetFourierBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetFourierBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetFunctionsBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetFunctionsBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetFunctionsBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetFunctionsBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetMusrFTOptionsDialog.ui b/src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetMusrFTOptionsDialog.ui rename to src/musredit_qt5/musredit/forms/PGetMusrFTOptionsDialog.ui diff --git a/src/musredit_qt5/forms/PGetNonMusrRunBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetNonMusrRunBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetNonMusrRunBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetParameterBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetParameterBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetParameterBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetParameterBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetPlotBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetPlotBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetPlotBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetPlotBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetSingleHistoRunBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetSingleHistoRunBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetSingleHistoRunBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetSingleHistoRunBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetTheoryBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetTheoryBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetTheoryBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetTheoryBlockDialog.ui diff --git a/src/musredit_qt5/forms/PGetTitleBlockDialog.ui b/src/musredit_qt5/musredit/forms/PGetTitleBlockDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PGetTitleBlockDialog.ui rename to src/musredit_qt5/musredit/forms/PGetTitleBlockDialog.ui diff --git a/src/musredit_qt5/forms/PMsr2DataDialog.ui b/src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PMsr2DataDialog.ui rename to src/musredit_qt5/musredit/forms/PMsr2DataDialog.ui diff --git a/src/musredit_qt5/forms/PMusrEditAbout.ui b/src/musredit_qt5/musredit/forms/PMusrEditAbout.ui similarity index 100% rename from src/musredit_qt5/forms/PMusrEditAbout.ui rename to src/musredit_qt5/musredit/forms/PMusrEditAbout.ui diff --git a/src/musredit_qt5/forms/PPrefsDialog.ui b/src/musredit_qt5/musredit/forms/PPrefsDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PPrefsDialog.ui rename to src/musredit_qt5/musredit/forms/PPrefsDialog.ui diff --git a/src/musredit_qt5/forms/PReplaceConfirmationDialog.ui b/src/musredit_qt5/musredit/forms/PReplaceConfirmationDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PReplaceConfirmationDialog.ui rename to src/musredit_qt5/musredit/forms/PReplaceConfirmationDialog.ui diff --git a/src/musredit_qt5/forms/PReplaceDialog.ui b/src/musredit_qt5/musredit/forms/PReplaceDialog.ui similarity index 100% rename from src/musredit_qt5/forms/PReplaceDialog.ui rename to src/musredit_qt5/musredit/forms/PReplaceDialog.ui diff --git a/src/musredit_qt5/icons/MuonSpin-Avatar.gif b/src/musredit_qt5/musredit/icons/MuonSpin-Avatar.gif similarity index 100% rename from src/musredit_qt5/icons/MuonSpin-Avatar.gif rename to src/musredit_qt5/musredit/icons/MuonSpin-Avatar.gif diff --git a/src/musredit_qt5/icons/MuonSpin-Avatar.nb b/src/musredit_qt5/musredit/icons/MuonSpin-Avatar.nb similarity index 100% rename from src/musredit_qt5/icons/MuonSpin-Avatar.nb rename to src/musredit_qt5/musredit/icons/MuonSpin-Avatar.nb diff --git a/src/musredit_qt5/icons/document-new-dark.svg b/src/musredit_qt5/musredit/icons/document-new-dark.svg similarity index 100% rename from src/musredit_qt5/icons/document-new-dark.svg rename to src/musredit_qt5/musredit/icons/document-new-dark.svg diff --git a/src/musredit_qt5/icons/document-new-plain.svg b/src/musredit_qt5/musredit/icons/document-new-plain.svg similarity index 100% rename from src/musredit_qt5/icons/document-new-plain.svg rename to src/musredit_qt5/musredit/icons/document-new-plain.svg diff --git a/src/musredit_qt5/icons/document-open-dark.svg b/src/musredit_qt5/musredit/icons/document-open-dark.svg similarity index 100% rename from src/musredit_qt5/icons/document-open-dark.svg rename to src/musredit_qt5/musredit/icons/document-open-dark.svg diff --git a/src/musredit_qt5/icons/document-open-plain.svg b/src/musredit_qt5/musredit/icons/document-open-plain.svg similarity index 100% rename from src/musredit_qt5/icons/document-open-plain.svg rename to src/musredit_qt5/musredit/icons/document-open-plain.svg diff --git a/src/musredit_qt5/icons/document-print-dark.svg b/src/musredit_qt5/musredit/icons/document-print-dark.svg similarity index 100% rename from src/musredit_qt5/icons/document-print-dark.svg rename to src/musredit_qt5/musredit/icons/document-print-dark.svg diff --git a/src/musredit_qt5/icons/document-print-plain.svg b/src/musredit_qt5/musredit/icons/document-print-plain.svg similarity index 100% rename from src/musredit_qt5/icons/document-print-plain.svg rename to src/musredit_qt5/musredit/icons/document-print-plain.svg diff --git a/src/musredit_qt5/icons/document-save-dark.svg b/src/musredit_qt5/musredit/icons/document-save-dark.svg similarity index 100% rename from src/musredit_qt5/icons/document-save-dark.svg rename to src/musredit_qt5/musredit/icons/document-save-dark.svg diff --git a/src/musredit_qt5/icons/document-save-plain.svg b/src/musredit_qt5/musredit/icons/document-save-plain.svg similarity index 100% rename from src/musredit_qt5/icons/document-save-plain.svg rename to src/musredit_qt5/musredit/icons/document-save-plain.svg diff --git a/src/musredit_qt5/icons/edit-copy-dark.svg b/src/musredit_qt5/musredit/icons/edit-copy-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-copy-dark.svg rename to src/musredit_qt5/musredit/icons/edit-copy-dark.svg diff --git a/src/musredit_qt5/icons/edit-copy-plain.svg b/src/musredit_qt5/musredit/icons/edit-copy-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-copy-plain.svg rename to src/musredit_qt5/musredit/icons/edit-copy-plain.svg diff --git a/src/musredit_qt5/icons/edit-cut-dark.svg b/src/musredit_qt5/musredit/icons/edit-cut-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-cut-dark.svg rename to src/musredit_qt5/musredit/icons/edit-cut-dark.svg diff --git a/src/musredit_qt5/icons/edit-cut-plain.svg b/src/musredit_qt5/musredit/icons/edit-cut-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-cut-plain.svg rename to src/musredit_qt5/musredit/icons/edit-cut-plain.svg diff --git a/src/musredit_qt5/icons/edit-find-dark.svg b/src/musredit_qt5/musredit/icons/edit-find-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-find-dark.svg rename to src/musredit_qt5/musredit/icons/edit-find-dark.svg diff --git a/src/musredit_qt5/icons/edit-find-plain.svg b/src/musredit_qt5/musredit/icons/edit-find-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-find-plain.svg rename to src/musredit_qt5/musredit/icons/edit-find-plain.svg diff --git a/src/musredit_qt5/icons/edit-paste-dark.svg b/src/musredit_qt5/musredit/icons/edit-paste-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-paste-dark.svg rename to src/musredit_qt5/musredit/icons/edit-paste-dark.svg diff --git a/src/musredit_qt5/icons/edit-paste-plain.svg b/src/musredit_qt5/musredit/icons/edit-paste-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-paste-plain.svg rename to src/musredit_qt5/musredit/icons/edit-paste-plain.svg diff --git a/src/musredit_qt5/icons/edit-redo-dark.svg b/src/musredit_qt5/musredit/icons/edit-redo-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-redo-dark.svg rename to src/musredit_qt5/musredit/icons/edit-redo-dark.svg diff --git a/src/musredit_qt5/icons/edit-redo-plain.svg b/src/musredit_qt5/musredit/icons/edit-redo-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-redo-plain.svg rename to src/musredit_qt5/musredit/icons/edit-redo-plain.svg diff --git a/src/musredit_qt5/icons/edit-undo-dark.svg b/src/musredit_qt5/musredit/icons/edit-undo-dark.svg similarity index 100% rename from src/musredit_qt5/icons/edit-undo-dark.svg rename to src/musredit_qt5/musredit/icons/edit-undo-dark.svg diff --git a/src/musredit_qt5/icons/edit-undo-plain.svg b/src/musredit_qt5/musredit/icons/edit-undo-plain.svg similarity index 100% rename from src/musredit_qt5/icons/edit-undo-plain.svg rename to src/musredit_qt5/musredit/icons/edit-undo-plain.svg diff --git a/src/musredit_qt5/icons/go-next-use-dark.svg b/src/musredit_qt5/musredit/icons/go-next-use-dark.svg similarity index 100% rename from src/musredit_qt5/icons/go-next-use-dark.svg rename to src/musredit_qt5/musredit/icons/go-next-use-dark.svg diff --git a/src/musredit_qt5/icons/go-next-use-plain.svg b/src/musredit_qt5/musredit/icons/go-next-use-plain.svg similarity index 100% rename from src/musredit_qt5/icons/go-next-use-plain.svg rename to src/musredit_qt5/musredit/icons/go-next-use-plain.svg diff --git a/src/musredit_qt5/icons/go-previous-use-dark.svg b/src/musredit_qt5/musredit/icons/go-previous-use-dark.svg similarity index 100% rename from src/musredit_qt5/icons/go-previous-use-dark.svg rename to src/musredit_qt5/musredit/icons/go-previous-use-dark.svg diff --git a/src/musredit_qt5/icons/go-previous-use-plain.svg b/src/musredit_qt5/musredit/icons/go-previous-use-plain.svg similarity index 100% rename from src/musredit_qt5/icons/go-previous-use-plain.svg rename to src/musredit_qt5/musredit/icons/go-previous-use-plain.svg diff --git a/src/musredit_qt5/icons/inkscape/document-new.svg b/src/musredit_qt5/musredit/icons/inkscape/document-new.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/document-new.svg rename to src/musredit_qt5/musredit/icons/inkscape/document-new.svg diff --git a/src/musredit_qt5/icons/inkscape/document-open.svg b/src/musredit_qt5/musredit/icons/inkscape/document-open.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/document-open.svg rename to src/musredit_qt5/musredit/icons/inkscape/document-open.svg diff --git a/src/musredit_qt5/icons/inkscape/document-print.svg b/src/musredit_qt5/musredit/icons/inkscape/document-print.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/document-print.svg rename to src/musredit_qt5/musredit/icons/inkscape/document-print.svg diff --git a/src/musredit_qt5/icons/inkscape/document-save.svg b/src/musredit_qt5/musredit/icons/inkscape/document-save.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/document-save.svg rename to src/musredit_qt5/musredit/icons/inkscape/document-save.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-copy.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-copy.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-copy.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-copy.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-cut.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-cut.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-cut.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-cut.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-find.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-find.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-find.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-find.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-paste.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-paste.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-paste.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-paste.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-redo.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-redo.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-redo.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-redo.svg diff --git a/src/musredit_qt5/icons/inkscape/edit-undo.svg b/src/musredit_qt5/musredit/icons/inkscape/edit-undo.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/edit-undo.svg rename to src/musredit_qt5/musredit/icons/inkscape/edit-undo.svg diff --git a/src/musredit_qt5/icons/inkscape/go-next-use.svg b/src/musredit_qt5/musredit/icons/inkscape/go-next-use.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/go-next-use.svg rename to src/musredit_qt5/musredit/icons/inkscape/go-next-use.svg diff --git a/src/musredit_qt5/icons/inkscape/go-previous-use.svg b/src/musredit_qt5/musredit/icons/inkscape/go-previous-use.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/go-previous-use.svg rename to src/musredit_qt5/musredit/icons/inkscape/go-previous-use.svg diff --git a/src/musredit_qt5/icons/inkscape/msr2data.svg b/src/musredit_qt5/musredit/icons/inkscape/msr2data.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/msr2data.svg rename to src/musredit_qt5/musredit/icons/inkscape/msr2data.svg diff --git a/src/musredit_qt5/icons/inkscape/musrAsym.svg b/src/musredit_qt5/musredit/icons/inkscape/musrAsym.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrAsym.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrAsym.svg diff --git a/src/musredit_qt5/icons/inkscape/musrFT.svg b/src/musredit_qt5/musredit/icons/inkscape/musrFT.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrFT.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrFT.svg diff --git a/src/musredit_qt5/icons/inkscape/musrSingleHisto.svg b/src/musredit_qt5/musredit/icons/inkscape/musrSingleHisto.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrSingleHisto.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrSingleHisto.svg diff --git a/src/musredit_qt5/icons/inkscape/musrchisq.svg b/src/musredit_qt5/musredit/icons/inkscape/musrchisq.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrchisq.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrchisq.svg diff --git a/src/musredit_qt5/icons/inkscape/musrdump.svg b/src/musredit_qt5/musredit/icons/inkscape/musrdump.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrdump.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrdump.svg diff --git a/src/musredit_qt5/icons/inkscape/musrfit.svg b/src/musredit_qt5/musredit/icons/inkscape/musrfit.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrfit.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrfit.svg diff --git a/src/musredit_qt5/icons/inkscape/musrprefs.svg b/src/musredit_qt5/musredit/icons/inkscape/musrprefs.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrprefs.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrprefs.svg diff --git a/src/musredit_qt5/icons/inkscape/musrswap.svg b/src/musredit_qt5/musredit/icons/inkscape/musrswap.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrswap.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrswap.svg diff --git a/src/musredit_qt5/icons/inkscape/musrt0.svg b/src/musredit_qt5/musredit/icons/inkscape/musrt0.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrt0.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrt0.svg diff --git a/src/musredit_qt5/icons/inkscape/musrview.svg b/src/musredit_qt5/musredit/icons/inkscape/musrview.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/musrview.svg rename to src/musredit_qt5/musredit/icons/inkscape/musrview.svg diff --git a/src/musredit_qt5/icons/inkscape/view-refresh.svg b/src/musredit_qt5/musredit/icons/inkscape/view-refresh.svg similarity index 100% rename from src/musredit_qt5/icons/inkscape/view-refresh.svg rename to src/musredit_qt5/musredit/icons/inkscape/view-refresh.svg diff --git a/src/musredit_qt5/icons/msr2data-dark.svg b/src/musredit_qt5/musredit/icons/msr2data-dark.svg similarity index 100% rename from src/musredit_qt5/icons/msr2data-dark.svg rename to src/musredit_qt5/musredit/icons/msr2data-dark.svg diff --git a/src/musredit_qt5/icons/msr2data-plain.svg b/src/musredit_qt5/musredit/icons/msr2data-plain.svg similarity index 100% rename from src/musredit_qt5/icons/msr2data-plain.svg rename to src/musredit_qt5/musredit/icons/msr2data-plain.svg diff --git a/src/musredit_qt5/icons/musrAsym-plain.svg b/src/musredit_qt5/musredit/icons/musrAsym-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrAsym-plain.svg rename to src/musredit_qt5/musredit/icons/musrAsym-plain.svg diff --git a/src/musredit_qt5/icons/musrFT-dark.svg b/src/musredit_qt5/musredit/icons/musrFT-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrFT-dark.svg rename to src/musredit_qt5/musredit/icons/musrFT-dark.svg diff --git a/src/musredit_qt5/icons/musrFT-plain.svg b/src/musredit_qt5/musredit/icons/musrFT-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrFT-plain.svg rename to src/musredit_qt5/musredit/icons/musrFT-plain.svg diff --git a/src/musredit_qt5/icons/musrSingleHisto-plain.svg b/src/musredit_qt5/musredit/icons/musrSingleHisto-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrSingleHisto-plain.svg rename to src/musredit_qt5/musredit/icons/musrSingleHisto-plain.svg diff --git a/src/musredit_qt5/icons/musrStep-32x32-dark.svg b/src/musredit_qt5/musredit/icons/musrStep-32x32-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrStep-32x32-dark.svg rename to src/musredit_qt5/musredit/icons/musrStep-32x32-dark.svg diff --git a/src/musredit_qt5/icons/musrStep-32x32.svg b/src/musredit_qt5/musredit/icons/musrStep-32x32.svg similarity index 100% rename from src/musredit_qt5/icons/musrStep-32x32.svg rename to src/musredit_qt5/musredit/icons/musrStep-32x32.svg diff --git a/src/musredit_qt5/icons/musrWiz-32x32-dark.svg b/src/musredit_qt5/musredit/icons/musrWiz-32x32-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrWiz-32x32-dark.svg rename to src/musredit_qt5/musredit/icons/musrWiz-32x32-dark.svg diff --git a/src/musredit_qt5/icons/musrWiz-32x32.svg b/src/musredit_qt5/musredit/icons/musrWiz-32x32.svg similarity index 100% rename from src/musredit_qt5/icons/musrWiz-32x32.svg rename to src/musredit_qt5/musredit/icons/musrWiz-32x32.svg diff --git a/src/musredit_qt5/icons/musrchisq-dark.svg b/src/musredit_qt5/musredit/icons/musrchisq-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrchisq-dark.svg rename to src/musredit_qt5/musredit/icons/musrchisq-dark.svg diff --git a/src/musredit_qt5/icons/musrchisq-plain.svg b/src/musredit_qt5/musredit/icons/musrchisq-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrchisq-plain.svg rename to src/musredit_qt5/musredit/icons/musrchisq-plain.svg diff --git a/src/musredit_qt5/icons/musrdump-dark.svg b/src/musredit_qt5/musredit/icons/musrdump-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrdump-dark.svg rename to src/musredit_qt5/musredit/icons/musrdump-dark.svg diff --git a/src/musredit_qt5/icons/musrdump-plain.svg b/src/musredit_qt5/musredit/icons/musrdump-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrdump-plain.svg rename to src/musredit_qt5/musredit/icons/musrdump-plain.svg diff --git a/src/musredit_qt5/icons/musredit.icns b/src/musredit_qt5/musredit/icons/musredit.icns similarity index 100% rename from src/musredit_qt5/icons/musredit.icns rename to src/musredit_qt5/musredit/icons/musredit.icns diff --git a/src/musredit_qt5/icons/musredit.ico b/src/musredit_qt5/musredit/icons/musredit.ico similarity index 100% rename from src/musredit_qt5/icons/musredit.ico rename to src/musredit_qt5/musredit/icons/musredit.ico diff --git a/src/musredit_qt5/icons/musrfit-16x16.gif b/src/musredit_qt5/musredit/icons/musrfit-16x16.gif similarity index 100% rename from src/musredit_qt5/icons/musrfit-16x16.gif rename to src/musredit_qt5/musredit/icons/musrfit-16x16.gif diff --git a/src/musredit_qt5/icons/musrfit-16x16.ico b/src/musredit_qt5/musredit/icons/musrfit-16x16.ico similarity index 100% rename from src/musredit_qt5/icons/musrfit-16x16.ico rename to src/musredit_qt5/musredit/icons/musrfit-16x16.ico diff --git a/src/musredit_qt5/icons/musrfit-16x16.png b/src/musredit_qt5/musredit/icons/musrfit-16x16.png similarity index 100% rename from src/musredit_qt5/icons/musrfit-16x16.png rename to src/musredit_qt5/musredit/icons/musrfit-16x16.png diff --git a/src/musredit_qt5/icons/musrfit-16x16.xpm b/src/musredit_qt5/musredit/icons/musrfit-16x16.xpm similarity index 100% rename from src/musredit_qt5/icons/musrfit-16x16.xpm rename to src/musredit_qt5/musredit/icons/musrfit-16x16.xpm diff --git a/src/musredit_qt5/icons/musrfit-dark.svg b/src/musredit_qt5/musredit/icons/musrfit-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrfit-dark.svg rename to src/musredit_qt5/musredit/icons/musrfit-dark.svg diff --git a/src/musredit_qt5/icons/musrfit-plain.svg b/src/musredit_qt5/musredit/icons/musrfit-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrfit-plain.svg rename to src/musredit_qt5/musredit/icons/musrfit-plain.svg diff --git a/src/musredit_qt5/icons/musrfit.gif b/src/musredit_qt5/musredit/icons/musrfit.gif similarity index 100% rename from src/musredit_qt5/icons/musrfit.gif rename to src/musredit_qt5/musredit/icons/musrfit.gif diff --git a/src/musredit_qt5/icons/musrprefs-dark.svg b/src/musredit_qt5/musredit/icons/musrprefs-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrprefs-dark.svg rename to src/musredit_qt5/musredit/icons/musrprefs-dark.svg diff --git a/src/musredit_qt5/icons/musrprefs-plain.svg b/src/musredit_qt5/musredit/icons/musrprefs-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrprefs-plain.svg rename to src/musredit_qt5/musredit/icons/musrprefs-plain.svg diff --git a/src/musredit_qt5/icons/musrswap-dark.svg b/src/musredit_qt5/musredit/icons/musrswap-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrswap-dark.svg rename to src/musredit_qt5/musredit/icons/musrswap-dark.svg diff --git a/src/musredit_qt5/icons/musrswap-plain.svg b/src/musredit_qt5/musredit/icons/musrswap-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrswap-plain.svg rename to src/musredit_qt5/musredit/icons/musrswap-plain.svg diff --git a/src/musredit_qt5/icons/musrt0-dark.svg b/src/musredit_qt5/musredit/icons/musrt0-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrt0-dark.svg rename to src/musredit_qt5/musredit/icons/musrt0-dark.svg diff --git a/src/musredit_qt5/icons/musrt0-plain.svg b/src/musredit_qt5/musredit/icons/musrt0-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrt0-plain.svg rename to src/musredit_qt5/musredit/icons/musrt0-plain.svg diff --git a/src/musredit_qt5/icons/musrview-dark.svg b/src/musredit_qt5/musredit/icons/musrview-dark.svg similarity index 100% rename from src/musredit_qt5/icons/musrview-dark.svg rename to src/musredit_qt5/musredit/icons/musrview-dark.svg diff --git a/src/musredit_qt5/icons/musrview-plain.svg b/src/musredit_qt5/musredit/icons/musrview-plain.svg similarity index 100% rename from src/musredit_qt5/icons/musrview-plain.svg rename to src/musredit_qt5/musredit/icons/musrview-plain.svg diff --git a/src/musredit_qt5/icons/view-refresh-dark.svg b/src/musredit_qt5/musredit/icons/view-refresh-dark.svg similarity index 100% rename from src/musredit_qt5/icons/view-refresh-dark.svg rename to src/musredit_qt5/musredit/icons/view-refresh-dark.svg diff --git a/src/musredit_qt5/icons/view-refresh-plain.svg b/src/musredit_qt5/musredit/icons/view-refresh-plain.svg similarity index 100% rename from src/musredit_qt5/icons/view-refresh-plain.svg rename to src/musredit_qt5/musredit/icons/view-refresh-plain.svg diff --git a/src/musredit_qt5/latex_images/abragam.png b/src/musredit_qt5/musredit/latex_images/abragam.png similarity index 100% rename from src/musredit_qt5/latex_images/abragam.png rename to src/musredit_qt5/musredit/latex_images/abragam.png diff --git a/src/musredit_qt5/latex_images/abragam.tex b/src/musredit_qt5/musredit/latex_images/abragam.tex similarity index 100% rename from src/musredit_qt5/latex_images/abragam.tex rename to src/musredit_qt5/musredit/latex_images/abragam.tex diff --git a/src/musredit_qt5/latex_images/asymmetry.png b/src/musredit_qt5/musredit/latex_images/asymmetry.png similarity index 100% rename from src/musredit_qt5/latex_images/asymmetry.png rename to src/musredit_qt5/musredit/latex_images/asymmetry.png diff --git a/src/musredit_qt5/latex_images/asymmetry.tex b/src/musredit_qt5/musredit/latex_images/asymmetry.tex similarity index 100% rename from src/musredit_qt5/latex_images/asymmetry.tex rename to src/musredit_qt5/musredit/latex_images/asymmetry.tex diff --git a/src/musredit_qt5/latex_images/bessel.png b/src/musredit_qt5/musredit/latex_images/bessel.png similarity index 100% rename from src/musredit_qt5/latex_images/bessel.png rename to src/musredit_qt5/musredit/latex_images/bessel.png diff --git a/src/musredit_qt5/latex_images/bessel.tex b/src/musredit_qt5/musredit/latex_images/bessel.tex similarity index 100% rename from src/musredit_qt5/latex_images/bessel.tex rename to src/musredit_qt5/musredit/latex_images/bessel.tex diff --git a/src/musredit_qt5/latex_images/combiLGKT.png b/src/musredit_qt5/musredit/latex_images/combiLGKT.png similarity index 100% rename from src/musredit_qt5/latex_images/combiLGKT.png rename to src/musredit_qt5/musredit/latex_images/combiLGKT.png diff --git a/src/musredit_qt5/latex_images/combiLGKT.tex b/src/musredit_qt5/musredit/latex_images/combiLGKT.tex similarity index 100% rename from src/musredit_qt5/latex_images/combiLGKT.tex rename to src/musredit_qt5/musredit/latex_images/combiLGKT.tex diff --git a/src/musredit_qt5/latex_images/generalExp.png b/src/musredit_qt5/musredit/latex_images/generalExp.png similarity index 100% rename from src/musredit_qt5/latex_images/generalExp.png rename to src/musredit_qt5/musredit/latex_images/generalExp.png diff --git a/src/musredit_qt5/latex_images/generalExp.tex b/src/musredit_qt5/musredit/latex_images/generalExp.tex similarity index 100% rename from src/musredit_qt5/latex_images/generalExp.tex rename to src/musredit_qt5/musredit/latex_images/generalExp.tex diff --git a/src/musredit_qt5/latex_images/internalBessel.png b/src/musredit_qt5/musredit/latex_images/internalBessel.png similarity index 100% rename from src/musredit_qt5/latex_images/internalBessel.png rename to src/musredit_qt5/musredit/latex_images/internalBessel.png diff --git a/src/musredit_qt5/latex_images/internalBessel.tex b/src/musredit_qt5/musredit/latex_images/internalBessel.tex similarity index 100% rename from src/musredit_qt5/latex_images/internalBessel.tex rename to src/musredit_qt5/musredit/latex_images/internalBessel.tex diff --git a/src/musredit_qt5/latex_images/internalField.png b/src/musredit_qt5/musredit/latex_images/internalField.png similarity index 100% rename from src/musredit_qt5/latex_images/internalField.png rename to src/musredit_qt5/musredit/latex_images/internalField.png diff --git a/src/musredit_qt5/latex_images/internalField.tex b/src/musredit_qt5/musredit/latex_images/internalField.tex similarity index 100% rename from src/musredit_qt5/latex_images/internalField.tex rename to src/musredit_qt5/musredit/latex_images/internalField.tex diff --git a/src/musredit_qt5/latex_images/internalFieldGK.png b/src/musredit_qt5/musredit/latex_images/internalFieldGK.png similarity index 100% rename from src/musredit_qt5/latex_images/internalFieldGK.png rename to src/musredit_qt5/musredit/latex_images/internalFieldGK.png diff --git a/src/musredit_qt5/latex_images/internalFieldLL.png b/src/musredit_qt5/musredit/latex_images/internalFieldLL.png similarity index 100% rename from src/musredit_qt5/latex_images/internalFieldLL.png rename to src/musredit_qt5/musredit/latex_images/internalFieldLL.png diff --git a/src/musredit_qt5/latex_images/polynom.png b/src/musredit_qt5/musredit/latex_images/polynom.png similarity index 100% rename from src/musredit_qt5/latex_images/polynom.png rename to src/musredit_qt5/musredit/latex_images/polynom.png diff --git a/src/musredit_qt5/latex_images/polynom.tex b/src/musredit_qt5/musredit/latex_images/polynom.tex similarity index 100% rename from src/musredit_qt5/latex_images/polynom.tex rename to src/musredit_qt5/musredit/latex_images/polynom.tex diff --git a/src/musredit_qt5/latex_images/simpleExp.png b/src/musredit_qt5/musredit/latex_images/simpleExp.png similarity index 100% rename from src/musredit_qt5/latex_images/simpleExp.png rename to src/musredit_qt5/musredit/latex_images/simpleExp.png diff --git a/src/musredit_qt5/latex_images/simpleExp.tex b/src/musredit_qt5/musredit/latex_images/simpleExp.tex similarity index 100% rename from src/musredit_qt5/latex_images/simpleExp.tex rename to src/musredit_qt5/musredit/latex_images/simpleExp.tex diff --git a/src/musredit_qt5/latex_images/simpleGauss.png b/src/musredit_qt5/musredit/latex_images/simpleGauss.png similarity index 100% rename from src/musredit_qt5/latex_images/simpleGauss.png rename to src/musredit_qt5/musredit/latex_images/simpleGauss.png diff --git a/src/musredit_qt5/latex_images/simpleGauss.tex b/src/musredit_qt5/musredit/latex_images/simpleGauss.tex similarity index 100% rename from src/musredit_qt5/latex_images/simpleGauss.tex rename to src/musredit_qt5/musredit/latex_images/simpleGauss.tex diff --git a/src/musredit_qt5/latex_images/statExpKT.png b/src/musredit_qt5/musredit/latex_images/statExpKT.png similarity index 100% rename from src/musredit_qt5/latex_images/statExpKT.png rename to src/musredit_qt5/musredit/latex_images/statExpKT.png diff --git a/src/musredit_qt5/latex_images/statExpKT.tex b/src/musredit_qt5/musredit/latex_images/statExpKT.tex similarity index 100% rename from src/musredit_qt5/latex_images/statExpKT.tex rename to src/musredit_qt5/musredit/latex_images/statExpKT.tex diff --git a/src/musredit_qt5/latex_images/statGssKT.png b/src/musredit_qt5/musredit/latex_images/statGssKT.png similarity index 100% rename from src/musredit_qt5/latex_images/statGssKT.png rename to src/musredit_qt5/musredit/latex_images/statGssKT.png diff --git a/src/musredit_qt5/latex_images/statGssKT.tex b/src/musredit_qt5/musredit/latex_images/statGssKT.tex similarity index 100% rename from src/musredit_qt5/latex_images/statGssKT.tex rename to src/musredit_qt5/musredit/latex_images/statGssKT.tex diff --git a/src/musredit_qt5/latex_images/textogif b/src/musredit_qt5/musredit/latex_images/textogif similarity index 100% rename from src/musredit_qt5/latex_images/textogif rename to src/musredit_qt5/musredit/latex_images/textogif diff --git a/src/musredit_qt5/latex_images/tfCos.png b/src/musredit_qt5/musredit/latex_images/tfCos.png similarity index 100% rename from src/musredit_qt5/latex_images/tfCos.png rename to src/musredit_qt5/musredit/latex_images/tfCos.png diff --git a/src/musredit_qt5/latex_images/tfCos.tex b/src/musredit_qt5/musredit/latex_images/tfCos.tex similarity index 100% rename from src/musredit_qt5/latex_images/tfCos.tex rename to src/musredit_qt5/musredit/latex_images/tfCos.tex diff --git a/src/musredit_qt5/main.cpp b/src/musredit_qt5/musredit/main.cpp similarity index 100% rename from src/musredit_qt5/main.cpp rename to src/musredit_qt5/musredit/main.cpp diff --git a/src/musredit_qt5/musredit.cfg b/src/musredit_qt5/musredit/musredit.cfg similarity index 100% rename from src/musredit_qt5/musredit.cfg rename to src/musredit_qt5/musredit/musredit.cfg diff --git a/src/musredit_qt5/musredit.dox b/src/musredit_qt5/musredit/musredit.dox similarity index 100% rename from src/musredit_qt5/musredit.dox rename to src/musredit_qt5/musredit/musredit.dox diff --git a/src/musredit_qt5/musredit.h b/src/musredit_qt5/musredit/musredit.h similarity index 100% rename from src/musredit_qt5/musredit.h rename to src/musredit_qt5/musredit/musredit.h diff --git a/src/musredit_qt5/musredit.pro b/src/musredit_qt5/musredit/musredit.pro similarity index 97% rename from src/musredit_qt5/musredit.pro rename to src/musredit_qt5/musredit/musredit.pro index 4a412554..aea89506 100644 --- a/src/musredit_qt5/musredit.pro +++ b/src/musredit_qt5/musredit/musredit.pro @@ -75,10 +75,11 @@ QT += network QT += printsupport QT += svg -INCLUDEPATH += "../include" +INCLUDEPATH += "../" +INCLUDEPATH += "../../include" HEADERS = musredit.h \ - musrfit-info.h \ + ../musrfit-info.h \ PHelp.h \ PTextEdit.h \ PSubTextEdit.h \ @@ -102,7 +103,7 @@ HEADERS = musredit.h \ PMsr2DataDialog.h \ PChangeDefaultPathsDialog.h \ PMusrEditAbout.h \ - ../include/git-revision.h + ../../include/git-revision.h SOURCES = PHelp.cpp \ PTextEdit.cpp \ diff --git a/src/musredit_qt5/musredit.qrc b/src/musredit_qt5/musredit/musredit.qrc similarity index 100% rename from src/musredit_qt5/musredit.qrc rename to src/musredit_qt5/musredit/musredit.qrc From 377c2acc025f3fd04aeb435b083611041a6814cd Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Sat, 25 Mar 2017 12:34:14 +0100 Subject: [PATCH 19/43] add musrWiz to musredit_qt5 directly in musrfit. --- src/musredit_qt5/musrStep/musrStep | Bin 1072800 -> 0 bytes src/musredit_qt5/musrWiz/PAdmin.cpp | 1303 +++++++++ src/musredit_qt5/musrWiz/PAdmin.h | 202 ++ src/musredit_qt5/musrWiz/PInstrumentDef.cpp | 153 + src/musredit_qt5/musrWiz/PInstrumentDef.h | 163 ++ src/musredit_qt5/musrWiz/PMusrWiz.cpp | 2573 +++++++++++++++++ src/musredit_qt5/musrWiz/PMusrWiz.h | 412 +++ src/musredit_qt5/musrWiz/PMusrfitFunc.cpp | 56 + src/musredit_qt5/musrWiz/PMusrfitFunc.h | 84 + src/musredit_qt5/musrWiz/PTheoTemplate.cpp | 156 + src/musredit_qt5/musrWiz/PTheoTemplate.h | 69 + src/musredit_qt5/musrWiz/README.md | 1 + .../musrWiz/func_defs/musrfit_funcs.xml | 502 ++++ .../musrWiz/icons/musrWiz-22x22-dark.svg | 161 ++ .../musrWiz/icons/musrWiz-22x22.png | Bin 0 -> 387 bytes .../musrWiz/icons/musrWiz-22x22.svg | 161 ++ .../musrWiz/icons/musrWiz-32x32-dark.svg | 160 + .../musrWiz/icons/musrWiz-32x32.png | Bin 0 -> 542 bytes .../musrWiz/icons/musrWiz-32x32.svg | 160 + .../instrument_defs/instrument_def_isis.xml | 23 + .../instrument_defs/instrument_def_psi.xml | 145 + src/musredit_qt5/musrWiz/musrWiz.cpp | 138 + src/musredit_qt5/musrWiz/musrWiz.h | 75 + src/musredit_qt5/musrWiz/musrWiz.pro | 58 + src/musredit_qt5/musrWiz/musrWiz.qrc | 8 + src/musredit_qt5/musrWiz/musrWiz.xml | 8 + src/musredit_qt5/musredit.pro | 20 + 27 files changed, 6791 insertions(+) delete mode 100755 src/musredit_qt5/musrStep/musrStep create mode 100644 src/musredit_qt5/musrWiz/PAdmin.cpp create mode 100644 src/musredit_qt5/musrWiz/PAdmin.h create mode 100644 src/musredit_qt5/musrWiz/PInstrumentDef.cpp create mode 100644 src/musredit_qt5/musrWiz/PInstrumentDef.h create mode 100644 src/musredit_qt5/musrWiz/PMusrWiz.cpp create mode 100644 src/musredit_qt5/musrWiz/PMusrWiz.h create mode 100644 src/musredit_qt5/musrWiz/PMusrfitFunc.cpp create mode 100644 src/musredit_qt5/musrWiz/PMusrfitFunc.h create mode 100644 src/musredit_qt5/musrWiz/PTheoTemplate.cpp create mode 100644 src/musredit_qt5/musrWiz/PTheoTemplate.h create mode 100644 src/musredit_qt5/musrWiz/README.md create mode 100644 src/musredit_qt5/musrWiz/func_defs/musrfit_funcs.xml create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-22x22-dark.svg create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-22x22.png create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-22x22.svg create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-32x32-dark.svg create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-32x32.png create mode 100644 src/musredit_qt5/musrWiz/icons/musrWiz-32x32.svg create mode 100644 src/musredit_qt5/musrWiz/instrument_defs/instrument_def_isis.xml create mode 100644 src/musredit_qt5/musrWiz/instrument_defs/instrument_def_psi.xml create mode 100644 src/musredit_qt5/musrWiz/musrWiz.cpp create mode 100644 src/musredit_qt5/musrWiz/musrWiz.h create mode 100644 src/musredit_qt5/musrWiz/musrWiz.pro create mode 100644 src/musredit_qt5/musrWiz/musrWiz.qrc create mode 100644 src/musredit_qt5/musrWiz/musrWiz.xml create mode 100644 src/musredit_qt5/musredit.pro diff --git a/src/musredit_qt5/musrStep/musrStep b/src/musredit_qt5/musrStep/musrStep deleted file mode 100755 index de79630e3cbe79ff85a0c793dc1153a296c59c36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072800 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�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 z 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