13 TString name(Form(
"fft_waveforms_event__%04d", eventnr));
14 TCanvas* fftc =
new TCanvas(name.Data(), name.Data(), 600, 400);
17 TString imname(Form(
"fft_im_waveforms_event__%04d", eventnr));
18 TCanvas* imfftc =
new TCanvas(imname.Data(), imname.Data(), 600, 400);
22 double* xvals =
new double[size];
23 for (
int i = 0; i < size; i++) {
24 xvals[i] =
static_cast<double>(i) / (
SP *
static_cast<double>(size));
27 double* refft =
new double[size];
28 double* imfft =
new double[size];
30 double* yvals =
new double[size]{};
35 for (
int j = 0; j < binNumber; j++) yvals[j] = static_cast<double>(
rundata[wf_index][j]);
37 TVirtualFFT* ffthis = TVirtualFFT::FFT(1, &size,
"R2C ES");
38 ffthis->SetPoints(yvals);
40 ffthis->GetPointsComplex(refft, imfft);
42 TGraph* re =
new TGraph(size, xvals, refft);
43 TGraph* im =
new TGraph(size, xvals, imfft);
47 stringstream renamess; renamess <<
"Channel " <<
active_channels[i] <<
", event " << eventnr <<
", Re(FFT(data))";
48 re->SetTitle(renamess.str().c_str());
51 if (xmin != 0. || xmax != 0.) re->GetXaxis()->SetLimits(xmin, xmax);
55 stringstream imnamess; imnamess <<
"Channel " <<
active_channels[i] <<
", event " << eventnr <<
", Im(FFT(data))";
56 im->SetTitle(imnamess.str().c_str());
59 if (xmin != 0. || xmax != 0.) im->GetXaxis()->SetLimits(xmin, xmax);
67 root_out->WriteObject(fftc, name.Data());
68 root_out->WriteObject(imfftc, imname.Data());
static void SplitCanvas(TCanvas *&, vector< int >, vector< int >)
Helper to split canvas according to the number of channels to be plotted.