From 7b7a4876dd7cf2021dda457047653c87a9e85fa0 Mon Sep 17 00:00:00 2001 From: tcarver <tjc> Date: Tue, 11 Mar 2014 16:39:38 +0000 Subject: [PATCH] tests for read count and rpkm calculations --- .../components/alignment/MappedReadsTest.java | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 test/uk/ac/sanger/artemis/components/alignment/MappedReadsTest.java diff --git a/test/uk/ac/sanger/artemis/components/alignment/MappedReadsTest.java b/test/uk/ac/sanger/artemis/components/alignment/MappedReadsTest.java new file mode 100644 index 000000000..976053479 --- /dev/null +++ b/test/uk/ac/sanger/artemis/components/alignment/MappedReadsTest.java @@ -0,0 +1,143 @@ +/* + * This file is part of Artemis + * + * Copyright (C) 2014 Genome Research Limited + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ +package uk.ac.sanger.artemis.components.alignment; + +import static org.junit.Assert.assertTrue; + +import java.awt.GraphicsEnvironment; +import java.net.URL; +import java.util.Hashtable; +import java.util.List; + +import javax.swing.JFrame; + +import junit.framework.Assert; +import uk.ac.sanger.artemis.io.Utils; +import org.junit.BeforeClass; +import org.junit.Test; + +import uk.ac.sanger.artemis.EntryGroup; +import uk.ac.sanger.artemis.Feature; +import uk.ac.sanger.artemis.FeatureVector; +import uk.ac.sanger.artemis.components.EntryEdit; +import uk.ac.sanger.artemis.components.alignment.BamUtils; +import uk.ac.sanger.artemis.components.alignment.BamView; +import uk.ac.sanger.artemis.components.alignment.MappedReads; +import uk.ac.sanger.artemis.components.alignment.ReadCount; + +public class MappedReadsTest +{ + private static BamView bv; + private static FeatureVector fv; + + @BeforeClass + public static void setUp() + { + // ignore if in headless mode with no x11 + if(GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadless()) + return; + URL entryFile = MappedReadsTest.class.getResource("/data/MAL_8h.bam"); + System.setProperty("bam", entryFile.getFile()); + final EntryGroup egrp = Utils.getEntryGroup("/data/MAL1.embl.gz"); + final EntryEdit ee = new EntryEdit(egrp); + ee.setVisible(true); + + while( (bv = ee.getJamView()) == null) + { + // wait for BamView to be constructed + try { + Thread.sleep(100); + } catch(Exception e){}; + } + + // get a gene feature + fv = new FeatureVector(); + final FeatureVector features = egrp.getAllFeatures(); + for(int i=0; i<features.size(); i++) + { + Feature f = features.elementAt(i); + if(f.getSystematicName().equals("PFA0110w")) + fv.add(f); + } + } + + @Test + /** + * Test the read count for a gene + */ + public void readCounts() + { + // ignore if in headless mode with no x11 + if(GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadless()) + return; + + final Hashtable<String, List<ReadCount>> featureReadCount = + BamUtils.calculateMappedReads(bv, fv, false, true, false, null, null); + final List<ReadCount> cnts = featureReadCount.get("PFA0110w"); + + ReadCount c = cnts.get(0); + assertTrue(2153.f == c.senseCnt); + assertTrue(1443.f == c.antiCnt); + } + + @Test + /** + * Read count for a gene excluding the intron + */ + public void readCountsExcludeIntron() + { + // ignore if in headless mode with no x11 + if(GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadless()) + return; + + final Hashtable<String, List<ReadCount>> featureReadCount = + BamUtils.calculateMappedReads(bv, fv, false, false, false, null, null); + final List<ReadCount> cnts = featureReadCount.get("PFA0110w"); + + ReadCount c = cnts.get(0); + assertTrue(2152.f == c.senseCnt); + assertTrue(1442.f == c.antiCnt); + } + + @Test + /** + * Tes the read count for a gene not including those in the intron + */ + public void rpkm() + { + // ignore if in headless mode with no x11 + if(GraphicsEnvironment.getLocalGraphicsEnvironment().isHeadless()) + return; + + String refName = (String) bv.getCombo().getSelectedItem(); + int thisLength = bv.getSeqLengths().get(refName); + int mappedReads[] = BamUtils.calc(bv, refName, thisLength, + false, null); + + Hashtable<String, List<ReadCount>> featureReadCount = + BamUtils.calculateMappedReads(bv, fv, false, true, false, mappedReads, null); + final List<ReadCount> cnts = featureReadCount.get("PFA0110w"); + + ReadCount c = cnts.get(0); + assertTrue(183514.266f == c.senseCnt); + assertTrue(122996.328f == c.antiCnt); + } +} -- GitLab