Package org.broad.igv.cli_plugin

Source Code of org.broad.igv.cli_plugin.CufflinksPluginTest

/*
* Copyright (c) 2007-2012 The Broad Institute, Inc.
* SOFTWARE COPYRIGHT NOTICE
* This software and its documentation are the copyright of the Broad Institute, Inc. All rights are reserved.
*
* This software is supplied without any warranty or guaranteed support whatsoever. The Broad Institute is not responsible for its use, misuse, or functionality.
*
* This software is licensed under the terms of the GNU Lesser General Public License (LGPL),
* Version 2.1 which is available at http://www.opensource.org/licenses/lgpl-2.1.php.
*/

package org.broad.igv.cli_plugin;

import org.broad.igv.data.DataTile;
import org.broad.igv.feature.BasicFeature;
import org.broad.igv.feature.Exon;
import org.broad.igv.sam.AlignmentDataManager;
import org.broad.igv.sam.AlignmentTrack;
import org.broad.igv.track.GFFFeatureSource;
import org.broad.igv.util.ResourceLocator;
import org.broad.igv.util.TestUtils;
import htsjdk.tribble.Feature;
import org.junit.BeforeClass;
import org.junit.Test;

import java.io.File;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

import static org.junit.Assert.*;

/**
* User: jacob
* Date: 2013-Feb-15
*/
public class CufflinksPluginTest extends AbstractPluginTest{

    @BeforeClass
    public static void setUpClass() throws Exception {
        pluginPath = "resources/cufflinks_plugin.xml";
        AbstractPluginTest.setUpClass();
    }

    /**
     * Load some alignment data and run cufflinks on it.
     *
     * @param chr
     * @param start
     * @param end
     * @param inFile
     * @return The transcripts.gtf file cufflinks calculated
     */
    private List<Object> basicRunCufflinks(String chr, int start, int end, File inFile) throws Exception{

        //Load some alignment data
        ResourceLocator locator = new ResourceLocator(inFile.getAbsolutePath());
        AlignmentDataManager dataManager = new AlignmentDataManager(locator, genome);
        AlignmentTrack alignmentTrack = new AlignmentTrack(locator, dataManager, genome);
        dataManager.loadAlignments(chr, start, end, null, null);

        PluginSpecReader.Command command = tool.commandList.get(0);

        List<Argument> argumentList = command.argumentList;

        LinkedHashMap<Argument, Object> arguments = new LinkedHashMap<Argument, Object>(argumentList.size());

        //Fill in the input arguments
        for(int argNum = 0; argNum < argumentList.size(); argNum++) {
            Argument argument = argumentList.get(argNum);
            String argName = argument.getName();
            Object value = argument.getDefaultValue();
            if(argName.equalsIgnoreCase("Output Dir")){
                value = TestUtils.TMP_OUTPUT_DIR;
            }else if(argName.equalsIgnoreCase("Track")){
                value = alignmentTrack;
            }

            if(argument.getType() == Argument.InputType.BOOL){
                value = Boolean.parseBoolean((String) value);
            }

            arguments.put(argument, value);
        }

        List<String> commands = Arrays.asList(toolPath);

        PluginFeatureSource featureSource = new PluginFeatureSource(commands, arguments, command.outputList.get(0), pluginPath);

        PluginDataSource geneTrackingSource = new PluginDataSource(genome, commands, arguments, command.outputList.get(1), pluginPath);

        return Arrays.asList(featureSource, geneTrackingSource);
    }

    @Test
    public void testBasic() throws Exception{

        String chr = "chr1";
        int start = 151666493 - 1;
        int end = start + 10000;
        File inFile = new File(TestUtils.LARGE_DATA_DIR, "HG00171.hg18.bam");
        List sources = basicRunCufflinks(chr, start, end, inFile);
        PluginFeatureSource featureSource = (PluginFeatureSource) sources.get(0);
        PluginDataSource geneTrackingSource = (PluginDataSource) sources.get(1);

        Iterator<Feature> features = featureSource.getFeatures(chr, start, end);
        int count = countNonNullFeatures(features);
        assertTrue("No features read" , count > 0);

        assertTrue("No longest feature", geneTrackingSource.getLongestFeature(chr) > 0);
        DataTile dataTile = geneTrackingSource.getRawData(chr, start, end);
        assertNotNull("No fpkm data returned", dataTile);
        assertFalse(dataTile.isEmpty());

    }

    private int countNonNullFeatures(Iterator<Feature> featureIterator){
        int count = 0;
        while(featureIterator.hasNext()){
            Feature feat = featureIterator.next();
            assertNotNull(feat);
            count++;
        }
        return count;
    }

    @Test
    public void testCufflinksExample_test_data() throws Exception{

        String chr = "test_chromosome";
        int start = 0;
        int end = start + 400;
        File inFile = new File(TestUtils.DATA_DIR + "sam", "cufflinks_test_data.sam");
        TestUtils.createIndex(inFile.getAbsolutePath());

        Iterator<Feature> features = ((PluginFeatureSource) basicRunCufflinks(chr, start, end, inFile).get(0)).getFeatures(chr, start, end);

        List<Feature> combinedFeatures = new GFFFeatureSource.GFFCombiner().addFeatures(features).combineFeatures();

        assertEquals("Wrong number of transcripts", 1, combinedFeatures.size());

        BasicFeature transcript = (BasicFeature) combinedFeatures.get(0);

        assertEquals(53 - 1, transcript.getStart());
        assertEquals(550, transcript.getEnd());


        assertEquals(3, transcript.getExonCount());
        String transFPKM = transcript.getAttributes().get("FPKM");
        assertTrue("Transcript FPKM invalid: " + transFPKM, transFPKM.startsWith("105"));

        int[] exonStarts = new int[]{53,351,501};
        int[] exonEnds = new int[]{250,400,550};

        for(int ii= 0; ii < 3; ii++){
            Exon exon = transcript.getExons().get(ii);
            assertEquals(exonStarts[ii] - 1, exon.getStart());
            assertEquals(exonEnds[ii], exon.getEnd());
            String exonFPKM = transcript.getAttributes().get("FPKM");
            assertTrue("Exon FPKM invalid: " + exonFPKM, exonFPKM.startsWith("105"));
            assertTrue(exonFPKM.startsWith("105"));
        }

    }
}
TOP

Related Classes of org.broad.igv.cli_plugin.CufflinksPluginTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.