File data_analysis/@entanglement_evaluation/entanglement_evaluation.m changed (mode: 100644) (index e8733f3..306efba) |
... |
... |
classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_ |
63 |
63 |
pulse_gammas_no@double scalar |
pulse_gammas_no@double scalar |
64 |
64 |
pulse_duration_seconds@double scalar |
pulse_duration_seconds@double scalar |
65 |
65 |
pulse_timevector@double vector |
pulse_timevector@double vector |
|
66 |
|
% quad_order: for each mechanical frequency, index of quadratures p,q,x,y |
|
67 |
|
% hence: pulse_trace(quad_order(:)) yields the pulse trace "sorted by mechanical freq.s" |
|
68 |
|
% (i.e. s.th. q,p,x,y for each mode appear next to each other) |
|
69 |
|
quad_order@double matrix |
|
70 |
|
quad_labels@cell matrix |
|
71 |
|
|
66 |
72 |
|
|
67 |
73 |
samples_per_pulse % @double scalar |
samples_per_pulse % @double scalar |
68 |
74 |
|
|
|
... |
... |
classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_ |
115 |
121 |
error('Could not determine pulse_gamma_no'); |
error('Could not determine pulse_gamma_no'); |
116 |
122 |
end |
end |
117 |
123 |
end |
end |
|
124 |
|
function quad_order = get.quad_order(obj) |
|
125 |
|
mfn = obj.mech_frequencies_no; |
|
126 |
|
qs = 2*[1:mfn]-1; |
|
127 |
|
ps = 2*[1:mfn]; |
|
128 |
|
xs = qs + 2*mfn; |
|
129 |
|
ys = ps + 2*mfn; |
|
130 |
|
quad_order = [qs;ps;xs;ys]; |
|
131 |
|
end |
|
132 |
|
function quad_labels = get.quad_labels(obj) |
|
133 |
|
quad_prefixes = 'qpxy'; |
|
134 |
|
quad_labels = cell(4, obj.mech_frequencies_no); |
|
135 |
|
for m=1:obj.mech_frequencies_no |
|
136 |
|
for q=1:4 |
|
137 |
|
m_str = [', ',num2eng(roundsd(obj.mech_frequencies(m),3)), 'Hz']; |
|
138 |
|
quad_labels{q,m} = [quad_prefixes(q),m_str]; |
|
139 |
|
% LaTeX-version: |
|
140 |
|
% m_str = ['_{',num2eng(obj.mech_frequencies(m)), 'Hz}']; |
|
141 |
|
% quad_labels{q,m} = ['$$',quad_prefixes(q),m_str,'$$']; |
|
142 |
|
end |
|
143 |
|
end |
|
144 |
|
end |
118 |
145 |
function pulse_duration_seconds = get.pulse_duration_seconds(obj) |
function pulse_duration_seconds = get.pulse_duration_seconds(obj) |
119 |
146 |
pulse_duration_seconds = obj.samples_per_pulse/obj.samplingrate; |
pulse_duration_seconds = obj.samples_per_pulse/obj.samplingrate; |
120 |
147 |
end |
end |
File data_analysis/@entanglement_evaluation/plot_CM.m added (mode: 100644) (index 0000000..bfffd60) |
|
1 |
|
function plot_CM(ev, tracepair_ind, pulse_gamma_ind, varargin) |
|
2 |
|
mode_order = 1:ev.mech_frequencies_no; |
|
3 |
|
cm = ev.pulse_CM_calibrated{tracepair_ind}{pulse_gamma_ind}; |
|
4 |
|
save_fig = false; |
|
5 |
|
title_str = ''; |
|
6 |
|
|
|
7 |
|
remaining_args = {}; % feed all unused varargin-arguments to plot_matrix |
|
8 |
|
rem_args_count = 1; |
|
9 |
|
for k=1:2:length(varargin) |
|
10 |
|
switch lower(varargin{k}) |
|
11 |
|
case {'mode_order'} |
|
12 |
|
mode_order = varargin{k+1}; |
|
13 |
|
case {'save_fig'} |
|
14 |
|
save_fig = varargin{k+1}; |
|
15 |
|
case {'title'} |
|
16 |
|
title_str = varargin{k+1}; |
|
17 |
|
otherwise |
|
18 |
|
remaining_args{rem_args_count} = varargin{k}; |
|
19 |
|
remaining_args{rem_args_count+1} = varargin{k+1}; |
|
20 |
|
rem_args_count = rem_args_count + 2; |
|
21 |
|
end |
|
22 |
|
end |
|
23 |
|
quad_order = ev.quad_order(:,mode_order); |
|
24 |
|
quad_labels = ev.quad_labels(:,mode_order); |
|
25 |
|
cm = cm(quad_order, quad_order); |
|
26 |
|
|
|
27 |
|
plot_matrix(cm, 'labels', quad_labels, 'show_xlabels', false, 'show_numbers', false,... |
|
28 |
|
'colorbar', true, 'color_range', 'symmetric', remaining_args{:}); |
|
29 |
|
if save_fig |
|
30 |
|
save_fig_pdf(gcf, ev.evaluation_folder, ['cm_', num2str(tracepair_ind),'_', num2str(pulse_gamma_ind)]); |
|
31 |
|
end |
|
32 |
|
if ~isempty(title_str), title(title_str); end |
File data_analysis/unittests/entanglement_evaluation_test.m changed (mode: 100644) (index a9601ce..7d69cc0) |
... |
... |
function purity_test(shared) |
853 |
853 |
|
|
854 |
854 |
% - GOAL: plot purity of the different light modes as function of drive power for resonant and detuned case |
% - GOAL: plot purity of the different light modes as function of drive power for resonant and detuned case |
855 |
855 |
|
|
|
856 |
|
function quadorder_CM_test(shared) |
|
857 |
|
ev = load('.ev.mat'); ev = ev.ev; |
|
858 |
|
% ev.import_traces; |
|
859 |
|
test_CM = ev.pulse_CM_calibrated{2}{1}; |
|
860 |
|
|
|
861 |
|
% old order |
|
862 |
|
% ev.mech_frequencies: [920000 1.0446e+06 -920000 -1.0446e+06] |
|
863 |
|
lightmodes_order_old = [1,2,3,4]; |
|
864 |
|
quad_order_old = ev.quad_order(:,lightmodes_order_old); |
|
865 |
|
quad_labels_old = ev.quad_labels; |
|
866 |
|
assertEqual(quad_labels_old, ev.quad_labels(:,lightmodes_order_old)) |
|
867 |
|
assertEqual(quad_order_old(:), ev.quad_order(:)); |
|
868 |
|
|
|
869 |
|
|
|
870 |
|
% fig = figure; subplot(131); hold all |
|
871 |
|
% plot_matrix(test_CM(quad_order_old, quad_order_old),... |
|
872 |
|
% 'labels', quad_labels_old, 'xlabel_rotation', 0, 'show_xlabels', false,... |
|
873 |
|
% 'colorbar', true, 'show_numbers', false, 'format_fct', @(num)num2eng(roundsd(num,3))) |
|
874 |
|
|
|
875 |
|
% new order |
|
876 |
|
% ev.mech_frequencies: [920000 -920000 1.0446e+06 -1.0446e+06] |
|
877 |
|
% close all |
|
878 |
|
lightmodes_order_new = [1,3,2,4]; |
|
879 |
|
quad_order_new = ev.quad_order(:,lightmodes_order_new); |
|
880 |
|
quad_labels_new = ev.quad_labels(:,lightmodes_order_new); |
|
881 |
|
% subplot(132); hold all |
|
882 |
|
% plot_matrix(test_CM(quad_order_new, quad_order_new),... |
|
883 |
|
% 'labels', quad_labels_new, 'xlabel_rotation', 0, 'show_xlabels', false,... |
|
884 |
|
% 'colorbar', false, 'show_numbers', false, 'format_fct', @(num)num2eng(roundsd(num,3))) |
|
885 |
|
|
|
886 |
|
% % the following subplots should yield the same |
|
887 |
|
% figure; |
|
888 |
|
% subplot(211); ev.plot_CM(2,1, 'mode_order', lightmodes_order_new) |
|
889 |
|
% subplot(212); plot_matrix(test_CM(quad_order_new,quad_order_new), 'shownumbers', false,... |
|
890 |
|
% 'labels', quad_labels_new, 'show_xlabels', false, 'colorbar', true) |
|
891 |
|
% new order |
|
892 |
|
% ev.mech_frequencies: [920000 -920000 1.0446e+06 -1.0446e+06] |
|
893 |
|
% but now with readout modes next to each other and entangling modes next to each other |
|
894 |
|
newer_order = [1,2,5,6,3,4,7,8,9,10,13,14,11,12,15,16]; |
|
895 |
|
% quad_order = ev.quad_order; |
|
896 |
|
% qs = quad_order(1,:); |
|
897 |
|
% ps = quad_order(2,:); |
|
898 |
|
% xs = quad_order(3,:); |
|
899 |
|
% ys = quad_order(4,:); |
|
900 |
|
% modes_pm1 = [1,3]; |
|
901 |
|
% modes_pm2 = [2,4]; |
|
902 |
|
quad_order_newer = quad_order_new(newer_order); |
|
903 |
|
quad_labels_newer = quad_labels_new(newer_order); |
|
904 |
|
% subplot(133); hold all |
|
905 |
|
% plot_matrix(test_CM(quad_order_newer, quad_order_newer),... |
|
906 |
|
% 'labels', quad_labels_newer, 'xlabel_rotation', 0, 'show_xlabels', false,... |
|
907 |
|
% 'colorbar', false, 'show_numbers', false, 'format_fct', @(num)num2eng(roundsd(num,3))) |
|
908 |
|
|
|
909 |
|
% ev.pulse_CM_calibrated{2}{2}(quad_order_old(:)) |
|
910 |
|
|
856 |
911 |
%%% OTHER AUX FUNCTIONS %%% |
%%% OTHER AUX FUNCTIONS %%% |
857 |
912 |
function data = get_rand_nums_from_sample_cov(sample_no, sample_CM) |
function data = get_rand_nums_from_sample_cov(sample_no, sample_CM) |
858 |
913 |
dim = size(sample_CM,1); |
dim = size(sample_CM,1); |