From 2308e5bfccb88d600b2c6fa91ab21f0f1406088a Mon Sep 17 00:00:00 2001
From: KatolaZ <katolaz@yahoo.it>
Date: Wed, 13 Apr 2016 14:35:25 +0100
Subject: new version of cartography_from_layers in C

---
 c/cartography_from_layers.c | 66 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 c/cartography_from_layers.c

(limited to 'c')

diff --git a/c/cartography_from_layers.c b/c/cartography_from_layers.c
new file mode 100644
index 0000000..db95689
--- /dev/null
+++ b/c/cartography_from_layers.c
@@ -0,0 +1,66 @@
+/**
+ *
+ * Compute the cartography of a multiplex network (participation
+ * coefficient vs average degree) starting from the layers
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include  "utils.h"
+
+
+int main(int argc, char *argv[]){
+  
+  
+  int i, val, M;
+  unsigned int N, K, *J_slap=NULL, *r_slap=NULL;
+  unsigned int maxN;
+
+  double part;
+
+  unsigned int *k=NULL, *k2=NULL, *tmp;
+  
+  FILE *fin;
+
+  maxN = 0;
+
+  M = 0;
+  while(argc-- > 1){
+    fin = openfile_or_exit(argv[argc], "r", 17);
+    M += 1;
+    if (J_slap)
+      free(J_slap);
+    if (r_slap)
+      free(r_slap);
+    J_slap = r_slap = NULL; /* This is somehow inefficient, since we
+                               are going to reallocate that memory in
+                               a moment....*/
+    read_slap(fin, &K, &N, &J_slap, &r_slap);
+    if (N > maxN){
+      tmp = realloc(k, N * sizeof(unsigned int));
+      VALID_PTR_OR_EXIT(tmp, 7);
+      k = tmp;
+      tmp = realloc(k2, N * sizeof(unsigned int));
+      VALID_PTR_OR_EXIT(tmp, 7);
+      k2 = tmp;
+      
+      memset(k+maxN, 0, (N-maxN) * sizeof(unsigned int));
+      memset(k2+maxN, 0, (N-maxN) * sizeof(unsigned int));
+      maxN = N;
+    }
+    for(i=0; i<N; i++){
+      val = r_slap[i+1] - r_slap[i];
+      k[i] += val;
+      k2[i] += val * val;
+    }
+  }
+  
+  for(i=0; i<maxN; i++){
+    part = 1.0 * M / (M-1) * (1 - 1.0 * k2[i] / (k[i] * k[i]));
+    printf("%d %f %f %d %d\n", i, 1.0 * k[i]/M, part, k[i], k2[i]);
+  }
+}
+
-- 
cgit v1.2.3