List of commits:
Subject Hash Author Date (UTC)
Add alternative getters for pulse_gammas_no, mech_freq..no, tracepairs_no for use with reimported evaluation data 4602879e176f2ac28cf47867c9a9e2ebd75260c4 Jason Hoelscher-Obermaier 2017-02-15 11:38:51
Hide properties of entanglement_evaluation_obsolete.m 61c62dc406ae5020b3982352413acb9ee95dd2ba Jason Hoelscher-Obermaier 2017-02-15 11:33:25
Add simple wrapper recalibrate to set efficiency and visibility and then redo the calibration fd7ee1f73b68bd9e24ac7a66a861b618ff1ce9b2 Jason Hoelscher-Obermaier 2017-02-10 15:02:11
Allow shifting the whole plot by fixed amount along x 06038d7e54ee644292481b1cafc020bdc230aef8 Jason Hoelscher-Obermaier 2017-02-10 13:22:23
Clean up bplot.m a bit (no functional changes) 4bcbb07b577ae495b2a43daa608b0957fe961fab Jason Hoelscher-Obermaier 2017-02-10 13:10:23
Add 3rd-party fct for boxplots (visualizing distributions of data using percentile median and mean) c175b3a0e0316a6b2026e11da2eb0b140b372666 Jason Hoelscher-Obermaier 2017-02-10 12:46:25
Allow import and postprocessing of pulsed cov.mat.s using entanglement_evaluation without specifying a measurement d1c66ada7c766875c8d49518240a79b2a4e47ce6 Jason Hoelscher-Obermaier 2017-02-09 10:13:54
Add support for correction for efficiency and visibility to calibratePulsedCMs.m 1208401ad903aac46bdbb4667c5b9c9f9cb15d96 Jason Hoelscher-Obermaier 2017-02-08 16:29:47
cosmetics.. e221fa115164516c23df7ae9a5cedef875e38f60 Jason Hoelscher-Obermaier 2017-02-08 10:43:58
Make sure tests write (almost) only to temporary folders 2: adapt read_permute_write_data accordingly 35ce0b81055b51a40bb88d7560fed262ae3a8c06 Jason Hoelscher-Obermaier 2017-02-08 10:42:48
Make sure tests write (almost) only to temporary folders 15da915a500d241a2c0bc6a0703a84c8736d7216 Jason Hoelscher-Obermaier 2017-02-08 10:42:06
Refactor calibratePulsedCMs and darknoisesubtractPulsedCMs a357e8b90aa3e526be6aa259fbff58f2b29a46c1 Jason Hoelscher-Obermaier 2017-02-07 16:28:51
Clean up entanglement_evaluation: reorder properties and methods, add some comments da1263eac02353bf9a9c22d86986e72a42133e09 Jason Hoelscher-Obermaier 2017-02-07 16:09:41
Move legacy methods and properties to new superclass entanglement_evaluation_obsolete.m 8dee217f882b737dde79c121ae56d4d89efac5db Jason Hoelscher-Obermaier 2017-02-07 15:41:35
Fix ev.samples_per_pulse to also work with evaluations based on pulse_widths-property 2e6d94f24ba6f928a2baffbe309d70901920c3a9 Jason Hoelscher-Obermaier 2017-02-07 15:14:51
Dramatically speed up git_repos_on_path.m 599a7515dcd20e4eaf29e28cccd3ebd18b6a0cdd Jason Hoelscher-Obermaier 2017-02-07 15:01:31
Cosmetics and speed-up of entanglement_evaluation_test.m 80585dfe632ac9169e348b52417cee832132abbe Jason Hoelscher-Obermaier 2017-02-07 13:38:21
Add convenience superclass class_conveniences.m to collect generally applicable methods and properties 79eeef150668a3c5ab0470c4ba542c9f8241e154 Jason Hoelscher-Obermaier 2017-02-07 12:37:18
Add properties homodyne_visibility, detection_efficiency to entanglement_evaluation 6c21d00289fdb43f375912a0becdeba3cb088285 Jason Hoelscher-Obermaier 2017-02-07 11:05:25
Adapt entanglement_evaluation_test to changes in the default pulse-length c268f45a34790579fcbe5c0c8f51c18024e0d4c7 Jason Hoelscher-Obermaier 2017-02-07 11:03:03
Commit 4602879e176f2ac28cf47867c9a9e2ebd75260c4 - Add alternative getters for pulse_gammas_no, mech_freq..no, tracepairs_no for use with reimported evaluation data
- (in entanglement_evaluation.m)
- alternative getters should provide consistent values even if pulse_gammas, mech_frequencies, measurement have not been defined
- also: add corresponding tests in entanglement_evaluation_test.m
Author: Jason Hoelscher-Obermaier
Author date (UTC): 2017-02-15 11:38
Committer name: Jason Hoelscher-Obermaier
Committer date (UTC): 2017-02-15 11:38
Parent(s): 61c62dc406ae5020b3982352413acb9ee95dd2ba
Signer:
Signing key:
Signing status: N
Tree: 9c53fce7f47b17c2c9c01ed1ed65b87076edc073
File Lines added Lines deleted
data_analysis/@entanglement_evaluation/entanglement_evaluation.m 20 14
data_analysis/unittests/entanglement_evaluation_test.m 40 2
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
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/gutc61/Membrane

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/gutc61/Membrane

Clone this repository using git:
git clone git://git.rocketgit.com/user/gutc61/Membrane

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main