Skip to content

Commit

Permalink
Enh: add control for window size to gui
Browse files Browse the repository at this point in the history
  • Loading branch information
RDoerfel committed Apr 24, 2022
1 parent de0f949 commit d3e2c9e
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 39 deletions.
22 changes: 18 additions & 4 deletions applications/mne_scan/plugins/hpi/hpi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,15 +322,18 @@ void Hpi::initPluginControlWidgets()
this, &Hpi::onAllowedMovementChanged);
connect(pHpiSettingsView, &HpiSettingsView::allowedRotationChanged,
this, &Hpi::onAllowedRotationChanged);
connect(pHpiSettingsView, &HpiSettingsView::fittingRepetitionTimeChanged,
connect(pHpiSettingsView, &HpiSettingsView::repetitionTimeChanged,
this, &Hpi::setTimeBetweenFits);
connect(pHpiSettingsView, &HpiSettingsView::fittingWindowTimeChanged,
this, &Hpi::setFittingWindowSize);
connect(this, &Hpi::errorsChanged,
pHpiSettingsView, &HpiSettingsView::setErrorLabels, Qt::BlockingQueuedConnection);
connect(this, &Hpi::movementResultsChanged,
pHpiSettingsView, &HpiSettingsView::setMovementResults, Qt::BlockingQueuedConnection);
connect(this, &Hpi::newDigitizerList,
pHpiSettingsView, &HpiSettingsView::newDigitizerList);

connect(this, &Hpi::minimumWindowSizeChanged,
pHpiSettingsView, &HpiSettingsView::setMinimumWindowSize);

onSspStatusChanged(pHpiSettingsView->getSspStatusChanged());
onCompStatusChanged(pHpiSettingsView->getCompStatusChanged());
Expand Down Expand Up @@ -521,14 +524,22 @@ void Hpi::onContHpiStatusChanged(bool bChecked)

//=============================================================================================================

void Hpi::setFittingWindowSize(double dRepetitionTime)
void Hpi::setTimeBetweenFits(double dRepetitionTime)
{
QMutexLocker locker(&m_mutex);
m_iRepetitionTimeInSamples = dRepetitionTime * m_pFiffInfo->sfreq;
}

//=============================================================================================================

void Hpi::setFittingWindowSize(double dFittingWindowSizeInMillisecons)
{
QMutexLocker locker(&m_mutex);
m_iFittingWindowSize = dFittingWindowSizeInMillisecons / 1000.0 * m_pFiffInfo->sfreq;
}

//=============================================================================================================

void Hpi::onDevHeadTransAvailable(const FIFFLIB::FiffCoordTrans& devHeadTrans)
{
m_pFiffInfo->dev_head_t = devHeadTrans;
Expand Down Expand Up @@ -567,7 +578,10 @@ int Hpi::computeMinimalWindowsize()
}

// compute buffersize needed to provide this resolution in frequency space N = FS/df
return ceil(dSFreq/iMinDeltaF);
int iWindowSize = ceil(dSFreq/iMinDeltaF);
minimumWindowSizeChanged(iWindowSize/dSFreq);

return iWindowSize;
}

//=============================================================================================================
Expand Down
15 changes: 13 additions & 2 deletions applications/mne_scan/plugins/hpi/hpi.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,13 +239,22 @@ class HPISHARED_EXPORT Hpi : public SCSHAREDLIB::AbstractAlgorithm
*/
void onDevHeadTransAvailable(const FIFFLIB::FiffCoordTrans& devHeadTrans);


//=========================================================================================================
/**
* Set fitting window size when doing continuous hpi using the repetition time as measure.
* Set repetition time between hpi fits.
*
* @param[in] dRepetitionTime Repetition time in seconds
*/
void setFittingWindowSize(double dRepetitionTime);
void setTimeBetweenFits(double dRepetitionTimeInSeconds);

//=========================================================================================================
/**
* Set hpi fitting window size.
*
* @param[in] dFittingWindowSizeInSeconds Fitting window size in seconds
*/
void setFittingWindowSize(double dFittingWindowSizeInSeconds);

//=========================================================================================================
/**
Expand Down Expand Up @@ -334,6 +343,8 @@ class HPISHARED_EXPORT Hpi : public SCSHAREDLIB::AbstractAlgorithm
SCSHAREDLIB::PluginOutputData<SCMEASLIB::RealTimeHpiResult>::SPtr m_pHpiOutput; /**< The RealTimeHpiResult of the Hpi output.*/

signals:
void minimumWindowSizeChanged(const double dWindowSizeInSeconds);

void errorsChanged(const QVector<double>& vErrors,
double dMeanErrorDist);
void movementResultsChanged(double dMovement,
Expand Down
77 changes: 62 additions & 15 deletions libraries/disp/viewers/formfiles/hpisettingsview.ui
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab_loadDigitizers">
<attribute name="title">
Expand Down Expand Up @@ -319,7 +319,7 @@
<item>
<widget class="QCheckBox" name="m_checkBox_continousHPI">
<property name="text">
<string>Do continous HPI fitting at</string>
<string>Do continous HPI fitting </string>
</property>
</widget>
</item>
Expand All @@ -328,6 +328,12 @@
</item>
<item>
<widget class="QFrame" name="frame_samplesToFit">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>61</width>
Expand All @@ -340,36 +346,77 @@
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="topMargin">
<number>4</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="QSpinBox" name="m_spinBox_samplesToFit">
<layout class="QFormLayout" name="formLayout_5">
<item row="0" column="0">
<widget class="QDoubleSpinBox" name="m_doubleSpinBox_fittingRepetitionTime">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>70</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<number>10</number>
<double>0.200000000000000</double>
</property>
<property name="maximum">
<number>1000000</number>
<double>30.000000000000000</double>
</property>
<property name="singleStep">
<double>0.500000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSpinBox" name="m_spinBox_windowSize">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>70</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>200</number>
</property>
</widget>
</item>
<item>
<item row="0" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Win Size [Samples]</string>
<string>Time between fits [Seconds]</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Window Size [Milliseconds]</string>
</property>
</widget>
</item>
Expand Down
31 changes: 19 additions & 12 deletions libraries/disp/viewers/hpisettingsview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,6 @@ HpiSettingsView::HpiSettingsView(const QString& sSettingsPath,
m_sSettingsPath = sSettingsPath;
m_pUi->setupUi(this);

// Disable change of window size for now
bool bWindowsize = false;
m_pUi->frame_samplesToFit->setVisible(bWindowsize);
m_pUi->label_3->setVisible(bWindowsize);
m_pUi->m_spinBox_samplesToFit->setVisible(bWindowsize);

connect(m_pUi->m_pushButton_loadDigitizers, &QPushButton::released,
this, &HpiSettingsView::onLoadDigitizers);
connect(m_pUi->m_pushButton_doFreqOrder, &QPushButton::clicked,
Expand All @@ -104,8 +98,10 @@ HpiSettingsView::HpiSettingsView(const QString& sSettingsPath,
this, &HpiSettingsView::compStatusChanged);
connect(m_pUi->m_checkBox_continousHPI, &QCheckBox::clicked,
this, &HpiSettingsView::contHpiStatusChanged);
connect(m_pUi->m_spinBox_samplesToFit, QOverload<int>::of(&QSpinBox::valueChanged),
this, &HpiSettingsView::fittingWindowSizeChanged);
connect(m_pUi->m_doubleSpinBox_fittingRepetitionTime, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this, &HpiSettingsView::repetitionTimeChanged);
connect(m_pUi->m_spinBox_windowSize, QOverload<int>::of(&QSpinBox::valueChanged),
this, &HpiSettingsView::fittingWindowTimeChanged);
connect(m_pUi->m_doubleSpinBox_maxHPIContinousDist, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
this, &HpiSettingsView::allowedMeanErrorDistChanged);
connect(m_pUi->m_doubleSpinBox_moveThreshold, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
Expand Down Expand Up @@ -177,6 +173,17 @@ void HpiSettingsView::setMovementResults(double dMovement,

//=============================================================================================================

void HpiSettingsView::setMinimumWindowSize(double dWindowSize)
{
int iMinimumInMs = ceil(dWindowSize*1000);
m_pUi->m_spinBox_windowSize->setMinimum(iMinimumInMs);
if(m_pUi->m_spinBox_windowSize->value() < iMinimumInMs) {
m_pUi->m_spinBox_windowSize->setValue(iMinimumInMs);
}
}

//=============================================================================================================

bool HpiSettingsView::getSspStatusChanged()
{
return m_pUi->m_checkBox_useSSP->isChecked();
Expand Down Expand Up @@ -220,9 +227,9 @@ bool HpiSettingsView::continuousHPIChecked()

//=============================================================================================================

int HpiSettingsView::getFittingWindowSize()
double HpiSettingsView::getFittingRepetitionTime()
{
return m_pUi->m_spinBox_samplesToFit->value();
return m_pUi->m_doubleSpinBox_fittingRepetitionTime->value();
}

//=============================================================================================================
Expand Down Expand Up @@ -251,7 +258,7 @@ void HpiSettingsView::saveSettings()
QVariant::fromValue(m_pUi->m_doubleSpinBox_maxHPIContinousDist->value()));

settings.setValue(m_sSettingsPath + QString("/HpiSettingsView/fittingWindowSize"),
QVariant::fromValue(m_pUi->m_spinBox_samplesToFit->value()));
QVariant::fromValue(m_pUi->m_doubleSpinBox_fittingRepetitionTime->value()));
}

//=============================================================================================================
Expand All @@ -273,7 +280,7 @@ void HpiSettingsView::loadSettings()
m_pUi->m_checkBox_useComp->setChecked(settings.value(m_sSettingsPath + QString("/HpiSettingsView/useCOMP"), false).toBool());
m_pUi->m_checkBox_continousHPI->setChecked(settings.value(m_sSettingsPath + QString("/HpiSettingsView/continousHPI"), false).toBool());
m_pUi->m_doubleSpinBox_maxHPIContinousDist->setValue(settings.value(m_sSettingsPath + QString("/HpiSettingsView/maxError"), 10.0).toDouble());
m_pUi->m_spinBox_samplesToFit->setValue(settings.value(m_sSettingsPath + QString("/HpiSettingsView/fittingWindowSize"), 300).toInt());
m_pUi->m_doubleSpinBox_fittingRepetitionTime->setValue(settings.value(m_sSettingsPath + QString("/HpiSettingsView/fittingWindowSize"), 300).toInt());
}

//=============================================================================================================
Expand Down
28 changes: 22 additions & 6 deletions libraries/disp/viewers/hpisettingsview.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,14 @@ class DISPSHARED_EXPORT HpiSettingsView : public AbstractView
void setMovementResults(double dMovement,
double dRotation);

//=========================================================================================================
/**
* Updates the minimal window time for hpi fits.
*
* @param[in] dMinimumWindowTime in seconds.
*/
void setMinimumWindowSize(double dMinimumWindowTime);

//=========================================================================================================
/**
* Get the SSP checked status.
Expand Down Expand Up @@ -167,11 +175,11 @@ class DISPSHARED_EXPORT HpiSettingsView : public AbstractView

//=========================================================================================================
/**
* Get number of fits per second to do when performing continuous hpi
* Get the time between hpi fits in seconds.
*
* @return Number of fits per second
* @return Repetition time between fits in seconds.
*/
int getFittingWindowSize();
double getFittingRepetitionTime();

//=========================================================================================================
/**
Expand Down Expand Up @@ -382,11 +390,19 @@ class DISPSHARED_EXPORT HpiSettingsView : public AbstractView

//=========================================================================================================
/**
* Emit this signal when 'fits per second' control gets updated.
* Emit this signal when 'Time between fits' control gets updated.
*
* @param[in] dTimeBetweenFitsInSecs The time between fits in seconds.
*/
void repetitionTimeChanged(double dTimeBetweenFitsInSecs);

//=========================================================================================================
/**
* Emit this signal when 'Time between fits' control gets updated.
*
* @param[in] iFitsPerSecond How many fits per second we should do.
* @param[in] dWindowSizeInSeconds The window size to use for hpi fits in seconds.
*/
void fittingWindowSizeChanged(int iFitsPerSecond);
void fittingWindowTimeChanged(double dWindowSizeInSeconds);

//=========================================================================================================
/**
Expand Down

0 comments on commit d3e2c9e

Please sign in to comment.