private String parseSNVCluster(String line, double[] centroid, ArrayList<Integer> members) {	
		// parse the entry fields
		String[] entryParts = line.split("\t");
		int numFields = 2;
		if(entryParts.length != (numFields + numSamples)) {
			returnInputFileFormatError("Expecting " + numFields + " fields and " + numSamples + " samples based on the SSNV file", line);
		}
		
		String profile = entryParts[0].trim();
		if(profile.length() != numSamples) {
			returnInputFileFormatError("Cluster presence profile " + profile + " length does not match the number of input samples", line);
		}
		for(int i = 0; i < numSamples; i++) {
			try {
				centroid[i] = Double.parseDouble(entryParts[i + 1]);
			} catch (NumberFormatException e) {
				returnInputFileFormatError("Cluster centroid VAF value " + entryParts[i + 1], line);
			}
		}
		
		String[] snvEntries = entryParts[numSamples + 1].split(",");
		if(snvEntries.length == 0) {
			returnInputFileFormatError("Cluster SSNV list is empty or malformated (SNVs should be separated by commas)", line);
		}
		
		for(String s : snvEntries) {
			try {
				int snvId = Integer.parseInt(s.trim());
				members.add(snvId);
			} catch (NumberFormatException e) {
				returnInputFileFormatError("SSNV member entry " + s.trim() + " is not a valid number ", line);
			}
		}
		return profile;
	}