next step towards Fourier

This commit is contained in:
nemu
2008-12-23 16:24:26 +00:00
parent 4a832f6fe8
commit ce9f98c37d
9 changed files with 708 additions and 204 deletions

View File

@@ -34,53 +34,45 @@
#include "fftw3.h"
#define F_ESTIMATE_N0_AND_BKG true
#define F_SINGLE_HISTO_RAW 0
#define F_SINGLE_HISTO 1
#define F_ASYMMETRY 2
#define F_APODIZATION_NONE 0
#define F_APODIZATION_WEAK 1
#define F_APODIZATION_MEDIUM 2
#define F_APODIZATION_STRONG 3
// gamma_muon / (2 pi) = 1.355342e-5 (GHz/G)
#define F_GAMMA_BAR_MUON 1.355342e-5
// gamma_muon / (2 pi) = 1.355342e-2 (MHz/G)
#define F_GAMMA_BAR_MUON 1.355342e-2
class PFourier
{
public:
PFourier(int dataType, TH1F *data,
PFourier(TH1F *data, int unitTag,
double startTime = 0.0, double endTime = 0.0,
unsigned int zeroPaddingPower = 0,
bool estimateN0AndBkg = false);
unsigned int zeroPaddingPower = 0);
virtual ~PFourier();
virtual void Transform(unsigned int apodizationTag = 0);
virtual double GetFieldResolution() { return fFieldResolution; }
virtual void GetRealFourier(TH1F *realFourier);
virtual void GetImaginaryFourier(TH1F *imaginaryFourier);
virtual double GetResolution() { return fResolution; }
virtual TH1F* GetRealFourier(const double scale = 1.0);
virtual TH1F* GetImaginaryFourier(const double scale = 1.0);
virtual TH1F* GetPowerFourier(const double scale = 1.0);
virtual TH1F* GetPhaseFourier(const double scale = 1.0);
virtual bool IsValid() { return fValid; }
private:
TH1F *fData;
bool fValid;
int fUnitTag; ///< 1=Field Units (G), 2=Frequency Units (MHz), 3=Angular Frequency Units (Mc/s)
int fDataType; ///< 0=Single Histo Raw, 1=Single Histo Life Time Corrected, 2=Asymmetry
int fApodization; ///< 0=none, 1=weak, 2=medium, 3=strong
double fN0;
double fBkg;
double fTimeResolution;
double fStartTime;
double fEndTime;
unsigned int fZeroPaddingPower;
double fFieldResolution;
TH1F *fData;
double fResolution;
unsigned int fNoOfData;
unsigned int fNoOfBins;
@@ -88,10 +80,8 @@ class PFourier
fftw_complex *fIn;
fftw_complex *fOut;
virtual void PrepareSingleHistoFFTwInputData(unsigned int apodizationTag);
virtual void PrepareFFTwInputData(unsigned int apodizationTag);
virtual void ApodizeData(int apodizationTag);
virtual void EstimateN0AndBkg();
};
#endif // _PFOURIER_H_

View File

@@ -59,7 +59,7 @@ class PMsrHandler
virtual PMsrLines* GetMsrFunctions() { return &fFunctions; }
virtual PMsrRunList* GetMsrRunList() { return &fRuns; }
virtual PMsrLines* GetMsrCommands() { return &fCommands; }
virtual PMsrFourierStructure* GetMsrFourierList() { return &fFourier; }
virtual PMsrFourierStructure GetMsrFourierList() { return fFourier; }
virtual PMsrPlotList* GetMsrPlotList() { return &fPlots; }
virtual PMsrStatisticStructure* GetMsrStatistic() { return &fStatistic; }

View File

@@ -286,14 +286,14 @@ typedef vector<PMsrRunStructure> PMsrRunList;
*/
typedef struct {
bool fFourierBlockPresent; ///< flag indicating if a Fourier block is present in the msr-file
bool fUnits; ///< flag used to indicate the units. 0=field units (G); 1=frequency units (MHz)
int fUnits; ///< flag used to indicate the units. 0=field units (G); 1=frequency units (MHz); 2=Mc/s
int fFourierPower; ///< i.e. zero padding up to 2^fFourierPower, default = 0 which means NO zero padding
int fApodization; ///< tag indicating the kind of apodization wished, 0=no appodization (default), 1=weak, 2=medium, 3=strong (for details see the docu)
int fPlotTag; ///< tag used for initial plot. 0=real, 1=imaginary, 2=real & imaginary (default), 3=power, 4=phase
double fPhase; ///< phase
double fRangeForPhaseCorrection[2]; ///< field/frequency range for automatic phase correction
double fPlotRange[2]; ///< field/frequency plot range
double fPhaseIncerement; ///< phase increment for manual phase optimization
double fPhaseIncrement; ///< phase increment for manual phase optimization
} PMsrFourierStructure;
//-------------------------------------------------------------

View File

@@ -149,14 +149,14 @@ class PMusrCanvas : public TObject, public TQObject
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,
PMsrFourierStructure fourierDefault,
const PIntVector markerList, const PIntVector colorList);
virtual ~PMusrCanvas();
virtual Bool_t IsValid() { return fValid; }
#ifndef __MAKECINT__
virtual void SetMsrHandler(PMsrHandler *msrHandler) { fMsrHandler = msrHandler; }
virtual void SetMsrHandler(PMsrHandler *msrHandler);
virtual void SetRunListCollection(PRunListCollection *runList) { fRunList = runList; }
#endif // __MAKECINT__
@@ -200,11 +200,12 @@ class PMusrCanvas : public TObject, public TQObject
PMusrCanvasDataList fData;
PMusrCanvasNonMusrDataList fNonMusrData;
PMsrFourierStructure *fFourier;
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);
@@ -219,9 +220,12 @@ class PMusrCanvas : public TObject, public TQObject
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(int fourierType);
virtual void PlotFourier();
virtual void SaveDataAscii();
virtual void SaveDataDb();

View File

@@ -58,10 +58,10 @@ class PStartupHandler : public TObject, public TQObject
virtual void CheckLists();
virtual PMsrFourierStructure* GetFourierDefaults() { return &fFourierDefaults; }
virtual const PStringVector GetDataPathList() const { return fDataPathList; }
virtual const PIntVector GetMarkerList() const { return fMarkerList; }
virtual const PIntVector GetColorList() const { return fColorList; }
virtual PMsrFourierStructure GetFourierDefaults() { return fFourierDefaults; }
virtual const PStringVector GetDataPathList() const { return fDataPathList; }
virtual const PIntVector GetMarkerList() const { return fMarkerList; }
virtual const PIntVector GetColorList() const { return fColorList; }
private:
enum EKeyWords {eEmpty, eComment, eDataPath,