Skip to content

Commit

Permalink
Added more to Symmetrise tab
Browse files Browse the repository at this point in the history
Refs #7860
  • Loading branch information
DanNixon committed Aug 20, 2014
1 parent d4290a1 commit 4dae20b
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 23 deletions.
Expand Up @@ -66,8 +66,10 @@ namespace CustomInterfaces
virtual bool validate();

private slots:
void plotRawInput();
void updateRangeSelector(QtProperty *prop, double value);
void plotRawInput(const QString &workspaceName);
void updateRawPlot();
void replotNewSpectrum(QtProperty *prop, double value);
void updateRangeSelectors(QtProperty *prop, double value);

};
} // namespace CustomInterfaces
Expand Down
Expand Up @@ -228,9 +228,12 @@ namespace CustomInterfaces
if(cID == "")
cID = plotID;

//check if we can plot
// Check if we can plot
if( wsIndex >= workspace->getNumberHistograms() || workspace->readX(0).size() < 2 )
{
g_log.error("Spectrum index out of range for this workspace");
return;
}

QwtWorkspaceSpectrumData wsData(*workspace, static_cast<int>(wsIndex), false);

Expand Down
127 changes: 107 additions & 20 deletions Code/Mantid/MantidQt/CustomInterfaces/src/IndirectSymmetrise.cpp
Expand Up @@ -31,33 +31,52 @@ namespace CustomInterfaces

// Create Properties
m_properties["XCut"] = m_dblManager->addProperty("X Cut");
/* m_dblManager->setMinimum(m_properties["XCut"], 0); */
m_propTrees["SymmPropTree"]->addProperty(m_properties["XCut"]);

QtProperty* rawPlotProps = m_grpManager->addProperty("Raw Plot");
m_propTrees["SymmPropTree"]->addProperty(rawPlotProps);

m_properties["PreviewSpec"] = m_dblManager->addProperty("Spectrum No");
m_dblManager->setDecimals(m_properties["PreviewSpec"], 0);
rawPlotProps->addSubProperty(m_properties["PreviewSpec"]);

m_properties["PreviewRange"] = m_dblManager->addProperty("X Range");
rawPlotProps->addSubProperty(m_properties["PreviewRange"]);

// Raw plot
m_plots["SymmRawPlot"] = new QwtPlot(m_parentWidget);
m_curves["SymmRawPlot"] = new QwtPlotCurve();

m_rangeSelectors["SlicePeak"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"]);
m_rangeSelectors["SliceBackground"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"]);
m_rangeSelectors["NegativeXCut"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"], MantidWidgets::RangeSelector::XSINGLE);
m_rangeSelectors["PositiveXCut"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"], MantidWidgets::RangeSelector::XSINGLE);

m_rangeSelectors["CentreMark"] = new MantidWidgets::RangeSelector(m_plots["SymmRawPlot"],
MantidWidgets::RangeSelector::XSINGLE, true, true);
m_rangeSelectors["CentreMark"]->setColour(Qt::cyan);
m_rangeSelectors["CentreMark"]->setMinimum(0.0);

m_plots["SymmRawPlot"]->setAxisFont(QwtPlot::xBottom, parent->font());
m_plots["SymmRawPlot"]->setAxisFont(QwtPlot::yLeft, parent->font());
m_plots["SymmRawPlot"]->setCanvasBackground(Qt::white);
m_uiForm.symm_plot->addWidget(m_plots["SymmRawPlot"]);

// Refresh the plot windows
/* m_plots["SymmRawPlot"]->replot(); */
m_plots["SymmRawPlot"]->replot();

// SIGNAL/SLOT CONNECTIONS

/* // Update properties when a range selector is changed */
/* connect(m_rangeSelectors["SlicePeak"], SIGNAL(minValueChanged(double)), this, SLOT(sliceMinChanged(double))); */
/* connect(m_rangeSelectors["SlicePeak"], SIGNAL(maxValueChanged(double)), this, SLOT(sliceMaxChanged(double))); */
/* connect(m_rangeSelectors["SliceBackground"], SIGNAL(minValueChanged(double)), this, SLOT(sliceMinChanged(double))); */
/* connect(m_rangeSelectors["SliceBackground"], SIGNAL(maxValueChanged(double)), this, SLOT(sliceMaxChanged(double))); */
/* // Update range selctors when a property is changed */
/* connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(sliceUpdateRS(QtProperty*, double))); */
// Update range selctors when a property is changed
connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(updateRangeSelectors(QtProperty*, double)));
// Plot a new spectrum when the user changes the value of the preview spectrum
connect(m_dblManager, SIGNAL(valueChanged(QtProperty*, double)), this, SLOT(replotNewSpectrum(QtProperty*, double)));
// Plot miniplot when file has finished loading
connect(m_uiForm.symm_dsInput, SIGNAL(dataReady(const QString&)), this, SLOT(plotRawInput(const QString&)));

// Set default XCut value
m_dblManager->setValue(m_properties["XCut"], 0.3);

// Set default x axis range
std::pair<double, double> defaultRange(-1.0, 1.0);
setAxisRange("SymmRawPlot", QwtPlot::xBottom, defaultRange);
}

//----------------------------------------------------------------------------------------------
Expand All @@ -71,25 +90,93 @@ namespace CustomInterfaces
{
}

bool IndirectSymmetrise::validate()
{
// Check for a valid input file
if(!m_uiForm.symm_dsInput->isValid())
return false;

// Check for a valid XCut value
if(m_dblManager->value(m_properties["XCut"]) <= 0.0)
return false;

return true;
}

void IndirectSymmetrise::run()
{
//TODO
using namespace Mantid::API;

QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
QString outputWorkspaceName = workspaceName.left(workspaceName.length() - 4) + "_Symmetrise";

bool plot = m_uiForm.symm_ckPlot->isChecked();
bool verbose = m_uiForm.symm_ckVerbose->isChecked();
bool save = m_uiForm.symm_ckSave->isChecked();

double x_cut = m_dblManager->value(m_properties["XCut"]);

IAlgorithm_sptr symmetriseAlg = AlgorithmManager::Instance().create("Symmetrise", -1);
symmetriseAlg->initialize();
symmetriseAlg->setProperty("Sample", workspaceName.toStdString());
symmetriseAlg->setProperty("XCut", x_cut);
symmetriseAlg->setProperty("Plot", plot);
symmetriseAlg->setProperty("Verbose", verbose);
symmetriseAlg->setProperty("Save", save);
symmetriseAlg->setProperty("OutputWorkspace", outputWorkspaceName.toStdString());

// Execute algorithm on seperate thread
runAlgorithm(symmetriseAlg);
}

void IndirectSymmetrise::plotRawInput(const QString &workspaceName)
{
UNUSED_ARG(workspaceName);

updateRawPlot();

auto axisRange = getCurveRange("SymmRawPlot");
double symmRange = fmax(fabs(axisRange.first), fabs(axisRange.second));
g_log.information() << "Symmetrise x axis range +/- " << symmRange << std::endl;
m_dblManager->setValue(m_properties["PreviewRange"], symmRange);

updateRawPlot();
}

bool IndirectSymmetrise::validate()
void IndirectSymmetrise::updateRawPlot()
{
//TODO
return false;
if(!m_uiForm.symm_dsInput->isValid())
return;

QString workspaceName = m_uiForm.symm_dsInput->getCurrentDataName();
int spectrumNumber = static_cast<int>(m_dblManager->value(m_properties["PreviewSpec"]));

Mantid::API::MatrixWorkspace_sptr input = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(
Mantid::API::AnalysisDataService::Instance().retrieve(workspaceName.toStdString()));

std::pair<double, double>range;
range.first = -m_dblManager->value(m_properties["PreviewRange"]);
range.second = m_dblManager->value(m_properties["PreviewRange"]);
setAxisRange("SymmRawPlot", QwtPlot::xBottom, range);

plotMiniPlot(input, spectrumNumber, "SymmRawPlot");
}

void IndirectSymmetrise::plotRawInput()
void IndirectSymmetrise::replotNewSpectrum(QtProperty *prop, double value)
{
//TODO
UNUSED_ARG(value);

if((prop == m_properties["PreviewSpec"]) || (prop == m_properties["PreviewRange"]))
updateRawPlot();
}

void IndirectSymmetrise::updateRangeSelector(QtProperty *prop, double value)
void IndirectSymmetrise::updateRangeSelectors(QtProperty *prop, double value)
{
//TODO
if(prop == m_properties["XCut"])
{
m_rangeSelectors["NegativeXCut"]->setMinimum(-value);
m_rangeSelectors["PositiveXCut"]->setMinimum(value);
}
}

} // namespace CustomInterfaces
Expand Down

0 comments on commit 4dae20b

Please sign in to comment.