List of commits:
Subject Hash Author Date (UTC)
Add quick version of entanglement evalution 63b2dc15c5fc7a7c5c9f870d783ab8f4d1c95396 Jason Hoelscher-Obermaier 2016-06-13 09:35:01
Fix wrong calculation of pulse modes (wrong pulse width; gamma -> 2 pi gamma) f2e86613d70f9f14b6f9b0fa28087c4acae94230 Jason Hoelscher-Obermaier 2016-06-13 09:33:34
Export pulse quadratures at end of run_entanglement_evaluation_simulation.m 1cc8f88b244ea1041aa7503b8d8141f8d85c9959 Jason Hoelscher-Obermaier 2016-06-07 13:51:00
Restore correct calculation of mode functions 70ae3d6ae7d2513d506cd400f72048e7c64e0def Jason Hoelscher-Obermaier 2016-06-07 13:37:44
Fix export of pulse quadratures f2d5f225c3f1c2c9a1313a1f63b4e5ef8c6e0ce3 Jason Hoelscher-Obermaier 2016-06-07 12:51:49
Auxfct for permuting data in several files ab144ff91342465644168d5e19691805bb1de3b7 Jason Hoelscher-Obermaier 2016-06-06 09:03:13
Correct permutation, add option for inverse permutation 6c615f43b7d08f0c29268a7b9216478b70dc0bb7 Jason Hoelscher-Obermaier 2016-06-06 08:54:21
Remove superfluous folder 3f32158ae47b1dabb7d207917ba9f28abfe346d3 Jason Hoelscher-Obermaier 2016-06-03 15:31:33
Add function to permute data from from q1...qn p1..pn.. to q1 p1... q1 p2 ... order 6d79e850ea8240822cae695b4daafd6a5594f578 Jason Hoelscher-Obermaier 2016-06-03 15:28:58
Add pseudohash as property to PXItrace 9893a652fbcd30d1c21555afc8feb1e89f2421f0 Jason Hoelscher-Obermaier 2016-06-03 15:25:33
Also hash the byte-size of files for added safety.. ddd093904a05897a12c74d070f812e5f2f4872dd Jason Hoelscher-Obermaier 2016-06-03 15:23:04
Add fct to compute quick "pseudo-hash" for (possibly large, binary) files f84b246eda5de28116596e77d418287743e71d1b Jason Hoelscher-Obermaier 2016-06-03 09:40:21
Mini-improvement in comments a11b66ab4ba137a9b160168152a3339da499eb7f Jason Hoelscher-Obermaier 2016-06-02 15:52:11
Simplifying test_dual_homo_measurement acc.to updated capabilities of homotrace.. e3a5010187332b91038ed5272a00d5150bd3e7bd Jason Hoelscher-Obermaier 2016-06-02 15:50:45
Re-adding prematurely dismissed functions d2bd6f498a7d4f93b7016debc3de0e02bed4f9f9 Jason Hoelscher-Obermaier 2016-06-02 15:50:06
Fix merge-induced bug in entanglement_evaluation.m ee40bc95ac59cbd95f13cf2aea409c187aca0003 Jason Hoelscher-Obermaier 2016-06-02 15:08:51
Add xUnit tests for entanglement_evaluation and dual_homo_measurement 4e9d4b0941db414b564116aa1f327752ad95a15b Jason Hoelscher-Obermaier 2016-05-25 10:18:19
Turn blocked_cross_correlation into a function of PXItraces 3391b939590e01224ff19ef3234248f43a2861e8 Jason Hoelscher-Obermaier 2016-06-01 16:25:55
Move testdata to subfolder data/ 47dcbd5cb08b5ff551d3659d6068a7987d596093 Jason Hoelscher-Obermaier 2016-06-01 12:43:04
Add auxfct for calculating estimated runtimes 08be90db79f14913f812b4a1f8d98ab2fad37164 Jason Hoelscher-Obermaier 2016-05-31 09:03:17
Commit 63b2dc15c5fc7a7c5c9f870d783ab8f4d1c95396 - Add quick version of entanglement evalution
- run evaluation on limited number of pulsepairs only
Author: Jason Hoelscher-Obermaier
Author date (UTC): 2016-06-13 09:35
Committer name: Jason Hoelscher-Obermaier
Committer date (UTC): 2016-06-13 09:35
Parent(s): f2e86613d70f9f14b6f9b0fa28087c4acae94230
Signer:
Signing key:
Signing status: N
Tree: bd98784e1a57bc3f4a214fd359d16b16cd06c97c
File Lines added Lines deleted
data_analysis/@entanglement_evaluation/calculatePulsedQuadratures.m 17 6
data_analysis/auxfunctions/run_entanglement_evaluation_simulation_quick.m 10 10
data_analysis/unittests/entanglement_evaluation_test.m 25 7
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);
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