about summary refs log tree commit diff
path: root/sourcecodes/parameter_learning/modifyEdges.m
diff options
context:
space:
mode:
authorziejd22021-02-24 14:36:59 -0600
committerziejd22021-02-24 14:36:59 -0600
commit25b843f6bbacb1937bdb960777b73acbece64115 (patch)
tree88645b9d1d8a0eea19d7229555bf8805571bc8b7 /sourcecodes/parameter_learning/modifyEdges.m
parent33cedf36248f616aa37d1462c69a4a3058a5d92e (diff)
downloadBNW-25b843f6bbacb1937bdb960777b73acbece64115.tar.gz
GENENET8 update
Diffstat (limited to 'sourcecodes/parameter_learning/modifyEdges.m')
-rw-r--r--sourcecodes/parameter_learning/modifyEdges.m179
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