next step towards Fourier
This commit is contained in:
@@ -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_
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
//-------------------------------------------------------------
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user