/*****************************************************
 Amino Acid Preference Toolkit in Java
 Pathogen Project
 Department of Computer Science and Engineering
 University of South Carolina
 Columbia, SC 29208
 Contact Email: rose@cse.sc.edu
*****************************************************/

import java.io.*;
import java.util.*;

public class ValidationCombineSVMResults
{
	public static void main(String[] args) throws Exception
	{
		// args[0] = list of type :output filenames
		// args[1] = output filename
		// args[2] = number in test set



		BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]));
		String line;
		StringTokenizer tokenizer;

		Hashtable typeToFileTable;
		typeToFileTable = new Hashtable();
		while ((line = bufferedReader.readLine()) != null)
		{
			tokenizer = new StringTokenizer(line,":");
			String type = tokenizer.nextToken();
			String file = tokenizer.nextToken();

			typeToFileTable.put(type,file);
		}

		bufferedReader.close();


		int numberOfTypes = typeToFileTable.size();
		int numberTested = Integer.parseInt(args[2]);

		double[][] scoreArray = new double[numberOfTypes][numberTested];
		String[] names = new String[numberOfTypes];
		String[] winnerArray = new String[numberTested];
		


		int typeIndex = 0;
		Enumeration typeEnumeration = typeToFileTable.keys();
		while (typeEnumeration.hasMoreElements())
		{
			String type = (String)typeEnumeration.nextElement();
			String file = (String)typeToFileTable.get(type);

			bufferedReader = new BufferedReader(new FileReader(file));

			for (int i = 0; i < numberTested;i++)
			{
				scoreArray[typeIndex][i] = new Double(bufferedReader.readLine()).doubleValue();
			}
			
			bufferedReader.close();
			names[typeIndex] = type;
			typeIndex++;
		}


		PrintWriter outputWriter = new PrintWriter(new FileWriter(args[1]));
		PrintWriter scoreWriter = new PrintWriter(new FileWriter(args[1] + ".scores"));
		for (int i = 0; i < numberTested; i++)
		{
			scoreWriter.print("Sample " + i + ":");
			double maxValue = scoreArray[0][i];
			scoreWriter.print(" " + names[0] + " " + scoreArray[0][i]);
			int maxIndex = 0;
			for (int j = 1; j < numberOfTypes; j++)
			{
				double newValue = scoreArray[j][i];
				scoreWriter.print(" " + names[j] + " " + scoreArray[j][i]);
				if (newValue > maxValue)
				{
					maxValue = scoreArray[j][i];
					maxIndex = j;
				}
			}

			winnerArray[i] = names[maxIndex];
			outputWriter.println("Sample " + i + ":" + winnerArray[i]);
			scoreWriter.println();
		}

		outputWriter.flush();
		outputWriter.close();
		scoreWriter.flush();
		scoreWriter.close();




		
		
	}
}
