/* Copyright 2013 University of North Carolina at Chapel Hill. All rights reserved. */
package abra;
import htsjdk.samtools.SAMRecord;
/**
* Representation of a Feature (i.e. a line in a GTF file)
*
* @author Lisle E. Mose (lmose at unc dot edu)
*/
public class Feature {
private String seqname;
private long start; // 1 based
private long end; // inclusive
private String additionalInfo;
// Optional kmerSize value specific to ABRA assembly.
private int kmerSize;
public Feature(String seqname, long start, long end) {
this.seqname = seqname;
this.start = start;
this.end = end;
}
public String getSeqname() {
return seqname;
}
public long getStart() {
return start;
}
public long getEnd() {
return end;
}
public void setEnd(long end) {
this.end = end;
}
public String getDescriptor() {
return seqname + "_" + start + "_" + end;
}
public long getLength() {
return end-start;
}
public String toString() {
return getDescriptor();
}
public void setAdditionalInfo(String info) {
this.additionalInfo = info;
}
public String getAdditionalInfo() {
return additionalInfo;
}
private boolean isWithin(long coord, long start, long stop) {
return coord >= start && coord <= stop;
}
private boolean overlaps(long start1, long stop1, long start2, long stop2) {
return
isWithin(start1, start2, stop2) ||
isWithin(stop1, start2, stop2) ||
isWithin(start2, start1, stop1) ||
isWithin(stop2, start1, stop1);
}
public boolean overlapsRead(SAMRecord read) {
return overlaps(read.getReferenceName(), read.getAlignmentStart(), read.getAlignmentEnd());
}
public boolean overlaps(String chromosome, int startPos, int stopPos) {
return ((this.seqname.equals(chromosome)) && overlaps(start, end, startPos, stopPos));
}
public int getKmer() {
return kmerSize;
}
public void setKmer(int kmer) {
this.kmerSize = kmer;
}
}