@Override public int getLength() { return Math.abs(this.getBioEnd() - this.getBioBegin()) + 1; }
/** * Need a parent gene sequence and the bioBegin and bioEnd. An Exon sequence doesn't actually imply what the * protein coding sequence will be. This is a little difficult to model and have it make sense. * A gene has a collection of Exon and Intron sequences where the Exon sequences will join up. A gene * sequences has a collection of different possible isoform proteins based on the transcription rules. * A TranscriptionSequence will contain CDSSequence where the CDSSequence will be contained in the ExonSequence. * Thus a ExonSequence is the union of overlapping CDSSequences. * @param parentGeneSequence * @param bioBegin * @param bioEnd */ public ExonSequence(GeneSequence parentGeneSequence, int bioBegin, int bioEnd) { this.setParentSequence(parentGeneSequence); setBioBegin(bioBegin); setBioEnd(bioEnd); }
/** * Add an ExonSequence mainly used to mark as a feature * @param accession * @param begin * @param end * @return exon sequence */ public ExonSequence addExon(AccessionID accession, int begin, int end) throws Exception { if (exonSequenceHashMap.containsKey(accession.getID())) { throw new Exception("Duplicate accesion id " + accession.getID()); } ExonSequence exonSequence = new ExonSequence(this, begin, end); //sense should be the same as parent exonSequence.setAccession(accession); exonSequenceList.add(exonSequence); exonSequenceHashMap.put(accession.getID(), exonSequence); return exonSequence; }
@Override public int compare(ExonSequence o1, ExonSequence o2) { return o1.getBioBegin() - o2.getBioBegin(); }
/** * Remove the exon sequence * @param accession * @return exon sequence */ public ExonSequence removeExon(String accession) { for (ExonSequence exonSequence : exonSequenceList) { if (exonSequence.getAccession().getID().equals(accession)) { exonSequenceList.remove(exonSequence); exonSequenceHashMap.remove(accession); // we now have a new gap which creates an intron intronSequenceList.clear(); intronSequenceHashMap.clear(); intronAdded = false; try{ addIntronsUsingExons(); } catch(Exception e){ logger.error("Remove Exon validate() error " + e.getMessage()); } return exonSequence; } } return null; }
/** * Add an ExonSequence mainly used to mark as a feature * @param accession * @param begin * @param end * @return exon sequence */ public ExonSequence addExon(AccessionID accession, int begin, int end) throws Exception { if (exonSequenceHashMap.containsKey(accession.getID())) { throw new Exception("Duplicate accesion id " + accession.getID()); } ExonSequence exonSequence = new ExonSequence(this, begin, end); //sense should be the same as parent exonSequence.setAccession(accession); exonSequenceList.add(exonSequence); exonSequenceHashMap.put(accession.getID(), exonSequence); return exonSequence; }
@Override public int compare(ExonSequence o1, ExonSequence o2) { return o1.getBioBegin() - o2.getBioBegin(); }
/** * Remove the exon sequence * @param accession * @return exon sequence */ public ExonSequence removeExon(String accession) { for (ExonSequence exonSequence : exonSequenceList) { if (exonSequence.getAccession().getID().equals(accession)) { exonSequenceList.remove(exonSequence); exonSequenceHashMap.remove(accession); // we now have a new gap which creates an intron intronSequenceList.clear(); intronSequenceHashMap.clear(); intronAdded = false; try{ addIntronsUsingExons(); } catch(Exception e){ logger.error("Remove Exon validate() error " + e.getMessage()); } return exonSequence; } } return null; }
@Override public int getLength() { return Math.abs(this.getBioEnd() - this.getBioBegin()) + 1; }
/** * Need a parent gene sequence and the bioBegin and bioEnd. An Exon sequence doesn't actually imply what the * protein coding sequence will be. This is a little difficult to model and have it make sense. * A gene has a collection of Exon and Intron sequences where the Exon sequences will join up. A gene * sequences has a collection of different possible isoform proteins based on the transcription rules. * A TranscriptionSequence will contain CDSSequence where the CDSSequence will be contained in the ExonSequence. * Thus a ExonSequence is the union of overlapping CDSSequences. * @param parentGeneSequence * @param bioBegin * @param bioEnd */ public ExonSequence(GeneSequence parentGeneSequence, int bioBegin, int bioEnd) { this.setParentSequence(parentGeneSequence); setBioBegin(bioBegin); setBioEnd(bioEnd); }
int featureBioEnd = 0; if (sequence.getStrand() != Strand.NEGATIVE) { featureBioBegin = exonSequence.getBioBegin() - geneBioBegin; featureBioEnd = exonSequence.getBioEnd() - geneBioBegin; } else { featureBioBegin = geneBioEnd - exonSequence.getBioEnd(); featureBioEnd = geneBioEnd - exonSequence.getBioBegin(); logger.warn("Bad Feature, Accession: {}, Sequence Strand: {}, Gene Begin: {}, Gene End: {}, Exon Begin: {}, Exon End: {}", sequence.getAccession().toString(), sequence.getStrand(), geneBioBegin, geneBioEnd, exonSequence.getBioBegin(), exonSequence.getBioEnd()); } else { for (int i = featureBioBegin; i <= featureBioEnd; i++) {
int featureBioEnd = 0; if (sequence.getStrand() != Strand.NEGATIVE) { featureBioBegin = exonSequence.getBioBegin() - geneBioBegin; featureBioEnd = exonSequence.getBioEnd() - geneBioBegin; } else { featureBioBegin = geneBioEnd - exonSequence.getBioEnd(); featureBioEnd = geneBioEnd - exonSequence.getBioBegin(); logger.warn("Bad Feature, Accession: {}, Sequence Strand: {}, Gene Begin: {}, Gene End: {}, Exon Begin: {}, Exon End: {}", sequence.getAccession().toString(), sequence.getStrand(), geneBioBegin, geneBioEnd, exonSequence.getBioBegin(), exonSequence.getBioEnd()); } else { for (int i = featureBioBegin; i <= featureBioEnd; i++) {
ExonSequence exon1 = exonSequenceList.get(i); ExonSequence exon2 = exonSequenceList.get(i + 1); this.addIntron(new AccessionID(this.getAccession().getID() + "-" + "intron" + intronIndex), exon1.getBioEnd() - shift, exon2.getBioBegin() + shift); intronIndex++;
ExonSequence exon1 = exonSequenceList.get(i); ExonSequence exon2 = exonSequenceList.get(i + 1); this.addIntron(new AccessionID(this.getAccession().getID() + "-" + "intron" + intronIndex), exon1.getBioEnd() - shift, exon2.getBioBegin() + shift); intronIndex++;