From 6487a03362d35589c286d0660eba123a7ab00535 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Mon, 10 May 2021 11:14:04 +0000
Subject: [PATCH] Raj and Yoav session in making multiple protein species

---
 src/cluster.c |   32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/cluster.c b/src/cluster.c
index 5d05058..85907f9 100644
--- a/src/cluster.c
+++ b/src/cluster.c
@@ -39,20 +39,23 @@
 	
 	for(i=0;i<cstlist->n;i++){
 		if(cstlist->cluster[i]==NULL){
+			if(i>=n) break;
+			//printf("Have to do compacting n=%d\n ",n);
 			do{
 				n--;
 			} while(cstlist->cluster[n]==NULL && n>i);
 			cstlist->cluster[i]=cstlist->cluster[n];
 			cstlist->cluster[n]=NULL;
+			//printf("After compacting n=%d\n",n);
 		}
 	}
 	cstlist->cluster=(ts_cluster **)realloc(cstlist->cluster,n*sizeof(ts_cluster *));
-
+	cstlist->n=n;
 	return TS_SUCCESS;
 }
 
 
-ts_bool cluster_join(ts_cluster *cluster1, ts_cluster *cluster2){
+ts_bool cluster_join(ts_cluster_list *cstlist, ts_cluster *cluster1, ts_cluster *cluster2){
 	ts_cluster *master_cluster,*slave_cluster;
 	ts_uint i;
 	if(cluster1->idx<cluster2->idx){
@@ -65,8 +68,13 @@
 	for(i=0;i<slave_cluster->nvtx;i++){
 		cluster_add_vertex(master_cluster,slave_cluster->vtx[i]);
 	}
-	cluster_free(slave_cluster);
-	slave_cluster=NULL;
+	//find cluster in the list and free the location of the cluster
+	for(i=0;i<cstlist->n;i++){
+		if(cstlist->cluster[i]==slave_cluster){
+			cluster_free(slave_cluster);
+			cstlist->cluster[i]=NULL;
+		}
+	}
 	return TS_SUCCESS;
 }
 
@@ -94,8 +102,12 @@
 
 /* This is a stub function. User should check whether the vertex is clustering or not. */
 ts_bool is_clusterable(ts_vertex *vtx){
-
-return 1;
+	if(fabs(vtx->c)>1e-15){
+		return 1;
+	}
+	else {
+		return 0;
+	}
 }
 
 
@@ -108,13 +120,13 @@
 	return NULL;
 }
 
-ts_bool cluster_vertex_neighbor_check(ts_vertex *vtx){
+ts_bool cluster_vertex_neighbor_check(ts_cluster_list *cstlist, ts_vertex *vtx){
 
 	int j;
 	for(j=0;j<vtx->neigh_no;j++){
 		if(vtx->neigh[j]->cluster!=NULL){
 			if(vtx->neigh[j]->cluster!=vtx->cluster){
-				cluster_join(vtx->cluster, vtx->neigh[j]->cluster);
+				cluster_join(cstlist, vtx->cluster, vtx->neigh[j]->cluster);
 			}
 		}
 	}
@@ -131,7 +143,7 @@
 	//for each vertex
 		vtx=vesicle->vlist->vtx[i];
 		if(is_clusterable(vtx)){
-			if(vtx->cluster!=NULL){
+			if(vtx->cluster==NULL){
 				//find first neigbor with cluster index
 				cst=cluster_vertex_neighbor(vtx);
 				if(cst==NULL){
@@ -141,7 +153,7 @@
 				} else {
 					//we are added to the first cluster found
 					cluster_add_vertex(cst,vtx);
-					cluster_vertex_neighbor_check(vtx);
+					cluster_vertex_neighbor_check(cstlist, vtx);
 					cluster_list_compact(cstlist);
 				}
 

--
Gitblit v1.9.3