List of commits:
Subject Hash Author Date (UTC)
Implement delay in between entangling and readout pulse 84d9d6fec8cab6a88d6eb4d5e111831008f21335 Jason Hoelscher-Obermaier 2017-05-30 16:37:11
Add property pulse_mean to entanglement_evaluation.m 1361bb6f3fc9c8f6ad72992e7256408e59d858a6 Jason Hoelscher-Obermaier 2017-05-30 15:25:44
Suppress unwanted output in darknoisesubtractPulsedCMs.m f1781f09c961b8bee731c50f45de029b5e9fc742 Jason Hoelscher-Obermaier 2017-05-30 15:23:20
Add method trace_out_repeated which takes an evaluation... b83118fb5bbfc9ad9daa1fb4933cc166dfb6cdd9 Jason Hoelscher-Obermaier 2017-05-30 15:10:18
Fix minor bug in meta_ev-method get_meta_data.m 5da0e397bf14706e5f206f2492ae2f48000350f1 Jason Hoelscher-Obermaier 2017-05-30 15:07:58
Add deviation_from_normality 847524ba174c1a7c86ad7dd80160896d84621778 Jason Hoelscher-Obermaier 2017-05-30 14:49:39
Add option to method for_each_evaluation_get in meta_ev.m 3aa2fd8ab0567a782073a0eba67f3bd5a2e2ba57 Jason Hoelscher-Obermaier 2017-05-30 14:46:02
Only attempt to export pulse_trace (to file pulsed_traces.mat) if not empty 69c13a5ae1b4265cc760addb9089d180d4a0f895 Jason Hoelscher-Obermaier 2017-05-30 14:44:49
Add more varargin-options to plotLogneg.m and plot_logneg_versus_gamma.m bd4d77856eaaf5afdf38e2fb22b177a18249d83c Jason Hoelscher-Obermaier 2017-05-30 14:27:35
Add options for colorbar position and data label background color to plot_matrix 261a772c66212e9b82d9125cfb059565dae41fba Jason Hoelscher-Obermaier 2017-05-22 17:35:34
Add fct set_legend_title be01bc463524c4943a3268b349f6a524a62c64f3 Jason Hoelscher-Obermaier 2017-05-16 13:34:19
Allow to set interpreter and fontsize in labels.m 24f21770d074737ed0b9d7e879cff39ee3f9fd63 Jason Hoelscher-Obermaier 2017-05-16 13:32:24
Attempt to open generated pdf in save_fig_pdf bcf7b91a892bc3cd6f1da5202cfff0825d3ba406 Jason Hoelscher-Obermaier 2017-05-16 13:30:56
Add hackish workaround for problems with wrong fontsize when exporting figures e977df7ea63dfb64d14244db41dcbdf34832fbe9 Jason Hoelscher-Obermaier 2017-05-13 12:18:19
Add option 'show_physicality' to plot_logneg_versus_gamma.m (class meta_ev) 33dba0173e7d446c08ab89b7f0d5bd7c00f6755d Jason Hoelscher-Obermaier 2017-05-13 12:02:12
Set default font size for legends and labels to 11 4f9be2e429605dd90ab6b1eabb88fea12c7e9ddb Jason Hoelscher-Obermaier 2017-05-13 12:01:05
Remove figure.m to avoid MATLAB warnings 3c8e854f1e48d28df090753f615e5e1028259531 Jason Hoelscher-Obermaier 2017-05-13 11:57:42
Copy generated png to clipboard autom.ly in save_fig_pdf 70897f3af36723888e59ae3421545d96d67db302 Jason Hoelscher-Obermaier 2017-05-10 10:18:00
Add option to hide legend entries for 'Physicality' to plotLogneg db263de99d27a86255cd724b06208c1cae93bd76 Jason Hoelscher-Obermaier 2017-05-10 10:17:12
Fix bug: surround arguments to 'system' by double quotes dffc09c758a8f55fb8dc2a4ddf68c8593be46a3d Jason Hoelscher-Obermaier 2017-05-09 10:24:55
Commit 84d9d6fec8cab6a88d6eb4d5e111831008f21335 - Implement delay in between entangling and readout pulse
- add property deadtime (=delay in sec) and dependent prop. deadtime_samples
to entanglement_evaluation.m
- adapt calculation of pulse_pairs_per_trace
- implement the skipping of deadtime_samples samples in between pulses
in calculatePulsedQuadratures.m
- add corresponding unit tests entanglement_evaluation_test.m
Author: Jason Hoelscher-Obermaier
Author date (UTC): 2017-05-30 16:37
Committer name: Jason Hoelscher-Obermaier
Committer date (UTC): 2017-05-30 16:37
Parent(s): 5a15944adbbe01de100e0ae236ebd25ba8f6cbf6
Signing key:
Tree: d4a76dc73d16fc2497f0cb725d1d7dbe53b5abff
File Lines added Lines deleted
data_analysis/@entanglement_evaluation/calculatePulsedQuadratures.m 6 1
data_analysis/@entanglement_evaluation/entanglement_evaluation.m 14 3
data_analysis/unittests/entanglement_evaluation_test.m 63 0
File data_analysis/@entanglement_evaluation/calculatePulsedQuadratures.m changed (mode: 100644) (index 3585604..a674c8c)
... ... function [get_raw_data, close_raw_data] = get_raw_data_fct(obj, tracepair_ind)
106 106 else else
107 107 raw_data = complex( ampli_tr.fread(obj.samples_per_pulse),... raw_data = complex( ampli_tr.fread(obj.samples_per_pulse),...
108 108 phase_tr.fread(obj.samples_per_pulse)); phase_tr.fread(obj.samples_per_pulse));
109 if (obj.pulse_pairs_coverage<1) && (~mod(pulse_count,2))
109 if (obj.deadtime_samples>0) && mod(pulse_count,2) % in between entangling and readout pulse
110 % moves file pointer forward by deadtime_samples samples
111 ampli_tr.fread(obj.deadtime_samples);
112 phase_tr.fread(obj.deadtime_samples);
113 end
114 if (obj.pulse_pairs_coverage<1) && (~mod(pulse_count,2)) % after each pulse pair
110 115 pp = pulse_count/2; pp = pulse_count/2;
111 116 dead_time_ratio = floor(obj.samples_per_pulse/obj.pulse_pairs_coverage); dead_time_ratio = floor(obj.samples_per_pulse/obj.pulse_pairs_coverage);
112 117 % moves file pointer to the next pp according to chosen covering % moves file pointer to the next pp according to chosen covering
File data_analysis/@entanglement_evaluation/entanglement_evaluation.m changed (mode: 100644) (index daba0d9..ba1395a)
... ... classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_
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
18
19 %% DEFINING WHICH RAW DATA TO USE
20 deadtime = 0 % in sec
21 % deadtime = 0: entangling and readout pulse are directly adjacent
22 % deadtime > 0: entangling and readout pulse are directly adjacent
23
18 24 pulse_pairs_coverage = 1 pulse_pairs_coverage = 1
19 25 % pulse_pair_coverage = 1: pulse pairs are "back to back", i.e. all raw data is used % pulse_pair_coverage = 1: pulse pairs are "back to back", i.e. all raw data is used
20 26 % pulse_pair_coverage = 0.1: after one pulse pairs, we skip nine potential pulse pairs % pulse_pair_coverage = 0.1: after one pulse pairs, we skip nine potential pulse pairs
 
... ... classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_
70 76 quad_order@double matrix quad_order@double matrix
71 77 quad_labels@cell matrix quad_labels@cell matrix
72 78
73
74 79 samples_per_pulse % @double scalar samples_per_pulse % @double scalar
80 deadtime_samples@double scalar
75 81
76 82 %% FROM MEASUREMENT OBJECT %% FROM MEASUREMENT OBJECT
77 83 tracepairs_no@double scalar tracepairs_no@double scalar
 
... ... classdef entanglement_evaluation < class_conveniences & entanglement_evaluation_
192 198 samples_per_trace = obj.measurement.samples_per_trace; samples_per_trace = obj.measurement.samples_per_trace;
193 199 end end
194 200
201 function deadtime_samples = get.deadtime_samples(obj)
202 deadtime_samples = ceil(obj.deadtime*obj.samplingrate);
203 end
204
195 205 function pulse_pairs_per_trace = get.pulse_pairs_per_trace(obj) function pulse_pairs_per_trace = get.pulse_pairs_per_trace(obj)
196 pulse_pairs_per_trace = floor(floor(obj.samples_per_trace/(2*obj.samples_per_pulse))...
197 *obj.pulse_pairs_coverage);
206 samples_per_pulsepair = 2*obj.samples_per_pulse + obj.deadtime_samples;
207 pulse_pairs_raw = floor(obj.samples_per_trace/samples_per_pulsepair);
208 pulse_pairs_per_trace = floor(pulse_pairs_raw*obj.pulse_pairs_coverage);
198 209 end end
199 210
200 211 function shotnoise_theory = get.shotnoise_theory(obj) function shotnoise_theory = get.shotnoise_theory(obj)
File data_analysis/unittests/entanglement_evaluation_test.m changed (mode: 100644) (index a44c3f2..50c1437)
... ... function run_inverted_test(shared)
333 333 [-0.321838837984714, -0.040175061783999, 0.094340702342072, -0.236002490360790, -0.367180133703403, -0.050515242330064, 0.151784942728085, -0.358414152751479];... [-0.321838837984714, -0.040175061783999, 0.094340702342072, -0.236002490360790, -0.367180133703403, -0.050515242330064, 0.151784942728085, -0.358414152751479];...
334 334 [0.783722707358365, 0.098497215865329, -0.236007779549885, 0.587370230126137, 0.880340233793472, 0.120530651668499, -0.358414152751479, 0.848215057271915]]); [0.783722707358365, 0.098497215865329, -0.236007779549885, 0.587370230126137, 0.880340233793472, 0.120530651668499, -0.358414152751479, 0.848215057271915]]);
335 335
336 function deadtime_test(shared)
337 ev = ev_setup_test(shared);
338 ev.mech_frequencies = shared.mech_freqs;
339 ev.opt_pulse_widths = 1e2*[1, 1];
340 ev.pulse_gammas = logspace(-1,1,10);
341 pulse_pairs_per_trace = ev.pulse_pairs_per_trace;
342
343 %% check that pulse_pairs_per_trace depends on deadtime as expected
344 % trivial test
345 ev.deadtime = 0;
346 assertEqual(ev.pulse_pairs_per_trace, pulse_pairs_per_trace)
347 % if the deadtime is the full duration of the trace, we do not get any pulse pairs
348 ev.deadtime = ev.samples_per_trace/ev.samplingrate;
349 assertEqual(ev.pulse_pairs_per_trace, 0)
350 % if the deadtime is the full duration of the trace - 2*pulse_duration_samples,
351 % we expect a single pulse pair
352 ev.deadtime = (ev.samples_per_trace - 2*ev.samples_per_pulse)/ev.samplingrate;
353 assertEqual(ev.pulse_pairs_per_trace, 1)
354
355 %% check that the samples are skipped correctly
356 ev.deadtime = 0.1;
357 ev.deadtime_samples;
358 empty_pulse = zeros(ev.samples_per_pulse,1);
359 filled_void = 1E10*randn(ev.deadtime_samples, 1);
360 fake_data = [empty_pulse; filled_void; empty_pulse; empty_pulse; filled_void; empty_pulse];
361
362 xfile = '.dummy_x_data.dat';
363 yfile = '.dummy_y_data.dat';
364 xfid = fopen(xfile, 'w');
365 yfid = fopen(yfile, 'w');
366 fwrite(xfid, fake_data, shared.precision);
367 fwrite(yfid, fake_data, shared.precision);
368 fclose(xfid);
369 fclose(yfid);
370
371 ev.measurement.add_trace_pair(...
372 xfile, yfile,...
373 'precision',shared.precision,...
374 'DAQrange', 0,...
375 'amplification', 1,...
376 'signal_power_muW', 0);
377
378 % should have two pulse pairs now
379 assertEqual(ev.pulse_pairs_per_trace, 2);
380
381 % should get 0 for the pulse quadratures
382 % ev.deadtime_samples
383 [T,ev] = evalc('ev.calculateModeVectors;');
384 [T,ev] = evalc('ev.calculatePulsedQuadratures(3);');
385 pulse_quads = [ev.pulse_trace{3}{:}];
386 assertEqual(pulse_quads, zeros(size(pulse_quads)))
387
388 % should not get 0 for the pulse quadratures
389 % if we slightly modify the interpulse deadtime
390 ev.deadtime = 0.8*ev.deadtime;
391 % ev.deadtime_samples
392 [T,ev] = evalc('ev.calculatePulsedQuadratures(3);');
393 pulse_quads = [ev.pulse_trace{3}{:}];
394 assert(~isequal(pulse_quads, zeros(size(pulse_quads))))
395
396 delete(xfile);
397 delete(yfile);
398
336 399 function pulse_pairs_coverage_test(shared) function pulse_pairs_coverage_test(shared)
337 400 ev = ev_setup_test(shared); ev = ev_setup_test(shared);
338 401 ev.mech_frequencies = shared.mech_freqs; ev.mech_frequencies = shared.mech_freqs;
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