39#include "Minuit2/FCNBase.h"
53#define F_APODIZATION_NONE 1
55#define F_APODIZATION_WEAK 2
57#define F_APODIZATION_MEDIUM 3
59#define F_APODIZATION_STRONG 4
103 PFTPhaseCorrection(std::vector<Double_t> &reFT, std::vector<Double_t> &imFT,
const Int_t minBin=-1,
const Int_t maxBin=-1);
163 virtual Double_t
Penalty()
const;
164 virtual Double_t
Entropy()
const;
166 virtual Double_t
Up()
const {
return 1.0; }
167 virtual Double_t
operator()(
const std::vector<Double_t>&)
const;
215 Double_t startTime = 0.0, Double_t endTime = 0.0,
216 Bool_t dcCorrected =
false, UInt_t zeroPaddingPower = 0);
228 virtual void Transform(UInt_t apodizationTag = 0);
299 const Double_t scale = 1.0,
const Double_t min = -1.0,
const Double_t max = -1.0);
PFTPhaseCorrection(const Int_t minBin=-1, const Int_t maxBin=-1)
virtual void CalcRealPhFTDerivative() const
virtual Double_t Up() const
Int_t fMinBin
1st derivative of fRealPh
std::vector< Double_t > fRealPh
original imag Fourier data set
virtual void Init()
keeps the minimum of the entropy/penalty minimization
virtual void SetGamma(const Double_t gamma)
virtual ~PFTPhaseCorrection()
std::vector< Double_t > fRealPhD
phased imag Fourier data set
virtual Double_t Entropy() const
std::vector< Double_t > fImagPh
phased real Fourier data set
std::vector< Double_t > fReal
virtual void CalcPhasedFT() const
virtual Double_t operator()(const std::vector< Double_t > &) const
Double_t fPh_c1
constant part of the phase dispersion used for the phase correction
virtual void SetPh(const Double_t c0, const Double_t c1)
Double_t fMin
gamma parameter to balance between entropy and penalty
Double_t fGamma
linear part of the phase dispersion used for the phase correction
Double_t fPh_c0
maximum bin from Fourier range to be used for the phase correction estimate
virtual Double_t Penalty() const
virtual Double_t GetMinimum()
Int_t fMaxBin
minimum bin from Fourier range to be used for the phase correction estimate
virtual Double_t GetPhaseCorrectionParam(UInt_t idx)
virtual Double_t GetGamma()
std::vector< Double_t > fImag
original real Fourier data set
PFourier(TH1F *data, Int_t unitTag, Double_t startTime=0.0, Double_t endTime=0.0, Bool_t dcCorrected=false, UInt_t zeroPaddingPower=0)
fftw_plan fFFTwPlan
fftw plan (see FFTW3 User Manual)
virtual void ApodizeData(Int_t apodizationTag)
Int_t fApodization
0=none, 1=weak, 2=medium, 3=strong
Bool_t fValid
true = all boundary conditions fullfilled and hence a Fourier transform can be performed.
UInt_t fZeroPaddingPower
power for zero padding, if set < 0 no zero padding will be done
virtual Double_t GetResolution()
UInt_t fNoOfBins
number of bins to be Fourier transformed. Might be different to fNoOfData due to zero padding
virtual TH1F * GetImaginaryFourier(const Double_t scale=1.0)
UInt_t fNoOfData
number of bins in the time interval between fStartTime and fStopTime
Double_t fResolution
Fourier resolution (field, frequency, or angular frequency)
virtual void Transform(UInt_t apodizationTag=0)
virtual TH1F * GetRealFourier(const Double_t scale=1.0)
virtual Double_t GetMaxFreq()
virtual TH1F * GetPowerFourier(const Double_t scale=1.0)
static TH1F * GetPhaseOptRealFourier(const TH1F *re, const TH1F *im, std::vector< Double_t > &phase, const Double_t scale=1.0, const Double_t min=-1.0, const Double_t max=-1.0)
virtual const char * GetDataTitle()
TH1F * fData
data histogram to be Fourier transformed.
virtual const Int_t GetUnitTag()
virtual void PrepareFFTwInputData(UInt_t apodizationTag)
virtual TH1F * GetPhaseFourier(const Double_t scale=1.0)
Int_t fUnitTag
1=Field Units (G), 2=Field Units (T), 3=Frequency Units (MHz), 4=Angular Frequency Units (Mc/s)
Double_t fStartTime
start time of the data histogram
Double_t fTimeResolution
time resolution of the data histogram in (us)
fftw_complex * fIn
real part of the Fourier transform
fftw_complex * fOut
imaginary part of the Fourier transform
Double_t fEndTime
end time of the data histogram
Bool_t fDCCorrected
if true, removed DC offset from signal before Fourier transformation, otherwise not