Loading scsearch.m +179 −181 Original line number Diff line number Diff line Loading @@ -2,20 +2,23 @@ clear; close all; % Define variables, M is segm. number pathfi = './'; pathfi = '/data/Sorgenti/3FGLJ1544.6-1125/'; reset(gpuDevice(2)); gpuDevice(2); %%%%%%%%%%%%%%%% tic finame = 'SiFAP2_20220429_3FGLJ1544_N1_Bary_N3_NOTCORRECTED.fits'; % finame = 'J1023_B_2017_Bary.fits'; finame = 'EPN_0744840201_bary.fits'; % finame = 'EPN_0744840201_bary.fits'; t_raw = fitsread([pathfi,finame],"binarytable"); % t_raw = fitsread('C:\Users\Filippo\Desktop\EPN_0744840201_bary.fits','binarytable'); %t_raw = fitsread('C:\Users\Filippo\Desktop\J1544_2022\SiFAP2_20220429_3FGLJ1544_N1_Bary.fits','binarytable'); t_raw = t_raw{1}; t_raw=t_raw./86400+50814; MJDREF=fix(t_raw(1)); t_raw=(t_raw-MJDREF).*86400; t_raw=t_raw(t_raw>=t_raw(1) & t_raw<(t_raw(1)+ 6*256 + 1)); MJDREF=0.943055555602768; % t_raw=t_raw./86400+50814; % MJDREF=fix(t_raw(1)); % t_raw=(t_raw-MJDREF).*86400; % t_raw=t_raw(t_raw>=t_raw(1) & t_raw<(t_raw(1)+ 6*256 + 1)); % info = fitsinfo(finame).BinaryTable.Keywords; % for i = 1:length(info) Loading @@ -33,24 +36,29 @@ toc % f_tru = 592.42146827248556; %Hz % porb_tru = 17115.5216592; %s % a_tru = 0.343356; %lt-s %tasc_tru = 58107.009477; %MJD? % tasc_tru = (.009477-.2326620370367891)*86400; %MJD? % Parameters for EPN_0744840201_bary.fits f_tru = 598.8921309; %Hz porb_tru = 8844.08; %s a_tru = 0.0649905; %lt-s % tasc_tru = 57231.437581; %MJD? tasc_tru = (57231.437581-MJDREF)*86400; %in secondi % f_tru = 598.8921309; %Hz % porb_tru = 8844.08; %s % a_tru = 0.0649905; %lt-s % % tasc_tru = 57231.437581; %MJD? % tasc_tru = (57231.437581-MJDREF)*86400; %in secondi % f_gr = zeros(5,1); % porb_gr = zeros(5,1); % a_gr = zeros(5,1); % tasc_gr = zeros(5,1); f_gr=f_tru+(-2:2).'; porb_gr = [porb_tru-100.0,porb_tru-50.0,porb_tru,porb_tru+50.0,porb_tru+100.0].'; a_gr = [0.01, 0.03, a_tru, 0.12, 0.15].'; tasc_gr = tasc_tru+[-500.0,-250.0,0.0,250.0,500.0].'; Tseg=490; %segments' length in seconds %f_gr=f_tru+(-2:2).'; f_gr = (768:1/Tseg:780).'; %f_gr=(772:1/Tseg:774).'; % porb_gr = (18000:10:21600).'; porb_gr=((20868.72-3*0.31):0.1:(20868.72+3*0.31)); a_gr = (0.01:8.0e-4:0.26).'; tasc_gr = (((0.724:8e-4:0.922)-MJDREF).*86400).'; % for j = 1:5 % %f_gr(j) = f_tru*((j^2)/9); % porb_gr(j) = porb_tru*((j^2)/9); Loading Loading @@ -91,7 +99,7 @@ t=(t(1:end-1)+(t(2)-t(1))/2).'; % vettore tempi rebinnato, prendo il centro del toc tic Tseg=256; %segments' length in seconds M=fix((t(end)-t(1))/Tseg); %number of segments %con fix prendo la parte intera, scarto l'ultimo segmento che tanto non %sarà mai di lunghezza Tseg (molto improbabile) Loading Loading @@ -142,61 +150,27 @@ Omega_min = 2*pi/porb_max; % singah = zeros(4,1); nismin = zeros(4,1); nismax = zeros(4,1); % for s = 1:4 % singah(s) = max(sin(gam + s*pi/2),[],'all'); % singal(s) = min(sin(gam + s*pi/2),[],'all'); % end % % %% Tutto sto macello e poi ora mi viene da pensare che valori intermedi di % %% tasc possono portare a sin(gam) anche più alti o più bassi... % %% Guarda come ora avrei fatto molto prima a mettere semplicemente +1 e -1 % % Adding special case for s = 1 % s = 1; % if singal(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s) + f_min; % elseif singah(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_max*a_max*(Omega_max^s)*singal(s) + f_max; % else % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s) + f_min; % end % for s = 2:4 % % This range is computed by finding the maximum span of Equation (15) after varying the search % % parameters over their respective ranges (given in Table 2). This % % is done with the exception of ν which is held fixed at its % % maximum value within sub-bands over the frequency search space. % %% RECHECK EVERY COMBINATION % if singal(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s); % elseif singah(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_max*a_max*(Omega_max^s)*singal(s); % else % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s); % end % end % Find the range in ν^s (i.e. the maximum span of Eq. (15) covered by % combining the search parameters over their respective ranges) % Sin(gamma) going from -1 to 1 % Adding special case for s = 1 % s = 1; % if a_max*Omega_max>1 % nismin(s) = -f_max*a_max*(Omega_max) + f_max; % if a_min*Omega_min>1 % nismax(s) = -f_min*a_min*(Omega_min) + f_min; % else % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % else % nismin(s) = -f_min*a_max*(Omega_max) + f_min; % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % Is (1-Ome*a) more than fmin-fmax? to ask myself s = 1; if a_max*Omega_max>1 nismin(s) = -f_max*a_max*(Omega_max) + f_max; if a_min*Omega_min>1 nismax(s) = -f_min*a_min*(Omega_min) + f_min; else nismax(s) = -f_max*a_min*(Omega_min) + f_max; end else nismin(s) = -f_min*a_max*(Omega_max) + f_min; nismax(s) = -f_max*a_min*(Omega_min) + f_max; end % The other s's are easier nismin(s) = f_max*(1 - a_max*Omega_max); nismax(s) = f_max*(1 + a_max*Omega_max); for s = 2:4 nismin(s) = -f_max*a_max*(Omega_max^s); nismax(s) = f_max*a_max*(Omega_max^s); Loading @@ -217,7 +191,7 @@ tic % Try s* and check \nu_s range g_jj=(((pi*Tseg)^2)/3).*[1; (Tseg^2)/60; (Tseg^4)/1344; (Tseg^6)/172800]; %eq. 22 M2015 + calcoli da eq. 21 M2015 mu_s=0.005; %massimo mismatch sulla griglia coerente da scegliere mu_s=0.05; %massimo mismatch sulla griglia coerente da scegliere %s_s=uint8(4); s_s = 4; while(1) Loading Loading @@ -245,7 +219,7 @@ for s = 1:s_s Nni(s) = Nni(s)+1; end franco=nismin(s):((nismax(s)-nismin(s))/(Nni(s))):nismax(s); nis{s}=franco; nis{s}=franco/f_max; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading @@ -263,11 +237,17 @@ tic % Cercheremo un modo per combinare in tutti i possibili modi vettori di % vari ni1,ni2,...,nis_s %%%[kung,fu,fight] = ndgrid(nis{1},nino{2},nino{3}); % tm=gpuArray(tm); % nibank = gpuArray(combinations(nis{:}).Variables); % Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); nibank = combinations(nis{:}).Variables; Lambda = zeros(length(nibank),length(f_gr)); tm=gpuArray(tm); nibank = gpuArray(combinations(nis{:}).Variables); Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); F1=gpuArray((0:N-1)./(N*dt_psd)).'; f_ind = zeros(1,length(f_gr),'uint32'); for n = 1:length(f_gr) [bles,f_ind(n)] = min(abs(F1-f_gr(n))); end clear bles % nibank = combinations(nis{:}).Variables; % Lambda = zeros(length(nibank),length(f_gr)); toc %Fourier transform on original time-series -------------------------------- %per mantenere l'informazione di fase, non faccio il valore assoluto al quadrato della fft Loading Loading @@ -296,7 +276,9 @@ for m=1:M ttemp = tm(m,:); ttempdif = (ttemp(:)-tmid(m)).'; ttempdifl = (ttemp(:)-tmid(m)-0.5*dt).'; xtemp = x(:,m).'; xtemp = gpuArray(x(:,m).'); sumx = sum(xtemp); % toc Loading @@ -306,95 +288,45 @@ for m=1:M tic for i = 1:length(nibank) % Tento ricampionamento (Eq. 17 MP2015) % Ricampionamento (Eq. 17 MP2015) % Per prima cosa, generiamo la nuova coordinata temporale per % questa templ combini % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nizero = f_gr(n); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tau = zeros(N,1); % tic % for j = 1:N % % ta(j) = ; No Tau_zero: indifferente per il calcolo della FFT % for s = 1:s_s % tau(j) = tau(j) + (nibank(i,s)/(nizero*factorial(s)))*(tm(m,j)-tmid(m))^s; % end % end % tic tau = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); % taul(1:N) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:N)).^((1:s_s).').'),2); % taul(N+1) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttemp(N)-tmid(m)+0.5*dt).^((1:s_s).').')); % for j=1:N % dtau(j) = ((taul(j+1)-taul(j))); % end taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); tau = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); dtau = ((taul(2)-taul(1))); % toc % tic % X1 = interp1(ttemp(:),xtemp(:),tau,'linear',0); % toc %X1 è la timeseries ricampionata (controllare che sia un vettore colonna) %zero-padding (metto gli zeri alla fine) ------------------------------- % X1 = [X1;zeros(L-length(F),1)]; %concateno alla timeseries downsampled and resampled gli zeri %il secondo è un vettore colonna di zeri con lunghezza pari al numero di elementi che mi serve per tornare alla risoluzione originale %Fourier transform ----------------------------------------------------- %[Cm,edges]=(histcounts(X1,round((X1(end)-X1(1))/dt_psd))); %edges=edges(end)-edges(2); %mi dà il tempo preciso di tutta la TdF, che sarà leggermente diversa da length(C)*dt per come è definito histcounts % Y1=(2./sum(X1).*abs(fft(X1)).^2).'; %normalizzazione Leahy, giusto????? % tic % Y1 = fft(interp1(ttemp(:),xtemp(:),tau,'linear',0)).'; % Y1 = fft((interp1(tau(:),(xtemp(:)./dtau(:)),ttemp(:),'linear',0)).*dt).'; % inzo = (interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt; Y1 = fft((interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt).'; % clear X1 %F1=((0:length(Y1)-1)./(ttemp(end)-ttemp(1))).'; F1=((0:length(Y1)-1)./(length(Y1)*dt_psd)).'; % F1=F1(1:round(length(F1)/2)); % Y1=Y1(1:round(length(Y1)/2)); % toc % tic % if n ~= 1 && n ~= length(f_gr) % cond = F1>=0.5*(nizero+f_gr(n-1)) & F1<0.5*(nizero+f_gr(n+1)); % elseif n == 1 % cond = F1>=(nizero) & F1<0.5*(nizero+f_gr(n+1)); % else % cond = F1>=0.5*(nizero+f_gr(n-1)) & F1<=nizero; % end [nnfreq,nnind] = min(abs(F1-nizero)); % cond = F1>=F1(nnind-1) & F1<=F1(nnind+1); Y1=Y1(nnind); clear F1 %Calcolo della detection statistic % Lambda(i,n,m)=sum(abs(Y1).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) % [nnfreq,nnind] = min(abs(F1-curpar(1))); % Lambda(i,n,m) = 2*(abs(max(Y1)).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) Lambda(i,n) = 2*(abs(max(Y1)).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) Yenne=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Yenne)^2)/sumx; %CREDO (oppure prendono la potenza massima?) % toc end % disp('1ni') end toc disp(length(f_gr)*i); disp(m); lamfiname = sprintf('Lambda_seg_%d.mat', m); save(lamfiname,"Lambda"); % save(lamfiname,"Lambda"); save([pathfi,lamfiname],"Lambda","-v7.3"); Lambda = zeros(length(nibank),length(f_gr)); disp(m); end %% tic nisearcher = KDTreeSearcher(nibank,'BucketSize',100); % nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); % nisearcher = KDTreeSearcher(nibank,'BucketSize',100); nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); %% The line above will have to be substituted with something along the lines %% of the ones below to account for the metric g_jj in the phase derivatives % gdistance = @(a,b)sqrt(((a-b).^2)*(g_jj(1:s_s))); Loading @@ -408,46 +340,112 @@ toc totlam = zeros(length(parbank),length(f_gr)); tic for n=1:length(f_gr) % for n=1:length(f_gr) % for i=1:length(parbank) % curpar = [f_gr(n),parbank(i,:)]; % % Move from ν,P,a,T_asc to ν,Ω,a,γ % curpar(2) = 2*pi/curpar(2); % for m = 1:M % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % curni=zeros(1,s_s); % for s=1:s_s % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % end % curni = -curni.*curpar(3); % curni(1) = curni(1) + 1; % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % load(lamfiname); % load([pathfi,lamfiname]); % % [Idx,D] = knnsearch(nisearcher,curni); % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % clear Lambda % % end % % % if (totlam > bestpar(1)) % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % end % end % end bles = cospi(1/2); for m = 1:M tic lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); toc disp(m); tic for i=1:length(parbank) curpar = [f_gr(n),parbank(i,:)]; curpar = [bles,parbank(i,:)]; % Move from ν,P,a,T_asc to ν,Ω,a,γ curpar(2) = 2*pi/curpar(2); for m = 1:M curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); curni=zeros(1,s_s); for s=1:s_s curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); end curni = -curni.*curpar(1).*curpar(3); curni(1) = curni(1) + curpar(1); lamfiname = sprintf('Lambda_seg_%d.mat', m); load(lamfiname); curni = -curni.*curpar(3); curni(1) = curni(1) + 1; [Idx,D] = knnsearch(nisearcher,curni); totlam(i,n) = totlam(i,n)+Lambda(Idx,n); clear Lambda totlam(i,:) = totlam(i,:)+Lambda(Idx,:); end % % if (totlam > bestpar(1)) % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % end end toc disp(m); clear Lambda end % % for n=1:length(f_gr) % % for i=1:length(parbank) % % curpar = [f_gr(n),parbank(i,:)]; % % % Move from ν,P,a,T_asc to ν,Ω,a,γ % % curpar(2) = 2*pi/curpar(2); % % for m = 1:M % % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % % curni=zeros(1,s_s); % % for s=1:s_s % % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % % end % % curni = -curni.*curpar(1).*curpar(3); % % curni(1) = curni(1) + curpar(1); % % % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % % load(lamfiname); % % load([pathfi,lamfiname]); % % % % [Idx,D] = knnsearch(nisearcher,curni); % % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % % % clear Lambda % % % % end % % % % if (totlam > bestpar(1)) % % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % % end % % end % % end toc %% % disp(bestpar); % save('C:\Users\Filippo\Desktop\XMM_Jxxx\risultelli.mat'); save('risultelli.mat'); save([pathfi,'risultelli_07_03_',num2str(Tseg),'s.mat'],"-v7.3"); %% for n = 1:length(f_gr) hold on txt = ['f_{gr} = ',num2str(f_gr(n))]; plot(totlam(:,n),'DisplayName',txt) end legend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% Fai il grafico delle totlam a posteriori %%%%%%%%%%%%%%%% % for n = 1:length(f_gr) % hold on % txt = ['f_{gr} = ',num2str(f_gr(n))]; % plot(totlam(:,n),'DisplayName',txt) % end % legend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading test_efficiency.m +111 −57 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ nismax = zeros(4,1); % combining the search parameters over their respective ranges) % Sin(gamma) going from -1 to 1 % Adding special case for s = 1 s = 1; % s = 1; % if a_max*Omega_max>1 % nismin(s) = -f_max*a_max*(Omega_max) + f_max; % if a_min*Omega_min>1 Loading @@ -168,8 +168,9 @@ s = 1; % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % Is (1-Ome*a) more than fmin-fmax? to ask myself nismin(s) = -f_min*a_max*(Omega_max) + f_min; nismax(s) = -f_max*a_min*(Omega_min) + f_max; s = 1; nismin(s) = f_max*(1 - a_max*Omega_max); nismax(s) = f_max*(1 + a_max*Omega_max); for s = 2:4 nismin(s) = -f_max*a_max*(Omega_max^s); nismax(s) = f_max*a_max*(Omega_max^s); Loading Loading @@ -218,7 +219,7 @@ for s = 1:s_s Nni(s) = Nni(s)+1; end franco=nismin(s):((nismax(s)-nismin(s))/(Nni(s))):nismax(s); nis{s}=franco; nis{s}=franco/f_max; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading @@ -242,9 +243,9 @@ Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); F1=gpuArray((0:N-1)./(N*dt_psd)).'; f_ind = zeros(1,length(f_gr),'uint32'); for n = 1:length(f_gr) [ble,f_ind(n)] = min(abs(F1-f_gr(n))); [bles,f_ind(n)] = min(abs(F1-f_gr(n))); end clear ble clear bles % nibank = combinations(nis{:}).Variables; % Lambda = zeros(length(nibank),length(f_gr)); toc Loading Loading @@ -285,39 +286,27 @@ for m=1:M % Dev'essere fatto per ciascun template, ergo mettiamo un bel ciclo % sulle possibili combinazioni di ni_s tic % for i = 1:length(nibank) for i = 1:1 for i = 1:length(nibank) % for i = 1:1 % Tento ricampionamento (Eq. 17 MP2015) % Ricampionamento (Eq. 17 MP2015) % Per prima cosa, generiamo la nuova coordinata temporale per % questa templ combini % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nizero = f_gr(n); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tau = zeros(N,1); % tic % for j = 1:N % % ta(j) = ; No Tau_zero: indifferente per il calcolo della FFT % for s = 1:s_s % tau(j) = tau(j) + (nibank(i,s)/(nizero*factorial(s)))*(tm(m,j)-tmid(m))^s; % end % end % tic tau = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); tau = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); dtau = ((taul(2)-taul(1))); % inzo = (interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt; Y1 = fft((interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt).'; Y1=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Y1)^2)/sumx; %CREDO (oppure prendono la potenza massima?) % toc % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) Yenne=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Yenne)^2)/sumx; %CREDO (oppure prendono la potenza massima?) end % disp('1ni') end Loading @@ -332,6 +321,10 @@ for m=1:M end %% tic % nisearcher = KDTreeSearcher(nibank,'BucketSize',100); nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); Loading @@ -348,40 +341,101 @@ toc totlam = zeros(length(parbank),length(f_gr)); tic for n=1:length(f_gr) % for n=1:length(f_gr) % for i=1:length(parbank) % curpar = [f_gr(n),parbank(i,:)]; % % Move from ν,P,a,T_asc to ν,Ω,a,γ % curpar(2) = 2*pi/curpar(2); % for m = 1:M % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % curni=zeros(1,s_s); % for s=1:s_s % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % end % curni = -curni.*curpar(3); % curni(1) = curni(1) + 1; % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % load(lamfiname); % load([pathfi,lamfiname]); % % [Idx,D] = knnsearch(nisearcher,curni); % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % clear Lambda % % end % % % if (totlam > bestpar(1)) % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % end % end % end bles = cospi(1/2); for m = 1:M tic lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); toc disp(m); tic for i=1:length(parbank) curpar = [f_gr(n),parbank(i,:)]; curpar = [bles,parbank(i,:)]; % Move from ν,P,a,T_asc to ν,Ω,a,γ curpar(2) = 2*pi/curpar(2); for m = 1:M curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); curni=zeros(1,s_s); for s=1:s_s curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); end curni = -curni.*curpar(1).*curpar(3); curni(1) = curni(1) + curpar(1); lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); curni = -curni.*curpar(3); curni(1) = curni(1) + 1; [Idx,D] = knnsearch(nisearcher,curni); totlam(i,n) = totlam(i,n)+Lambda(Idx,n); clear Lambda totlam(i,:) = totlam(i,:)+Lambda(Idx,:); end % % if (totlam > bestpar(1)) % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % end end toc disp(m); clear Lambda end % % for n=1:length(f_gr) % % for i=1:length(parbank) % % curpar = [f_gr(n),parbank(i,:)]; % % % Move from ν,P,a,T_asc to ν,Ω,a,γ % % curpar(2) = 2*pi/curpar(2); % % for m = 1:M % % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % % curni=zeros(1,s_s); % % for s=1:s_s % % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % % end % % curni = -curni.*curpar(1).*curpar(3); % % curni(1) = curni(1) + curpar(1); % % % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % % load(lamfiname); % % load([pathfi,lamfiname]); % % % % [Idx,D] = knnsearch(nisearcher,curni); % % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % % % clear Lambda % % % % end % % % % if (totlam > bestpar(1)) % % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % % end % % end % % end toc %% % disp(bestpar); % save('C:\Users\Filippo\Desktop\XMM_Jxxx\risultelli.mat'); save([pathfi,'risultelli_',num2str(Tseg),'s.mat'],"-v7.3"); save([pathfi,'risultelli_07_03_',num2str(Tseg),'s.mat'],"-v7.3"); %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading Loading
scsearch.m +179 −181 Original line number Diff line number Diff line Loading @@ -2,20 +2,23 @@ clear; close all; % Define variables, M is segm. number pathfi = './'; pathfi = '/data/Sorgenti/3FGLJ1544.6-1125/'; reset(gpuDevice(2)); gpuDevice(2); %%%%%%%%%%%%%%%% tic finame = 'SiFAP2_20220429_3FGLJ1544_N1_Bary_N3_NOTCORRECTED.fits'; % finame = 'J1023_B_2017_Bary.fits'; finame = 'EPN_0744840201_bary.fits'; % finame = 'EPN_0744840201_bary.fits'; t_raw = fitsread([pathfi,finame],"binarytable"); % t_raw = fitsread('C:\Users\Filippo\Desktop\EPN_0744840201_bary.fits','binarytable'); %t_raw = fitsread('C:\Users\Filippo\Desktop\J1544_2022\SiFAP2_20220429_3FGLJ1544_N1_Bary.fits','binarytable'); t_raw = t_raw{1}; t_raw=t_raw./86400+50814; MJDREF=fix(t_raw(1)); t_raw=(t_raw-MJDREF).*86400; t_raw=t_raw(t_raw>=t_raw(1) & t_raw<(t_raw(1)+ 6*256 + 1)); MJDREF=0.943055555602768; % t_raw=t_raw./86400+50814; % MJDREF=fix(t_raw(1)); % t_raw=(t_raw-MJDREF).*86400; % t_raw=t_raw(t_raw>=t_raw(1) & t_raw<(t_raw(1)+ 6*256 + 1)); % info = fitsinfo(finame).BinaryTable.Keywords; % for i = 1:length(info) Loading @@ -33,24 +36,29 @@ toc % f_tru = 592.42146827248556; %Hz % porb_tru = 17115.5216592; %s % a_tru = 0.343356; %lt-s %tasc_tru = 58107.009477; %MJD? % tasc_tru = (.009477-.2326620370367891)*86400; %MJD? % Parameters for EPN_0744840201_bary.fits f_tru = 598.8921309; %Hz porb_tru = 8844.08; %s a_tru = 0.0649905; %lt-s % tasc_tru = 57231.437581; %MJD? tasc_tru = (57231.437581-MJDREF)*86400; %in secondi % f_tru = 598.8921309; %Hz % porb_tru = 8844.08; %s % a_tru = 0.0649905; %lt-s % % tasc_tru = 57231.437581; %MJD? % tasc_tru = (57231.437581-MJDREF)*86400; %in secondi % f_gr = zeros(5,1); % porb_gr = zeros(5,1); % a_gr = zeros(5,1); % tasc_gr = zeros(5,1); f_gr=f_tru+(-2:2).'; porb_gr = [porb_tru-100.0,porb_tru-50.0,porb_tru,porb_tru+50.0,porb_tru+100.0].'; a_gr = [0.01, 0.03, a_tru, 0.12, 0.15].'; tasc_gr = tasc_tru+[-500.0,-250.0,0.0,250.0,500.0].'; Tseg=490; %segments' length in seconds %f_gr=f_tru+(-2:2).'; f_gr = (768:1/Tseg:780).'; %f_gr=(772:1/Tseg:774).'; % porb_gr = (18000:10:21600).'; porb_gr=((20868.72-3*0.31):0.1:(20868.72+3*0.31)); a_gr = (0.01:8.0e-4:0.26).'; tasc_gr = (((0.724:8e-4:0.922)-MJDREF).*86400).'; % for j = 1:5 % %f_gr(j) = f_tru*((j^2)/9); % porb_gr(j) = porb_tru*((j^2)/9); Loading Loading @@ -91,7 +99,7 @@ t=(t(1:end-1)+(t(2)-t(1))/2).'; % vettore tempi rebinnato, prendo il centro del toc tic Tseg=256; %segments' length in seconds M=fix((t(end)-t(1))/Tseg); %number of segments %con fix prendo la parte intera, scarto l'ultimo segmento che tanto non %sarà mai di lunghezza Tseg (molto improbabile) Loading Loading @@ -142,61 +150,27 @@ Omega_min = 2*pi/porb_max; % singah = zeros(4,1); nismin = zeros(4,1); nismax = zeros(4,1); % for s = 1:4 % singah(s) = max(sin(gam + s*pi/2),[],'all'); % singal(s) = min(sin(gam + s*pi/2),[],'all'); % end % % %% Tutto sto macello e poi ora mi viene da pensare che valori intermedi di % %% tasc possono portare a sin(gam) anche più alti o più bassi... % %% Guarda come ora avrei fatto molto prima a mettere semplicemente +1 e -1 % % Adding special case for s = 1 % s = 1; % if singal(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s) + f_min; % elseif singah(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_max*a_max*(Omega_max^s)*singal(s) + f_max; % else % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s) + f_max; % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s) + f_min; % end % for s = 2:4 % % This range is computed by finding the maximum span of Equation (15) after varying the search % % parameters over their respective ranges (given in Table 2). This % % is done with the exception of ν which is held fixed at its % % maximum value within sub-bands over the frequency search space. % %% RECHECK EVERY COMBINATION % if singal(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s); % elseif singah(s)>0 % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_max*a_max*(Omega_max^s)*singal(s); % else % nismin(s) = -f_max*a_max*(Omega_max^s)*singah(s); % nismax(s) = -f_min*a_min*(Omega_min^s)*singal(s); % end % end % Find the range in ν^s (i.e. the maximum span of Eq. (15) covered by % combining the search parameters over their respective ranges) % Sin(gamma) going from -1 to 1 % Adding special case for s = 1 % s = 1; % if a_max*Omega_max>1 % nismin(s) = -f_max*a_max*(Omega_max) + f_max; % if a_min*Omega_min>1 % nismax(s) = -f_min*a_min*(Omega_min) + f_min; % else % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % else % nismin(s) = -f_min*a_max*(Omega_max) + f_min; % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % Is (1-Ome*a) more than fmin-fmax? to ask myself s = 1; if a_max*Omega_max>1 nismin(s) = -f_max*a_max*(Omega_max) + f_max; if a_min*Omega_min>1 nismax(s) = -f_min*a_min*(Omega_min) + f_min; else nismax(s) = -f_max*a_min*(Omega_min) + f_max; end else nismin(s) = -f_min*a_max*(Omega_max) + f_min; nismax(s) = -f_max*a_min*(Omega_min) + f_max; end % The other s's are easier nismin(s) = f_max*(1 - a_max*Omega_max); nismax(s) = f_max*(1 + a_max*Omega_max); for s = 2:4 nismin(s) = -f_max*a_max*(Omega_max^s); nismax(s) = f_max*a_max*(Omega_max^s); Loading @@ -217,7 +191,7 @@ tic % Try s* and check \nu_s range g_jj=(((pi*Tseg)^2)/3).*[1; (Tseg^2)/60; (Tseg^4)/1344; (Tseg^6)/172800]; %eq. 22 M2015 + calcoli da eq. 21 M2015 mu_s=0.005; %massimo mismatch sulla griglia coerente da scegliere mu_s=0.05; %massimo mismatch sulla griglia coerente da scegliere %s_s=uint8(4); s_s = 4; while(1) Loading Loading @@ -245,7 +219,7 @@ for s = 1:s_s Nni(s) = Nni(s)+1; end franco=nismin(s):((nismax(s)-nismin(s))/(Nni(s))):nismax(s); nis{s}=franco; nis{s}=franco/f_max; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading @@ -263,11 +237,17 @@ tic % Cercheremo un modo per combinare in tutti i possibili modi vettori di % vari ni1,ni2,...,nis_s %%%[kung,fu,fight] = ndgrid(nis{1},nino{2},nino{3}); % tm=gpuArray(tm); % nibank = gpuArray(combinations(nis{:}).Variables); % Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); nibank = combinations(nis{:}).Variables; Lambda = zeros(length(nibank),length(f_gr)); tm=gpuArray(tm); nibank = gpuArray(combinations(nis{:}).Variables); Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); F1=gpuArray((0:N-1)./(N*dt_psd)).'; f_ind = zeros(1,length(f_gr),'uint32'); for n = 1:length(f_gr) [bles,f_ind(n)] = min(abs(F1-f_gr(n))); end clear bles % nibank = combinations(nis{:}).Variables; % Lambda = zeros(length(nibank),length(f_gr)); toc %Fourier transform on original time-series -------------------------------- %per mantenere l'informazione di fase, non faccio il valore assoluto al quadrato della fft Loading Loading @@ -296,7 +276,9 @@ for m=1:M ttemp = tm(m,:); ttempdif = (ttemp(:)-tmid(m)).'; ttempdifl = (ttemp(:)-tmid(m)-0.5*dt).'; xtemp = x(:,m).'; xtemp = gpuArray(x(:,m).'); sumx = sum(xtemp); % toc Loading @@ -306,95 +288,45 @@ for m=1:M tic for i = 1:length(nibank) % Tento ricampionamento (Eq. 17 MP2015) % Ricampionamento (Eq. 17 MP2015) % Per prima cosa, generiamo la nuova coordinata temporale per % questa templ combini % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nizero = f_gr(n); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tau = zeros(N,1); % tic % for j = 1:N % % ta(j) = ; No Tau_zero: indifferente per il calcolo della FFT % for s = 1:s_s % tau(j) = tau(j) + (nibank(i,s)/(nizero*factorial(s)))*(tm(m,j)-tmid(m))^s; % end % end % tic tau = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); % taul(1:N) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:N)).^((1:s_s).').'),2); % taul(N+1) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttemp(N)-tmid(m)+0.5*dt).^((1:s_s).').')); % for j=1:N % dtau(j) = ((taul(j+1)-taul(j))); % end taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); tau = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); dtau = ((taul(2)-taul(1))); % toc % tic % X1 = interp1(ttemp(:),xtemp(:),tau,'linear',0); % toc %X1 è la timeseries ricampionata (controllare che sia un vettore colonna) %zero-padding (metto gli zeri alla fine) ------------------------------- % X1 = [X1;zeros(L-length(F),1)]; %concateno alla timeseries downsampled and resampled gli zeri %il secondo è un vettore colonna di zeri con lunghezza pari al numero di elementi che mi serve per tornare alla risoluzione originale %Fourier transform ----------------------------------------------------- %[Cm,edges]=(histcounts(X1,round((X1(end)-X1(1))/dt_psd))); %edges=edges(end)-edges(2); %mi dà il tempo preciso di tutta la TdF, che sarà leggermente diversa da length(C)*dt per come è definito histcounts % Y1=(2./sum(X1).*abs(fft(X1)).^2).'; %normalizzazione Leahy, giusto????? % tic % Y1 = fft(interp1(ttemp(:),xtemp(:),tau,'linear',0)).'; % Y1 = fft((interp1(tau(:),(xtemp(:)./dtau(:)),ttemp(:),'linear',0)).*dt).'; % inzo = (interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt; Y1 = fft((interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt).'; % clear X1 %F1=((0:length(Y1)-1)./(ttemp(end)-ttemp(1))).'; F1=((0:length(Y1)-1)./(length(Y1)*dt_psd)).'; % F1=F1(1:round(length(F1)/2)); % Y1=Y1(1:round(length(Y1)/2)); % toc % tic % if n ~= 1 && n ~= length(f_gr) % cond = F1>=0.5*(nizero+f_gr(n-1)) & F1<0.5*(nizero+f_gr(n+1)); % elseif n == 1 % cond = F1>=(nizero) & F1<0.5*(nizero+f_gr(n+1)); % else % cond = F1>=0.5*(nizero+f_gr(n-1)) & F1<=nizero; % end [nnfreq,nnind] = min(abs(F1-nizero)); % cond = F1>=F1(nnind-1) & F1<=F1(nnind+1); Y1=Y1(nnind); clear F1 %Calcolo della detection statistic % Lambda(i,n,m)=sum(abs(Y1).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) % [nnfreq,nnind] = min(abs(F1-curpar(1))); % Lambda(i,n,m) = 2*(abs(max(Y1)).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) Lambda(i,n) = 2*(abs(max(Y1)).^2)/sum(xtemp(:)); %CREDO (oppure prendono la potenza massima?) % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) Yenne=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Yenne)^2)/sumx; %CREDO (oppure prendono la potenza massima?) % toc end % disp('1ni') end toc disp(length(f_gr)*i); disp(m); lamfiname = sprintf('Lambda_seg_%d.mat', m); save(lamfiname,"Lambda"); % save(lamfiname,"Lambda"); save([pathfi,lamfiname],"Lambda","-v7.3"); Lambda = zeros(length(nibank),length(f_gr)); disp(m); end %% tic nisearcher = KDTreeSearcher(nibank,'BucketSize',100); % nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); % nisearcher = KDTreeSearcher(nibank,'BucketSize',100); nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); %% The line above will have to be substituted with something along the lines %% of the ones below to account for the metric g_jj in the phase derivatives % gdistance = @(a,b)sqrt(((a-b).^2)*(g_jj(1:s_s))); Loading @@ -408,46 +340,112 @@ toc totlam = zeros(length(parbank),length(f_gr)); tic for n=1:length(f_gr) % for n=1:length(f_gr) % for i=1:length(parbank) % curpar = [f_gr(n),parbank(i,:)]; % % Move from ν,P,a,T_asc to ν,Ω,a,γ % curpar(2) = 2*pi/curpar(2); % for m = 1:M % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % curni=zeros(1,s_s); % for s=1:s_s % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % end % curni = -curni.*curpar(3); % curni(1) = curni(1) + 1; % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % load(lamfiname); % load([pathfi,lamfiname]); % % [Idx,D] = knnsearch(nisearcher,curni); % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % clear Lambda % % end % % % if (totlam > bestpar(1)) % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % end % end % end bles = cospi(1/2); for m = 1:M tic lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); toc disp(m); tic for i=1:length(parbank) curpar = [f_gr(n),parbank(i,:)]; curpar = [bles,parbank(i,:)]; % Move from ν,P,a,T_asc to ν,Ω,a,γ curpar(2) = 2*pi/curpar(2); for m = 1:M curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); curni=zeros(1,s_s); for s=1:s_s curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); end curni = -curni.*curpar(1).*curpar(3); curni(1) = curni(1) + curpar(1); lamfiname = sprintf('Lambda_seg_%d.mat', m); load(lamfiname); curni = -curni.*curpar(3); curni(1) = curni(1) + 1; [Idx,D] = knnsearch(nisearcher,curni); totlam(i,n) = totlam(i,n)+Lambda(Idx,n); clear Lambda totlam(i,:) = totlam(i,:)+Lambda(Idx,:); end % % if (totlam > bestpar(1)) % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % end end toc disp(m); clear Lambda end % % for n=1:length(f_gr) % % for i=1:length(parbank) % % curpar = [f_gr(n),parbank(i,:)]; % % % Move from ν,P,a,T_asc to ν,Ω,a,γ % % curpar(2) = 2*pi/curpar(2); % % for m = 1:M % % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % % curni=zeros(1,s_s); % % for s=1:s_s % % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % % end % % curni = -curni.*curpar(1).*curpar(3); % % curni(1) = curni(1) + curpar(1); % % % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % % load(lamfiname); % % load([pathfi,lamfiname]); % % % % [Idx,D] = knnsearch(nisearcher,curni); % % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % % % clear Lambda % % % % end % % % % if (totlam > bestpar(1)) % % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % % end % % end % % end toc %% % disp(bestpar); % save('C:\Users\Filippo\Desktop\XMM_Jxxx\risultelli.mat'); save('risultelli.mat'); save([pathfi,'risultelli_07_03_',num2str(Tseg),'s.mat'],"-v7.3"); %% for n = 1:length(f_gr) hold on txt = ['f_{gr} = ',num2str(f_gr(n))]; plot(totlam(:,n),'DisplayName',txt) end legend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% Fai il grafico delle totlam a posteriori %%%%%%%%%%%%%%%% % for n = 1:length(f_gr) % hold on % txt = ['f_{gr} = ',num2str(f_gr(n))]; % plot(totlam(:,n),'DisplayName',txt) % end % legend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading
test_efficiency.m +111 −57 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ nismax = zeros(4,1); % combining the search parameters over their respective ranges) % Sin(gamma) going from -1 to 1 % Adding special case for s = 1 s = 1; % s = 1; % if a_max*Omega_max>1 % nismin(s) = -f_max*a_max*(Omega_max) + f_max; % if a_min*Omega_min>1 Loading @@ -168,8 +168,9 @@ s = 1; % nismax(s) = -f_max*a_min*(Omega_min) + f_max; % end % Is (1-Ome*a) more than fmin-fmax? to ask myself nismin(s) = -f_min*a_max*(Omega_max) + f_min; nismax(s) = -f_max*a_min*(Omega_min) + f_max; s = 1; nismin(s) = f_max*(1 - a_max*Omega_max); nismax(s) = f_max*(1 + a_max*Omega_max); for s = 2:4 nismin(s) = -f_max*a_max*(Omega_max^s); nismax(s) = f_max*a_max*(Omega_max^s); Loading Loading @@ -218,7 +219,7 @@ for s = 1:s_s Nni(s) = Nni(s)+1; end franco=nismin(s):((nismax(s)-nismin(s))/(Nni(s))):nismax(s); nis{s}=franco; nis{s}=franco/f_max; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading @@ -242,9 +243,9 @@ Lambda = zeros(length(nibank),length(f_gr),'gpuArray'); F1=gpuArray((0:N-1)./(N*dt_psd)).'; f_ind = zeros(1,length(f_gr),'uint32'); for n = 1:length(f_gr) [ble,f_ind(n)] = min(abs(F1-f_gr(n))); [bles,f_ind(n)] = min(abs(F1-f_gr(n))); end clear ble clear bles % nibank = combinations(nis{:}).Variables; % Lambda = zeros(length(nibank),length(f_gr)); toc Loading Loading @@ -285,39 +286,27 @@ for m=1:M % Dev'essere fatto per ciascun template, ergo mettiamo un bel ciclo % sulle possibili combinazioni di ni_s tic % for i = 1:length(nibank) for i = 1:1 for i = 1:length(nibank) % for i = 1:1 % Tento ricampionamento (Eq. 17 MP2015) % Ricampionamento (Eq. 17 MP2015) % Per prima cosa, generiamo la nuova coordinata temporale per % questa templ combini % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nizero = f_gr(n); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tau = zeros(N,1); % tic % for j = 1:N % % ta(j) = ; No Tau_zero: indifferente per il calcolo della FFT % for s = 1:s_s % tau(j) = tau(j) + (nibank(i,s)/(nizero*factorial(s)))*(tm(m,j)-tmid(m))^s; % end % end % tic tau = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(nizero*factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); tau = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdif(1:N)).^((1:s_s).').'),2); taul(1:2) = tmid(m) + sum((nibank(i,1:s_s)./(factorial(1:s_s))).*((ttempdifl(1:2)).^((1:s_s).').'),2); dtau = ((taul(2)-taul(1))); % inzo = (interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt; Y1 = fft((interp1(tau(:),(xtemp(:)./dtau),ttemp(:),'linear',0)).*dt).'; Y1=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Y1)^2)/sumx; %CREDO (oppure prendono la potenza massima?) % toc % Careful! ni_0 still needs to be defined (it's the spin freq. % currently being considered) for n = 1:length(f_gr) Yenne=Y1(f_ind(n)); Lambda(i,n) = 2*(abs(Yenne)^2)/sumx; %CREDO (oppure prendono la potenza massima?) end % disp('1ni') end Loading @@ -332,6 +321,10 @@ for m=1:M end %% tic % nisearcher = KDTreeSearcher(nibank,'BucketSize',100); nisearcher = KDTreeSearcher(gather(nibank),'BucketSize',100); Loading @@ -348,40 +341,101 @@ toc totlam = zeros(length(parbank),length(f_gr)); tic for n=1:length(f_gr) % for n=1:length(f_gr) % for i=1:length(parbank) % curpar = [f_gr(n),parbank(i,:)]; % % Move from ν,P,a,T_asc to ν,Ω,a,γ % curpar(2) = 2*pi/curpar(2); % for m = 1:M % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % curni=zeros(1,s_s); % for s=1:s_s % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % end % curni = -curni.*curpar(3); % curni(1) = curni(1) + 1; % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % load(lamfiname); % load([pathfi,lamfiname]); % % [Idx,D] = knnsearch(nisearcher,curni); % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % clear Lambda % % end % % % if (totlam > bestpar(1)) % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % end % end % end bles = cospi(1/2); for m = 1:M tic lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); toc disp(m); tic for i=1:length(parbank) curpar = [f_gr(n),parbank(i,:)]; curpar = [bles,parbank(i,:)]; % Move from ν,P,a,T_asc to ν,Ω,a,γ curpar(2) = 2*pi/curpar(2); for m = 1:M curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); curni=zeros(1,s_s); for s=1:s_s curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); end curni = -curni.*curpar(1).*curpar(3); curni(1) = curni(1) + curpar(1); lamfiname = sprintf('Lambda_seg_%d.mat', m); % load(lamfiname); load([pathfi,lamfiname]); curni = -curni.*curpar(3); curni(1) = curni(1) + 1; [Idx,D] = knnsearch(nisearcher,curni); totlam(i,n) = totlam(i,n)+Lambda(Idx,n); clear Lambda totlam(i,:) = totlam(i,:)+Lambda(Idx,:); end % % if (totlam > bestpar(1)) % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % end end toc disp(m); clear Lambda end % % for n=1:length(f_gr) % % for i=1:length(parbank) % % curpar = [f_gr(n),parbank(i,:)]; % % % Move from ν,P,a,T_asc to ν,Ω,a,γ % % curpar(2) = 2*pi/curpar(2); % % for m = 1:M % % curpar(4) = curpar(2)*(tmid(m) - parbank(i,3)); % % curni=zeros(1,s_s); % % for s=1:s_s % % curni(s) = (curpar(2)^s)*sin(curpar(4)+0.5*s*pi); % % end % % curni = -curni.*curpar(1).*curpar(3); % % curni(1) = curni(1) + curpar(1); % % % % lamfiname = sprintf('Lambda_seg_%d.mat', m); % % % load(lamfiname); % % load([pathfi,lamfiname]); % % % % [Idx,D] = knnsearch(nisearcher,curni); % % totlam(i,n) = totlam(i,n)+Lambda(Idx,n); % % % % clear Lambda % % % % end % % % % if (totlam > bestpar(1)) % % % % bestpar = [totlam,f_gr(n),parbank(i,:)]; % % % % end % % end % % end toc %% % disp(bestpar); % save('C:\Users\Filippo\Desktop\XMM_Jxxx\risultelli.mat'); save([pathfi,'risultelli_',num2str(Tseg),'s.mat'],"-v7.3"); save([pathfi,'risultelli_07_03_',num2str(Tseg),'s.mat'],"-v7.3"); %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Loading