When using bam list mode in HSP deriving VCF name from bam list instead of requiring an additional parameter.

Creating a single temporary directory per ant test run instead of a putting temp files across all runs in the same directory.
Updated various tests for above items and other small fixes.
This commit is contained in:
Khalid Shakir 2011-12-16 18:07:26 -05:00
parent e5df9e0684
commit 7486696c07
14 changed files with 187 additions and 26 deletions

View File

@ -109,7 +109,7 @@ public class RScriptExecutor {
List<File> tempFiles = new ArrayList<File>();
try {
File tempLibDir = IOUtils.tempDir("R.", ".lib");
File tempLibDir = IOUtils.tempDir("Rlib.", "");
tempFiles.add(tempLibDir);
StringBuilder expression = new StringBuilder("tempLibDir = '").append(tempLibDir).append("';");

View File

@ -79,7 +79,7 @@ public class IOUtils {
tempDirParent = FileUtils.getTempDirectory();
if (!tempDirParent.exists() && !tempDirParent.mkdirs())
throw new UserException.BadTmpDir("Could not create temp directory: " + tempDirParent);
File temp = File.createTempFile(prefix + "-", suffix, tempDirParent);
File temp = File.createTempFile(prefix, suffix, tempDirParent);
if (!temp.delete())
throw new UserException.BadTmpDir("Could not delete sub file: " + temp.getAbsolutePath());
if (!temp.mkdir())

View File

@ -3,9 +3,11 @@ package org.broadinstitute.sting;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.*;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.xmlbeans.impl.common.IOUtil;
import org.broadinstitute.sting.commandline.CommandLineUtils;
import org.broadinstitute.sting.gatk.walkers.diffengine.DiffEngine;
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
import org.broadinstitute.sting.utils.io.IOUtils;
import org.testng.Assert;
import javax.swing.*;
@ -78,8 +80,8 @@ public abstract class BaseTest {
public static final String hg19Intervals = intervalsLocation + "whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.interval_list";
public static final String hg19Chr20Intervals = intervalsLocation + "whole_exome_agilent_1.1_refseq_plus_3_boosters.Homo_sapiens_assembly19.targets.chr20.interval_list";
public static final String networkTempDir = "/broad/shptmp/" + System.getProperty("user.name") + "/";
public static final File networkTempDirFile = new File(networkTempDir);
public static final String networkTempDir;
public static final File networkTempDirFile;
public static final File testDirFile = new File("public/testdata/");
public static final String testDir = testDirFile.getAbsolutePath() + "/";
@ -99,6 +101,10 @@ public abstract class BaseTest {
// Set the Root logger to only output warnings.
logger.setLevel(Level.WARN);
networkTempDirFile = IOUtils.tempDir("temp.", ".dir", new File("/broad/shptmp/" + System.getProperty("user.name")));
networkTempDirFile.deleteOnExit();
networkTempDir = networkTempDirFile.getAbsolutePath() + "/";
// find our file sources
// if (!fileExist(hg18Reference) || !fileExist(hg19Reference) || !fileExist(b36KGReference)) {
// logger.fatal("We can't locate the reference directories. Aborting!");
@ -233,18 +239,12 @@ public abstract class BaseTest {
/**
* Creates a temp file that will be deleted on exit after tests are complete.
* @param name Prefix of the file.
* @param extension Extension to concat to the end of the file.
* @return A file in the network temporary directory starting with name, ending with extension, which will be deleted after the program exits.
* @param name Name of the file.
* @return A file in the network temporary directory with name, which will be deleted after the program exits.
*/
public static File createNetworkTempFile(String name, String extension) {
try {
FileUtils.forceMkdir(networkTempDirFile);
File file = File.createTempFile(name, extension, networkTempDirFile);
file.deleteOnExit();
return file;
} catch (IOException ex) {
throw new ReviewedStingException("Cannot create temp file: " + ex.getMessage(), ex);
}
public static File createNetworkTempFile(String name) {
File file = new File(networkTempDirFile, name);
file.deleteOnExit();
return file;
}
}

View File

@ -62,7 +62,7 @@ public class JnaSessionIntegrationTest extends BaseTest {
return;
}
File outFile = createNetworkTempFile("JnaSessionIntegrationTest-", ".out");
File outFile = createNetworkTempFile("JnaSessionIntegrationTest.out");
Session session = factory.getSession();
session.init(null);
try {

View File

@ -86,7 +86,7 @@ public class LibDrmaaIntegrationTest extends BaseTest {
@Test(dependsOnMethods = { "testDrmaa" })
public void testSubmitEcho() throws Exception {
if (implementation.indexOf("LSF") >= 0) {
if (implementation.contains("LSF")) {
System.err.println(" *********************************************************");
System.err.println(" ***********************************************************");
System.err.println(" **** ****");
@ -101,7 +101,7 @@ public class LibDrmaaIntegrationTest extends BaseTest {
Memory error = new Memory(LibDrmaa.DRMAA_ERROR_STRING_BUFFER);
int errnum;
File outFile = createNetworkTempFile("LibDrmaaIntegrationTest-", ".out");
File outFile = createNetworkTempFile("LibDrmaaIntegrationTest.out");
errnum = LibDrmaa.drmaa_init(null, error, LibDrmaa.DRMAA_ERROR_STRING_BUFFER_LEN);

View File

@ -93,7 +93,7 @@ public class LibBatIntegrationTest extends BaseTest {
@Test
public void testSubmitEcho() throws Exception {
String queue = "hour";
File outFile = createNetworkTempFile("LibBatIntegrationTest-", ".out");
File outFile = createNetworkTempFile("LibBatIntegrationTest.out");
submit req = new submit();

View File

@ -19,7 +19,7 @@ class ExampleCountLoci extends QScript {
@Output
var out: File = _
def script = {
def script() {
val countLoci = new CountLoci
countLoci.reference_sequence = referenceFile
countLoci.input_file = bamFiles

View File

@ -24,7 +24,7 @@ class ExampleCountReads extends QScript {
/**
* In script, you create and then add() functions to the pipeline.
*/
def script = {
def script() {
// Run CountReads for all bams jointly.
@ -41,6 +41,9 @@ class ExampleCountReads extends QScript {
// matches the full form of the argument, but will actually be a scala List[]
jointCountReads.input_file = bamFiles
// Set the memory limit. Also acts as a memory request on LSF and GridEngine.
jointCountReads.memoryLimit = 1
// Add the newly created function to the pipeline.
add(jointCountReads)
@ -51,6 +54,7 @@ class ExampleCountReads extends QScript {
singleCountReads.reference_sequence = referenceFile
// ':+' is the scala List append operator
singleCountReads.input_file :+= bamFile
singleCountReads.memoryLimit = 1
add(singleCountReads)
}
}

View File

@ -24,7 +24,7 @@ class ExampleCustomWalker extends QScript {
/**
* In script, you create and then add() functions to the pipeline.
*/
def script = {
def script() {
val customWalker = new CommandLineGATK {
// Set the name of your walker, for example this will be passed as -T MyCustomWalker
this.analysis_type = "MyCustomWalker"

View File

@ -33,7 +33,6 @@ class ExampleUnifiedGenotyper extends QScript {
@Argument(doc="An optional list of filter expressions.", shortName="filterExpression", required=false)
var filterExpressions: List[String] = Nil
// This trait allows us set the variables below in one place,
// and then reuse this trait on each CommandLineGATK function below.
trait UnifiedGenotyperArguments extends CommandLineGATK {

View File

@ -89,7 +89,7 @@ class QCommandLine extends CommandLineProgram with Logging {
private var shuttingDown = false
private lazy val pluginManager = {
qScriptClasses = IOUtils.tempDir("Q-Classes", "", settings.qSettings.tempDirectory)
qScriptClasses = IOUtils.tempDir("Q-Classes-", "", settings.qSettings.tempDirectory)
qScriptManager.loadScripts(scripts, qScriptClasses)
new PluginManager[QScript](classOf[QScript], List(qScriptClasses.toURI.toURL))
}

View File

@ -30,7 +30,7 @@ import org.broadinstitute.sting.BaseTest
class ExampleCountLociPipelineTest {
@Test
def testCountLoci {
def testCountLoci() {
val testOut = "count.out"
val spec = new PipelineTestSpec
spec.name = "countloci"

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
package org.broadinstitute.sting.queue.pipeline.examples
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
import org.testng.annotations.Test
import org.broadinstitute.sting.queue.pipeline.{PipelineTest, PipelineTestSpec}
import org.broadinstitute.sting.BaseTest
class ExampleCountReadsPipelineTest {
@Test
def testCountReads() {
val spec = new PipelineTestSpec
spec.name = "countreads"
spec.args = Array(
" -S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleCountReads.scala",
" -R " + BaseTest.testDir + "exampleFASTA.fasta",
" -I " + BaseTest.testDir + "exampleBAM.bam").mkString
PipelineTest.executeTest(spec)
}
}

View File

@ -0,0 +1,92 @@
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
package org.broadinstitute.sting.queue.pipeline.examples
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
import org.testng.annotations.Test
import org.broadinstitute.sting.queue.pipeline.{PipelineTest, PipelineTestSpec}
import org.broadinstitute.sting.BaseTest
class ExampleUnifiedGenotyperPipelineTest {
@Test
def testUnifiedGenotyper() {
val spec = new PipelineTestSpec
spec.name = "unifiedgenotyper"
spec.args = Array(
" -S public/scala/qscript/org/broadinstitute/sting/queue/qscripts/examples/ExampleUnifiedGenotyper.scala",
" -R " + BaseTest.testDir + "exampleFASTA.fasta",
" -I " + BaseTest.testDir + "exampleBAM.bam",
" -filter QD",
" -filterExpression 'QD < 2.0'").mkString
PipelineTest.executeTest(spec)
}
}