DPG demo version from 2019-08-20
[dpg] / phzapply.m
1 function [a_out] = phzapply(a,y);
2 % [a_out] = phzapply(a,y);
3 %
4 % apply the EPI phase shift parameters calcuated by phzshift or
5 % comp_local_pc to the original k-space data
6 %
7
8 %
9 % Copyright 2004-2016  W. Scott Hoge  (wsh032580 at proton dot me)
10 %
11 % Licensed under the terms of the MIT License 
12 % (https://opensource.org/licenses/MIT)
13
14
15 [m n c]=size(a);
16
17 [pm pc ] = size(y);
18
19 A1 = a(1:2:end,:,1:c);
20 A1a = fftshift(ifft(fftshift(A1,[ 2]),[],2),[ 2]);
21
22 A2 = a(2:2:end,:,1:c);
23 A2a = fftshift(ifft(fftshift(A2,[ 2]),[],2),[ 2]);
24
25 A1b = zeros(size(A1a));
26 A2b = zeros(size(A2a));
27 for cnt=1:c,
28   A1b(:,:,cnt) = A1a(:,:,cnt) * diag( exp( +j*y(1,cnt)/2*((1:size(A2a,2))-size(A2a,2)/2)));
29   A2b(:,:,cnt) = A2a(:,:,cnt) * diag( exp( -j*y(1,cnt)/2*((1:size(A2a,2))-size(A2a,2)/2)));
30 end;
31
32 A1c = ifftshift(fft(ifftshift(A1b,[ 2]),[],2),[ 2]);
33 A2c = ifftshift(fft(ifftshift(A2b,[ 2]),[],2),[ 2]);
34
35 %% keyboard;
36
37 for cnt=1:c,
38   if ~isreal( y(2,cnt) ),
39     phz = angle(y(2,cnt));
40   else,
41     phz = y(2,cnt);
42   end;
43   A1c(:,:,cnt) = A1c(:,:,cnt) .* exp(-j*phz/2); % angle(y(2,cnt)));
44   A2c(:,:,cnt) = A2c(:,:,cnt) .* exp(j*phz/2); % angle(y(2,cnt)));
45 end;
46
47 a_out = zeros(size(a));
48 a_out(1:2:end,:,:) = A1c;
49 a_out(2:2:end,:,:) = A2c;
50