diff --git a/qcommon/src/org/qcmg/common/model/QSnpRecord.java b/qcommon/src/org/qcmg/common/model/QSnpRecord.java new file mode 100644 index 000000000..bfaacb0d8 --- /dev/null +++ b/qcommon/src/org/qcmg/common/model/QSnpRecord.java @@ -0,0 +1,107 @@ +/** + * © Copyright The University of Queensland 2010-2014. + * © Copyright QIMR Berghofer Medical Research Institute 2014-2016. + * + * This code is released under the terms outlined in the included LICENSE file. + */ +package org.qcmg.common.model; + +import org.qcmg.common.vcf.VcfRecord; + +@Deprecated +public class QSnpRecord { + + private final VcfRecord vcf; + private String alt; + private GenotypeEnum controlGenotype; + private GenotypeEnum testGenotype; + private Accumulator control; + private Accumulator test; + private int normalNovelStartCount; + private int tumourNovelStartCount; + private Classification classification; + private String flankingSequence; + + public QSnpRecord(VcfRecord vcf) { + this.vcf = vcf; + } + + public QSnpRecord(String chr, int position, String ref) { + this(chr, position, ref, null); + } + public QSnpRecord(String chr, int position, String ref, String alt) { + vcf = new VcfRecord.Builder(chr, position, ref).allele(alt).build(); + + } + public void setAlt(String alt) { + this.alt = alt; + } + + public ChrPosition getChrPos() { + return vcf.getChrPosition(); + } + + public String getRef() { + return vcf.getRef(); + } + public String getAlt() { + return null != vcf.getAlt() ? vcf.getAlt() : alt; + } + public String getChromosome() { + return vcf.getChromosome(); + } + public int getPosition() { + return vcf.getPosition(); + } + public GenotypeEnum getNormalGenotype() { + return controlGenotype; + } + public void setNormalGenotype(GenotypeEnum normalGenotype) { + this.controlGenotype = normalGenotype; + } + public GenotypeEnum getTumourGenotype() { + return testGenotype; + } + public void setTumourGenotype(GenotypeEnum tumourGenotype) { + this.testGenotype = tumourGenotype; + } + public void setClassification(Classification classification) { + this.classification = classification; + } + public Classification getClassification() { + return classification; + } + + public String getAnnotation() { + return vcf.getFilter(); + } + + public String getUnfilteredNormalPileup() { + return null != control ? control.getFailedFilterPileup() : null; + } + public int getNovelStartCount() { + return Classification.GERMLINE != classification ? tumourNovelStartCount : normalNovelStartCount; + } + public void setNormalNovelStartCount(int normalNovelStartCount) { + this.normalNovelStartCount = normalNovelStartCount; + } + public int getNormalNovelStartCount() { + return normalNovelStartCount; + } + public void setTumourNovelStartCount(int tumourNovelStartCount) { + this.tumourNovelStartCount = tumourNovelStartCount; + } + public int getTumourNovelStartCount() { + return tumourNovelStartCount; + } + public void setFlankingSequence(String flankingSequence) { + this.flankingSequence = flankingSequence; + } + public String getFlankingSequence() { + return flankingSequence; + } + + public VcfRecord getVcfRecord() { + return vcf; + } +} diff --git a/qio/test/org/qcmg/pileup/QSnpRecordTest.java b/qcommon/test/org/qcmg/common/model/QSnpRecordTest.java similarity index 95% rename from qio/test/org/qcmg/pileup/QSnpRecordTest.java rename to qcommon/test/org/qcmg/common/model/QSnpRecordTest.java index b91100edd..d363ed364 100644 --- a/qio/test/org/qcmg/pileup/QSnpRecordTest.java +++ b/qcommon/test/org/qcmg/common/model/QSnpRecordTest.java @@ -1,4 +1,4 @@ -package org.qcmg.pileup; +package org.qcmg.common.model; import static org.junit.Assert.assertEquals; diff --git a/qio/src/org/qcmg/pileup/QPileupFileReader.java b/qio/src/org/qcmg/pileup/QPileupFileReader.java index db9f40d7b..c9f41c38c 100644 --- a/qio/src/org/qcmg/pileup/QPileupFileReader.java +++ b/qio/src/org/qcmg/pileup/QPileupFileReader.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Iterator; +import org.qcmg.common.model.QSnpRecord; public final class QPileupFileReader implements Closeable, Iterable { private final File file; diff --git a/qio/src/org/qcmg/pileup/QPileupRecordIterator.java b/qio/src/org/qcmg/pileup/QPileupRecordIterator.java index e930b2f4f..273706edc 100644 --- a/qio/src/org/qcmg/pileup/QPileupRecordIterator.java +++ b/qio/src/org/qcmg/pileup/QPileupRecordIterator.java @@ -8,6 +8,7 @@ import java.io.InputStreamReader; import java.util.Iterator; import java.util.NoSuchElementException; +import org.qcmg.common.model.QSnpRecord; public final class QPileupRecordIterator implements Iterator { private final BufferedReader reader; diff --git a/qio/src/org/qcmg/pileup/QPileupSerializer.java b/qio/src/org/qcmg/pileup/QPileupSerializer.java index 337c1ee94..8e79028fe 100644 --- a/qio/src/org/qcmg/pileup/QPileupSerializer.java +++ b/qio/src/org/qcmg/pileup/QPileupSerializer.java @@ -13,6 +13,7 @@ import org.qcmg.common.model.Classification; import org.qcmg.common.util.BaseUtils; import org.qcmg.common.model.Classification; +import org.qcmg.common.model.QSnpRecord; public final class QPileupSerializer { private static final Pattern tabbedPattern = Pattern.compile("[\\t]"); diff --git a/qio/src/org/qcmg/pileup/QSnpRecord.java b/qio/src/org/qcmg/pileup/QSnpRecord.java deleted file mode 100644 index 12c81aaa7..000000000 --- a/qio/src/org/qcmg/pileup/QSnpRecord.java +++ /dev/null @@ -1,261 +0,0 @@ -/** - * © Copyright The University of Queensland 2010-2014. - * © Copyright QIMR Berghofer Medical Research Institute 2014-2016. - * - * This code is released under the terms outlined in the included LICENSE file. - */ -package org.qcmg.pileup; - - -import org.qcmg.common.model.Accumulator; -import org.qcmg.common.model.ChrPosition; -import org.qcmg.common.model.Classification; -import org.qcmg.common.model.GenotypeEnum; -import org.qcmg.common.vcf.VcfRecord; - -@Deprecated -public class QSnpRecord { - - - private final VcfRecord vcf; - private String alt; -// private String pileup; - private GenotypeEnum controlGenotype; - private GenotypeEnum testGenotype; - private Accumulator control; - private Accumulator test; -// private int normalCount; -// private int tumourCount; - private int normalNovelStartCount; - private int tumourNovelStartCount; - private Classification classification; -// private String mutation; -// private String unfilteredNormalPileup; -// private Double probablility; -// private String normalNucleotides; -// private String tumourNucleotides; -// private String normalOABS; -// private String tumourOABS; - private String flankingSequence; - - public QSnpRecord(VcfRecord vcf) { - this.vcf = vcf; - } - - public QSnpRecord(String chr, int position, String ref) { - this(chr, position, ref, null); -// this.control = control; -// this.test = test; - } - public QSnpRecord(String chr, int position, String ref, String alt) { -// int length = StringUtils.isNullOrEmpty(ref) ? 1 : ref.length(); - //vcf = VcfUtils.createVcfRecord(new ChrPosition(chr, position, (position + length) -1), null, ref, alt); - vcf = new VcfRecord.Builder(chr, position, ref).allele(alt).build(); - - } - public void setAlt(String alt) { - this.alt = alt; - } - - public ChrPosition getChrPos() { - return vcf.getChrPosition(); - } - - public String getRef() { - return vcf.getRef(); - } - public String getAlt() { - return null != vcf.getAlt() ? vcf.getAlt() : alt; - } - public String getChromosome() { - return vcf.getChromosome(); - } - public int getPosition() { - return vcf.getPosition(); - } -// public String getPileup() { -// return pileup; -// } -// public void setPileup(String pileup) { -// this.pileup = pileup; -// } - public GenotypeEnum getNormalGenotype() { - return controlGenotype; - } - public void setNormalGenotype(GenotypeEnum normalGenotype) { - this.controlGenotype = normalGenotype; - } - public GenotypeEnum getTumourGenotype() { - return testGenotype; - } - public void setTumourGenotype(GenotypeEnum tumourGenotype) { - this.testGenotype = tumourGenotype; - } -// public void setNormalCount(int normalCount) { -// this.normalCount = normalCount; -// } -// public int getNormalCount() { -// return normalCount; -// } - public void setClassification(Classification classification) { - this.classification = classification; - } - public Classification getClassification() { - return classification; - } -// public void setTumourCount(int tumourCount) { -// this.tumourCount = tumourCount; -// } -// public int getTumourCount() { -// return tumourCount; -// } - - public String getAnnotation() { - return vcf.getFilter(); - } -// public void setMutation(String mutation) { -// this.mutation = mutation; -// } -// public String getMutation() { -// return mutation; -// } - -// public void setNormalPileup(String normalPileup) { -// this.normalPileup = normalPileup; -// } -// public String getNormalPileup() { -// return normalPileup; -// } - -// public String getFormattedString() { -// return pileup + TAB -// + (null != controlGenotype ? controlGenotype.getDisplayString() : "") + TAB -// + (null != testGenotype ? testGenotype.getDisplayString() : "") + TAB -// + classification + TAB -// + (null != mutation ? mutation : "") + TAB -// + (StringUtils.isNullOrEmpty(vcf.getFilter()) ? "" : vcf.getFilter()) + TAB; -// } - -// public String getGATKFormattedString() { -// return vcf.getChromosome() + TAB -// + vcf.getPosition() + TAB -// + vcf.getRef() + TAB -// + (null != controlGenotype ? controlGenotype.getDisplayString() : "") + TAB -// + (null != testGenotype ? testGenotype.getDisplayString() : "") + TAB -// + classification + TAB -// + (null != mutation ? mutation : "") + TAB -// + (StringUtils.isNullOrEmpty(vcf.getFilter()) ? "" : vcf.getFilter()) + TAB -// + (StringUtils.isNullOrEmpty(normalNucleotides) ? "--" : normalNucleotides) + TAB -// + (StringUtils.isNullOrEmpty(tumourNucleotides) ? "--" : tumourNucleotides); -// } - -// public String getDCCData(final String mutationId, final String chr) { -// StringBuilder sb = new StringBuilder(); -// sb.append(mutationId).append(TAB); -// sb.append("1").append(TAB); -// sb.append(chr).append(TAB); -// sb.append( vcf.getPosition()).append(TAB); -// sb.append( vcf.getPosition()).append(TAB); -// sb.append(1).append(TAB); -// sb.append(vcf.getRef()).append(TAB); -// sb.append(null != controlGenotype ? controlGenotype.getDisplayString() : "--").append(TAB); -// sb.append(null != testGenotype ? testGenotype.getDisplayString() : "--").append(TAB); -// if (Classification.GERMLINE != classification) { -// sb.append(null != mutation ? mutation : "").append(TAB); -// } -// sb.append("-999").append(TAB); // expressed_allele -// sb.append("-999").append(TAB); // quality_score -// sb.append(null != probablility ? probablility.toString() : "-999").append(TAB); // probability -// sb.append(Classification.GERMLINE != classification ? tumourCount : normalCount).append(TAB); -// sb.append(StringUtils.isNullOrEmpty(vcf.getFilter()) ? "--" : vcf.getFilter()).append(TAB); -// sb.append(StringUtils.isNullOrEmpty(normalNucleotides) ? "--" : normalNucleotides).append(TAB); -// sb.append(StringUtils.isNullOrEmpty(tumourNucleotides) ? "--" : tumourNucleotides); -// -// return sb.toString(); -// } - -// public String getDCCDataNS(final String mutationId, final String chr) { -// StringBuilder sb = new StringBuilder(getDCCData(mutationId, chr)); -// sb.append(TAB).append(getNovelStartCount()); -// return sb.toString(); -// } -// public String getDCCDataNSFlankingSeq(final String mutationId, final String chr) { -// StringBuilder sb = new StringBuilder(getDCCDataNS(mutationId, chr)); -// sb.append(TAB).append(null != getFlankingSequence() ? getFlankingSequence() :"--"); -// return sb.toString(); -// } - -// public String getGermlineDBData() { -// return vcf.getPosition() + TAB -// + vcf.getPosition() + TAB -// + 1 + TAB // strand - always set to 1 ??? -// + vcf.getRef() + TAB -// + (null != controlGenotype ? controlGenotype.getDisplayString() : "") + TAB -// + (null != testGenotype ? testGenotype.getDisplayString() : "") + TAB -// + "-999\t" // quality_score -// + "-999\t" // probability -// + (normalCount + tumourCount) + TAB; // read count -// } - -// public String getNormalNucleotides() { -// return normalNucleotides; -// } -// public void setNormalNucleotides(String normalNucleotides) { -// this.normalNucleotides = normalNucleotides; -// } -// public String getTumourNucleotides() { -// return tumourNucleotides; -// } -// public void setTumourNucleotides(String tumourNucleotides) { -// this.tumourNucleotides = tumourNucleotides; -// } -// public void setTumourOABS(String tumourOABS) { -// this.tumourOABS = tumourOABS; -// } -// public void setNormalOABS(String normalOABS) { -// this.normalOABS = normalOABS; -// } -// public String getNormalOABS() { -// return control != null ? control.getObservedAllelesByStrand() : null; -// } -// public String getTumourOABS() { -// return test != null ? test.getObservedAllelesByStrand() : null; -// } -// public void setUnfilteredNormalPileup(String unfilteredNormalPileup) { -// this.unfilteredNormalPileup = unfilteredNormalPileup; -// } - public String getUnfilteredNormalPileup() { - return null != control ? control.getFailedFilterPileup() : null; - } - public int getNovelStartCount() { - return Classification.GERMLINE != classification ? tumourNovelStartCount : normalNovelStartCount; - } - public void setNormalNovelStartCount(int normalNovelStartCount) { - this.normalNovelStartCount = normalNovelStartCount; - } - public int getNormalNovelStartCount() { - return normalNovelStartCount; - } - public void setTumourNovelStartCount(int tumourNovelStartCount) { - this.tumourNovelStartCount = tumourNovelStartCount; - } - public int getTumourNovelStartCount() { - return tumourNovelStartCount; - } - public void setFlankingSequence(String flankingSequence) { - this.flankingSequence = flankingSequence; - } - public String getFlankingSequence() { - return flankingSequence; - } -// public double getProbability() { -// return probablility; -// } -// public void setProbability(double probability) { -// this.probablility = Double.valueOf(probability); -// } - - public VcfRecord getVcfRecord() { - return vcf; - } -} diff --git a/qmule/src/org/qcmg/qmule/snppicker/ExamineVerifiedSnps.java b/qmule/src/org/qcmg/qmule/snppicker/ExamineVerifiedSnps.java index 322cbd5d1..47bce2927 100644 --- a/qmule/src/org/qcmg/qmule/snppicker/ExamineVerifiedSnps.java +++ b/qmule/src/org/qcmg/qmule/snppicker/ExamineVerifiedSnps.java @@ -20,7 +20,7 @@ import org.qcmg.common.vcf.VcfRecord; import org.qcmg.common.vcf.VcfUtils; import org.qcmg.pileup.QPileupFileReader; -import org.qcmg.pileup.QSnpRecord; +import org.qcmg.common.model.QSnpRecord; import org.qcmg.pileup.VerifiedSnpFileReader; import org.qcmg.pileup.VerifiedSnpRecord; import org.qcmg.vcf.VCFFileReader; diff --git a/qmule/src/org/qcmg/qmule/snppicker/GatkUniqueSnps.java b/qmule/src/org/qcmg/qmule/snppicker/GatkUniqueSnps.java index 6758eb70e..d02f83d9b 100644 --- a/qmule/src/org/qcmg/qmule/snppicker/GatkUniqueSnps.java +++ b/qmule/src/org/qcmg/qmule/snppicker/GatkUniqueSnps.java @@ -28,7 +28,6 @@ import org.qcmg.common.model.GenotypeEnum; import org.qcmg.common.model.QSnpGATKRecord; import org.qcmg.common.util.BaseUtils; -import org.qcmg.common.util.Constants; import org.qcmg.common.util.FileUtils; import org.qcmg.common.vcf.VcfRecord; import org.qcmg.common.vcf.VcfUtils; @@ -36,7 +35,7 @@ import org.qcmg.germlinedb.GermlineDBFileReader; import org.qcmg.germlinedb.GermlineDBRecord; import org.qcmg.picard.QJumper; -import org.qcmg.pileup.QSnpRecord; +import org.qcmg.common.model.QSnpRecord; import org.qcmg.qmule.Messages; import org.qcmg.qmule.Options; import org.qcmg.qmule.Options.Ids; @@ -45,13 +44,10 @@ public class GatkUniqueSnps { -// private static final QLogger logger = QLoggerFactory.getLogger(GatkUniqueSnps.class); private static QLogger logger; private static Map tumourRecords = new HashMap(100000); private static Map normalRecords = new HashMap(100000); - -// private static Map classABRecords = new HashMap(100000); private static List qPileupRecords = new ArrayList(15000); // map to hold chromosome conversion data @@ -65,10 +61,6 @@ public class GatkUniqueSnps { private String patientId; private String somaticAnalysisId; private String germlineAnalysisId; -// private String analysisId; -// private static final String mutationIdPrefix = "APGI_1992_"; -// private static final String analysisId = "qcmg_ssm_20110524_1"; -// private static final String tumourSampleId = "ICGC-ABMP-20091203-06-TD"; private String[] cmdLineInputFiles; @@ -80,11 +72,8 @@ public class GatkUniqueSnps { private static String bamFile1; private static String bamFile1Index; -// private static String bamFile2; -// private static String bamFile2Index; private static QJumper jumper1; -// private static QJumper jumper2; public int engage() throws Exception { @@ -99,16 +88,10 @@ public int engage() throws Exception { logger.info("loaded " + tumourRecords.size() + " tumour vcf's"); bamFile1 = cmdLineInputFiles[2]; - bamFile1Index = cmdLineInputFiles[3]; -// bamFile2 = args[4]; -// bamFile2Index = args[5]; - + bamFile1Index = cmdLineInputFiles[3]; jumper1 = new QJumper(); - jumper1.setupReader(bamFile1, bamFile1Index); -// jumper2 = new QJumper(); -// jumper2.setupReader(bamFile2, bamFile2Index); - + jumper1.setupReader(bamFile1, bamFile1Index); logger.info("about to call examine"); examine(); @@ -267,39 +250,7 @@ private static QSnpRecord getQPileupRecord(QSnpGATKRecord vcfRec) { public static void getPileup(QJumper jumper, QSnpRecord record) throws Exception { final List firstSet = jumper.getRecordsAtPosition(record.getChromosome(), record.getPosition()); -// List secondSet = jumper2.getRecordsAtPosition(record.getChromosome(), record.getPosition()); - - - examinePileup(firstSet, record); - - -// char mutation = record.getMutation().charAt(record.getMutation().length() -1); -// boolean mutationFoundInNormal = false; -// int normalCoverage = 0; -// for (SAMRecord sam : firstSet ) { -// if ( ! sam.getDuplicateReadFlag()) { -// ++normalCoverage; -// -// // need to get the base at the position -// int offset = record.getPosition() - sam.getAlignmentStart(); -// if (offset < 0) throw new Exception("invalid start position!!!"); -// -// if (sam.getReadBases()[offset] == mutation) { -// mutationFoundInNormal = true; -// break; -// } -// } -// } -// -// if (mutationFoundInNormal) { -// record.addAnnotation("mutation also found in pileup of normal"); -// } -// -// record.setNormalCount(normalCoverage); -// -// if (normalCoverage < 12) -// record.addAnnotation("less than 12 reads coverage in normal"); - + examinePileup(firstSet, record); } @@ -314,19 +265,15 @@ public static void examinePileup(List sams, QSnpRecord record) throws ++normalCoverage; // need to get the base at the position -// int offset = record.getPosition() - sam.getUnclippedStart(); int offset = record.getPosition() - sam.getAlignmentStart(); if (offset < 0) throw new Exception("invalid start position!!!: "+ sam.format()); if (offset >= sam.getReadLength()) { -// throw new Exception("offset [position: " + record.getPosition() + ", read start pos(unclipped): " + sam.getUnclippedStart() + ", read end pos(unclipped): " + sam.getUnclippedEnd()+ "] is larger than read length!!!: " + sam.format()); - // set to last entry in sequence offset = sam.getReadLength() -1; } if (sam.getReadBases()[offset] == mutation) { - mutationFoundInNormal = true; -// break; + mutationFoundInNormal = true;// break; } } } @@ -335,38 +282,13 @@ public static void examinePileup(List sams, QSnpRecord record) throws VcfUtils.updateFilter(record.getVcfRecord(), VcfHeaderUtils.FILTER_MUTATION_IN_NORMAL); } -// record.setNormalCount(normalCoverage); - if (normalCoverage < 12) { VcfUtils.updateFilter(record.getVcfRecord(), VcfHeaderUtils.FILTER_COVERAGE); } } - - -// private static void getPileup(VCFRecord record) { -// -// List firstSet = jumper1.getRecordsAtPosition(record.getChromosome(), record.getPosition()); -//// List secondSet = jumper2.getRecordsAtPosition(record.getChromosome(), record.getPosition()); -// -// int normalCoverage = 0; -// for (SAMRecord sam : firstSet ) { -// if ( ! sam.getDuplicateReadFlag()) -// ++normalCoverage; -// } -// -// -//// int normalCoverage = firstSet.size(); -//// int normalCoverage = firstSet.size() + secondSet.size(); -// record.setNormalCoverage(normalCoverage); -// -// if (normalCoverage < 12) -// record.addAnnotation("less than 12 reads coverage in normal"); -// -// } - - + private static void addGermlineDBData(String germlineDBFile) throws IOException { final GermlineDBFileReader reader = new GermlineDBFileReader(new File(germlineDBFile)); diff --git a/qmule/test/org/qcmg/qmule/snppicker/GatkUniqueSnpsTest.java b/qmule/test/org/qcmg/qmule/snppicker/GatkUniqueSnpsTest.java index 7e4b342e7..c1510ddc8 100644 --- a/qmule/test/org/qcmg/qmule/snppicker/GatkUniqueSnpsTest.java +++ b/qmule/test/org/qcmg/qmule/snppicker/GatkUniqueSnpsTest.java @@ -11,7 +11,7 @@ import org.junit.Test; import org.qcmg.common.util.SnpUtils; import org.qcmg.common.vcf.header.VcfHeaderUtils; -import org.qcmg.pileup.QSnpRecord; +import org.qcmg.common.model.QSnpRecord; public class GatkUniqueSnpsTest { diff --git a/qsnp/src/org/qcmg/snp/BuildCommonSnpsVcf.java b/qsnp/src/org/qcmg/snp/BuildCommonSnpsVcf.java index 414b740ac..549315342 100644 --- a/qsnp/src/org/qcmg/snp/BuildCommonSnpsVcf.java +++ b/qsnp/src/org/qcmg/snp/BuildCommonSnpsVcf.java @@ -36,10 +36,9 @@ import org.qcmg.common.vcf.header.VcfHeader; import org.qcmg.common.vcf.header.VcfHeaderRecord; import org.qcmg.common.vcf.header.VcfHeaderUtils; -import org.qcmg.tab.TabbedFileReader; -import org.qcmg.tab.TabbedRecord; +import org.qcmg.qio.record.RecordWriter; +import org.qcmg.qio.record.StringFileReader; import org.qcmg.vcf.VCFFileReader; -import org.qcmg.vcf.VCFFileWriter; public class BuildCommonSnpsVcf { private static QLogger logger; @@ -174,7 +173,7 @@ void writeVCF(String outputFileName) throws Exception { final List orderedList = new ArrayList(snpPositions.keySet()); Collections.sort(orderedList, new ChrPositionComparator()); - try (VCFFileWriter writer = new VCFFileWriter(new File(outputFileName));) { + try (RecordWriter writer = new RecordWriter<>(new File(outputFileName));) { final VcfHeader header = getHeaderForCommonSnps(searchString, searchDirectory, additionalSearchStrings, mapOfFilesAndIds); for(final VcfHeaderRecord re : header) writer.addHeader(re.toString()); @@ -219,13 +218,13 @@ private VcfHeader getHeaderForCommonSnps(final String [] searchString, final Str private void processDccFile(File f, Integer id) throws Exception { // read in data from file. - try (TabbedFileReader reader = new TabbedFileReader(f);) { + try (StringFileReader reader = new StringFileReader(f);) { int i = 0; - for (final TabbedRecord rec : reader) { + for (final String rec : reader) { // ignore header line if (i++ == 0) continue; - final String [] params = TabTokenizer.tokenize(rec.getData()); + final String [] params = TabTokenizer.tokenize(rec); final ChrPosition cp = ChrPointPosition.valueOf(params[4], Integer.parseInt(params[5])); final String ref = params[10]; final String alt = getAltFromMutation(params, 13); // can eventually change this to the last element in the file @@ -274,13 +273,13 @@ private void processDccFile(File f, Integer id) throws Exception { private void processMafFile(File f, Integer id) throws Exception { // read in data from file. - try (TabbedFileReader reader = new TabbedFileReader(f);) { + try (StringFileReader reader = new StringFileReader(f);) { int i = 0; - for (final TabbedRecord rec : reader) { + for (final String rec : reader) { // ignore header line if (i++ == 0) continue; - final String [] params = TabTokenizer.tokenize(rec.getData(), 15); // only need data from the first 15 columns + final String [] params = TabTokenizer.tokenize(rec, 15); // only need data from the first 15 columns final ChrPosition cp = new ChrRangePosition(params[4], Integer.parseInt(params[5]), Integer.parseInt(params[6])); final String ref = params[10]; final String alt1 = params[11]; diff --git a/qsnp/src/org/qcmg/snp/MuTectPipeline.java b/qsnp/src/org/qcmg/snp/MuTectPipeline.java index 8d1da496c..be1e923d3 100644 --- a/qsnp/src/org/qcmg/snp/MuTectPipeline.java +++ b/qsnp/src/org/qcmg/snp/MuTectPipeline.java @@ -31,16 +31,15 @@ import org.qcmg.common.model.ChrPointPosition; import org.qcmg.common.model.ChrPosition; import org.qcmg.common.model.GenotypeEnum; +import org.qcmg.common.model.QSnpRecord; import org.qcmg.common.model.ReferenceNameComparator; import org.qcmg.common.util.TabTokenizer; import org.qcmg.common.vcf.VcfRecord; import org.qcmg.picard.SAMFileReaderFactory; import org.qcmg.picard.util.SAMUtils; -import org.qcmg.pileup.QSnpRecord; import org.qcmg.common.model.Classification; import org.qcmg.snp.util.IniFileUtil; -import org.qcmg.tab.TabbedFileReader; -import org.qcmg.tab.TabbedRecord; +import org.qcmg.qio.record.StringFileReader; /** */ @@ -70,9 +69,11 @@ public MuTectPipeline(final Ini iniFile, QExec qexec) throws SnpException, IOExc ingestIni(iniFile); // setup normalBam and tumourBam variables - if (null != testBams && testBams.length > 0) + if (null != testBams && testBams.length > 0) { tumourBam = testBams[0]; - else throw new SnpException("No tumour bam file specified"); + } else { + throw new SnpException("No tumour bam file specified"); + } @@ -88,76 +89,11 @@ public MuTectPipeline(final Ini iniFile, QExec qexec) throws SnpException, IOExc // add novel starts logger.info("about to get novel starts"); - addNovelStarts(); logger.info("about to get novel starts - DONE"); - - // time for post-processing -// classifyPileup(); - + // write output writeVCF(vcfFile); } - - -// @Override -// String getDccMetaData() throws Exception { -// if (null == controlBams || controlBams.length == 0 || -// StringUtils.isNullOrEmpty(controlBams[0]) -// || null == testBams || testBams.length == 0 -// || StringUtils.isNullOrEmpty(testBams[0])) return null; -// -// SAMFileHeader controlHeader = SAMFileReaderFactory.createSAMFileReader(new File(controlBams[0])).getFileHeader(); -// SAMFileHeader analysisHeader = SAMFileReaderFactory.createSAMFileReader(new File(testBams[0])).getFileHeader(); -// -// QDccMeta dccMeta = QDccMetaFactory.getDccMeta(qexec, controlHeader, analysisHeader, "MuTect"); -// -// return dccMeta.getDCCMetaDataToString(); -// } - - private void addNovelStarts() throws IOException { - -// try (SamReader reader = SAMFileReaderFactory.createSAMFileReader(new File(tumourBam))) { - -// for (Entry entry : positionRecordMap.entrySet()) { -// -// ChrPosition cp = entry.getKey(); -// QSnpRecord rec = entry.getValue(); -// List sams = new ArrayList<>(); -// -// SAMRecordIterator iter = reader.queryOverlapping(cp.getChromosome(), cp.getStartPosition(), cp.getEndPosition()); -// while (iter.hasNext()) { -// SAMRecord sam = iter.next(); -// if (SAMUtils.isSAMRecordValidForVariantCalling(sam)) sams.add(sam); -// } -// iter.close(); -// -// // now get the novel starts -// Accumulator acc = SAMUtils.getAccumulatorFromReads(sams, cp.getStartPosition()); -// -// String altString = rec.getAlt(); -// if (altString.length() > 1) { -// logger.warn("alt string: " + altString + " in MuTectPipeline.addNovelStarts"); -// } -// char alt = altString.charAt(0); -// String refString = rec.getRef(); -// if (refString.length() > 1) { -// logger.warn("ref string: " + refString + " in MuTectPipeline.addNovelStarts"); -// } -// char ref = refString.charAt(0); -// -// int nsCount = acc.getNovelStartsCountForBase(alt); -// rec.setTumourNovelStartCount(nsCount); -// -//// rec.setTumourNucleotides(acc.getPileupElementString()); -// -// // check for strand bias -// PileupElementLite pel = acc.getLargestVariant(ref); -// if (null != pel && ! pel.isFoundOnBothStrands()) { -// VcfUtils.updateFilter(rec.getVcfRecord(), SnpUtils.STRAND_BIAS_ALT); -// } -// } -// } - } /** * @@ -211,14 +147,7 @@ public static QSnpRecord getQSnpRecord(String [] mtData) { int tumourRefCount = Integer.parseInt(mtData[20]); int tumourAltCount = Integer.parseInt(mtData[21]); - QSnpRecord rec = new QSnpRecord(mtData[0], Integer.parseInt(mtData[1]), mtData[3], mtData[4]); -// rec.setRef(ref); -// rec.setAlt(alt); -// rec.setMutation(ref + Constants.MUT_DELIM + alt); -// rec.setNormalCount(normalRefCount + normalAltCount); -// rec.setTumourCount(tumourRefCount + tumourAltCount); -// rec.setNormalGenotype(GenotypeEnum.getGenotypeEnum(mtData[28].charAt(0), mtData[28].charAt(1))); - + QSnpRecord rec = new QSnpRecord(mtData[0], Integer.parseInt(mtData[1]), mtData[3], mtData[4]); if (tumourRefCount > 0 && tumourAltCount > 0) { rec.setTumourGenotype(GenotypeEnum.getGenotypeEnum(ref, alt)); } else if (tumourAltCount > 0) { @@ -229,13 +158,11 @@ public static QSnpRecord getQSnpRecord(String [] mtData) { // all on the forward strand... // division by zero String ND = null; -// String normalPileup = null; if (normalRefCount > 0) { double normalRefQuality = Double.parseDouble(mtData[32]); double aveQual = normalRefQuality / normalRefCount; ND = ref + normalRefCount + "[" + NF.format(aveQual) + "]0[0]"; -// normalPileup = "" + ref; } if (normalAltCount > 0) { @@ -247,49 +174,20 @@ public static QSnpRecord getQSnpRecord(String [] mtData) { } else { ND += ";" + alt + normalAltCount + "[" + NF.format(aveQual) + "]0[0]"; } - -// normalPileup = null == normalPileup ? "" + alt : "" + ref + alt; } -// rec.setNormalNucleotides(ND); -// rec.setNormalPileup(normalPileup); // hard-coding all to somatic rec.setClassification(Classification.SOMATIC); return rec; } - -// private QSnpRecord getQSnpRecord(QSnpGATKRecord normal, QSnpGATKRecord tumour) { -// QSnpRecord qpr = new QSnpRecord(); -// qpr.setId(++mutationId); -// -// if (null != normal) { -// qpr.setChromosome(normal.getChromosome()); -// qpr.setPosition(normal.getPosition()); -// qpr.setRef(normal.getRef()); -// qpr.setNormalGenotype(normal.getGenotypeEnum()); -// qpr.setAnnotation(normal.getAnnotation()); -// // tumour fields -// qpr.setTumourGenotype(null == tumour ? null : tumour.getGenotypeEnum()); -// qpr.setTumourCount(null == tumour ? 0 : VcfUtils.getDPFromFormatField(tumour.getGenotype())); -// -// } else if (null != tumour) { -// qpr.setChromosome(tumour.getChromosome()); -// qpr.setPosition(tumour.getPosition()); -// qpr.setRef(tumour.getRef()); -// qpr.setTumourGenotype(tumour.getGenotypeEnum()); -// qpr.setTumourCount(VcfUtils.getDPFromFormatField(tumour.getGenotype())); -// } -// -// return qpr; -// } - + private static void loadMuTectOutput(String muTectOutput, Map map) { - try (TabbedFileReader reader = new TabbedFileReader(new File(muTectOutput))) { + try (StringFileReader reader = new StringFileReader(new File(muTectOutput))) { int noOfRecords = 0; - for (TabbedRecord rec : reader) { + for (String rec : reader) { if (noOfRecords++ > 0) { // header line in mutect output doesn't have '#' - String [] params = TabTokenizer.tokenize(rec.getData()); + String [] params = TabTokenizer.tokenize(rec); map.put(ChrPointPosition.valueOf(params[0], Integer.parseInt(params[1])), params); } } @@ -313,19 +211,7 @@ protected void ingestIni(Ini ini) throws SnpException { logger.tool("**** OTHER CONFIG ****"); logger.tool("mutationIdPrefix: " + mutationIdPrefix); - } - -// @Override -// protected String getFormattedRecord(QSnpRecord record, final String ensemblChr) { -// return record.getDCCDataNSFlankingSeq(mutationIdPrefix, ensemblChr); -// } -// -// @Override -// protected String getOutputHeader(boolean isSomatic) { -// if (isSomatic) return HeaderUtil.DCC_SOMATIC_HEADER; -// else return HeaderUtil.DCC_GERMLINE_HEADER; -// } - + } /** * Class that reads SAMRecords from a Queue and after checking that they satisfy some criteria @@ -334,23 +220,17 @@ protected void ingestIni(Ini ini) throws SnpException { * */ public class Pileup implements Runnable { -// private final String bamFile; private final SamReader reader; - private final boolean isNormal; private final ConcurrentMap pileupMap; private int arraySize; private int arrayPosition; private ChrPosition cp; private Comparator chrComparator; -// private List snps; private final CountDownLatch latch; public Pileup(final String bamFile, final CountDownLatch latch, final boolean isNormal) { -// this.bamFile = bamFile; - this.isNormal = isNormal; pileupMap = isNormal ? normalPileup : tumourPileup; reader = SAMFileReaderFactory.createSAMFileReader(new File(bamFile)); -// snps = new ArrayList(positionRecordMap.keySet()); this.latch = latch; } @@ -403,32 +283,7 @@ private void advanceCPAndPosition() { cp = null; return; } - if (null != cp) { - // update QSnpRecord with our findings - Accumulator acc = pileupMap.remove(cp); - if (null != acc) { -// QSnpRecord rec = positionRecordMap.get(cp); - -// String refString = rec.getRef(); -// if (refString.length() > 1) { -// logger.warn("ref string: " + refString + " in MuTectPipeline.advanceCPAndPosition"); -// } -// char ref = refString.charAt(0); - -// PileupElementLite pel = acc.getLargestVariant(ref); -// if (isNormal) { -//// rec.setNormalNucleotides(acc.getPileupElementString()); -//// rec.setNormalCount(acc.getCoverage()); -//// rec.setNormalPileup(acc.getPileup()); -//// rec.setNormalNovelStartCount(null != pel ? pel.getNovelStartCount() : 0); -// } else { -// // tumour fields -//// rec.setTumourCount(acc.getCoverage()); -//// rec.setTumourNucleotides(acc.getPileupElementString()); -//// rec.setTumourNovelStartCount(null != pel ? pel.getNovelStartCount() : 0); -// } - } - } + cp = snps.get(arrayPosition++).getChrPosition(); } diff --git a/qsnp/src/org/qcmg/snp/PileupPipeline.java b/qsnp/src/org/qcmg/snp/PileupPipeline.java index cda920d34..f4e59bb59 100644 --- a/qsnp/src/org/qcmg/snp/PileupPipeline.java +++ b/qsnp/src/org/qcmg/snp/PileupPipeline.java @@ -21,8 +21,7 @@ import org.qcmg.common.model.ChrPosition; import org.qcmg.common.string.StringUtils; import org.qcmg.pileup.PileupFileReader; -import org.qcmg.pileup.QSnpRecord; -import org.qcmg.common.model.Classification; +import org.qcmg.common.model.QSnpRecord; import org.qcmg.snp.util.IniFileUtil; import org.qcmg.snp.util.QJumperWorker; import org.qcmg.snp.util.QJumperWorker.Mode; diff --git a/qsnp/src/org/qcmg/snp/TorrentPipeline.java b/qsnp/src/org/qcmg/snp/TorrentPipeline.java index 0451c903f..d28ca37d0 100644 --- a/qsnp/src/org/qcmg/snp/TorrentPipeline.java +++ b/qsnp/src/org/qcmg/snp/TorrentPipeline.java @@ -6,51 +6,20 @@ */ package org.qcmg.snp; -import htsjdk.samtools.SAMRecord; - import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - import org.ini4j.Ini; import org.qcmg.common.log.QLogger; import org.qcmg.common.log.QLoggerFactory; import org.qcmg.common.meta.QExec; -import org.qcmg.common.model.ChrPointPosition; -import org.qcmg.common.model.ChrPosition; -import org.qcmg.common.model.PileupElement; -import org.qcmg.common.model.Rule; -import org.qcmg.common.util.Pair; -import org.qcmg.picard.QJumper; -import org.qcmg.picard.util.PileupElementUtil; -import org.qcmg.picard.util.SAMUtils; -import org.qcmg.pileup.QSnpRecord; -import org.qcmg.snp.filters.AdjacentIndelFilter; -import org.qcmg.snp.filters.EndOfReadFilter; -import org.qcmg.snp.filters.MultipleAdjacentSnpsFilter; -import org.qcmg.snp.util.HeaderUtil; + import org.qcmg.snp.util.IniFileUtil; -import org.qcmg.snp.util.RulesUtil; + /** */ @Deprecated public final class TorrentPipeline extends Pipeline { - - //input Files -// private String pileupFile; -// private String unfilteredNormalBamFile; - - - private final Map, List>> filteredPEs = - new HashMap<>(); - - private final Map filteredInfo = new HashMap(); - + final static QLogger logger = QLoggerFactory.getLogger(TorrentPipeline.class); /** @@ -70,237 +39,13 @@ public TorrentPipeline(final Ini iniFile, QExec qexec, boolean singleSample) thr walkBams(); -// if (positionRecordMap.isEmpty()) throw new SnpException("EMPTY_PILEUP_FILE"); logger.info("Finished walking bams"); -// incorporateUnfilteredNormal(); -// -// strandBiasCorrection(); -// compoundSnps(); - - - // run torrent filter against suspected snp positions -// runTorrentFilters(normalBams, true); -// runTorrentFilters(tumourBams, false); - - // re-run initial rules -// reValidateSnpPositions(); - - // time for post-processing - // remove any previous annotations as they may no longer be valid -// for (QSnpRecord record : positionRecordMap.values()) { -// record.setAnnotation(null); -// } -// classifyPileup(); -// -// checkForMutationInNormal(); - + // write output writeVCF(vcfFile); } - - private void reValidateSnpPositions() { - -// int removedCount = 0, totalCount = 0; -// -// for (Entry, List>> entry : filteredPEs.entrySet()) { -// boolean remove = true; -// totalCount++; -// -// List normalPileupElements = entry.getValue().getLeft(); -// List tumourPileupElements = entry.getValue().getRight(); -// ChrPosition cp = entry.getKey(); -// -// // get reference -// QSnpRecord qsr = positionRecordMap.get(cp); -// String refString = qsr.getRef(); -// if (refString.length() > 1) { -// logger.warn("refString: " + refString + " at TorrentPipeline.reValidateSnpPositions"); -// } -// char ref = refString.charAt(0); -// -// // get variant count for both -// int normalVariantCount = PileupElementUtil.getLargestVariantCount(normalPileupElements, ref); -// int tumourVariantCount = PileupElementUtil.getLargestVariantCount(tumourPileupElements, ref); -// -// int normalBaseCounts = PileupElementUtil.getCoverageFromPileupList(normalPileupElements); -// int tumourlBaseCounts = PileupElementUtil.getCoverageFromPileupList(tumourPileupElements); -// // get rule for normal and tumour -// Rule normalRule = RulesUtil.getRule(controlRules, normalBaseCounts); -// Rule tumourRule = RulesUtil.getRule(testRules, tumourlBaseCounts); -// if (cp.getChromosome().equals("chr21") && cp.getStartPosition() == 46334140) { -// logger.info("normalVariantCount : " + normalVariantCount); -// logger.info("tumourVariantCount : " + tumourVariantCount); -// logger.info("normalBaseCounts : " + normalBaseCounts); -// logger.info("tumourlBaseCounts : " + tumourlBaseCounts); -// logger.info("normalRule : " + normalRule); -// logger.info("tumourRule : " + tumourRule); -// logger.info("normalPileupElements : " + PileupElementUtil.getPileupFromPileupList(normalPileupElements)); -// logger.info("tumourPileupElements : " + PileupElementUtil.getPileupFromPileupList(tumourPileupElements)); -// } -// -// // only keep record if it has enough variants -// if (isPileupRecordAKeeper(normalVariantCount, normalBaseCounts, normalRule, normalPileupElements, baseQualityPercentage) -// || isPileupRecordAKeeper(tumourVariantCount, tumourlBaseCounts, tumourRule, tumourPileupElements, baseQualityPercentage)) { -// remove = false; -// -// // if we have an entry in the filteringINfo map for this position, we have modified values for either ND or TD (or both) -// // update qsr record -// String info = filteredInfo.get(cp); -// if (null != info) { -// // do we need to update ND -// if (info.contains("ND")) { -//// qsr.setNormalNucleotides(PileupElementUtil.getPileupElementString(normalPileupElements, ref)); -// } -// if (info.contains("TD")) { -//// qsr.setTumourNucleotides(PileupElementUtil.getPileupElementString(tumourPileupElements, ref)); -// } -// } -// } -// -// if (remove) { -// // remove item from positions map -// positionRecordMap.remove(entry.getKey()); -// removedCount++; -// } -// } -// logger.info("removed: " + removedCount + ", from " + totalCount); - } - - private void runTorrentFilters(String [] bamFiles, boolean normal) throws Exception { - - QJumper qj = new QJumper(); - qj.setupReader(bamFiles); - - -// for (QSnpRecord rec : positionRecordMap.values()) { -// -// char alt = '\u0000'; -// String refString = rec.getRef(); -// if (refString.length() > 1) { -// logger.warn("refString: " + refString + " at TorrentPipeline.runTorrentFilters"); -// } -// char ref = refString.charAt(0); -// List sams = qj.getOverlappingRecordsAtPosition(rec.getChromosome(), rec.getPosition()); -// -// // get list of pileupelements from ND/TD fields -//// String pileupsString = normal ? rec.getNormalNucleotides() : rec.getTumourNucleotides(); -//// List pileups = PileupElementUtil.createPileupElementsFromString(pileupsString); -// -// -//// if (null == pileups || pileups.size() == 0) { -//// logger.info("no (empty??)" + (normal ? "ND" : "TD") + " field found for rec: " + rec.toString()); -//// continue; -//// } else if (pileups.size() == 1) { -//// char base = pileups.get(0).getBase(); -//// if (ref == base) { -//// continue; -//// } else { -//// alt = base; -//// } -//// } else { -//// // sort collection so that largest count is first -//// Collections.sort(pileups); -//// // get largest variant - set alt to this value -//// alt = PileupElementUtil.getLargestVariant(pileups, ref).getBase(); -//// -//// } -// -// MultipleAdjacentSnpsFilter multipleSnpsFilter = new MultipleAdjacentSnpsFilter(rec.getPosition()); -// AdjacentIndelFilter adjIndelFilter = new AdjacentIndelFilter(rec.getPosition()); -// EndOfReadFilter endOfReadFilter = new EndOfReadFilter(5, rec.getPosition()); -// -// List passingRecords = new ArrayList(); -// -// StringBuilder bases = new StringBuilder(); -// StringBuilder qualities = new StringBuilder(); -// int passedFilterCount = 0; -// int variantCount = 0; -// int deletionCount = 0; -// int i = 0; -// int tripleSnpCount = 0, adjIndelCount = 0, endOfReadCount = 0; -// -// for (SAMRecord sam : sams) { -// -// -// //ONLY FILTER READS THAT CARRY THE ALT ALLELE -// int readPosition = SAMUtils.getIndexInReadFromPosition(sam, rec.getPosition()); -// if (readPosition > -1) { -// byte base = sam.getReadBases()[readPosition]; -// -// // run through filters if we have the alt -// if (base == alt) { -// // go through each of the filters in turn -// if (adjIndelFilter.filterOut(sam)) { -// adjIndelCount++; -// if (rec.getChromosome().equals("chr1") && rec.getPosition() == 27101507) -// logger.info("adj indel filter fail : " + sam.getSAMString()); -// continue; -// } -// if (multipleSnpsFilter.filterOut(sam)) { -// tripleSnpCount++; -// if (rec.getChromosome().equals("chr1") && rec.getPosition() == 27101507) -// logger.info("triple snp filter fail : " + sam.getSAMString()); -// continue; -// } -// if (endOfReadFilter.filterOut(sam)) { -// endOfReadCount++; -// if (rec.getChromosome().equals("chr1") && rec.getPosition() == 27101507) -// logger.info("eor filter fail : " + sam.getSAMString()); -// continue; -// } -// } -// -// passedFilterCount++; -// passingRecords.add(sam); -// -// if (base == alt) { -// variantCount++; -// } -// // set base - use strand info to set case forward strand is upper case, reverse is lower -// bases.append(sam.getReadNegativeStrandFlag() ? Character.toLowerCase((char)base) : (char)base); -// qualities.append(htsjdk.samtools.SAMUtils.phredToFastq(sam.getBaseQualities()[readPosition])); -// } else { -// deletionCount++; -// } -// } -// ChrPosition cp = ChrPointPosition.valueOf(rec.getChromosome(), rec.getPosition()); -// -// if (adjIndelCount + tripleSnpCount + endOfReadCount > 0) { -// // add entry to filteredINfo map -// String info = filteredInfo.get(cp); -// if (null == info) { -// info = (normal ? "ND" : "TD") + (adjIndelCount > 0 ? ":" + adjIndelCount + "AI" : "") -// + (tripleSnpCount > 0 ? ":" + tripleSnpCount + "TS" : "") -// + (endOfReadCount > 0 ? ":" + endOfReadCount + "ER" : ""); -// } else { -// info += (normal ? ";ND" : ";TD") + (adjIndelCount > 0 ? ":" + adjIndelCount + "AI" : "") -// + (tripleSnpCount > 0 ? ":" + tripleSnpCount + "TS" : "") -// + (endOfReadCount > 0 ? ":" + endOfReadCount + "ER" : ""); -// } -// filteredInfo.put(cp, info); -// } -// -// if (bases.length() != qualities.length()) { -// logger.info("bases : " + bases.toString() + ", qual: " + qualities.toString()); -// } -// if (rec.getChromosome().equals("chr21") && rec.getPosition() == 46334140) { -// logger.info("bases : " + bases.toString() + ", qual: " + qualities.toString() + ", ref: " + ref + ", alt: " + alt); -// } -// -// List baseCounts = PileupElementUtil.getPileupCounts(bases.toString(), qualities.toString()); -// -// Pair, List> p = filteredPEs.get(cp); -// if (null == p) { -// p = normal ? new Pair(baseCounts, null) : new Pair(null, baseCounts); -// filteredPEs.put(cp, p); -// } else { -// p = normal ? new Pair(baseCounts, p.getRight()) : new Pair(p.getLeft(), baseCounts); -// filteredPEs.put(cp, p); -// } -// } - } @Override void ingestIni(Ini ini) throws SnpException { @@ -311,41 +56,15 @@ void ingestIni(Ini ini) throws SnpException { controlRules = IniFileUtil.getRules(ini, "control"); testRules = IniFileUtil.getRules(ini, "test"); initialTestSumOfCountsLimit = IniFileUtil.getLowestRuleValue(ini); - - - // ADDITIONAL INPUT FILES -// pileupFile = IniFileUtil.getInputFile(ini, "pileup"); - - // ADDITIONAL SETUP -// noOfControlFiles = IniFileUtil.getNumberOfFiles(ini, 'N'); -// noOfTestFiles = IniFileUtil.getNumberOfFiles(ini, 'T'); - + // INCLUDE INDELS includeIndels = true; - - // log values retrieved from ini file -// logger.tool("**** ADDITIONAL INPUT FILES ****"); -// logger.tool("pileupFile: " + pileupFile); -// logger.tool("unfilteredNormalBamFile: " + unfilteredNormalBamFile); - + logger.tool("**** OTHER CONFIG ****"); logger.tool("No of control rules: " + controlRules.size()); logger.tool("No of test rules: " + testRules.size()); logger.tool("min coverage count for initial test: " + initialTestSumOfCountsLimit); -// logger.tool("number of normal files in pileup: " + noOfControlFiles); -// logger.tool("number of tumour files in pileup: " + noOfTestFiles); logger.tool("mutationIdPrefix: " + mutationIdPrefix); } - -// @Override -// public String getOutputHeader(boolean isSomatic) { -// if (isSomatic) return HeaderUtil.DCC_SOMATIC_HEADER; -// else return HeaderUtil.DCC_GERMLINE_HEADER; -// } -// -// @Override -// public String getFormattedRecord(QSnpRecord record, final String ensemblChr) { -// return record.getDCCDataNSFlankingSeq(mutationIdPrefix, ensemblChr); -// } } diff --git a/qsnp/src/org/qcmg/snp/util/BAMPileupUtil.java b/qsnp/src/org/qcmg/snp/util/BAMPileupUtil.java index 813a5cb88..30a9cb66a 100644 --- a/qsnp/src/org/qcmg/snp/util/BAMPileupUtil.java +++ b/qsnp/src/org/qcmg/snp/util/BAMPileupUtil.java @@ -16,9 +16,10 @@ import org.qcmg.common.log.QLogger; import org.qcmg.common.log.QLoggerFactory; import org.qcmg.common.model.QSnpGATKRecord; +import org.qcmg.common.model.QSnpRecord; import org.qcmg.picard.util.PileupElementUtil; import org.qcmg.picard.util.SAMUtils; -import org.qcmg.pileup.QSnpRecord; + import org.qcmg.snp.util.QJumperWorker.Mode; public class BAMPileupUtil { @@ -61,8 +62,6 @@ public static void examinePileupVCF(List sams, QSnpGATKRecord record) public static void examinePileupSNP(final List sams, final QSnpRecord record, final Mode mode) { String pileup = "", qualities = ""; -// final char mutation = Mode.QSNP_MUTATION_IN_NORMAL == mode ? -// record.getMutation().charAt(record.getMutation().length()-1) : '\u0000'; for (final SAMRecord sam : sams ) { @@ -81,10 +80,6 @@ public static void examinePileupSNP(final List sams, final QSnpRecord if (Mode.QSNP_MUTATION_IN_NORMAL == mode) { // both chars should always be upper case at this point assert ! Character.isLowerCase(c); -// if (c == mutation) { -// VcfUtils.updateFilter(record.getVcfRecord(), SnpUtils.MUTATION_IN_UNFILTERED_NORMAL); -// return; -// } } pileup += sam.getReadNegativeStrandFlag() ? Character.toLowerCase(c) : c; @@ -133,7 +128,6 @@ public static boolean eligibleSamRecord(final SAMRecord record) { Integer sm = record.getIntegerAttribute("SM"); return ! record.getDuplicateReadFlag() && (null != sm && sm.intValue() > SM_CUTOFF) -// && tallyMDMismatches(record.getStringAttribute("MD")) < MD_CUTOFF // && ((record.getReadPairedFlag() && record.getSecondOfPairFlag() && record.getProperPairFlag()) || tallyCigarMatchMismatches(record.getCigar()) > CIGAR_CUTOFF); diff --git a/qsnp/src/org/qcmg/snp/util/QJumperWorker.java b/qsnp/src/org/qcmg/snp/util/QJumperWorker.java index 6af2298c0..1353636cc 100644 --- a/qsnp/src/org/qcmg/snp/util/QJumperWorker.java +++ b/qsnp/src/org/qcmg/snp/util/QJumperWorker.java @@ -14,7 +14,6 @@ import org.qcmg.common.log.QLoggerFactory; import org.qcmg.common.model.QSnpGATKRecord; import org.qcmg.picard.QJumper; -import org.qcmg.pileup.QSnpRecord; public class QJumperWorker implements Runnable { diff --git a/qsnp/test/org/qcmg/snp/PileupPipelineTest.java b/qsnp/test/org/qcmg/snp/PileupPipelineTest.java index 63ed7c79d..89d702ef9 100644 --- a/qsnp/test/org/qcmg/snp/PileupPipelineTest.java +++ b/qsnp/test/org/qcmg/snp/PileupPipelineTest.java @@ -6,8 +6,7 @@ import java.util.ArrayList; import java.util.List; -import junit.framework.Assert; - +import org.junit.Assert; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; @@ -15,8 +14,7 @@ import org.qcmg.common.model.PileupElement; import org.qcmg.common.model.Rule; import org.qcmg.common.vcf.VcfRecord; -import org.qcmg.tab.TabbedFileReader; -import org.qcmg.tab.TabbedRecord; +import org.qcmg.qio.record.StringFileReader; import org.qcmg.vcf.VCFFileReader; public class PileupPipelineTest { @@ -107,9 +105,9 @@ private int noOfLinesInVCFOutputFile(File vcfOutput) throws Exception { } public static String getFileHeader(File file) throws Exception { - try (TabbedFileReader reader = new TabbedFileReader(file);) { - for (final TabbedRecord vcf : reader) { - if (vcf.getData().startsWith("analysis")) return vcf.getData(); + try (StringFileReader reader = new StringFileReader(file);) { + for (final String vcf : reader) { + if (vcf.startsWith("analysis")) return vcf; } } return "no header line found"; diff --git a/qsnp/test/org/qcmg/snp/TorrentPipelineTest.java b/qsnp/test/org/qcmg/snp/TorrentPipelineTest.java index 2d92cbdd3..7547e9bcd 100644 --- a/qsnp/test/org/qcmg/snp/TorrentPipelineTest.java +++ b/qsnp/test/org/qcmg/snp/TorrentPipelineTest.java @@ -1,16 +1,7 @@ package org.qcmg.snp; -import java.io.IOException; - -import junit.framework.Assert; - -import org.junit.Test; -import org.qcmg.common.model.ChrPointPosition; -import org.qcmg.common.model.ChrPosition; -import org.qcmg.common.model.GenotypeEnum; -import org.qcmg.common.util.SnpUtils; -import org.qcmg.pileup.QSnpRecord; +@Deprecated public class TorrentPipelineTest { diff --git a/qsnp/test/org/qcmg/snp/util/BAMPileupUtilTest.java b/qsnp/test/org/qcmg/snp/util/BAMPileupUtilTest.java index e524b9500..343418b1c 100644 --- a/qsnp/test/org/qcmg/snp/util/BAMPileupUtilTest.java +++ b/qsnp/test/org/qcmg/snp/util/BAMPileupUtilTest.java @@ -1,19 +1,18 @@ package org.qcmg.snp.util; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + import java.util.ArrayList; import java.util.List; - -import junit.framework.Assert; import htsjdk.samtools.SAMRecord; - -import org.junit.Test; -import org.qcmg.common.model.GenotypeEnum; -import org.qcmg.common.model.QSnpGATKRecord; -import org.qcmg.common.util.SnpUtils; -import org.qcmg.common.vcf.VcfRecord; import org.qcmg.common.vcf.VcfUtils; -import org.qcmg.pileup.QSnpRecord; -import org.qcmg.snp.util.QJumperWorker.Mode; +import org.qcmg.common.model.QSnpRecord; +import org.qcmg.common.model.QSnpGATKRecord; public class BAMPileupUtilTest { @@ -26,7 +25,7 @@ public void testGetReadPositionStart() { record.setCigarString("15M2D26M"); int offset = BAMPileupUtil.getReadPosition(record, 38240010); - Assert.assertTrue(0 == offset); + assertTrue(0 == offset); } @Test @@ -38,7 +37,7 @@ public void testGetReadPositionEnd() { record.setCigarString("15M2D26M"); int offset = BAMPileupUtil.getReadPosition(record, 38240052); - Assert.assertTrue(40 == offset); + assertTrue(40 == offset); } @Test @@ -50,15 +49,15 @@ public void testGetReadPositionDeletion() { record.setReadBases(new byte[45]); record.setCigarString("25M5D20M"); - Assert.assertEquals(40, BAMPileupUtil.getReadPosition(record, 1334)); - Assert.assertEquals(44, BAMPileupUtil.getReadPosition(record, 1338)); + assertEquals(40, BAMPileupUtil.getReadPosition(record, 1334)); + assertEquals(44, BAMPileupUtil.getReadPosition(record, 1338)); record = new SAMRecord(null); record.setAlignmentStart(1289); record.setReadBases(new byte[45]); record.setCigarString("25M5D20M"); - Assert.assertEquals(39, BAMPileupUtil.getReadPosition(record, 1333)); + assertEquals(39, BAMPileupUtil.getReadPosition(record, 1333)); //position: 203012906, offset: 1, movingOffset: 2, record: 1909_1945_1498 99 chr1 203012896 52 2M9D48M chr1 203013070 205 CAGGAGCTCTGTGCCCATTTGGAAGTATTTCAGTGTTTTCACAGTGGGGT :><;><<=<>===<<<>=>>=<>>;:9:;;:<::;;<<=;=;>9Q;)CGS OC:Z:50M ZC:i:2 RG:Z:20110414154541403 NH:i:1 CM:i:3 NM:i:9 SM:i:86 OP:i:203012905 CQ:Z:B@?>AAA@>AA<8??B:@3??=@@@=:@8<8>A8;=?@9:)5=()*1 MQ:i:42 OQ:Z:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB=I((2:1 CS:Z:T21202232221113001300102021330021211100021112111001 @@ -67,28 +66,27 @@ record = new SAMRecord(null); record.setReadBases(new byte[50]); record.setCigarString("2M9D48M"); System.out.println("end: " + record.getAlignmentEnd()); - Assert.assertEquals(-1, BAMPileupUtil.getReadPosition(record, 203012906)); + assertEquals(-1, BAMPileupUtil.getReadPosition(record, 203012906)); record = new SAMRecord(null); record.setAlignmentStart(100); record.setReadBases(new byte[50]); record.setCigarString("50M"); -// System.out.println("match count: " + BAMPileupUtil.readLengthMatchCounter); - Assert.assertEquals(0, BAMPileupUtil.getReadPosition(record, 100)); - Assert.assertEquals(1, BAMPileupUtil.getReadPosition(record, 101)); - Assert.assertEquals(25, BAMPileupUtil.getReadPosition(record, 125)); + assertEquals(0, BAMPileupUtil.getReadPosition(record, 100)); + assertEquals(1, BAMPileupUtil.getReadPosition(record, 101)); + assertEquals(25, BAMPileupUtil.getReadPosition(record, 125)); record = new SAMRecord(null); record.setAlignmentStart(100); record.setReadBases(new byte[50]); record.setCigarString("10M20D40M"); - Assert.assertEquals(0, BAMPileupUtil.getReadPosition(record, 100)); - Assert.assertEquals(1, BAMPileupUtil.getReadPosition(record, 101)); - Assert.assertEquals(9, BAMPileupUtil.getReadPosition(record, 109)); - Assert.assertEquals(-1, BAMPileupUtil.getReadPosition(record, 110)); - Assert.assertEquals(-1, BAMPileupUtil.getReadPosition(record, 125)); - Assert.assertEquals(-1, BAMPileupUtil.getReadPosition(record, 129)); - Assert.assertEquals(10, BAMPileupUtil.getReadPosition(record, 130)); + assertEquals(0, BAMPileupUtil.getReadPosition(record, 100)); + assertEquals(1, BAMPileupUtil.getReadPosition(record, 101)); + assertEquals(9, BAMPileupUtil.getReadPosition(record, 109)); + assertEquals(-1, BAMPileupUtil.getReadPosition(record, 110)); + assertEquals(-1, BAMPileupUtil.getReadPosition(record, 125)); + assertEquals(-1, BAMPileupUtil.getReadPosition(record, 129)); + assertEquals(10, BAMPileupUtil.getReadPosition(record, 130)); } @@ -107,31 +105,31 @@ public void testExaminePileup() { BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('A', vcfRecord.getPileup().get(0).getBase()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('A', vcfRecord.getPileup().get(0).getBase()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 101)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('C', vcfRecord.getPileup().get(0).getBase()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('C', vcfRecord.getPileup().get(0).getBase()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 102)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('G', vcfRecord.getPileup().get(0).getBase()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('G', vcfRecord.getPileup().get(0).getBase()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 103)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('T', vcfRecord.getPileup().get(0).getBase()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('T', vcfRecord.getPileup().get(0).getBase()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 104)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNull(vcfRecord.getPileup()); + assertNull(vcfRecord.getPileup()); } @Test @@ -150,46 +148,46 @@ public void testExaminePileupWithDeletion() { BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('A', vcfRecord.getPileup().get(0).getBase()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('A', vcfRecord.getPileup().get(0).getBase()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 105)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNull(vcfRecord.getPileup()); + assertNull(vcfRecord.getPileup()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 114)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNull(vcfRecord.getPileup()); + assertNull(vcfRecord.getPileup()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 115)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('G', vcfRecord.getPileup().get(0).getBase()); - Assert.assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('G', vcfRecord.getPileup().get(0).getBase()); + assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 149)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('T', vcfRecord.getPileup().get(0).getBase()); - Assert.assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('T', vcfRecord.getPileup().get(0).getBase()); + assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 150)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNull(vcfRecord.getPileup()); + assertNull(vcfRecord.getPileup()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 154)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNull(vcfRecord.getPileup()); + assertNull(vcfRecord.getPileup()); vcfRecord = new QSnpGATKRecord(VcfUtils.createVcfRecord( "chr1", 155)); BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(1, vcfRecord.getPileup().size()); - Assert.assertEquals('A', vcfRecord.getPileup().get(0).getBase()); - Assert.assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(1, vcfRecord.getPileup().size()); + assertEquals('A', vcfRecord.getPileup().get(0).getBase()); + assertEquals(40, vcfRecord.getPileup().get(0).getTotalQualityScore()); } @@ -227,114 +225,29 @@ public void testExaminePileupWithRealLifeData() { BAMPileupUtil.examinePileupVCF(records, vcfRecord); - Assert.assertNotNull(vcfRecord.getPileup()); - Assert.assertEquals(2, vcfRecord.getPileup().size()); - Assert.assertEquals('G', vcfRecord.getPileup().get(0).getBase()); - Assert.assertEquals(2, vcfRecord.getPileup().get(0).getTotalCount()); - Assert.assertEquals('C', vcfRecord.getPileup().get(1).getBase()); - Assert.assertEquals(1, vcfRecord.getPileup().get(1).getTotalCount()); - Assert.assertEquals(39, vcfRecord.getPileup().get(1).getTotalQualityScore()); + assertNotNull(vcfRecord.getPileup()); + assertEquals(2, vcfRecord.getPileup().size()); + assertEquals('G', vcfRecord.getPileup().get(0).getBase()); + assertEquals(2, vcfRecord.getPileup().get(0).getTotalCount()); + assertEquals('C', vcfRecord.getPileup().get(1).getBase()); + assertEquals(1, vcfRecord.getPileup().get(1).getTotalCount()); + assertEquals(39, vcfRecord.getPileup().get(1).getTotalQualityScore()); } @Test public void testEligibleSamRecord() { SAMRecord record = new SAMRecord(null); - Assert.assertFalse(BAMPileupUtil.eligibleSamRecord(record)); + assertFalse(BAMPileupUtil.eligibleSamRecord(record)); record.setAttribute("SM", Integer.valueOf(14)); record.setCigarString("35M"); - Assert.assertFalse(BAMPileupUtil.eligibleSamRecord(record)); + assertFalse(BAMPileupUtil.eligibleSamRecord(record)); record.setAttribute("SM", Integer.valueOf(15)); - Assert.assertTrue(BAMPileupUtil.eligibleSamRecord(record)); + assertTrue(BAMPileupUtil.eligibleSamRecord(record)); record.setCigarString("33M"); - Assert.assertFalse(BAMPileupUtil.eligibleSamRecord(record)); + assertFalse(BAMPileupUtil.eligibleSamRecord(record)); record.setReadPairedFlag(true); record.setProperPairFlag(true); record.setSecondOfPairFlag(true); - Assert.assertTrue(BAMPileupUtil.eligibleSamRecord(record)); - } - -// @Test -// public void testExaminePileupSNPMutationMode() { -// SAMRecord record = new SAMRecord(null); -// record.setAlignmentStart(100); -// record.setReadBases("ACGT".getBytes()); -// record.setBaseQualityString("IIII"); -// record.setCigarString("4M"); -// List records = new ArrayList(); -// records.add(record); -// -// QSnpRecord qsnpRecord = new QSnpRecord("chr1", 100, "A"); -// qsnpRecord.setMutation("A>G"); -// Mode mode = Mode.QSNP_MUTATION_IN_NORMAL; -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// -// qsnpRecord = new QSnpRecord("chr1", 102, "A"); -// qsnpRecord.setMutation("A>G"); -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertEquals(SnpUtils.MUTATION_IN_UNFILTERED_NORMAL, qsnpRecord.getAnnotation()); -// -// qsnpRecord.setMutation("G>T"); -// qsnpRecord.getVcfRecord().setFilter(null); -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// } - -// @Test -// public void testExaminePileupSNPQSnpMode() { -// SAMRecord record = new SAMRecord(null); -// record.setAlignmentStart(100); -// record.setReadBases("ACGT".getBytes()); -// record.setBaseQualityString("IIII"); -// record.setCigarString("4M"); -// -// SAMRecord record2 = new SAMRecord(null); -// record2.setAlignmentStart(102); -// record2.setReadBases("ACGT".getBytes()); -// record2.setBaseQualityString("IIII"); -// record2.setCigarString("4M"); -// List records = new ArrayList(); -// records.add(record); -// records.add(record2); -// -// QSnpRecord qsnpRecord = new QSnpRecord("chr1", 100, "C"); -// // set either the N or T genotype -// qsnpRecord.setNormalGenotype(GenotypeEnum.AA); -// Mode mode = Mode.QSNP; -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// Assert.assertEquals(1, qsnpRecord.getTumourCount()); -// Assert.assertEquals("A1[40],0[0]", qsnpRecord.getTumourNucleotides()); -// -// qsnpRecord = new QSnpRecord("chr1", 102, "C"); -// qsnpRecord.setNormalGenotype(GenotypeEnum.AA); -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// Assert.assertEquals(2, qsnpRecord.getTumourCount()); -// Assert.assertEquals("A1[40],0[0],G1[40],0[0]", qsnpRecord.getTumourNucleotides()); -// -// qsnpRecord = new QSnpRecord("chr1", 100, "C"); -// // set either the N or T genotype -// qsnpRecord.setTumourGenotype(GenotypeEnum.AA); -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// Assert.assertEquals(1, qsnpRecord.getNormalCount()); -// Assert.assertEquals("A", qsnpRecord.getNormalPileup()); -// Assert.assertEquals("A1[40],0[0]", qsnpRecord.getNormalNucleotides()); -// -// qsnpRecord = new QSnpRecord("chr1", 102, "A"); -// -// BAMPileupUtil.examinePileupSNP(records, qsnpRecord, mode); -// Assert.assertNull(qsnpRecord.getAnnotation()); -// Assert.assertEquals(2, qsnpRecord.getNormalCount()); -// Assert.assertEquals("GA", qsnpRecord.getNormalPileup()); -// Assert.assertEquals("A1[40],0[0],G1[40],0[0]", qsnpRecord.getNormalNucleotides()); -// } - + assertTrue(BAMPileupUtil.eligibleSamRecord(record)); + } }