Fixed genome loc to be immutable, the only way to now change it's values is through the GenomeLocParser.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1132 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
455275996f
commit
f5cba5a6bb
|
|
@ -1,15 +1,10 @@
|
||||||
package org.broadinstitute.sting.gatk;
|
package org.broadinstitute.sting.gatk;
|
||||||
|
|
||||||
import net.sf.samtools.SAMRecord;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.TreeSet;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
|
||||||
import net.sf.picard.reference.ReferenceSequence;
|
import net.sf.picard.reference.ReferenceSequence;
|
||||||
|
import net.sf.samtools.SAMRecord;
|
||||||
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful class for forwarding on locusContext data from this iterator
|
* Useful class for forwarding on locusContext data from this iterator
|
||||||
|
|
@ -81,7 +76,9 @@ public class LocusContext {
|
||||||
public String getContig() { return getLocation().getContig(); }
|
public String getContig() { return getLocation().getContig(); }
|
||||||
public long getPosition() { return getLocation().getStart(); }
|
public long getPosition() { return getLocation().getStart(); }
|
||||||
public GenomeLoc getLocation() { return loc; }
|
public GenomeLoc getLocation() { return loc; }
|
||||||
|
public void setLocation(GenomeLoc loc) {
|
||||||
|
this.loc = loc.clone();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Returns the entire reference sequence contig associated with these reads
|
* Returns the entire reference sequence contig associated with these reads
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ public class SAMDataSource implements SimpleDataSource {
|
||||||
iter = iteratorPool.iterator(new MappedStreamSegment(lastReadPos));
|
iter = iteratorPool.iterator(new MappedStreamSegment(lastReadPos));
|
||||||
return InitialReadIterator(shard.getSize(), iter);
|
return InitialReadIterator(shard.getSize(), iter);
|
||||||
} else {
|
} else {
|
||||||
lastReadPos.setStop(-1);
|
lastReadPos = GenomeLocParser.setStop(lastReadPos,-1);
|
||||||
iter = fastMappedReadSeek(shard.getSize(), StingSAMIteratorAdapter.adapt(reads, iteratorPool.iterator(new MappedStreamSegment(lastReadPos))));
|
iter = fastMappedReadSeek(shard.getSize(), StingSAMIteratorAdapter.adapt(reads, iteratorPool.iterator(new MappedStreamSegment(lastReadPos))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,7 +267,7 @@ public class SAMDataSource implements SimpleDataSource {
|
||||||
} else {
|
} else {
|
||||||
readsTaken = readCount;
|
readsTaken = readCount;
|
||||||
readsSeenAtLastPos = 0;
|
readsSeenAtLastPos = 0;
|
||||||
lastReadPos.setStop(-1);
|
lastReadPos = GenomeLocParser.setStop(lastReadPos,-1);
|
||||||
CloseableIterator<SAMRecord> ret = iteratorPool.iterator(new MappedStreamSegment(lastReadPos));
|
CloseableIterator<SAMRecord> ret = iteratorPool.iterator(new MappedStreamSegment(lastReadPos));
|
||||||
return new BoundedReadIterator(StingSAMIteratorAdapter.adapt(reads, ret), readCount);
|
return new BoundedReadIterator(StingSAMIteratorAdapter.adapt(reads, ret), readCount);
|
||||||
}
|
}
|
||||||
|
|
@ -285,7 +285,7 @@ public class SAMDataSource implements SimpleDataSource {
|
||||||
if (stopPos < lastReadPos.getStart()) {
|
if (stopPos < lastReadPos.getStart()) {
|
||||||
lastReadPos = GenomeLocParser.createGenomeLoc(lastReadPos.getContigIndex() + 1, stopPos, stopPos);
|
lastReadPos = GenomeLocParser.createGenomeLoc(lastReadPos.getContigIndex() + 1, stopPos, stopPos);
|
||||||
} else {
|
} else {
|
||||||
lastReadPos.setStart(rec.getAlignmentStart());
|
lastReadPos = GenomeLocParser.setStart(lastReadPos,rec.getAlignmentStart());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// in case we're run out of reads, get out
|
// in case we're run out of reads, get out
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public class GenomeLocusIterator implements LocusIterator {
|
||||||
/**
|
/**
|
||||||
* Creates an iterator that can traverse over the entire
|
* Creates an iterator that can traverse over the entire
|
||||||
* reference specified in the given ShardDataProvider.
|
* reference specified in the given ShardDataProvider.
|
||||||
* @param provider Data provider to use as a backing source.
|
* @param completeLocus Data provider to use as a backing source.
|
||||||
* Provider must have a reference (hasReference() == true).
|
* Provider must have a reference (hasReference() == true).
|
||||||
*/
|
*/
|
||||||
public GenomeLocusIterator( GenomeLoc completeLocus ) {
|
public GenomeLocusIterator( GenomeLoc completeLocus ) {
|
||||||
|
|
@ -58,7 +58,7 @@ public class GenomeLocusIterator implements LocusIterator {
|
||||||
if( !hasNext() )
|
if( !hasNext() )
|
||||||
throw new NoSuchElementException("No elements remaining in bounded reference region.");
|
throw new NoSuchElementException("No elements remaining in bounded reference region.");
|
||||||
GenomeLoc toReturn = (GenomeLoc)currentLocus.clone();
|
GenomeLoc toReturn = (GenomeLoc)currentLocus.clone();
|
||||||
currentLocus.incPos();
|
currentLocus = GenomeLocParser.incPos(currentLocus);
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,31 @@
|
||||||
package org.broadinstitute.sting.gatk.traversals;
|
package org.broadinstitute.sting.gatk.traversals;
|
||||||
|
|
||||||
|
import net.sf.picard.sam.SamFileHeaderMerger;
|
||||||
|
import net.sf.samtools.SAMFileHeader;
|
||||||
|
import net.sf.samtools.SAMFileReader;
|
||||||
|
import net.sf.samtools.SAMRecord;
|
||||||
|
import net.sf.samtools.util.CloseableIterator;
|
||||||
|
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
|
||||||
|
import org.broadinstitute.sting.gatk.LocusContext;
|
||||||
|
import org.broadinstitute.sting.gatk.Reads;
|
||||||
|
import org.broadinstitute.sting.gatk.iterators.MergingSamRecordIterator2;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum;
|
||||||
import org.broadinstitute.sting.gatk.walkers.LocusWindowWalker;
|
import org.broadinstitute.sting.gatk.walkers.LocusWindowWalker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Walker;
|
import org.broadinstitute.sting.gatk.walkers.Walker;
|
||||||
import org.broadinstitute.sting.gatk.*;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.gatk.refdata.*;
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
import org.broadinstitute.sting.gatk.iterators.MergingSamRecordIterator2;
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
import org.broadinstitute.sting.utils.*;
|
import org.broadinstitute.sting.utils.Utils;
|
||||||
import org.broadinstitute.sting.utils.fasta.*;
|
import org.broadinstitute.sting.utils.fasta.IndexedFastaSequenceFile;
|
||||||
|
|
||||||
import java.util.*;
|
import java.io.File;
|
||||||
import java.io.*;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import net.sf.samtools.SAMRecord;
|
import java.util.Collections;
|
||||||
import net.sf.samtools.SAMFileReader;
|
import java.util.Iterator;
|
||||||
import net.sf.samtools.SAMFileHeader;
|
import java.util.List;
|
||||||
import net.sf.samtools.util.CloseableIterator;
|
|
||||||
import net.sf.picard.sam.SamFileHeaderMerger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
|
|
@ -136,7 +146,7 @@ public class TraverseByLocusWindows extends TraversalEngine {
|
||||||
String refSuffix = "";
|
String refSuffix = "";
|
||||||
if ( window.getLocation().getStop() > contigLength ) {
|
if ( window.getLocation().getStop() > contigLength ) {
|
||||||
refSuffix = Utils.dupString('x', (int)window.getLocation().getStop() - contigLength);
|
refSuffix = Utils.dupString('x', (int)window.getLocation().getStop() - contigLength);
|
||||||
window.getLocation().setStop(contigLength);
|
window.setLocation(GenomeLocParser.setStop(window.getLocation(),contigLength));
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuffer refBases = new StringBuffer(new String(sequenceFile.getSubsequenceAt(window.getContig(),window.getLocation().getStart(),window.getLocation().getStop()).getBases()));
|
StringBuffer refBases = new StringBuffer(new String(sequenceFile.getSubsequenceAt(window.getContig(),window.getLocation().getStart(),window.getLocation().getStop()).getBases()));
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.RefWalker;
|
import org.broadinstitute.sting.gatk.walkers.RefWalker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.WalkerName;
|
import org.broadinstitute.sting.gatk.walkers.WalkerName;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
import org.broadinstitute.sting.utils.Pair;
|
import org.broadinstitute.sting.utils.Pair;
|
||||||
|
|
||||||
// create a fasta sequence file from a reference and intervals
|
// create a fasta sequence file from a reference and intervals
|
||||||
|
|
@ -34,7 +35,7 @@ public class FastaReferenceWalker extends RefWalker<Pair<GenomeLoc, Character>,
|
||||||
}
|
}
|
||||||
// otherwise, merge them
|
// otherwise, merge them
|
||||||
else {
|
else {
|
||||||
sum.first.setStop(value.first.getStop());
|
sum.first = GenomeLocParser.setStop(sum.first,value.first.getStop());
|
||||||
sum.second = new String(sum.second + value.second);
|
sum.second = new String(sum.second + value.second);
|
||||||
}
|
}
|
||||||
return sum;
|
return sum;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public class CoverageGapIntervalWalker extends LocusWalker<Pair<GenomeLoc, Integ
|
||||||
public GenomeLoc reduce(Pair<GenomeLoc, Integer> value, GenomeLoc sum) {
|
public GenomeLoc reduce(Pair<GenomeLoc, Integer> value, GenomeLoc sum) {
|
||||||
if ( value.second > 1000 ) {
|
if ( value.second > 1000 ) {
|
||||||
if ( sum != null )
|
if ( sum != null )
|
||||||
sum.setStop(value.first.getStop());
|
sum = GenomeLocParser.setStop(sum,value.first.getStop());
|
||||||
else
|
else
|
||||||
sum = value.first;
|
sum = value.first;
|
||||||
} else if ( sum != null ) {
|
} else if ( sum != null ) {
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,22 @@
|
||||||
package org.broadinstitute.sting.playground.gatk.walkers.indels;
|
package org.broadinstitute.sting.playground.gatk.walkers.indels;
|
||||||
|
|
||||||
import java.io.IOException;
|
import net.sf.samtools.*;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.sf.samtools.Cigar;
|
|
||||||
import net.sf.samtools.CigarElement;
|
|
||||||
import net.sf.samtools.CigarOperator;
|
|
||||||
import net.sf.samtools.SAMFileHeader;
|
|
||||||
import net.sf.samtools.SAMFileReader;
|
|
||||||
import net.sf.samtools.SAMReadGroupRecord;
|
|
||||||
import net.sf.samtools.SAMRecord;
|
|
||||||
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.RODIterator;
|
import org.broadinstitute.sting.gatk.refdata.RODIterator;
|
||||||
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData;
|
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData;
|
||||||
import org.broadinstitute.sting.gatk.refdata.rodRefSeq;
|
import org.broadinstitute.sting.gatk.refdata.rodRefSeq;
|
||||||
import org.broadinstitute.sting.gatk.walkers.ReadWalker;
|
import org.broadinstitute.sting.gatk.walkers.ReadWalker;
|
||||||
import org.broadinstitute.sting.playground.utils.CircularArray;
|
import org.broadinstitute.sting.playground.utils.CircularArray;
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
import org.broadinstitute.sting.utils.StingException;
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLocParser;
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||||||
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
||||||
public class IndelGenotyperWalker extends ReadWalker<Integer,Integer> {
|
public class IndelGenotyperWalker extends ReadWalker<Integer,Integer> {
|
||||||
@Argument(fullName="bed", shortName="bed", doc="BED output file name", required=true)
|
@Argument(fullName="bed", shortName="bed", doc="BED output file name", required=true)
|
||||||
|
|
@ -189,7 +182,7 @@ public class IndelGenotyperWalker extends ReadWalker<Integer,Integer> {
|
||||||
currentContigIndex = read.getReferenceIndex();
|
currentContigIndex = read.getReferenceIndex();
|
||||||
currentPosition = read.getAlignmentStart();
|
currentPosition = read.getAlignmentStart();
|
||||||
refName = new String(read.getReferenceName());
|
refName = new String(read.getReferenceName());
|
||||||
location.setContig(refName);
|
location = GenomeLocParser.setContig(location,refName);
|
||||||
|
|
||||||
coverage.clear(); // reset coverage window; this will also set reference position to 0
|
coverage.clear(); // reset coverage window; this will also set reference position to 0
|
||||||
if ( call_somatic) normal_coverage.clear();
|
if ( call_somatic) normal_coverage.clear();
|
||||||
|
|
@ -315,7 +308,7 @@ public class IndelGenotyperWalker extends ReadWalker<Integer,Integer> {
|
||||||
continue; // too dirty
|
continue; // too dirty
|
||||||
}
|
}
|
||||||
|
|
||||||
location.setStart(pos); location.setStop(pos); // retrieve annotation data
|
location = GenomeLocParser.setStart(location,pos); location = GenomeLocParser.setStop(location,pos); // retrieve annotation data
|
||||||
rodRefSeq annotation = (refseqIterator == null ? null : refseqIterator.seekForward(location));
|
rodRefSeq annotation = (refseqIterator == null ? null : refseqIterator.seekForward(location));
|
||||||
|
|
||||||
int total_variant_count = 0;
|
int total_variant_count = 0;
|
||||||
|
|
@ -412,7 +405,7 @@ public class IndelGenotyperWalker extends ReadWalker<Integer,Integer> {
|
||||||
"\tTUMOR TOO DIRTY\t"+total_mismatches_tumor);
|
"\tTUMOR TOO DIRTY\t"+total_mismatches_tumor);
|
||||||
continue; // too dirty
|
continue; // too dirty
|
||||||
}
|
}
|
||||||
location.setStart(pos); location.setStop(pos); // retrieve annotation data
|
location = GenomeLocParser.setStart(location,pos); location = GenomeLocParser.setStop(location,pos); // retrieve annotation data
|
||||||
rodRefSeq annotation = (refseqIterator == null ? null : refseqIterator.seekForward(location));
|
rodRefSeq annotation = (refseqIterator == null ? null : refseqIterator.seekForward(location));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ public class IntervalMergerWalker extends ReadWalker<Integer,Integer> {
|
||||||
// at this point, we're in the first interval.
|
// at this point, we're in the first interval.
|
||||||
// now we can merge any other intervals which we overlap
|
// now we can merge any other intervals which we overlap
|
||||||
while ( intervals.size() > 0 && loc.overlapsP(intervals.getFirst()) )
|
while ( intervals.size() > 0 && loc.overlapsP(intervals.getFirst()) )
|
||||||
firstInterval.setStop(intervals.removeFirst().getStop());
|
firstInterval = GenomeLocParser.setStop(firstInterval,intervals.removeFirst().getStop());
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,17 +93,17 @@ public class MismatchIntervalWalker extends LocusWalker<Pair<GenomeLoc, Boolean>
|
||||||
// if there is no interval to the left, then this is the first one
|
// if there is no interval to the left, then this is the first one
|
||||||
if ( sum.second == null ) {
|
if ( sum.second == null ) {
|
||||||
sum.second = value.first;
|
sum.second = value.first;
|
||||||
sum.second.setStart(sum.second.getStart() - windowSize + firstMismatch + 1);
|
sum.second = GenomeLocParser.setStart(sum.second, sum.second.getStart() - windowSize + firstMismatch + 1);
|
||||||
}
|
}
|
||||||
// if the intervals don't overlap, print out the leftmost one and start a new one
|
// if the intervals don't overlap, print out the leftmost one and start a new one
|
||||||
else if ( value.first.getStop() - sum.second.getStop() > windowSize ) {
|
else if ( value.first.getStop() - sum.second.getStop() > windowSize ) {
|
||||||
out.println(sum.second);
|
out.println(sum.second);
|
||||||
sum.second = value.first;
|
sum.second = value.first;
|
||||||
sum.second.setStart(sum.second.getStart() - windowSize + firstMismatch + 1);
|
sum.second = GenomeLocParser.setStart(sum.second,sum.second.getStart() - windowSize + firstMismatch + 1);
|
||||||
}
|
}
|
||||||
// otherwise, merge them
|
// otherwise, merge them
|
||||||
else {
|
else {
|
||||||
sum.second.setStop(value.first.getStop());
|
sum.second = GenomeLocParser.setStop(sum.second, value.first.getStop());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ public class SNPClusterWalker extends RefWalker<GenomeLoc, GenomeLoc> {
|
||||||
|
|
||||||
// if the last SNP location was within a window, merge them
|
// if the last SNP location was within a window, merge them
|
||||||
if ( value.getStart() - sum.getStop() <= windowSize ) {
|
if ( value.getStart() - sum.getStop() <= windowSize ) {
|
||||||
sum.setStop(value.getStart());
|
sum = GenomeLocParser.setStop(sum,value.getStart());
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,11 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
|
||||||
* the basic components of a genome loc, its contig index,
|
* the basic components of a genome loc, its contig index,
|
||||||
* start and stop position, and (optionally) the contig name
|
* start and stop position, and (optionally) the contig name
|
||||||
*/
|
*/
|
||||||
private int contigIndex;
|
protected final int contigIndex;
|
||||||
private long start;
|
protected final long start;
|
||||||
private long stop;
|
protected final long stop;
|
||||||
private String contigName;
|
protected final String contigName;
|
||||||
static int MAX_CONTIG;
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// constructors
|
// constructors
|
||||||
|
|
@ -146,28 +145,6 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
|
||||||
public final boolean throughEndOfContigP() { return this.stop == Integer.MAX_VALUE; }
|
public final boolean throughEndOfContigP() { return this.stop == Integer.MAX_VALUE; }
|
||||||
public final boolean atBeginningOfContigP() { return this.start == 1; }
|
public final boolean atBeginningOfContigP() { return this.start == 1; }
|
||||||
|
|
||||||
/** Sets contig name. UNSAFE since it 1) does NOT update contig index; 2) does not validate the name
|
|
||||||
*
|
|
||||||
* @param contig
|
|
||||||
*/
|
|
||||||
public void setContig(String contig) {
|
|
||||||
this.contigName = contig;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Sets contig index. UNSAFE since it 1) does NOT update contig name; 2) does not validate the index
|
|
||||||
*
|
|
||||||
* @param contig
|
|
||||||
*/
|
|
||||||
public void setContigIndex(int contig) {
|
|
||||||
this.contigIndex = contig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStart(long start) {
|
|
||||||
this.start = start;
|
|
||||||
}
|
|
||||||
public void setStop(long stop) {
|
|
||||||
this.stop = stop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean isSingleBP() { return stop == start; }
|
public final boolean isSingleBP() { return stop == start; }
|
||||||
|
|
||||||
|
|
@ -230,19 +207,7 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
|
||||||
return ( comparison == 1 || ( comparison == 0 && this.getStart() > that.getStop() ));
|
return ( comparison == 1 || ( comparison == 0 && this.getStart() > that.getStop() ));
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void incPos() {
|
|
||||||
incPos(1);
|
|
||||||
}
|
|
||||||
public final void incPos(long by) {
|
|
||||||
this.start += by;
|
|
||||||
this.stop += by;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final GenomeLoc nextLoc() {
|
|
||||||
GenomeLoc n = new GenomeLoc(this);
|
|
||||||
n.incPos();
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check to see whether two genomeLocs are equal.
|
* Check to see whether two genomeLocs are equal.
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,6 @@ public class GenomeLocParser {
|
||||||
logger.debug(String.format(" %s (%d bp)", contig.getSequenceName(), contig.getSequenceLength()));
|
logger.debug(String.format(" %s (%d bp)", contig.getSequenceName(), contig.getSequenceLength()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GenomeLoc.MAX_CONTIG = contigInfo.getSequences().size();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -221,7 +220,7 @@ public class GenomeLocParser {
|
||||||
logger.debug("Locations are:" + Utils.join(", ", locs));
|
logger.debug("Locations are:" + Utils.join(", ", locs));
|
||||||
return locs;
|
return locs;
|
||||||
} catch (Exception e) { // TODO: fix this so that it passes the message from the exception, and doesn't print it out
|
} catch (Exception e) { // TODO: fix this so that it passes the message from the exception, and doesn't print it out
|
||||||
throw new StingException(String.format("Invalid locations string: %s, format is loc1;loc2; where each locN can be 'chr2', 'chr2:1000000' or 'chr2:1,000,000-2,000,000'", str),e);
|
throw new StingException(String.format("Invalid locations string: %s, format is loc1;loc2; where each locN can be 'chr2', 'chr2:1000000' or 'chr2:1,000,000-2,000,000'", str), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -446,14 +445,10 @@ public class GenomeLocParser {
|
||||||
* @return the genome loc if it's valid, otherwise we throw an exception
|
* @return the genome loc if it's valid, otherwise we throw an exception
|
||||||
*/
|
*/
|
||||||
private static GenomeLoc verifyGenomeLoc(GenomeLoc toReturn) {
|
private static GenomeLoc verifyGenomeLoc(GenomeLoc toReturn) {
|
||||||
// conditions to fail on - we currently use a start of zero to indicate infinite read count, so don't check for that
|
|
||||||
//if ((toReturn.getStop() < toReturn.getStart())) {
|
|
||||||
// throw new StingException("Parameters to GenomeLocParser are incorrect: the start position is after the stop (Start = " + toReturn.getStart() + " stop = " + toReturn.getStop() + ")");
|
|
||||||
//}
|
|
||||||
if (toReturn.getStart() < 0) {
|
if (toReturn.getStart() < 0) {
|
||||||
throw new StingException("Parameters to GenomeLocParser are incorrect: the start position is less than 0");
|
throw new StingException("Parameters to GenomeLocParser are incorrect: the start position is less than 0");
|
||||||
}
|
}
|
||||||
if (toReturn.getStop() < 0) {
|
if ((toReturn.getStop() != -1) && (toReturn.getStop() < 0)) {
|
||||||
throw new StingException("Parameters to GenomeLocParser are incorrect: the stop position is less than 0");
|
throw new StingException("Parameters to GenomeLocParser are incorrect: the stop position is less than 0");
|
||||||
}
|
}
|
||||||
if (toReturn.getContigIndex() < 0) {
|
if (toReturn.getContigIndex() < 0) {
|
||||||
|
|
@ -483,8 +478,102 @@ public class GenomeLocParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check to make sure that we've setup the contig information
|
* create a new genome loc, given an old location and a new contig
|
||||||
|
*
|
||||||
|
* @param loc the old location
|
||||||
|
* @param contig the new contig to set
|
||||||
|
*
|
||||||
|
* @return a new genome loc with an updated contig name and index
|
||||||
*/
|
*/
|
||||||
|
public static GenomeLoc setContig(GenomeLoc loc, String contig) {
|
||||||
|
checkSetup();
|
||||||
|
if (!GenomeLocParser.contigInfo.getSequences().contains(contig)) {
|
||||||
|
throw new StingException("Contig name ( " + contig + " ) not in the set sequence dictionary.");
|
||||||
|
}
|
||||||
|
return verifyGenomeLoc(new GenomeLoc(contig, GenomeLocParser.contigInfo.getSequences().indexOf(contig), loc.start, loc.getStop()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Sets contig index. UNSAFE since it 1) does NOT update contig name; 2) does not validate the index
|
||||||
|
*
|
||||||
|
* @param contig
|
||||||
|
*/
|
||||||
|
public static GenomeLoc setContigIndex(GenomeLoc loc, int contig) {
|
||||||
|
checkSetup();
|
||||||
|
if ((contig >= GenomeLocParser.contigInfo.getSequences().size()) || (contig < 0)) {
|
||||||
|
throw new StingException("Contig index ( " + contig + " ) is not in the sequence dictionary set.");
|
||||||
|
}
|
||||||
|
return verifyGenomeLoc(new GenomeLoc(GenomeLocParser.contigInfo.getSequence(contig).getSequenceName(), contig, loc.start, loc.getStop()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a new genome loc from an existing loc, with a new start position
|
||||||
|
*
|
||||||
|
* @param loc the old location
|
||||||
|
* @param start a new start position
|
||||||
|
*
|
||||||
|
* @return the newly created genome loc
|
||||||
|
*/
|
||||||
|
public static GenomeLoc setStart(GenomeLoc loc, long start) {
|
||||||
|
checkSetup();
|
||||||
|
if (loc.getContigIndex() < 0 || loc.getContigIndex() >= contigInfo.getSequences().size()) {
|
||||||
|
throw new StingException("Genome loc passed in to setStart has a contig index outside the range of our current sequence dictionary");
|
||||||
|
}
|
||||||
|
if (start > GenomeLocParser.contigInfo.getSequences().get(loc.getContigIndex()).getSequenceLength()) {
|
||||||
|
throw new StingException("start value of " + start + " is greater than the contig length, and is not -1.");
|
||||||
|
}
|
||||||
|
return verifyGenomeLoc(new GenomeLoc(loc.getContig(), loc.getContigIndex(), start, loc.getStop()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a new genome loc from an existing loc, with a new stop position
|
||||||
|
*
|
||||||
|
* @param loc the old location
|
||||||
|
* @param stop a new stop position
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static GenomeLoc setStop(GenomeLoc loc, long stop) {
|
||||||
|
checkSetup();
|
||||||
|
if (loc.getContigIndex() < 0 || loc.getContigIndex() >= contigInfo.getSequences().size()) {
|
||||||
|
throw new StingException("Genome loc passed in to setStart has a contig index outside the range of our current sequence dictionary");
|
||||||
|
}
|
||||||
|
if ((stop != -1) && (stop > GenomeLocParser.contigInfo.getSequences().get(loc.getContigIndex()).getSequenceLength())) {
|
||||||
|
throw new StingException("stop value of " + stop + " is greater than the contig length, and is not -1.");
|
||||||
|
}
|
||||||
|
return verifyGenomeLoc(new GenomeLoc(loc.getContig(), loc.getContigIndex(), loc.start, stop));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a new genome loc, with an incremented position
|
||||||
|
* @param loc the old location
|
||||||
|
* @return a new genome loc
|
||||||
|
*/
|
||||||
|
public static GenomeLoc incPos(GenomeLoc loc) {
|
||||||
|
return incPos(loc, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a new genome loc, with an incremented position
|
||||||
|
* @param loc the old location
|
||||||
|
* @param by how much to move the start and stop by
|
||||||
|
* @return a new genome loc
|
||||||
|
*/
|
||||||
|
public static GenomeLoc incPos(GenomeLoc loc, long by) {
|
||||||
|
return verifyGenomeLoc(new GenomeLoc(loc.getContig(), loc.getContigIndex(), loc.start + by, loc.stop + by));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create a new genome loc with an incremented position
|
||||||
|
* @param loc the location
|
||||||
|
* @return a new genome loc
|
||||||
|
*/
|
||||||
|
public static GenomeLoc nextLoc(GenomeLoc loc) {
|
||||||
|
return incPos(loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** check to make sure that we've setup the contig information */
|
||||||
private static void checkSetup() {
|
private static void checkSetup() {
|
||||||
if (contigInfo == null) {
|
if (contigInfo == null) {
|
||||||
throw new StingException("The GenomeLocParser hasn't been setup with a contig sequence yet");
|
throw new StingException("The GenomeLocParser hasn't been setup with a contig sequence yet");
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package org.broadinstitute.sting.utils;
|
package org.broadinstitute.sting.utils;
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hanging data off the reference sequence
|
* Hanging data off the reference sequence
|
||||||
|
|
@ -271,12 +270,12 @@ public class RefHanger<T> {
|
||||||
else {
|
else {
|
||||||
//assert pos.compareTo(getRightLoc()) == 1 : pos + " " + getRightLoc() + " => " + pos.compareTo(getRightLoc());
|
//assert pos.compareTo(getRightLoc()) == 1 : pos + " " + getRightLoc() + " => " + pos.compareTo(getRightLoc());
|
||||||
|
|
||||||
GenomeLoc nextRight = getRightLoc().nextLoc();
|
GenomeLoc nextRight = GenomeLocParser.nextLoc(getRightLoc());
|
||||||
while (pos.compareTo(nextRight) == 1) {
|
while (pos.compareTo(nextRight) == 1) {
|
||||||
//printState();
|
//printState();
|
||||||
//System.out.printf(" *** Extending %s, heading for %s%n", nextRight, pos);
|
//System.out.printf(" *** Extending %s, heading for %s%n", nextRight, pos);
|
||||||
ensurePos(nextRight);
|
ensurePos(nextRight);
|
||||||
nextRight = nextRight.nextLoc();
|
nextRight = GenomeLocParser.nextLoc(nextRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
ensurePos(pos);
|
ensurePos(pos);
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,10 @@ public class RefHangerTest extends BaseTest {
|
||||||
l4 = Arrays.asList(7, 8);
|
l4 = Arrays.asList(7, 8);
|
||||||
l5 = Arrays.asList(9, 10);
|
l5 = Arrays.asList(9, 10);
|
||||||
p1 = GenomeLocParser.createGenomeLoc(0, 1, 1);
|
p1 = GenomeLocParser.createGenomeLoc(0, 1, 1);
|
||||||
p2 = new GenomeLoc(p1).nextLoc();
|
p2 = GenomeLocParser.nextLoc(p1);
|
||||||
p3 = new GenomeLoc(p2).nextLoc();
|
p3 = GenomeLocParser.nextLoc(p2);
|
||||||
p4 = new GenomeLoc(p3).nextLoc();
|
p4 = GenomeLocParser.nextLoc(p3);
|
||||||
p5 = new GenomeLoc(p4).nextLoc();
|
p5 = GenomeLocParser.nextLoc(p4);
|
||||||
|
|
||||||
filledHanger.addDataList(Arrays.asList(p1, p2, p3, p4, p5),
|
filledHanger.addDataList(Arrays.asList(p1, p2, p3, p4, p5),
|
||||||
Arrays.asList(l1, l2, l3, l4, l5));
|
Arrays.asList(l1, l2, l3, l4, l5));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue