List of commits:
Subject Hash Author Date (UTC)
Allow convenient extraction of optimal entanglement and pulse width from all evaluations inside meta-ev 66e26078ccb9ca86dad55a62617ec8605fb759ce Jason Hoelscher-Obermaier 2017-03-28 16:09:40
Add meta_ev-class for more convenient postprocessing of multiple entanglement_evaluation-objects 147dd9b11bc1f950416d48142adfecc0dcc3f814 Jason Hoelscher-Obermaier 2017-03-28 14:36:08
Delete any previously calculated optima of log.neg. or pulse width at the end of calculate_log_neg edee9ece25f4249891ccc8485aaedc10c01c4386 Jason Hoelscher-Obermaier 2017-03-28 12:02:11
Refactor calibratePulsedCMs and trace_out c108334ad59fd087cef91e002a992e50652dc6e4 Jason Hoelscher-Obermaier 2017-03-28 11:56:13
Add logging of git-status via status_git_repos_on_path to simulate_entanglement 3658991dd37a657cad1a3aba5933a276b649fbd1 Jason Hoelscher-Obermaier 2017-03-28 10:08:52
Improve logging of git status in class_conveniences: dirty working tree state is also logged 96a3acca155c3ad47edaa625368e5a25875c332b Jason Hoelscher-Obermaier 2017-03-28 09:51:53
Add 3rd-party convenience fct printstruct.m to print a tree-view of a struct d6595191240086e6c8247a6e055c8e4a161d4459 Jason Hoelscher-Obermaier 2017-03-27 14:39:19
Improve plot appearance in plotLogneg.m and add option to reposition legend. 81d281f0f354594af42a13722ed6994cb1b0d0fb Jason Hoelscher-Obermaier 2017-03-27 11:43:15
Improve legend in plotLogneg to also include entries for interpolated data and optima 805cb3e67bad3be9bddafada3258f5a8a7e60707 Jason Hoelscher-Obermaier 2017-03-27 11:14:06
Add function tex_escape which escapes characters forbidden in tex 136b200a3a98f06f36b4ae3a18a97c66ce1b8c88 Jason Hoelscher-Obermaier 2017-03-27 10:03:53
Store interpolated pulse widths and entanglement (used in calulate_optimal_entanglement) for later inspection. c76c9b0d1be1bd00425949fb12cd59f2c743ff5f Jason Hoelscher-Obermaier 2017-03-27 10:35:10
Add options to show grid and zero-line to plotLogneg.m 0e7dff29041930f205c30113c72595f60545182d Jason Hoelscher-Obermaier 2017-03-27 08:43:56
Update submodule export_fig ea150793f485ff88cad104d7f4493f22904f3df6 Jason Hoelscher-Obermaier 2017-03-25 06:30:12
Bug fix: Remove line yielding unneeded output d11c6eae8bf5f2ad38c858a4b9618acd3af4bd8b Jason Hoelscher-Obermaier 2017-03-24 19:45:04
Add method calulate_optimal_entanglement.m to entanglement_evaluation-class 894eef46922695d0f451773d4d8c9df64d2922e0 Jason Hoelscher-Obermaier 2017-03-24 19:35:40
Add test: Ensure orthonormality is checked for mode functions (instead of columns of mode fct matrices) aa1dd49269c45e2e070f4ab5cdef23a59246ae65 Jason Hoelscher-Obermaier 2017-03-22 10:33:40
Bug fix in calculate_mode_vectors_gammalist.m aa18a37ba8fd5108c5fa47f48bffcf021a4534bd Jason Hoelscher-Obermaier 2017-03-22 09:50:15
Copy mechadd.mat (file with info reg. higher mechanical modes) to simulation output folder 595b486a19a22f66bedd754780cb38dac6d523e6 Jason Hoelscher-Obermaier 2017-03-17 15:53:03
Improve orthonormilsation b84ccfcaf4ec12a6136f954670d3147b406096eb corentin-gut 2017-03-17 14:59:20
Bug fix in method trace_out of entanglement_evaluation 84cd317f423b6b630298a2847b4f2fada16da8d1 Jason Hoelscher-Obermaier 2017-03-10 14:57:19
Commit 66e26078ccb9ca86dad55a62617ec8605fb759ce - Allow convenient extraction of optimal entanglement and pulse width from all evaluations inside meta-ev
- also refactor meta_ev by extracting method get_meta_data
- add convenience method for_each_evaluation to easily extract properties from all evaluations
Author: Jason Hoelscher-Obermaier
Author date (UTC): 2017-03-28 16:09
Committer name: Jason Hoelscher-Obermaier
Committer date (UTC): 2017-03-28 16:09
Parent(s): 147dd9b11bc1f950416d48142adfecc0dcc3f814
Signer:
Signing key:
Signing status: N
Tree: 203abd8ddeaa95c707755716f8ca822cf7e05b2b
File Lines added Lines deleted
data_analysis/@meta_ev/get_meta_data.m 39 0
data_analysis/@meta_ev/meta_ev.m 33 37
File data_analysis/@meta_ev/get_meta_data.m added (mode: 100644) (index 0000000..93c3870)
1 function obj = get_meta_data(obj, meta_data_file)
2 % metadata-file should be tab-separated
3 % header should look as follows: ev_file name_of_param1 name_of_param2 name_of_param3 ....
4 headerlines = 1;
5 meta_data = importdata(meta_data_file, '\t', 1);
6 header = {meta_data.textdata{1:headerlines,:}};
7 assertEqual(header{1}, 'ev_files');
8 obj.param_names = {header{2:end}};
9
10 % read header again to skip it
11 fid = fopen(meta_data_file);
12 textscan(fid, '%s', 1, 'Delimiter','\n');
13
14 % read actual meta_data
15 format_string = repmat('%s ',[1,3]);
16 meta_data = textscan(fid, format_string,'Delimiter','\t');
17 ev_files = meta_data{1};
18 for k=1:length(obj.param_names)
19 params{k} = cellfun(@str2num, meta_data{k+1});
20 end
21
22 % sort by first param, second param etc
23 [params, sort_order] = sortrows([params{:}]);
24 ev_files = {ev_files{sort_order}};
25 evaluations_no = numel(ev_files);
26
27 if length(obj.param_names) == 1
28 obj.params = {params};
29 obj.ev_files = ev_files;
30 elseif length(obj.param_names) == 2
31 % attempt to reshape by first column
32 param1_value_no = numel(unique(params(:,1)));
33 assert(mod(evaluations_no, param1_value_no)==0,...
34 'number of evaluations per value of parameter 1 seems to be non-uniform.');
35 dimensions = [evaluations_no/param1_value_no, param1_value_no];
36 obj.params{1} = reshape(params(:,1), dimensions);
37 obj.params{2} = reshape(params(:,2), dimensions);
38 obj.ev_files = reshape(ev_files, dimensions);
39 end
File data_analysis/@meta_ev/meta_ev.m changed (mode: 100644) (index 9e870d5..4e0929d)
... ... classdef meta_ev < class_conveniences
14 14 properties(Dependent) properties(Dependent)
15 15 dimensions@double vector % dimensions of evaluations-vector or -matrix dimensions@double vector % dimensions of evaluations-vector or -matrix
16 16 evaluations_no@double % number of evaluations evaluations_no@double % number of evaluations
17 opt_logneg_corrected@cell % cell array (index corresponding to tracepair) of optimal entanglement
18 opt_pulse_gammas@cell % cell array (index corresponding to tracepair) of optimal pulse gammas
19 tracepairs_no@double % number of tracepairs used for each evaluation (enforced to be the same)
17 20 end end
18 21
19 22 methods methods
 
... ... classdef meta_ev < class_conveniences
25 28 end end
26 29 obj.evaluations = evaluations; obj.evaluations = evaluations;
27 30 end end
28 function obj = get_meta_data(obj, meta_data_file)
29 % metadata-file should be tab-separated
30 % header should look as follows: ev_file name_of_param1 name_of_param2 name_of_param3 ....
31 headerlines = 1;
32 meta_data = importdata(meta_data_file, '\t', 1);
33 header = {meta_data.textdata{1:headerlines,:}};
34 assertEqual(header{1}, 'ev_files');
35 obj.param_names = {header{2:end}};
36 31
37 % read header again to skip it
38 fid = fopen(meta_data_file);
39 textscan(fid, '%s', 1, 'Delimiter','\n');
40
41 % read actual meta_data
42 format_string = repmat('%s ',[1,3]);
43 meta_data = textscan(fid, format_string,'Delimiter','\t');
44 ev_files = meta_data{1};
45 for k=1:length(obj.param_names)
46 params{k} = cellfun(@str2num, meta_data{k+1});
32 function cellarray = for_each_evaluation(obj, fieldname, varargin)
33 if length(varargin) > 0
34 assert(length(varargin)==1);
35 index = varargin{1};
36 get_element = @(array)array(index);
37 else
38 get_element = @(x) x;
47 39 end end
40 get_field = @(ev)get_element(getfield(ev, fieldname));
48 41
49 % sort by first param, second param etc
50 [params, sort_order] = sortrows([params{:}]);
51 ev_files = {ev_files{sort_order}};
52 evaluations_no = numel(ev_files)
53
54 if length(obj.param_names) == 1
55 obj.params = {params};
56 obj.ev_files = ev_files;
57 elseif length(obj.param_names) == 2
58 % attempt to reshape by first column
59 param1_value_no = numel(unique(params(:,1)));
60 assert(mod(evaluations_no, param1_value_no)==0,...
61 'number of evaluations per value of parameter 1 seems to be non-uniform.');
62 dimensions = [evaluations_no/param1_value_no, param1_value_no]
63 obj.params{1} = reshape(params(:,1), dimensions)
64 obj.params{2} = reshape(params(:,2), dimensions)
65 obj.ev_files = reshape(ev_files, dimensions);
66 end
67 end
42 cellarray = cell(obj.dimensions);
43 for k=1:obj.evaluations_no
44 cellarray{k} = get_field(obj.evaluations{k});
45 end
46 end
68 47
69 48 %% GETTERS %% GETTERS
70 49 function dimensions = get.dimensions(obj) function dimensions = get.dimensions(obj)
 
... ... classdef meta_ev < class_conveniences
73 52 function evaluations_no = get.evaluations_no(obj) function evaluations_no = get.evaluations_no(obj)
74 53 evaluations_no = numel(obj.ev_files); evaluations_no = numel(obj.ev_files);
75 54 end end
55 function tracepairs_no = get.tracepairs_no(obj)
56 tracepairs_no = unique(cell2mat(obj.for_each_evaluation('tracepairs_no')));
57 assert(length(tracepairs_no)==1,...
58 'Evaluations do not seem to all have the same number of trace pairs.');
59 end
60 function opt_logneg_corrected = get.opt_logneg_corrected(obj)
61 opt_logneg_corrected = cell([1, obj.tracepairs_no]);
62 for k=1:obj.tracepairs_no
63 opt_logneg_corrected{k} = cell2mat(obj.for_each_evaluation('opt_logneg_corrected', k));
64 end
65 end
66 function opt_pulse_gammas = get.opt_pulse_gammas(obj)
67 opt_pulse_gammas = cell([1, obj.tracepairs_no]);
68 for k=1:obj.tracepairs_no
69 opt_pulse_gammas{k} = cell2mat(obj.for_each_evaluation('opt_pulse_gammas', k));
70 end
71 end
76 72 end end
77 73
78 74 end end
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