/*************************************************************************** PMusrCanvas.h Author: Andreas Suter e-mail: andreas.suter@psi.ch $Id$ ***************************************************************************/ /*************************************************************************** * Copyright (C) 2007 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 #include #include #include #include #include #include #include #include #include #include #include #include "PMusr.h" #ifndef __MAKECINT__ #include "PMsrHandler.h" #include "PRunListCollection.h" #endif // __MAKECINT__ #define YINFO 0.1 #define YTITLE 0.95 #define XTHEO 0.75 // Current Plot Views #define PV_DATA 1 #define PV_FOURIER_REAL 2 #define PV_FOURIER_IMAG 3 #define PV_FOURIER_REAL_AND_IMAG 4 #define PV_FOURIER_PWR 5 #define PV_FOURIER_PHASE 6 // Canvas menu id's #define P_MENU_ID_DATA 10001 #define P_MENU_ID_FOURIER 10002 #define P_MENU_ID_DIFFERENCE 10003 #define P_MENU_ID_SAVE_DATA 10004 #define P_MENU_PLOT_OFFSET 1000 #define P_MENU_ID_FOURIER_REAL 100 #define P_MENU_ID_FOURIER_IMAG 101 #define P_MENU_ID_FOURIER_REAL_AND_IMAG 102 #define P_MENU_ID_FOURIER_PWR 103 #define P_MENU_ID_FOURIER_PHASE 104 #define P_MENU_ID_FOURIER_PHASE_PLUS 105 #define P_MENU_ID_FOURIER_PHASE_MINUS 106 #define P_MENU_ID_SAVE_ASCII 200 #define P_MENU_ID_SAVE_DB 201 //------------------------------------------------------------------------ /** *

*/ typedef struct { TH1F *data; TH1F *dataFourierRe; TH1F *dataFourierIm; TH1F *dataFourierPwr; TH1F *dataFourierPhase; TH1F *theory; TH1F *theoryFourierRe; TH1F *theoryFourierIm; TH1F *theoryFourierPwr; TH1F *theoryFourierPhase; TH1F *diff; TH1F *diffFourierRe; TH1F *diffFourierIm; TH1F *diffFourierPwr; TH1F *diffFourierPhase; } PMusrCanvasDataSet; //------------------------------------------------------------------------ /** *

*/ typedef vector PMusrCanvasDataList; //------------------------------------------------------------------------ /** *

*/ typedef struct { TGraphErrors *data; TGraphErrors *dataFourierRe; TGraphErrors *dataFourierIm; TGraphErrors *dataFourierPwr; TGraphErrors *dataFourierPhase; TGraphErrors *theory; TGraphErrors *theoryFourierRe; TGraphErrors *theoryFourierIm; TGraphErrors *theoryFourierPwr; TGraphErrors *theoryFourierPhase; TGraphErrors *diff; TGraphErrors *diffFourierRe; TGraphErrors *diffFourierIm; TGraphErrors *diffFourierPwr; TGraphErrors *diffFourierPhase; } PMusrCanvasNonMusrDataSet; //------------------------------------------------------------------------ /** *

*/ typedef vector PMusrCanvasNonMusrDataList; //-------------------------------------------------------------------------- /** *

The preprocessor tag __MAKECINT__ is used to hide away from rootcint * the overly complex spirit header files. */ class PMusrCanvas : public TObject, public TQObject { public: PMusrCanvas(); PMusrCanvas(const int number, const char* title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh); PMusrCanvas(const int number, const char* title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh, PMsrFourierStructure fourierDefault, const PIntVector markerList, const PIntVector colorList); virtual ~PMusrCanvas(); virtual Bool_t IsValid() { return fValid; } #ifndef __MAKECINT__ virtual void SetMsrHandler(PMsrHandler *msrHandler); virtual void SetRunListCollection(PRunListCollection *runList) { fRunList = runList; } #endif // __MAKECINT__ virtual void UpdateParamTheoryPad(); virtual void UpdateDataTheoryPad(); virtual void UpdateInfoPad(); virtual void Done(Int_t status=0); // *SIGNAL* virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT virtual void HandleMenuPopup(Int_t id); // SLOT virtual void LastCanvasClosed(); // SLOT private: Bool_t fValid; Bool_t fDifferenceView; /// tag showing that the shown data, fourier, are the difference between data and theory Int_t fCurrentPlotView; /// tag showing what the current plot view is: data, fourier, ... Int_t fPlotType; Int_t fPlotNumber; Double_t fCurrentFourierPhase; /// holds the current Fourier phase TLatex *fCurrentFourierPhaseText; /// used in Re/Im Fourier to show the current phase in the pad TStyle *fStyle; // canvas menu related variables TRootCanvas *fImp; TGMenuBar *fBar; TGPopupMenu *fPopupMain; TGPopupMenu *fPopupSave; TGPopupMenu *fPopupFourier; // canvas related variables TCanvas *fMainCanvas; TPaveText *fTitlePad; TPad *fDataTheoryPad; TPaveText *fParameterTheoryPad; TLegend *fInfoPad; #ifndef __MAKECINT__ PMsrHandler *fMsrHandler; PRunListCollection *fRunList; #endif // __MAKECINT__ PMusrCanvasDataList fData; PMusrCanvasNonMusrDataList fNonMusrData; PMsrFourierStructure fFourier; PIntVector fMarkerList; PIntVector fColorList; virtual void CreateStyle(); virtual void InitFourier(); virtual void InitMusrCanvas(const char* 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(unsigned int plotNo, unsigned int runNo, PRunData *data); virtual void HandleNonMusrDataSet(unsigned int plotNo, unsigned int runNo, PRunData *data); virtual void HandleDifference(); virtual void HandleFourier(); virtual void HandleFourierDifference(); virtual void CleanupDifference(); virtual void CleanupFourier(); virtual void CleanupFourierDifference(); virtual double CalculateDiff(const double x, const double y, TH1F *theo); virtual double CalculateDiff(const double x, const double y, TGraphErrors *theo); virtual Int_t FindBin(const double x, TGraphErrors *graph); virtual double GetGlobalMaximum(TH1F* histo); virtual double GetGlobalMinimum(TH1F* histo); virtual void PlotData(); virtual void PlotDifference(); virtual void PlotFourier(); virtual void PlotFourierDifference(); virtual void PlotFourierPhaseValue(); virtual void IncrementFourierPhase(); virtual void DecrementFourierPhase(); virtual void SaveDataAscii(); virtual void SaveDataDb(); ClassDef(PMusrCanvas, 1) }; #endif // _PMUSRCANVAS_H_