diff options
| author | ziejd2 | 2021-02-24 14:36:59 -0600 |
|---|---|---|
| committer | ziejd2 | 2021-02-24 14:36:59 -0600 |
| commit | 25b843f6bbacb1937bdb960777b73acbece64115 (patch) | |
| tree | 88645b9d1d8a0eea19d7229555bf8805571bc8b7 /sourcecodes/parameter_learning/modifyEdges.m | |
| parent | 33cedf36248f616aa37d1462c69a4a3058a5d92e (diff) | |
| download | BNW-25b843f6bbacb1937bdb960777b73acbece64115.tar.gz | |
GENENET8 update
Diffstat (limited to 'sourcecodes/parameter_learning/modifyEdges.m')
| -rw-r--r-- | sourcecodes/parameter_learning/modifyEdges.m | 179 |
1 files changed, 97 insertions, 82 deletions
diff --git a/sourcecodes/parameter_learning/modifyEdges.m b/sourcecodes/parameter_learning/modifyEdges.m index 2b336710..6542d9fb 100644 --- a/sourcecodes/parameter_learning/modifyEdges.m +++ b/sourcecodes/parameter_learning/modifyEdges.m @@ -2,132 +2,147 @@ function [ ] = modifyEdges( pre_old, pre_new ) % This function will allow users to add or delete edges from the network. % % Input: - % 1) pre_oldstructure_input.txt - % Original structure file. - % 2) pre_olddel_edge.txt - % A list of the edges that should be deleted. - % 3) pre_oldadd_edge.txt - % A list of the edges that should be added. + % pre_oldstructure_input.txt-- old structure file that is just used to make sure the node order is consistent + % pre_oldmodify_edge.txt-- file with network structure after modification % % Output: % pre_newstructure_input.txt-- structure file with edges added/deleted. + % pre_newstructure_input_temp.txt-- structure file with model averaging scores. + % September 16, 2020: I am only writing the file with model averaging scores + % if no edges were added to the network. % % open file for input, include error handling dfile=strcat(pre_old,'structure_input.txt'); - fin = fopen(dfile,'r'); if fin < 0 error(['Could not open ',dfile,' for input']); end -% Read in first line to get the number of nodes and the node labels. + +% open file for input, include error handling +mfile=strcat(pre_old,'modify_edge.txt'); +fin2 = fopen(mfile,'r'); +if fin2 < 0 + error(['Could not open ',mfile,' for input']); +end +% Read in first line to get the number of nodes +nnodes = str2num(fgetl(fin2)); + +% Read in first line of old structure file to get the node labels. buffer = fgetl(fin); %get header line as a string -nnodes = numel(strfind(buffer,"\t")); labels = cell(1,nnodes); for j=1:nnodes [next,buffer] = strtok(buffer); labels{j} = next; end -% Read in the edges -edges = cell(nnodes,nnodes); -for i = 1:nnodes - buffer = fgetl(fin); - for j = 1:nnodes - [next,buffer] = strtok(buffer); - edges{i,j} = next; - end +%Read in network structure information +buffer = fgetl(fin2); +buffer = buffer(2:end-1); +buffer = strrep(buffer,"\"",""); +labels2 = cell(1,nnodes); +for j=1:nnodes + [next,buffer] = strtok(buffer,","); + labels2{j} = next; end +nedges = str2num(fgetl(fin2)); +buffer = fgetl(fin2); +buffer = buffer(2:end-1); +buffer = strrep(buffer,"\"",""); +sources = cell(1,nedges); +for j=1:nedges + [next,buffer] = strtok(buffer,","); + sources{j} = str2num(next); +end -% open file with edges to be deleted -dedgefile=strcat(pre_old,'del_edge.txt'); -fin2 = fopen(dedgefile,'r'); -ndel=fskipl(fin2,Inf) - 1; -frewind(fin2); -delfrom = cell(1,ndel); -delto = cell(1,ndel); +buffer = fgetl(fin2); +buffer = buffer(2:end-1); +buffer = strrep(buffer,"\"",""); +targets = cell(1,nedges); +for j=1:nedges + [next,buffer] = strtok(buffer,","); + targets{j} = str2num(next); +end -buffer = fgetl(fin2); %get header line -for j=1:ndel - buffer = fgetl(fin2); %get line with actual variables - [next,buffer] = strtok(buffer); - delfrom{j} = next; - [next,buffer] = strtok(buffer); - delto{j} = next; +buffer = fgetl(fin2); +buffer = buffer(2:end-1); +weights = cell(1,nedges); +for j=1:nedges + [next,buffer] = strtok(buffer,","); + weights{j} = next; end -%get index of edges to delete -idel_from = []; -idel_to = []; -for j = 1:ndel - for k = 1:nnodes - if strcmp(labels{k},delfrom{j}) - idel_from = [idel_from;k]; - endif - if strcmp(labels{k},delto{j}) - idel_to = [idel_to;k]; + +%label_map is the index in "labels" that corresponds to each label in "labels2" +label_map = cell(1,nnodes); +for i = 1:nnodes + current = labels2{i}; + for j = 1:nnodes + if strcmp(current,labels{j}) + label_map{i} = j; endif end end -for i = 1:ndel - edges(idel_from(i),idel_to(i)) = "0"; -end -fclose(fin2); +edges_out = cell(nnodes,nnodes); +scores_out = cell(nnodes,nnodes); -% open file with edges to be added -aedgefile=strcat(pre_old,'add_edge.txt'); -fin3 = fopen(aedgefile,'r'); -nadd=fskipl(fin3,Inf) - 1; -frewind(fin3); +for i = 1:nedges + source_i = label_map{sources{i}}; + target_i = label_map{targets{i}}; + scores_out(source_i,target_i) = weights{i}; + edges_out(source_i,target_i) = "1"; +end -addfrom = cell(1,nadd); -addto = cell(1,nadd); -buffer = fgetl(fin3); %get header line -for j=1:nadd - buffer = fgetl(fin3); %get line with actual variables - [next,buffer] = strtok(buffer); - addfrom{j} = next; - [next,buffer] = strtok(buffer); - addto{j} = next; -end +tf = cellfun('isempty',edges_out); +edges_out(tf) = {"0"}; +scores_out(tf) = {"0"}; -%get index of edges to added -iadd_from = []; -iadd_to = []; -for j = 1:nadd - for k = 1:nnodes - if strcmp(labels{k},addfrom{j}) - iadd_from = [iadd_from;k]; - endif - if strcmp(labels{k},addto{j}) - iadd_to = [iadd_to;k]; - endif +test_score = 1; +for i=1:nnodes + for j=1:nnodes + if strcmp(scores_out{i,j},"1.1") + test_score = 0; + end end end -for i = 1:nadd - edges(iadd_from(i),iadd_to(i)) = "1"; -end - - - - -outfile = strcat(pre_new,'structure_input.txt'); +if test_score == 1 +outfile = strcat(pre_new,'structure_input_temp.txt'); fout = fopen(outfile,'w'); fprintf(fout,'%s\t',labels{1:end-1}); -fprintf(fout,'%s\n',labels{end}); +fprintf(fout,'%s\t\n',labels{end}); for i = 1:nnodes - fprintf(fout,'%s\t',edges{i,1:end-1}); - fprintf(fout,'%s\n',edges{i,end}); + fprintf(fout,'%s\t',scores_out{i,1:end-1}); + fprintf(fout,'%s\t\n',scores_out{i,end}); end fclose(fout); +end + + + +outfile2 = strcat(pre_new,'structure_input.txt'); +fout2 = fopen(outfile2,'w'); +fprintf(fout2,'%s\t',labels{1:end-1}); +fprintf(fout2,'%s\t\n',labels{end}); +for i = 1:nnodes + fprintf(fout2,'%s\t',edges_out{i,1:end-1}); + fprintf(fout2,'%s\t\n',edges_out{i,end}); +end +fclose(fout2); + + + + + + + end |
