/*************************************************************************** PMusrWiz.h Author: Andreas Suter e-mail: andreas.suter@psi.ch ***************************************************************************/ /*************************************************************************** * Copyright (C) 2007-2021 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 _PMUSRWIZ_ #define _PMUSRWIZ_ #include #include #include #include #include #include #include #include #include #include #include #include #include "musrWiz.h" #include "PAdmin.h" #define INST_UNDEF 0 #define INST_PSI 1 #define INST_TRIUMF 2 #define INST_ISIS 3 #define INST_JPARC 4 #define FIT_TYPE_UNDEF 0 #define FIT_TYPE_SINGLE_HISTO 1 #define FIT_TYPE_SINGLE_HISTO_RRF 2 #define FIT_TYPE_ASYMMETRY 3 #define FIT_TYPE_ASYMMETRY_RRF 4 #define FIT_TYPE_MU_MINUS 5 #define FIT_TYPE_NONE_MUSR 6 #define MEASURE_UNDEF 0 #define MEASURE_ZF 1 #define MEASURE_TF 2 #define MEASURE_LF 3 #define T0_FROM_FILE 0 #define T0_FROM_MUSR_T0 1 #define T0_ENTER_WIZ 2 //------------------------------------------------------------------- struct PParamGui { QLineEdit *paramName; QLineEdit *paramVal; QLineEdit *paramStep; QLineEdit *paramBoundLow; QLineEdit *paramBoundHigh; }; //------------------------------------------------------------------- class PMsrData { public: PMsrData(); ~PMsrData(); void clearParam() { fParam.clear(); } void clearFunc() { fFunc.clear(); } void clearMap() { fMap.clear(); } void setMsrPathName(QString str) { fMsrPathName = str; } void setMsrFileName(QString fileName) { fMsrFileName = fileName; } void appendMsrFileName(QString str) { fMsrFileName += str; } void setYear(QString year) { fYear = year; } void setRunNumber(int runNo) { fRunNumber = runNo; } void setInstitute(QString institute) { fInstitute = institute; } void setInstrument(QString instrument) { fInstrument = instrument; } void setSetup(QString setup) { fSetup = setup; } void setFitType(int fitType) { fFitType = fitType; } void setTypeOfMeasurement(int type) { fTypeOfMeasurement = type; } void setT0Tag(int tag) { fT0Tag = tag; } void setT0(int t0) { fT0 = t0; } void setTheory(QString str) { fTheo = str; } void setParam(QVector param) { fParam = param; } void setParam(int idx, PParam param); void appendParam(QVector param); void setMap(QVector map) { fMap = map; } void setMap(int idx, PParam map); void appendMap(QVector map); void setMapTemplateName(int idx, QString name); void setFunc(int funNo, QString str="??"); void setPacking(int pack) { fPacking = abs(pack); } void setFitStart(double start) { fFitStart = start; } void setFitEnd(double end) { fFitEnd = end; } void setCmd(QString cmd) { fCommands = cmd; } void setTemplate(int templ) { fTemplate = templ; } void setTemplate(PTheoTemplate templ) { fTheoTempl = templ; } QString getMsrPathName() { return fMsrPathName; } QString getMsrFileName() { return fMsrFileName; } QString getYear() { return fYear; } int getRunNumber() { return fRunNumber; } QString getInstitute() { return fInstitute; } QString getInstrument() { return fInstrument; } QString getSetup() { return fSetup; } int getFitType() { return fFitType; } QString getFitTypeString(); int getTypeOfMeasurement() { return fTypeOfMeasurement; } int getT0Tag() { return fT0Tag; } int getT0() { return fT0; } QString getTheory() { return fTheo; } int getNoOfParam() { return fParam.size(); } PParam getParam(int idx); int getNoOfMap() { return fMap.size(); } PParam getMap(int idx); int getNoOfFunc() { return fFunc.size(); } int getFuncNo(int idx); bool isPresent(const QString funStr); QString getFunc(int funNo); QString getFuncAll(); int getPacking() { return fPacking; } double getFitStart() { return fFitStart; } double getFitEnd() { return fFitEnd; } QString getCmd() { return fCommands; } bool isTemplate() { return (fTemplate == -1) ? false : true; } PTheoTemplate getTemplate() { return fTheoTempl; } void sort(QString whichVec); void removeFunc(QVector &funList); private: int fTemplate; QString fMsrPathName; QString fMsrFileName; int fRunNumber; QString fInstitute; QString fInstrument; QString fSetup; int fFitType; int fTypeOfMeasurement; int fT0Tag; int fT0; QString fYear; int fPacking; double fFitStart; double fFitEnd; QString fCommands; QString fTheo; PTheoTemplate fTheoTempl; QVector fParam; QVector fFunc; QVector fMap; }; //------------------------------------------------------------------- class PShowTheo : public QDialog { public: PShowTheo(QString theo, QString func = QString(""), QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); }; //------------------------------------------------------------------- class PIntroPage : public QWizardPage { Q_OBJECT public: PIntroPage(PAdmin *admin, PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; bool validatePage() override; private slots: void handleInstituteChanged(int idx); void handleFitType(int idx); void checkSetup(int idx); void handleT0(int idx); private: PAdmin *fAdmin; PMsrData *fMsrData; QLineEdit *fMsrFileName; QLineEdit *fYear; QLineEdit *fRunNumber; QComboBox *fInstitute; QComboBox *fInstrument; QComboBox *fFitType; QComboBox *fMeasurementType; QComboBox *fT0; }; //------------------------------------------------------------------- class PTheoPage : public QWizardPage { Q_OBJECT public: PTheoPage(PAdmin *admin, PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; void initializePage() override; bool validatePage() override; private slots: void templateState(int); void clearAll(); void addTheory(); void checkTheory(); private: PAdmin *fAdmin; PMsrData *fMsrData; bool fTheoValid; bool fHaveMap; bool fHaveFunc; int fTheoBlockNo; QVector fParamList; QVector fMapList; QVector fFunList; QPlainTextEdit *fTheo; QCheckBox *fEditTemplate; QPushButton *fClearAll; QComboBox *fTheoSelect; QPushButton *fTheoAdd; QPushButton *fCheckTheo; QString getTheoryFunction(int idx); bool analyzeTokens(QString str, int noOfTokens); void dealWithParam(QString theo, int paramNo, int paramIdx); void dealWithMap(QString theo, int mapNo, int paramIdx); void dealWithFun(int funNo); }; //------------------------------------------------------------------- class PFuncPage : public QWizardPage { Q_OBJECT public: PFuncPage(PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; void initializePage() override; void cleanupPage() override; bool validatePage() override; private slots: void showTheo(); private: PMsrData *fMsrData; QFormLayout *fMapPageLayout; QPlainTextEdit *fFunc; QPushButton *fShowTheo; int getFuncNo(const QString str); }; //------------------------------------------------------------------- class PMapPage : public QWizardPage { Q_OBJECT public: PMapPage(PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; void initializePage() override; bool validatePage() override; private slots: void showTheo(); private: PMsrData *fMsrData; QFormLayout *fMapPageLayout; QVector fMapGuiVec; QPushButton *fShowTheo; }; //------------------------------------------------------------------- class PParamPage : public QWizardPage { Q_OBJECT public: PParamPage(PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; void initializePage() override; bool validatePage() override; private slots: void showTheo(); private: PMsrData *fMsrData; QFormLayout *fParameterPageLayout; QVector fParamGuiVec; QPushButton *fShowTheo; }; //------------------------------------------------------------------- class PFitInfoPage : public QWizardPage { Q_OBJECT public: PFitInfoPage(PMsrData *data, QWidget *parent=0); int nextId() const Q_DECL_OVERRIDE; void initializePage() override; bool validatePage() override; private: PMsrData *fMsrData; QLineEdit *fFitRangeStart; QLineEdit *fFitRangeEnd; QLineEdit *fPacking; QPlainTextEdit *fCommands; }; //------------------------------------------------------------------- class PConclusionPage : public QWizardPage { Q_OBJECT public: PConclusionPage(PAdmin *admin, PMsrData *data, QString *msrFilePath, QWidget *parent=0); private slots: void saveAsMsrFile(); void saveAsTemplate(); private: QString *fMsrFilePath; PAdmin *fAdmin; PMsrData *fMsrData; QLabel *fMsrPathFileLabel; QLineEdit *fMsrFilePathLineEdit; QPushButton *fSaveAsMsrFile; QPushButton *fSaveAsTemplate; }; //------------------------------------------------------------------- class PMusrWiz : public QWizard { Q_OBJECT friend class PIntroPage; friend class PTheoPage; friend class PMapPage; friend class PFuncPage; friend class PParamPage; friend class PFitInfoPage; public: PMusrWiz(QWidget *parent=Q_NULLPTR); PMusrWiz(PAdmin *admin, PMsrData *msrData, QWidget *parent=Q_NULLPTR); virtual ~PMusrWiz(); private slots: virtual int writeMsrFile(int result); virtual void help(); protected: enum {ePageIntro, ePageTheory, ePageMaps, ePageFunctions, ePageParameters, ePageFitInfo, ePageConclusion}; private: QString fMsrFilePath; PAdmin *fAdmin; PMsrData *fMsrData; QString getRunName(PInstrument *instru); virtual int writeMsrFileSingleHisto(); virtual int writeMsrFileAsymmetry(); }; #endif // _PMUSRWIZ_