private static Holder runATrial(MetaboliteClass metabolite, String phyla, OtuWrapper wrapper, List<String> keys, 
			boolean scramble) 
			throws Exception
	{
		int otuIndex = wrapper.getIndexForOtuName(phyla);
		HashMap<Integer, List<Double>> metaboliteMap = WriteTrialsForSVMLight.getMetabolites(metabolite, scramble);
		
		int halfPoint = keys.size() / 2;
		
		File trainingSetFile = new File(ConfigReader.getMicrboesVsMetabolitesDir() + File.separator + 
				"trainingSet.txt");

		deleteOrThrow(trainingSetFile);
		
		BufferedWriter writer = new BufferedWriter(new FileWriter(
								trainingSetFile));
		
		for( int x=0; x < halfPoint; x++)
		{
			int sampleIndex = wrapper.getIndexForSampleName(keys.get(x));
			writer.write( wrapper.getDataPointsNormalizedThenLogged().get(sampleIndex).get(otuIndex)+ " "  );
			
			List<Double> list = metaboliteMap.get( Integer.parseInt(keys.get(x).replace("sample", "")));
			
			for(  int y=0; y < list.size(); y++ )
			{
				boolean skip = false;
				
				if(  metabolite.equals(MetaboliteClass.METADATA) && Math.abs( list.get(y) + 1 ) < 0.0001)
					skip =true;
					
				if( ! skip)
					writer.write( (y+1) + ":" + list.get(y) + " " );
				else
					System.out.println("SKIP!!!!!!!!");
				
			}
				
			writer.write("\n");
		}
		
		writer.flush();  writer.close();
		
		File regressModel = new File(ConfigReader.getMicrboesVsMetabolitesDir() + File.separator +  
				"regressionModel");
		
		deleteOrThrow(regressModel);
		
		// train with svm_learn.exe -z r trainingSet.txt regressModel
		String[] args = new String[5];
		args[0] = ConfigReader.getSvmDir() + File.separator + "svm_learn.exe";
		args[1] = "-z";
		args[2] = "r";
		args[3] = trainingSetFile.getAbsolutePath();
		args[4] = regressModel.getAbsolutePath();
		new ProcessWrapper(args);
		
		File setToClassify = new File( 
				ConfigReader.getMicrboesVsMetabolitesDir() + File.separator + 
				"setToClassify.txt"	);
		deleteOrThrow(setToClassify);
		
		writer = new BufferedWriter(new FileWriter(setToClassify));
		
		for( int x=halfPoint; x < keys.size(); x++ ) 
		{
			writer.write(keys.get(x) + " " );
			
			List<Double> list = metaboliteMap.get(Integer.parseInt(keys.get(x).replace("sample", "")));
			
			for(  int y=0; y < list.size(); y++ )
				writer.write( (y+1) + ":" + list.get(y) + " " );
			
			writer.write("\n");
		}
		
		writer.flush(); writer.close();
		
		File svmOut = new File(ConfigReader.getMicrboesVsMetabolitesDir() + File.separator + 
				"svmOut.txt");
		
		deleteOrThrow(svmOut);
		
		// classify with svm_classify setToClassify.txt regressModel svmOut.txt
		args = new String[4];
		args[0] = ConfigReader.getSvmDir() + File.separator + "svm_classify.exe";
		args[1] = setToClassify.getAbsolutePath();
		args[2] = regressModel.getAbsolutePath();
		args[3] = svmOut.getAbsolutePath();
		new ProcessWrapper(args);
		
		BufferedReader svmOutReader = new BufferedReader(new FileReader(svmOut));
		BufferedReader classifiedReader = new BufferedReader(new FileReader(setToClassify));
		List<Double> predicted = new ArrayList<Double>();
		List<Double> actual = new ArrayList<Double>();
		
		for(String s= classifiedReader.readLine(); s != null; s = classifiedReader.readLine())
		{
			StringTokenizer sToken = new StringTokenizer(s);
			String  sample = sToken.nextToken();
			int sampleID = wrapper.getIndexForSampleName(sample);
			
			actual.add(wrapper.getDataPointsNormalizedThenLogged().get(sampleID).get(otuIndex));
			
			predicted.add(Double.parseDouble(svmOutReader.readLine()));
		}
		
		if( svmOutReader.readLine() != null)
			throw new Exception("No");

		classifiedReader.close();
		svmOutReader.close();
		
		Holder h= new Holder();
		h.actual= actual;
		h.predicted = predicted;
		return h;
		
	}