Skip to content

Commit

Permalink
Solutions of exercises through part 4.
Browse files Browse the repository at this point in the history
  • Loading branch information
riccardomurri committed Jul 12, 2016
1 parent 96c2f2d commit 0c3e8f0
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 29 deletions.
2 changes: 1 addition & 1 deletion docs/programmers/tutorials/workflows/solutions/ex2a.py
Expand Up @@ -6,7 +6,7 @@
from gc3libs.cmdline import SessionBasedScript

if __name__ == '__main__':
from day1 import AScript
from ex2a import AScript
AScript().run()

class AScript(SessionBasedScript):
Expand Down
35 changes: 12 additions & 23 deletions docs/programmers/tutorials/workflows/solutions/ex2b.py
Expand Up @@ -9,33 +9,22 @@


if __name__ == '__main__':
from ex2b import AScript
AScript().run()
from ex2b import GrayscalingScript
GrayscalingScript().run()


class AScript(SessionBasedScript):
# alternatively, you can just copy+paste
# the code for `GrayscaleApp` here
from grayscale_app import GrayscaleApp


class GrayscalingScript(SessionBasedScript):
"""
Minimal workflow scaffolding.
Convert an image to grayscale.
"""
def __init__(self):
super(AScript, self).__init__(version='1.0')
super(GrayscalingScript, self).__init__(version='1.0')
def new_tasks(self, extra):
input_file = abspath(self.params.args[0])
app = GrayscaleApp(input_file)
return [app]


class GrayscaleApp(Application):
"""Convert a single image file to grayscale."""
def __init__(self, img):
inp = basename(img)
out = "gray-" + inp
Application.__init__(
self,
arguments=[
"convert", inp, "-colorspace", "gray", out],
inputs=[img],
outputs=[out],
output_dir="grayscale.d",
stdout="stdout.txt",
stderr="stderr.txt")
apps_to_run = [ GrayscaleApp(input_file) ]
return apps_to_run
15 changes: 10 additions & 5 deletions docs/programmers/tutorials/workflows/solutions/ex2c.py
Expand Up @@ -10,16 +10,16 @@


if __name__ == '__main__':
from ex2c import AScript
AScript().run()
from ex2c import GrayscaleScript
GrayscaleScript().run()


class AScript(SessionBasedScript):
class GrayscaleScript(SessionBasedScript):
"""
Minimal workflow scaffolding.
Convert images to grayscale.
"""
def __init__(self):
super(AScript, self).__init__(version='1.0')
super(GrayscaleScript, self).__init__(version='1.0')
def new_tasks(self, extra):
# since `self.params.args` is already a list of file names,
# just iterate over it to build the list of apps to run...
Expand All @@ -30,6 +30,8 @@ def new_tasks(self, extra):
return apps_to_run


# alternatively, you could use
# `from grayscale_app import GrayscaleApp` above
class GrayscaleApp(Application):
"""Convert a single image file to grayscale."""
def __init__(self, img):
Expand All @@ -41,6 +43,9 @@ def __init__(self, img):
"convert", inp, "-colorspace", "gray", out],
inputs=[img],
outputs=[out],
# need to use a different output dir per set of
# construction params, otherwise the output of one task
# will be overwritten by another task's output ...
output_dir=("gray-" + inp + ".d"),
stdout="stdout.txt",
stderr="stderr.txt",
Expand Down
56 changes: 56 additions & 0 deletions docs/programmers/tutorials/workflows/solutions/ex4a.py
@@ -0,0 +1,56 @@
#! /usr/bin/env python

import os
from os.path import abspath, basename
import sys

from gc3libs import Application
from gc3libs.cmdline import SessionBasedScript


if __name__ == '__main__':
from ex4a import ColorizeScript
ColorizeScript().run()


class ColorizeScript(SessionBasedScript):
"""
Coloriye multiple images.
"""
def __init__(self):
super(ColorizeScript, self).__init__(version='1.0')
def setup_args(self):
self.add_param('colors', nargs=3, help="Three colors")
self.add_param('images', nargs='+', help="Images to colorize")
def new_tasks(self, extra):
col1, col2, col3 = self.params.colors
apps_to_run = []
for input_file in self.params.images:
input_file = abspath(input_file)
apps_to_run.append(ColorizeApp(input_file, col1, col2, col3))
return apps_to_run


from gc3libs.quantity import GB

class ColorizeApp(Application):
"""Add colors to a grayscale image."""
def __init__(self, img, col1, col2, col3):
inp = basename(img)
out = "color-" + inp
Application.__init__(
self,
arguments=[
"convert", inp,
"(", "xc:"+col1, "xc:"+col2, "xc:"+col3, "+append", ")", "-clut",
out],
inputs=[img],
outputs=[out],
# need to use a different output dir per set of
# construction params, otherwise the output of one task
# will be overwritten by another task's output ...
output_dir="colorized-" + inp + ".d",
stdout="stdout.txt",
stderr="stderr.txt",
# required for running on the cloud, see GC3Pie issue #559
requested_memory=1*GB)
58 changes: 58 additions & 0 deletions docs/programmers/tutorials/workflows/solutions/ex4b.py
@@ -0,0 +1,58 @@
#! /usr/bin/env python

import os
from os.path import abspath, basename
import sys

from gc3libs import Application
from gc3libs.cmdline import SessionBasedScript


if __name__ == '__main__':
from ex4b import TopBlastScript
TopBlastScript().run()


class TopBlastScript(SessionBasedScript):
"""
Run BLAST on pairs of FAA files.
"""
def __init__(self):
super(TopBlastScript, self).__init__(version='1.0')
def setup_args(self):
self.add_param('new_faa', help="Query FAA")
self.add_param('known_faa', nargs='+',
help="Samples to compare to the query")
def setup_options(self):
self.add_param('--e-value', '-e',
type=float, help="Expectation value")
self.add_param('--output-format', '-o', dest='output_fmt',
type=int, help="Output format, int from 0 to 9")
def new_tasks(self, extra):
apps_to_run = []
for in_file2 in self.params.known_faa:
in_file2 = abspath(in_file2)
apps_to_run.append(BlastApp(self.params.new_faa, in_file2,
self.params.e_value, self.params.output_fmt))
return apps_to_run


from gc3libs.quantity import GB

class BlastApp(Application):
"""Run BLAST on two files."""
def __init__(self, input1, input2, e_value, output_fmt):
inp1 = basename(input1)
inp2 = basename(input2)
Application.__init__(
self,
# NOTE: does not work as written! BLAST+ is required
# to compare two FASTA files
arguments=["blastpgp", "-i", inp1, "-d", inp2,
"-e", e_value, "-m", output_fmt, "-o", "output.txt"],
inputs=[input1, input2],
outputs=["output.txt"],
output_dir=("blast-" + inp1 + "-" + inp2 + ".d"),
stdout="stdout.txt",
stderr="stderr.txt",
requested_memory=1*GB)

0 comments on commit 0c3e8f0

Please sign in to comment.