Skip array needs to also be used in the updateDataForRead function of the delocalized BQSR.
This commit is contained in:
parent
ff6ebbf3fd
commit
c9944d81ef
|
|
@ -106,47 +106,49 @@ public class AdvancedRecalibrationEngine extends StandardRecalibrationEngine imp
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void updateDataForRead(final GATKSAMRecord read, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors ) {
|
public synchronized void updateDataForRead(final GATKSAMRecord read, final boolean[] skip, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors ) {
|
||||||
for( int offset = 0; offset < read.getReadBases().length; offset++ ) {
|
for( int offset = 0; offset < read.getReadBases().length; offset++ ) {
|
||||||
final ReadCovariates readCovariates = covariateKeySetFrom(read);
|
if( !skip[offset] ) {
|
||||||
|
final ReadCovariates readCovariates = covariateKeySetFrom(read);
|
||||||
|
|
||||||
tempQualArray[EventType.BASE_SUBSTITUTION.index] = read.getBaseQualities()[offset];
|
tempQualArray[EventType.BASE_SUBSTITUTION.index] = read.getBaseQualities()[offset];
|
||||||
tempFractionalErrorArray[EventType.BASE_SUBSTITUTION.index] = snpErrors[offset];
|
tempFractionalErrorArray[EventType.BASE_SUBSTITUTION.index] = snpErrors[offset];
|
||||||
tempQualArray[EventType.BASE_INSERTION.index] = read.getBaseInsertionQualities()[offset];
|
tempQualArray[EventType.BASE_INSERTION.index] = read.getBaseInsertionQualities()[offset];
|
||||||
tempFractionalErrorArray[EventType.BASE_INSERTION.index] = insertionErrors[offset];
|
tempFractionalErrorArray[EventType.BASE_INSERTION.index] = insertionErrors[offset];
|
||||||
tempQualArray[EventType.BASE_DELETION.index] = read.getBaseDeletionQualities()[offset];
|
tempQualArray[EventType.BASE_DELETION.index] = read.getBaseDeletionQualities()[offset];
|
||||||
tempFractionalErrorArray[EventType.BASE_DELETION.index] = deletionErrors[offset];
|
tempFractionalErrorArray[EventType.BASE_DELETION.index] = deletionErrors[offset];
|
||||||
|
|
||||||
for (final EventType eventType : EventType.values()) {
|
for (final EventType eventType : EventType.values()) {
|
||||||
final int[] keys = readCovariates.getKeySet(offset, eventType);
|
final int[] keys = readCovariates.getKeySet(offset, eventType);
|
||||||
final int eventIndex = eventType.index;
|
final int eventIndex = eventType.index;
|
||||||
final byte qual = tempQualArray[eventIndex];
|
final byte qual = tempQualArray[eventIndex];
|
||||||
final double isError = tempFractionalErrorArray[eventIndex];
|
final double isError = tempFractionalErrorArray[eventIndex];
|
||||||
|
|
||||||
final NestedIntegerArray<RecalDatum> rgRecalTable = recalibrationTables.getTable(RecalibrationTables.TableType.READ_GROUP_TABLE);
|
final NestedIntegerArray<RecalDatum> rgRecalTable = recalibrationTables.getTable(RecalibrationTables.TableType.READ_GROUP_TABLE);
|
||||||
final RecalDatum rgPreviousDatum = rgRecalTable.get(keys[0], eventIndex);
|
final RecalDatum rgPreviousDatum = rgRecalTable.get(keys[0], eventIndex);
|
||||||
final RecalDatum rgThisDatum = createDatumObject(qual, isError);
|
final RecalDatum rgThisDatum = createDatumObject(qual, isError);
|
||||||
if (rgPreviousDatum == null) // key doesn't exist yet in the map so make a new bucket and add it
|
if (rgPreviousDatum == null) // key doesn't exist yet in the map so make a new bucket and add it
|
||||||
rgRecalTable.put(rgThisDatum, keys[0], eventIndex);
|
rgRecalTable.put(rgThisDatum, keys[0], eventIndex);
|
||||||
else
|
|
||||||
rgPreviousDatum.combine(rgThisDatum);
|
|
||||||
|
|
||||||
final NestedIntegerArray<RecalDatum> qualRecalTable = recalibrationTables.getTable(RecalibrationTables.TableType.QUALITY_SCORE_TABLE);
|
|
||||||
final RecalDatum qualPreviousDatum = qualRecalTable.get(keys[0], keys[1], eventIndex);
|
|
||||||
if (qualPreviousDatum == null)
|
|
||||||
qualRecalTable.put(createDatumObject(qual, isError), keys[0], keys[1], eventIndex);
|
|
||||||
else
|
|
||||||
qualPreviousDatum.increment(1.0, isError);
|
|
||||||
|
|
||||||
for (int i = 2; i < covariates.length; i++) {
|
|
||||||
if (keys[i] < 0)
|
|
||||||
continue;
|
|
||||||
final NestedIntegerArray<RecalDatum> covRecalTable = recalibrationTables.getTable(i);
|
|
||||||
final RecalDatum covPreviousDatum = covRecalTable.get(keys[0], keys[1], keys[i], eventIndex);
|
|
||||||
if (covPreviousDatum == null)
|
|
||||||
covRecalTable.put(createDatumObject(qual, isError), keys[0], keys[1], keys[i], eventIndex);
|
|
||||||
else
|
else
|
||||||
covPreviousDatum.increment(1.0, isError);
|
rgPreviousDatum.combine(rgThisDatum);
|
||||||
|
|
||||||
|
final NestedIntegerArray<RecalDatum> qualRecalTable = recalibrationTables.getTable(RecalibrationTables.TableType.QUALITY_SCORE_TABLE);
|
||||||
|
final RecalDatum qualPreviousDatum = qualRecalTable.get(keys[0], keys[1], eventIndex);
|
||||||
|
if (qualPreviousDatum == null)
|
||||||
|
qualRecalTable.put(createDatumObject(qual, isError), keys[0], keys[1], eventIndex);
|
||||||
|
else
|
||||||
|
qualPreviousDatum.increment(1.0, isError);
|
||||||
|
|
||||||
|
for (int i = 2; i < covariates.length; i++) {
|
||||||
|
if (keys[i] < 0)
|
||||||
|
continue;
|
||||||
|
final NestedIntegerArray<RecalDatum> covRecalTable = recalibrationTables.getTable(i);
|
||||||
|
final RecalDatum covPreviousDatum = covRecalTable.get(keys[0], keys[1], keys[i], eventIndex);
|
||||||
|
if (covPreviousDatum == null)
|
||||||
|
covRecalTable.put(createDatumObject(qual, isError), keys[0], keys[1], keys[i], eventIndex);
|
||||||
|
else
|
||||||
|
covPreviousDatum.increment(1.0, isError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,5 +35,5 @@ public interface RecalibrationEngine {
|
||||||
|
|
||||||
public void updateDataForPileupElement(final PileupElement pileupElement, final byte refBase);
|
public void updateDataForPileupElement(final PileupElement pileupElement, final byte refBase);
|
||||||
|
|
||||||
public void updateDataForRead(final GATKSAMRecord read, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors);
|
public void updateDataForRead(final GATKSAMRecord read, final boolean[] skip, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ public class StandardRecalibrationEngine implements RecalibrationEngine, PublicP
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void updateDataForRead( final GATKSAMRecord read, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors ) {
|
public synchronized void updateDataForRead( final GATKSAMRecord read, final boolean[] skip, final double[] snpErrors, final double[] insertionErrors, final double[] deletionErrors ) {
|
||||||
throw new UnsupportedOperationException("Delocalized BQSR is not available in the GATK-lite version");
|
throw new UnsupportedOperationException("Delocalized BQSR is not available in the GATK-lite version");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue