/* * Eoulsan development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public License version 2.1 or * later and CeCILL-C. This should be distributed with the code. * If you do not have a copy, see: * * http://www.gnu.org/licenses/lgpl-2.1.txt * http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt * * Copyright for this code is held jointly by the Genomic platform * of the Institut de Biologie de l'École normale supérieure and * the individual authors. These should be listed in @author doc * comments. * * For more information on the Eoulsan project and its aims, * or to join the Eoulsan Google group, visit the home page * at: * * http://outils.genomique.biologie.ens.fr/eoulsan * */ package fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters; import static org.junit.Assert.assertEquals; import htsjdk.samtools.SAMLineParser; import htsjdk.samtools.SAMRecord; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import fr.ens.biologie.genomique.eoulsan.bio.GenomeDescription; import fr.ens.biologie.genomique.eoulsan.bio.SAMUtils; import fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters.RemoveUnmappedReadAlignmentsFilter; /** * This class is a JUnit test class to test the class * RemoveUnmappedReadAlignmentsFilter.java. * @author Claire Wallon */ public class RemoveUnmappedReadAlignmentsFilterTest { private String recordSE1, recordSE2; private String recordPE1, recordPE2, recordPE3, recordPE4; private String recordPE5, recordPE6, recordPE7, recordPE8; private SAMRecord samRecordSE1, samRecordSE2; private SAMRecord samRecordPE1, samRecordPE2, samRecordPE3, samRecordPE4; private SAMRecord samRecordPE5, samRecordPE6, samRecordPE7, samRecordPE8; private List<SAMRecord> records; private RemoveUnmappedReadAlignmentsFilter filter; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { // recordSE1 mapped this.recordSE1 = "HWI-EAS285_0001_'':1:1:1260:18686#0/1\t16\tchr4\t129576419\t72\t76M\t*\t0\t0" + "\tGACGGATCCGAGANANTGANNTGANAAGAGGNNNNNNNNNNNNNNAATTTGAGGACCNAAGGGATGCAGATGATGC" + "\tGEGEGE:@=BB><#7#AA:##@CC#CA9A8;##############=GGGGGDCDCDD#DDCGFGDGGGGBGGGGGG" + "\tXA:i:1\tMD:Z:13T1T3C0T3A2C3T0T0T0T0G0G0T0T0T0T0G0T0G0G12C18\tNM:i:21"; // recordSE2 unmapped this.recordSE2 = "HWI-EAS285_0001_'':1:1:1259:6203#0/1\t4\t*\t0\t0\t*\t*\t0\t0" + "\tCGGCCGGACCGACCCCGTNGGGGTCCGACAANNNNNNNNNNNNNNCACANGNACGNNGCANANCCAACCCGAGCGT" + "\tGGGFGBGGGEGGGGGDD?#A=>B3BA=BD###############################################" + "\tXM:i:0"; // recordPE1 and recordPE2 paired and mapped this.recordPE1 = "HWI-1KL110:37:C0BE6ACXX:7:1101:2584:2222\t99\tchr1\t173235257\t255\t101M\t=\t173235280\t124" + "\tCTTGTATCGCTCCTCAAACTTGACCTTGGCCTCCCGCCTGGCCTTGCGCTTCAAAGCTGGGTCCCTGAACACATCCTTGTTGACAACAGTCTTGTCCAAGG" + "\tCCCFFFFFHHHHHJJJJJJJJJJJJJJJJJJJJJJJJJHIIJIJJIIIIJJJJJIIJHHHHFFFFFDEEEEDDDDDDDDDDDDDDDDDDDDDEDDDDDDDD" + "\tXA:i:0\tMD:Z:101\tNM:i:0"; this.recordPE2 = "HWI-1KL110:37:C0BE6ACXX:7:1101:2584:2222\t147\tchr1\t173235280\t255\t101M\t=\t173235257\t-124" + "\tCCTTGGCCTCCCGCCTGGCCTTGCGCTTCAAAGCTGGGTCCCTGAACACATCCTTGTTGACAACAGTCTTGTCCAAGGGGATATCCACAGAGTACCTTGTG" + "\tDDDDDDDDDDDDDDDDDDDDDDDFFHHHHHHJJJJJJJJJHDJJJJJIJIHIJJJJJIIIJJJIJJIJJJJJHJJJJJJJJJJJJJJJHHHHHDFFFFCCC" + "\tXA:i:0\tMD:Z:101\tNM:i:0"; // recordPE3 and recordPE4 paired and unmapped this.recordPE3 = "HWI-1KL110:37:C0BE6ACXX:7:1101:2740:2239 1:N:0:GCCAAT\t77\t*\t0\t0\t*\t*\t0\t0" + "\tGGTCGATGATCTTCTCTTTGACCTGAGAGATGGTGTCACAGTTGAGGACCTTAACCGGGATGGCATCGATCCCTTCATCCTGAACAATCACGCTCACGGTC" + "\tCCBFFFFFHHHHHJJJJJJJJJJJJJJJJEHIIGHHIJJJJIIIJJJIJJJJIHHHIJJJJJHHHHHFFFFDEEEEDEEDDDDDDDDDDDDDDDDDDDDDB" + "\tXM:i:0"; this.recordPE4 = "HWI-1KL110:37:C0BE6ACXX:7:1101:2740:2239 2:N:0:GCCAAT\t141\t*\t0\t0\t*\t*\t0\t0" + "\tAGAAGGCCAAGTACACCCTCAATGACACAGGCCTGCTCGGGGACGATGTTGAGTATGCGCCTCTGACCGTGAGCGTGATTGTTCAGGATGAAGGGATCGAT" + "\tCCCFFFFFHHHHHJIJJJJJJJJJJJJJJJJIJJJJIIJJJJGGIIIIHHHHHHHFFFFDDDDDDDDDDDDBDDDBDDDEDDDDEDDDDDDDDDDDDDDDB" + "\tXM:i:0"; // recordPE5 and recordPE6 paired, recordPE5 mapped and recordPE6 unmapped this.recordPE5 = "HWI-1KL110:37:C0BE6ACXX:7:1101:1617:2229\t99\tchr4\t129192614\t74\t101M\t=\t129192649\t136" + "\tCTTTTTGCCCTCCTGTGGATTCTCCCATCAGCCATTTGGTCTTACTCTTAAGGCCAGTTGAAGATGGTCCCTTACGGTTTCCCAAGTTAGGTTAGTGATGT" + "\tCCCFFFFFHHHHHJJHJIJJJIJJJJJJJJJIJJJJJJIIHIJJJJIJJJJJJJJJJIJJJJJIJJJHIJJJJHHEHDFFFEEEEDDDEDDCCDDCDEEDC" + "\tXA:i:1\tMD:Z:5C95\tNM:i:1"; this.recordPE6 = "HWI-1KL110:37:C0BE6ACXX:7:1101:1617:2229\t141\t*\t0\t0\t*\t*\t0\t0" + "\tTTGGTCTTACTCTTAAGGCCAGTTGAAGATGGTCCCTTACGGTTTCCCAAGTTAGGTTAGTGATGTGAGATGCCCTGTCCCTACCTCCTTCCCGAGCCCCG" + "\tDDDDDCDCADDDDDDDDDDDDDDEEDDDDDDDDDDDDDBDEEFFFFHHHHEHIEJJJIGJIIGGIIJIJJIIJJJJIHJHGD?JIHJJHFHHGFFFFFCCC" + "\tXA:i:2\tMD:Z:87T12A0\tNM:i:2"; // recordPE7 and recordPE8 paired, recordPE7 unmapped and recordPE8 mapped this.recordPE7 = "HWI-1KL110:37:C0BE6ACXX:7:1101:1802:2241\t77\t*\t0\t0\t*\t*\t0\t0" + "\tCCAGCCTTAGCGCCTGGTGCCTCCATCATGGCTAAAGCATGGGCCGTGGGGACACTGACGACTAGAAGGGAAGGGGCAAGGGAAATTCCAAGCAGTACATT" + "\tCCCFFFFFHHHHHJJJJFHHJJJJJJJJJJJJJJJJHIJJJJIJJJFHJJJHHHFFFFFDDDDDDDDDDDDDDDB>BDDDDDDDDDDDDEDDDDDCCCDED" + "\tXA:i:0\tMD:Z:101\tNM:i:0"; this.recordPE8 = "HWI-1KL110:37:C0BE6ACXX:7:1101:1802:2241\t147\tchr15\t74592729\t212\t101M\t=\t74592687\t-143" + "\tGCCGTGGGGACACTGACGACTAGAAGGGAAGGGGCAAGGGAAATTCCAAGCAGTACATTACAGGCAGAGAGCCATAACAGTGAGCAGGCTGAGGCTCGTTG" + "\tDDDDDDDDEDDDDDDDDEEEEFFFFFHHHHHJJJJJJJJJJJJJJJJJJHHJIIFIGIIHIJJJJJIHIJJJJJJJIJJJJJJJJJJJHHHHHFFFFFCCC" + "\tXA:i:0\tMD:Z:101\tNM:i:0"; final GenomeDescription desc = new GenomeDescription(); desc.addSequence("chr1", 197195432); desc.addSequence("chr4", 155630120); desc.addSequence("chr9", 124076172); desc.addSequence("chr11", 121843856); desc.addSequence("chr15", 103494974); SAMLineParser parser = new SAMLineParser(SAMUtils.newSAMFileHeader(desc)); this.samRecordSE1 = parser.parseLine(this.recordSE1); this.samRecordSE2 = parser.parseLine(this.recordSE2); this.samRecordPE1 = parser.parseLine(this.recordPE1); this.samRecordPE2 = parser.parseLine(this.recordPE2); this.samRecordPE3 = parser.parseLine(this.recordPE3); this.samRecordPE4 = parser.parseLine(this.recordPE4); this.samRecordPE5 = parser.parseLine(this.recordPE5); this.samRecordPE6 = parser.parseLine(this.recordPE6); this.samRecordPE7 = parser.parseLine(this.recordPE7); this.samRecordPE8 = parser.parseLine(this.recordPE8); this.records = new ArrayList<>(); this.filter = new RemoveUnmappedReadAlignmentsFilter(); } /** * Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters. * RemoveUnmappedReadAlignmentsFilter#getName()}. */ @Test public void testGetName() { assertEquals("removeunmapped", this.filter.getName()); } /** * Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters. * RemoveUnmappedReadAlignmentsFilter#getDescription()}. */ @Test public void testGetDescription() { assertEquals("Remove all the unmapped alignments", this.filter.getDescription()); } /** * Test method for {fr.ens.biologie.genomique.eoulsan.bio.alignmentsfilters. * RemoveUnmappedReadAlignmentsFilter#filterReadAlignments(java.util.List, * boolean)}. */ @Test public void testFilterReadAlignments() { List<SAMRecord> recordsVerif = new ArrayList<>(); // single-end mode this.records.add(this.samRecordSE1); this.records.add(this.samRecordSE2); recordsVerif.add(this.samRecordSE1); this.filter.filterReadAlignments(this.records); assertEquals(this.records, recordsVerif); this.records.clear(); recordsVerif.clear(); // paired-end mode this.records.add(this.samRecordPE1); this.records.add(this.samRecordPE2); this.records.add(this.samRecordPE3); this.records.add(this.samRecordPE4); this.records.add(this.samRecordPE5); this.records.add(this.samRecordPE6); this.records.add(this.samRecordPE7); this.records.add(this.samRecordPE8); recordsVerif.add(this.samRecordPE1); recordsVerif.add(this.samRecordPE2); this.filter.filterReadAlignments(this.records); assertEquals(this.records, recordsVerif); } }