import java.io.*;
import java.util.*;

//This class prints the cluster and norm for each node
//

class VectorPrinter
{
String edgelocation;
String clusterlocation;

 public static void main(String args[])
  {
	//Read edge and cluster lists
	EdgeReader edgereader = new EdgeReader("UndirGraph.net");//INSERT EDGE FILE HERE (FORMAT FOR CLUSTER PROGRAM)
	Map edges = edgereader.getUndirectedEdgeList();
//System.out.println("Read edge file. Got undirected map.");
	ReadClusterList clusterreader = new ReadClusterList();
	Map clusterMapping = clusterreader.getClusterMap("outUndir.txt");//INSERT CLUSTER FILE HERE (OUTPUT OF CLUSTER PROGRAM)
//System.out.println("Read cluster file. Got cluster map.");
	//Calculate membership Vectors
	MembershipCalculator mbrshpCalc = new MembershipCalculator();
	Map membershipVectors = mbrshpCalc.getMembershipInfo(edges, clusterMapping);
//System.out.println("Calculating membership for given edge + cluster maps. Assumed correct from previous testing.");


	try	{
      		//create file 
      		FileWriter fstream = new FileWriter("Membership Lists.txt");
      		BufferedWriter out = new BufferedWriter(fstream);
		Set nodeSet = membershipVectors.keySet();
		Iterator nodeIterator = nodeSet.iterator();
    
    		//print node and associated norm
		while (nodeIterator.hasNext()) 
		{
      		Integer node = (Integer)nodeIterator.next();//get next node in nodeSet
		Map nodeVector = (Map)membershipVectors.get(node);//get node's vector Map
      		String nonzero = "Nonzero Memberships: ";
		Set positions = nodeVector.keySet(); //get nonzero positions of this vector
		Iterator posIterator = positions.iterator();
		while (posIterator.hasNext())
		{
			Integer posInt = (Integer)posIterator.next();//find next nonzero position
			Double membership = (Double)nodeVector.get(posInt);//get membership at this position
			nonzero = nonzero + membership + "(Cluster " + posInt + ") ";
		}
      		
		out.write("Node: " + node + " " + nonzero + "\n");
//System.out.println("Added following to file: " + node + " " + norm);
    		}
    	out.close();
    	}catch (Exception e){//Catch exception if any
    	System.err.println("Error: " + e.getMessage());
    	}


  }



}