Check if MNP annotation of amino acid is dependent on the MNP, or could it be obtained through some single-base variant?

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4733 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
fromer 2010-11-24 22:38:33 +00:00
parent 0dd40c3684
commit d775192631
1 changed files with 54 additions and 31 deletions

View File

@ -569,52 +569,75 @@ public class AnnotateMNPsWalker extends RodWalker<Integer, Integer> {
private final static String ALLELE_END = "}"; private final static String ALLELE_END = "}";
private final static String CODON_INFO_DELIM = "|"; private final static String CODON_INFO_DELIM = "|";
private final static String ASSIGNMENT = ":"; private final static String ASSIGNMENT = ":";
private final static String MNP_DEPENDENT_AA = "MNPdependentAA";
private String variantCodon; private CodonFunction codonFunc;
private String variantAA;
private boolean changesAA;
private String functionalClass;
private String proteinCoordStr; private String proteinCoordStr;
private boolean MNPdependentAA;
public SingleCodonAnnotationsForAllele(String variantCodon, String refCodon, AminoAcid refAA, int codonIndex) { public SingleCodonAnnotationsForAllele(String variantCodon, String refCodon, AminoAcid refAA, int codonIndex) {
this.variantCodon = variantCodon; this.codonFunc = new CodonFunction(variantCodon, refCodon, refAA);
AminoAcid variantAA = AminoAcidTable.getEukaryoticAA(this.variantCodon); this.proteinCoordStr = "p." + refAA.getLetter() + codonIndex + codonFunc.variantAA.getLetter();
this.variantAA = variantAA.getCode();
this.changesAA = !refAA.equals(variantAA); int refCodonLength = refCodon.length();
if (codonFunc.variantCodon.length() != refCodonLength)
throw new ReviewedStingException("codonFunc.variantCodon.length() != refCodonLength, but ALREADY checked that they're both 3");
if (!this.variantCodon.equals(refCodon)) { this.MNPdependentAA = true;
if (changesAA) { for (int i = 0; i < refCodonLength; i++) {
if (variantAA.isStop()) { // Take [0,i-1] and [i+1, end] from refCodon, and i from variantCodon:
functionalClass = "nonsense"; String singleBaseChangeCodon = refCodon.substring(0, i) + variantCodon.substring(i, i+1) + refCodon.substring(i+1, refCodonLength);
} CodonFunction singleBaseChangeCodonFunc = new CodonFunction(singleBaseChangeCodon, refCodon, refAA);
else if (refAA.isStop()) { if (singleBaseChangeCodonFunc.variantAA.equals(codonFunc.variantAA)) {
functionalClass = "readthrough"; this.MNPdependentAA = false;
} break;
else {
functionalClass = "missense";
}
}
else { // the same aa:
functionalClass = "silent";
} }
} }
else { // the same codon: }
functionalClass = "no_change";
}
this.proteinCoordStr = "p." + refAA.getLetter() + codonIndex + variantAA.getLetter(); private static class CodonFunction {
private String variantCodon;
private AminoAcid variantAA;
private boolean changesAA;
private String functionalClass;
public CodonFunction(String variantCodon, String refCodon, AminoAcid refAA) {
this.variantCodon = variantCodon;
this.variantAA = AminoAcidTable.getEukaryoticAA(this.variantCodon);
this.changesAA = !refAA.equals(variantAA);
if (!this.variantCodon.equals(refCodon)) {
if (changesAA) {
if (variantAA.isStop()) {
functionalClass = "nonsense";
}
else if (refAA.isStop()) {
functionalClass = "readthrough";
}
else {
functionalClass = "missense";
}
}
else { // the same aa:
functionalClass = "silent";
}
}
else { // the same codon:
functionalClass = "no_change";
}
}
} }
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(ALLELE_START); sb.append(ALLELE_START);
sb.append(REFSEQ_VARIANT_CODON).append(ASSIGNMENT).append(variantCodon).append(CODON_INFO_DELIM); sb.append(REFSEQ_VARIANT_CODON).append(ASSIGNMENT).append(codonFunc.variantCodon).append(CODON_INFO_DELIM);
sb.append(REFSEQ_VARIANT_AA).append(ASSIGNMENT).append(variantAA).append(CODON_INFO_DELIM); sb.append(REFSEQ_VARIANT_AA).append(ASSIGNMENT).append(codonFunc.variantAA.getCode()).append(CODON_INFO_DELIM);
sb.append(REFSEQ_CHANGES_AA).append(ASSIGNMENT).append(changesAA).append(CODON_INFO_DELIM); sb.append(REFSEQ_CHANGES_AA).append(ASSIGNMENT).append(codonFunc.changesAA).append(CODON_INFO_DELIM);
sb.append(REFSEQ_FUNCTIONAL_CLASS).append(ASSIGNMENT).append(functionalClass).append(CODON_INFO_DELIM); sb.append(REFSEQ_FUNCTIONAL_CLASS).append(ASSIGNMENT).append(codonFunc.functionalClass).append(CODON_INFO_DELIM);
sb.append(REFSEQ_PROTEIN_COORD_DESCRIPTION).append(ASSIGNMENT).append(proteinCoordStr); sb.append(REFSEQ_PROTEIN_COORD_DESCRIPTION).append(ASSIGNMENT).append(proteinCoordStr).append(CODON_INFO_DELIM);
sb.append(MNP_DEPENDENT_AA).append(ASSIGNMENT).append(MNPdependentAA);
sb.append(ALLELE_END); sb.append(ALLELE_END);
return sb.toString(); return sb.toString();