improve the doxygen docu of PAdmin.* (musredit_qt6).

This commit is contained in:
2025-11-24 10:34:58 +01:00
parent be24a3aa73
commit 1f7ce9f88a
2 changed files with 491 additions and 159 deletions

View File

@@ -27,6 +27,22 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
/**
* @file PAdmin.cpp
* @brief Implementation of the PAdmin and PAdminXMLParser classes.
* @details This file contains the implementation of the musredit administration
* system, including:
* - XML parsing of the musredit_startup.xml configuration file
* - Configuration loading and saving
* - Recent files management
* - Default configuration file creation
*
* @author Andreas Suter
* @date 2010-2025
* @copyright Copyright (C) 2010-2025 by Andreas Suter
* @license GNU General Public License v2 or later
*/
#include <cstdlib>
#include <iostream>
@@ -49,10 +65,18 @@
// implementation of PAdminXMLParser class
//--------------------------------------------------------------------------
/**
* <p>XML Parser class for the musredit administration file.
* @brief Constructs an XML parser for the musredit configuration file.
*
* \param fln file name of the musredit startup xml-file
* \param admin pointer to an admin class instance.
* @details Creates a parser instance and immediately parses the specified XML file.
* If the file is missing or corrupted, the user is prompted to create a default
* configuration file. After parsing completes, the validity can be checked
* using the isValid() method.
*
* @param fln Full path to the musredit_startup.xml configuration file.
* @param admin Pointer to the PAdmin object that will be populated with parsed data.
*
* @note If the configuration file cannot be opened or is empty, a warning dialog
* is displayed offering to create a default configuration file.
*/
PAdminXMLParser::PAdminXMLParser(const QString& fln, PAdmin *admin) : fAdmin(admin)
{
@@ -74,11 +98,16 @@ PAdminXMLParser::PAdminXMLParser(const QString& fln, PAdmin *admin) : fAdmin(adm
//--------------------------------------------------------------------------
/**
* <p>parse the musredit startup xml-file.
* @brief Parse the XML configuration file.
*
* \param device QFile object of the musredit startup xml-file
* @details Reads and processes the musredit_startup.xml file using Qt's
* QXmlStreamReader. The parser processes elements sequentially, calling
* appropriate handler methods for start elements, character data, and end elements.
*
* @return true on success, false otherwise
* @param device QIODevice (typically QFile) opened for reading the XML file.
*
* @return true if parsing completed without XML errors, false otherwise.
* On failure, an error dialog is displayed with line/column information.
*/
bool PAdminXMLParser::parse(QIODevice *device)
{
@@ -113,7 +142,13 @@ bool PAdminXMLParser::parse(QIODevice *device)
//--------------------------------------------------------------------------
/**
* <p>Routine called at the beginning of the XML parsing process.
* @brief Handler called at the beginning of XML document parsing.
*
* @details This method is invoked when the XML parser encounters the start
* of the document. Currently performs no initialization as all state is
* set up in the constructor.
*
* @return Always returns true.
*/
bool PAdminXMLParser::startDocument()
{
@@ -123,8 +158,15 @@ bool PAdminXMLParser::startDocument()
//--------------------------------------------------------------------------
/**
* <p>Routine called when a new XML tag is found. Here it is used
* to set a tag for filtering afterwards the content.
* @brief Handler called when an XML start element is encountered.
*
* @details Maps the XML element name to an internal keyword enumeration (EAdminKeyWords)
* for subsequent character data processing. Also handles initialization of the
* PTheory structure when a \<func\> element begins.
*
* @return Always returns true.
*
* @see EAdminKeyWords For the list of recognized XML element tags.
*/
bool PAdminXMLParser::startElement()
{
@@ -257,9 +299,13 @@ bool PAdminXMLParser::startElement()
//--------------------------------------------------------------------------
/**
* <p>Routine called when the end XML tag is found. It is used to
* put the filtering tag to 'empty'. It also resets the fFunc flag in case
* the entry was a theory function.
* @brief Handler called when an XML end element is encountered.
*
* @details Resets the current keyword to eEmpty after element processing completes.
* For \</func\> end tags, finalizes the theory item by adding it to the
* PAdmin's theory collection and resetting the function parsing flag.
*
* @return Always returns true.
*/
bool PAdminXMLParser::endElement()
{
@@ -277,8 +323,17 @@ bool PAdminXMLParser::endElement()
//--------------------------------------------------------------------------
/**
* <p>This routine delivers the content of an XML tag. It fills the
* content into the load data structure.
* @brief Handler for XML character data (element content).
*
* @details Processes the text content of the current XML element based on the
* previously set keyword from startElement(). Routes the content to the
* appropriate PAdmin setter method or stores it in the temporary theory item
* structure when parsing function definitions.
*
* Boolean values in the XML use "y" for true and any other value for false.
*
* @return true on successful processing, false if a required conversion fails
* (e.g., invalid integer in params element).
*/
bool PAdminXMLParser::characters()
{
@@ -584,8 +639,15 @@ bool PAdminXMLParser::characters()
//--------------------------------------------------------------------------
/**
* <p>Called at the end of the XML parse process. It checks if default paths
* contain system variables, and if so expand them for the further use.
* @brief Handler called at the end of XML document parsing.
*
* @details Performs post-processing after all XML elements have been parsed.
* Expands any environment variables (e.g., \c $HOME, \c $ROOTSYS) found in
* path settings to their full directory paths.
*
* @return Always returns true.
*
* @see expandPath() For the environment variable expansion implementation.
*/
bool PAdminXMLParser::endDocument()
{
@@ -618,7 +680,15 @@ bool PAdminXMLParser::endDocument()
//--------------------------------------------------------------------------
/**
* <p>Dumps the content of the admin class. For debugging purposes only.
* @brief Dump all configuration values to stdout for debugging.
*
* @details Outputs the complete contents of the PAdmin object to standard output
* in a human-readable format. This includes general settings, recent files,
* help URLs, font settings, MSR file defaults, msr2data parameters, and all
* registered theory functions.
*
* @note This method is intended for debugging purposes only and is typically
* disabled in production builds.
*/
void PAdminXMLParser::dump()
{
@@ -702,9 +772,18 @@ void PAdminXMLParser::dump()
//--------------------------------------------------------------------------
/**
* <p>Expands system variables to full path, e.g. <tt>$HOME -> \home\user</tt>
* @brief Expand environment variables in a path string.
*
* \param str path string with none expanded system variables.
* @details Parses the input path and replaces any environment variable references
* (prefixed with \c $) with their actual values from the system environment.
* For example, \c $HOME/documents becomes \c /home/user/documents.
*
* @param str Path string potentially containing environment variable references.
*
* @return The expanded path string with all environment variables resolved.
* Returns an empty string if any referenced variable is not found or empty.
*
* @note Displays a warning dialog if an environment variable cannot be resolved.
*/
QString PAdminXMLParser::expandPath(const QString &str)
{
@@ -747,8 +826,21 @@ QString PAdminXMLParser::expandPath(const QString &str)
// implementation of PAdmin class
//--------------------------------------------------------------------------
/**
* <p>Initializes that PAdmin object, and calls the XML parser which feeds
* the object variables.
* @brief Constructs the PAdmin object and loads configuration.
*
* @details Initializes all member variables to default values, then searches for
* and loads the musredit_startup.xml configuration file. The search order is:
* -# Current working directory
* -# \c $HOME/.musrfit/musredit/
* -# \c $MUSRFITPATH/
* -# \c $ROOTSYS/bin/
*
* If no configuration file is found, a default one is created in the user's
* home directory. After loading, the constructor verifies that the musrfit
* executable can be found and that required environment variables are set.
*
* @note Displays error dialogs if musrfit cannot be found or if required
* environment variables (ROOTSYS, MUSRFITPATH) are not set.
*/
PAdmin::PAdmin() : QObject()
{
@@ -835,10 +927,27 @@ PAdmin::PAdmin() : QObject()
//--------------------------------------------------------------------------
/**
* <p>returns the help url corresponding the the tag.
* @brief Get the help URL for a specific documentation section.
*
* \param tag to map the help url. At the moment the following tags should be present:
* main, title, parameters, theory, functions, run, command, fourier, plot, statistic
* @details Retrieves the URL for online help corresponding to the given tag.
* The URLs are loaded from the configuration file and map to sections of
* the musrfit user manual.
*
* @param tag Section identifier. Supported tags include:
* - \c main - Main musrfit documentation
* - \c title - TITLE block documentation
* - \c parameters - FITPARAMETER block documentation
* - \c theory - THEORY block documentation
* - \c functions - FUNCTIONS block documentation
* - \c run - RUN block documentation
* - \c command - COMMANDS block documentation
* - \c fourier - FOURIER block documentation
* - \c plot - PLOT block documentation
* - \c statistic - STATISTIC block documentation
* - \c msr2data - msr2data tool documentation
* - \c musrFT - musrFT tool documentation
*
* @return The URL string for the requested help section, or empty string if tag not found.
*/
QString PAdmin::getHelpUrl(QString tag)
{
@@ -847,9 +956,17 @@ QString PAdmin::getHelpUrl(QString tag)
//--------------------------------------------------------------------------
/**
* <p>returns a theory item from position idx. If idx is out of the range, a null pointer is returned.
* @brief Get a theory function definition by index.
*
* \param idx position of the theory item.
* @details Retrieves a pointer to a PTheory structure containing the definition
* of a theory function. Theory functions are used for fitting muon spin
* rotation/relaxation data.
*
* @param idx Zero-based index of the theory item in the collection.
*
* @return Pointer to the PTheory structure, or nullptr if idx is out of range.
*
* @see getTheoryCounts() To get the number of available theory items.
*/
PTheory* PAdmin::getTheoryItem(const unsigned int idx)
{
@@ -861,10 +978,17 @@ PTheory* PAdmin::getTheoryItem(const unsigned int idx)
//--------------------------------------------------------------------------
/**
* <p>returns the recent path-file name at position idx. If idx is out of scope,
* an empty string is returned.
* @brief Get a recent file path by index.
*
* \param idx index of the recent path-file name to be retrieved.
* @details Retrieves the full path of a recently opened file from the recent
* files list. The list is ordered with most recently opened files first.
*
* @param idx Zero-based index into the recent files list.
*
* @return The full path to the recent file, or empty string if idx is out of range.
*
* @see getNumRecentFiles() To get the number of recent files.
* @see addRecentFile() To add a new file to the recent list.
*/
QString PAdmin::getRecentFile(int idx)
{
@@ -876,11 +1000,15 @@ QString PAdmin::getRecentFile(int idx)
//--------------------------------------------------------------------------
/**
* <p>set the help url, addressed via a tag. At the moment the following tags should be present:
* main, title, parameters, theory, functions, run, command, fourier, plot, statistic, msr2data
* @brief Set the help URL for a documentation section.
*
* \param tag to address the help url
* \param url help url corresponding to the tag.
* @details Associates a URL with a documentation section tag. This is typically
* called during XML configuration parsing to load help URL mappings.
*
* @param tag Section identifier (e.g., "main", "theory", "parameters").
* @param url Full URL to the online documentation for this section.
*
* @see getHelpUrl() To retrieve URLs by tag.
*/
void PAdmin::setHelpUrl(const QString tag, const QString url)
{
@@ -889,11 +1017,17 @@ void PAdmin::setHelpUrl(const QString tag, const QString url)
//--------------------------------------------------------------------------
/**
* <p>Loads the preference file fln.
* @brief Load configuration from an XML file.
*
* <b>return:</b> 1 on success, 0 otherwise
* @details Parses the specified musredit_startup.xml file and populates this
* PAdmin instance with the configuration values. Uses PAdminXMLParser for
* the actual XML parsing.
*
* \param fln path-file name of the preference file to be loaded.
* @param fln Full path to the configuration XML file to load.
*
* @return 1 on successful load, 0 if the file doesn't exist or parsing fails.
*
* @note Displays an error dialog if parsing fails or the file is not found.
*/
int PAdmin::loadPrefs(QString fln)
{
@@ -916,11 +1050,21 @@ int PAdmin::loadPrefs(QString fln)
//--------------------------------------------------------------------------
/**
* <p>Save the preference file pref_fln.
* @brief Save current configuration to an XML file.
*
* <b>return:</b> 1 on success, 0 otherwise
* @details Saves modified preferences (timeout, flags, font settings) to the
* configuration file. The method reads the existing XML file, updates the
* relevant values in-place, and writes the result to the specified output file.
*
* \param pref_fln preference path-file name
* If a local musredit_startup.xml exists in the current directory, it is used
* as the source; otherwise, the master configuration file is used.
*
* @param pref_fln Full path to the output configuration file.
*
* @return 1 on successful save, 0 if the file cannot be written.
*
* @note Only preference values are saved; structure elements like theory
* definitions are preserved from the source file.
*/
int PAdmin::savePrefs(QString pref_fln)
{
@@ -1055,9 +1199,16 @@ int PAdmin::savePrefs(QString pref_fln)
//--------------------------------------------------------------------------
/**
* <p>Add recent path-file name to the internal ring-buffer.
* @brief Add a file to the recent files list.
*
* \param str recent path-file name to be added
* @details Adds the specified file path to the front of the recent files list.
* If the file is already in the list, it is not added again (no duplicates).
* The list is maintained as a ring buffer with a maximum of MAX_RECENT_FILES entries.
*
* @param str Full path to the file to add to the recent list.
*
* @see getRecentFile() To retrieve files from the list.
* @see saveRecentFiles() To persist the list to the configuration file.
*/
void PAdmin::addRecentFile(const QString str)
{
@@ -1074,9 +1225,17 @@ void PAdmin::addRecentFile(const QString str)
//--------------------------------------------------------------------------
/**
* <p>Merges the recent file ring buffer into musredit_startup.xml and saves it.
* If a local copy is present it will be saved there, otherwise the master file
* will be used.
* @brief Save the recent files list to the configuration file.
*
* @details Persists the current recent files list to musredit_startup.xml.
* The method reads the existing XML file, removes all existing \<path_file_name\>
* entries, inserts the current list, and writes the file back.
*
* If a local musredit_startup.xml exists in the current directory, it is updated;
* otherwise, the master configuration file (fPrefPathName) is used.
*
* @note This method modifies the XML file in-place. If neither a local nor
* master configuration file exists, a warning dialog is displayed.
*/
void PAdmin::saveRecentFiles()
{
@@ -1143,7 +1302,18 @@ void PAdmin::saveRecentFiles()
//--------------------------------------------------------------------------
/**
* @brief PAdmin::createMusreditStartupFile
* @brief Create a default musredit_startup.xml configuration file.
*
* @details Creates a new configuration file with default settings in the user's
* home directory at \c $HOME/.musrfit/musredit/musredit_startup.xml.
* The method:
* -# Creates the directory structure if it doesn't exist
* -# Reads the default template from internal Qt resources (musredit_startup.xml.in)
* -# Substitutes build-time paths (\@prefix\@, \@DOCDIR\@) with actual values
* -# Adjusts font settings for macOS (Courier New size 16 vs Monospace size 12)
*
* @note Displays an error dialog if the resource template cannot be found or
* the output file cannot be written.
*/
void PAdmin::createMusreditStartupFile()
{

View File

@@ -27,6 +27,34 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
/**
* @file PAdmin.h
* @brief Administration and configuration management for musredit.
* @details This header defines the classes and structures responsible for managing
* musredit's configuration settings. The configuration is stored in an XML file
* called \c musredit_startup.xml which contains:
* - Executable paths for musrfit tools
* - Editor font settings and window dimensions
* - Default parameters for msr2data operations
* - Theory function definitions with associated pixmaps
* - Online help URL mappings
* - Recently opened file list
*
* The configuration file is searched in the following order:
* -# Current working directory
* -# \c $HOME/.musrfit/musredit/
* -# \c $MUSRFITPATH/
* -# \c $ROOTSYS/bin/
*
* @author Andreas Suter
* @date 2010-2025
* @copyright Copyright (C) 2010-2025 by Andreas Suter
* @license GNU General Public License v2 or later
*
* @see PAdminXMLParser XML parser for the configuration file
* @see PAdmin Main administration class
*/
#ifndef _PADMIN_H_
#define _PADMIN_H_
@@ -42,33 +70,78 @@ class PAdmin;
//---------------------------------------------------------------------------
/**
* <p>This structure is keeping informations necessary to handle musrfit
* theory functions (see also <code>http://lmu.web.psi.ch/musrfit/user/html/user-manual.html#the-theory-block</code>).
* @struct PTheory
* @brief Structure holding information about a musrfit theory function.
*
* @details This structure contains all necessary information to represent a theory
* function in the musredit GUI. Theory functions are mathematical models used to
* fit muon spin rotation/relaxation data (e.g., exponential relaxation, Gaussian
* Kubo-Toyabe, etc.).
*
* Each theory function has:
* - A unique name identifier used in msr files
* - A human-readable comment/description
* - A short label for GUI display
* - An optional pixmap showing the mathematical formula
* - The number of parameters the function accepts
*
* @see https://lmu.web.psi.ch/musrfit/user/html/user-manual.html#the-theory-block Theory block documentation
*/
struct PTheory {
QString name;
QString comment;
QString label;
QString pixmapName;
QPixmap pixmap;
int params;
QString name; ///< Internal function name used in msr files (e.g., "asymmetry", "simplExpo").
QString comment; ///< Human-readable description of the theory function.
QString label; ///< Short label for GUI menus and buttons.
QString pixmapName; ///< Filename of the pixmap image showing the mathematical formula.
QPixmap pixmap; ///< Loaded pixmap image of the mathematical formula.
int params; ///< Number of parameters required by this theory function.
};
//---------------------------------------------------------------------------
/**
* PAdminXMLParser is an XML parser class used to handle the musredit startup
* XML-file called <tt>musredit_startup.xml</tt>. This startup file contains
* necessary informations about executable pathes, online help informations,
* default font sizes, etc.
* @class PAdminXMLParser
* @brief XML parser for the musredit configuration file.
*
* @details This class implements an XML parser using Qt's QXmlStreamReader to parse
* the \c musredit_startup.xml configuration file. The parser extracts all settings
* and populates a PAdmin object with the configuration data.
*
* The XML file structure includes sections for:
* - General settings (timeout, paths, font preferences)
* - Recent files list
* - Help URL mappings
* - MSR file defaults (beamline, institute, file format)
* - msr2data default parameters
* - Theory function definitions
*
* @par Usage Example:
* @code
* PAdmin admin;
* PAdminXMLParser parser("musredit_startup.xml", &admin);
* if (parser.isValid()) {
* // Configuration loaded successfully
* }
* @endcode
*
* @see PAdmin The administration class that stores parsed configuration
*/
class PAdminXMLParser
{
public:
PAdminXMLParser(const QString &fln, PAdmin*);
/**
* @brief Check if the XML file was parsed successfully.
* @return true if parsing was successful, false otherwise.
*/
virtual bool isValid() { return fValid; }
private:
/**
* @enum EAdminKeyWords
* @brief Enumeration of XML element keywords recognized by the parser.
* @details Each enum value corresponds to an XML element tag in the configuration file.
* The parser uses these to determine how to process element content.
*/
enum EAdminKeyWords {eEmpty, eTimeout, eKeepMinuit2Output, eDumpAscii, eDumpRoot,
eTitleFromDataFile, eChisqPreRunBlock, eEstimateN0, eYamlOut,
eMusrviewShowFourier, eMusrviewShowAvg, eMusrviewShowOneToOne, eEnableMusrT0,
@@ -92,142 +165,231 @@ class PAdminXMLParser
QString expandPath(const QString&);
QXmlStreamReader fXml; ///< xml stream reader object
bool fValid; ///< flag showing if XML read has been successful
EAdminKeyWords fKeyWord; ///< key word tag to know how to handle the content
bool fFunc; ///< flag needed to indicate that a new theory function is found
PTheory fTheoryItem; ///< holding the informations necessary for a theory item
PAdmin *fAdmin; ///< a pointer to the main administration class object
QXmlStreamReader fXml; ///< Qt XML stream reader for parsing the configuration file.
bool fValid; ///< Flag indicating whether XML parsing completed successfully.
EAdminKeyWords fKeyWord; ///< Current XML element being processed.
bool fFunc; ///< Flag indicating parser is inside a \<func\> element block.
PTheory fTheoryItem; ///< Temporary storage for theory function data during parsing.
PAdmin *fAdmin; ///< Pointer to the PAdmin object being populated with configuration data.
};
//---------------------------------------------------------------------------
/**
* The PAdmin class is handling the informations contained in the XML startup file,
* <tt>musredit_startup.xml</tt>. This startup file contains
* necessary informations about executable pathes, online help informations,
* default font sizes, etc. The XML parsing is done with the help of the PAdminXMLParser
* class.
* @class PAdmin
* @brief Central administration class for musredit configuration management.
*
* @details The PAdmin class serves as the central repository for all musredit
* configuration settings. It loads configuration from the \c musredit_startup.xml
* file and provides getters/setters for all configurable parameters.
*
* @par Main Responsibilities:
* - Loading and saving configuration to XML files
* - Managing musrfit executable paths
* - Storing editor preferences (font, window size)
* - Tracking recently opened files
* - Managing theory function definitions
* - Storing msr2data default parameters
* - Mapping help URLs for context-sensitive help
*
* @par Configuration File Search Order:
* The constructor searches for \c musredit_startup.xml in:
* -# Current working directory
* -# \c $HOME/.musrfit/musredit/
* -# \c $MUSRFITPATH/
* -# \c $ROOTSYS/bin/
*
* If no configuration file is found, a default one is created in
* \c $HOME/.musrfit/musredit/.
*
* @see PAdminXMLParser For XML parsing implementation
* @see PMsr2DataParam For msr2data parameter structure
* @see PTheory For theory function structure
*/
class PAdmin : public QObject
{
public:
PAdmin();
int getTimeout() { return fTimeout; }
QString getFontName() { return fFontName; }
int getFontSize() { return fFontSize; }
QString getExecPath() { return fExecPath; }
QString getDefaultSavePath() { return fDefaultSavePath; }
bool getTitleFromDataFileFlag() { return fTitleFromDataFile; }
bool getMusrviewShowFourierFlag() { return fMusrviewShowFourier; }
bool getMusrviewShowAvgFlag() { return fMusrviewShowAvg; }
bool getMusrviewShowOneToOneFlag() { return fMusrviewShowOneToOne; }
bool getEnableMusrT0Flag() { return fEnableMusrT0; }
bool getYamlOutFlag() { return fYamlOut; }
bool getKeepMinuit2OutputFlag() { return fKeepMinuit2Output; }
bool getDumpAsciiFlag() { return fDumpAscii; }
bool getDumpRootFlag() { return fDumpRoot; }
bool getEstimateN0Flag() { return fEstimateN0; }
bool getChisqPerRunBlockFlag() { return fChisqPreRunBlock; }
bool getIgnoreThemeAutoDetection() { return fIgnoreThemeAutoDetection; }
bool getDarkThemeIconsMenuFlag() { return fDarkThemeIconsMenu; }
bool getDarkThemeIconsToolbarFlag() { return fDarkThemeIconsToolbar; }
int getEditWidth() { return fEditWidth; }
int getEditHeight() { return fEditHeight; }
QString getBeamline() { return fBeamline; }
QString getInstitute() { return fInstitute; }
QString getFileFormat() { return fFileFormat; }
bool getLifetimeCorrectionFlag() { return fLifetimeCorrection; }
/** @name Configuration Getters
* @brief Methods to retrieve current configuration values.
* @{
*/
int getTimeout() { return fTimeout; } ///< Get musrfit process timeout in seconds.
QString getFontName() { return fFontName; } ///< Get editor font family name.
int getFontSize() { return fFontSize; } ///< Get editor font size in points.
QString getExecPath() { return fExecPath; } ///< Get path to musrfit executables.
QString getDefaultSavePath() { return fDefaultSavePath; } ///< Get default directory for saving files.
bool getTitleFromDataFileFlag() { return fTitleFromDataFile; } ///< Check if title extraction from data file is enabled.
bool getMusrviewShowFourierFlag() { return fMusrviewShowFourier; } ///< Check if musrview shows Fourier at startup.
bool getMusrviewShowAvgFlag() { return fMusrviewShowAvg; } ///< Check if musrview shows averaged data.
bool getMusrviewShowOneToOneFlag() { return fMusrviewShowOneToOne; } ///< Check if one-to-one theory display is enabled.
bool getEnableMusrT0Flag() { return fEnableMusrT0; } ///< Check if musrT0 is enabled.
bool getYamlOutFlag() { return fYamlOut; } ///< Check if YAML output is enabled.
bool getKeepMinuit2OutputFlag() { return fKeepMinuit2Output; } ///< Check if MINUIT2 output files are preserved.
bool getDumpAsciiFlag() { return fDumpAscii; } ///< Check if ASCII dump is enabled.
bool getDumpRootFlag() { return fDumpRoot; } ///< Check if ROOT dump is enabled.
bool getEstimateN0Flag() { return fEstimateN0; } ///< Check if N0 estimation is enabled.
bool getChisqPerRunBlockFlag() { return fChisqPreRunBlock; } ///< Check if per-run-block chi-square is enabled.
bool getIgnoreThemeAutoDetection() { return fIgnoreThemeAutoDetection; } ///< Check if theme auto-detection is ignored.
bool getDarkThemeIconsMenuFlag() { return fDarkThemeIconsMenu; } ///< Check if dark theme icons are used in menus.
bool getDarkThemeIconsToolbarFlag() { return fDarkThemeIconsToolbar; } ///< Check if dark theme icons are used in toolbar.
int getEditWidth() { return fEditWidth; } ///< Get editor window width in pixels.
int getEditHeight() { return fEditHeight; } ///< Get editor window height in pixels.
QString getBeamline() { return fBeamline; } ///< Get default beamline name.
QString getInstitute() { return fInstitute; } ///< Get default institute name.
QString getFileFormat() { return fFileFormat; } ///< Get default data file format.
bool getLifetimeCorrectionFlag() { return fLifetimeCorrection; } ///< Check if lifetime correction is enabled.
QString getHelpUrl(QString tag);
QString getTheoFuncPixmapPath() { return fTheoFuncPixmapPath; }
unsigned int getTheoryCounts() { return fTheory.size(); }
QString getTheoFuncPixmapPath() { return fTheoFuncPixmapPath; } ///< Get path to theory function pixmaps.
unsigned int getTheoryCounts() { return fTheory.size(); } ///< Get number of registered theory functions.
PTheory* getTheoryItem(const unsigned int idx);
PMsr2DataParam getMsr2DataParam() { return fMsr2DataParam; }
int getNumRecentFiles() { return fRecentFile.size(); }
QString getDefaultPrefPathName() { return fPrefPathName; }
PMsr2DataParam getMsr2DataParam() { return fMsr2DataParam; } ///< Get msr2data default parameters.
int getNumRecentFiles() { return fRecentFile.size(); } ///< Get number of recent files in list.
QString getDefaultPrefPathName() { return fPrefPathName; } ///< Get path to active configuration file.
QString getRecentFile(int idx);
/** @} */
void setTimeout(const int ival) { fTimeout = ival; }
void setTitleFromDataFileFlag(const bool flag) { fTitleFromDataFile = flag; }
void setMusrviewShowFourierFlag(const bool flag) { fMusrviewShowFourier = flag; }
void setMusrviewShowAvgFlag(const bool flag) { fMusrviewShowAvg = flag; }
void setMusrviewShowOneToOneFlag(const bool flag) { fMusrviewShowOneToOne = flag; }
void setEnableMusrT0Flag(const bool flag) { fEnableMusrT0 = flag; }
void setKeepMinuit2OutputFlag(const bool flag) { fKeepMinuit2Output = flag; }
void setDumpAsciiFlag(const bool flag) { fDumpAscii = flag; }
void setDumpRootFlag(const bool flag) { fDumpRoot = flag; }
void setEstimateN0Flag(const bool flag) { fEstimateN0 = flag; }
void setYamlOutFlag(const bool flag) { fYamlOut = flag; }
void setChisqPerRunBlockFlag(const bool flag) { fChisqPreRunBlock = flag; }
void setIgnoreThemeAutoDetection(const bool flag) { fIgnoreThemeAutoDetection = flag; }
void setDarkThemeIconsMenuFlag(const bool flag) { fDarkThemeIconsMenu = flag; }
void setDarkThemeIconsToolbarFlag(const bool flag) { fDarkThemeIconsToolbar = flag; }
void setEditWidth(const int width) { fEditWidth = width; }
void setEditHeight(const int height) { fEditHeight = height; }
/** @name Configuration Setters
* @brief Methods to modify configuration values.
* @{
*/
void setTimeout(const int ival) { fTimeout = ival; } ///< Set musrfit process timeout.
void setTitleFromDataFileFlag(const bool flag) { fTitleFromDataFile = flag; } ///< Enable/disable title extraction from data file.
void setMusrviewShowFourierFlag(const bool flag) { fMusrviewShowFourier = flag; } ///< Enable/disable Fourier display at startup.
void setMusrviewShowAvgFlag(const bool flag) { fMusrviewShowAvg = flag; } ///< Enable/disable averaged data display.
void setMusrviewShowOneToOneFlag(const bool flag) { fMusrviewShowOneToOne = flag; } ///< Enable/disable one-to-one theory.
void setEnableMusrT0Flag(const bool flag) { fEnableMusrT0 = flag; } ///< Enable/disable musrT0.
void setKeepMinuit2OutputFlag(const bool flag) { fKeepMinuit2Output = flag; } ///< Enable/disable MINUIT2 output preservation.
void setDumpAsciiFlag(const bool flag) { fDumpAscii = flag; } ///< Enable/disable ASCII dump.
void setDumpRootFlag(const bool flag) { fDumpRoot = flag; } ///< Enable/disable ROOT dump.
void setEstimateN0Flag(const bool flag) { fEstimateN0 = flag; } ///< Enable/disable N0 estimation.
void setYamlOutFlag(const bool flag) { fYamlOut = flag; } ///< Enable/disable YAML output.
void setChisqPerRunBlockFlag(const bool flag) { fChisqPreRunBlock = flag; } ///< Enable/disable per-run-block chi-square.
void setIgnoreThemeAutoDetection(const bool flag) { fIgnoreThemeAutoDetection = flag; } ///< Enable/disable theme auto-detection.
void setDarkThemeIconsMenuFlag(const bool flag) { fDarkThemeIconsMenu = flag; } ///< Enable/disable dark theme menu icons.
void setDarkThemeIconsToolbarFlag(const bool flag) { fDarkThemeIconsToolbar = flag; } ///< Enable/disable dark theme toolbar icons.
void setEditWidth(const int width) { fEditWidth = width; } ///< Set editor window width.
void setEditHeight(const int height) { fEditHeight = height; } ///< Set editor window height.
void setFontName(const QString str) { fFontName = str; }
void setFontSize(const int ival) { fFontSize = ival; }
void setFontName(const QString str) { fFontName = str; } ///< Set editor font family.
void setFontSize(const int ival) { fFontSize = ival; } ///< Set editor font size.
void addRecentFile(const QString str);
/** @} */
/** @name Persistence Methods
* @brief Methods for loading and saving configuration.
* @{
*/
int loadPrefs(QString fln);
int savePrefs(QString pref_fln);
void saveRecentFiles(); ///< save recent file list
void saveRecentFiles(); ///< Save recent file list to configuration file.
/** @} */
protected:
void setExecPath(const QString str) { fExecPath = str; }
void setDefaultSavePath(const QString str) { fDefaultSavePath = str; }
void setBeamline(const QString str) { fBeamline = str; }
void setInstitute(const QString str) { fInstitute = str; }
void setFileFormat(const QString str) { fFileFormat = str; }
void setLifetimeCorrectionFlag(const bool flag) { fLifetimeCorrection = flag; }
/** @name Protected Setters
* @brief Setters accessible to friend class PAdminXMLParser during parsing.
* @{
*/
void setExecPath(const QString str) { fExecPath = str; } ///< Set path to musrfit executables.
void setDefaultSavePath(const QString str) { fDefaultSavePath = str; } ///< Set default save directory.
void setBeamline(const QString str) { fBeamline = str; } ///< Set default beamline name.
void setInstitute(const QString str) { fInstitute = str; } ///< Set default institute name.
void setFileFormat(const QString str) { fFileFormat = str; } ///< Set default file format.
void setLifetimeCorrectionFlag(const bool flag) { fLifetimeCorrection = flag; } ///< Enable/disable lifetime correction.
void setHelpUrl(const QString tag, const QString url);
void setTheoFuncPixmapPath (const QString str) { fTheoFuncPixmapPath = str; }
void addTheoryItem(const PTheory theo) { fTheory.push_back(theo); }
void setTheoFuncPixmapPath (const QString str) { fTheoFuncPixmapPath = str; } ///< Set path to theory pixmaps.
void addTheoryItem(const PTheory theo) { fTheory.push_back(theo); } ///< Add a theory function definition.
/** @} */
private:
friend class PAdminXMLParser;
friend class PAdminXMLParser; ///< Allow XML parser to access protected setters.
int fTimeout{3600}; ///< timeout in seconds
/** @name General Settings
* @brief Core application settings.
* @{
*/
int fTimeout{3600}; ///< Timeout for musrfit processes in seconds (default: 1 hour).
QString fFontName{QString("Monospace")}; ///< Editor font family name (default: Monospace on Linux, Courier New on macOS).
int fFontSize{11}; ///< Editor font size in points (default: 11 on Linux, 16 on macOS).
/** @} */
QString fFontName{QString("Monospace")}; ///< default font name
int fFontSize{11}; ///< default font size
/** @name Path Settings
* @brief File and directory paths.
* @{
*/
QString fPrefPathName{QString("")}; ///< Full path to the active musredit_startup.xml configuration file.
QString fExecPath{QString("")}; ///< Directory containing musrfit executables (musrfit, musrview, etc.).
QString fDefaultSavePath{QString("")}; ///< Default directory for saving msr files.
QString fTheoFuncPixmapPath{QString("")}; ///< Directory containing theory function formula pixmaps.
/** @} */
QString fPrefPathName{QString("")}; ///< path-name of the musredit_startup.xml
QString fExecPath{QString("")}; ///< system path to the musrfit executables
QString fDefaultSavePath{QString("")}; ///< default path where the msr-file should be saved
QString fTheoFuncPixmapPath{QString("")}; ///< path where the default pixmaps can be found
/** @name Recent Files
* @brief Recently opened file tracking.
* @{
*/
QVector<QString> fRecentFile; ///< Ring buffer of recently opened file paths (max MAX_RECENT_FILES entries).
/** @} */
QVector<QString> fRecentFile; ///< keep vector of recent path-file names
/** @name Display Flags
* @brief Flags controlling musrview and editor display behavior.
* @{
*/
bool fMusrviewShowFourier{false}; ///< If true, musrview shows Fourier transform at startup instead of time-domain data.
bool fMusrviewShowAvg{false}; ///< If true, musrview shows run-averaged data; if false, shows individual runs.
bool fMusrviewShowOneToOne{false}; ///< If true, theory is calculated only at data points; if false, uses higher density.
bool fEnableMusrT0{true}; ///< If true, musrT0 tool is enabled in musredit (default: yes).
bool fIgnoreThemeAutoDetection{false}; ///< If true, ignore OS theme detection and use manual icon settings.
bool fDarkThemeIconsMenu{false}; ///< If true, use dark theme icons in application menus.
bool fDarkThemeIconsToolbar{false}; ///< If true, use dark theme icons in the toolbar.
int fEditWidth{900}; ///< Initial editor window width in pixels.
int fEditHeight{800}; ///< Initial editor window height in pixels.
/** @} */
bool fMusrviewShowFourier{false}; ///< flag indicating if musrview should show at startup data (=false) or Fourier of data (=true).
bool fMusrviewShowAvg{false}; ///< flag indicating if musrview should show at startup averaged (=true) or original (=false) data/Fourier.
bool fMusrviewShowOneToOne{false}; ///< flag indicating if theory points are calculate only at the data points (=true) or a higher density theory points is calculated
bool fKeepMinuit2Output{false}; ///< flag indicating if the Minuit2 output shall be kept (default: no)
bool fDumpAscii{false}; ///< flag indicating if musrfit shall make an ascii-dump file (for debugging purposes, default: no).
bool fDumpRoot{false}; ///< flag indicating if musrfit shall make an root-dump file (for debugging purposes, default: no).
bool fTitleFromDataFile{true}; ///< flag indicating if the title should be extracted from the data file (default: yes).
bool fChisqPreRunBlock{false}; ///< flag indicating if musrfit shall write 'per run block' chisq to the msr-file (default: no).
bool fEstimateN0{true}; ///< flag indicating if musrfit shall estimate N0 for single histogram fits (default: yes).
bool fYamlOut{false}; ///< flag indicating if the MINUIT2.OUTPUT file should also be written as <msr-file>.yaml output. (default: no).
bool fEnableMusrT0{true}; ///< flag indicating if musrT0 shall be enabled at startup from within musredit (default: yes).
bool fIgnoreThemeAutoDetection{false}; ///< flag indicating that the theme autodetection shall be ignored. (default: no)
bool fDarkThemeIconsMenu{false}; ///< flag indicating if dark theme icons shall be used in the menu (default: no)
bool fDarkThemeIconsToolbar{false}; ///< flag indicating if dark theme icons shall be used in the toolbar (default: no)
int fEditWidth{900}; ///< startup edit width
int fEditHeight{800}; ///< startup edit height
/** @name Fit Output Flags
* @brief Flags controlling musrfit output options.
* @{
*/
bool fKeepMinuit2Output{false}; ///< If true, preserve MINUIT2.OUTPUT and MINUIT2.root files after fitting.
bool fDumpAscii{false}; ///< If true, musrfit creates ASCII dump files (for debugging).
bool fDumpRoot{false}; ///< If true, musrfit creates ROOT dump files (for debugging).
bool fTitleFromDataFile{true}; ///< If true, extract msr-file title from the data file header.
bool fChisqPreRunBlock{false}; ///< If true, write per-run-block chi-square values to msr-file.
bool fEstimateN0{true}; ///< If true, estimate N0 parameter for single histogram fits.
bool fYamlOut{false}; ///< If true, write MINUIT2 output additionally as \<msr-file\>.yaml.
/** @} */
QString fBeamline; ///< name of the beamline. Used to generate default run header lines.
QString fInstitute; ///< name of the institute. Used to generate default run header lines.
QString fFileFormat; ///< default file format. Used to generate default run header lines.
bool fLifetimeCorrection; ///< flag indicating if by default the lifetime-correction-flag in a single histo file shall be set.
/** @name MSR File Defaults
* @brief Default values for new msr files.
* @{
*/
QString fBeamline; ///< Default beamline name for new msr-file RUN blocks (e.g., "GPS", "LEM").
QString fInstitute; ///< Default institute name for new msr-file RUN blocks (e.g., "PSI", "ISIS").
QString fFileFormat; ///< Default data file format for new msr-files (e.g., "ROOT-NPP", "MusrRoot").
bool fLifetimeCorrection; ///< If true, enable lifetime correction flag in single histogram msr-files.
/** @} */
mutable PMsr2DataParam fMsr2DataParam; ///< keeps msr2data default parameter flags
/** @name Msr2Data Parameters
* @brief Default parameters for msr2data batch operations.
* @{
*/
mutable PMsr2DataParam fMsr2DataParam; ///< Default parameter values for msr2data tool integration.
/** @} */
QMap<QString, QString> fHelpUrl; ///< maps tag to help url
/** @name Help System
* @brief Online help URL mappings.
* @{
*/
QMap<QString, QString> fHelpUrl; ///< Maps section tags (e.g., "theory", "parameters") to help URLs.
/** @} */
QVector<PTheory> fTheory; ///< stores all known theories. Needed when generating theory blocks from within musredit.
/** @name Theory Functions
* @brief Available theory function definitions.
* @{
*/
QVector<PTheory> fTheory; ///< Collection of theory functions available in the Theory menu.
/** @} */
void createMusreditStartupFile(); ///< create default musredit_startup.xml
void createMusreditStartupFile(); ///< Create default musredit_startup.xml in user's home directory.
};
#endif // _PADMIN_H_