From: Suzanna L. <su...@us...> - 2002-02-16 21:27:59
|
Update of /cvsroot/gmod/apollo/src/java/apollo/datamodel In directory usw-pr-cvs1:/tmp/cvs-serv30776/apollo/datamodel Modified Files: ExpandableFeatureSet.java FeaturePair.java FeatureSet.java FeatureSetI.java SeqFeature.java SeqFeatureI.java StrandedFeatureSet.java Transcript.java Log Message: give curators the ability to override strand and flip selected results to the opposite strand name changes and id changes in fly name adapter fixed bug with null pointer when comparing regions from history file Index: ExpandableFeatureSet.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/ExpandableFeatureSet.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ExpandableFeatureSet.java 11 Oct 2001 20:10:27 -0000 1.16 --- ExpandableFeatureSet.java 16 Feb 2002 21:27:56 -0000 1.17 *************** *** 149,160 **** for (int i=0; i < fset.size(); i++) { SeqFeatureI sf2 = fset.getFeatureAt(i); ! if (sf2.getRefId() == null) { ! sf2.setRefId("NoRefId"); ! } ! if (ghash.containsKey(sf2.getRefId())) { ! FeatureSetI tmp = (FeatureSetI)ghash.get(sf2.getRefId()); tmp.addFeature(sf2); sf2.setRefFeature(tmp); ! ghash.put(sf2.getRefId(),tmp); } else { ExpandableFeatureSet tmp = new ExpandableFeatureSet(); --- 149,159 ---- for (int i=0; i < fset.size(); i++) { SeqFeatureI sf2 = fset.getFeatureAt(i); ! String refId = (sf2.getRefId() == null ? "NoRefId" : sf2.getRefId()); ! ! if (ghash.containsKey(refId)) { ! FeatureSetI tmp = (FeatureSetI)ghash.get(refId); tmp.addFeature(sf2); sf2.setRefFeature(tmp); ! ghash.put(refId,tmp); } else { ExpandableFeatureSet tmp = new ExpandableFeatureSet(); *************** *** 162,166 **** tmp.addFeature(sf2); sf2.setRefFeature(tmp); ! ghash.put(sf2.getRefId(),tmp); } --- 161,165 ---- tmp.addFeature(sf2); sf2.setRefFeature(tmp); ! ghash.put(refId,tmp); } Index: FeaturePair.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/FeaturePair.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** FeaturePair.java 28 Aug 2001 21:53:12 -0000 1.11 --- FeaturePair.java 16 Feb 2002 21:27:56 -0000 1.12 *************** *** 123,126 **** --- 123,135 ---- return f1.getProgramName(); } + + public void reverseComplement () { + f1.reverseComplement(); + } + + public void flipFlop () { + f1.flipFlop(); + } + public String getSequence() { return f1.getSequence(); *************** *** 134,140 **** public String getRefId() { return f1.getRefId(); - } - public void setRefId(String id) { - f1.setRefId(id); } public SeqFeatureI getRefFeature() { --- 143,146 ---- Index: FeatureSet.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/FeatureSet.java,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** FeatureSet.java 22 Jan 2002 20:41:19 -0000 1.40 --- FeatureSet.java 16 Feb 2002 21:27:56 -0000 1.41 *************** *** 6,12 **** public class FeatureSet extends SeqFeature implements FeatureSetI { ! protected Vector features = new Vector(); ! protected boolean holder = false; ! protected SequenceI alignedSeq; // both of these are relative to the genomic, not the transcript --- 6,12 ---- public class FeatureSet extends SeqFeature implements FeatureSetI { ! protected Vector features = new Vector(); ! protected boolean holder = false; ! protected SequenceI alignedSeq; // both of these are relative to the genomic, not the transcript *************** *** 15,162 **** int translation_end = 0; ! public FeatureSet() { ! setStart( 100000000L); ! setEnd (-100000000L); ! } ! public FeatureSet(FeatureSetI fs) { ! super (fs); ! } ! public void setHolder(boolean state) { ! holder = state; ! } ! public boolean isHolder() { ! return holder; ! } ! public int size() { ! return features.size(); ! } ! public void addFeature(SeqFeatureI feature) { ! if (feature == null) { ! throw new NullPointerException("Can't add null feature"); ! } ! if (!features.contains (feature)) { features.addElement(feature); ! feature.setRefFeature (this); ! feature.setRefId (getId()); } ! // Set the reference sequence here ! if (getRefSequence() != null) { ! feature.setRefSequence(getRefSequence()); ! } ! if (feature.getLow() < low) { ! setLow(feature.getLow()); } ! ! if (feature.getHigh() > high) { ! setHigh(feature.getHigh()); } - } ! public void insertFeatureAt(int i,SeqFeatureI sf) { ! if(sf == null) { ! throw new NullPointerException( ! "Can't insert feature at " + i + " as null" ! ); ! } ! features.insertElementAt(sf, i); ! sf.setRefFeature (this); ! sf.setRefId (getId()); ! _setEnds(); } ! public void deleteFeature(SeqFeatureI feature) { ! if(feature == null) { ! throw new NullPointerException("Can't remove null feature"); ! } ! if (features.contains(feature)) { ! features.removeElement(feature); ! _setEnds(); ! } } ! ! public SeqFeatureI deleteFeatureAt(int i) { ! if (i < size()) { ! SeqFeatureI sf = getFeatureAt(i); ! features.removeElementAt(i); ! _setEnds(); ! return sf; ! } ! return null; } ! ! public SeqFeatureI getFeatureAt(int i) { ! return (SeqFeatureI)features.elementAt(i); } ! public void setFeatureAt(int i,SeqFeatureI sf) { ! if(sf == null) { ! throw new NullPointerException( ! "Can't set feature at " + i + " to null" ! ); ! } ! features.setElementAt(sf,i); ! _setEnds(); } ! public Vector getFeatures() { ! return features; ! } ! public Vector getFeatures(long low, long high) { ! Vector tmp = new Vector(); ! for (int i = 0; i < size() ;i++) { ! SeqFeatureI sf = getFeatureAt(i); ! if (sf.getHigh() >= low && sf.getLow() <= high) { ! tmp.addElement(sf); ! } ! } ! return tmp; } ! // SeqFeatureI methods ! public int getStrand() { ! if (size() > 0) { ! return getFeatureAt(0).getStrand(); ! } else { ! // Changed to return strand so we can have ! // a stranded empty feature set ! return strand; } } ! public String getName() { ! if (name.equals (SeqFeatureI.NO_NAME) && (size() > 0)) { ! return getFeatureAt(0).getName(); ! } ! else { ! return name; ! } } ! // Internal methods ! public void _setEnds() { ! low = 100000000L; ! high = -100000000L; ! ! for (int i=0; i< size(); i++) { ! if (getFeatureAt(i).getLow() < low) { ! low = getFeatureAt(i).getLow(); ! } ! ! if (getFeatureAt(i).getHigh() > high) { ! high = getFeatureAt(i).getHigh(); ! } } } --- 15,246 ---- int translation_end = 0; ! public FeatureSet() { ! setStart( 100000000L); ! setEnd (-100000000L); ! } ! public FeatureSet(FeatureSetI fs) { ! super (fs); ! } ! public void setHolder(boolean state) { ! holder = state; ! } ! public boolean isHolder() { ! return holder; ! } ! public int size() { ! return features.size(); ! } ! public void addFeature(SeqFeatureI feature) { ! if (feature == null) { ! throw new NullPointerException("Can't add null feature"); ! } ! if (!features.contains (feature)) ! { ! features.addElement(feature); ! if (features.size() == 0) ! { ! /* first time through, just use them */ ! setStart (feature.getStart()); ! setEnd (feature.getEnd()); ! } ! else ! { ! /* this does assume that all of the spans are in the same ! direction - issue a warning if not? */ ! /* something that is one base long doesn't have a ! direction, but its okay to add in any case */ ! adjustEdges (feature); ! } ! ! int index = 0; ! boolean located = false; ! SeqFeatureI check_span = null; ! SeqFeatureI prev_span = null; ! while (index < size() && ! located) ! { ! check_span = getFeatureAt(index); ! if (feature.getStrand() == 1) ! { ! located = check_span.getStart() > feature.getStart(); ! } ! else ! { ! located = check_span.getStart() < feature.getStart(); ! } ! if (!located) ! { ! index++; ! prev_span = check_span; ! } ! } ! ! if (index == size()) { features.addElement(feature); ! check_span = null; } + else + { + features.insertElementAt (feature, index); + } + feature.setRefFeature (this); + } ! // Set the reference sequence here ! if (getRefSequence() != null) { ! feature.setRefSequence(getRefSequence()); ! } ! } ! public void adjustEdges () { ! setLow (100000000L); ! setHigh(-100000000L); ! for (int i=0; i< size(); i++) { ! adjustEdges (getFeatureAt (i)); ! } ! } ! ! // Internal methods ! private void adjustEdges (SeqFeatureI span) ! { ! if ((getStrand() == span.getStrand()) || ! (span.length() == 1)) ! { ! if (span.getLow() < getLow()) { ! setLow(span.getLow()); ! } ! if (span.getHigh() > high) { ! setHigh(span.getHigh()); ! } } ! else ! { ! try ! { ! throw new Exception (("!! Spans directions don't agree.\n " + ! getStart() + "," + getEnd() + " - " + ! span.getStart() + "," + span.getEnd())); ! } ! catch (Exception e) ! { ! e.printStackTrace(); ! System.out.println(e.getMessage()); ! } ! return; } } ! public void insertFeatureAt(int i,SeqFeatureI sf) { ! if(sf == null) { ! throw new NullPointerException( ! "Can't insert feature at " + i + " as null" ! ); } + features.insertElementAt(sf, i); + sf.setRefFeature (this); + adjustEdges(); + } ! public void deleteFeature(SeqFeatureI feature) { ! if(feature == null) { ! throw new NullPointerException("Can't remove null feature"); } ! if (features.contains(feature)) { ! features.removeElement(feature); ! adjustEdges(); } ! } ! ! public SeqFeatureI deleteFeatureAt(int i) { ! if (i < size()) { ! SeqFeatureI sf = getFeatureAt(i); ! features.removeElementAt(i); ! adjustEdges(); ! return sf; } + return null; + } ! public SeqFeatureI getFeatureAt(int i) { ! return (SeqFeatureI)features.elementAt(i); ! } ! public void setFeatureAt(int i,SeqFeatureI sf) { ! if(sf == null) { ! throw new NullPointerException( ! "Can't set feature at " + i + " to null" ! ); } + features.setElementAt(sf,i); + adjustEdges(); + } ! public Vector getFeatures() { ! return features; ! } ! public Vector getFeatures(long low, long high) { ! Vector tmp = new Vector(); ! for (int i = 0; i < size() ;i++) { ! SeqFeatureI sf = getFeatureAt(i); ! if (sf.getHigh() >= low && sf.getLow() <= high) { ! tmp.addElement(sf); ! } } + return tmp; + } ! public void reverseComplement () ! { ! SeqFeatureI span; ! for (int i = 0; i < size(); i++) { ! span = (SeqFeatureI) getFeatureAt(i); ! span.reverseComplement(); ! } ! sort(); ! } ! ! public void flipFlop () ! { ! Vector temp_spans = (Vector) getFeatures().clone(); ! while (size() > 0) ! { ! SeqFeatureI span = getFeatureAt(0); ! deleteFeature (span); } + while (temp_spans.size() > 0) + { + SeqFeatureI span = (SeqFeatureI) temp_spans.elementAt(0); + temp_spans.removeElement (span); + span.flipFlop(); + addFeature (span); + } + setStrand (getStrand() * -1); } ! // SeqFeatureI methods ! public int getStrand() { ! if (size() > 0) { ! return getFeatureAt(0).getStrand(); ! } else { ! // Changed to return strand so we can have ! // a stranded empty feature set ! return strand; } + } ! public String getName() { ! if (name.equals (SeqFeatureI.NO_NAME) && (size() > 0)) { ! return getFeatureAt(0).getName(); ! } ! else { ! return name; } } *************** *** 192,201 **** } } ! if ((match == null) && (sf instanceof FeatureSetI)) ! { ! SeqFeatureI result = ((FeatureSetI) sf).findFeatureByHitName(hname); ! if (result != null) ! match = result; ! } } } --- 276,285 ---- } } ! if ((match == null) && (sf instanceof FeatureSetI)) ! { ! SeqFeatureI result = ((FeatureSetI) sf).findFeatureByHitName(hname); ! if (result != null) ! match = result; ! } } } *************** *** 229,257 **** public SeqFeatureI findFeature(SeqFeatureI sf) { ! SeqFeatureI found = null; ! int i=0; ! while (found == null && i < size()) { ! if (getFeatureAt(i) instanceof FeatureSetI) { ! if (sf == getFeatureAt(i)) { ! return sf; ! } else { ! found = ((FeatureSetI)getFeatureAt(i)).findFeature(sf); ! if (found != null) { ! return found; ! } else { ! i++; ! } ! } ! } else { ! if (sf == getFeatureAt(i)) { ! return sf; ! } else { ! return null; ! } ! } } ! return found; } public void setRefSequence(SequenceI seq) { --- 313,341 ---- public SeqFeatureI findFeature(SeqFeatureI sf) { ! SeqFeatureI found = null; ! int i=0; ! while (found == null && i < size()) { ! if (getFeatureAt(i) instanceof FeatureSetI) { ! if (sf == getFeatureAt(i)) { ! return sf; ! } else { ! found = ((FeatureSetI)getFeatureAt(i)).findFeature(sf); ! if (found != null) { ! return found; ! } else { ! i++; ! } } ! } else { ! if (sf == getFeatureAt(i)) { ! return sf; ! } else { ! return null; ! } ! } } + return found; + } public void setRefSequence(SequenceI seq) { *************** *** 260,267 **** // for all its sub features if (features != null) { ! for (int i=0; i < features.size(); i++) ! { ! ((SeqFeatureI) features.elementAt(i)).setRefSequence(seq); ! } } } --- 344,351 ---- // for all its sub features if (features != null) { ! for (int i=0; i < features.size(); i++) ! { ! ((SeqFeatureI) features.elementAt(i)).setRefSequence(seq); ! } } } *************** *** 285,365 **** } ! // This method counts SeqFeatures in this set. FeatureSets are NOT ! // included in the count. ! public int numChildFeatures() { ! int numFeat = 0; ! for (int i=0; i<size(); i++) { ! SeqFeatureI feat = getFeatureAt(i); ! if (feat instanceof FeatureSetI) { ! numFeat += ((FeatureSetI)feat).numChildFeatures(); ! } else { ! numFeat++; ! } ! } ! return numFeat; } ! // This method determines if there are any child SeqFeatures in ! // this set (FeatureSets are NOT included). ! public boolean hasChildFeatures() { ! for (int i=0; i<size(); i++) { ! SeqFeatureI feat = getFeatureAt(i); ! if (feat instanceof FeatureSetI) { ! if(((FeatureSetI)feat).hasChildFeatures()) { ! return true; ! } ! } else { ! return true; ! } ! } ! return false; } ! // Returns the FIRST feature in the set containing the position ! public SeqFeatureI getFeatureContaining (long position) { ! for (int i=0; i<size(); i++) { ! SeqFeatureI sf = getFeatureAt (i); ! if (sf.getLow() <= position && ! sf.getHigh() >= position) { ! return sf; ! } } - return null; } ! public int getFeatureIndex(SeqFeatureI sf) { ! if (features.contains(sf)) { ! return features.indexOf(sf); ! } else { ! System.err.println("ERROR: Didn't find " + sf.getName() + ! " in set " + getName()); ! return -1; ! } } ! public void sort(int sortStrand) { ! if (size() == 0) { ! return; ! } ! long[] coord = new long[size()]; ! SeqFeatureI[] obj = new SeqFeatureI[size()]; ! for (int i=0; i < size(); i++) { ! coord[i] = getFeatureAt(i).getStart(); ! obj [i] = getFeatureAt(i); ! } ! QuickSort.sort(coord,obj); ! if (sortStrand == 1) { ! for (int i=0; i < obj.length;i++) { ! setFeatureAt(i,obj[i]); ! } ! } else { ! for (int i=0; i < obj.length;i++) { ! setFeatureAt(obj.length - i - 1, obj[i]); ! } } ! } public void setTranslationStartAtFirstCodon() { --- 369,465 ---- } ! // This method counts SeqFeatures in this set. FeatureSets are NOT ! // included in the count. ! public int numChildFeatures() { ! int numFeat = 0; ! for (int i=0; i<size(); i++) { ! SeqFeatureI feat = getFeatureAt(i); ! if (feat instanceof FeatureSetI) { ! numFeat += ((FeatureSetI)feat).numChildFeatures(); ! } else { ! numFeat++; ! } } + return numFeat; + } ! // This method determines if there are any child SeqFeatures in ! // this set (FeatureSets are NOT included). ! public boolean hasChildFeatures() { ! for (int i=0; i<size(); i++) { ! SeqFeatureI feat = getFeatureAt(i); ! if (feat instanceof FeatureSetI) { ! if(((FeatureSetI)feat).hasChildFeatures()) { ! return true; ! } ! } else { ! return true; ! } } + return false; + } ! // Returns the FIRST feature in the set containing the position ! public SeqFeatureI getFeatureContaining (long position) { ! for (int i=0; i<size(); i++) { ! SeqFeatureI sf = getFeatureAt (i); ! if (sf.getLow() <= position && ! sf.getHigh() >= position) { ! return sf; } } + return null; + } ! public int getFeatureIndex(SeqFeatureI sf) { ! if (features.contains(sf)) { ! return features.indexOf(sf); ! } else { ! System.err.println("ERROR: Didn't find " + sf.getName() + ! " in set " + getName()); ! return -1; } + } ! public void sort () ! { ! if (size() < 2) ! return; ! ! Vector unsorted = (Vector) features.clone(); ! ! features.removeAllElements(); ! while (unsorted.size() > 0) ! { ! SeqFeatureI span = (SeqFeatureI) unsorted.elementAt(0); ! unsorted.removeElementAt (0); ! addFeature(span); ! } ! } ! ! public void sort(int sortStrand) { ! if (size() == 0) { ! return; ! } ! long[] coord = new long[size()]; ! SeqFeatureI[] obj = new SeqFeatureI[size()]; ! for (int i=0; i < size(); i++) { ! coord[i] = getFeatureAt(i).getStart(); ! obj [i] = getFeatureAt(i); ! } ! QuickSort.sort(coord,obj); ! if (sortStrand == 1) { ! for (int i=0; i < obj.length;i++) { ! setFeatureAt(i,obj[i]); } ! } else { ! for (int i=0; i < obj.length;i++) { ! setFeatureAt(obj.length - i - 1, obj[i]); ! } ! } ! } public void setTranslationStartAtFirstCodon() { *************** *** 414,451 **** public void setTranslationEndFromStart() { ! // First set the end to the end of the last exon ! translation_end = 0; ! // Translate the transcript ! String aa = translate(); ! // Find the first stop codon ! if (aa != null) ! { ! long stop_index = aa.indexOf('*'); ! if (stop_index >= 0) ! { ! String sub_sequence = get_cDNA(); ! String orf = get_ORF(sub_sequence); ! long stop_offset = (3 * stop_index) + sub_sequence.indexOf (orf) ; ! /* If this is on the minus strand then move to final base ! for genomic ! if (getStrand() != 1) ! stop_offset += 2; ! */ ! // NOTE: We aren't dealing in offsets and counting from zero ! // instead we are counting from 1, so add 1 here ! long stopPos = getGenomicPosition(stop_offset + 1); ! // Set the new stop and likewise set up the phase for each exon ! setTranslationEnd((int)stopPos); ! } ! } ! else ! { ! System.err.println("Failed setting translation limits"); ! } ! } public boolean setTranslationStart (long pos) { --- 514,551 ---- public void setTranslationEndFromStart() { ! // First set the end to the end of the last exon ! translation_end = 0; ! // Translate the transcript ! String aa = translate(); ! // Find the first stop codon ! if (aa != null) ! { ! long stop_index = aa.indexOf('*'); ! if (stop_index >= 0) ! { ! String sub_sequence = get_cDNA(); ! String orf = get_ORF(sub_sequence); ! long stop_offset = (3 * stop_index) + sub_sequence.indexOf (orf) ; ! /* If this is on the minus strand then move to final base ! for genomic ! if (getStrand() != 1) ! stop_offset += 2; ! */ ! // NOTE: We aren't dealing in offsets and counting from zero ! // instead we are counting from 1, so add 1 here ! long stopPos = getGenomicPosition(stop_offset + 1); ! // Set the new stop and likewise set up the phase for each exon ! setTranslationEnd((int)stopPos); ! } ! } ! else ! { ! System.err.println("Failed setting translation limits"); ! } ! } public boolean setTranslationStart (long pos) { *************** *** 598,606 **** { // if (genomic_pos != 0) ! { ! System.out.println (getName() + " has no feature containing " + ! genomic_pos + " (" + ! getStart() + "-" + getEnd() + ")"); ! } } int transcript_position = (int) offset + 1; --- 698,706 ---- { // if (genomic_pos != 0) ! { ! System.out.println (getName() + " has no feature containing " + ! genomic_pos + " (" + ! getStart() + "-" + getEnd() + ")"); ! } } int transcript_position = (int) offset + 1; Index: FeatureSetI.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/FeatureSetI.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** FeatureSetI.java 3 Sep 2001 04:47:00 -0000 1.11 --- FeatureSetI.java 16 Feb 2002 21:27:56 -0000 1.12 *************** *** 47,51 **** public boolean isHolder(); ! public void _setEnds(); public SeqFeatureI findFeatureByHitName(String hname); --- 47,51 ---- public boolean isHolder(); ! public void adjustEdges(); public SeqFeatureI findFeatureByHitName(String hname); Index: SeqFeature.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/SeqFeature.java,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** SeqFeature.java 22 Jan 2002 20:41:19 -0000 1.42 --- SeqFeature.java 16 Feb 2002 21:27:56 -0000 1.43 *************** *** 13,27 **** { ! protected String name = SeqFeatureI.NO_NAME; ! protected long low = -1; ! protected long high = -1; ! protected int strand = 1; ! protected String id; ! protected String refId; ! protected SeqFeatureI refFeature; ! protected SequenceI refSeq; /* these needed to be separated because we needed to be able --- 13,28 ---- { ! protected String name = SeqFeatureI.NO_NAME; ! protected long low = -1; ! protected long high = -1; ! protected int strand = 1; ! protected String id; ! protected String refId; ! protected SeqFeatureI refFeature; ! protected Hashtable ref_features = new Hashtable(1); ! protected SequenceI refSeq; /* these needed to be separated because we needed to be able *************** *** 30,127 **** actual biological knowledge about individual sub-features */ ! protected String type = SeqFeatureI.NO_TYPE; ! protected Hashtable scores = new Hashtable(1); ! protected Hashtable properties = new Hashtable(1); ! protected int phase = 0; ! public SeqFeature() ! { ! } ! public SeqFeature(SeqFeatureI sf) ! { ! this (sf.getLow(), sf.getHigh(), sf.getType(), sf.getStrand()); ! if (sf.getRefSequence() != null) ! setRefSequence (sf.getRefSequence()); ! } ! public SeqFeature(long low, long high, String type) ! { ! setLow (low); ! setHigh (high); ! setType (type); ! } ! public SeqFeature(long low, long high, String type, int strand) ! { ! this(low,high,type); ! setStrand(strand); ! } ! public void setStart(long start) ! { ! if (getStrand() == -1) { ! setHigh(start); ! } else { ! setLow(start); } - } ! public long getStart() ! { ! if (getStrand() == -1) { ! return getHigh(); ! } else { ! return getLow(); } - } ! public void setEnd(long end) ! { ! if (getStrand() == -1) { ! setLow(end); ! } else { ! setHigh(end); } - } ! public long getEnd() ! { ! if (getStrand() == -1) { ! return getLow(); ! } else { ! return getHigh(); } - } ! public long getLow() ! { ! return this.low; ! } ! public void setLow(long low) ! { ! this.low = low; ! } ! public long getHigh() ! { ! return this.high; ! } ! public void setHigh(long high) ! { ! this.high = high; ! } ! public SequenceI getRefSequence() ! { ! return refSeq; ! } ! public void setRefSequence(SequenceI sequence) ! { ! this.refSeq = sequence; ! } public long length() --- 31,128 ---- actual biological knowledge about individual sub-features */ ! protected String type = SeqFeatureI.NO_TYPE; ! protected Hashtable scores = new Hashtable(1); ! protected Hashtable properties = new Hashtable(1); ! protected int phase = 0; ! public SeqFeature() ! { ! } ! public SeqFeature(SeqFeatureI sf) ! { ! this (sf.getLow(), sf.getHigh(), sf.getType(), sf.getStrand()); ! if (sf.getRefSequence() != null) ! setRefSequence (sf.getRefSequence()); ! } ! public SeqFeature(long low, long high, String type) ! { ! setLow (low); ! setHigh (high); ! setType (type); ! } ! public SeqFeature(long low, long high, String type, int strand) ! { ! this(low,high,type); ! setStrand(strand); ! } ! public void setStart(long start) ! { ! if (getStrand() == -1) { ! setHigh(start); ! } else { ! setLow(start); ! } } ! public long getStart() ! { ! if (getStrand() == -1) { ! return getHigh(); ! } else { ! return getLow(); ! } } ! public void setEnd(long end) ! { ! if (getStrand() == -1) { ! setLow(end); ! } else { ! setHigh(end); ! } } ! public long getEnd() ! { ! if (getStrand() == -1) { ! return getLow(); ! } else { ! return getHigh(); ! } } ! public long getLow() ! { ! return this.low; ! } ! public void setLow(long low) ! { ! this.low = low; ! } ! public long getHigh() ! { ! return this.high; ! } ! public void setHigh(long high) ! { ! this.high = high; ! } ! public SequenceI getRefSequence() ! { ! return refSeq; ! } ! public void setRefSequence(SequenceI sequence) ! { ! this.refSeq = sequence; ! } public long length() *************** *** 130,171 **** } ! public String getSequence() ! { ! StringBuffer dna = new StringBuffer(); ! SequenceI seq = getRefSequence(); ! if (seq != null) { ! String residues = seq.getResidues((int) getStart(), ! (int) getEnd()); ! if (residues != null) ! dna.append(residues); } - return dna.toString(); - } ! public String get_cDNA() { return getSequence(); } ! public SeqFeatureI getRefFeature() ! { ! return refFeature; ! } ! public void setRefFeature(SeqFeatureI refFeature) ! { ! this.refFeature = refFeature; ! } ! public String getRefId() ! { ! return this.refId; ! } ! public void setRefId(String id) ! { ! this.refId = id; ! } public String getBioType() --- 131,202 ---- } ! public void reverseComplement() ! { ! SequenceI seq = getRefSequence(); ! if (seq != null) { ! long pos1 = seq.getLength() - getStart() + 1; ! long pos2 = seq.getLength() - getEnd() + 1; ! setStart(pos2); ! setEnd(pos1); ! } ! } ! ! public void flipFlop () ! { ! long temp = getStart(); ! setStart (getEnd()); ! setEnd (temp); ! setStrand (getStrand() * -1); ! } ! ! public String getSequence() ! { ! StringBuffer dna = new StringBuffer(); ! SequenceI seq = getRefSequence(); ! if (seq != null) { ! String residues = seq.getResidues((int) getStart(), ! (int) getEnd()); ! if (residues != null) ! dna.append(residues); ! } ! return dna.toString(); } ! public String get_cDNA() { return getSequence(); } ! public SeqFeatureI getRefFeature() ! { ! return (getRefFeature ("primary")); ! // return refFeature; ! } ! public SeqFeatureI getRefFeature(String type) ! { ! return ((SeqFeatureI) ref_features.get (type)); ! } ! public void setRefFeature(SeqFeatureI refFeature) ! { ! addRefFeature ("primary", refFeature); ! this.refFeature = refFeature; ! } ! public void addRefFeature(String type, SeqFeatureI refFeature) ! { ! if (refFeature != null) ! ref_features.put(type, refFeature); ! else ! ref_features.remove(type); ! } ! ! public String getRefId() ! { ! return (this.getRefFeature() != null ? ! this.getRefFeature().getId() : null); ! } public String getBioType() *************** *** 182,427 **** } ! public String getType() ! { ! return this.type; ! } ! public void setType(String type) ! { ! if(type == null) { ! throw new NullPointerException("Can't accept feature type of null. " + ! "Use SeqFeatureI.NO_TYPE or 'SeqFeatureI.NO_TYPE' instead."); } - this.type = type; - } ! public String getProgramName() ! { ! return getProperty ("program"); ! } ! public void setProgramName(String name) ! { ! addProperty("program", name); ! } ! public String getDatabase() ! { ! return getProperty ("database"); ! } ! public void setDatabase(String name) ! { ! addProperty("database", name); ! } ! public int getStrand() ! { ! return this.strand; ! } ! public void setStrand(int strand) ! { ! this.strand = strand; ! } ! public void setName(String name) ! { ! if (name == null) { ! throw new NullPointerException("Can't accept feature name of null. " + ! "Use SeqFeatureI.NO_NAME or 'SeqFeatureI.NO_NAME' instead."); } - this.name = name; - } ! public String getName() ! { ! return name; ! } ! public void setId(String id) ! { ! this.id = id; ! } ! public String getId() ! { ! return this.id; ! } ! public double getScore() ! { ! return getScore ("score"); ! } ! public double getScore (String name) ! { ! Score score = (Score) scores.get (name); ! if (score == null) ! { ! return -1; ! } ! else ! { ! return score.getValue(); ! } ! } ! public Hashtable getScores () ! { ! return scores; ! } ! public void setScore(double score) ! { ! Score s = (Score) scores.get("score"); ! if (s == null) ! { ! s = new Score("score", score); ! scores.put ("score", s); ! } ! else ! { ! s.setValue (score); ! } ! } ! public void addScore (Score s) ! { ! if ( ! scores.contains (s) ) ! { ! scores.put (s.getName(), s); ! } ! } ! public void addScore (double score) ! { ! String name = scores.size() == 0 ? "score" : "score"+scores.size()+1; ! addScore (new Score (name, score)); ! } ! public void addScore (String name, double score) ! { ! addScore (new Score (name, score)); ! } ! public void addScore (String name, String score) ! { ! try ! { ! double s = Double.valueOf (score).doubleValue(); ! addScore (name, s); ! } ! catch (Exception ex) ! { ! System.err.println ("Could parse " + score + " as a double"); ! ex.printStackTrace(); ! } ! } // These are all OverlapI methods ! public long getLeftOverlap(SeqFeatureI sf) ! { ! return (getLow() - sf.getLow()); ! } ! public long getRightOverlap(SeqFeatureI sf) ! { ! return (sf.getHigh() - getHigh()); ! } ! public boolean isExactOverlap (SeqFeatureI sf) ! { ! if (getLeftOverlap(sf) == 0 && ! getRightOverlap(sf) == 0 && ! getStrand() == sf.getStrand()) ! { ! return true; ! } else { ! return false; ! } ! } ! public boolean contains(SeqFeatureI sf) ! { ! if (overlaps(sf) && ! getLeftOverlap(sf) <= 0 && ! getRightOverlap(sf) <= 0 && ! getStrand() == sf.getStrand()) ! { ! return true; ! } else { ! return false; ! } ! } ! public boolean contains(long position) ! { ! return (position >= getLow() && position <= getHigh()); ! } ! public boolean overlaps(SeqFeatureI sf) ! { ! return (getLow() <= sf.getHigh() && ! getHigh() >= sf.getLow() && ! getStrand() == sf.getStrand()); ! } ! public SeqFeatureI merge (SeqFeatureI sf) ! { ! if (getStrand() != sf.getStrand()) ! { ! System.out.println("Can't merge features - wrong strands"); ! return null; ! } ! long newlow; ! long newhigh; ! if (sf.getLow() < getLow()) ! { ! newlow = sf.getLow(); ! } else { ! newlow = getLow(); ! } ! if (sf.getHigh() > getHigh()) ! { ! newhigh = sf.getHigh(); ! } else { ! newhigh = getHigh(); ! } ! setLow (newlow); ! setHigh(newhigh); ! return this; ! } ! public static void main(String[] args) ! { ! SeqFeature sf1 = new SeqFeature(100,200,"pog",1); ! SeqFeature sf2 = new SeqFeature(100,200,"pog",-1); ! sf1.setStrand(-1); ! sf1.setStart(150); ! sf1.setEnd(50); ! SeqFeature sf3 = (SeqFeature)sf1.merge(sf2); ! SeqFeature sf4 = (SeqFeature)sf2.merge(sf1); ! } public void setPhase(int phase) { ! if (phase < 0 || phase > 2) { ! System.err.println("Phase must be 0,1,2 : " + phase); ! } ! else ! this.phase = phase; } --- 213,458 ---- } ! public String getType() ! { ! return this.type; ! } ! public void setType(String type) ! { ! if(type == null) { ! throw new NullPointerException("Can't accept feature type of null. " + ! "Use SeqFeatureI.NO_TYPE or 'SeqFeatureI.NO_TYPE' instead."); ! } ! this.type = type; } ! public String getProgramName() ! { ! return getProperty ("program"); ! } ! public void setProgramName(String name) ! { ! addProperty("program", name); ! } ! public String getDatabase() ! { ! return getProperty ("database"); ! } ! public void setDatabase(String name) ! { ! addProperty("database", name); ! } ! public int getStrand() ! { ! return this.strand; ! } ! public void setStrand(int strand) ! { ! this.strand = strand; ! } ! public void setName(String name) ! { ! if (name == null) { ! throw new NullPointerException("Can't accept feature name of null. " + ! "Use SeqFeatureI.NO_NAME or 'SeqFeatureI.NO_NAME' instead."); ! } ! this.name = name; } ! public String getName() ! { ! return name; ! } ! public void setId(String id) ! { ! this.id = id; ! } ! public String getId() ! { ! return this.id; ! } ! public double getScore() ! { ! return getScore ("score"); ! } ! public double getScore (String name) ! { ! Score score = (Score) scores.get (name); ! if (score == null) ! { ! return -1; ! } ! else ! { ! return score.getValue(); ! } ! } ! public Hashtable getScores () ! { ! return scores; ! } ! public void setScore(double score) ! { ! Score s = (Score) scores.get("score"); ! if (s == null) ! { ! s = new Score("score", score); ! scores.put ("score", s); ! } ! else ! { ! s.setValue (score); ! } ! } ! public void addScore (Score s) ! { ! if ( ! scores.contains (s) ) ! { ! scores.put (s.getName(), s); ! } ! } ! public void addScore (double score) ! { ! String name = scores.size() == 0 ? "score" : "score"+scores.size()+1; ! addScore (new Score (name, score)); ! } ! public void addScore (String name, double score) ! { ! addScore (new Score (name, score)); ! } ! public void addScore (String name, String score) ! { ! try ! { ! double s = Double.valueOf (score).doubleValue(); ! addScore (name, s); ! } ! catch (Exception ex) ! { ! System.err.println ("Could parse " + score + " as a double"); ! ex.printStackTrace(); ! } ! } // These are all OverlapI methods ! public long getLeftOverlap(SeqFeatureI sf) ! { ! return (getLow() - sf.getLow()); ! } ! public long getRightOverlap(SeqFeatureI sf) ! { ! return (sf.getHigh() - getHigh()); ! } ! public boolean isExactOverlap (SeqFeatureI sf) ! { ! if (getLeftOverlap(sf) == 0 && ! getRightOverlap(sf) == 0 && ! getStrand() == sf.getStrand()) ! { ! return true; ! } else { ! return false; ! } ! } ! public boolean contains(SeqFeatureI sf) ! { ! if (overlaps(sf) && ! getLeftOverlap(sf) <= 0 && ! getRightOverlap(sf) <= 0 && ! getStrand() == sf.getStrand()) ! { ! return true; ! } else { ! return false; ! } ! } ! public boolean contains(long position) ! { ! return (position >= getLow() && position <= getHigh()); ! } ! public boolean overlaps(SeqFeatureI sf) ! { ! return (getLow() <= sf.getHigh() && ! getHigh() >= sf.getLow() && ! getStrand() == sf.getStrand()); ! } ! public SeqFeatureI merge (SeqFeatureI sf) ! { ! if (getStrand() != sf.getStrand()) ! { ! System.out.println("Can't merge features - wrong strands"); ! return null; ! } ! long newlow; ! long newhigh; ! if (sf.getLow() < getLow()) ! { ! newlow = sf.getLow(); ! } else { ! newlow = getLow(); ! } ! if (sf.getHigh() > getHigh()) ! { ! newhigh = sf.getHigh(); ! } else { ! newhigh = getHigh(); ! } ! setLow (newlow); ! setHigh(newhigh); ! return this; ! } ! public static void main(String[] args) ! { ! SeqFeature sf1 = new SeqFeature(100,200,"pog",1); ! SeqFeature sf2 = new SeqFeature(100,200,"pog",-1); ! sf1.setStrand(-1); ! sf1.setStart(150); ! sf1.setEnd(50); ! SeqFeature sf3 = (SeqFeature)sf1.merge(sf2); ! SeqFeature sf4 = (SeqFeature)sf2.merge(sf1); ! } public void setPhase(int phase) { ! if (phase < 0 || phase > 2) { ! System.err.println("Phase must be 0,1,2 : " + phase); ! } ! else ! this.phase = phase; } *************** *** 443,475 **** } return frame; ! } ! public int compareTo(Object sfObj) ! { ! SeqFeatureI sf = (SeqFeatureI)sfObj; ! long complow = sf.getLow(); ! long low = getLow(); ! if (low > complow) ! { ! return 1; ! } ! else if (low < complow) ! { ! return -1; ! } ! long comphigh = sf.getHigh(); ! long high = getHigh(); ! if (high > comphigh) ! { ! return 1; ! } ! else if (high < comphigh) ! { ! return -1; ! } ! return 0; ! } public void addProperty(String name, String value) { --- 474,506 ---- } return frame; ! } ! public int compareTo(Object sfObj) ! { ! SeqFeatureI sf = (SeqFeatureI)sfObj; ! long complow = sf.getLow(); ! long low = getLow(); ! if (low > complow) ! { ! return 1; ! } ! else if (low < complow) ! { ! return -1; ! } ! long comphigh = sf.getHigh(); ! long high = getHigh(); ! if (high > comphigh) ! { ! return 1; ! } ! else if (high < comphigh) ! { ! return -1; ! } ! return 0; ! } public void addProperty(String name, String value) { Index: SeqFeatureI.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/SeqFeatureI.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** SeqFeatureI.java 27 Sep 2001 03:41:39 -0000 1.18 --- SeqFeatureI.java 16 Feb 2002 21:27:56 -0000 1.19 *************** *** 5,104 **** import apollo.datamodel.SequenceI; ! public interface SeqFeatureI extends OverlapI { ! /** ! * The type String to use for features that have no other type. ! */ ! public static final String NO_TYPE="no_type"; ! /** ! * The type String to use for features that have no other name. ! */ ! public static final String NO_NAME="no_name"; ! public String getId(); ! public void setId(String id); ! public String getName(); ! public void setName(String name); ! public long getStart(); ! public void setStart(long start); ! public long getEnd(); ! public void setEnd(long end); ! public long getLow(); ! public void setLow(long low); ! public long getHigh(); ! public void setHigh(long high); ! public String getSequence(); ! /** ! * Retrieve the SequenceI that this feature annotates. ! * ! * @return the current parent SequenceI ! */ ! public SequenceI getRefSequence(); ! ! /** ! * Set the SequenceI that this feature annotates. ! * ! * @param refSeq the new parent SequenceI ! */ ! public void setRefSequence(SequenceI refSeq); ! public String getRefId(); ! public void setRefId(String id); ! /** ! * Retrieve the parent SeqFeatureI for this SeqFeatureI, or null if it is ! * a tree root. ! * ! * @return the parent SeqFeatureI ! */ ! public SeqFeatureI getRefFeature(); ! /** ! * Set the parent SeqFeatureI. ! * <P> ! * When building a part-whole hieracy of features, you must both add a ! * feature to its parent, and then call child.setRefFeature(parent). It is ! * possible for a feature to be added to multiple feature sets, but there is ! * only one legitimate parent. ! * ! * @param refFeature the new parent SeqFeatureI ! */ ! public void setRefFeature(SeqFeatureI refFeature); ! public int getStrand(); ! public void setStrand(int strand); ! public String getType(); ! public void setType(String type); ! public String getBioType(); ! public void setBioType(String type); ! public long length(); ! public String getProgramName(); ! public void setProgramName(String type); ! public String getDatabase(); ! public void setDatabase(String db); ! public double getScore(); ! public double getScore(String score); ! public Hashtable getScores(); ! public void setScore(double score); ! public void addScore (Score s); ! public void addScore (double score); ! public void addScore (String name, double score); ! public void addScore (String name, String score); ! public void addProperty(String name, String property); ! public String getProperty(String name); ! public Hashtable getProperties(); public int getFrame(); --- 5,121 ---- import apollo.datamodel.SequenceI; ! public interface SeqFeatureI extends OverlapI ! { ! /** ! * The type String to use for features that have no other type. ! */ ! public static final String NO_TYPE="no_type"; ! /** ! * The type String to use for features that have no other name. ! */ ! public static final String NO_NAME="no_name"; ! public String getId(); ! public void setId(String id); ! public String getName(); ! public void setName(String name); ! public long getStart(); ! public void setStart(long start); ! public long getEnd(); ! public void setEnd(long end); ! public long getLow(); ! public void setLow(long low); ! public long getHigh(); ! public void setHigh(long high); ! /** ! This is used if the Reference Sequence is being ! reverse complemented to move this feature onto ! the coordinates counting from the 3' end rather ! than the 5' end ! <br> ! */ ! public void reverseComplement(); ! /** This is used simply to move the feature directly ! to the opposite strand, without complementation ! of the Reference Sequence ! */ ! public void flipFlop (); ! public String getSequence(); ! /** ! * Retrieve the SequenceI that this feature annotates. ! * ! * @return the current parent SequenceI ! */ ! public SequenceI getRefSequence(); ! /** ! * Set the SequenceI that this feature annotates. ! * ! * @param refSeq the new parent SequenceI ! */ ! public void setRefSequence(SequenceI refSeq); ! public String getRefId(); ! /** ! * Set the parent SeqFeatureI. ! * <P> ! * When building a part-whole hieracy of features, you must both add a ! * feature to its parent, and then call child.setRefFeature(parent). It is ! * possible for a feature to be added to multiple feature sets, but there is ! * only one legitimate parent. ! * ! * @param refFeature the new parent SeqFeatureI ! */ ! public void setRefFeature(SeqFeatureI refFeature); ! public void addRefFeature(String type, SeqFeatureI refFeature); ! /** ! * Retrieve the parent SeqFeatureI for this SeqFeatureI, or null if it is ! * a tree root. ! * ! * @return the parent SeqFeatureI ! */ ! public SeqFeatureI getRefFeature(); ! public SeqFeatureI getRefFeature (String type); ! public int getStrand(); ! public void setStrand(int strand); ! public String getType(); ! public void setType(String type); ! public String getBioType(); ! public void setBioType(String type); ! public long length(); ! public String getProgramName(); ! public void setProgramName(String type); ! ! public String getDatabase(); ! public void setDatabase(String db); ! ! public double getScore(); ! public double getScore(String score); ! public Hashtable getScores(); ! public void setScore(double score); ! public void addScore (Score s); ! public void addScore (double score); ! public void addScore (String name, double score); ! public void addScore (String name, String score); ! ! public void addProperty(String name, String property); ! public String getProperty(String name); ! public Hashtable getProperties(); public int getFrame(); *************** *** 108,112 **** public int getEndPhase(); ! public int compareTo(Object sfObj); /* --- 125,129 ---- public int getEndPhase(); ! public int compareTo(Object sfObj); /* Index: StrandedFeatureSet.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/StrandedFeatureSet.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** StrandedFeatureSet.java 11 Oct 2001 20:10:27 -0000 1.8 --- StrandedFeatureSet.java 16 Feb 2002 21:27:56 -0000 1.9 *************** *** 5,12 **** public class StrandedFeatureSet extends FeatureSet implements StrandedFeatureSetI { ! ! protected FeatureSetI forward = null; ! protected FeatureSetI reverse = null; ! public StrandedFeatureSet(FeatureSetI forward_set, FeatureSetI reverse_set) { --- 5,12 ---- public class StrandedFeatureSet extends FeatureSet implements StrandedFeatureSetI { ! ! FeatureSetI forward; ! FeatureSetI reverse; ! public StrandedFeatureSet(FeatureSetI forward_set, FeatureSetI reverse_set) { Index: Transcript.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/datamodel/Transcript.java,v retrieving revision 1.70 retrieving revision 1.71 diff -C2 -d -r1.70 -r1.71 *** Transcript.java 25 Jan 2002 23:43:57 -0000 1.70 --- Transcript.java 16 Feb 2002 21:27:56 -0000 1.71 *************** *** 34,38 **** if (getGene() != null) { ! getGene()._setEnds(); setStrand(getGene().getStrand()); } --- 34,38 ---- if (getGene() != null) { ! getGene().adjustEdges(); setStrand(getGene().getStrand()); } *************** *** 101,105 **** } ! _setEnds(); // Need to check gene uniqueExons --- 101,105 ---- } ! adjustEdges(); // Need to check gene uniqueExons |