improve the doxygen docu of PGetFourierBlockDialog.* (musredit_qt6).
This commit is contained in:
@@ -27,6 +27,20 @@
|
|||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file PGetFourierBlockDialog.cpp
|
||||||
|
* @brief Implementation of the PGetFourierBlockDialog class.
|
||||||
|
* @details This file implements the dialog for creating FOURIER blocks in msr
|
||||||
|
* files. It handles user input validation (especially for the phase parameter)
|
||||||
|
* and generates properly formatted msr-file text for all Fourier transform
|
||||||
|
* parameters.
|
||||||
|
*
|
||||||
|
* @author Andreas Suter
|
||||||
|
* @date 2009-2025
|
||||||
|
* @copyright Copyright (C) 2009-2025 by Andreas Suter
|
||||||
|
* @license GNU General Public License v2 or later
|
||||||
|
*/
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QValidator>
|
#include <QValidator>
|
||||||
@@ -40,9 +54,20 @@
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* <p>Constructor
|
* @brief Constructs the FOURIER block dialog.
|
||||||
*
|
*
|
||||||
* \param helpUrl help url address for the Fourier block.
|
* @details Initializes the dialog UI and sets up input validators for all
|
||||||
|
* numeric fields. The dialog is created as modal.
|
||||||
|
*
|
||||||
|
* @par Input Validators:
|
||||||
|
* - Integer validators: Fourier power (zero-padding exponent)
|
||||||
|
* - Double validators: Phase correction range (low/high), frequency range (low/high)
|
||||||
|
*
|
||||||
|
* @par Signal Connections:
|
||||||
|
* The phase parameter input is connected to validation on focus loss to ensure
|
||||||
|
* proper format (integer or parXX).
|
||||||
|
*
|
||||||
|
* @param helpUrl URL to the online documentation for FOURIER blocks.
|
||||||
*/
|
*/
|
||||||
PGetFourierBlockDialog::PGetFourierBlockDialog(const QString helpUrl) : fHelpUrl(helpUrl)
|
PGetFourierBlockDialog::PGetFourierBlockDialog(const QString helpUrl) : fHelpUrl(helpUrl)
|
||||||
{
|
{
|
||||||
@@ -62,7 +87,19 @@ PGetFourierBlockDialog::PGetFourierBlockDialog(const QString helpUrl) : fHelpUrl
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* <p>Checks if the phase parameter is either a number are has the form parXX, where XX is a number.
|
* @brief Validates the phase parameter input.
|
||||||
|
*
|
||||||
|
* @details Checks if the phase parameter is either a plain integer number or
|
||||||
|
* has the format "parXX" where XX is a parameter number referencing a fit
|
||||||
|
* parameter from the FITPARAMETER block.
|
||||||
|
*
|
||||||
|
* @par Validation Rules:
|
||||||
|
* - Empty input is allowed (phase parameter will be omitted)
|
||||||
|
* - Plain integer values are accepted (e.g., "45", "90")
|
||||||
|
* - Parameter references must follow the format "parXX" (e.g., "par3", "par12")
|
||||||
|
*
|
||||||
|
* If validation fails, the input is cleared and an error dialog is shown,
|
||||||
|
* returning focus to the phase input field for correction.
|
||||||
*/
|
*/
|
||||||
void PGetFourierBlockDialog::checkPhaseParameter()
|
void PGetFourierBlockDialog::checkPhaseParameter()
|
||||||
{
|
{
|
||||||
@@ -99,7 +136,29 @@ void PGetFourierBlockDialog::checkPhaseParameter()
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* <p>Transfers the data of the dialog into a valid msr-file Fourier block string.
|
* @brief Generates the FOURIER block string from dialog inputs.
|
||||||
|
*
|
||||||
|
* @details Transfers the data from all dialog widgets into a valid msr-file
|
||||||
|
* FOURIER block string. The method collects:
|
||||||
|
* - Required parameters: units, apodization, plot type
|
||||||
|
* - Optional parameters: fourier_power, phase, range_for_phase_correction, range
|
||||||
|
*
|
||||||
|
* Optional parameters are only included if their corresponding input fields
|
||||||
|
* contain valid data. The generated block is stored in fFourierBlock for
|
||||||
|
* retrieval via getFourierBlock().
|
||||||
|
*
|
||||||
|
* @par Generated Block Structure:
|
||||||
|
* @code
|
||||||
|
* ###############################################################
|
||||||
|
* FOURIER
|
||||||
|
* units <Gauss|Tesla|MHz|Mc/s>
|
||||||
|
* fourier_power <n> (optional)
|
||||||
|
* apodization <none|weak|medium|strong>
|
||||||
|
* plot <real|imag|real_and_imag|power|phase>
|
||||||
|
* phase <value|parXX> (optional)
|
||||||
|
* range_for_phase_correction <low> <high> (optional)
|
||||||
|
* range <low> <high> (optional)
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
void PGetFourierBlockDialog::fillFourierBlock()
|
void PGetFourierBlockDialog::fillFourierBlock()
|
||||||
{
|
{
|
||||||
@@ -125,7 +184,11 @@ void PGetFourierBlockDialog::fillFourierBlock()
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* <p>Generates a help content window showing the description of the Fourier block.
|
* @brief Opens the online help documentation for FOURIER blocks.
|
||||||
|
*
|
||||||
|
* @details Attempts to open the help URL in the system's default web browser
|
||||||
|
* using QDesktopServices. If the URL is empty, displays an informational message.
|
||||||
|
* If the browser fails to open, displays an error message with a clickable link.
|
||||||
*/
|
*/
|
||||||
void PGetFourierBlockDialog::helpContent()
|
void PGetFourierBlockDialog::helpContent()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Copyright (C) 2009-2016 by Andreas Suter *
|
* Copyright (C) 2009-2025 by Andreas Suter *
|
||||||
* andreas.suter@psi.ch *
|
* andreas.suter@psi.ch *
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
@@ -27,6 +27,23 @@
|
|||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file PGetFourierBlockDialog.h
|
||||||
|
* @brief Dialog for creating FOURIER blocks in msr files.
|
||||||
|
* @details This header defines the PGetFourierBlockDialog class which provides
|
||||||
|
* a dialog for entering Fourier transform parameters needed to create a FOURIER
|
||||||
|
* block in a musrfit msr file. Fourier analysis is used to transform time-domain
|
||||||
|
* muon spin rotation data into the frequency domain.
|
||||||
|
*
|
||||||
|
* @author Andreas Suter
|
||||||
|
* @date 2009-2025
|
||||||
|
* @copyright Copyright (C) 2009-2025 by Andreas Suter
|
||||||
|
* @license GNU General Public License v2 or later
|
||||||
|
*
|
||||||
|
* @see PGetPlotBlockDialog For plot block creation
|
||||||
|
* @see PGetAsymmetryRunBlockDialog For asymmetry RUN block creation
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef _PGETFOURIERBLOCKDIALOG_H_
|
#ifndef _PGETFOURIERBLOCKDIALOG_H_
|
||||||
#define _PGETFOURIERBLOCKDIALOG_H_
|
#define _PGETFOURIERBLOCKDIALOG_H_
|
||||||
|
|
||||||
@@ -34,9 +51,46 @@
|
|||||||
|
|
||||||
#include "ui_PGetFourierBlockDialog.h"
|
#include "ui_PGetFourierBlockDialog.h"
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* <p>Handles the Fourier dialog.
|
* @class PGetFourierBlockDialog
|
||||||
|
* @brief Dialog for creating FOURIER blocks in msr files.
|
||||||
|
*
|
||||||
|
* @details This dialog collects all parameters needed to generate a FOURIER
|
||||||
|
* block for muon spin rotation data analysis. The Fourier transform converts
|
||||||
|
* time-domain asymmetry data into the frequency domain, revealing oscillation
|
||||||
|
* frequencies corresponding to internal magnetic fields.
|
||||||
|
*
|
||||||
|
* @par Fourier Block Parameters:
|
||||||
|
* - Units: Gauss, Tesla, MHz, or Mc/s (megacycles per second)
|
||||||
|
* - Fourier power: Zero-padding power for FFT (2^n points)
|
||||||
|
* - Apodization: Window function (none, weak, medium, strong)
|
||||||
|
* - Plot type: real, imag, real_and_imag, power, or phase
|
||||||
|
* - Phase: Initial phase value or parameter reference (parXX)
|
||||||
|
* - Phase correction range: Frequency range for phase optimization
|
||||||
|
* - Range: Frequency range for display
|
||||||
|
*
|
||||||
|
* @par Generated Output Format:
|
||||||
|
* The dialog generates msr-file formatted text blocks such as:
|
||||||
|
* @code
|
||||||
|
* ###############################################################
|
||||||
|
* FOURIER
|
||||||
|
* units Gauss
|
||||||
|
* fourier_power 10
|
||||||
|
* apodization strong
|
||||||
|
* plot power
|
||||||
|
* phase par3
|
||||||
|
* range_for_phase_correction 50 80
|
||||||
|
* range 0 500
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* @par Phase Parameter Formats:
|
||||||
|
* The phase can be specified in two ways:
|
||||||
|
* - Direct value: An integer representing an initial phase angle
|
||||||
|
* - Parameter reference: "parXX" where XX is a fit parameter number
|
||||||
|
* that will be used as the phase during fitting
|
||||||
|
*
|
||||||
|
* @see PGetPlotBlockDialog For creating PLOT blocks
|
||||||
*/
|
*/
|
||||||
class PGetFourierBlockDialog : public QDialog, private Ui::PGetFourierBlockDialog
|
class PGetFourierBlockDialog : public QDialog, private Ui::PGetFourierBlockDialog
|
||||||
{
|
{
|
||||||
@@ -45,16 +99,36 @@ class PGetFourierBlockDialog : public QDialog, private Ui::PGetFourierBlockDialo
|
|||||||
public:
|
public:
|
||||||
PGetFourierBlockDialog(const QString helpUrl);
|
PGetFourierBlockDialog(const QString helpUrl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the generated FOURIER block string.
|
||||||
|
* @return Formatted msr-file FOURIER block string ready for insertion
|
||||||
|
* into an msr file.
|
||||||
|
*/
|
||||||
QString getFourierBlock() { return fFourierBlock; }
|
QString getFourierBlock() { return fFourierBlock; }
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
/**
|
||||||
|
* @brief Validates the phase parameter input.
|
||||||
|
* @details Checks that the phase entry is either a plain integer or
|
||||||
|
* follows the "parXX" format where XX is a parameter number.
|
||||||
|
*/
|
||||||
void checkPhaseParameter();
|
void checkPhaseParameter();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Builds the FOURIER block string from dialog inputs.
|
||||||
|
* @details Collects all user-entered values and formats them into
|
||||||
|
* a valid msr-file FOURIER block.
|
||||||
|
*/
|
||||||
void fillFourierBlock();
|
void fillFourierBlock();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Opens the online help for FOURIER blocks.
|
||||||
|
*/
|
||||||
void helpContent();
|
void helpContent();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString fFourierBlock; ///< keeps the msr Fourier block
|
QString fFourierBlock; ///< Generated msr-file FOURIER block string.
|
||||||
QString fHelpUrl; ///< help url for the Fourier block
|
QString fHelpUrl; ///< URL to the online documentation for FOURIER blocks.
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _PGETFOURIERBLOCKDIALOG_H_
|
#endif // _PGETFOURIERBLOCKDIALOG_H_
|
||||||
|
|||||||
Reference in New Issue
Block a user