[med-svn] [Git][med-team/picard-tools][upstream] New upstream version 2.18.23+dfsg
Andreas Tille
gitlab at salsa.debian.org
Fri Jan 11 22:04:09 GMT 2019
Andreas Tille pushed to branch upstream at Debian Med / picard-tools
Commits:
2d8023c3 by Andreas Tille at 2019-01-11T21:51:59Z
New upstream version 2.18.23+dfsg
- - - - -
28 changed files:
- src/main/java/picard/analysis/directed/RnaSeqMetricsCollector.java
- src/main/java/picard/illumina/IlluminaBasecallsToFastq.java
- src/main/java/picard/illumina/IlluminaBasecallsToSam.java
- src/main/java/picard/illumina/NewIlluminaBasecallsConverter.java
- src/main/java/picard/illumina/parser/BaseIlluminaDataProvider.java
- src/main/java/picard/illumina/parser/CbclData.java
- src/main/java/picard/illumina/parser/FilterParser.java
- src/main/java/picard/illumina/parser/IlluminaData.java
- src/main/java/picard/illumina/parser/MultiTileFilterParser.java
- src/main/java/picard/illumina/parser/readers/CbclReader.java
- src/main/java/picard/sam/markduplicates/UmiUtil.java
- src/main/java/picard/sam/markduplicates/util/OpticalDuplicateFinder.java
- src/main/java/picard/sam/util/ReadNameParser.java
- src/main/java/picard/util/ThreadPoolExecutorWithExceptions.java
- src/test/java/picard/analysis/CollectRnaSeqMetricsTest.java
- src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java
- src/test/java/picard/illumina/ExtractIlluminaBarcodesTest.java
- src/test/java/picard/illumina/parser/FilterParserTest.java
- src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTest.java
- src/test/java/picard/sam/markduplicates/UmiUtilTest.java
- testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
- testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1102_barcode.txt.gz
- testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.1.fastq
- testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.2.fastq
- testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.barcode_1.fastq
- testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.barcode_2.fastq
- testdata/picard/illumina/151T8B8B151T_cbcl/sams/1102.NN.sam
- testdata/picard/illumina/151T8B8B151T_cbcl/sams/NN.sam
Changes:
=====================================
src/main/java/picard/analysis/directed/RnaSeqMetricsCollector.java
=====================================
@@ -40,7 +40,7 @@ public class RnaSeqMetricsCollector extends SAMRecordMultiLevelCollector<RnaSeqM
private final OverlapDetector<Gene> geneOverlapDetector;
private final OverlapDetector<Interval> ribosomalSequenceOverlapDetector;
private final boolean collectCoverageStatistics;
-
+
public RnaSeqMetricsCollector(final Set<MetricAccumulationLevel> accumulationLevels, final List<SAMReadGroupRecord> samRgRecords,
final Long ribosomalBasesInitialValue, OverlapDetector<Gene> geneOverlapDetector, OverlapDetector<Interval> ribosomalSequenceOverlapDetector,
final HashSet<Integer> ignoredSequenceIndices, final int minimumLength, final StrandSpecificity strandSpecificity,
@@ -167,8 +167,7 @@ public class RnaSeqMetricsCollector extends SAMRecordMultiLevelCollector<RnaSeqM
}
if (intersectionLength/(double)fragmentInterval.length() >= rrnaFragmentPercentage) {
// Assume entire read is ribosomal.
- // TODO: Should count reads, not bases?
- metrics.RIBOSOMAL_BASES += rec.getReadLength();
+ metrics.RIBOSOMAL_BASES += getNumAlignedBases(rec);
metrics.PF_ALIGNED_BASES += getNumAlignedBases(rec);
return;
}
=====================================
src/main/java/picard/illumina/IlluminaBasecallsToFastq.java
=====================================
@@ -281,7 +281,7 @@ public class IlluminaBasecallsToFastq extends CommandLineProgram {
FIRST_TILE, TILE_LIMIT, queryNameComparator,
new FastqRecordsForClusterCodec(readStructure.templates.length(),
readStructure.sampleBarcodes.length(), readStructure.molecularBarcode.length()),
- FastqRecordsForCluster.class, bclQualityEvaluationStrategy, INCLUDE_NON_PF_READS, IGNORE_UNEXPECTED_BARCODES);
+ FastqRecordsForCluster.class, bclQualityEvaluationStrategy, IGNORE_UNEXPECTED_BARCODES);
} else {
basecallsConverter = new IlluminaBasecallsConverter<>(BASECALLS_DIR, BARCODES_DIR, LANE, readStructure,
sampleBarcodeFastqWriterMap, demultiplex, Math.max(1, MAX_READS_IN_RAM_PER_TILE / readsPerCluster), TMP_DIR, NUM_PROCESSORS,
=====================================
src/main/java/picard/illumina/IlluminaBasecallsToSam.java
=====================================
@@ -312,7 +312,7 @@ public class IlluminaBasecallsToSam extends CommandLineProgram {
TMP_DIR, NUM_PROCESSORS,
FIRST_TILE, TILE_LIMIT, new QueryNameComparator(),
new Codec(numOutputRecords),
- SAMRecordsForCluster.class, bclQualityEvaluationStrategy, INCLUDE_NON_PF_READS, IGNORE_UNEXPECTED_BARCODES);
+ SAMRecordsForCluster.class, bclQualityEvaluationStrategy, IGNORE_UNEXPECTED_BARCODES);
} else {
basecallsConverter = new IlluminaBasecallsConverter<>(BASECALLS_DIR, BARCODES_DIR, LANE, readStructure,
barcodeSamWriterMap, true, MAX_READS_IN_RAM_PER_TILE / numOutputRecords, TMP_DIR, NUM_PROCESSORS, FORCE_GC,
=====================================
src/main/java/picard/illumina/NewIlluminaBasecallsConverter.java
=====================================
@@ -14,9 +14,11 @@ import picard.illumina.parser.ReadStructure;
import picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
import picard.illumina.parser.readers.BclQualityEvaluationStrategy;
import picard.illumina.parser.readers.LocsFileReader;
+import picard.util.ThreadPoolExecutorUtil;
import picard.util.ThreadPoolExecutorWithExceptions;
import java.io.File;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -24,9 +26,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -36,12 +36,10 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
private final List<AbstractIlluminaPositionFileReader.PositionInfo> locs = new ArrayList<>();
private final File[] filterFiles;
private final Map<String, ThreadPoolExecutorWithExceptions> barcodeWriterThreads = new HashMap<>();
+ private final Map<Integer, List<RecordWriter>> completedWork = Collections.synchronizedMap(new HashMap<>());
private final Map<Integer, File> barcodesFiles = new HashMap<>();
- private final boolean includeNonPfReads;
/**
- * Constructor setting includeNonPfReads to true by default.
- *
* @param basecallsDir Where to read basecalls from.
* @param barcodesDir Where to read barcodes from (optional; use basecallsDir if not specified).
* @param lane What lane to process.
@@ -73,52 +71,11 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass,
final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
final boolean ignoreUnexpectedBarcodes) {
- this(basecallsDir, barcodesDir, lane, readStructure, barcodeRecordWriterMap,
- demultiplex, maxReadsInRamPerTile, tmpDirs, numProcessors, firstTile,
- tileLimit, outputRecordComparator, codecPrototype, outputRecordClass,
- bclQualityEvaluationStrategy, true, ignoreUnexpectedBarcodes);
- }
-
- /**
- * @param basecallsDir Where to read basecalls from.
- * @param barcodesDir Where to read barcodes from (optional; use basecallsDir if not specified).
- * @param lane What lane to process.
- * @param readStructure How to interpret each cluster.
- * @param barcodeRecordWriterMap Map from barcode to CLUSTER_OUTPUT_RECORD writer. If demultiplex is false, must contain
- * one writer stored with key=null.
- * @param demultiplex If true, output is split by barcode, otherwise all are written to the same output stream.
- * @param maxReadsInRamPerTile Configures number of reads each tile will store in RAM before spilling to disk.
- * @param tmpDirs For SortingCollection spilling.
- * @param numProcessors Controls number of threads. If <= 0, the number of threads allocated is
- * available cores - numProcessors.
- * @param firstTile (For debugging) If non-null, start processing at this tile.
- * @param tileLimit (For debugging) If non-null, process no more than this many tiles.
- * @param outputRecordComparator For sorting output records within a single tile.
- * @param codecPrototype For spilling output records to disk.
- * @param outputRecordClass Inconveniently needed to create SortingCollections.
- * @param includeNonPfReads If true, will include ALL reads (including those which do not have PF set)
- * @param ignoreUnexpectedBarcodes If true, will ignore reads whose called barcode is not found in barcodeRecordWriterMap,
- */
- public NewIlluminaBasecallsConverter(final File basecallsDir, final File barcodesDir, final int lane,
- final ReadStructure readStructure,
- final Map<String, ? extends ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD>> barcodeRecordWriterMap,
- final boolean demultiplex,
- final int maxReadsInRamPerTile,
- final List<File> tmpDirs, final int numProcessors,
- final Integer firstTile,
- final Integer tileLimit,
- final Comparator<CLUSTER_OUTPUT_RECORD> outputRecordComparator,
- final SortingCollection.Codec<CLUSTER_OUTPUT_RECORD> codecPrototype,
- final Class<CLUSTER_OUTPUT_RECORD> outputRecordClass,
- final BclQualityEvaluationStrategy bclQualityEvaluationStrategy,
- final boolean includeNonPfReads,
- final boolean ignoreUnexpectedBarcodes) {
super(barcodeRecordWriterMap, maxReadsInRamPerTile, tmpDirs, codecPrototype, ignoreUnexpectedBarcodes,
demultiplex, outputRecordComparator, bclQualityEvaluationStrategy,
outputRecordClass, numProcessors, new IlluminaDataProviderFactory(basecallsDir,
barcodesDir, lane, readStructure, bclQualityEvaluationStrategy));
- this.includeNonPfReads = includeNonPfReads;
this.tiles = new ArrayList<>();
barcodeRecordWriterMap.keySet().forEach(barcode -> barcodeWriterThreads.put(barcode, new ThreadPoolExecutorWithExceptions(1)));
@@ -196,31 +153,26 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
completedWorkExecutor.shutdown();
//thread by surface tile
- final ThreadPoolExecutor tileProcessingExecutor = new ThreadPoolExecutorWithExceptions(numThreads);
- workChecker.setTileProcessingExecutor(tileProcessingExecutor);
+ final ThreadPoolExecutorWithExceptions tileProcessingExecutor = new ThreadPoolExecutorWithExceptions(numThreads);
for (final Integer tile : tiles) {
- tileProcessingExecutor.submit(new TileProcessor(tile, barcodesFiles.get(tile), workChecker));
+ tileProcessingExecutor.submit(new TileProcessor(tile, barcodesFiles.get(tile)));
}
tileProcessingExecutor.shutdown();
- awaitThreadPoolTermination("Reading executor", tileProcessingExecutor);
- awaitThreadPoolTermination("Tile completion executor", completedWorkExecutor);
-
- barcodeWriterThreads.values().forEach(ThreadPoolExecutor::shutdown);
- barcodeWriterThreads.forEach((barcode, executor) -> awaitThreadPoolTermination(barcode + " writer", executor));
- }
-
- private void awaitThreadPoolTermination(final String executorName, final ThreadPoolExecutor executorService) {
- try {
- while (!executorService.awaitTermination(1, TimeUnit.SECONDS)) {
- log.info(String.format("%s waiting for job completion. Finished jobs - %d : Running jobs - %d : Queued jobs - %d",
- executorName, executorService.getCompletedTaskCount(), executorService.getActiveCount(),
- executorService.getQueue().size()));
- }
- } catch (final InterruptedException e) {
- e.printStackTrace();
+ ThreadPoolExecutorUtil.awaitThreadPoolTermination("Reading executor", tileProcessingExecutor, Duration.ofMinutes(5));
+
+ // if there was an exception reading then initiate an immediate shutdown.
+ if (tileProcessingExecutor.exception != null) {
+ int tasksStillRunning = completedWorkExecutor.shutdownNow().size();
+ tasksStillRunning += barcodeWriterThreads.values().stream().mapToLong(executor -> executor.shutdownNow().size()).sum();
+ throw new PicardException("Reading executor had exceptions. There were " + tasksStillRunning
+ + " tasks were still running or queued and have been cancelled.", tileProcessingExecutor.exception);
+ } else {
+ ThreadPoolExecutorUtil.awaitThreadPoolTermination("Tile completion executor", completedWorkExecutor, Duration.ofMinutes(5));
+ barcodeWriterThreads.values().forEach(ThreadPoolExecutor::shutdown);
+ barcodeWriterThreads.forEach((barcode, executor) -> ThreadPoolExecutorUtil.awaitThreadPoolTermination(barcode + " writer", executor, Duration.ofMinutes(5)));
}
}
@@ -249,16 +201,30 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
}
}
+ private class Closer implements Runnable {
+ private final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer;
+ private final String barcode;
+
+ private Closer(final ConvertedClusterDataWriter<CLUSTER_OUTPUT_RECORD> writer, final String barcode) {
+ this.writer = writer;
+ this.barcode = barcode;
+ }
+
+ @Override
+ public void run() {
+ log.debug("Closing writer for barcode " + barcode);
+ this.writer.close();
+ }
+ }
+
private class TileProcessor implements Runnable {
private final int tileNum;
private final Map<String, SortingCollection<CLUSTER_OUTPUT_RECORD>> barcodeToRecordCollection = new HashMap<>();
private final File barcodeFile;
- private final CompletedWorkChecker workChecker;
- TileProcessor(final int tileNum, final File barcodeFile, CompletedWorkChecker workChecker) {
+ TileProcessor(final int tileNum, final File barcodeFile) {
this.tileNum = tileNum;
this.barcodeFile = barcodeFile;
- this.workChecker = workChecker;
}
@Override
@@ -268,12 +234,8 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
while (dataProvider.hasNext()) {
final ClusterData cluster = dataProvider.next();
readProgressLogger.record(null, 0);
- // If this cluster is passing, or we do NOT want to ONLY emit passing reads, then add it to
- // the next
- if (cluster.isPf() || includeNonPfReads) {
- final String barcode = (demultiplex ? cluster.getMatchedBarcode() : null);
- addRecord(barcode, converter.convertClusterToOutputRecord(cluster));
- }
+ final String barcode = (demultiplex ? cluster.getMatchedBarcode() : null);
+ addRecord(barcode, converter.convertClusterToOutputRecord(cluster));
}
dataProvider.close();
@@ -285,8 +247,7 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
writerList.add(new RecordWriter(writer, value, barcode));
});
-
- workChecker.registerCompletedWork(tileNum, writerList);
+ completedWork.put(tileNum, writerList);
log.info("Finished processing tile " + tileNum);
}
@@ -314,21 +275,19 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
final int maxRecordsInRam =
Math.max(1, maxReadsInRamPerTile /
barcodeRecordWriterMap.size());
- return SortingCollection.newInstance(
+ return SortingCollection.newInstanceFromPaths(
outputRecordClass,
codecPrototype.clone(),
outputRecordComparator,
maxRecordsInRam,
- tmpDirs);
+ IOUtil.filesToPaths(tmpDirs));
}
}
private class CompletedWorkChecker implements Runnable {
- private final Map<Integer, List<RecordWriter>> completedWork = new ConcurrentHashMap<>();
private int currentTileIndex = 0;
- private ThreadPoolExecutor tileProcessingExecutor;
@Override
public void run() {
@@ -337,30 +296,19 @@ public class NewIlluminaBasecallsConverter<CLUSTER_OUTPUT_RECORD> extends Baseca
if (completedWork.containsKey(currentTile)) {
log.info("Writing out tile " + currentTile);
completedWork.get(currentTile).forEach(writer -> barcodeWriterThreads.get(writer.getBarcode()).submit(writer));
- completedWork.remove(currentTile);
currentTileIndex++;
- }
- if(tileProcessingExecutor.isTerminated() && completedWork.size() == 0){
- break;
+ } else {
+ try {
+ Thread.sleep(5000);
+ } catch (final InterruptedException e) {
+ throw new PicardException(e.getMessage(), e);
+ }
}
}
//we are all done scheduling work.. now schedule the closes
- barcodeRecordWriterMap.forEach((barcode, writer) -> {
- ThreadPoolExecutorWithExceptions executorService = barcodeWriterThreads.get(barcode);
- executorService.shutdown();
- awaitThreadPoolTermination( "Barcode writer (" + barcode + ")", executorService);
- log.debug("Closing writer for barcode " + barcode);
- writer.close();
- });
+ barcodeRecordWriterMap.forEach((barcode, writer) -> barcodeWriterThreads.get(barcode).submit(new Closer(writer, barcode)));
}
- void registerCompletedWork(int tileNum, List<RecordWriter> writerList) {
- completedWork.put(tileNum, writerList);
- }
-
- void setTileProcessingExecutor(ThreadPoolExecutor tileProcessingExecutor) {
- this.tileProcessingExecutor = tileProcessingExecutor;
- }
}
}
=====================================
src/main/java/picard/illumina/parser/BaseIlluminaDataProvider.java
=====================================
@@ -42,7 +42,7 @@ public abstract class BaseIlluminaDataProvider implements Iterator<ClusterData>,
}
protected void addData(final ClusterData clusterData, final PfData pfData) {
- clusterData.setPf(pfData.isPfRead());
+ clusterData.setPf(pfData.isPf());
}
protected void addData(final ClusterData clusterData, final BarcodeData barcodeData) {
@@ -72,9 +72,9 @@ public abstract class BaseIlluminaDataProvider implements Iterator<ClusterData>,
for (int i = 0; i < numReads; i++) {
clusterData.getRead(i).setQualities(qualities[i]);
}
- clusterData.setPf(cbclData.isPfRead());
- clusterData.setX(cbclData.getXCoordinate());
- clusterData.setY(cbclData.getYCoordinate());
+ clusterData.setPf(cbclData.isPf());
+ clusterData.setX(cbclData.getPositionInfo().xQseqCoord);
+ clusterData.setY(cbclData.getPositionInfo().yQseqCoord);
}
abstract void seekToTile(int seekAfterFirstRead);
=====================================
src/main/java/picard/illumina/parser/CbclData.java
=====================================
@@ -9,27 +9,30 @@ import picard.illumina.parser.readers.AbstractIlluminaPositionFileReader;
public class CbclData extends BclData implements PfData, PositionalData {
private final int tile;
private AbstractIlluminaPositionFileReader.PositionInfo positionInfo;
- private boolean pfRead;
-
public CbclData(int[] outputLengths, int tile) {
super(outputLengths);
this.tile = tile;
}
+ //CBCLs currently only contain PF reads.
+ @Override
+ public boolean isPf() {
+ return true;
+ }
+
public int getTile() {
return tile;
}
- public void setPositionInfo(AbstractIlluminaPositionFileReader.PositionInfo positionInfo) {
- this.positionInfo = positionInfo;
+ public AbstractIlluminaPositionFileReader.PositionInfo getPositionInfo() {
+ return positionInfo;
}
- public void setPfRead(boolean pfRead) {
- this.pfRead = pfRead;
+ public void setPositionInfo(AbstractIlluminaPositionFileReader.PositionInfo positionInfo) {
+ this.positionInfo = positionInfo;
}
-
@Override
public int getXCoordinate() {
return this.positionInfo.xQseqCoord;
@@ -39,9 +42,4 @@ public class CbclData extends BclData implements PfData, PositionalData {
public int getYCoordinate() {
return this.positionInfo.yQseqCoord;
}
-
- @Override
- public boolean isPfRead() {
- return pfRead;
- }
}
=====================================
src/main/java/picard/illumina/parser/FilterParser.java
=====================================
@@ -65,7 +65,7 @@ class FilterParser extends PerTileParser<PfData> {
public PfData next() {
final boolean nextValue = reader.next();
return new PfData() {
- public boolean isPfRead() {
+ public boolean isPf() {
return nextValue;
}
};
=====================================
src/main/java/picard/illumina/parser/IlluminaData.java
=====================================
@@ -59,7 +59,7 @@ interface RawIntensityData extends IlluminaData{
}
interface PfData extends IlluminaData {
- public boolean isPfRead();
+ public boolean isPf();
}
interface BarcodeData extends IlluminaData {
=====================================
src/main/java/picard/illumina/parser/MultiTileFilterParser.java
=====================================
@@ -46,7 +46,7 @@ public class MultiTileFilterParser extends MultiTileParser<PfData> {
final boolean nextVal = reader.next();
return new PfData() {
@Override
- public boolean isPfRead() {
+ public boolean isPf() {
return nextVal;
}
};
=====================================
src/main/java/picard/illumina/parser/readers/CbclReader.java
=====================================
@@ -200,13 +200,13 @@ public class CbclReader extends BaseBclReader implements CloseableIterator<CbclD
for (final int outputLength : outputLengths) {
for (int cycle = 0; cycle < outputLength; cycle++) {
- final TileData currentCycleTileInfo = cycleData[totalCycleCount].tileInfo;
+ final CycleData currentCycleData = cycleData[totalCycleCount];
try {
if (cachedTile[totalCycleCount] == null) {
- if (!cachedFilter.containsKey(currentCycleTileInfo.tileNum)) {
- cacheFilterAndLocs(currentCycleTileInfo, locs);
+ if (!cachedFilter.containsKey(cycleData[totalCycleCount].tileInfo.tileNum)) {
+ cacheFilterAndLocs(cycleData[totalCycleCount].tileInfo, locs);
}
- cacheTile(totalCycleCount, currentCycleTileInfo);
+ cacheTile(totalCycleCount, cycleData[totalCycleCount].tileInfo, currentCycleData);
}
} catch (final IOException e) {
// when logging the error, increment cycle by 1, since totalCycleCount is zero-indexed but Illumina directories are 1-indexed.
@@ -269,9 +269,7 @@ public class CbclReader extends BaseBclReader implements CloseableIterator<CbclD
private void advance() {
int totalCycleCount = 0;
- int tileNum = cycleData[totalCycleCount].tileInfo.tileNum;
- final CbclData data = new CbclData(outputLengths, tileNum);
- int tilePosition = cachedTilePosition[totalCycleCount];
+ final CbclData data = new CbclData(outputLengths, cycleData[totalCycleCount].tileInfo.tileNum);
for (int read = 0; read < outputLengths.length; read++) {
for (int cycle = 0; cycle < outputLengths[read]; cycle++) {
@@ -290,25 +288,31 @@ public class CbclReader extends BaseBclReader implements CloseableIterator<CbclD
totalCycleCount++;
}
}
-
data.setPositionInfo(positionInfoIterator.next());
- data.setPfRead(cachedFilter.get(tileNum).get(tilePosition));
this.queue = data;
}
private void cacheFilterAndLocs(final TileData currentTileData, final List<AbstractIlluminaPositionFileReader.PositionInfo> locs) {
final List<Boolean> filterValues = new ArrayList<>();
final FilterFileReader reader = new FilterFileReader(filterFileMap.get(currentTileData.tileNum));
+ final Iterator<AbstractIlluminaPositionFileReader.PositionInfo> positionInfoIterator = locs.iterator();
while (reader.hasNext()) {
filterValues.add(reader.next());
}
- this.positionInfoIterator = locs.iterator();
+ final List<AbstractIlluminaPositionFileReader.PositionInfo> positions = new ArrayList<>();
+ for (final boolean filterValue : filterValues) {
+ final AbstractIlluminaPositionFileReader.PositionInfo info = positionInfoIterator.next();
+ if (filterValue) {
+ positions.add(info);
+ }
+ }
+ this.positionInfoIterator = positions.iterator();
cachedFilter.put(currentTileData.tileNum, filterValues);
}
- private void cacheTile(final int totalCycleCount, final TileData tileData) throws IOException {
+ private void cacheTile(final int totalCycleCount, final TileData tileData, final CycleData currentCycleData) throws IOException {
final byte[] tileByteArray = new byte[tileData.compressedBlockSize];
// Read the whole compressed block into a buffer, then sanity check the length
@@ -329,11 +333,38 @@ public class CbclReader extends BaseBclReader implements CloseableIterator<CbclD
byte[] decompressedByteArray = decompressTile(totalCycleCount, tileData, byteInputStream);
// Read uncompressed data from the buffer and expand each nibble into a full byte for ease of use
- cachedTile[totalCycleCount] = promoteNibblesToBytes(decompressedByteArray);
+ byte[] unNibbledByteArray = promoteNibblesToBytes(decompressedByteArray);
+ cachedTile[totalCycleCount] = filterNonPfReads(tileData, currentCycleData, unNibbledByteArray);
cachedTilePosition[totalCycleCount] = 0;
}
+ private byte[] filterNonPfReads(TileData tileData, CycleData currentCycleData, byte[] unNibbledByteArray) {
+ // Write buffer contents to cached tile array
+ // if nonPF reads are included we need to strip them out
+ if (!currentCycleData.pfExcluded) {
+ final List<Boolean> filterDatas = cachedFilter.get(tileData.tileNum);
+ int sum = 0;
+ for (final boolean b : filterDatas) {
+ sum += b ? 1 : 0;
+ }
+ final byte[] filteredByteArray = new byte[sum];
+ int filterIndex = 0;
+ int basecallIndex = 0;
+ for (final boolean filterData : filterDatas) {
+ final byte readByte = unNibbledByteArray[filterIndex];
+ if (filterData) {
+ filteredByteArray[basecallIndex] = readByte;
+ basecallIndex++;
+ }
+ filterIndex++;
+ }
+ return filteredByteArray;
+ } else {
+ return unNibbledByteArray;
+ }
+ }
+
private byte[] promoteNibblesToBytes(byte[] decompressedByteArray) {
//we are going to explode the nibbles in to bytes to make PF filtering easier
final byte[] unNibbledByteArray = new byte[decompressedByteArray.length * 2];
@@ -376,6 +407,10 @@ public class CbclReader extends BaseBclReader implements CloseableIterator<CbclD
return decompressedByteArray;
}
+ public CycleData[] getCycleData() {
+ return cycleData;
+ }
+
public int getHeaderSize() {
return headerSize;
}
=====================================
src/main/java/picard/sam/markduplicates/UmiUtil.java
=====================================
@@ -82,34 +82,49 @@ class UmiUtil {
throw new PicardException("Duplex UMIs must be of the form X-Y where X and Y are equal length UMIs, for example AT-GA. Found UMI, " + umi);
}
- if (isTopStrand(record)) {
- return split[0] + DUPLEX_UMI_DELIMITER + split[1];
- } else {
- return split[1] + DUPLEX_UMI_DELIMITER + split[0];
+ switch (getStrand(record)) {
+ case BOTTOM:
+ return split[1] + DUPLEX_UMI_DELIMITER + split[0];
+ default:
+ return umi;
}
}
/**
- * Determines if the read represented by a SAM record belongs to the top or bottom strand.
+ * Determines if the read represented by a SAM record belongs to the top or bottom strand
+ * or if it cannot determine strand position due to one of the reads being unmapped.
* Top strand is defined as having a read 1 unclipped 5' coordinate
* less than the read 2 unclipped 5' coordinate. If a read is unmapped
- * it is considered to have an unclipped 5' coordinate of 0. If the mate
- * belongs to a different contig from the read, then the reference
+ * we do not attempt to determine the strand to which the read or its mate belongs.
+ * If the mate belongs to a different contig from the read, then the reference
* index for the read and its mate is used in leu of the unclipped 5' coordinate.
* @param rec Record to determine top or bottom strand
- * @return Top or bottom strand, true (top), false (bottom).
+ * @return Top or bottom strand, unknown if it cannot be determined.
*/
- static boolean isTopStrand(final SAMRecord rec) {
+ static ReadStrand getStrand(final SAMRecord rec) {
+ if (rec.getReadUnmappedFlag() || rec.getMateUnmappedFlag()) {
+ return ReadStrand.UNKNOWN;
+ }
// If the read pair are aligned to different contigs we use
// the reference index to determine relative 5' coordinate ordering.
+ // Both the read and its mate should not have their unmapped flag set to true.
if (!rec.getReferenceIndex().equals(rec.getMateReferenceIndex())) {
- return rec.getFirstOfPairFlag() == (rec.getReferenceIndex() < rec.getMateReferenceIndex());
+ if (rec.getFirstOfPairFlag() == (rec.getReferenceIndex() < rec.getMateReferenceIndex())) {
+ return ReadStrand.TOP;
+ } else {
+ return ReadStrand.BOTTOM;
+ }
}
final int read5PrimeStart = (rec.getReadNegativeStrandFlag()) ? rec.getUnclippedEnd() : rec.getUnclippedStart();
final int mate5PrimeStart = (rec.getMateNegativeStrandFlag()) ? SAMUtils.getMateUnclippedEnd(rec) : SAMUtils.getMateUnclippedStart(rec);
- return rec.getFirstOfPairFlag() == (read5PrimeStart < mate5PrimeStart);
+
+ if (rec.getFirstOfPairFlag() == (read5PrimeStart <= mate5PrimeStart)) {
+ return ReadStrand.TOP;
+ } else {
+ return ReadStrand.BOTTOM;
+ }
}
/**
@@ -133,7 +148,22 @@ class UmiUtil {
molecularIdentifier.append(assignedUmi);
if (duplexUmis) {
- molecularIdentifier.append(isTopStrand(rec) ? TOP_STRAND_DUPLEX : BOTTOM_STRAND_DUPLEX);
+ // Reads whose strand position can be determined will have their
+ // molecularIdentifier set to include an identifier appended that
+ // indicates top or bottom strand.
+ ReadStrand strand = getStrand(rec);
+ switch (strand) {
+ case TOP:
+ molecularIdentifier.append(TOP_STRAND_DUPLEX);
+ break;
+ case BOTTOM:
+ molecularIdentifier.append(BOTTOM_STRAND_DUPLEX);
+ break;
+ default:
+ // If we can't determine strand position nothing
+ // is appended to the molecularIdentifier.
+ break;
+ }
}
rec.setAttribute(molecularIdentifierTag, molecularIdentifier.toString());
}
@@ -146,4 +176,14 @@ class UmiUtil {
static int getUmiLength(final String umi) {
return umi.length() - StringUtils.countMatches(umi, UmiUtil.DUPLEX_UMI_DELIMITER);
}
+
+ /**
+ * An enum to hold the strand position (TOP or BOTTOM) of a read.
+ */
+ public enum ReadStrand {
+ TOP,
+ BOTTOM,
+ UNKNOWN
+ }
+
}
=====================================
src/main/java/picard/sam/markduplicates/util/OpticalDuplicateFinder.java
=====================================
@@ -126,7 +126,7 @@ public class OpticalDuplicateFinder extends ReadNameParser implements Serializab
// If there is only one or zero reads passed in (so there are obviously no optical duplicates),
// or if there are too many reads (so we don't want to try to run this expensive n^2 algorithm),
// then just return an array of all false
- if (length < 2 || length > maxDuplicateSetSize) {
+ if (this.readNameRegex == null || length < 2 || length > maxDuplicateSetSize) {
return opticalDuplicateFlags;
}
=====================================
src/main/java/picard/sam/util/ReadNameParser.java
=====================================
@@ -31,7 +31,7 @@ public class ReadNameParser implements Serializable {
private final boolean useOptimizedDefaultParsing; // was the regex default?
- private final String readNameRegex;
+ protected final String readNameRegex;
private Pattern readNamePattern;
@@ -63,7 +63,7 @@ public class ReadNameParser implements Serializable {
* @param log the log to which to write messages.
*/
public ReadNameParser(final String readNameRegex, final Log log) {
- this.useOptimizedDefaultParsing = readNameRegex.equals(DEFAULT_READ_NAME_REGEX);
+ this.useOptimizedDefaultParsing = DEFAULT_READ_NAME_REGEX.equals(readNameRegex);
this.readNameRegex = readNameRegex;
this.log = log;
}
=====================================
src/main/java/picard/util/ThreadPoolExecutorWithExceptions.java
=====================================
@@ -1,6 +1,5 @@
package picard.util;
-import htsjdk.samtools.util.Log;
import picard.PicardException;
import java.util.concurrent.CancellationException;
@@ -15,7 +14,8 @@ import java.util.concurrent.TimeUnit;
* while executing
*/
public class ThreadPoolExecutorWithExceptions extends ThreadPoolExecutor {
- private static final Log log = Log.getInstance(ThreadPoolExecutorWithExceptions.class);
+ public Throwable exception = null;
+
/**
* Creates a fixed size thread pool executor that will rethrow exceptions from submitted jobs.
*
@@ -42,6 +42,7 @@ public class ThreadPoolExecutorWithExceptions extends ThreadPoolExecutor {
}
}
if (t != null) {
+ exception = t;
throw new PicardException(t.getMessage(), t);
}
}
@@ -50,8 +51,7 @@ public class ThreadPoolExecutorWithExceptions extends ThreadPoolExecutor {
protected void beforeExecute(Thread t, Runnable r) {
super.beforeExecute(t, r);
t.setUncaughtExceptionHandler((t1, e) -> {
- log.error(e.getCause());
- throw new PicardException("Uncaught exception in thread: " + t1.getName() +" : " + e.getCause().getMessage(), e.getCause());
+ throw new PicardException("Uncaught exception in thread: " + t1.getName() + " : " + e.getMessage(), e);
});
}
}
=====================================
src/test/java/picard/analysis/CollectRnaSeqMetricsTest.java
=====================================
@@ -382,6 +382,59 @@ public class CollectRnaSeqMetricsTest extends CommandLineProgramTest {
Assert.assertEquals(metrics.PCT_R2_TRANSCRIPT_STRAND_READS, 0.333333);
}
+ @Test
+ public void testPctRibosomalBases() throws Exception {
+ final String sequence = "chr1";
+ final String ignoredSequence = "chrM";
+
+ // Create some alignments that hit the ribosomal sequence, various parts of the gene, and intergenic.
+ final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate);
+ // Set seed so that strandedness is consistent among runs.
+ builder.setRandomSeed(0);
+ final int sequenceIndex = builder.getHeader().getSequenceIndex(sequence);
+
+ builder.addPair("rrnaPair", sequenceIndex, 400, 500, false, false, "35I1M", "35I1M", true, true, -1);
+ builder.addFrag("frag1", sequenceIndex, 150, true, false, "34I2M", "*", -1);
+ builder.addFrag("frag2", sequenceIndex, 190, true, false, "35I1M", "*", -1);
+ builder.addFrag("ignoredFrag", builder.getHeader().getSequenceIndex(ignoredSequence), 1, false);
+ final File samFile = File.createTempFile("tmp.collectRnaSeqMetrics.", ".sam");
+ samFile.deleteOnExit();
+ try (SAMFileWriter samWriter = new SAMFileWriterFactory().makeSAMWriter(builder.getHeader(), false, samFile)) {
+ for (final SAMRecord rec : builder.getRecords()) {
+ samWriter.addAlignment(rec);
+ }
+ }
+
+ // Create an interval list with one ribosomal interval.
+ final Interval rRnaInterval = new Interval(sequence, 300, 520, true, "rRNA");
+ final IntervalList rRnaIntervalList = new IntervalList(builder.getHeader());
+ rRnaIntervalList.add(rRnaInterval);
+ final File rRnaIntervalsFile = File.createTempFile("tmp.rRna.", ".interval_list");
+ rRnaIntervalsFile.deleteOnExit();
+ rRnaIntervalList.write(rRnaIntervalsFile);
+
+ // Generate the metrics.
+ final File metricsFile = File.createTempFile("tmp.", ".rna_metrics");
+ metricsFile.deleteOnExit();
+
+ final String[] args = new String[]{
+ "INPUT=" + samFile.getAbsolutePath(),
+ "OUTPUT=" + metricsFile.getAbsolutePath(),
+ "REF_FLAT=" + getRefFlatFile(sequence).getAbsolutePath(),
+ "RIBOSOMAL_INTERVALS=" + rRnaIntervalsFile.getAbsolutePath(),
+ "STRAND_SPECIFICITY=SECOND_READ_TRANSCRIPTION_STRAND",
+ "IGNORE_SEQUENCE=" + ignoredSequence
+ };
+ Assert.assertEquals(runPicardCommandLine(args), 0);
+
+ final MetricsFile<RnaSeqMetrics, Comparable<?>> output = new MetricsFile<>();
+ output.read(new FileReader(metricsFile));
+
+ final RnaSeqMetrics metrics = output.getMetrics().get(0);
+
+ Assert.assertEquals(metrics.PCT_RIBOSOMAL_BASES, 0.4);
+ }
+
public File getRefFlatFile(String sequence) throws Exception {
// Create a refFlat file with a single gene containing two exons, one of which is overlapped by the
// ribosomal interval.
=====================================
src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java
=====================================
@@ -157,20 +157,20 @@ public class CollectIlluminaBasecallingMetricsTest {
public void testNovaseqIndexedRun() throws Exception {
final MetricsFile<IlluminaBasecallingMetrics, Integer> metricsFile = runIt(1, "151T8B8B151T",
new File("testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls"), null, true);
- final IlluminaBasecallingMetrics laneMetric = metricsFile.getMetrics().get(metricsFile.getMetrics().size() - 1);
+ final IlluminaBasecallingMetrics laneMetric = metricsFile.getMetrics().get(0);
Assert.assertEquals(laneMetric.LANE, "1");
- Assert.assertNull(laneMetric.MOLECULAR_BARCODE_SEQUENCE_1);
- Assert.assertNull(laneMetric.MOLECULAR_BARCODE_NAME);
- Assert.assertEquals(laneMetric.MEAN_CLUSTERS_PER_TILE, 28.0);
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_SEQUENCE_1, "CACCTAGTACTCGAGT");
+ Assert.assertEquals(laneMetric.MOLECULAR_BARCODE_NAME, "SA_CACCTAGTACTCGAGT");
+ Assert.assertEquals(laneMetric.MEAN_CLUSTERS_PER_TILE, 1.0);
Assert.assertEquals(laneMetric.SD_CLUSTERS_PER_TILE, 0.0);
- Assert.assertEquals(laneMetric.MEAN_PF_CLUSTERS_PER_TILE,25.0);
+ Assert.assertEquals(laneMetric.MEAN_PF_CLUSTERS_PER_TILE,1.0);
Assert.assertEquals(laneMetric.SD_PF_CLUSTERS_PER_TILE, 0.0);
- Assert.assertEquals(laneMetric.MEAN_PCT_PF_CLUSTERS_PER_TILE, 89.29);
+ Assert.assertEquals(laneMetric.MEAN_PCT_PF_CLUSTERS_PER_TILE, 100.0);
Assert.assertEquals(laneMetric.SD_PCT_PF_CLUSTERS_PER_TILE, 0.0);
- Assert.assertEquals(laneMetric.TOTAL_BASES, 16912);
- Assert.assertEquals(laneMetric.TOTAL_READS, 112);
- Assert.assertEquals(laneMetric.PF_BASES, 15100);
- Assert.assertEquals(laneMetric.PF_READS, 100);
+ Assert.assertEquals(laneMetric.TOTAL_BASES, 302);
+ Assert.assertEquals(laneMetric.TOTAL_READS, 2);
+ Assert.assertEquals(laneMetric.PF_BASES, 302);
+ Assert.assertEquals(laneMetric.PF_READS, 2);
Assert.assertEquals(metricsFile.getMetrics().size(),6);
=====================================
src/test/java/picard/illumina/ExtractIlluminaBarcodesTest.java
=====================================
@@ -288,8 +288,8 @@ public class ExtractIlluminaBarcodesTest extends CommandLineProgramTest {
Assert.assertEquals(runPicardCommandLine(args), 0);
final MetricsFile<ExtractIlluminaBarcodes.BarcodeMetric, Integer> result = new MetricsFile<>();
result.read(new FileReader(metricsFile));
- Assert.assertEquals(result.getMetrics().get(0).PF_PERFECT_MATCHES, 1, "Got wrong number of perfect matches");
- Assert.assertEquals(result.getMetrics().get(0).PF_ONE_MISMATCH_MATCHES, 0, "Got wrong number of one-mismatch matches");
+ Assert.assertEquals(result.getMetrics().get(0).PERFECT_MATCHES, 1, "Got wrong number of perfect matches");
+ Assert.assertEquals(result.getMetrics().get(0).ONE_MISMATCH_MATCHES, 0, "Got wrong number of one-mismatch matches");
}
/**
=====================================
src/test/java/picard/illumina/parser/FilterParserTest.java
=====================================
@@ -94,7 +94,7 @@ public class FilterParserTest {
for (final boolean expectedValue : values) {
Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPfRead(), expectedValue);
+ Assert.assertEquals(fp.next().isPf(), expectedValue);
}
Assert.assertFalse(fp.hasNext());
@@ -103,7 +103,7 @@ public class FilterParserTest {
fp.seekToTile(tiles[0]);
for (final boolean expectedValue : values) {
Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPfRead(), expectedValue);
+ Assert.assertEquals(fp.next().isPf(), expectedValue);
}
Assert.assertFalse(fp.hasNext());
@@ -137,7 +137,7 @@ public class FilterParserTest {
}
Assert.assertTrue(fp.hasNext());
- Assert.assertEquals(fp.next().isPfRead(), expectedValue, " Failed on read: " + read);
+ Assert.assertEquals(fp.next().isPf(), expectedValue, " Failed on read: " + read);
++read;
}
=====================================
src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTest.java
=====================================
@@ -652,6 +652,17 @@ public abstract class AbstractMarkDuplicatesCommandLineProgramTest {
tester.runTest();
}
+ @Test
+ public void testOpticalDuplicateBehaviorNullRegex() {
+ final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester();
+ tester.getSamRecordSetBuilder().setReadLength(68);
+ tester.setExpectedOpticalDuplicate(0);
+ tester.addMatePair("RUNID:1:1:15993:13361", 2, 41212324, 41212310, false, false, false, false, "33S35M", "19S49M", true, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addMatePair("RUNID:1:1:16020:13352", 2, 41212324, 41212319, false, false, true, true, "33S35M", "28S40M", true, true, false, false, false, DEFAULT_BASE_QUALITY);
+ tester.addArg("READ_NAME_REGEX=null");
+ tester.runTest();
+ }
+
@DataProvider(name = "secondarySupplementaryData")
public Object[][] secondarySupplementaryData() {
return new Object[][] {
=====================================
src/test/java/picard/sam/markduplicates/UmiUtilTest.java
=====================================
@@ -39,44 +39,51 @@ public class UmiUtilTest {
private Object[][] testIsTopStrandDataProvider() {
final boolean read1 = true;
final boolean read2 = false;
+ final UmiUtil.ReadStrand top = UmiUtil.ReadStrand.TOP;
+ final UmiUtil.ReadStrand bottom = UmiUtil.ReadStrand.BOTTOM;
+ final UmiUtil.ReadStrand unknown = UmiUtil.ReadStrand.UNKNOWN;
return new Object[][]{
- {0, 100, 0, 200, read1, false, true, true}, // Read 1 in F1R2 pair, reads point inwards, top strand
- {0, 200, 0, 100, read2, true, false, true}, // Read 2 in F1R2 pair, reads point inwards, top strand
- {0, 200, 0, 100, read1, false, true, false}, // Read 1 in F1R2 pair, reads point outwards
- {0, 100, 0, 200, read2, true, false, false}, // Read 2 in F1R2 pair, reads point outwards
- {0, 100, 0, 200, read1, true, false, true}, // Read 1 in F2R1 pair
- {0, 200, 0, 100, read2, false, false, true}, // Read 2 in F2R1 pair
- {0, 100, 0, 200, read1, false, false, true}, // Read 1 in F1F2 pair
- {0, 200, 0, 100, read2, false, false, true}, // Read 2 in F1F2 pair
- {0, 100, 0, 200, read1, true, true, true}, // Read 1 in R1R2 pair
- {0, 200, 0, 100, read2, true, true, true}, // Read 2 in R1R2 pair
- {0, 100, 1, 200, read1, false, true, true}, // Read 1 in F1R2 chimera
- {0, 100, 1, 200, read2, true, false, false}, // Read 2 in F1R2 chimera
- {0, 100, 1, 200, read1, true, false, true}, // Read 1 in F2R1 chimera
- {0, 100, 1, 200, read2, false, false, false}, // Read 2 in F2R1 chimera
- {0, 100, 1, 200, read2, false, true, false}, // Read 2 in F2R1 chimera
+ {0, 100, 0, 200, read1, false, true, true, true, top}, // Read 1 in F1R2 pair, reads point inwards, top strand
+ {0, 200, 0, 100, read2, true, false, true, true, top}, // Read 2 in F1R2 pair, reads point inwards, top strand
+ {0, 200, 0, 100, read1, false, true, true, true, bottom}, // Read 1 in F1R2 pair, reads point outwards
+ {0, 100, 0, 200, read2, true, false, true, true, bottom}, // Read 2 in F1R2 pair, reads point outwards
+ {0, 100, 0, 200, read1, true, false, true, true, top}, // Read 1 in F2R1 pair
+ {0, 200, 0, 100, read2, false, false, true, true, top}, // Read 2 in F2R1 pair
+ {0, 100, 0, 200, read1, false, false, true, true, top}, // Read 1 in F1F2 pair
+ {0, 200, 0, 100, read2, false, false, true, true, top}, // Read 2 in F1F2 pair
+ {0, 100, 0, 200, read1, true, true, true, true, top}, // Read 1 in R1R2 pair
+ {0, 200, 0, 100, read2, true, true, true, true, top}, // Read 2 in R1R2 pair
+ {0, 100, 1, 200, read1, false, true, true, true, top}, // Read 1 in F1R2 chimera
+ {0, 100, 1, 200, read2, true, false, true, true, bottom}, // Read 2 in F1R2 chimera
+ {0, 100, 1, 200, read1, true, false, true, true, top}, // Read 1 in F2R1 chimera
+ {0, 100, 1, 200, read2, false, false, true, true, bottom}, // Read 2 in F2R1 chimera
+ {0, 100, 1, 200, read2, false, true, true, true, bottom}, // Read 2 in F2R1 chimera
+ {0, 100, 0, 200, read1, false, true, false, true, unknown}, // Read 1 in F1R2 pair, top strand, read not mapped
+ {0, 100, 0, 200, read1, false, true, true, false, unknown}, // Read 1 in F1R2 pair, top strand, mate not mapped
+ {0, 100, 0, 200, read1, false, true, false, false, unknown}, // Read 1 in F1R2 pair, top strand, neither mapped
};
}
@Test(dataProvider = "topStrandDataProvider")
public void testIsTopStrand(final int referenceIndex, final int alignmentStart, final int mateReferenceIndex, final int mateAlignmentStart,
final boolean firstOfPairFlag, final boolean negativeStrandFlag, final boolean mateNegativeStrandFlag,
- final boolean topStrand) {
+ final boolean mapped, final boolean mateMapped,
+ final UmiUtil.ReadStrand strand) {
final int readLength = 15;
final int contigLength = 500;
- SAMFileHeader header = new SAMFileHeader();
- SAMSequenceDictionary sequenceDictionary = new SAMSequenceDictionary();
+ final SAMFileHeader header = new SAMFileHeader();
+ final SAMSequenceDictionary sequenceDictionary = new SAMSequenceDictionary();
sequenceDictionary.addSequence(new SAMSequenceRecord("chr1", contigLength));
sequenceDictionary.addSequence(new SAMSequenceRecord("chr2", contigLength));
- System.out.println(sequenceDictionary.getSequences());
-
header.setSequenceDictionary(sequenceDictionary);
- SAMRecord rec = new SAMRecord(header);
+ final SAMRecord rec = new SAMRecord(header);
+ rec.setReadUnmappedFlag(!mapped);
+ rec.setMateUnmappedFlag(!mateMapped);
rec.setReadPairedFlag(true);
rec.setCigarString(readLength + "M");
@@ -92,7 +99,7 @@ public class UmiUtilTest {
rec.setReadNegativeStrandFlag(negativeStrandFlag);
rec.setMateNegativeStrandFlag(mateNegativeStrandFlag);
- Assert.assertEquals(UmiUtil.isTopStrand(rec), topStrand);
+ Assert.assertEquals(UmiUtil.getStrand(rec), strand);
}
@DataProvider(name = "brokenUmiProvider")
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz
=====================================
Binary files a/testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz and b/testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1101_barcode.txt.gz differ
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1102_barcode.txt.gz
=====================================
Binary files a/testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1102_barcode.txt.gz and b/testdata/picard/illumina/151T8B8B151T_cbcl/Data/Intensities/BaseCalls/s_1_1102_barcode.txt.gz differ
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.1.fastq
=====================================
@@ -6,10 +6,6 @@ TGATGGTTTCGGGNTTTAGACAGTGTCATGCCTATTCCNTGGTANTCTTTGTTAACCTACGCCTCATGCTCGAATTCGCG
GGTGGGGCAGCTCNNGTNCTGGGTATGNTTACATGATTCAAGCATACTGCCCCTGATANTANTCGCGGNTTCTGCTANGTATTTCCCGGGAACTTCTTTCACCTATCCGAACAACAGCTTTCCCAGTCAGAGTCAGCGAACATTATAACTC
+
FFF!-!-!F!!!!##!F#!FF8!FF-!#8!8F-8!----F-!-F8--88-FF!-!8F-#88#-8F!8F#88-8!!FF#!F8!8!!F!F-F-F!8F8FF!8---8-FFF8---8-8--!!-F8-!8888F8F8!F8FFF--!F!-8FFF--F
- at machine1:HiMom:abcdeACXX:1:1101:1054:1000 1:Y:0:
-GTCGTACGNTCGAAGNTGAGGACGGGATTGTCTGTAAACTTGCGCGAGACCGAAATGTCAAACGGNTTCGGTAACAAGAACACAACNCTTCCGCATACACGTCGGTGTTTCCTATACCGCAACCGTTGGAGGTTCCACGGNCTAGGCTCGC
-+
-F!!!8--8#88-FF!#--FF-88-88F-!8!F-!--F8F8!FFF8-8!F8F8FF--F-!F--F-F#-8!-F-FF8888F-----F8#!F!!8F!-8F!FFF!-!!---F--88-88-F8F-F!----FFF!!8F!8FFF-#8-88-!F-88
@machine1:HiMom:abcdeACXX:1:1101:1072:1000 1:N:0:
CCTTGATCNCTCCGCTTGAGTTTNGTTTCAGATGCCTTNAGGAAGCGATATTCCAACTCATGGAGCGTCAGCAGCGATTGTCGTATAGCCGGGCAAATCACTAGGAATGCCNTNTGTGAACAGTGGCATTGTTGTATGGTGTGTCCCCAAG
+
@@ -26,10 +22,6 @@ NTCTNANATTAAGTGCGGCAGNTGGGGCCCCCTGGTTTGAGTNAAATTGTGCGTCTATCTTACGCGGANGNAATGNCAGG
TTTTCTTTGTTANGCCGTCNATGGGTCCNGGCCCACCGTACANACCCATCAGCGTCTGACGNCCGTACTTCGNTACTTATGGTGACTGTGANTGCCACGACTTGTCATNTACTTGGGGTTGTGANTANTACACCCTATCCGAACTTNAGGT
+
F8F-8!-!F8-8#!FFFF-#FF--F8!8#8!F-8-!!--8!-#-F-88!8-!FF!FF8F8F#F-FF8!88-8#--8!F-F8--F-!8F888#!!--8!F8888!F!8!#88-F88!!-F!F8!8#88#F-8F!-F!8!8!!8F-F8#88FF
- at machine1:HiMom:abcdeACXX:1:1101:1145:1000 1:Y:0:
-TTGTCNCCTTNGCTAAAGATCTCCGTCGCTCGTCTCCTGNCCCGTATCTACCTAAGCCTNCTGCGNGGTTCGTAGCCCGGCCTACAAGGCAGGCTTCANNTNTGCGGNGGGACNGAAACGCCACGCTAACCGCTCAGGCAGTAGAGCTAGT
-+
-!-8-F#!8--#FF8F-FF---!F!!!8-!!F88!!!--!#!8F88F!-!-F-8F-FFF!#FF!8-#!F-8!!!88F!!8!-!888F-!FF8F88-8!-##!#!!8!8#-!FF!#-F888!F-F--FFF88888F8F------FFF!!8-8!
@machine1:HiMom:abcdeACXX:1:1101:1163:1000 1:N:0:
TCCTNCANTCGCACCGGAGAATTCCCACGATTCCCAAGCNAANACGATCTAATCTGAGCTTAGAACGAACAGACTCGGTAGGGGGATATTGTATCGCTGCCGTCGCGTGCTATGCTACGGTCTCNGTTATAATGGCNTTTTGGTCGCTTTA
+
@@ -86,10 +78,6 @@ F-!F-8!-!F88-8!##!!---F!--!-!#-#F8-8-FF--8F8!#--FFF8-F-8!-#8!88-8F-!F8-F8-F-8#!-
TACTCNGTGGACTTGTATCCNGGACTTTCTCTCTGNTACTGGGTTNCGCCGAACTCCCCGTTNAGCCATCNCGGTGCTGGACCACANATCGCGTCNGACATGCGCACTAGNCGAACCCTATACTCTANTTCNCCTTCGCTTCGGCAGTTGT
+
-888!#8FFF-F!-8!F!F-#!8-F888F8-8F!8#!FF!!8-!-#-8F!!8F8-F88!-F!#-!8-88!#-F8F88!F8-!F-F8#F!F!F!--#8-8-!F8!8-F-F-#FF8F-F8!-!88-!8F#!!8#88-8!F!!8F8!-F88!FF
- at machine1:HiMom:abcdeACXX:1:1101:1452:1000 1:Y:0:
-TNGGGCGCAGTCCGGGGTTAAANCAGTTAGTCGGCGTCGCCTAACAAGCTCTTGAGCCATTGCGGCTTNTTATGATGCCTCAATTGTTGGGCCTGTGAGACCGGGGCGNGGGCCGCAAAGGCGNCNTAGTCTCNGAATTACAACCCTGNCG
-+
--#FF!8!8F-8!FF8-F8!--8#F88FF-FF8888!!8!-8!-F8FFF8-!F88FF-F8-!!-!-F8F#!-8-!-F-!F!8FFF8!!8F!!-!!FFF-!F!!8!F8!F#F--!F8--888888#!#-8--!-F#-888-8!------F#8!
@machine1:HiMom:abcdeACXX:1:1101:1470:1000 1:N:0:
NATCTTTGGGATCATGAATTAAGGATTGTCCATGCGACAAGCNATGTACNACAGCGNACAGAATTGNTACGATGAACGTCGTAGTTGCGTTACCAAGGCACTAGNATTACCCTCTNGGCCTCGATTCGNCCACCCTCTTGGNGGTCCCGAG
+
@@ -110,10 +98,6 @@ NGGAAANGGATAANCCAGACACCCAANGGATATGTAGCATTGTTATACCGATCCTTGCCGCTTTTTGGTAAGCAGAGGAC
CAGTGTTTGTTCGAATCCGCTCCCTTCTGCTGACGTGGGTNNNNGGNAACCGAAACGCTTTTCTCCCACNCCGGNGTCGTTCAACTCTANATGGGACAGCGCATGGTTCGTCTANGCNTGACTCGTGGCANACGTCCTACGACCGCTAAAT
+
F-!8--!F-F-8!F8F888!!!F8!F-8F!!F-F-F!-!F####!!#-FF8!F-F!8FF--8F-8FF-!#!--F#FF-!8FFF---F!-#8-F!!8!--F!FF8-88FF8--88#F-#!!-FF!F---!F#8F--88!F-!--!8!8F8-8
- at machine1:HiMom:abcdeACXX:1:1102:1054:1000 1:Y:0:
-CGGGNCCGCCAGATNTTCCCCGTTCCCACGGACGTTCCTTGGCAGCGCTACTGTCGGGGTTGATCATGCCGGTGTAGCAGGCGTNCCGGACAGTGAACTAANGTCTTGATTCCACCGNNCATAGCNTCTGATACACCTCAATTCGAGTTCA
-+
---8-#-8F8FF-FF#--F8!--8--F8F!!F88F-!!F8!!8--F8F888F8F!--8!88F-F88--!F88-F!--FF-8-FF!#F!-88F-8FFFF-!-F#-F8!-!8!!-88!F-##!F-88!#F-F---FF8FF8!8F-8F-F!-8!8
@machine1:HiMom:abcdeACXX:1:1102:1072:1000 1:N:0:
GCGCTTGTTCCGATTTGTNTGGCGCTGCGGCAGCCTGATCGGNGCGCCTTGGTNGAGAGGCGCACTTGCACTANCGNCGGGCTACCGCCANACGTTTTCTCTGCCGGNAGCCGTATCCGGTTGGATNTTCCGNCCATCCACGAACTTCATC
+
@@ -130,10 +114,6 @@ TTANGGGGAGTGCNAAGGNCTTANAGTTCACCGAGCCCATAGCCTCNTGTTGTTGCGNGGGGGGTTCCTGTGCTGCCNTT
GCCNAACGATCTTNTTTGCTCNNCGTGNTGCTTGGTCTTCTTGTCTCTAACTANCGTGTAGTGAGAGTNTCTCTCTCGAGCGTNTCTGGATTGCNCGACGGACGAGGAATTAGTGCTCAGTGTATCGGACCNTTTTCTGGCCGCATGCAGC
+
8!-#8-8!-F!-8#!8-!88-##8-FF#FFFFFF!!F-F-F-FF!F--8-8-8#!!!!!88-!F-F-!#8---88!FF8-FF-#-!8-!88-8!#!8--F-FF8FF88F!F8F8!!8!-F!88-!!-F8!F#!8---!-!F!--8--!F!8
- at machine1:HiMom:abcdeACXX:1:1102:1145:1000 1:Y:0:
-AGATTTGTCAGAGTGTNTNTCAGCGGTANCGTAGTAGGCGGTGTTGGGCCGGTTCNTNTANTGNTCGAGCAAGNNACGGGCACACTGNCCATTNATCCTNATGCAAAAGCNTGGNCCCNTGGGAGGAGCCTAGCGAGCGGGGGCGTTTTTA
-+
-8-F-8FF88F!-!F!F#!#!-F-8F!!-#8F888-F!8!8!!8!888-!F!FF!-#F#8-#!F#F-!88-8F!##-F--!--FF-8F#!8FF8#--FF-#8F!-FFFF!8#8!F#-!-#8-FFF!8-FF!8-8--FF!-!8-!!F!!-8--
@machine1:HiMom:abcdeACXX:1:1102:1163:1000 1:N:0:
GATACGGTGTTATTCTTCTTGATTTGACTACGNGTCCGACAACNTATTCGTGGAAACACGGCCCAATAGCGCTNGCCCNACAGCTTTATAGTGTCANCAGTGATTACGTCGNTGTCAGGGTTTACAATGNAGNGCAAGCGTTTGGCGGCGA
+
@@ -194,10 +174,6 @@ TGACTACTTAGTAACGGNGNCCGTGGCCGCTACTGCGCCGAGGTTTTTATGTTTGNCAACTGGAAGGAGGCAATAAACTA
CGGGGACAGTGTCATTATCGCCNCCGNGCAGGNTTAAGNCNTNCCGGNGGGGGCAGTGCTATTCCGATGTCCCCGNAATAGTCNTGGGTCAGTACCCATGCCCCTTATANAGCNATATNGTAGNCAGCGGCTTGCGGCTCAGCCCATTTTA
+
-8-8---F!8!-8-!!FF8!!-#8!-#8F-F8#F--8F#-#8#FF8F#-8FFF8-!8-!-8FF!-!-88F88!-!#8F8F-FF#!!-F888-F-!-888!FF!8FF8F-#88!#888!#8FF8#!888!-88!!8--8!!-8-FF-88!8F
- at machine1:HiMom:abcdeACXX:1:1102:1452:1000 1:Y:0:
-GTTCCGGACGAAGGACTGGATTGCTGCTCAGAGATCCCGGTTCCAGGGTCGGTNCAATTTGTCCGCCAGGTGGANCTTGTTCTTTCAGACTAAGGTTNNAGTGANGCCAGCATTAAGATACAGAAACAACTCGTCCCCTNTCTGACGATCA
-+
-8-FF8!---FF8!!8!-F!8F!8--FF-8F!F!F!!!F-!8F!-8F8F!8!88#FF-88FF!-!-8!F8-!!--#!!-FFF-F8F8--8-F--8!-!##-F!8F#-88F8F-!F-F8F!8-8-FFF8FF-8F-!88!8!#-8F8-8F---F
@machine1:HiMom:abcdeACXX:1:1102:1470:1000 1:N:0:
CAGACCGCGGCTCTGGATCACCTCCGACGGGTAGTGACANCTACCTNAATCCGTCCAAGCAATGTGCAGTTCTTAATGACTTGGCTCGAGTAGTCCTGACCAANGAACGGACGTTCTTCGANGATAGGTGGGAGNTGGCTTCACGCTTTAC
+
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.2.fastq
=====================================
@@ -6,10 +6,6 @@ F-!F8--8F#F#88#-#-FF##F-8!-8#88-F-F-F8F-F-F8F#-8!--8F8-!F!8F!--8-8!FFFFF8F!FFF-F
CCTCGNTAGGATCATCCTCGCGTGCCATCGCNGATACTNGCTTTATAACTTTTTAATACCACCACTTAAAGCNTTAGNTNTGCACAAGGTCGTACTAAAGGACCCGCTAGCGCGTGATCTGTGGTCCCACAGAGTACNCCGACTACTNTTA
+
FF!8F#F88F-!F88--FF----8-F88FF8#!88-!F#-FF-8FF--88!F!FF8FF!8-F--8-!88888#!-8!#F#88F888-!--F--888F-8F-FF8F8---88!F!-FF!-!--FF--F88!-!-!FF!#!88F-88F-#88F
- at machine1:HiMom:abcdeACXX:1:1101:1054:1000 2:Y:0:
-AANACTNCGATTTTGAGATCATGCTCTACTTNCTGGCTATGTATGGTAGTGCGCTGANNNTCTCTATTTTGTGAACATGGCTNGTCGTNGGGTGTCATCGGCTCNCCGTAACACTNTAGCCCNTGGGCCCGCGGNTGNAATTGCTGGGAGG
-+
--F#8!8#-F8---!F8888-8F-F---F888#!FF!F!--!!8FF8F8!F8FF!8--###F!F-!8!-F8F!-F--F!8!8F#88!--#!--8!-8--8-F8-8#!8---F8-88#!-FFFF#--F--!-!-!F#8!#F8F---8FFFFFF
@machine1:HiMom:abcdeACXX:1:1101:1072:1000 2:N:0:
NCGGNCTGGTACCTATCGCGACGTCCACATTGTTGTATTCNGTTNCACAACCGTCTAGCCTTCTNTACTACCGCTAAGCTTAAANCCAACTGGACAGTGGGACACGGCTNCTCNGTCACAAACACCNACACAGCCTGTGCNNCACCTCAAG
+
@@ -26,10 +22,6 @@ TGTGTGNACTATCAATCGACCAGTACTTAGTTCAGCACCGCCCTACTCGGCACTGCTAGCGGGTCGACCTGGATAGCCGT
GCTTGCCATTTNCCGGACTCTATCCGTGCTCGTAGCACACNTATCGGCACGCCTTCNATACACTCTGACGACNGGCCCCTATGGAATGANTNGTCATCTACACCCTACTCATGAGATTTTAACGGGACAGTAGGCTACATCGGGTCAAACG
+
F!888-FF!!!#--!F-F!F!88-F8!!!!-!---!8!F8#-8F!F-!FF!F-8-8#88F8-FFFFF-!--!#8F!F!-8F!F-F88F8#8#F88888--8-88!!F-8FF8-F!F!FFF-F-F888--8FFFFF--88-8-8--!FFF--
- at machine1:HiMom:abcdeACXX:1:1101:1145:1000 2:Y:0:
-TCACTCTTCATTNTGGTCTTGCTGAATCAGCTTATCTTGATGAGAGCGNCTCCTGACTGGGAGGNTGCCCNCCAGANTATNTGACCCCGNGACAGCTGTGACNATCAGGAGCCNNTTCCGCTCCCCCGNAGTCATGTATCGCTTTAAAGAT
-+
-!F8-F-8!F8-8#!!FF-!888F8888-888!F8!--8!FFF-F888-#8!!!-88-!-!!F!F#8F8!F#-F-!8#!8-#F8-!!8!-#F8---F8FFFFF#-F-F-F-8-!##--8!-F!!88FF8#88FF8-88F!888!!8-F8-88
@machine1:HiMom:abcdeACXX:1:1101:1163:1000 2:N:0:
GGNGCGCNCTCCGCACGCCANTAGCANCTTGNGTAGGCCCTTNTTTCCAGTTTCTGGTAGGTCTCGAGGCGTATCGTTTNCGGCGTCTTTCCACTGAAAGGGGGTCTTAGGATGGTATCTGGTNGCGNACGTGAGTGTATCGCACGTACCC
+
@@ -86,10 +78,6 @@ TGGTCCTCTGGTCAGCAGTTCTAAGTGCCGTCTATGGNTGGGTNCACCANCGCTANGTNATAGGTCCCTAGGTCGGGCGT
TTTGTTTCAGGGCCTTTGCCGTNCGCANTATTGTGTCTCTTCCCAGCAGCTGTCCTTAATGATNTAGCAGATCGCCTGTGCATTANCGCACCTCNTCGTANAGGGGTGTTCCAACGCATACANCTGCNTGGNCGTNNCAATGAATCAGATT
+
--!!F!8!FF-!-!88!88!-!#8-FF#F888F!!F!8--8F-!FF8-!F-8FF!FF8F8!88#8--!888!-F!FF8F8F-F-F#!F!88F-F#8!!F8#-!8!---88!--88F-F-88F#8888#-F!#FF!##!F8-!-8F8F-8F-
- at machine1:HiMom:abcdeACXX:1:1101:1452:1000 2:Y:0:
-AAGATCAATTTATGCACGGCCACTAGTGTGGTGAACACCTGTNGTAGTACTTGGTTTACGTCTCCNCTATCGTGCCGTAGAGTTCCCTGTTGGTATGTTATAGGGAACGGAGCATCTCATGCGCCAAACGAGTTTGACGNTGGAGCCNGTC
-+
--8-FFF888F--F8--!8-!--!8F-FF--88F8FF-8-!!F#!-8-!88FF!F--FF!!F8-88#!-F-8---!!F8888!FF!F8!!!8---F88F8888FF!-F--F8-8F-!8FF--FF-888F-F8F-F-8-F-#!FF-8!8#!8!
@machine1:HiMom:abcdeACXX:1:1101:1470:1000 2:N:0:
GGGAATTCCGGTTTTTGGCGAAGTCTCGATAACTTCCGCGCGGCACCTAACTTGCCAGCTGTGGTTCGCGTCGTGANTTAATGTTGGGNTCTCGCNCGACATAAAANTGTAAAGGGAGGCCTTGGAGGCCCNGGTGTATGCTNCCAGCTGG
+
@@ -110,10 +98,6 @@ TTTCACCAGGCCTCCTCGTAAGTAGATCTTATTTGGATCCAGGTAGCATCGGGGGAGCCGACATTNGTCCNGTCTCAGCG
TTCCTCGNACGTCTTTGNAGANTTTCGCCCAAGGCTTGTCCNTGCAAGACGTCCTGTCGTATAAACNGCCACGGGCGGCTAGGACTTGGANACGGACCTNATAGTTCCTGTGCCACTTNTCGNGTTTTCGTCTTGTTGNTGCGANAGGGGN
+
F-!--F-#-8-F!-F--#-!-#88888F-FFF-F!8F!--!#-!-88-F!!F8!88-8-!8--F88#-F--F8FF!-F!!8F8FF8FF-F#--F-F8-F#F-F!F!!FF8!!F!88!F#!-!#-!--F8--!-8!8-8#F88-F#-8-F-#
- at machine1:HiMom:abcdeACXX:1:1102:1054:1000 2:Y:0:
-GNGAGTAACNGGATTCGCCAGTAGTTGTTGCACTTGAANCTAACGCCATTTCGTCCACGGNTTTCTTCGAGNCGGAGGCCGTGGTCCCNNCGCGCAGATNGTTNNGAAGTACCGAGACTGGCCGTGACACTGCACNNCGGGANACCTCCGC
-+
-!#-8F88--#88-F8!--F8---!FF8!!FF8F8-FFF#88F8FF!!-!F!-FF!8F-8!#!8!!-!!--!#F8F-8FF!!F!-88--##!F!888F-!#-F!##!F-!--F!F8!F-F8F8FF!FFF888!88!##888-8#-!-!8F-F
@machine1:HiMom:abcdeACXX:1:1102:1072:1000 2:N:0:
ANGAGGCNCCGCCCCNNTTNCTCGTNGCCCTCCCAACCGTGCGACTGGNNGCGCTGGACATCGTCGCAACTTACGGCGTGTGCCCTGAAGGTGACTACACCGNTGAAAGGNCGCCTCGCCGTCCATGCCACAAGGTGGACGNTCATCGNCT
+
@@ -130,10 +114,6 @@ TTTTCCAGTCNTTCTTGCAGGCCGGTGCATCGGCTTNACGCAATGNCCCCTCNACGTTGTGAGTGTCCCGATCAATTTGN
CGCCGCTATTCCGGACANATNGTGTGACGCTTTCCGTCTCCCGTCGTCTCGATTTGGCGCCNATCNTCCGTCAGCCTAGAGNANTAACGAANCTGGATGCTGCNCATTGGANATGACTACCTGCTACTTGGNACGATTCTGCACGTCGTCT
+
!88F8FFF!8888!-8-#F8#-8!!F-!FFF!888--8FF-F-F--8-!FF8-F888-F!8#F--#!88!!-F-FF!F-8-#-#!--FFF-#8-8-8-!-!-!#88F!!8F#F!8FFF8-F---FF!-888#F8FF8------88--8F!-
- at machine1:HiMom:abcdeACXX:1:1102:1145:1000 2:Y:0:
-ATAGATCCTGTTTAGCCGTTGTTGTTAGCCCCNTCTAGCNNATACCGAATCNGCCCTNCGATCTCCTCAGAGTTCGACCTTCCTTTCNGGAGAGGGTACCTCTCAGAANGCAAGGATGCCCATGTCACTCAGATCCTANATNAGAATCTTT
-+
-8-F8F-!-!F8F-F!!8--!8F8-F-8!-8!!#88-8F!##F-FF!!FF-8#F--8F#-!FF!F-FF8-F8!-!--F8!8!!88F8-#!!F!-F-88F888--8F!FF#---FF8F8-8!!-F!F!8!-F8-8!-F8-#F!#-FFF!-F-F
@machine1:HiMom:abcdeACXX:1:1102:1163:1000 2:N:0:
CCTGCTCCTCGGCCGACCTGNCCCTAATGCAGTTGCTCCGGANCTGCCAACGAAAACCTTACTCNTCTANCTCGTANACTACGGCACTGAAGCANTCNGCCCNTTTGTTCNCGTCTAACCACTCTTTCTTCGCGCGATNTAAGGCCTNCTC
+
@@ -194,10 +174,6 @@ TCGGCACGACTACTAGTAGCACNCCGCCTGGGTCACNTAGCCTCAGTTGGCTCAAATTTGGCTGGAATGACTAATCATAT
CCCTATTGCACTTAGNGCGTGGAATCGCGGGATTNCGGCCCCCGNCAGTCGGCTATGATTCGANTCCATGCGTGCGTGTGTGCGTATCCCCACGTATAAGAGCGCGGACACTCCANCTGGGAACCAATCNCANTGACNTAGCCGACAATAT
+
-8F-F8!F-F8-888#F8FF!!F8F!-8!8!8F-#8F!--8F!F#-8!F!8!-F8-!8F-FF-#-8--8!!88-----F-8--!!888!-F8!-88-----!8!88!8-8-!!-F#!--8!8-!!8--F#!-#F!--#F-F!-!-!F-F88
- at machine1:HiMom:abcdeACXX:1:1102:1452:1000 2:Y:0:
-GCGNCGCTTCGNGNCCGGATGACCTGCTTTGTTNCTCAGTTTTTTTTATGNTNGTACATTCTTCCCTCGATCGAGTGTGTTTGCCTGCGGCTTAGTCGTGGGCTCGCGNCTGTNCGAGGCTGTCATTCCAGGCCTGCCAANNCGGCGGTCT
-+
-!-F#-8!-F!!#-#-!!F-88--!F8F88F--!#FF-8!8!-F8F--8F-#!#8888FF!F!!-F!F!--!!--!88F!8!8!F-!FF!F8!-FF-88-F-!F8-!F-#-8F!#FF888!!!-88-F!!F!-FF8!!F--##8F!---F!F
@machine1:HiMom:abcdeACXX:1:1102:1470:1000 2:N:0:
AAGCAANGANGACACCGGTGTCAGTGTTTTGGNATCGCAGCTTTNGACCTGCTTCCTNAACTTNTCTGTTTCCGAAGTCACTTATTNTAAACGAGCTCTGGACTAGGCTCTGTACTCCCAATCTCGTNNTCTCGGGTCAANGAGCCTGGCC
+
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.barcode_1.fastq
=====================================
@@ -6,10 +6,6 @@ FF!#F-!F
CTTCGTGT
+
FF-!F888
- at machine1:HiMom:abcdeACXX:1:1101:1054:1000 :Y:0:
-GGTGCGCG
-+
-!!FF8F8-
@machine1:HiMom:abcdeACXX:1:1101:1072:1000 :N:0:
CTTCCTTG
+
@@ -26,10 +22,6 @@ AGCCCCCT
CACTTTTC
+
FF88F!8F
- at machine1:HiMom:abcdeACXX:1:1101:1145:1000 :Y:0:
-GTAGGGAT
-+
-F--!!8-F
@machine1:HiMom:abcdeACXX:1:1101:1163:1000 :N:0:
TGTCTATT
+
@@ -86,10 +78,6 @@ TAGCGTTN
AATTTGCG
+
-F--8!!!
- at machine1:HiMom:abcdeACXX:1:1101:1452:1000 :Y:0:
-TCGGCAAC
-+
-8F8-8FF-
@machine1:HiMom:abcdeACXX:1:1101:1470:1000 :N:0:
GANCGAAC
+
@@ -110,10 +98,6 @@ TCGTNTTG
NCATATCT
+
#!FF-!!-
- at machine1:HiMom:abcdeACXX:1:1102:1054:1000 :Y:0:
-CTTATTTA
-+
-8!!---FF
@machine1:HiMom:abcdeACXX:1:1102:1072:1000 :N:0:
CCCATGCC
+
@@ -130,10 +114,6 @@ CCCGNGCT
GTGGCAGA
+
8F8-FF88
- at machine1:HiMom:abcdeACXX:1:1102:1145:1000 :Y:0:
-GGTAAGGT
-+
-F!8---8!
@machine1:HiMom:abcdeACXX:1:1102:1163:1000 :N:0:
CCGCGCNC
+
@@ -194,10 +174,6 @@ TTAGCGTG
TNNGAGAA
+
F##-F!88
- at machine1:HiMom:abcdeACXX:1:1102:1452:1000 :Y:0:
-GGGGCACT
-+
--8!-!FF-
@machine1:HiMom:abcdeACXX:1:1102:1470:1000 :N:0:
GGGCAAAT
+
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/fastq/NN.barcode_2.fastq
=====================================
@@ -6,10 +6,6 @@ CCTGGTAC
TATGCANC
+
F8-F!-#-
- at machine1:HiMom:abcdeACXX:1:1101:1054:1000 :Y:0:
-GTGCAGAC
-+
-FF--88F-
@machine1:HiMom:abcdeACXX:1:1101:1072:1000 :N:0:
GTGTCTCG
+
@@ -26,10 +22,6 @@ F8F#-!--
GTTGTAGG
+
-!!F-88!
- at machine1:HiMom:abcdeACXX:1:1101:1145:1000 :Y:0:
-AGCCGGCG
-+
-FF!F88-F
@machine1:HiMom:abcdeACXX:1:1101:1163:1000 :N:0:
CTGCGTAC
+
@@ -86,10 +78,6 @@ ANCGGGCT
AGCAGNGT
+
8!!88#!-
- at machine1:HiMom:abcdeACXX:1:1101:1452:1000 :Y:0:
-CCNATNCT
-+
-8-#8-#88
@machine1:HiMom:abcdeACXX:1:1101:1470:1000 :N:0:
AGNTGGCN
+
@@ -110,10 +98,6 @@ CGTGGATT
ANAGGCCG
+
8#88!!F!
- at machine1:HiMom:abcdeACXX:1:1102:1054:1000 :Y:0:
-GGCTNTAG
-+
--!88#888
@machine1:HiMom:abcdeACXX:1:1102:1072:1000 :N:0:
GATGTTTA
+
@@ -130,10 +114,6 @@ CATCCNTG
GAAACGAA
+
F-8-8-FF
- at machine1:HiMom:abcdeACXX:1:1102:1145:1000 :Y:0:
-TCCACGTT
-+
-!8-F!F8!
@machine1:HiMom:abcdeACXX:1:1102:1163:1000 :N:0:
NGGGATAT
+
@@ -194,10 +174,6 @@ F-F-88F!
TTACGCGC
+
!!FF!8!8
- at machine1:HiMom:abcdeACXX:1:1102:1452:1000 :Y:0:
-GGCCCGCT
-+
-!F-F--F!
@machine1:HiMom:abcdeACXX:1:1102:1470:1000 :N:0:
CTGGTNNN
+
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/sams/1102.NN.sam
=====================================
@@ -6,8 +6,6 @@ HiMom:1:1102:1018:1000 77 * 0 0 * * 0 0 .GGAAA.GGATAA.CCAGACACCCAA.GGATATGTAGCAT
HiMom:1:1102:1018:1000 141 * 0 0 * * 0 0 TTTCACCAGGCCTCCTCGTAAGTAGATCTTATTTGGATCCAGGTAGCATCGGGGGAGCCGACATT.GTCC.GTCTCAGCGTCGTCCACCTACTCTGACG.GTACCAGAGTGCTCCCGGTACCTCAGTGCCAAGTCGGATTAGCTTGCCAGT 88!!8-8F-F-F-8-!!-!F88F-F-8!FF-8F!8!F!8FF-FF88-F8!F!!8-F!F8FF8FFF#!8!F#8888!-8-!!F-F!F-F8!-!88!--F-#!F88!F!-!F!8-8F!!-!F!--F--F8-!8888F!!8F88!!----!888 BC:Z:TCGTNTTG-CGTGGATT RG:Z:HiMom.1
HiMom:1:1102:1036:1000 77 * 0 0 * * 0 0 CAGTGTTTGTTCGAATCCGCTCCCTTCTGCTGACGTGGGT....GG.AACCGAAACGCTTTTCTCCCAC.CCGG.GTCGTTCAACTCTA.ATGGGACAGCGCATGGTTCGTCTA.GC.TGACTCGTGGCA.ACGTCCTACGACCGCTAAAT F-!8--!F-F-8!F8F888!!!F8!F-8F!!F-F-F!-!F####!!#-FF8!F-F!8FF--8F-8FF-!#!--F#FF-!8FFF---F!-#8-F!!8!--F!FF8-88FF8--88#F-#!!-FF!F---!F#8F--88!F-!--!8!8F8-8 BC:Z:NCATATCT-ANAGGCCG RG:Z:HiMom.1
HiMom:1:1102:1036:1000 141 * 0 0 * * 0 0 TTCCTCG.ACGTCTTTG.AGA.TTTCGCCCAAGGCTTGTCC.TGCAAGACGTCCTGTCGTATAAAC.GCCACGGGCGGCTAGGACTTGGA.ACGGACCT.ATAGTTCCTGTGCCACTT.TCG.GTTTTCGTCTTGTTG.TGCGA.AGGGG. F-!--F-#-8-F!-F--#-!-#88888F-FFF-F!8F!--!#-!-88-F!!F8!88-8-!8--F88#-F--F8FF!-F!!8F8FF8FF-F#--F-F8-F#F-F!F!!FF8!!F!88!F#!-!#-!--F8--!-8!8-8#F88-F#-8-F-# BC:Z:NCATATCT-ANAGGCCG RG:Z:HiMom.1
-HiMom:1:1102:1054:1000 589 * 0 0 * * 0 0 CGGG.CCGCCAGAT.TTCCCCGTTCCCACGGACGTTCCTTGGCAGCGCTACTGTCGGGGTTGATCATGCCGGTGTAGCAGGCGT.CCGGACAGTGAACTAA.GTCTTGATTCCACCG..CATAGC.TCTGATACACCTCAATTCGAGTTCA --8-#-8F8FF-FF#--F8!--8--F8F!!F88F-!!F8!!8--F8F888F8F!--8!88F-F88--!F88-F!--FF-8-FF!#F!-88F-8FFFF-!-F#-F8!-!8!!-88!F-##!F-88!#F-F---FF8FF8!8F-8F-F!-8!8 BC:Z:CTTATTTA-GGCTNTAG RG:Z:HiMom.1
-HiMom:1:1102:1054:1000 653 * 0 0 * * 0 0 G.GAGTAAC.GGATTCGCCAGTAGTTGTTGCACTTGAA.CTAACGCCATTTCGTCCACGG.TTTCTTCGAG.CGGAGGCCGTGGTCCC..CGCGCAGAT.GTT..GAAGTACCGAGACTGGCCGTGACACTGCAC..CGGGA.ACCTCCGC !#-8F88--#88-F8!--F8---!FF8!!FF8F8-FFF#88F8FF!!-!F!-FF!8F-8!#!8!!-!!--!#F8F-8FF!!F!-88--##!F!888F-!#-F!##!F-!--F!F8!F-F8F8FF!FFF888!88!##888-8#-!-!8F-F BC:Z:CTTATTTA-GGCTNTAG RG:Z:HiMom.1
HiMom:1:1102:1072:1000 77 * 0 0 * * 0 0 GCGCTTGTTCCGATTTGT.TGGCGCTGCGGCAGCCTGATCGG.GCGCCTTGGT.GAGAGGCGCACTTGCACTA.CG.CGGGCTACCGCCA.ACGTTTTCTCTGCCGG.AGCCGTATCCGGTTGGAT.TTCCG.CCATCCACGAACTTCATC F---F!!-!8!F8F8--F#8F-8888!!--F8!-88-F88FF#!88F-F-FF-#FF-F-FF!-F-!FF!8--F#-!#F8FF-F8!FFF!-#F!F8F8!8FFF8!-88#--8!FF8F-8!F8-!8-F#8-!--#FF8!!--!!FF8FFF8!- BC:Z:CCCATGCC-GATGTTTA RG:Z:HiMom.1
HiMom:1:1102:1072:1000 141 * 0 0 * * 0 0 A.GAGGC.CCGCCCC..TT.CTCGT.GCCCTCCCAACCGTGCGACTGG..GCGCTGGACATCGTCGCAACTTACGGCGTGTGCCCTGAAGGTGACTACACCG.TGAAAGG.CGCCTCGCCGTCCATGCCACAAGGTGGACG.TCATCG.CT 8#--8F-#F8!F!F8##88#-!F-8#F!-F---FF-F8-!8-8-8F8!##--F-F-8FF-FFFF--8--!8--F--!FF!!-!888FFFF!!!-!--F-8!-#--8FF!-#FF-!8F!-F-!-!8-888FFFF-8!--8!!#-F-8F!#!8 BC:Z:CCCATGCC-GATGTTTA RG:Z:HiMom.1
HiMom:1:1102:1090:1000 77 * 0 0 * * 0 0 GCCTACGCATCCGCCC.CACTG.ATGGGTGAGCC.G.ACTAAGCTGTAGTGCCTGATCCCTCCAGGAGCCCTTTA.TGAATCGGAACGCTATGCGACTTGTGATAACGAAAATTTCAGAAGTT.ATCGCCAGTGTGGTTCTTCC.AACATG !-F-88F88!!8!--8#---8!#F8F8-!F--8!#8#8-8F-8-!-F888FF8!8F88!-F-F8!8F---!F8!-#8F-F8!F--8F!!!8-F8F8FFF!!!---8!-8FF8F!-8-!FF!F-#-FFF88-8!!8!!8-8!F-!#FF!8!- BC:Z:TTGCCTTT-TTTCGGTA RG:Z:HiMom.1
@@ -16,8 +14,6 @@ HiMom:1:1102:1108:1000 77 * 0 0 * * 0 0 TTA.GGGGAGTGC.AAGG.CTTA.AGTTCACCGAGCCCAT
HiMom:1:1102:1108:1000 141 * 0 0 * * 0 0 TTTTCCAGTC.TTCTTGCAGGCCGGTGCATCGGCTT.ACGCAATG.CCCCTC.ACGTTGTGAGTGTCCCGATCAATTTG.GC..AAGTACCAAAGGTGCCTGTCTGTAGTTGAACATTACGTGGCGTATGG.GTAAGTTTCTATGCACGCG 8FF-8F8-88#F8--8F!F--8888F-8F!!--!8-#8-8-8--8#8-8F!F#8!F-F-8!--!8-!!8!88!-F!!8-#--##F--8-!-8-F!FFFF88!8-8FFF-!F8FF8FF-F!--F88-!-!!8#-F88!F8F!8-F-8-F--- BC:Z:CCCGNGCT-CATCCNTG RG:Z:HiMom.1
HiMom:1:1102:1127:1000 77 * 0 0 * * 0 0 GCC.AACGATCTT.TTTGCTC..CGTG.TGCTTGGTCTTCTTGTCTCTAACTA.CGTGTAGTGAGAGT.TCTCTCTCGAGCGT.TCTGGATTGC.CGACGGACGAGGAATTAGTGCTCAGTGTATCGGACC.TTTTCTGGCCGCATGCAGC 8!-#8-8!-F!-8#!8-!88-##8-FF#FFFFFF!!F-F-F-FF!F--8-8-8#!!!!!88-!F-F-!#8---88!FF8-FF-#-!8-!88-8!#!8--F-FF8FF88F!F8F8!!8!-F!88-!!-F8!F#!8---!-!F!--8--!F!8 BC:Z:GTGGCAGA-GAAACGAA RG:Z:HiMom.1
HiMom:1:1102:1127:1000 141 * 0 0 * * 0 0 CGCCGCTATTCCGGACA.AT.GTGTGACGCTTTCCGTCTCCCGTCGTCTCGATTTGGCGCC.ATC.TCCGTCAGCCTAGAG.A.TAACGAA.CTGGATGCTGC.CATTGGA.ATGACTACCTGCTACTTGG.ACGATTCTGCACGTCGTCT !88F8FFF!8888!-8-#F8#-8!!F-!FFF!888--8FF-F-F--8-!FF8-F888-F!8#F--#!88!!-F-FF!F-8-#-#!--FFF-#8-8-8-!-!-!#88F!!8F#F!8FFF8-F---FF!-888#F8FF8------88--8F!- BC:Z:GTGGCAGA-GAAACGAA RG:Z:HiMom.1
-HiMom:1:1102:1145:1000 589 * 0 0 * * 0 0 AGATTTGTCAGAGTGT.T.TCAGCGGTA.CGTAGTAGGCGGTGTTGGGCCGGTTC.T.TA.TG.TCGAGCAAG..ACGGGCACACTG.CCATT.ATCCT.ATGCAAAAGC.TGG.CCC.TGGGAGGAGCCTAGCGAGCGGGGGCGTTTTTA 8-F-8FF88F!-!F!F#!#!-F-8F!!-#8F888-F!8!8!!8!888-!F!FF!-#F#8-#!F#F-!88-8F!##-F--!--FF-8F#!8FF8#--FF-#8F!-FFFF!8#8!F#-!-#8-FFF!8-FF!8-8--FF!-!8-!!F!!-8-- BC:Z:GGTAAGGT-TCCACGTT RG:Z:HiMom.1
-HiMom:1:1102:1145:1000 653 * 0 0 * * 0 0 ATAGATCCTGTTTAGCCGTTGTTGTTAGCCCC.TCTAGC..ATACCGAATC.GCCCT.CGATCTCCTCAGAGTTCGACCTTCCTTTC.GGAGAGGGTACCTCTCAGAA.GCAAGGATGCCCATGTCACTCAGATCCTA.AT.AGAATCTTT 8-F8F-!-!F8F-F!!8--!8F8-F-8!-8!!#88-8F!##F-FF!!FF-8#F--8F#-!FF!F-FF8-F8!-!--F8!8!!88F8-#!!F!-F-88F888--8F!FF#---FF8F8-8!!-F!F!8!-F8-8!-F8-#F!#-FFF!-F-F BC:Z:GGTAAGGT-TCCACGTT RG:Z:HiMom.1
HiMom:1:1102:1163:1000 77 * 0 0 * * 0 0 GATACGGTGTTATTCTTCTTGATTTGACTACG.GTCCGACAAC.TATTCGTGGAAACACGGCCCAATAGCGCT.GCCC.ACAGCTTTATAGTGTCA.CAGTGATTACGTCG.TGTCAGGGTTTACAATG.AG.GCAAGCGTTTGGCGGCGA !-!888F-8!!8!8--88!888---!8FF88F#--!F8-!-F8#F88F!88!!F-8F8-8!--!-F!FF!8-F#F!!8#-!F88F-!-FF!8FFFF#F-88F8F!8!!8FF#!8-!F888F8F--FF8-#88#-!--F88F!-F-!--!F- BC:Z:CCGCGCNC-NGGGATAT RG:Z:HiMom.1
HiMom:1:1102:1163:1000 141 * 0 0 * * 0 0 CCTGCTCCTCGGCCGACCTG.CCCTAATGCAGTTGCTCCGGA.CTGCCAACGAAAACCTTACTC.TCTA.CTCGTA.ACTACGGCACTGAAGCA.TC.GCCC.TTTGTTC.CGTCTAACCACTCTTTCTTCGCGCGAT.TAAGGCCT.CTC F!-!-F88FF-!F-88F!-!#-8!8-F!88--8F!!FF--8F#-FF88FF---F8F8!88F8!-#F!!8#88!-FF#-!FF8!F-F!88F----#!-#-!F-#8!--!!8#88FFF88F8-8!!-!F888!!FF!8F8#8-F!!!-8#F!- BC:Z:CCGCGCNC-NGGGATAT RG:Z:HiMom.1
HiMom:1:1102:1181:1000 77 * 0 0 * * 0 0 TAGCATCGTAAACGGGACTTCGCTAGTCCAGTCTCTTACTAGTCCGG.T.TGGACTA..GTT.TGTA.ACCCGACTCGGA.T.CATTAGTCAC.CAGACT.CTGT.G.CATCAA.GACCC.AC.CCTCCTTCCCAGATAACCGTT.GTTTC -F!!8F!F!F--!F-F--F!-!---8F!!F-FF-!F8F8F--F--8-#-#-8!F!!F##-88#-8F8#-!-8F--!-!!8#8#8-!F88-8--#-F--!-#!---#-#F-8FFF#8888F#8!#F-888!!!-FF-F!FFF!!!F#8!F88 BC:Z:CGCGTAGT-ATTCCGAC RG:Z:HiMom.1
@@ -48,8 +44,6 @@ HiMom:1:1102:1416:1000 77 * 0 0 * * 0 0 TGACTACTTAGTAACGG.G.CCGTGGCCGCTACTGCGCCG
HiMom:1:1102:1416:1000 141 * 0 0 * * 0 0 TCGGCACGACTACTAGTAGCAC.CCGCCTGGGTCAC.TAGCCTCAGTTGGCTCAAATTTGGCTGGAATGACTAATCATATTTTGTCCATACAATCGATCTTTGGGCCTCCC.CCCCAT.A.CCGCGGGGTACCTTGTGCCTCTCACTTGCC -8!FF8!!8F8F8F-!!F8-8F#FF88!8-!!!FF-#-F8FF8F-FF-F-8-!8FF88!8-88-88F!-F!F888888-!!F8F!!FFFFF---!FF!-!F88--8---!F#-!8FF!#F#!-8!--!FF-!!F88!8FF--!88F88F!! BC:Z:TTAGCGTG-GTGCCAAG RG:Z:HiMom.1
HiMom:1:1102:1434:1000 77 * 0 0 * * 0 0 CGGGGACAGTGTCATTATCGCC.CCG.GCAGG.TTAAG.C.T.CCGG.GGGGGCAGTGCTATTCCGATGTCCCCG.AATAGTC.TGGGTCAGTACCCATGCCCCTTATA.AGC.ATAT.GTAG.CAGCGGCTTGCGGCTCAGCCCATTTTA -8-8---F!8!-8-!!FF8!!-#8!-#8F-F8#F--8F#-#8#FF8F#-8FFF8-!8-!-8FF!-!-88F88!-!#8F8F-FF#!!-F888-F-!-888!FF!8FF8F-#88!#888!#8FF8#!888!-88!!8--8!!-8-FF-88!8F BC:Z:TNNGAGAA-TTACGCGC RG:Z:HiMom.1
HiMom:1:1102:1434:1000 141 * 0 0 * * 0 0 CCCTATTGCACTTAG.GCGTGGAATCGCGGGATT.CGGCCCCCG.CAGTCGGCTATGATTCGA.TCCATGCGTGCGTGTGTGCGTATCCCCACGTATAAGAGCGCGGACACTCCA.CTGGGAACCAATC.CA.TGAC.TAGCCGACAATAT -8F-F8!F-F8-888#F8FF!!F8F!-8!8!8F-#8F!--8F!F#-8!F!8!-F8-!8F-FF-#-8--8!!88-----F-8--!!888!-F8!-88-----!8!88!8-8-!!-F#!--8!8-!!8--F#!-#F!--#F-F!-!-!F-F88 BC:Z:TNNGAGAA-TTACGCGC RG:Z:HiMom.1
-HiMom:1:1102:1452:1000 589 * 0 0 * * 0 0 GTTCCGGACGAAGGACTGGATTGCTGCTCAGAGATCCCGGTTCCAGGGTCGGT.CAATTTGTCCGCCAGGTGGA.CTTGTTCTTTCAGACTAAGGTT..AGTGA.GCCAGCATTAAGATACAGAAACAACTCGTCCCCT.TCTGACGATCA 8-FF8!---FF8!!8!-F!8F!8--FF-8F!F!F!!!F-!8F!-8F8F!8!88#FF-88FF!-!-8!F8-!!--#!!-FFF-F8F8--8-F--8!-!##-F!8F#-88F8F-!F-F8F!8-8-FFF8FF-8F-!88!8!#-8F8-8F---F BC:Z:GGGGCACT-GGCCCGCT RG:Z:HiMom.1
-HiMom:1:1102:1452:1000 653 * 0 0 * * 0 0 GCG.CGCTTCG.G.CCGGATGACCTGCTTTGTT.CTCAGTTTTTTTTATG.T.GTACATTCTTCCCTCGATCGAGTGTGTTTGCCTGCGGCTTAGTCGTGGGCTCGCG.CTGT.CGAGGCTGTCATTCCAGGCCTGCCAA..CGGCGGTCT !-F#-8!-F!!#-#-!!F-88--!F8F88F--!#FF-8!8!-F8F--8F-#!#8888FF!F!!-F!F!--!!--!88F!8!8!F-!FF!F8!-FF-88-F-!F8-!F-#-8F!#FF888!!!-88-F!!F!-FF8!!F--##8F!---F!F BC:Z:GGGGCACT-GGCCCGCT RG:Z:HiMom.1
HiMom:1:1102:1470:1000 77 * 0 0 * * 0 0 CAGACCGCGGCTCTGGATCACCTCCGACGGGTAGTGACA.CTACCT.AATCCGTCCAAGCAATGTGCAGTTCTTAATGACTTGGCTCGAGTAGTCCTGACCAA.GAACGGACGTTCTTCGA.GATAGGTGGGAG.TGGCTTCACGCTTTAC 8FF8-FFF!F-8--F-888-!!-!-8--8FFFF!!F8FF#!!F!!8#F8!8F8-8-8-F!--8-F!8----!F----8-8-F!!-F!F-!F-!!F-F!FFFFF#F--F----!!F-!!F--#88!F!F!8-F--#-F8-F-!-!!-!!!-F BC:Z:GGGCAAAT-CTGGTNNN RG:Z:HiMom.1
HiMom:1:1102:1470:1000 141 * 0 0 * * 0 0 AAGCAA.GA.GACACCGGTGTCAGTGTTTTGG.ATCGCAGCTTT.GACCTGCTTCCT.AACTT.TCTGTTTCCGAAGTCACTTATT.TAAACGAGCTCTGGACTAGGCTCTGTACTCCCAATCTCGT..TCTCGGGTCAA.GAGCCTGGCC F8-888#!8#-8--F--!F--888!8F8!-F8#-F!!!--!F8-#--8--F-!8FFF#--F!-#!F-!!!F-8-FF8--F!-88!8#88-F-F-8F--!8!F!-8-F--!88FF!-8!--8-!88F!##-!8-!!FF8-F#8FF-!!!--- BC:Z:GGGCAAAT-CTGGTNNN RG:Z:HiMom.1
HiMom:1:1102:1488:1000 77 * 0 0 * * 0 0 CGCTGTGCGTAACTTCCATGAATATCGAGGTGGATCTC.GTAGTGTTTG.AC.ATAGGTACAAACGTCCAACATGTCACGTCGAGAACGCCCCGATGTGCGCGAGAAGT.ATGAGCGTATGCAGGGCGTCAATTGCCCTTGAGAAGGTGGG FF--8F88!!-8-F8!-FF!88F-!F8F!F!!F--F88#!88-F-F--F#8-#8-8-8-8!F-88!8!!FF88!FF!-8FFF--8-8F8-FF8--8FFFFF-FFF8888#F8!F!888-F!--!88-8!---FFF-!!F!FF--8F88-!! BC:Z:CTCATACG-CTGNTCCC RG:Z:HiMom.1
=====================================
testdata/picard/illumina/151T8B8B151T_cbcl/sams/NN.sam
=====================================
@@ -4,8 +4,6 @@ HiMom:1:1101:1000:1000 77 * 0 0 * * 0 0 TGATGGTTTCGGG.TTTAGACAGTGTCATGCCTATTCC.T
HiMom:1:1101:1000:1000 141 * 0 0 * * 0 0 CCTGAAGAG.C.CA.C.CCA..GGATGA.AGTGACCACGGGATGC.AGTGCCCACGATGCGTAGGACGGGGAGCCATGATCGTCCGGGTTTGGCGT.CTATCGTGATAGGAGACGGTGCCCAGTGATGCC.CCGCGCACTG.TAACCCAGT F-!F8--8F#F#88#-#-FF##F-8!-8#88-F-F-F8F-F-F8F#-8!--8F8-!F!8F!--8-8!FFFFF8F!FFF-F-8-FFFF!8--88!8-#88F!88-F-F-F-FFF8--8--!!-FFF-F!!!#FF8-FFF!--#FF-F!-F-! BC:Z:GCCNAGTA-CCTGGTAC RG:Z:HiMom.1
HiMom:1:1101:1018:1000 77 * 0 0 * * 0 0 GGTGGGGCAGCTC..GT.CTGGGTATG.TTACATGATTCAAGCATACTGCCCCTGATA.TA.TCGCGG.TTCTGCTA.GTATTTCCCGGGAACTTCTTTCACCTATCCGAACAACAGCTTTCCCAGTCAGAGTCAGCGAACATTATAACTC FFF!-!-!F!!!!##!F#!FF8!FF-!#8!8F-8!----F-!-F8--88-FF!-!8F-#88#-8F!8F#88-8!!FF#!F8!8!!F!F-F-F!8F8FF!8---8-FFF8---8-8--!!-F8-!8888F8F8!F8FFF--!F!-8FFF--F BC:Z:CTTCGTGT-TATGCANC RG:Z:HiMom.1
HiMom:1:1101:1018:1000 141 * 0 0 * * 0 0 CCTCG.TAGGATCATCCTCGCGTGCCATCGC.GATACT.GCTTTATAACTTTTTAATACCACCACTTAAAGC.TTAG.T.TGCACAAGGTCGTACTAAAGGACCCGCTAGCGCGTGATCTGTGGTCCCACAGAGTAC.CCGACTACT.TTA FF!8F#F88F-!F88--FF----8-F88FF8#!88-!F#-FF-8FF--88!F!FF8FF!8-F--8-!88888#!-8!#F#88F888-!--F--888F-8F-FF8F8---88!F!-FF!-!--FF--F88!-!-!FF!#!88F-88F-#88F BC:Z:CTTCGTGT-TATGCANC RG:Z:HiMom.1
-HiMom:1:1101:1054:1000 589 * 0 0 * * 0 0 GTCGTACG.TCGAAG.TGAGGACGGGATTGTCTGTAAACTTGCGCGAGACCGAAATGTCAAACGG.TTCGGTAACAAGAACACAAC.CTTCCGCATACACGTCGGTGTTTCCTATACCGCAACCGTTGGAGGTTCCACGG.CTAGGCTCGC F!!!8--8#88-FF!#--FF-88-88F-!8!F-!--F8F8!FFF8-8!F8F8FF--F-!F--F-F#-8!-F-FF8888F-----F8#!F!!8F!-8F!FFF!-!!---F--88-88-F8F-F!----FFF!!8F!8FFF-#8-88-!F-88 BC:Z:GGTGCGCG-GTGCAGAC RG:Z:HiMom.1
-HiMom:1:1101:1054:1000 653 * 0 0 * * 0 0 AA.ACT.CGATTTTGAGATCATGCTCTACTT.CTGGCTATGTATGGTAGTGCGCTGA...TCTCTATTTTGTGAACATGGCT.GTCGT.GGGTGTCATCGGCTC.CCGTAACACT.TAGCCC.TGGGCCCGCGG.TG.AATTGCTGGGAGG -F#8!8#-F8---!F8888-8F-F---F888#!FF!F!--!!8FF8F8!F8FF!8--###F!F-!8!-F8F!-F--F!8!8F#88!--#!--8!-8--8-F8-8#!8---F8-88#!-FFFF#--F--!-!-!F#8!#F8F---8FFFFFF BC:Z:GGTGCGCG-GTGCAGAC RG:Z:HiMom.1
HiMom:1:1101:1072:1000 77 * 0 0 * * 0 0 CCTTGATC.CTCCGCTTGAGTTT.GTTTCAGATGCCTT.AGGAAGCGATATTCCAACTCATGGAGCGTCAGCAGCGATTGTCGTATAGCCGGGCAAATCACTAGGAATGCC.T.TGTGAACAGTGGCATTGTTGTATGGTGTGTCCCCAAG -F-F88--#F8F888-!8F!F--#-!-F8--8!FF!-8#F8-F8-F88!-F8-8--!FF8FFF-F88!!F8!-!8--8-!!!-F--F!F----FFFF!-8!8-F-F-8F8!#-#--8F--88-!-!!88-!F-!FFFF8F8F8F!-88FF8 BC:Z:CTTCCTTG-GTGTCTCG RG:Z:HiMom.1
HiMom:1:1101:1072:1000 141 * 0 0 * * 0 0 .CGG.CTGGTACCTATCGCGACGTCCACATTGTTGTATTC.GTT.CACAACCGTCTAGCCTTCT.TACTACCGCTAAGCTTAAA.CCAACTGGACAGTGGGACACGGCT.CTC.GTCACAAACACC.ACACAGCCTGTGC..CACCTCAAG #FF!#F-8--8!-8FF-!-F--8!FF88-!-8-!-8-!!8#F8!#F--8-!8!--F88-F!F!!#88!8-F!----8888!-8-#88F-FFFF8!FF!!8F-8F8FF--#-F!#!!-8-88888--#FF8-FF---!!8-##-88!-F8-- BC:Z:CTTCCTTG-GTGTCTCG RG:Z:HiMom.1
HiMom:1:1101:1090:1000 77 * 0 0 * * 0 0 G.ATAGG.AA.GGAGC.CCTGTAAAGTGCCGGTACATTGAATACCTCTCA.ATG.CAGAAGTAGACCAGCTTCG.CAGGACAAATTCATCATAGTTTATAGGTAATCCA.TTGAGGC.CCTTGGCTTGATATTCTCCCGTCTACCGAGTCT F#F-F-!#-8#!8---#F8!!F8-F8F-!8-!8-!8!F!F-88F88-F--#FF-#--88-!8F--FFF!8-8!-#FFF8F88F-!!--!!F!8!--88F-F8F8--!--#88!F8-!#F!8!F88F-F-F-FF8FFF8F-!!F8-!-!F-8 BC:Z:TCTCACTC-AAGAGCAA RG:Z:HiMom.1
@@ -14,8 +12,6 @@ HiMom:1:1101:1108:1000 77 * 0 0 * * 0 0 .TCT.A.ATTAAGTGCGGCAG.TGGGGCCCCCTGGTTTGA
HiMom:1:1101:1108:1000 141 * 0 0 * * 0 0 TGTGTG.ACTATCAATCGACCAGTACTTAGTTCAGCACCGCCCTACTCGGCACTGCTAGCGGGTCGACCTGGATAGCCGTAGCGCGAC.AGCGATTGTCTTGAGTGCTCGCCAGATCCTTCTGTCCTGTATTCATACA.AGTGGGAAAGGG 88!F8F#--!-8!FF8F!FF--FF-!!!--!F8F-!-!8F--!88FF!F-F---88-88-!-!!FF8!!-FF8!----!FF--888F!#F!88-8!-FF!F88FF8--8!-!8---!-888-F!8-8-F8-!88-FFF#-8-!!--F-88- BC:Z:AGCCCCCT-CGTNATTA RG:Z:HiMom.1
HiMom:1:1101:1127:1000 77 * 0 0 * * 0 0 TTTTCTTTGTTA.GCCGTC.ATGGGTCC.GGCCCACCGTACA.ACCCATCAGCGTCTGACG.CCGTACTTCG.TACTTATGGTGACTGTGA.TGCCACGACTTGTCAT.TACTTGGGGTTGTGA.TA.TACACCCTATCCGAACTT.AGGT F8F-8!-!F8-8#!FFFF-#FF--F8!8#8!F-8-!!--8!-#-F-88!8-!FF!FF8F8F#F-FF8!88-8#--8!F-F8--F-!8F888#!!--8!F8888!F!8!#88-F88!!-F!F8!8#88#F-8F!-F!8!8!!8F-F8#88FF BC:Z:CACTTTTC-GTTGTAGG RG:Z:HiMom.1
HiMom:1:1101:1127:1000 141 * 0 0 * * 0 0 GCTTGCCATTT.CCGGACTCTATCCGTGCTCGTAGCACAC.TATCGGCACGCCTTC.ATACACTCTGACGAC.GGCCCCTATGGAATGA.T.GTCATCTACACCCTACTCATGAGATTTTAACGGGACAGTAGGCTACATCGGGTCAAACG F!888-FF!!!#--!F-F!F!88-F8!!!!-!---!8!F8#-8F!F-!FF!F-8-8#88F8-FFFFF-!--!#8F!F!-8F!F-F88F8#8#F88888--8-88!!F-8FF8-F!F!FFF-F-F888--8FFFFF--88-8-8--!FFF-- BC:Z:CACTTTTC-GTTGTAGG RG:Z:HiMom.1
-HiMom:1:1101:1145:1000 589 * 0 0 * * 0 0 TTGTC.CCTT.GCTAAAGATCTCCGTCGCTCGTCTCCTG.CCCGTATCTACCTAAGCCT.CTGCG.GGTTCGTAGCCCGGCCTACAAGGCAGGCTTCA..T.TGCGG.GGGAC.GAAACGCCACGCTAACCGCTCAGGCAGTAGAGCTAGT !-8-F#!8--#FF8F-FF---!F!!!8-!!F88!!!--!#!8F88F!-!-F-8F-FFF!#FF!8-#!F-8!!!88F!!8!-!888F-!FF8F88-8!-##!#!!8!8#-!FF!#-F888!F-F--FFF88888F8F------FFF!!8-8! BC:Z:GTAGGGAT-AGCCGGCG RG:Z:HiMom.1
-HiMom:1:1101:1145:1000 653 * 0 0 * * 0 0 TCACTCTTCATT.TGGTCTTGCTGAATCAGCTTATCTTGATGAGAGCG.CTCCTGACTGGGAGG.TGCCC.CCAGA.TAT.TGACCCCG.GACAGCTGTGAC.ATCAGGAGCC..TTCCGCTCCCCCG.AGTCATGTATCGCTTTAAAGAT !F8-F-8!F8-8#!!FF-!888F8888-888!F8!--8!FFF-F888-#8!!!-88-!-!!F!F#8F8!F#-F-!8#!8-#F8-!!8!-#F8---F8FFFFF#-F-F-F-8-!##--8!-F!!88FF8#88FF8-88F!888!!8-F8-88 BC:Z:GTAGGGAT-AGCCGGCG RG:Z:HiMom.1
HiMom:1:1101:1163:1000 77 * 0 0 * * 0 0 TCCT.CA.TCGCACCGGAGAATTCCCACGATTCCCAAGC.AA.ACGATCTAATCTGAGCTTAGAACGAACAGACTCGGTAGGGGGATATTGTATCGCTGCCGTCGCGTGCTATGCTACGGTCTC.GTTATAATGGC.TTTTGGTCGCTTTA F8F8#-8#-8F88!F--88F8--!8!F8F8!!F!!FF-8#-F#FF--F!8888-F!--88-888-!F8F!8FF8--8!FF!888!8--F8F-F8F!-!8---88-F8F-!!F888-88F8!F88#F-FF8F-!!8-#!F!-!88-!F!888 BC:Z:TGTCTATT-CTGCGTAC RG:Z:HiMom.1
HiMom:1:1101:1163:1000 141 * 0 0 * * 0 0 GG.GCGC.CTCCGCACGCCA.TAGCA.CTTG.GTAGGCCCTT.TTTCCAGTTTCTGGTAGGTCTCGAGGCGTATCGTTT.CGGCGTCTTTCCACTGAAAGGGGGTCTTAGGATGGTATCTGGT.GCG.ACGTGAGTGTATCGCACGTACCC F8#!8-!#8!8-8!88-!!-#8-!8F#8!!!#F!F--!!---#-!---8-!-FF!8!!F!8-8!!!F!--F!888!F--#F8F8-F8!F!-!8F8!-F--8!F!F8FFF!F-!!FF-FF88F8#---#8--FF-!!F!-F8!F888-FF!! BC:Z:TGTCTATT-CTGCGTAC RG:Z:HiMom.1
HiMom:1:1101:1181:1000 77 * 0 0 * * 0 0 CGCGTGAAACGTCCACAATAG.GACGTCGCGTGATGTTGTTCTA.GGCGATAC.ACGAGGTGATCAGAAC.CCTTCAGTTTGTTGGAGTC.CTTCTGGACACC.CACCCGGATGATTAAGAGCTACGCGCTAGCCATATACGA.ATCC.TC !8-!88888-!F8!888F!8!#8--F!F!--!-F!-F-!8!F88#!-!----F#---F-8F!8!-8-8--#8-F!F88-!-!F8!!-!!F#8F--F8FF-8!-#-FF-FF8F!FF-!FF8-8---F!F8F888!!--FFF---#888!#!- BC:Z:TGTGTCAG-CTAGTCTC RG:Z:HiMom.1
@@ -44,8 +40,6 @@ HiMom:1:1101:1416:1000 77 * 0 0 * * 0 0 AACTTGGGTGCCCGC..GCTCTCGAGGCT.G.ACGTCATG
HiMom:1:1101:1416:1000 141 * 0 0 * * 0 0 TGGTCCTCTGGTCAGCAGTTCTAAGTGCCGTCTATGG.TGGGT.CACCA.CGCTA.GT.ATAGGTCCCTAGGTCGGGCGTGCGACTCACCGCCGGAAGGGGTGGCCGGG.TATTTCTTCCAGGCAAGCCA.CTAATGGTAAATCTGTCGCA -8F8F-!-!--F!F8-F-!F888FF-F--F8!--888#888!!#-F-!-#F-8!F#!!#----!8-!!88F8!!F8-888!FF8!!88!8FF8!---F!F88!8-8F88#-F----F--8F-!FFF!F8-#-!-F!F88--8--!-8-F8- BC:Z:TAGCGTTN-ANCGGGCT RG:Z:HiMom.1
HiMom:1:1101:1434:1000 77 * 0 0 * * 0 0 TACTC.GTGGACTTGTATCC.GGACTTTCTCTCTG.TACTGGGTT.CGCCGAACTCCCCGTT.AGCCATC.CGGTGCTGGACCACA.ATCGCGTC.GACATGCGCACTAG.CGAACCCTATACTCTA.TTC.CCTTCGCTTCGGCAGTTGT -888!#8FFF-F!-8!F!F-#!8-F888F8-8F!8#!FF!!8-!-#-8F!!8F8-F88!-F!#-!8-88!#-F8F88!F8-!F-F8#F!F!F!--#8-8-!F8!8-F-F-#FF8F-F8!-!88-!8F#!!8#88-8!F!!8F8!-F88!FF BC:Z:AATTTGCG-AGCAGNGT RG:Z:HiMom.1
HiMom:1:1101:1434:1000 141 * 0 0 * * 0 0 TTTGTTTCAGGGCCTTTGCCGT.CGCA.TATTGTGTCTCTTCCCAGCAGCTGTCCTTAATGAT.TAGCAGATCGCCTGTGCATTA.CGCACCTC.TCGTA.AGGGGTGTTCCAACGCATACA.CTGC.TGG.CGT..CAATGAATCAGATT --!!F!8!FF-!-!88!88!-!#8-FF#F888F!!F!8--8F-!FF8-!F-8FF!FF8F8!88#8--!888!-F!FF8F8F-F-F#!F!88F-F#8!!F8#-!8!---88!--88F-F-88F#8888#-F!#FF!##!F8-!-8F8F-8F- BC:Z:AATTTGCG-AGCAGNGT RG:Z:HiMom.1
-HiMom:1:1101:1452:1000 589 * 0 0 * * 0 0 T.GGGCGCAGTCCGGGGTTAAA.CAGTTAGTCGGCGTCGCCTAACAAGCTCTTGAGCCATTGCGGCTT.TTATGATGCCTCAATTGTTGGGCCTGTGAGACCGGGGCG.GGGCCGCAAAGGCG.C.TAGTCTC.GAATTACAACCCTG.CG -#FF!8!8F-8!FF8-F8!--8#F88FF-FF8888!!8!-8!-F8FFF8-!F88FF-F8-!!-!-F8F#!-8-!-F-!F!8FFF8!!8F!!-!!FFF-!F!!8!F8!F#F--!F8--888888#!#-8--!-F#-888-8!------F#8! BC:Z:TCGGCAAC-CCNATNCT RG:Z:HiMom.1
-HiMom:1:1101:1452:1000 653 * 0 0 * * 0 0 AAGATCAATTTATGCACGGCCACTAGTGTGGTGAACACCTGT.GTAGTACTTGGTTTACGTCTCC.CTATCGTGCCGTAGAGTTCCCTGTTGGTATGTTATAGGGAACGGAGCATCTCATGCGCCAAACGAGTTTGACG.TGGAGCC.GTC -8-FFF888F--F8--!8-!--!8F-FF--88F8FF-8-!!F#!-8-!88FF!F--FF!!F8-88#!-F-8---!!F8888!FF!F8!!!8---F88F8888FF!-F--F8-8F-!8FF--FF-888F-F8F-F-8-F-#!FF-8!8#!8! BC:Z:TCGGCAAC-CCNATNCT RG:Z:HiMom.1
HiMom:1:1101:1470:1000 77 * 0 0 * * 0 0 .ATCTTTGGGATCATGAATTAAGGATTGTCCATGCGACAAGC.ATGTAC.ACAGCG.ACAGAATTG.TACGATGAACGTCGTAGTTGCGTTACCAAGGCACTAG.ATTACCCTCT.GGCCTCGATTCG.CCACCCTCTTGG.GGTCCCGAG #---FF8F888-F8-8F-!8F88F88FFF-FFF-!8F!F-!!#-88F--#F8888-#F8F!FF8--#!-8F88-8FFF!F8-F!F8-FF!88--F-F888-8--#8F88--FF8F#88-8-F!-F8-F#F8-!8F!F--F8#-F8!8-8F8 BC:Z:GANCGAAC-AGNTGGCN RG:Z:HiMom.1
HiMom:1:1101:1470:1000 141 * 0 0 * * 0 0 GGGAATTCCGGTTTTTGGCGAAGTCTCGATAACTTCCGCGCGGCACCTAACTTGCCAGCTGTGGTTCGCGTCGTGA.TTAATGTTGGG.TCTCGC.CGACATAAAA.TGTAAAGGGAGGCCTTGGAGGCCC.GGTGTATGCT.CCAGCTGG --!-8F-88F-F---!8!F--8FF!8F--!---!-888--8F-F--!8FF!8-FF!8-!8-!----8-!8-88FFF#8!-8!-!-F!8#-8-!!-#8F888F8FF8#--!888!8F8!F888!!-F8-!-!#F-888F!8!-#F!F8F8!F BC:Z:GANCGAAC-AGNTGGCN RG:Z:HiMom.1
HiMom:1:1101:1488:1000 77 * 0 0 * * 0 0 GGTCCTGTTTATGCGTTCGCTGA.G.TGA.ATCACTGCCGGATGGCTT.ATAGGTTG.GT.ATCTTACTGCGGGGCACTCAAGTTCCGCCCAAGCA.GATTGGATTAAT.CAGAA..ATG.CGGT.CCGCG.GCC.TGTT.AATTTCATCT --!F-!FF-F-8FF!!F!F!--8#8#FFF#F!!8!F88-!F8FF!-!-#-!8!F!--#!-#8-----!F8!!!F88F-F8F-8FF8!F!8---FF-#--F-FFF-8-8F#FF88-##88-#FF8F#F----#-FF#8!--#-F-F8FF88F BC:Z:CGTCNTGT-CTTCCTCA RG:Z:HiMom.1
@@ -56,8 +50,6 @@ HiMom:1:1102:1018:1000 77 * 0 0 * * 0 0 .GGAAA.GGATAA.CCAGACACCCAA.GGATATGTAGCAT
HiMom:1:1102:1018:1000 141 * 0 0 * * 0 0 TTTCACCAGGCCTCCTCGTAAGTAGATCTTATTTGGATCCAGGTAGCATCGGGGGAGCCGACATT.GTCC.GTCTCAGCGTCGTCCACCTACTCTGACG.GTACCAGAGTGCTCCCGGTACCTCAGTGCCAAGTCGGATTAGCTTGCCAGT 88!!8-8F-F-F-8-!!-!F88F-F-8!FF-8F!8!F!8FF-FF88-F8!F!!8-F!F8FF8FFF#!8!F#8888!-8-!!F-F!F-F8!-!88!--F-#!F88!F!-!F!8-8F!!-!F!--F--F8-!8888F!!8F88!!----!888 BC:Z:TCGTNTTG-CGTGGATT RG:Z:HiMom.1
HiMom:1:1102:1036:1000 77 * 0 0 * * 0 0 CAGTGTTTGTTCGAATCCGCTCCCTTCTGCTGACGTGGGT....GG.AACCGAAACGCTTTTCTCCCAC.CCGG.GTCGTTCAACTCTA.ATGGGACAGCGCATGGTTCGTCTA.GC.TGACTCGTGGCA.ACGTCCTACGACCGCTAAAT F-!8--!F-F-8!F8F888!!!F8!F-8F!!F-F-F!-!F####!!#-FF8!F-F!8FF--8F-8FF-!#!--F#FF-!8FFF---F!-#8-F!!8!--F!FF8-88FF8--88#F-#!!-FF!F---!F#8F--88!F-!--!8!8F8-8 BC:Z:NCATATCT-ANAGGCCG RG:Z:HiMom.1
HiMom:1:1102:1036:1000 141 * 0 0 * * 0 0 TTCCTCG.ACGTCTTTG.AGA.TTTCGCCCAAGGCTTGTCC.TGCAAGACGTCCTGTCGTATAAAC.GCCACGGGCGGCTAGGACTTGGA.ACGGACCT.ATAGTTCCTGTGCCACTT.TCG.GTTTTCGTCTTGTTG.TGCGA.AGGGG. F-!--F-#-8-F!-F--#-!-#88888F-FFF-F!8F!--!#-!-88-F!!F8!88-8-!8--F88#-F--F8FF!-F!!8F8FF8FF-F#--F-F8-F#F-F!F!!FF8!!F!88!F#!-!#-!--F8--!-8!8-8#F88-F#-8-F-# BC:Z:NCATATCT-ANAGGCCG RG:Z:HiMom.1
-HiMom:1:1102:1054:1000 589 * 0 0 * * 0 0 CGGG.CCGCCAGAT.TTCCCCGTTCCCACGGACGTTCCTTGGCAGCGCTACTGTCGGGGTTGATCATGCCGGTGTAGCAGGCGT.CCGGACAGTGAACTAA.GTCTTGATTCCACCG..CATAGC.TCTGATACACCTCAATTCGAGTTCA --8-#-8F8FF-FF#--F8!--8--F8F!!F88F-!!F8!!8--F8F888F8F!--8!88F-F88--!F88-F!--FF-8-FF!#F!-88F-8FFFF-!-F#-F8!-!8!!-88!F-##!F-88!#F-F---FF8FF8!8F-8F-F!-8!8 BC:Z:CTTATTTA-GGCTNTAG RG:Z:HiMom.1
-HiMom:1:1102:1054:1000 653 * 0 0 * * 0 0 G.GAGTAAC.GGATTCGCCAGTAGTTGTTGCACTTGAA.CTAACGCCATTTCGTCCACGG.TTTCTTCGAG.CGGAGGCCGTGGTCCC..CGCGCAGAT.GTT..GAAGTACCGAGACTGGCCGTGACACTGCAC..CGGGA.ACCTCCGC !#-8F88--#88-F8!--F8---!FF8!!FF8F8-FFF#88F8FF!!-!F!-FF!8F-8!#!8!!-!!--!#F8F-8FF!!F!-88--##!F!888F-!#-F!##!F-!--F!F8!F-F8F8FF!FFF888!88!##888-8#-!-!8F-F BC:Z:CTTATTTA-GGCTNTAG RG:Z:HiMom.1
HiMom:1:1102:1072:1000 77 * 0 0 * * 0 0 GCGCTTGTTCCGATTTGT.TGGCGCTGCGGCAGCCTGATCGG.GCGCCTTGGT.GAGAGGCGCACTTGCACTA.CG.CGGGCTACCGCCA.ACGTTTTCTCTGCCGG.AGCCGTATCCGGTTGGAT.TTCCG.CCATCCACGAACTTCATC F---F!!-!8!F8F8--F#8F-8888!!--F8!-88-F88FF#!88F-F-FF-#FF-F-FF!-F-!FF!8--F#-!#F8FF-F8!FFF!-#F!F8F8!8FFF8!-88#--8!FF8F-8!F8-!8-F#8-!--#FF8!!--!!FF8FFF8!- BC:Z:CCCATGCC-GATGTTTA RG:Z:HiMom.1
HiMom:1:1102:1072:1000 141 * 0 0 * * 0 0 A.GAGGC.CCGCCCC..TT.CTCGT.GCCCTCCCAACCGTGCGACTGG..GCGCTGGACATCGTCGCAACTTACGGCGTGTGCCCTGAAGGTGACTACACCG.TGAAAGG.CGCCTCGCCGTCCATGCCACAAGGTGGACG.TCATCG.CT 8#--8F-#F8!F!F8##88#-!F-8#F!-F---FF-F8-!8-8-8F8!##--F-F-8FF-FFFF--8--!8--F--!FF!!-!888FFFF!!!-!--F-8!-#--8FF!-#FF-!8F!-F-!-!8-888FFFF-8!--8!!#-F-8F!#!8 BC:Z:CCCATGCC-GATGTTTA RG:Z:HiMom.1
HiMom:1:1102:1090:1000 77 * 0 0 * * 0 0 GCCTACGCATCCGCCC.CACTG.ATGGGTGAGCC.G.ACTAAGCTGTAGTGCCTGATCCCTCCAGGAGCCCTTTA.TGAATCGGAACGCTATGCGACTTGTGATAACGAAAATTTCAGAAGTT.ATCGCCAGTGTGGTTCTTCC.AACATG !-F-88F88!!8!--8#---8!#F8F8-!F--8!#8#8-8F-8-!-F888FF8!8F88!-F-F8!8F---!F8!-#8F-F8!F--8F!!!8-F8F8FFF!!!---8!-8FF8F!-8-!FF!F-#-FFF88-8!!8!!8-8!F-!#FF!8!- BC:Z:TTGCCTTT-TTTCGGTA RG:Z:HiMom.1
@@ -66,8 +58,6 @@ HiMom:1:1102:1108:1000 77 * 0 0 * * 0 0 TTA.GGGGAGTGC.AAGG.CTTA.AGTTCACCGAGCCCAT
HiMom:1:1102:1108:1000 141 * 0 0 * * 0 0 TTTTCCAGTC.TTCTTGCAGGCCGGTGCATCGGCTT.ACGCAATG.CCCCTC.ACGTTGTGAGTGTCCCGATCAATTTG.GC..AAGTACCAAAGGTGCCTGTCTGTAGTTGAACATTACGTGGCGTATGG.GTAAGTTTCTATGCACGCG 8FF-8F8-88#F8--8F!F--8888F-8F!!--!8-#8-8-8--8#8-8F!F#8!F-F-8!--!8-!!8!88!-F!!8-#--##F--8-!-8-F!FFFF88!8-8FFF-!F8FF8FF-F!--F88-!-!!8#-F88!F8F!8-F-8-F--- BC:Z:CCCGNGCT-CATCCNTG RG:Z:HiMom.1
HiMom:1:1102:1127:1000 77 * 0 0 * * 0 0 GCC.AACGATCTT.TTTGCTC..CGTG.TGCTTGGTCTTCTTGTCTCTAACTA.CGTGTAGTGAGAGT.TCTCTCTCGAGCGT.TCTGGATTGC.CGACGGACGAGGAATTAGTGCTCAGTGTATCGGACC.TTTTCTGGCCGCATGCAGC 8!-#8-8!-F!-8#!8-!88-##8-FF#FFFFFF!!F-F-F-FF!F--8-8-8#!!!!!88-!F-F-!#8---88!FF8-FF-#-!8-!88-8!#!8--F-FF8FF88F!F8F8!!8!-F!88-!!-F8!F#!8---!-!F!--8--!F!8 BC:Z:GTGGCAGA-GAAACGAA RG:Z:HiMom.1
HiMom:1:1102:1127:1000 141 * 0 0 * * 0 0 CGCCGCTATTCCGGACA.AT.GTGTGACGCTTTCCGTCTCCCGTCGTCTCGATTTGGCGCC.ATC.TCCGTCAGCCTAGAG.A.TAACGAA.CTGGATGCTGC.CATTGGA.ATGACTACCTGCTACTTGG.ACGATTCTGCACGTCGTCT !88F8FFF!8888!-8-#F8#-8!!F-!FFF!888--8FF-F-F--8-!FF8-F888-F!8#F--#!88!!-F-FF!F-8-#-#!--FFF-#8-8-8-!-!-!#88F!!8F#F!8FFF8-F---FF!-888#F8FF8------88--8F!- BC:Z:GTGGCAGA-GAAACGAA RG:Z:HiMom.1
-HiMom:1:1102:1145:1000 589 * 0 0 * * 0 0 AGATTTGTCAGAGTGT.T.TCAGCGGTA.CGTAGTAGGCGGTGTTGGGCCGGTTC.T.TA.TG.TCGAGCAAG..ACGGGCACACTG.CCATT.ATCCT.ATGCAAAAGC.TGG.CCC.TGGGAGGAGCCTAGCGAGCGGGGGCGTTTTTA 8-F-8FF88F!-!F!F#!#!-F-8F!!-#8F888-F!8!8!!8!888-!F!FF!-#F#8-#!F#F-!88-8F!##-F--!--FF-8F#!8FF8#--FF-#8F!-FFFF!8#8!F#-!-#8-FFF!8-FF!8-8--FF!-!8-!!F!!-8-- BC:Z:GGTAAGGT-TCCACGTT RG:Z:HiMom.1
-HiMom:1:1102:1145:1000 653 * 0 0 * * 0 0 ATAGATCCTGTTTAGCCGTTGTTGTTAGCCCC.TCTAGC..ATACCGAATC.GCCCT.CGATCTCCTCAGAGTTCGACCTTCCTTTC.GGAGAGGGTACCTCTCAGAA.GCAAGGATGCCCATGTCACTCAGATCCTA.AT.AGAATCTTT 8-F8F-!-!F8F-F!!8--!8F8-F-8!-8!!#88-8F!##F-FF!!FF-8#F--8F#-!FF!F-FF8-F8!-!--F8!8!!88F8-#!!F!-F-88F888--8F!FF#---FF8F8-8!!-F!F!8!-F8-8!-F8-#F!#-FFF!-F-F BC:Z:GGTAAGGT-TCCACGTT RG:Z:HiMom.1
HiMom:1:1102:1163:1000 77 * 0 0 * * 0 0 GATACGGTGTTATTCTTCTTGATTTGACTACG.GTCCGACAAC.TATTCGTGGAAACACGGCCCAATAGCGCT.GCCC.ACAGCTTTATAGTGTCA.CAGTGATTACGTCG.TGTCAGGGTTTACAATG.AG.GCAAGCGTTTGGCGGCGA !-!888F-8!!8!8--88!888---!8FF88F#--!F8-!-F8#F88F!88!!F-8F8-8!--!-F!FF!8-F#F!!8#-!F88F-!-FF!8FFFF#F-88F8F!8!!8FF#!8-!F888F8F--FF8-#88#-!--F88F!-F-!--!F- BC:Z:CCGCGCNC-NGGGATAT RG:Z:HiMom.1
HiMom:1:1102:1163:1000 141 * 0 0 * * 0 0 CCTGCTCCTCGGCCGACCTG.CCCTAATGCAGTTGCTCCGGA.CTGCCAACGAAAACCTTACTC.TCTA.CTCGTA.ACTACGGCACTGAAGCA.TC.GCCC.TTTGTTC.CGTCTAACCACTCTTTCTTCGCGCGAT.TAAGGCCT.CTC F!-!-F88FF-!F-88F!-!#-8!8-F!88--8F!!FF--8F#-FF88FF---F8F8!88F8!-#F!!8#88!-FF#-!FF8!F-F!88F----#!-#-!F-#8!--!!8#88FFF88F8-8!!-!F888!!FF!8F8#8-F!!!-8#F!- BC:Z:CCGCGCNC-NGGGATAT RG:Z:HiMom.1
HiMom:1:1102:1181:1000 77 * 0 0 * * 0 0 TAGCATCGTAAACGGGACTTCGCTAGTCCAGTCTCTTACTAGTCCGG.T.TGGACTA..GTT.TGTA.ACCCGACTCGGA.T.CATTAGTCAC.CAGACT.CTGT.G.CATCAA.GACCC.AC.CCTCCTTCCCAGATAACCGTT.GTTTC -F!!8F!F!F--!F-F--F!-!---8F!!F-FF-!F8F8F--F--8-#-#-8!F!!F##-88#-8F8#-!-8F--!-!!8#8#8-!F88-8--#-F--!-#!---#-#F-8FFF#8888F#8!#F-888!!!-FF-F!FFF!!!F#8!F88 BC:Z:CGCGTAGT-ATTCCGAC RG:Z:HiMom.1
@@ -98,8 +88,6 @@ HiMom:1:1102:1416:1000 77 * 0 0 * * 0 0 TGACTACTTAGTAACGG.G.CCGTGGCCGCTACTGCGCCG
HiMom:1:1102:1416:1000 141 * 0 0 * * 0 0 TCGGCACGACTACTAGTAGCAC.CCGCCTGGGTCAC.TAGCCTCAGTTGGCTCAAATTTGGCTGGAATGACTAATCATATTTTGTCCATACAATCGATCTTTGGGCCTCCC.CCCCAT.A.CCGCGGGGTACCTTGTGCCTCTCACTTGCC -8!FF8!!8F8F8F-!!F8-8F#FF88!8-!!!FF-#-F8FF8F-FF-F-8-!8FF88!8-88-88F!-F!F888888-!!F8F!!FFFFF---!FF!-!F88--8---!F#-!8FF!#F#!-8!--!FF-!!F88!8FF--!88F88F!! BC:Z:TTAGCGTG-GTGCCAAG RG:Z:HiMom.1
HiMom:1:1102:1434:1000 77 * 0 0 * * 0 0 CGGGGACAGTGTCATTATCGCC.CCG.GCAGG.TTAAG.C.T.CCGG.GGGGGCAGTGCTATTCCGATGTCCCCG.AATAGTC.TGGGTCAGTACCCATGCCCCTTATA.AGC.ATAT.GTAG.CAGCGGCTTGCGGCTCAGCCCATTTTA -8-8---F!8!-8-!!FF8!!-#8!-#8F-F8#F--8F#-#8#FF8F#-8FFF8-!8-!-8FF!-!-88F88!-!#8F8F-FF#!!-F888-F-!-888!FF!8FF8F-#88!#888!#8FF8#!888!-88!!8--8!!-8-FF-88!8F BC:Z:TNNGAGAA-TTACGCGC RG:Z:HiMom.1
HiMom:1:1102:1434:1000 141 * 0 0 * * 0 0 CCCTATTGCACTTAG.GCGTGGAATCGCGGGATT.CGGCCCCCG.CAGTCGGCTATGATTCGA.TCCATGCGTGCGTGTGTGCGTATCCCCACGTATAAGAGCGCGGACACTCCA.CTGGGAACCAATC.CA.TGAC.TAGCCGACAATAT -8F-F8!F-F8-888#F8FF!!F8F!-8!8!8F-#8F!--8F!F#-8!F!8!-F8-!8F-FF-#-8--8!!88-----F-8--!!888!-F8!-88-----!8!88!8-8-!!-F#!--8!8-!!8--F#!-#F!--#F-F!-!-!F-F88 BC:Z:TNNGAGAA-TTACGCGC RG:Z:HiMom.1
-HiMom:1:1102:1452:1000 589 * 0 0 * * 0 0 GTTCCGGACGAAGGACTGGATTGCTGCTCAGAGATCCCGGTTCCAGGGTCGGT.CAATTTGTCCGCCAGGTGGA.CTTGTTCTTTCAGACTAAGGTT..AGTGA.GCCAGCATTAAGATACAGAAACAACTCGTCCCCT.TCTGACGATCA 8-FF8!---FF8!!8!-F!8F!8--FF-8F!F!F!!!F-!8F!-8F8F!8!88#FF-88FF!-!-8!F8-!!--#!!-FFF-F8F8--8-F--8!-!##-F!8F#-88F8F-!F-F8F!8-8-FFF8FF-8F-!88!8!#-8F8-8F---F BC:Z:GGGGCACT-GGCCCGCT RG:Z:HiMom.1
-HiMom:1:1102:1452:1000 653 * 0 0 * * 0 0 GCG.CGCTTCG.G.CCGGATGACCTGCTTTGTT.CTCAGTTTTTTTTATG.T.GTACATTCTTCCCTCGATCGAGTGTGTTTGCCTGCGGCTTAGTCGTGGGCTCGCG.CTGT.CGAGGCTGTCATTCCAGGCCTGCCAA..CGGCGGTCT !-F#-8!-F!!#-#-!!F-88--!F8F88F--!#FF-8!8!-F8F--8F-#!#8888FF!F!!-F!F!--!!--!88F!8!8!F-!FF!F8!-FF-88-F-!F8-!F-#-8F!#FF888!!!-88-F!!F!-FF8!!F--##8F!---F!F BC:Z:GGGGCACT-GGCCCGCT RG:Z:HiMom.1
HiMom:1:1102:1470:1000 77 * 0 0 * * 0 0 CAGACCGCGGCTCTGGATCACCTCCGACGGGTAGTGACA.CTACCT.AATCCGTCCAAGCAATGTGCAGTTCTTAATGACTTGGCTCGAGTAGTCCTGACCAA.GAACGGACGTTCTTCGA.GATAGGTGGGAG.TGGCTTCACGCTTTAC 8FF8-FFF!F-8--F-888-!!-!-8--8FFFF!!F8FF#!!F!!8#F8!8F8-8-8-F!--8-F!8----!F----8-8-F!!-F!F-!F-!!F-F!FFFFF#F--F----!!F-!!F--#88!F!F!8-F--#-F8-F-!-!!-!!!-F BC:Z:GGGCAAAT-CTGGTNNN RG:Z:HiMom.1
HiMom:1:1102:1470:1000 141 * 0 0 * * 0 0 AAGCAA.GA.GACACCGGTGTCAGTGTTTTGG.ATCGCAGCTTT.GACCTGCTTCCT.AACTT.TCTGTTTCCGAAGTCACTTATT.TAAACGAGCTCTGGACTAGGCTCTGTACTCCCAATCTCGT..TCTCGGGTCAA.GAGCCTGGCC F8-888#!8#-8--F--!F--888!8F8!-F8#-F!!!--!F8-#--8--F-!8FFF#--F!-#!F-!!!F-8-FF8--F!-88!8#88-F-F-8F--!8!F!-8-F--!88FF!-8!--8-!88F!##-!8-!!FF8-F#8FF-!!!--- BC:Z:GGGCAAAT-CTGGTNNN RG:Z:HiMom.1
HiMom:1:1102:1488:1000 77 * 0 0 * * 0 0 CGCTGTGCGTAACTTCCATGAATATCGAGGTGGATCTC.GTAGTGTTTG.AC.ATAGGTACAAACGTCCAACATGTCACGTCGAGAACGCCCCGATGTGCGCGAGAAGT.ATGAGCGTATGCAGGGCGTCAATTGCCCTTGAGAAGGTGGG FF--8F88!!-8-F8!-FF!88F-!F8F!F!!F--F88#!88-F-F--F#8-#8-8-8-8!F-88!8!!FF88!FF!-8FFF--8-8F8-FF8--8FFFFF-FFF8888#F8!F!888-F!--!88-8!---FFF-!!F!FF--8F88-!! BC:Z:CTCATACG-CTGNTCCC RG:Z:HiMom.1
View it on GitLab: https://salsa.debian.org/med-team/picard-tools/commit/2d8023c38e442005719ef005b4a3d47b51154968
--
View it on GitLab: https://salsa.debian.org/med-team/picard-tools/commit/2d8023c38e442005719ef005b4a3d47b51154968
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20190111/14edc43c/attachment-0001.html>
More information about the debian-med-commit
mailing list