Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mirrors
biopet.biopet
Commits
f54fc743
Commit
f54fc743
authored
Jun 23, 2014
by
Peter van 't Hof
Browse files
Also a class for JavaCommandLineTools
parent
b9325173
Changes
3
Hide whitespace changes
Inline
Side-by-side
biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunction.scala
View file @
f54fc743
package
nl.lumc.sasc.biopet.core
import
java.io.File
import
org.broadinstitute.sting.queue.QException
import
org.broadinstitute.sting.queue.function.CommandLineFunction
import
org.broadinstitute.sting.commandline._
import
scala.sys.process._
import
scala.util.matching.Regex
import
nl.lumc.sasc.biopet.core.config._
abstract
class
BiopetCommandLineFunction
extends
CommandLineFunction
with
Configurable
{
analysisName
=
getClass
.
getSimpleName
@Input
(
doc
=
"deps"
,
required
=
false
)
var
deps
:
List
[
File
]
=
Nil
@Argument
(
doc
=
"Threads"
,
required
=
false
)
var
threads
=
0
val
defaultThreads
=
1
@Argument
(
doc
=
"Vmem"
,
required
=
false
)
var
vmem
:
String
=
_
val
defaultVmem
:
String
=
""
@Argument
(
doc
=
"Executeble"
)
var
executeble
:
String
=
_
protected
def
beforeCmd
{
}
protected
def
afterGraph
{
}
override
def
freezeFieldValues
()
{
checkExecuteble
afterGraph
jobOutputFile
=
new
File
(
firstOutput
.
getParent
+
"/."
+
firstOutput
.
getName
+
"."
+
analysisName
+
".out"
)
super
.
freezeFieldValues
()
}
protected
def
checkExecuteble
{
try
if
(
executeble
!=
null
)
{
val
buffer
=
new
StringBuffer
()
val
cmd
=
Seq
(
"which"
,
executeble
)
val
process
=
Process
(
cmd
).
run
(
ProcessLogger
(
buffer
.
append
(
_
)))
if
(
process
.
exitValue
==
0
)
{
executeble
=
buffer
.
toString
val
file
=
new
File
(
executeble
)
executeble
=
file
.
getCanonicalPath
}
else
{
logger
.
error
(
"executeble: '"
+
executeble
+
"' not found, please check config"
)
throw
new
QException
(
"executeble: '"
+
executeble
+
"' not found, please check config"
)
}
}
catch
{
case
ioe
:
java.io.IOException
=>
logger
.
warn
(
"Could not use 'which', check on executeble skipped: "
+
ioe
)
}
}
final
protected
def
preCmdInternal
{
checkExecuteble
//for (input <- this.inputs) if (!input.exists) throw new IllegalStateException("Input: " + input + " for " + analysisName + " is missing")
//logger.debug("Config for " + analysisName + ": " + localConfig)
beforeCmd
addJobReportBinding
(
"version"
,
getVersion
)
if
(
threads
==
0
)
threads
=
getThreads
(
defaultThreads
)
if
(
threads
>
1
)
nCoresRequest
=
Option
(
threads
)
addJobReportBinding
(
"cores"
,
if
(
nCoresRequest
.
get
.
toInt
>
0
)
nCoresRequest
.
get
.
toInt
else
1
)
if
(
vmem
==
null
)
{
if
(
configContains
(
"vmem"
))
vmem
=
config
(
"vmem"
)
else
if
(!
defaultVmem
.
isEmpty
)
vmem
=
defaultVmem
}
if
(
vmem
!=
null
)
jobResourceRequests
:+=
"h_vmem="
+
vmem
jobName
=
this
.
analysisName
+
":"
+
firstOutput
.
getName
}
abstract
class
BiopetCommandLineFunction
extends
BiopetCommandLineFunctionTrait
{
protected
def
cmdLine
:
String
final
def
commandLine
:
String
=
{
preCmdInternal
val
cmd
=
cmdLine
addJobReportBinding
(
"command"
,
cmd
)
cmd
}
protected
var
versionCommand
:
String
=
_
protected
val
versionRegex
:
Regex
=
null
def
getVersion
:
String
=
{
if
(
versionCommand
==
null
||
versionRegex
==
null
)
return
"N/A"
val
buffer
=
new
StringBuffer
()
val
process
=
Process
(
versionCommand
).
run
(
ProcessLogger
(
buffer
append
_
))
if
(
process
.
exitValue
!=
0
)
{
logger
.
warn
(
"Version command: '"
+
versionCommand
+
"' give exit code "
+
process
.
exitValue
+
", version not found"
)
return
"N/A"
}
val
lines
=
versionCommand
lines_!
ProcessLogger
(
buffer
append
_
)
for
(
line
<-
lines
)
{
line
match
{
case
versionRegex
(
m
)
=>
return
m
case
_
=>
}
}
logger
.
warn
(
"Version command: '"
+
versionCommand
+
"' give a exit code 0 but no version was found, executeble oke?"
)
return
"N/A"
}
def
getThreads
(
default
:
Int
)
:
Int
=
{
val
maxThreads
:
Int
=
config
(
"maxthreads"
,
8
)
val
threads
:
Int
=
config
(
"threads"
,
default
)
if
(
maxThreads
>
threads
)
return
threads
else
return
maxThreads
}
def
getThreads
(
default
:
Int
,
module
:
String
)
:
Int
=
{
val
maxThreads
:
Int
=
config
(
"maxthreads"
,
8
,
module
)
val
threads
:
Int
=
config
(
"threads"
,
default
,
module
)
if
(
maxThreads
>
threads
)
return
threads
else
return
maxThreads
return
cmd
}
}
biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunctionTrait.scala
0 → 100644
View file @
f54fc743
package
nl.lumc.sasc.biopet.core
import
java.io.File
import
nl.lumc.sasc.biopet.core.config._
import
org.broadinstitute.sting.queue.QException
import
org.broadinstitute.sting.queue.function.CommandLineFunction
import
org.broadinstitute.sting.commandline._
import
scala.sys.process._
import
scala.util.matching.Regex
trait
BiopetCommandLineFunctionTrait
extends
CommandLineFunction
with
Configurable
{
analysisName
=
getClass
.
getSimpleName
@Input
(
doc
=
"deps"
,
required
=
false
)
var
deps
:
List
[
File
]
=
Nil
@Argument
(
doc
=
"Threads"
,
required
=
false
)
var
threads
=
0
val
defaultThreads
=
1
@Argument
(
doc
=
"Vmem"
,
required
=
false
)
var
vmem
:
String
=
_
val
defaultVmem
:
String
=
""
@Argument
(
doc
=
"Executeble"
)
var
executeble
:
String
=
_
protected
def
beforeCmd
{
}
protected
def
afterGraph
{
}
override
def
freezeFieldValues
()
{
checkExecuteble
afterGraph
jobOutputFile
=
new
File
(
firstOutput
.
getParent
+
"/."
+
firstOutput
.
getName
+
"."
+
analysisName
+
".out"
)
super
.
freezeFieldValues
()
}
protected
def
checkExecuteble
{
try
if
(
executeble
!=
null
)
{
val
buffer
=
new
StringBuffer
()
val
cmd
=
Seq
(
"which"
,
executeble
)
val
process
=
Process
(
cmd
).
run
(
ProcessLogger
(
buffer
.
append
(
_
)))
if
(
process
.
exitValue
==
0
)
{
executeble
=
buffer
.
toString
val
file
=
new
File
(
executeble
)
executeble
=
file
.
getCanonicalPath
}
else
{
logger
.
error
(
"executeble: '"
+
executeble
+
"' not found, please check config"
)
throw
new
QException
(
"executeble: '"
+
executeble
+
"' not found, please check config"
)
}
}
catch
{
case
ioe
:
java.io.IOException
=>
logger
.
warn
(
"Could not use 'which', check on executeble skipped: "
+
ioe
)
}
}
final
protected
def
preCmdInternal
{
checkExecuteble
//for (input <- this.inputs) if (!input.exists) throw new IllegalStateException("Input: " + input + " for " + analysisName + " is missing")
//logger.debug("Config for " + analysisName + ": " + localConfig)
beforeCmd
addJobReportBinding
(
"version"
,
getVersion
)
if
(
threads
==
0
)
threads
=
getThreads
(
defaultThreads
)
if
(
threads
>
1
)
nCoresRequest
=
Option
(
threads
)
addJobReportBinding
(
"cores"
,
if
(
nCoresRequest
.
get
.
toInt
>
0
)
nCoresRequest
.
get
.
toInt
else
1
)
if
(
vmem
==
null
)
{
if
(
configContains
(
"vmem"
))
vmem
=
config
(
"vmem"
)
else
if
(!
defaultVmem
.
isEmpty
)
vmem
=
defaultVmem
}
if
(
vmem
!=
null
)
jobResourceRequests
:+=
"h_vmem="
+
vmem
jobName
=
this
.
analysisName
+
":"
+
firstOutput
.
getName
}
protected
var
versionCommand
:
String
=
_
protected
val
versionRegex
:
Regex
=
null
def
getVersion
:
String
=
{
if
(
versionCommand
==
null
||
versionRegex
==
null
)
return
"N/A"
val
buffer
=
new
StringBuffer
()
val
process
=
Process
(
versionCommand
).
run
(
ProcessLogger
(
buffer
append
_
))
if
(
process
.
exitValue
!=
0
)
{
logger
.
warn
(
"Version command: '"
+
versionCommand
+
"' give exit code "
+
process
.
exitValue
+
", version not found"
)
return
"N/A"
}
val
lines
=
versionCommand
lines_!
ProcessLogger
(
buffer
append
_
)
for
(
line
<-
lines
)
{
line
match
{
case
versionRegex
(
m
)
=>
return
m
case
_
=>
}
}
logger
.
warn
(
"Version command: '"
+
versionCommand
+
"' give a exit code 0 but no version was found, executeble oke?"
)
return
"N/A"
}
def
getThreads
(
default
:
Int
)
:
Int
=
{
val
maxThreads
:
Int
=
config
(
"maxthreads"
,
8
)
val
threads
:
Int
=
config
(
"threads"
,
default
)
if
(
maxThreads
>
threads
)
return
threads
else
return
maxThreads
}
def
getThreads
(
default
:
Int
,
module
:
String
)
:
Int
=
{
val
maxThreads
:
Int
=
config
(
"maxthreads"
,
8
,
module
)
val
threads
:
Int
=
config
(
"threads"
,
default
,
module
)
if
(
maxThreads
>
threads
)
return
threads
else
return
maxThreads
}
}
biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetJavaCommandLineFunction.scala
0 → 100644
View file @
f54fc743
package
nl.lumc.sasc.biopet.core
import
org.broadinstitute.sting.queue.function.JavaCommandLineFunction
abstract
class
BiopetJavaCommandLineFunction
extends
JavaCommandLineFunction
with
BiopetCommandLineFunctionTrait
{
executeble
=
"java"
override
def
commandLine
:
String
=
{
preCmdInternal
val
cmd
=
super
.
commandLine
val
finalCmd
=
executeble
+
cmd
.
substring
(
cmd
.
indexOf
(
" "
))
addJobReportBinding
(
"command"
,
cmd
)
return
cmd
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment