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:
parent
0dd40c3684
commit
d775192631
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue