musrview: remove PMusrCanvas

PMusrCanvas was the TCanvas based front end of musrview. Since the ROOT7
rewrite it is no longer part of the build, so drop the class, its header and its
LinkDef rather than leave dead code behind.

Also update the comments in PRunListCollection, PRunMuMinus, PRunSingleHisto
and musrt0 which still named the class, and repair the header comment of
PFourierCanvasLinkDef.h, which carried the file name of the LinkDef it had been
copied from.

Clean rebuild, tests 87/87.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H6YiUNBTMDX9uA3Ts1w2nW
This commit is contained in:
suter_aandClaude Opus 5 committed 2026-09-11 14:49:04 +02:00
1 parent 3c043af4db
commit 2cb76879ff
10 files changed
+10 -7134

No files matched your search

-2
View File
@@ -120,8 +120,6 @@ The central data model and control flow (all in `src/classes/` with headers in `
only prints the URL.
- **`PFourier`** / **`PFourierCanvas`** / **`PPrepFourier`** handle the Fourier transform and its
(still TCanvas based) display, used by `musrview`/`musrFT`.
- **`PMusrCanvas`** is the former TCanvas based musrview front end. It is no longer part of the
build; the files are kept for reference only.
- **`PMsr2Data`** implements `msr2data`'s logic for generating follow-up/global msr files from a
template across a run list.
+3
View File
@@ -62,6 +62,9 @@ ROOT's graphics state inconsistent and crashes in TCanvas::Build(), and ROOT
web canvases open a window of their own. Sending the drawables is also smaller
on the wire and is what the ROOT7 client/server split suggests anyway.
PMusrCanvas, the TCanvas based front end musrview used so far, has been removed
together with its dictionary.
Release of V1.12.1, 2026/08/25
==============================
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -1081,7 +1081,7 @@ PRunData* PRunListCollection::GetAsymmetry(UInt_t index, EDataSwitch tag)
fRunAsymmetryList[index]->CalcTheory();
data = fRunAsymmetryList[index]->GetData();
break;
case kRunNo: // called from PMusrCanvas
case kRunNo: // called from the musrview data layer
for (UInt_t i=0; i<fRunAsymmetryList.size(); i++) {
if (fRunAsymmetryList[i]->GetRunNo() == index) {
data = fRunAsymmetryList[i]->GetData();
@@ -1124,7 +1124,7 @@ PRunData* PRunListCollection::GetAsymmetryBNMR(UInt_t index, EDataSwitch tag)
fRunAsymmetryBNMRList[index]->CalcTheory();
data = fRunAsymmetryBNMRList[index]->GetData();
break;
case kRunNo: // called from PMusrCanvas
case kRunNo: // called from the musrview data layer
for (UInt_t i=0; i<fRunAsymmetryBNMRList.size(); i++) {
if (fRunAsymmetryBNMRList[i]->GetRunNo() == index) {
data = fRunAsymmetryBNMRList[i]->GetData();
@@ -1167,7 +1167,7 @@ PRunData* PRunListCollection::GetAsymmetryRRF(UInt_t index, EDataSwitch tag)
fRunAsymmetryRRFList[index]->CalcTheory();
data = fRunAsymmetryRRFList[index]->GetData();
break;
case kRunNo: // called from PMusrCanvas
case kRunNo: // called from the musrview data layer
for (UInt_t i=0; i<fRunAsymmetryRRFList.size(); i++) {
if (fRunAsymmetryRRFList[i]->GetRunNo() == index) {
data = fRunAsymmetryRRFList[i]->GetData();
+1 -1
View File
@@ -799,7 +799,7 @@ Bool_t PRunMuMinus::PrepareRawViewData(PRawRunData* runData, const UInt_t histoN
theoryNorm = static_cast<Double_t>(fMsrInfo->GetMsrPlotList()->at(0).fViewPacking)/static_cast<Double_t>(fPacking);
}
// raw data, since PMusrCanvas is doing ranging etc.
// raw data, since the musrview data layer is doing ranging etc.
// start = the first bin which is a multiple of packing backward from first good data bin
Int_t start = fGoodBins[0] - (fGoodBins[0]/packing)*packing;
// end = last bin starting from start which is a multipl of packing and still within the data
+1 -1
View File
@@ -1309,7 +1309,7 @@ Bool_t PRunSingleHisto::PrepareRawViewData(PRawRunData* runData, const UInt_t hi
theoryNorm = static_cast<Double_t>(fMsrInfo->GetMsrPlotList()->at(0).fViewPacking)/static_cast<Double_t>(fPacking);
}
// raw data, since PMusrCanvas is doing ranging etc.
// raw data, since the musrview data layer is doing ranging etc.
// start = the first bin which is a multiple of packing backward from first good data bin
Int_t start = fGoodBins[0] - (fGoodBins[0]/packing)*packing;
// end = last bin starting from start which is a multiple of packing and still within the data
+1 -1
View File
@@ -1,6 +1,6 @@
/***************************************************************************
PMusrCanvasLinkDef.h
PFourierCanvasLinkDef.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
-468
View File
@@ -1,468 +0,0 @@
/***************************************************************************
PMusrCanvas.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef _PMUSRCANVAS_H_
#define _PMUSRCANVAS_H_
#include <TObject.h>
#include <TQObject.h>
#include <TStyle.h>
#include <TRootCanvas.h>
#include <TGMenu.h>
#include <TCanvas.h>
#include <TPaveText.h>
#include <TLegend.h>
#include <TPad.h>
#include <TH1F.h>
#include <TGraphErrors.h>
#include <TMultiGraph.h>
#include <TLatex.h>
#include "PMusr.h"
#ifndef __MAKECLING__
#include "PMsrHandler.h"
#include "PRunListCollection.h"
#endif // __MAKECLING__
//--------------------------------------------------------------------------
// Layout constants
//--------------------------------------------------------------------------
#define YINFO 0.1 ///< Y-position of info/legend pad
#define YTITLE 0.95 ///< Y-position of title pad
#define XTHEO 0.75 ///< X-position of theory pad
//--------------------------------------------------------------------------
// Current Plot Views
//--------------------------------------------------------------------------
#define PV_DATA 1 ///< Plot view: time-domain data
#define PV_FOURIER_REAL 2 ///< Plot view: real part of Fourier transform
#define PV_FOURIER_IMAG 3 ///< Plot view: imaginary part of Fourier transform
#define PV_FOURIER_REAL_AND_IMAG 4 ///< Plot view: real and imaginary parts simultaneously
#define PV_FOURIER_PWR 5 ///< Plot view: power spectrum
#define PV_FOURIER_PHASE 6 ///< Plot view: phase spectrum
#define PV_FOURIER_PHASE_OPT_REAL 7 ///< Plot view: phase-optimized real part
//--------------------------------------------------------------------------
// Canvas menu IDs
//--------------------------------------------------------------------------
#define P_MENU_ID_DATA 10001 ///< Menu ID for Data view
#define P_MENU_ID_FOURIER 10002 ///< Menu ID for Fourier submenu
#define P_MENU_ID_DIFFERENCE 10003 ///< Menu ID for Difference view (data-theory)
#define P_MENU_ID_AVERAGE 10004 ///< Menu ID for Average view
#define P_MENU_ID_EXPORT_DATA 10005 ///< Menu ID for Export Data function
#define P_MENU_PLOT_OFFSET 1000 ///< Offset for plot-specific menu IDs
//--------------------------------------------------------------------------
// Fourier submenu IDs
//--------------------------------------------------------------------------
#define P_MENU_ID_FOURIER_REAL 100 ///< Fourier menu: real part
#define P_MENU_ID_FOURIER_IMAG 101 ///< Fourier menu: imaginary part
#define P_MENU_ID_FOURIER_REAL_AND_IMAG 102 ///< Fourier menu: real and imaginary
#define P_MENU_ID_FOURIER_PWR 103 ///< Fourier menu: power spectrum
#define P_MENU_ID_FOURIER_PHASE 104 ///< Fourier menu: phase spectrum
#define P_MENU_ID_FOURIER_PHASE_OPT_REAL 105 ///< Fourier menu: phase-optimized real
#define P_MENU_ID_FOURIER_PHASE_PLUS 106 ///< Fourier menu: increment phase
#define P_MENU_ID_FOURIER_PHASE_MINUS 107 ///< Fourier menu: decrement phase
//------------------------------------------------------------------------
/**
* \brief Helper class for managing plot axis ranges.
*
* Stores and manages X and Y axis ranges for plots, allowing explicit
* range specification from MSR file PLOT blocks or automatic range
* determination based on data.
*/
class PMusrCanvasPlotRange : public TObject
{
public:
/// Default constructor
PMusrCanvasPlotRange();
/// Destructor
virtual ~PMusrCanvasPlotRange() {}
/// Sets X-axis range and marks it as present
virtual void SetXRange(Double_t xmin, Double_t xmax);
/// Sets Y-axis range and marks it as present
virtual void SetYRange(Double_t ymin, Double_t ymax);
/// Returns true if X-axis range has been explicitly set
virtual Bool_t IsXRangePresent() { return fXRangePresent; }
/// Returns true if Y-axis range has been explicitly set
virtual Bool_t IsYRangePresent() { return fYRangePresent; }
/// Returns minimum X value
virtual Double_t GetXmin() { return fXmin; }
/// Returns maximum X value
virtual Double_t GetXmax() { return fXmax; }
/// Returns minimum Y value
virtual Double_t GetYmin() { return fYmin; }
/// Returns maximum Y value
virtual Double_t GetYmax() { return fYmax; }
private:
Bool_t fXRangePresent; ///< Flag: true if X-range explicitly set
Bool_t fYRangePresent; ///< Flag: true if Y-range explicitly set
Double_t fXmin; ///< Minimum X value
Double_t fXmax; ///< Maximum X value
Double_t fYmin; ///< Minimum Y value
Double_t fYmax; ///< Maximum Y value
ClassDef(PMusrCanvasPlotRange, 1)
};
//------------------------------------------------------------------------
/**
* <p>Structure holding all necessary histograms for a single plot block entry for
* fit types: asymmetry fit and single histogram fit.
*/
struct PMusrCanvasDataSet {
TH1F *data; ///< data histogram
TH1F *dataFourierRe; ///< real part of the Fourier transform of the data histogram
TH1F *dataFourierIm; ///< imaginary part of the Fourier transform of the data histogram
TH1F *dataFourierPwr; ///< power spectrum of the Fourier transform of the data histogram
TH1F *dataFourierPhase; ///< phase spectrum of the Fourier transform of the data histogram
TH1F *dataFourierPhaseOptReal; ///< phase optimized real part spectrum Fourier transform of the data histogram
TH1F *theory; ///< theory histogram belonging to the data histogram
TH1F *theoryFourierRe; ///< real part of the Fourier transform of the theory histogram
TH1F *theoryFourierIm; ///< imaginary part of the Fourier transform of the theory histogram
TH1F *theoryFourierPwr; ///< power spectrum of the Fourier transform of the theory histogram
TH1F *theoryFourierPhase; ///< phase spectrum of the Fourier transform of the theory histogram
TH1F *theoryFourierPhaseOptReal; ///< phase optimized real part spectrum Fourier transform of the theory histogram
TH1F *diff; ///< difference histogram, i.e. data-theory
TH1F *diffFourierRe; ///< real part of the Fourier transform of the diff histogram
TH1F *diffFourierIm; ///< imaginary part of the Fourier transform of the diff histogram
TH1F *diffFourierPwr; ///< power spectrum of the Fourier transform of the diff histogram
TH1F *diffFourierPhase; ///< phase spectrum of the Fourier transform of the diff histogram
TH1F *diffFourierPhaseOptReal; ///< phase optimized real part spectrum Fourier transform of the diff histogram
PMusrCanvasPlotRange *dataRange; ///< keep the msr-file plot data range
UInt_t diffFourierTag; ///< 0=not relevant, 1=d-f (Fourier of difference time spectra), 2=f-d (difference of Fourier spectra)
};
//------------------------------------------------------------------------
/**
* <p>typedef to make to code more readable: list of histogram data sets.
*/
typedef std::vector<PMusrCanvasDataSet> PMusrCanvasDataList;
//------------------------------------------------------------------------
/**
* <p>Structure holding all necessary error graphs for a single plot block entry for
* fit types: non-muSR fit.
*/
struct PMusrCanvasNonMusrDataSet {
TGraphErrors *data; ///< data error graph
TGraphErrors *dataFourierRe; ///< real part of the Fourier transform of the data error graph
TGraphErrors *dataFourierIm; ///< imaginary part of the Fourier transform of the data error graph
TGraphErrors *dataFourierPwr; ///< power spectrum of the Fourier transform of the data error graph
TGraphErrors *dataFourierPhase; ///< phase spectrum of the Fourier transform of the data error graph
TGraphErrors *theory; ///< theory histogram belonging to the data error graph
TGraphErrors *theoryFourierRe; ///< real part of the Fourier transform of the theory error graph
TGraphErrors *theoryFourierIm; ///< imaginary part of the Fourier transform of the theory error graph
TGraphErrors *theoryFourierPwr; ///< power spectrum of the Fourier transform of the theory error graph
TGraphErrors *theoryFourierPhase; ///< phase spectrum of the Fourier transform of the theory error graph
TGraphErrors *diff; ///< difference error graph, i.e. data-theory
TGraphErrors *diffFourierRe; ///< real part of the Fourier transform of the diff error graph
TGraphErrors *diffFourierIm; ///< imaginary part of the Fourier transform of the diff error graph
TGraphErrors *diffFourierPwr; ///< power spectrum of the Fourier transform of the diff error graph
TGraphErrors *diffFourierPhase; ///< phase spectrum of the Fourier transform of the diff error graph
PMusrCanvasPlotRange *dataRange; ///< keep the msr-file plot data range
UInt_t diffFourierTag; ///< 0=not relevant, 1=d-f (Fourier of difference time spectra), 2=f-d (difference of Fourier spectra)
};
//------------------------------------------------------------------------
/**
* <p>typedef to make to code more readable: list of error graph data sets.
*/
typedef std::vector<PMusrCanvasNonMusrDataSet> PMusrCanvasNonMusrDataList;
//------------------------------------------------------------------------
/**
* <p> data structure needed for ascii dump within musrview.
*/
struct PMusrCanvasAsciiDump {
PDoubleVector dataX; ///< x-axis data set
PDoubleVector data; ///< y-axis data set
PDoubleVector dataErr; ///< error of the y-axis data set
};
//------------------------------------------------------------------------
/**
* <p> typedef to make to code more readable: vector of the above data structure.
* Used if there are multiple histogramms to be dumped.
*/
typedef std::vector<PMusrCanvasAsciiDump> PMusrCanvasAsciiDumpVector;
//--------------------------------------------------------------------------
/**
* \brief ROOT-based canvas for interactive visualization of muSR data and fits.
*
* PMusrCanvas provides comprehensive visualization capabilities for muSR data analysis:
*
* **Display Modes:**
* - Time-domain data with fitted theory curves
* - Difference plots (data - theory)
* - Fourier transforms (real, imaginary, power, phase)
* - Phase-optimized real Fourier spectra
* - Averaged data across multiple runs
*
* **Supported Fit Types:**
* - Single histogram fits
* - Asymmetry fits (forward-backward, alpha-beta-LR)
* - Beta-NMR asymmetry
* - Non-muSR data (generic X-Y plots with errors)
*
* **Interactive Features:**
* - Menu-driven view switching (Data/Fourier/Difference/Average)
* - Keyboard shortcuts for quick navigation
* - Phase adjustment for Fourier transforms
* - Data export to ASCII format
* - Graphics export (EPS, PDF, PNG, etc.)
* - Automatic timeout for batch processing
*
* **Canvas Layout:**
* The canvas is divided into several pads:
* - Title pad: Displays MSR file title
* - Data/Theory pad: Main plotting area for histograms/graphs
* - Parameter pad: Shows fitted parameter values
* - Theory pad: Lists theory functions used in fit
* - Info/Legend pad: Displays run information and legend
*
* **Integration:**
* - Reads MSR files via PMsrHandler
* - Accesses fit results via PRunListCollection
* - Uses ROOT's TCanvas and graphics primitives
* - Supports both interactive and batch modes
*
* \note The preprocessor tag __MAKECLING__ is used to hide complex
* Boost Spirit headers from rootcling during dictionary generation
*
* \see PMsrHandler for MSR file management
* \see PRunListCollection for fit results
* \see PMsrFourierStructure for Fourier transform parameters
*/
class PMusrCanvas : public TObject, public TQObject
{
public:
/// Default constructor
PMusrCanvas();
//----------------------------------------------------------------------
/**
* \brief Basic constructor for canvas without custom markers/colors.
*
* \param number Plot number from MSR file PLOT block
* \param title Canvas title
* \param wtopx X-position of canvas window (pixels)
* \param wtopy Y-position of canvas window (pixels)
* \param ww Canvas width (pixels)
* \param wh Canvas height (pixels)
* \param batch If true, run in batch mode (no GUI)
* \param fourier If true, start with Fourier view instead of time domain
* \param avg If true, start with averaged view
* \param theoAsData If true, calculate theory only at data points
*/
PMusrCanvas(const Int_t number, const Char_t* title,
Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, const Bool_t batch,
const Bool_t fourier=false, const Bool_t avg=false, const Bool_t theoAsData=false);
//----------------------------------------------------------------------
/**
* \brief Full constructor with Fourier defaults and custom markers/colors.
*
* \param number Plot number from MSR file PLOT block
* \param title Canvas title
* \param wtopx X-position of canvas window (pixels)
* \param wtopy Y-position of canvas window (pixels)
* \param ww Canvas width (pixels)
* \param wh Canvas height (pixels)
* \param fourierDefault Default Fourier transform parameters
* \param markerList Vector of ROOT marker styles for plots
* \param colorList Vector of ROOT color indices for plots
* \param batch If true, run in batch mode (no GUI)
* \param fourier If true, start with Fourier view instead of time domain
* \param avg If true, start with averaged view
* \param theoAsData If true, calculate theory only at data points
*/
PMusrCanvas(const Int_t number, const Char_t* title,
Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh,
PMsrFourierStructure fourierDefault,
const PIntVector markerList, const PIntVector colorList, const Bool_t batch,
const Bool_t fourier=false, const Bool_t avg=false, const Bool_t theoAsData=false);
/// Destructor - cleans up all histograms, graphs, and ROOT objects
virtual ~PMusrCanvas();
/// Returns true if canvas initialized successfully
virtual Bool_t IsValid() { return fValid; }
#ifndef __MAKECLING__
/// Sets the MSR file handler for accessing fit parameters and configuration
virtual void SetMsrHandler(PMsrHandler *msrHandler);
/// Sets the run list collection for accessing fit data and results
virtual void SetRunListCollection(PRunListCollection *runList) { fRunList = runList; }
#endif // __MAKECLING__
/// Sets timeout in seconds after which Done signal is emitted (0=no timeout)
virtual void SetTimeout(Int_t ival);
/// Updates parameter and theory display pads with current fit results
virtual void UpdateParamTheoryPad();
/// Updates main data/theory plotting pad
virtual void UpdateDataTheoryPad();
/// Updates info/legend pad with run information
virtual void UpdateInfoPad();
/// ROOT signal emitted when canvas is closed or timeout occurs
virtual void Done(Int_t status=0); // *SIGNAL*
/// ROOT slot handling keyboard commands (e.g., 'f' for Fourier, 'd' for data)
virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT
/// ROOT slot handling menu selections
virtual void HandleMenuPopup(Int_t id); // SLOT
/// ROOT slot called when this is the last canvas being closed
virtual void LastCanvasClosed(); // SLOT
/// ROOT slot called when canvas window is closed
virtual void WindowClosed(); // SLOT
/// Saves canvas to graphics file and emits Done signal
virtual void SaveGraphicsAndQuit(const Char_t *fileName, const Char_t *graphicsFormat);
/// Exports displayed data to ASCII file
virtual void ExportData(const Char_t *fileName);
private:
Bool_t fTheoAsData; ///< flag if true, calculate theory points only at the data points
Bool_t fStartWithFourier; ///< flag if true, the Fourier transform will be presented bypassing the time domain representation
Bool_t fStartWithAvg; ///< flag if true, the averaged data/Fourier will be presented
Int_t fTimeout; ///< timeout after which the Done signal should be emited. If timeout <= 0, no timeout is taking place
Bool_t fScaleN0AndBkg; ///< true=N0 and background is scaled to (1/ns), otherwise (1/bin) for the single histogram case
Bool_t fBatchMode; ///< musrview in ROOT batch mode
Bool_t fValid; ///< if true, everything looks OK
Bool_t fAveragedView; ///< tag showing that the averaged view or normal view should be presented.
Bool_t fDifferenceView; ///< tag showing that the shown data, fourier, are the difference between data and theory
Bool_t fToggleColor; ///< tag showing if a single histo theory is color toggled
Int_t fCurrentPlotView; ///< tag showing what the current plot view is: data, fourier, ...
Int_t fPreviousPlotView; ///< tag showing the previous plot view
Int_t fPlotType; ///< plot type tag: -1 == undefined, MSR_PLOT_SINGLE_HISTO == single histogram, MSR_PLOT_ASYM == asymmetry, MSR_PLOT_BNMR == beta-NMR asymmetry, MSR_PLOT_MU_MINUS == mu minus (not yet implemented), MSR_PLOT_NON_MUSR == non-muSR
Int_t fPlotNumber; ///< plot number
Bool_t fXRangePresent, fYRangePresent; ///< flag indicating if x-/y-range is present
Double_t fXmin, fXmax, fYmin, fYmax; ///< data/theory frame range
PDoubleVector fCurrentFourierPhase; ///< holds the current Fourier phase(s)
std::unique_ptr<TLatex> fCurrentFourierPhaseText; ///< used in Re/Im Fourier to show the current phase in the pad
std::unique_ptr<TString> fRRFText; ///< RRF information
std::unique_ptr<TLatex> fRRFLatexText; ///< used to display RRF info
std::unique_ptr<TStyle> fStyle; ///< A collection of all graphics attributes
std::unique_ptr<TTimer> fTimeoutTimer; ///< timeout timer in order to terminate if no action is taking place for too long
// canvas menu related variables
TRootCanvas *fImp; ///< ROOT native GUI version of main window with menubar and drawing area
TGMenuBar *fBar; ///< menu bar
TGPopupMenu *fPopupMain; ///< popup menu Musrfit in the main menu bar
std::unique_ptr<TGPopupMenu> fPopupFourier; ///< popup menu of the Musrfit/Fourier sub menu
// canvas related variables
std::unique_ptr<TCanvas> fMainCanvas; ///< main canvas
std::unique_ptr<TPaveText> fTitlePad; ///< title pad used to display a title
std::unique_ptr<TPad> fDataTheoryPad; ///< data/theory pad used to display the data/theory
std::unique_ptr<TPaveText> fParameterPad; ///< parameter pad used to display the fitting parameters
std::unique_ptr<TPaveText> fTheoryPad; ///< theory pad used to display the theory and functions
std::unique_ptr<TLegend> fInfoPad; ///< info pad used to display a legend of the data plotted
std::unique_ptr<TLegend> fMultiGraphLegend; ///< used for non-muSR plots to display a legend
TH1F *fHistoFrame; ///< fHistoFrame is a 'global' frame needed in order to plot histograms with (potentially) different x-frames
#ifndef __MAKECLING__
PMsrHandler *fMsrHandler; ///< msr-file handler
PRunListCollection *fRunList; ///< data handler
#endif // __MAKECLING__
PMusrCanvasDataSet fDataAvg; ///< set of all averaged data to be plotted (asymmetry/single histogram)
PMusrCanvasDataList fData; ///< list of all histogram data to be plotted (asymmetry/single histogram)
PMusrCanvasNonMusrDataList fNonMusrData; ///< list of all error graphs to be plotted (non-muSR)
TMultiGraph *fMultiGraphData; ///< fMultiGraphData is a 'global' graph needed in order to plot error graphs (data) with (potentially) different x-frames
TMultiGraph *fMultiGraphDiff; ///< fMultiGraphDiff is a 'global' graph needed in order to plot error graphs (data-theory) with (potentially) different x-frames
PMsrFourierStructure fFourier; ///< structure holding all the information necessary to perform the Fourier transform
PIntVector fMarkerList; ///< list of markers
PIntVector fColorList; ///< list of colors
virtual void CreateStyle();
virtual void InitFourier();
virtual void InitAverage();
virtual void InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh);
virtual void InitDataSet(PMusrCanvasDataSet &dataSet);
virtual void InitDataSet(PMusrCanvasNonMusrDataSet &dataSet);
virtual void CleanupDataSet(PMusrCanvasDataSet &dataSet);
virtual void CleanupDataSet(PMusrCanvasNonMusrDataSet &dataSet);
virtual void HandleDataSet(UInt_t plotNo, UInt_t runNo, PRunData *data);
virtual void HandleNonMusrDataSet(UInt_t plotNo, UInt_t runNo, PRunData *data);
virtual void HandleDifference();
virtual void HandleFourier();
virtual void HandleDifferenceFourier();
virtual void HandleFourierDifference();
virtual void HandleAverage();
virtual void CleanupDifference();
virtual void CleanupFourier();
virtual void CleanupFourierDifference();
virtual void CleanupAverage();
virtual void CalcPhaseOptReFT();
virtual Double_t CalculateDiff(const Double_t x, const Double_t y, TH1F *theo);
virtual Double_t CalculateDiff(const Double_t x, const Double_t y, TGraphErrors *theo);
virtual Int_t FindBin(const Double_t x, TGraphErrors *graph);
virtual Double_t GetMaximum(TH1F* histo, Double_t xmin=-1.0, Double_t xmax=-1.0);
virtual Double_t GetMinimum(TH1F* histo, Double_t xmin=-1.0, Double_t xmax=-1.0);
virtual Double_t GetMaximum(TGraphErrors* graph, Double_t xmin=-1.0, Double_t xmax=-1.0);
virtual Double_t GetMinimum(TGraphErrors* graph, Double_t xmin=-1.0, Double_t xmax=-1.0);
virtual void PlotData(Bool_t unzoom=false);
virtual void PlotDifference(Bool_t unzoom=false);
virtual void PlotFourier(Bool_t unzoom=false);
virtual void PlotFourierDifference(Bool_t unzoom=false);
virtual void PlotFourierPhaseValue(Bool_t unzoom=false);
virtual void PlotAverage(Bool_t unzoom=false);
virtual void IncrementFourierPhase();
virtual void DecrementFourierPhase();
virtual Bool_t IsScaleN0AndBkg();
virtual UInt_t GetNeededAccuracy(PMsrParamStructure param);
virtual Double_t GetInterpolatedValue(TH1F* histo, Double_t xVal);
virtual void GetExportDataSet(const TH1F *data, const Double_t xmin, const Double_t xmax,
PMusrCanvasAsciiDumpVector &dumpData, const Bool_t hasError=true);
ClassDef(PMusrCanvas, 1)
};
#endif // _PMUSRCANVAS_H_
-40
View File
@@ -1,40 +0,0 @@
/***************************************************************************
PMusrCanvasLinkDef.h
Author: Andreas Suter
e-mail: andreas.suter@psi.ch
***************************************************************************/
/***************************************************************************
* Copyright (C) 2007-2026 by Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class PMusrCanvasPlotRange+;
#pragma link C++ class PMusrCanvas+;
#endif
+1 -1
View File
@@ -785,7 +785,7 @@ Int_t main(Int_t argc, Char_t *argv[])
// 2) build the added up histogram, i.e. add all runs and/or histograms for the msr-run.
// 3) set the data-, and bkg-range
if (success) {
// generate Root application needed for PMusrCanvas
// generate Root application needed for the canvas below
TApplication app("App", nullptr, nullptr);
PMusrT0Data musrT0Data;