All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snpeff.vcf.VcfConsequence Maven / Gradle / Ivy

The newest version!
package org.snpeff.vcf;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.snpeff.util.Gpr;

/**
 * An 'CSQ' entry in a vcf line ('Consequence' from ENSEMBL's VEP)
 *
 * Format:
 * ##INFO=
 *
 * @author pablocingolani
 */
public class VcfConsequence {

	public static final String VCF_INFO_CSQ_NAME = "CSQ";

	VcfConsequenceHeader vcfConsequenceHeader;
	Map name2value;

	public static List parse(VcfConsequenceHeader vcfConsequenceHeader, String csqString) {
		List list = new ArrayList();

		// Sanity check
		if (csqString == null || csqString.isEmpty()) return list;

		// Remove name, keep value
		int idx = csqString.indexOf('=');
		if (idx >= 0) {
			if (csqString.startsWith("CSQ=")) throw new RuntimeException("String does not start with 'CSQ=', this is not a CSQ field: " + csqString);
			csqString = csqString.substring(idx);
		}

		// Add all CSQ entries
		for (String csq : csqString.split(","))
			list.add(new VcfConsequence(vcfConsequenceHeader, csq));

		return list;
	}

	public static List parse(VcfConsequenceHeader vcfConsequenceHeader, VcfEntry ve) {
		return parse(vcfConsequenceHeader, ve.getInfo(VCF_INFO_CSQ_NAME));
	}

	public VcfConsequence(VcfConsequenceHeader vcfConsequenceHeader, String csqString) {
		this.vcfConsequenceHeader = vcfConsequenceHeader;
		parseSingle(csqString);
	}

	public String get(String fieldName) {
		return name2value.get(fieldName);
	}

	public String getConsequence() {
		return get("Consequence");
	}

	public String getFeature() {
		return get("Feature");
	}

	public String getHgvsDna() {
		return get("HGVSc");
	}

	public String getHgvsProt() {
		return get("HGVSp");
	}

	/**
	 * Parse a single entry in a CSQ (usually CSQs have multiple entries)
	 */
	void parseSingle(String csqString) {
		try {
			String fieldNames[] = vcfConsequenceHeader.getFieldNames();
			name2value = new HashMap<>();

			String fieldValues[] = csqString.split("\\|", -1);
			for (int i = 0; i < fieldValues.length; i++)
				name2value.put(fieldNames[i], fieldValues[i]);

		} catch (Exception e) {
			Gpr.debug("Error parsing\n\tCSQ string: " + csqString);
			throw new RuntimeException(e);
		}
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		String fieldNames[] = vcfConsequenceHeader.getFieldNames();
		for (int i = 0; i < fieldNames.length; i++) {
			if (sb.length() > 0) sb.append(", ");
			sb.append(fieldNames[i] + ": " + get(fieldNames[i]));
		}
		return sb.toString();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy