Merge branch 'master' of github.com:broadinstitute/gsa-unstable

This commit is contained in:
Menachem Fromer 2013-01-09 11:04:53 -05:00
commit da3aa68492
4 changed files with 57 additions and 28 deletions

View File

@ -115,19 +115,31 @@ public class GenotypingEngine {
} }
} }
} else { // we are in GGA mode! } else { // we are in GGA mode!
int compCount = 0;
for( final VariantContext compVC : activeAllelesToGenotype ) { for( final VariantContext compVC : activeAllelesToGenotype ) {
if( compVC.getStart() == loc ) { if( compVC.getStart() == loc ) {
priorityList.clear();
int alleleCount = 0; int alleleCount = 0;
for( final Allele compAltAllele : compVC.getAlternateAlleles() ) { for( final Allele compAltAllele : compVC.getAlternateAlleles() ) {
ArrayList<Allele> alleleSet = new ArrayList<Allele>(2); ArrayList<Allele> alleleSet = new ArrayList<Allele>(2);
alleleSet.add(compVC.getReference()); alleleSet.add(compVC.getReference());
alleleSet.add(compAltAllele); alleleSet.add(compAltAllele);
priorityList.add("Allele" + alleleCount); final String vcSourceName = "Comp" + compCount + "Allele" + alleleCount;
eventsAtThisLoc.add(new VariantContextBuilder(compVC).alleles(alleleSet).source("Allele"+alleleCount).make()); // check if this event is already in the list of events due to a repeat in the input alleles track
final VariantContext candidateEventToAdd = new VariantContextBuilder(compVC).alleles(alleleSet).source(vcSourceName).make();
boolean alreadyExists = false;
for( final VariantContext eventToTest : eventsAtThisLoc ) {
if( eventToTest.hasSameAllelesAs(candidateEventToAdd) ) {
alreadyExists = true;
}
}
if( !alreadyExists ) {
priorityList.add(vcSourceName);
eventsAtThisLoc.add(candidateEventToAdd);
}
alleleCount++; alleleCount++;
} }
} }
compCount++;
} }
} }
@ -137,14 +149,14 @@ public class GenotypingEngine {
final Map<Event, List<Haplotype>> eventMapper = createEventMapper(loc, eventsAtThisLoc, haplotypes); final Map<Event, List<Haplotype>> eventMapper = createEventMapper(loc, eventsAtThisLoc, haplotypes);
// Sanity check the priority list for mistakes // Sanity check the priority list for mistakes
sanityCheckPriorityList( priorityList, eventsAtThisLoc ); validatePriorityList( priorityList, eventsAtThisLoc );
// Merge the event to find a common reference representation // Merge the event to find a common reference representation
final VariantContext mergedVC = VariantContextUtils.simpleMerge(eventsAtThisLoc, priorityList, VariantContextUtils.FilteredRecordMergeType.KEEP_IF_ANY_UNFILTERED, VariantContextUtils.GenotypeMergeType.PRIORITIZE, false, false, null, false, false); final VariantContext mergedVC = VariantContextUtils.simpleMerge(eventsAtThisLoc, priorityList, VariantContextUtils.FilteredRecordMergeType.KEEP_IF_ANY_UNFILTERED, VariantContextUtils.GenotypeMergeType.PRIORITIZE, false, false, null, false, false);
if( mergedVC == null ) { continue; } if( mergedVC == null ) { continue; }
if( eventsAtThisLoc.size() != mergedVC.getAlternateAlleles().size() ) { if( eventsAtThisLoc.size() != mergedVC.getAlternateAlleles().size() ) {
throw new ReviewedStingException("Something went wrong in the merging of alleles."); throw new ReviewedStingException("Record size mismatch! Something went wrong in the merging of alleles.");
} }
final HashMap<VariantContext, Allele> mergeMap = new HashMap<VariantContext, Allele>(); final HashMap<VariantContext, Allele> mergeMap = new HashMap<VariantContext, Allele>();
mergeMap.put(null, mergedVC.getReference()); // the reference event (null) --> the reference allele mergeMap.put(null, mergedVC.getReference()); // the reference event (null) --> the reference allele
@ -198,7 +210,7 @@ public class GenotypingEngine {
return genotypes; return genotypes;
} }
private void sanityCheckPriorityList( final ArrayList<String> priorityList, final ArrayList<VariantContext> eventsAtThisLoc ) { private void validatePriorityList( final ArrayList<String> priorityList, final ArrayList<VariantContext> eventsAtThisLoc ) {
for( final VariantContext vc : eventsAtThisLoc ) { for( final VariantContext vc : eventsAtThisLoc ) {
if( !priorityList.contains(vc.getSource()) ) { if( !priorityList.contains(vc.getSource()) ) {
throw new ReviewedStingException("Event found on haplotype that wasn't added to priority list. Something went wrong in the merging of alleles."); throw new ReviewedStingException("Event found on haplotype that wasn't added to priority list. Something went wrong in the merging of alleles.");
@ -453,8 +465,7 @@ public class GenotypingEngine {
protected static Map<Event, List<Haplotype>> createEventMapper( final int loc, final List<VariantContext> eventsAtThisLoc, final List<Haplotype> haplotypes ) { protected static Map<Event, List<Haplotype>> createEventMapper( final int loc, final List<VariantContext> eventsAtThisLoc, final List<Haplotype> haplotypes ) {
final Map<Event, List<Haplotype>> eventMapper = new HashMap<Event, List<Haplotype>>(eventsAtThisLoc.size()+1); final Map<Event, List<Haplotype>> eventMapper = new HashMap<Event, List<Haplotype>>(eventsAtThisLoc.size()+1);
final Allele refAllele = eventsAtThisLoc.get(0).getReference(); VariantContext refVC = eventsAtThisLoc.get(0); // the genome loc is the only safe thing to pull out of this VC because ref/alt pairs might change reference basis
VariantContext refVC = eventsAtThisLoc.get(0);
eventMapper.put(new Event(null), new ArrayList<Haplotype>()); eventMapper.put(new Event(null), new ArrayList<Haplotype>());
for( final VariantContext vc : eventsAtThisLoc ) { for( final VariantContext vc : eventsAtThisLoc ) {
eventMapper.put(new Event(vc), new ArrayList<Haplotype>()); eventMapper.put(new Event(vc), new ArrayList<Haplotype>());
@ -464,11 +475,11 @@ public class GenotypingEngine {
for( final Haplotype h : haplotypes ) { for( final Haplotype h : haplotypes ) {
if( h.isArtificialHaplotype() && loc == h.getArtificialAllelePosition() ) { if( h.isArtificialHaplotype() && loc == h.getArtificialAllelePosition() ) {
final ArrayList<Allele> alleles = new ArrayList<Allele>(2); final ArrayList<Allele> alleles = new ArrayList<Allele>(2);
alleles.add(refAllele); alleles.add(h.getArtificialRefAllele());
alleles.add(h.getArtificialAllele()); alleles.add(h.getArtificialAltAllele());
final Event artificialVC = new Event( (new VariantContextBuilder()).source("artificialHaplotype") final Event artificialVC = new Event( (new VariantContextBuilder()).source("artificialHaplotype")
.alleles(alleles) .alleles(alleles)
.loc(refVC.getChr(), refVC.getStart(), refVC.getStart() + refAllele.length() - 1).make() ); .loc(refVC.getChr(), refVC.getStart(), refVC.getStart() + h.getArtificialRefAllele().length() - 1).make() );
if( eventMapper.containsKey(artificialVC) ) { if( eventMapper.containsKey(artificialVC) ) {
eventMapper.get(artificialVC).add(h); eventMapper.get(artificialVC).add(h);
} }

View File

@ -124,8 +124,8 @@ public class LikelihoodCalculationEngine {
final Haplotype haplotype = haplotypes.get(jjj); final Haplotype haplotype = haplotypes.get(jjj);
// TODO -- need to test against a reference/position with non-standard bases // TODO -- need to test against a reference/position with non-standard bases
if ( !Allele.acceptableAlleleBases(haplotype.getBases(), false) ) //if ( !Allele.acceptableAlleleBases(haplotype.getBases(), false) )
continue; // continue;
final int haplotypeStart = ( previousHaplotypeSeen == null ? 0 : computeFirstDifferingPosition(haplotype.getBases(), previousHaplotypeSeen.getBases()) ); final int haplotypeStart = ( previousHaplotypeSeen == null ? 0 : computeFirstDifferingPosition(haplotype.getBases(), previousHaplotypeSeen.getBases()) );
previousHaplotypeSeen = haplotype; previousHaplotypeSeen = haplotype;

View File

@ -379,8 +379,9 @@ public class SimpleDeBruijnAssembler extends LocalAssemblyEngine {
h.setAlignmentStartHapwrtRef( swConsensus2.getAlignmentStart2wrt1() ); h.setAlignmentStartHapwrtRef( swConsensus2.getAlignmentStart2wrt1() );
h.setCigar( AlignmentUtils.leftAlignIndel(swConsensus2.getCigar(), ref, h.getBases(), swConsensus2.getAlignmentStart2wrt1(), 0) ); h.setCigar( AlignmentUtils.leftAlignIndel(swConsensus2.getCigar(), ref, h.getBases(), swConsensus2.getAlignmentStart2wrt1(), 0) );
if ( haplotype.isArtificialHaplotype() ) if ( haplotype.isArtificialHaplotype() ) {
h.setArtificialAllele(haplotype.getArtificialAllele(), haplotype.getArtificialAllelePosition()); h.setArtificialEvent(haplotype.getArtificialEvent());
}
h.leftBreakPoint = leftBreakPoint; h.leftBreakPoint = leftBreakPoint;
h.rightBreakPoint = rightBreakPoint; h.rightBreakPoint = rightBreakPoint;
if( swConsensus2.getCigar().toString().contains("S") || swConsensus2.getCigar().getReferenceLength() != activeRegionStop - activeRegionStart ) { // protect against SW failures if( swConsensus2.getCigar().toString().contains("S") || swConsensus2.getCigar().getReferenceLength() != activeRegionStop - activeRegionStart ) { // protect against SW failures

View File

@ -46,8 +46,7 @@ public class Haplotype {
private int alignmentStartHapwrtRef; private int alignmentStartHapwrtRef;
public int leftBreakPoint = 0; public int leftBreakPoint = 0;
public int rightBreakPoint = 0; public int rightBreakPoint = 0;
private Allele artificialAllele = null; private Event artificialEvent = null;
private int artificialAllelePosition = -1;
/** /**
* Create a simple consensus sequence with provided bases and a uniform quality over all bases of qual * Create a simple consensus sequence with provided bases and a uniform quality over all bases of qual
@ -70,10 +69,9 @@ public class Haplotype {
this(bases, 0); this(bases, 0);
} }
protected Haplotype( final byte[] bases, final Allele artificialAllele, final int artificialAllelePosition ) { protected Haplotype( final byte[] bases, final Event artificialEvent ) {
this(bases, 0); this(bases, 0);
this.artificialAllele = artificialAllele; this.artificialEvent = artificialEvent;
this.artificialAllelePosition = artificialAllelePosition;
} }
public Haplotype( final byte[] bases, final GenomeLoc loc ) { public Haplotype( final byte[] bases, final GenomeLoc loc ) {
@ -152,20 +150,27 @@ public class Haplotype {
} }
public boolean isArtificialHaplotype() { public boolean isArtificialHaplotype() {
return artificialAllele != null; return artificialEvent != null;
} }
public Allele getArtificialAllele() { public Event getArtificialEvent() {
return artificialAllele; return artificialEvent;
}
public Allele getArtificialRefAllele() {
return artificialEvent.ref;
}
public Allele getArtificialAltAllele() {
return artificialEvent.alt;
} }
public int getArtificialAllelePosition() { public int getArtificialAllelePosition() {
return artificialAllelePosition; return artificialEvent.pos;
} }
public void setArtificialAllele(final Allele artificialAllele, final int artificialAllelePosition) { public void setArtificialEvent( final Event artificialEvent ) {
this.artificialAllele = artificialAllele; this.artificialEvent = artificialEvent;
this.artificialAllelePosition = artificialAllelePosition;
} }
@Requires({"refInsertLocation >= 0"}) @Requires({"refInsertLocation >= 0"})
@ -179,7 +184,7 @@ public class Haplotype {
newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, ArrayUtils.subarray(bases, 0, haplotypeInsertLocation)); // bases before the variant newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, ArrayUtils.subarray(bases, 0, haplotypeInsertLocation)); // bases before the variant
newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, altAllele.getBases()); // the alt allele of the variant newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, altAllele.getBases()); // the alt allele of the variant
newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, ArrayUtils.subarray(bases, haplotypeInsertLocation + refAllele.length(), bases.length)); // bases after the variant newHaplotypeBases = ArrayUtils.addAll(newHaplotypeBases, ArrayUtils.subarray(bases, haplotypeInsertLocation + refAllele.length(), bases.length)); // bases after the variant
return new Haplotype(newHaplotypeBases, altAllele, genomicInsertLocation); return new Haplotype(newHaplotypeBases, new Event(refAllele, altAllele, genomicInsertLocation));
} }
public static class HaplotypeBaseComparator implements Comparator<Haplotype>, Serializable { public static class HaplotypeBaseComparator implements Comparator<Haplotype>, Serializable {
@ -244,4 +249,16 @@ public class Haplotype {
return haplotypeMap; return haplotypeMap;
} }
private static class Event {
public Allele ref;
public Allele alt;
public int pos;
public Event( final Allele ref, final Allele alt, final int pos ) {
this.ref = ref;
this.alt = alt;
this.pos = pos;
}
}
} }