File data_analysis/@entanglement_evaluation/calculatePulsedQuadratures.m changed (mode: 100644) (index 04c6134..c7d12dc) |
1 |
|
function obj = calculatePulsedQuadratures(obj, tracepair_ind) |
|
|
1 |
|
function obj = calculatePulsedQuadratures(obj, tracepair_ind, varargin) |
2 |
2 |
assert(~isempty(obj.entangling_modes) && ~isempty(obj.readout_modes),... |
assert(~isempty(obj.entangling_modes) && ~isempty(obj.readout_modes),... |
3 |
3 |
'No mode vectors found. Have you invoked calculateModeVectors?') |
'No mode vectors found. Have you invoked calculateModeVectors?') |
4 |
4 |
pulsepairs_no = obj.pulse_pairs_per_trace; |
pulsepairs_no = obj.pulse_pairs_per_trace; |
|
5 |
|
for k=1:2:length(varargin) |
|
6 |
|
switch varargin{k} |
|
7 |
|
case 'pulsepairs' |
|
8 |
|
assert(varargin{k+1}<=pulsepairs_no,... |
|
9 |
|
['no of pulsepairs can be at most ', num2str(pulsepairs_no)]); |
|
10 |
|
pulsepairs_no = varargin{k+1}; |
|
11 |
|
otherwise |
|
12 |
|
error(['unrecognized varargin-argument ', varargin{k},'.']); |
|
13 |
|
end |
|
14 |
|
end |
|
15 |
|
|
5 |
16 |
modes_no = obj.mech_frequencies_no*obj.pulse_gammas_no; |
modes_no = obj.mech_frequencies_no*obj.pulse_gammas_no; |
6 |
|
|
|
|
17 |
|
|
7 |
18 |
Q = zeros(pulsepairs_no, modes_no); |
Q = zeros(pulsepairs_no, modes_no); |
8 |
19 |
P = zeros(pulsepairs_no, modes_no); |
P = zeros(pulsepairs_no, modes_no); |
9 |
20 |
X = zeros(pulsepairs_no, modes_no); |
X = zeros(pulsepairs_no, modes_no); |
|
... |
... |
function obj = calculatePulsedQuadratures(obj, tracepair_ind) |
16 |
27 |
phase_tr.fopen; |
phase_tr.fopen; |
17 |
28 |
disp(['calculating pulsed quadratures for ',... |
disp(['calculating pulsed quadratures for ',... |
18 |
29 |
ampli_tr.dataset_label,' and ',phase_tr.dataset_label,'.']); |
ampli_tr.dataset_label,' and ',phase_tr.dataset_label,'.']); |
19 |
|
|
|
|
30 |
|
|
20 |
31 |
print_eta = estimated_time_of_arrival; |
print_eta = estimated_time_of_arrival; |
21 |
32 |
for pp=1:pulsepairs_no |
for pp=1:pulsepairs_no |
22 |
33 |
[q,p,x,y] = getQuadsForNextPulse(... |
[q,p,x,y] = getQuadsForNextPulse(... |
|
... |
... |
function obj = calculatePulsedQuadratures(obj, tracepair_ind) |
24 |
35 |
Q(pp,:) = q; P(pp,:) = p; X(pp,:) = x; Y(pp,:) = y; |
Q(pp,:) = q; P(pp,:) = p; X(pp,:) = x; Y(pp,:) = y; |
25 |
36 |
if pp==20 |
if pp==20 |
26 |
37 |
print_eta(pp, pulsepairs_no) |
print_eta(pp, pulsepairs_no) |
27 |
|
end |
|
|
38 |
|
end |
28 |
39 |
end |
end |
29 |
40 |
|
|
30 |
41 |
ampli_tr.fclose; |
ampli_tr.fclose; |
31 |
42 |
phase_tr.fclose; |
phase_tr.fclose; |
32 |
|
|
|
|
43 |
|
|
33 |
44 |
obj.pulse_Q{tracepair_ind} = Q; |
obj.pulse_Q{tracepair_ind} = Q; |
34 |
45 |
obj.pulse_P{tracepair_ind} = P; |
obj.pulse_P{tracepair_ind} = P; |
35 |
46 |
obj.pulse_X{tracepair_ind} = X; |
obj.pulse_X{tracepair_ind} = X; |
36 |
47 |
obj.pulse_Y{tracepair_ind} = Y; |
obj.pulse_Y{tracepair_ind} = Y; |
37 |
|
end |
|
|
48 |
|
end |
File data_analysis/auxfunctions/run_entanglement_evaluation_simulation_quick.m copied from file data_analysis/auxfunctions/run_entanglement_evaluation_simulation.m (similarity 93%) (mode: 100644) (index e5a0ce9..bec9e8f) |
1 |
|
%% [ev, model] = run_entanglement_evaluation_simulation(simulation_dir): |
|
2 |
|
%takes a directory simulation_dir |
|
|
1 |
|
%% [ev, model] = run_entanglement_evaluation_simulation(simulation_dir): |
|
2 |
|
%takes a directory simulation_dir |
3 |
3 |
%and creates a suitable evaluation object |
%and creates a suitable evaluation object |
4 |
4 |
% |
% |
5 |
|
% simulation_dir must contain a script 'setup_eval.m' |
|
|
5 |
|
% simulation_dir must contain a script 'setup_eval.m' |
6 |
6 |
%and a simulation model 'model.mat' |
%and a simulation model 'model.mat' |
7 |
7 |
% |
% |
8 |
8 |
%run_entanglement_evaluation_simulation(simulation_dir, 'test') runs in test-mode |
%run_entanglement_evaluation_simulation(simulation_dir, 'test') runs in test-mode |
|
... |
... |
function [ev, model] = run_entanglement_evaluation_simulation(simulation_dir, va |
10 |
10 |
assert_file_in_dir('setup_eval.m', simulation_dir); |
assert_file_in_dir('setup_eval.m', simulation_dir); |
11 |
11 |
assert_file_in_dir('model.mat', simulation_dir); |
assert_file_in_dir('model.mat', simulation_dir); |
12 |
12 |
|
|
13 |
|
|
|
|
13 |
|
|
14 |
14 |
test_mode = false; |
test_mode = false; |
15 |
15 |
for k=1:length(varargin) |
for k=1:length(varargin) |
16 |
16 |
switch varargin{k} |
switch varargin{k} |
|
... |
... |
function [ev, model] = run_entanglement_evaluation_simulation(simulation_dir, va |
21 |
21 |
end |
end |
22 |
22 |
end |
end |
23 |
23 |
|
|
24 |
|
currenttime = datestr(now, 'yyyymmdd-HHMMSS'); |
|
|
24 |
|
currenttime = [datestr(now, 'yyyymmdd-HHMMSS'), '_quick']; |
25 |
25 |
if test_mode |
if test_mode |
26 |
26 |
currenttime = 'test' |
currenttime = 'test' |
27 |
27 |
end |
end |
|
... |
... |
function [ev, model] = run_entanglement_evaluation_simulation(simulation_dir, va |
46 |
46 |
disp(messages); |
disp(messages); |
47 |
47 |
to_log(messages); |
to_log(messages); |
48 |
48 |
to_log([10, 'model.om', 10, evalc('disp(model.om)')]); |
to_log([10, 'model.om', 10, evalc('disp(model.om)')]); |
49 |
|
|
|
|
49 |
|
|
50 |
50 |
save(fullfile(export_dir, 'model.mat'), 'model'); |
save(fullfile(export_dir, 'model.mat'), 'model'); |
51 |
51 |
|
|
52 |
52 |
theory_fig = figure; hold all; |
theory_fig = figure; hold all; |
|
... |
... |
function [ev, model] = run_entanglement_evaluation_simulation(simulation_dir, va |
73 |
73 |
if test_mode |
if test_mode |
74 |
74 |
return |
return |
75 |
75 |
end |
end |
76 |
|
ev = calculate_entanglement(ev) %% run evaluation with current params |
|
|
76 |
|
ev = calculate_entanglement(ev); %% run evaluation with current params |
77 |
77 |
|
|
78 |
78 |
%% export simulation curve and evaluation results |
%% export simulation curve and evaluation results |
79 |
79 |
simulation_fig = figure; hold all; |
simulation_fig = figure; hold all; |
|
... |
... |
function [ev, model] = run_entanglement_evaluation_simulation(simulation_dir, va |
82 |
82 |
|
|
83 |
83 |
%gridxy(ev.pulse_gammas, 'Color',[0,0,0]+0.5,'Linestyle','-',... |
%gridxy(ev.pulse_gammas, 'Color',[0,0,0]+0.5,'Linestyle','-',... |
84 |
84 |
% 'DisplayName', 'gammas for evaluation'); |
% 'DisplayName', 'gammas for evaluation'); |
85 |
|
|
|
|
85 |
|
|
86 |
86 |
for ii = 1:ev.tracepairs_no |
for ii = 1:ev.tracepairs_no |
87 |
87 |
plot(ev.pulse_gammas, [ev.logneg_corrected{ii}{:}],'.',... |
plot(ev.pulse_gammas, [ev.logneg_corrected{ii}{:}],'.',... |
88 |
88 |
'DisplayName',['signal = ', num2str(ev.signal_power_muW(ii,1)),'muW']); |
'DisplayName',['signal = ', num2str(ev.signal_power_muW(ii,1)),'muW']); |
|
... |
... |
function ev = calculate_entanglement(ev) |
118 |
118 |
disp(''); |
disp(''); |
119 |
119 |
disp('***************'); |
disp('***************'); |
120 |
120 |
disp(['calculating quadratures for P=',num2str(ev.signal_power_muW(i,1)),'muW']); |
disp(['calculating quadratures for P=',num2str(ev.signal_power_muW(i,1)),'muW']); |
121 |
|
ev.calculatePulsedQuadratures(i); |
|
|
121 |
|
ev.calculatePulsedQuadratures(i, 'pulsepairs', 1e3); |
122 |
122 |
end |
end |
123 |
123 |
toc |
toc |
124 |
124 |
|
|
|
... |
... |
function ev = calculate_entanglement(ev) |
139 |
139 |
disp(['calibrating pulsed CMs']); |
disp(['calibrating pulsed CMs']); |
140 |
140 |
ev.calibratePulsedCMs; |
ev.calibratePulsedCMs; |
141 |
141 |
toc |
toc |
142 |
|
end |
|
|
142 |
|
end |
File data_analysis/unittests/entanglement_evaluation_test.m changed (mode: 100644) (index ced7d29..8534048) |
... |
... |
function shared = setup |
7 |
7 |
assert(~(exist(shared.evaluation_folder)==7),... |
assert(~(exist(shared.evaluation_folder)==7),... |
8 |
8 |
[shared.evaluation_folder, ' exists already.']); |
[shared.evaluation_folder, ' exists already.']); |
9 |
9 |
mkdir(shared.evaluation_folder) |
mkdir(shared.evaluation_folder) |
10 |
|
|
|
|
10 |
|
|
11 |
11 |
shared.samplingrate = 100; |
shared.samplingrate = 100; |
12 |
12 |
shared.sampleno = 1e4; |
shared.sampleno = 1e4; |
13 |
13 |
|
|
14 |
14 |
shared.mech_freq = 1; |
shared.mech_freq = 1; |
15 |
15 |
shared.timevec = (0:shared.sampleno-1)'/shared.samplingrate; |
shared.timevec = (0:shared.sampleno-1)'/shared.samplingrate; |
16 |
|
|
|
|
16 |
|
|
17 |
17 |
shared.x.data = sin(2*pi*shared.mech_freq*shared.timevec); |
shared.x.data = sin(2*pi*shared.mech_freq*shared.timevec); |
18 |
18 |
shared.p.data = cos(2*pi*shared.mech_freq*shared.timevec); |
shared.p.data = cos(2*pi*shared.mech_freq*shared.timevec); |
19 |
19 |
|
|
|
... |
... |
function entanglement_evaluation_run_test(shared) |
117 |
117 |
|
|
118 |
118 |
ev.calculateModeVectors; |
ev.calculateModeVectors; |
119 |
119 |
ev.calculatePulsedQuadratures(1); |
ev.calculatePulsedQuadratures(1); |
|
120 |
|
assertEqual(size(ev.pulse_Y{1}),... |
|
121 |
|
[ev.pulse_pairs_per_trace, ev.mech_frequencies_no*ev.pulse_gammas_no]); |
|
122 |
|
ev.exportResults; |
120 |
123 |
ev.exportResults; |
ev.exportResults; |
121 |
124 |
%type(fullfile(ev.evaluation_folder, 'evaluation_parameters.txt')) |
%type(fullfile(ev.evaluation_folder, 'evaluation_parameters.txt')) |
122 |
125 |
|
|
|
126 |
|
function entanglement_evaluation_run_quick_test(shared) |
|
127 |
|
ev = entanglement_evaluation_setup_test(shared); |
|
128 |
|
ev.evaluation_folder = shared.evaluation_folder; |
|
129 |
|
ev.mech_frequencies = [1, 2]; |
|
130 |
|
ev.opt_pulse_widths = 1e3*[1, 1]; |
|
131 |
|
ev.pulse_gammas = logspace(-1,1,10); |
|
132 |
|
|
|
133 |
|
ev.calculateModeVectors; |
|
134 |
|
pulsepairs_no = 100; |
|
135 |
|
ev.calculatePulsedQuadratures(1, 'pulsepairs', pulsepairs_no); |
|
136 |
|
assertEqual(size(ev.pulse_Q{1}),... |
|
137 |
|
[pulsepairs_no, ev.mech_frequencies_no*ev.pulse_gammas_no]); |
|
138 |
|
ev.exportResults; |
|
139 |
|
%type(fullfile(ev.evaluation_folder, 'evaluation_parameters.txt')) |
|
140 |
|
|
123 |
141 |
function entanglement_evaluation_exportdata_test(shared) |
function entanglement_evaluation_exportdata_test(shared) |
124 |
142 |
ev = entanglement_evaluation_setup_test(shared); |
ev = entanglement_evaluation_setup_test(shared); |
125 |
143 |
ev.evaluation_folder = shared.evaluation_folder; |
ev.evaluation_folder = shared.evaluation_folder; |
|
... |
... |
function entanglement_evaluation_exportdata_test(shared) |
127 |
145 |
mech_freqs_no = 2; |
mech_freqs_no = 2; |
128 |
146 |
pulse_gammas_no = 3; |
pulse_gammas_no = 3; |
129 |
147 |
pulse_pairs_no = 100; |
pulse_pairs_no = 100; |
130 |
|
|
|
|
148 |
|
|
131 |
149 |
ev.mech_frequencies = ones(mech_freqs_no, 1); |
ev.mech_frequencies = ones(mech_freqs_no, 1); |
132 |
150 |
ev.opt_pulse_widths = ones(mech_freqs_no, 1); |
ev.opt_pulse_widths = ones(mech_freqs_no, 1); |
133 |
151 |
ev.pulse_gammas = ones(pulse_gammas_no, 1); |
ev.pulse_gammas = ones(pulse_gammas_no, 1); |
|
... |
... |
function entanglement_evaluation_exportdata_test(shared) |
141 |
159 |
ev.pulse_Y{1} = 1000*Q_before; |
ev.pulse_Y{1} = 1000*Q_before; |
142 |
160 |
|
|
143 |
161 |
ev.exportResults; |
ev.exportResults; |
144 |
|
|
|
|
162 |
|
|
145 |
163 |
% mode order after export; in file corresponding to g1 (acc.ly for other pulse-gammas): |
% mode order after export; in file corresponding to g1 (acc.ly for other pulse-gammas): |
146 |
164 |
% [Q(g1-f1), P(g1-f1), ..., Q(g1-fn), P(g1-fn), X(g1-f1), Y(g1-f1), ..., X(g1-fn), Y(g1-fn)] |
% [Q(g1-f1), P(g1-f1), ..., Q(g1-fn), P(g1-fn), X(g1-f1), Y(g1-f1), ..., X(g1-fn), Y(g1-fn)] |
147 |
165 |
modes_after = repmat([11, 110, 12, 120, 1100, 11000, 1200, 12000], pulse_pairs_no, 1); |
modes_after = repmat([11, 110, 12, 120, 1100, 11000, 1200, 12000], pulse_pairs_no, 1); |
|
... |
... |
function entanglement_evaluation_corrfct_test(shared) |
157 |
175 |
ev = entanglement_evaluation_setup_test(shared); |
ev = entanglement_evaluation_setup_test(shared); |
158 |
176 |
|
|
159 |
177 |
max_lags = 10; |
max_lags = 10; |
160 |
|
ev.blocked_cross_correlation(max_lags); |
|
|
178 |
|
ev.blocked_cross_correlation('blocksize', max_lags); |
161 |
179 |
xx = ev.correlation_functions{1}{1,1}; |
xx = ev.correlation_functions{1}{1,1}; |
162 |
180 |
pp = ev.correlation_functions{1}{2,2}; |
pp = ev.correlation_functions{1}{2,2}; |
163 |
181 |
xp = ev.correlation_functions{1}{1,2}; |
xp = ev.correlation_functions{1}{1,2}; |
|
... |
... |
function entanglement_evaluation_corrfct_test(shared) |
169 |
187 |
xx_ = xcorr(shared.x.data, shared.x.data, max_lags); |
xx_ = xcorr(shared.x.data, shared.x.data, max_lags); |
170 |
188 |
xp_ = xcorr(shared.x.data, shared.p.data, max_lags); |
xp_ = xcorr(shared.x.data, shared.p.data, max_lags); |
171 |
189 |
assertAlmostEqual(xx, xx_); |
assertAlmostEqual(xx, xx_); |
172 |
|
|
|
|
190 |
|
|
173 |
191 |
rel_tol = 1e-12; |
rel_tol = 1e-12; |
174 |
|
assertAlmostEqual(xp, xp_, rel_tol); |
|
|
192 |
|
assertAlmostEqual(xp, xp_, rel_tol); |