Skip to content

Commit

Permalink
build output calibration filename, re #12610
Browse files Browse the repository at this point in the history
  • Loading branch information
FedeMPouzols committed Aug 10, 2015
1 parent 51e7e22 commit 558b151
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,20 @@ class MANTIDQT_CUSTOMINTERFACES_DLL EnggDiffractionViewQtGUI

std::string getRBNumber() const;

EnggDiffCalibSettings currentCalibSettings() const {
return m_calibSettings;
}
EnggDiffCalibSettings currentCalibSettings() const { return m_calibSettings; }

std::string currentInstrument() const { return m_currentInst; }

std::string currentVanadiumNo() const;

std::string currentCeriaNo() const;

std::string newVanadiumNo() const;

std::string newCeriaNo() const;

std::string outCalibFilename() const { return m_outCalibFilename; }

private slots:
/// for buttons, do calibrate and similar
void loadCalibrationClicked();
Expand All @@ -101,7 +109,10 @@ private slots:
void doSetupGeneralWidgets();
void doSetupTabCalib();
void doSetupTabSettings();

std::string guessGSASTemplatePath() const;
std::string buildCalibrateSuggestedFilename(const std::string &vanNo,
const std::string &ceriaNo) const;

/// Load default interface settings for each tab, normally on startup
void readSettings();
Expand Down Expand Up @@ -131,6 +142,7 @@ private slots:
std::string m_currentCalibFilename;
// calibration settings - from/to the 'settings' tab
EnggDiffCalibSettings m_calibSettings;
std::string m_outCalibFilename;

/// for the 'Rebin' parameter of some Engg* algorithms
static const double s_defaultRebinWidth;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,27 @@ class IEnggDiffractionView {
*/
virtual std::string currentInstrument() const = 0;

/**
* The Vanadium run number used in the current calibration
*
* @return Vanadium run number, as a string
*/
virtual std::string currentVanadiumNo() const = 0;

/**
* The Ceria (CeO2) run number used in the current calibration
*
* @return Vanadium run number, as a string
*/
virtual std::string currentCeriaNo() const = 0;

/**
* The filename (can be full path) selected to write a calibration
*
* @return file name
*/
virtual std::string outCalibFilename() const = 0;

/**
* Save settings (normally when closing the interface). This
* concerns only GUI settings, such as window max/min status and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,12 +161,16 @@ void EnggDiffractionViewQtGUI::saveSettings() const {
qs.setValue("current-calib-filename", "");

// TODO: this should become << >> operators on EnggDiffCalibSettings
qs.setValue("input-dir-calib-files", QString::fromStdString(m_calibSettings.m_inputDirCalib));
qs.setValue("input-dir-raw-files", QString::fromStdString(m_calibSettings.m_inputDirRaw));
qs.setValue("pixel-calib-filename", QString::fromStdString(m_calibSettings.m_pixelCalibFilename));
qs.setValue("input-dir-calib-files",
QString::fromStdString(m_calibSettings.m_inputDirCalib));
qs.setValue("input-dir-raw-files",
QString::fromStdString(m_calibSettings.m_inputDirRaw));
qs.setValue("pixel-calib-filename",
QString::fromStdString(m_calibSettings.m_pixelCalibFilename));
// 'advanced' block
qs.setValue("force-recalc-overwrite", m_calibSettings.m_forceRecalcOverwrite);
qs.setValue("template-gsas-prm", QString::fromStdString(m_calibSettings.m_templateGSAS_PRM));
qs.setValue("template-gsas-prm",
QString::fromStdString(m_calibSettings.m_templateGSAS_PRM));
qs.setValue("rebin-calib", m_calibSettings.m_rebinCalibrate);

qs.setValue("interface-win-geometry", saveGeometry());
Expand Down Expand Up @@ -227,7 +231,69 @@ void EnggDiffractionViewQtGUI::loadCalibrationClicked() {
m_presenter->notify(IEnggDiffractionPresenter::LoadExistingCalib);
}

/**
* Build a suggested name for a new calibration, by appending instrument name,
* relevant run numbers, etc., like: ENGINX_241391_236516_both_banks.par
*
* @param vanNo number of the Vanadium run
* @param ceriaNo number of the Ceria run
*
* @return Suggested name for a new calibration file, following
* ENGIN-X practices
*/
std::string EnggDiffractionViewQtGUI::buildCalibrateSuggestedFilename(
const std::string &vanNo, const std::string &ceriaNo) const {
std::string instStr = "ENGINX";
if ("ENGIN-X" != currentInstrument()) {
instStr = "UNKNOWN_INST";
}

// default extension for calibration files
const std::string calibExt = ".prm";
std::string sugg = instStr + "_" + vanNo + "_" + ceriaNo + "_"
"_both_banks" +
"." + calibExt;

return sugg;
}

void EnggDiffractionViewQtGUI::calibrateClicked() {
QString prevPath = QString::fromStdString(m_calibSettings.m_inputDirCalib);
if (prevPath.isEmpty()) {
prevPath =
MantidQt::API::AlgorithmInputHistory::Instance().getPreviousDirectory();
}

QString vanNo = m_uiTabCalib.lineEdit_new_vanadium_num->text();
if (vanNo.isEmpty()) {
userWarning(
"Error in the inputs",
"The Vanadium number cannot be empty and must be an integer number");
}
QString ceriaNo = m_uiTabCalib.lineEdit_new_ceria_num->text();
if (ceriaNo.isEmpty()) {
userWarning(
"Error in the inputs",
"The Ceria number cannot be empty and must be an integer number");
}
std::string fname = buildCalibrateSuggestedFilename(vanNo.toStdString(),
ceriaNo.toStdString());

// append dir (basename) + filename
QDir path(prevPath);
QString suggFilename = path.filePath(QString::fromStdString(fname));

const QString calibExt = QString("Supported formats: IPARM file for GSAS "
"(*.prm *.par *.iparm);;"
"Other extensions/all files (*.*)");
QString filename = QFileDialog::getSaveFileName(
this, tr("Please select the name of the calibration file"), suggFilename,
calibExt);

if (filename.isEmpty()) {
return;
}

m_presenter->notify(IEnggDiffractionPresenter::CalcCalib);
}

Expand All @@ -247,6 +313,8 @@ void EnggDiffractionViewQtGUI::browseInputDirCalib() {

MantidQt::API::AlgorithmInputHistory::Instance().setPreviousDirectory(dir);
m_calibSettings.m_inputDirCalib = dir.toStdString();
m_uiTabSettings.lineEdit_input_dir_calib->setText(
QString::fromStdString(m_calibSettings.m_inputDirCalib));
}

void EnggDiffractionViewQtGUI::browseInputDirRaw() {
Expand All @@ -265,16 +333,18 @@ void EnggDiffractionViewQtGUI::browseInputDirRaw() {

MantidQt::API::AlgorithmInputHistory::Instance().setPreviousDirectory(dir);
m_calibSettings.m_inputDirRaw = dir.toStdString();
m_uiTabSettings.lineEdit_input_dir_raw->setText(
QString::fromStdString(m_calibSettings.m_inputDirRaw));
}

void EnggDiffractionViewQtGUI::browsePixelCalibFilename() {
const QString calExt =
QString("Supported formats: CSV, NXS "
"(*.csv *.nxs *.nexus);;"
"Comma separated values text file with calibration table "
QString("Comma separated values text file with calibration table "
"(*.csv);;"
"Nexus file with calibration table "
"(*.nxs *.nexus);;"
"Supported formats: CSV, NXS "
"(*.csv *.nxs *.nexus);;"
"Other extensions/all files (*.*)");

QString prevPath = QString::fromStdString(m_calibSettings.m_inputDirCalib);
Expand All @@ -288,6 +358,8 @@ void EnggDiffractionViewQtGUI::browsePixelCalibFilename() {
calExt));

m_calibSettings.m_pixelCalibFilename = filename.toStdString();
m_uiTabSettings.lineEdit_pixel_calib_filename->setText(
QString::fromStdString(m_calibSettings.m_pixelCalibFilename));
}

void EnggDiffractionViewQtGUI::browseTemplateGSAS_PRM() {
Expand All @@ -304,6 +376,8 @@ void EnggDiffractionViewQtGUI::browseTemplateGSAS_PRM() {
}

m_calibSettings.m_templateGSAS_PRM = path.toStdString();
m_uiTabSettings.lineEdit_template_gsas_prm->setText(
QString::fromStdString(m_calibSettings.m_templateGSAS_PRM));
}

void EnggDiffractionViewQtGUI::instrumentChanged(int /*idx*/) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ class MockEnggDiffractionView
// std::string currentInstrument() const;
MOCK_CONST_METHOD0(currentInstrument, std::string());

// virtual std::string currentVanadiumNo() const;
MOCK_CONST_METHOD0(currentVanadiumNo, std::string());

// virtual std::string currentCeriaNo() const;
MOCK_CONST_METHOD0(currentCeriaNo, std::string());

// virtual std::string outCalibFilename() const;
MOCK_CONST_METHOD0(outCalibFilename, std::string());

// void saveSettings() const;
MOCK_CONST_METHOD0(saveSettings, void());
};
Expand Down

0 comments on commit 558b151

Please sign in to comment.