GamR  0.0.0
GammaROOT
Loading...
Searching...
No Matches
FFT.cc
Go to the documentation of this file.
1#include <TF1.h>
2
3#include "FFT.hh"
4#include "Transform.hh"
5
6namespace GamR {
7 namespace Spect {
8 TH1D* FFT(TH1 *hist, const char *name, double low, double high, FFTWindow wind/*=FFTWindow::BOX*/) {
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);
13
14 //make and populate restricted histogram
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));
19 }
20
21 TH1D *window_hist = (TH1D*)cut_hist->Clone("");
22 int N = cut_hist->GetNbinsX();
23
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));
25
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)));
29
30 if ( wind == FFTWindow::HANN ) {
31 window->SetParameter(2, 0.5);
32 window->SetParameter(3, 0.5);
33 window_hist->Multiply(window);
34 }
35 else if ( wind == FFTWindow::HAMMING ) {
36 window->SetParameter(2, 0.54);
37 window->SetParameter(3, 0.46);
38 window_hist->Multiply(window);
39 }
40
41 delete window;
42
43 //transform to frequency
44 TH1D *out_hist = NULL;
45 out_hist = (TH1D*)window_hist->FFT(out_hist, "MAG");
46
47 ScaleLabelsLinear(out_hist, 1.0/(window_hist->GetBinLowEdge(window_hist->GetNbinsX())+window_hist->GetBinWidth(window_hist->GetNbinsX())-window_hist->GetBinLowEdge(1)), 0);
48
49 //renormalise
50 out_hist->Scale(1.0/std::sqrt(window_hist->GetNbinsX()));
51 out_hist->SetName(name);
52
53 delete window_hist;
54
55 return out_hist;
56 }
57 }
58}
void ScaleLabelsLinear(TH1 *h, Double_t m, Double_t c)
Scales the labels of a histogram. Preferable over GamR::Spect::Scale and GamR::Spect::ScalePoly as it...
Definition Transform.cc:64
FFTWindow
Definition FFT.hh:8
TH1D * FFT(TH1 *hist, const char *name, double low, double high, FFTWindow wind)
Definition FFT.cc:8
Definition Gain.cc:19