%%%% Plot Input Signal, Forward FFT and Backward FFT %%%%

%%%% Parameters must be identical to main_OpenCL.c %%%%
frequency_signalx=1;
frequency_signaly=2;
frequency_signalz=4;
tperiod_signalx=1/frequency_signalx;
tperiod_signaly=1/frequency_signaly;
tperiod_signalz=1/frequency_signalz;

number_samplingx=10;
number_samplingy=20;
number_samplingz=40;
frequency_samplingx=frequency_signalx*number_samplingx;
frequency_samplingy=frequency_signaly*number_samplingy;
frequency_samplingz=frequency_signalz*number_samplingz;

%%%% Plot Input Signal from Matlab %%%%
x11=(0:number_samplingx-1)/number_samplingx*tperiod_signalx;
x12=(0:number_samplingy-1)/number_samplingy*tperiod_signaly;
x13=(0:number_samplingz-1)/number_samplingz*tperiod_signalz;
[ym1 xm1 zm1]=ndgrid(x12,x11,x13);
y_signal1=cos(2*pi*frequency_signalx*xm1).*cos(2*pi*frequency_signaly*ym1).*cos(2*pi*frequency_signalz*zm1);
hFig = figure(1);
set(hFig, 'Position', [400 400 750 600]);
slice(xm1,ym1,zm1,y_signal1,[tperiod_signalx/2 tperiod_signalx-tperiod_signalx/number_samplingx],...
                            [tperiod_signaly/2 tperiod_signaly-tperiod_signaly/number_samplingy],...
                            [0 tperiod_signalz/2]);
shading faceted;
view([-42,22]);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
title('Slice of Input Signal From Matlab');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');

%%%% Plot Input Signal from FFT_3D_Input.dat %%%%
data=load('FFT_3D_Input.dat');
xm2=reshape(data(:,1),number_samplingx,number_samplingy,number_samplingz);
ym2=reshape(data(:,2),number_samplingx,number_samplingy,number_samplingz);
zm2=reshape(data(:,3),number_samplingx,number_samplingy,number_samplingz);
y_signal2=data(:,4);
z_fft1=reshape(y_signal2,number_samplingx,number_samplingy,number_samplingz);
P = [2 1 3];
xm2= permute(xm2,P);
ym2= permute(ym2,P);
zm2= permute(zm2,P);
z_fft1= permute(z_fft1,P);
hFig = figure(2);
set(hFig, 'Position', [400 400 750 600]);
slice(xm2,ym2,zm2,z_fft1,[tperiod_signalx/2 tperiod_signalx-tperiod_signalx/number_samplingx],...
                         [tperiod_signaly/2  tperiod_signaly-tperiod_signaly/number_samplingy],...
                         [0 tperiod_signalz/2]);
shading faceted;
view([-42,22]);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
title('Slice of Input Signal From FFT3D Input.dat');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');

%%%% Plot OpenCL Forward FFT %%%%
data=load('FFT_3D_OpenCL_Forward.dat');
x=data(:,1);
y=data(:,2);
z=data(:,3);
z_fft=data(:,4);
z_fft_max=max(z_fft);
hFig = figure(3);
set(hFig, 'Position', [400 400 750 600]);
view([-42,22]);
scatter3(x,y,z,15,z_fft,'filled');
colormap(jet);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
x(z_fft<0.9*z_fft_max)=NaN;
y(z_fft<0.9*z_fft_max)=NaN;
z(z_fft<0.9*z_fft_max)=NaN;
z_fft(z_fft<0.9*z_fft_max)=NaN;
hold on;
scatter3(x,y,z,250,z_fft,'filled')
title('OpenCL Forward FFT');
xlabel('x frequency');
ylabel('y frequency');
zlabel('z frequency');

%%%% Plot OpenCL Forward + Backward FFT %%%%
data=load('FFT_3D_OpenCL_Backward.dat');
x21=(0:number_samplingx-1)*tperiod_signalx/number_samplingx;
x22=(0:number_samplingy-1)*tperiod_signaly/number_samplingy;
x23=(0:number_samplingz-1)*tperiod_signalz/number_samplingz;
[xm2 ym2 zm2]=meshgrid(x21,x22,x23);
y_signal2=data(:,4);
z_fft2=reshape(y_signal2,number_samplingx,number_samplingy,number_samplingz);
P = [2 1 3];
z_fft2= permute(z_fft2,P);
hFig = figure(4);
set(hFig, 'Position', [400 400 750 600]);
slice(xm2,ym2,zm2,z_fft2,[tperiod_signalx/2 tperiod_signalx-tperiod_signalx/number_samplingx],...
                         [tperiod_signaly/2 tperiod_signaly-tperiod_signaly/number_samplingy],...
                         [0 tperiod_signalz/2]);
shading faceted;
view([-42,22]);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
title('OpenCL Forward + Backward FFT');
xlabel('x axis');
ylabel('y axis');
zlabel('z axis');