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