Haplotype now consolidates cigars in setCigar
-- This fixes edge base bugs where non-consolidated cigars are causing problems in users of the Haplotype object. Input arguments are now checks (let's see if we blow up)
This commit is contained in:
parent
67cd407854
commit
8656bd5e29
|
|
@ -36,10 +36,12 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||||
import org.broadinstitute.sting.utils.sam.AlignmentUtils;
|
import org.broadinstitute.sting.utils.sam.AlignmentUtils;
|
||||||
import org.broadinstitute.sting.utils.sam.ReadUtils;
|
import org.broadinstitute.sting.utils.sam.ReadUtils;
|
||||||
import org.broadinstitute.variant.variantcontext.Allele;
|
import org.broadinstitute.variant.variantcontext.Allele;
|
||||||
import org.broadinstitute.variant.variantcontext.VariantContext;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.*;
|
import java.util.Arrays;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Haplotype extends Allele {
|
public class Haplotype extends Allele {
|
||||||
private GenomeLoc genomeLocation = null;
|
private GenomeLoc genomeLocation = null;
|
||||||
|
|
@ -52,21 +54,36 @@ public class Haplotype extends Allele {
|
||||||
/**
|
/**
|
||||||
* Main constructor
|
* Main constructor
|
||||||
*
|
*
|
||||||
* @param bases bases
|
* @param bases a non-null array of bases
|
||||||
* @param isRef is reference allele?
|
* @param isRef is this the reference haplotype?
|
||||||
*/
|
*/
|
||||||
public Haplotype( final byte[] bases, final boolean isRef ) {
|
public Haplotype( final byte[] bases, final boolean isRef ) {
|
||||||
super(bases.clone(), isRef);
|
super(bases.clone(), isRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new non-ref haplotype
|
||||||
|
*
|
||||||
|
* @param bases a non-null array of bases
|
||||||
|
*/
|
||||||
public Haplotype( final byte[] bases ) {
|
public Haplotype( final byte[] bases ) {
|
||||||
this(bases, false);
|
this(bases, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new haplotype with bases
|
||||||
|
*
|
||||||
|
* Requires bases.length == cigar.getReadLength()
|
||||||
|
*
|
||||||
|
* @param bases a non-null array of bases
|
||||||
|
* @param isRef is this the reference haplotype?
|
||||||
|
* @param alignmentStartHapwrtRef offset of this haplotype w.r.t. the reference
|
||||||
|
* @param cigar the cigar that maps this haplotype to the reference sequence
|
||||||
|
*/
|
||||||
public Haplotype( final byte[] bases, final boolean isRef, final int alignmentStartHapwrtRef, final Cigar cigar) {
|
public Haplotype( final byte[] bases, final boolean isRef, final int alignmentStartHapwrtRef, final Cigar cigar) {
|
||||||
this(bases, isRef);
|
this(bases, isRef);
|
||||||
this.alignmentStartHapwrtRef = alignmentStartHapwrtRef;
|
this.alignmentStartHapwrtRef = alignmentStartHapwrtRef;
|
||||||
this.cigar = cigar;
|
setCigar(cigar);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -127,6 +144,11 @@ public class Haplotype extends Allele {
|
||||||
this.alignmentStartHapwrtRef = alignmentStartHapwrtRef;
|
this.alignmentStartHapwrtRef = alignmentStartHapwrtRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cigar for this haplotype. Note that cigar is guarenteed to be consolidated
|
||||||
|
* in that multiple adjacent equal operates will have been merged
|
||||||
|
* @return the cigar of this haplotype
|
||||||
|
*/
|
||||||
public Cigar getCigar() {
|
public Cigar getCigar() {
|
||||||
return cigar;
|
return cigar;
|
||||||
}
|
}
|
||||||
|
|
@ -144,8 +166,17 @@ public class Haplotype extends Allele {
|
||||||
return AlignmentUtils.consolidateCigar(extendedHaplotypeCigar);
|
return AlignmentUtils.consolidateCigar(extendedHaplotypeCigar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the cigar of this haplotype to cigar.
|
||||||
|
*
|
||||||
|
* Note that this function consolidates the cigar, so that 1M1M1I1M1M => 2M1I2M
|
||||||
|
*
|
||||||
|
* @param cigar a cigar whose readLength == length()
|
||||||
|
*/
|
||||||
public void setCigar( final Cigar cigar ) {
|
public void setCigar( final Cigar cigar ) {
|
||||||
this.cigar = cigar;
|
this.cigar = AlignmentUtils.consolidateCigar(cigar);
|
||||||
|
if ( this.cigar.getReadLength() != length() )
|
||||||
|
throw new IllegalArgumentException("Read length " + length() + " not equal to the read length of the cigar " + cigar.getReadLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isArtificialHaplotype() {
|
public boolean isArtificialHaplotype() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue