8 TH1D*
FFT(TH1 *hist,
const char *name,
double low,
double high,
FFTWindow wind) {
9 int binStart = hist->FindBin(low);
10 int binStop = hist->FindBin(high);
11 double start = hist->GetBinLowEdge(binStart);
12 double stop = hist->GetBinLowEdge(binStop + 1);
15 TH1D *cut_hist =
new TH1D(
"",
"", binStop - binStart + 1, start, stop);
16 for (
int i=binStart; i<=binStop; ++i) {
17 cut_hist->SetBinContent(i-binStart+1, hist->GetBinContent(i));
18 cut_hist->SetBinError(i-binStart+1, hist->GetBinError(i));
21 TH1D *window_hist = (TH1D*)cut_hist->Clone(
"");
22 int N = cut_hist->GetNbinsX();
24 TF1 *window =
new TF1(
"window",
"([2] - [3]*cos(2*TMath::Pi()*(x-[0])/([1])))", cut_hist->GetBinLowEdge(1), 2*cut_hist->GetBinLowEdge(N)-cut_hist->GetBinLowEdge(N-1));
26 window->SetParameter(4, N);
27 window->SetParameter(0, cut_hist->GetBinLowEdge(1));
28 window->SetParameter(1, (2*cut_hist->GetBinLowEdge(N)-cut_hist->GetBinLowEdge(N-1)-cut_hist->GetBinLowEdge(1)));
31 window->SetParameter(2, 0.5);
32 window->SetParameter(3, 0.5);
33 window_hist->Multiply(window);
36 window->SetParameter(2, 0.54);
37 window->SetParameter(3, 0.46);
38 window_hist->Multiply(window);
44 TH1D *out_hist = NULL;
45 out_hist = (TH1D*)window_hist->FFT(out_hist,
"MAG");
47 ScaleLabelsLinear(out_hist, 1.0/(window_hist->GetBinLowEdge(window_hist->GetNbinsX())+window_hist->GetBinWidth(window_hist->GetNbinsX())-window_hist->GetBinLowEdge(1)), 0);
50 out_hist->Scale(1.0/std::sqrt(window_hist->GetNbinsX()));
51 out_hist->SetName(name);