File data_analysis/@entanglement_evaluation/entanglement_evaluation.m changed (mode: 100644) (index fe5c4ba..fc91dcb) |
... |
... |
classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_ |
11 |
11 |
|
|
12 |
12 |
%% DEFINING THE PULSED MODES |
%% DEFINING THE PULSED MODES |
13 |
13 |
inverted_evaluation@logical scalar = false |
inverted_evaluation@logical scalar = false |
14 |
|
pulse_gammas@double vector =[1] % now a commmon scaling factor for the pulse lengths!! |
|
|
14 |
|
pulse_gammas@double vector = [1] % now a commmon scaling factor for the pulse lengths!! |
15 |
15 |
pulse_widths % for the future: a better version of pulse_gammas |
pulse_widths % for the future: a better version of pulse_gammas |
16 |
16 |
|
|
17 |
17 |
mech_frequencies@double vector % for each mode, in non-angular units |
mech_frequencies@double vector % for each mode, in non-angular units |
|
... |
... |
classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_ |
97 |
97 |
end |
end |
98 |
98 |
methods |
methods |
99 |
99 |
function mech_frequencies_no = get.mech_frequencies_no(obj) |
function mech_frequencies_no = get.mech_frequencies_no(obj) |
100 |
|
%% improve |
|
101 |
|
if isempty(obj.mech_frequencies) |
|
|
100 |
|
if ~isempty(obj.mech_frequencies) |
|
101 |
|
mech_frequencies_no = numel(obj.mech_frequencies); |
|
102 |
|
elseif ~isempty(obj.pulse_trace) |
|
103 |
|
mech_frequencies_no = size(obj.pulse_trace{1}{1},2)/4; |
|
104 |
|
elseif ~isempty(obj.pulse_CM) |
102 |
105 |
mech_frequencies_no = size(obj.pulse_CM{1}{1},1)/4; |
mech_frequencies_no = size(obj.pulse_CM{1}{1},1)/4; |
103 |
106 |
else |
else |
104 |
|
mech_frequencies_no = numel(obj.mech_frequencies); |
|
|
107 |
|
error('Could not determine mech_frequencies_no'); |
105 |
108 |
end |
end |
106 |
109 |
end |
end |
107 |
110 |
function pulse_gammas_no = get.pulse_gammas_no(obj) |
function pulse_gammas_no = get.pulse_gammas_no(obj) |
108 |
|
%% improve: hierarchy ev.pulse_gammas --> ev.pulse_traces --> ev.pulse_CM ... |
|
109 |
|
if obj.pulse_gammas == [1] |
|
|
111 |
|
if ~isequal(obj.pulse_gammas, [1]) |
|
112 |
|
pulse_gammas_no = numel(obj.pulse_gammas); |
|
113 |
|
elseif ~isempty(obj.pulse_trace) |
|
114 |
|
pulse_gammas_no = numel(obj.pulse_trace{1}); |
|
115 |
|
elseif ~isempty(obj.pulse_CM) |
110 |
116 |
pulse_gammas_no = numel(obj.pulse_CM{1}); |
pulse_gammas_no = numel(obj.pulse_CM{1}); |
111 |
117 |
else |
else |
112 |
|
pulse_gammas_no = numel(obj.pulse_gammas); |
|
|
118 |
|
error('Could not determine pulse_gamma_no'); |
113 |
119 |
end |
end |
114 |
120 |
end |
end |
115 |
121 |
function pulse_duration_seconds = get.pulse_duration_seconds(obj) |
function pulse_duration_seconds = get.pulse_duration_seconds(obj) |
|
... |
... |
classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_ |
139 |
145 |
end |
end |
140 |
146 |
|
|
141 |
147 |
function tracepairs_no = get.tracepairs_no(obj) |
function tracepairs_no = get.tracepairs_no(obj) |
142 |
|
if isempty(obj.measurement) |
|
143 |
|
if isempty(obj.pulse_trace) |
|
144 |
|
tracepairs_no = numel(obj.pulse_CM); |
|
145 |
|
else |
|
146 |
|
tracepairs_no = numel(obj.pulse_trace); |
|
147 |
|
end |
|
148 |
|
else |
|
|
148 |
|
if ~isempty(obj.measurement) |
149 |
149 |
tracepairs_no = obj.measurement.tracepairs_no; |
tracepairs_no = obj.measurement.tracepairs_no; |
|
150 |
|
elseif ~isempty(obj.pulse_trace) |
|
151 |
|
tracepairs_no = numel(obj.pulse_trace); |
|
152 |
|
elseif ~isempty(obj.pulse_CM) |
|
153 |
|
tracepairs_no = numel(obj.pulse_CM); |
|
154 |
|
else |
|
155 |
|
error('Could not determine tracepairs_no'); |
150 |
156 |
end |
end |
151 |
157 |
end |
end |
152 |
158 |
function samplingrate = get.samplingrate(obj) |
function samplingrate = get.samplingrate(obj) |
File data_analysis/unittests/entanglement_evaluation_test.m changed (mode: 100644) (index 18c53b8..b8d681e) |
... |
... |
function set_samples_per_pulse_test(shared) |
246 |
246 |
[T,ev] = evalc('ev.calculateModeVectors;'); % supress std out from fct call |
[T,ev] = evalc('ev.calculateModeVectors;'); % supress std out from fct call |
247 |
247 |
assertEqual(size(ev.entangling_modes,2), samples_per_pulse) |
assertEqual(size(ev.entangling_modes,2), samples_per_pulse) |
248 |
248 |
|
|
249 |
|
function run_quick_test(shared) |
|
|
249 |
|
function ev = run_quick_test(shared) |
250 |
250 |
ev = ev_setup_test(shared); |
ev = ev_setup_test(shared); |
251 |
251 |
ev.mech_frequencies = [1, 2]; |
ev.mech_frequencies = [1, 2]; |
252 |
252 |
ev.opt_pulse_widths = 1e3*[1, 1]; |
ev.opt_pulse_widths = 1e3*[1, 1]; |
|
... |
... |
function run_quick_test(shared) |
273 |
273 |
assertElementsAlmostEqual(ev.pulse_CM_calibrated{1}{1}, ... |
assertElementsAlmostEqual(ev.pulse_CM_calibrated{1}{1}, ... |
274 |
274 |
calibrate_cm(ev.pulse_CM{1}{1}, ev.pulse_CM{1}{1})) |
calibrate_cm(ev.pulse_CM{1}{1}, ev.pulse_CM{1}{1})) |
275 |
275 |
|
|
|
276 |
|
function getters_with_missing_properties_test(shared) |
|
277 |
|
%% check that the fallback options provided for the getters for |
|
278 |
|
%% mech_frequencies_no, pulse_gammas_no, and tracepairs_no |
|
279 |
|
%% are defined correctly |
|
280 |
|
%% (fallback means: if mech_frequencies, pulse_gammas, or tracepairs are undefined) |
|
281 |
|
|
|
282 |
|
% do quick eval to generate data |
|
283 |
|
ev = run_quick_test(shared); |
|
284 |
|
ev.exportResults; |
|
285 |
|
|
|
286 |
|
% reimport traces to a blank eval-object to get |
|
287 |
|
% values with measurement-object, mech_frequencies, pulse_gammas removed |
|
288 |
|
ev2 = entanglement_evaluation; |
|
289 |
|
ev2.evaluation_folder = ev.evaluation_folder; |
|
290 |
|
ev2.import_traces; |
|
291 |
|
|
|
292 |
|
% values without measurement-object |
|
293 |
|
assertEqual(ev2.tracepairs_no, ev.tracepairs_no,... |
|
294 |
|
['tracepairs_no does not match']); |
|
295 |
|
assertEqual(ev2.mech_frequencies_no, ev.mech_frequencies_no,... |
|
296 |
|
['mech_frequencies_no does not match']); |
|
297 |
|
assertEqual(ev2.pulse_gammas_no, ev.pulse_gammas_no,... |
|
298 |
|
['pulse_gammas_no does not match']); |
|
299 |
|
|
|
300 |
|
% reimport CMs to a blank eval-object to get |
|
301 |
|
% values with measurement-object, mech_frequencies, pulse_gammas removed |
|
302 |
|
ev3 = entanglement_evaluation; |
|
303 |
|
ev3.evaluation_folder = ev.evaluation_folder; |
|
304 |
|
ev3.import_CMs; |
|
305 |
|
|
|
306 |
|
% values without measurement-object |
|
307 |
|
assertEqual(ev3.tracepairs_no, ev.tracepairs_no,... |
|
308 |
|
['tracepairs_no does not match']); |
|
309 |
|
assertEqual(ev3.mech_frequencies_no, ev.mech_frequencies_no,... |
|
310 |
|
['mech_frequencies_no does not match']); |
|
311 |
|
assertEqual(ev3.pulse_gammas_no, ev.pulse_gammas_no,... |
|
312 |
|
['pulse_gammas_no does not match']); |
|
313 |
|
|
276 |
314 |
function export_import_test(shared) |
function export_import_test(shared) |
277 |
315 |
ev = ev_setup_test(shared); |
ev = ev_setup_test(shared); |
278 |
316 |
|
|
|
... |
... |
function export_import_test(shared) |
290 |
328 |
Q = {}; P = {}; X = {}; Y = {}; |
Q = {}; P = {}; X = {}; Y = {}; |
291 |
329 |
Q{1} = Q_before; P{1} = 10*Q{1}; X{1} = 100*Q{1}; Y{1} = 1000*Q{1}; |
Q{1} = Q_before; P{1} = 10*Q{1}; X{1} = 100*Q{1}; Y{1} = 1000*Q{1}; |
292 |
330 |
Q{2} = Q_before+1; P{2} = 10*Q{2}; X{2} = 100*Q{2}; Y{2} = 1000*Q{2}; |
Q{2} = Q_before+1; P{2} = 10*Q{2}; X{2} = 100*Q{2}; Y{2} = 1000*Q{2}; |
293 |
|
|
|
|
331 |
|
|
294 |
332 |
% reorder mock data into pulse_trace{tracepair_ind}{gam_ind} |
% reorder mock data into pulse_trace{tracepair_ind}{gam_ind} |
295 |
333 |
for pow_ind=1:ev.tracepairs_no |
for pow_ind=1:ev.tracepairs_no |
296 |
334 |
for gam_ind=1:ev.pulse_gammas_no |
for gam_ind=1:ev.pulse_gammas_no |