コード例 #1
0
  /**
   * Change the stop_codon_redefined_as_selenocysteine SO qualifier to the transl_except EMBL
   * qualifier.
   *
   * @param qualifiers
   * @param feature
   */
  private void handleSelenocysteine(QualifierVector qualifiers, Feature feature) {
    if (!feature.getKey().getKeyString().equals(DatabaseDocument.EXONMODEL)) return;
    qualifiers.removeQualifierByName("stop_codon_redefined_as_selenocysteine");

    uk.ac.sanger.artemis.Feature f = ((uk.ac.sanger.artemis.Feature) feature.getUserData());

    int translatedBasePosion = 0;
    String aa = f.getTranslation().toString();
    for (int i = 0; i < aa.length(); i++) {
      if (AminoAcidSequence.isStopCodon(aa.charAt(i))) {
        translatedBasePosion = i * 3;
        break;
      }
    }

    FeatureSegmentVector segments = f.getSegments();
    int nbases = 0;
    int sequenceloc = 0;
    for (int i = 0; i < segments.size(); i++) {
      int seglen = segments.elementAt(i).getBases().length();
      if (nbases + seglen > translatedBasePosion) {
        Bases bases = f.getStrand().getBases();
        sequenceloc =
            segments.elementAt(i).getStart().getPosition() + (translatedBasePosion - nbases);

        if (!f.isForwardFeature()) sequenceloc = bases.getComplementPosition(sequenceloc);
      }
      nbases += seglen;
    }

    String pos = "";
    if (f.isForwardFeature()) pos = sequenceloc + ".." + (sequenceloc + 2);
    else pos = "complement(" + (sequenceloc - 2) + ".." + sequenceloc + ")";

    qualifiers.add(new Qualifier("transl_except", "(pos:" + pos + ",aa:Sec)"));
  }