/** * If the given feature can be added directly to this Entry, then return it, otherwise create and * return a new feature of the appropriate type. * * @param copy if true then always new a new copy of the Feature. */ protected Object makeNativeFeature(final Feature feature, final boolean copy) { if (!copy && (feature instanceof EmblStreamFeature && this instanceof EmblDocumentEntry || feature instanceof GenbankStreamFeature && this instanceof GenbankDocumentEntry)) { return (PublicDBStreamFeature) feature; } else { try { if (feature instanceof GFFStreamFeature) return mapGffToNativeFeature(feature); else if (this instanceof EmblDocumentEntry) return new EmblStreamFeature(feature); else return new GenbankStreamFeature(feature); } catch (NullPointerException npe) { System.err.println(((uk.ac.sanger.artemis.Feature) feature.getUserData()).getIDString()); throw npe; } } }
/** * 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)")); }