generated from FNNDSC/python-chrisapp-template
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4ae90a5
commit b0dce93
Showing
1 changed file
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
#!/usr/bin/env python | ||
|
||
from pathlib import Path | ||
from argparse import ArgumentParser, Namespace, ArgumentDefaultsHelpFormatter | ||
|
||
from chris_plugin import chris_plugin, PathMapper | ||
|
||
__version__ = '1.0.0' | ||
|
||
DISPLAY_TITLE = r""" | ||
_ _ _ _ _ | ||
| | (_) | | | | (_) | ||
_ __ | |______ _ __ ___ ___ _ __ __ _ _ ___ _ __ | | ___ ___ _ __ ___ ___ __ _ | |_ _ __ __ _ _ _ __ | ||
| '_ \| |______| '_ ` _ \ / _ \| '_ \ / _` | | / __| '_ \| |/ _ \/ _ \ '_ \/ __|/ _ \/ _` | | __| '__/ _` | | '_ \ | ||
| |_) | | | | | | | | (_) | | | | (_| | | \__ \ |_) | | __/ __/ | | \__ \ __/ (_| | | |_| | | (_| | | | | | | ||
| .__/|_| |_| |_| |_|\___/|_| |_|\__,_|_| |___/ .__/|_|\___|\___|_| |_|___/\___|\__, | \__|_| \__,_|_|_| |_| | ||
| | ______ | | __/ |_____ | ||
|_| |______| |_| |___/______| | ||
""" | ||
|
||
|
||
parser = ArgumentParser(description='!!!CHANGE ME!!! An example ChRIS plugin which ' | ||
'counts the number of occurrences of a given ' | ||
'word in text files.', | ||
formatter_class=ArgumentDefaultsHelpFormatter) | ||
parser.add_argument('-w', '--word', required=True, type=str, | ||
help='word to count') | ||
parser.add_argument('-p', '--pattern', default='**/*.txt', type=str, | ||
help='input file filter glob') | ||
parser.add_argument('-V', '--version', action='version', | ||
version=f'%(prog)s {__version__}') | ||
|
||
|
||
# The main function of this *ChRIS* plugin is denoted by this ``@chris_plugin`` "decorator." | ||
# Some metadata about the plugin is specified here. There is more metadata specified in setup.py. | ||
# | ||
# documentation: https://fnndsc.github.io/chris_plugin/chris_plugin.html#chris_plugin | ||
@chris_plugin( | ||
parser=parser, | ||
title='Spleen 3D image segmentation training (MONAI)', | ||
category='', # ref. https://chrisstore.co/plugins | ||
min_memory_limit='100Mi', # supported units: Mi, Gi | ||
min_cpu_limit='1000m', # millicores, e.g. "1000m" = 1 CPU core | ||
min_gpu_limit=0 # set min_gpu_limit=1 to enable GPU | ||
) | ||
def main(options: Namespace, inputdir: Path, outputdir: Path): | ||
""" | ||
*ChRIS* plugins usually have two positional arguments: an **input directory** containing | ||
input files and an **output directory** where to write output files. Command-line arguments | ||
are passed to this main method implicitly when ``main()`` is called below without parameters. | ||
:param options: non-positional arguments parsed by the parser given to @chris_plugin | ||
:param inputdir: directory containing (read-only) input files | ||
:param outputdir: directory where to write output files | ||
""" | ||
|
||
print(DISPLAY_TITLE) | ||
|
||
# Typically it's easier to think of programs as operating on individual files | ||
# rather than directories. The helper functions provided by a ``PathMapper`` | ||
# object make it easy to discover input files and write to output files inside | ||
# the given paths. | ||
# | ||
# Refer to the documentation for more options, examples, and advanced uses e.g. | ||
# adding a progress bar and parallelism. | ||
mapper = PathMapper.file_mapper(inputdir, outputdir, glob=options.pattern, suffix='.count.txt') | ||
for input_file, output_file in mapper: | ||
# The code block below is a small and easy example of how to use a ``PathMapper``. | ||
# It is recommended that you put your functionality in a helper function, so that | ||
# it is more legible and can be unit tested. | ||
data = input_file.read_text() | ||
frequency = data.count(options.word) | ||
output_file.write_text(str(frequency)) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |