Workflow API (runtime modification of tool parameters)
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters? I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated. Thank you, Richard Park
Richard, You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison. Let me know if you need any help with this at all. Once it's done, if you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution. -Dannon On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Hi Dannon, Thanks for the pointers. I am new to developing to galaxy and any help or guidance would be much appreciated. Are there any docs to help me understand how to code/debug galaxy? And if you have any suggestions for the general process of extending the API i would be very grateful. thanks, Richard On Mon, Dec 5, 2011 at 6:32 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison.
Let me know if you need any help with this at all. Once it's done, if you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution.
-Dannon
On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Richard, We do have a very high level doc on the wiki describing the galaxy architecture in general, and api-specific documentation is under construction. http://wiki.g2.bx.psu.edu/Admin/Internals/Implementation%20Info http://wiki.g2.bx.psu.edu/Admin/API Specific to what you want to do with the API involving workflows, I would look at the two places from my previous email to see the current implementations of workflow running in both the standard interface and via the API. Thanks, and let me know if I can help! Dannon On Dec 7, 2011, at 4:49 PM, Richard Park wrote:
Hi Dannon, Thanks for the pointers. I am new to developing to galaxy and any help or guidance would be much appreciated. Are there any docs to help me understand how to code/debug galaxy? And if you have any suggestions for the general process of extending the API i would be very grateful. thanks, Richard
Richard,
You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be
Hi Dannon, Thank for the pointers from before, I have a version of galaxy that is able to change runtime parameters through the API when running a workflow. Format: param=<tool name>=<tool parameter>=<value> # example execution: (currently changing 2 parameters: 1) bowtie, suppressHeader parameter 2) Chip-seq peakcalling, aligner change python workflow_execute.py api_key http://localhost:8080/api/workflowsworkflow_galaxy_id 'Test API' '69=ld=a799d38679e985db' '70=ld=33b43b4e7093c91f' 'param=peakcalling_spp=aligner=arachne' 'param=bowtie_wrapper=suppressHeader=True' However, I was wondering if you had any pointers on how to deal w/ changing species or chromosome lengths? # example workflow: bowtie tool "tool_id": "bowtie_wrapper", "tool_state": "{\"suppressHeader\": \"\\\"False\\\"\", \"* refGenomeSource*\": \"{\\\"genomeSource\\\": \\\"indexed\\\", \\\"index\\\": \\\"*dm3*\\\", \\\"__current_case__\\\": 0}\", \"__page__\": 0,* \"chromInfo\": \"\\\"/data/home/galaxy/galaxy-dist/tool-data/shared/ucsc/chrom/dm3.len\\\*"\", \"singlePaired\": \"{\\\"sInput1\\\": null, \\\"sParams\\\": {\\\"sMismatchSeed\\\": \\\"2\\\", \\\"sUnmappedFile\\\": \\\"False\\\", \\\"sTrimH\\\": \\\"0\\\", \\\"sTrimL\\\": \\\"0\\\", \\\"sSuppressAlign\\\": \\\"1\\\", \\\"sSettingsType\\\": \\\"full\\\", \\\"sSeed\\\": \\\"-1\\\", \\\"sMismatchQual\\\": \\\"70\\\", \\\"sMaqSoapAlign\\\": \\\"-1\\\", \\\"sAlignLimit\\\": \\\"-1\\\", \\\"sTryHard\\\": \\\"noTryHard\\\", \\\"sRounding\\\": \\\"round\\\", \\\"__current_case__\\\": 1, \\\"sSkip\\\": \\\"0\\\", \\\"sBestOption\\\": {\\\"snMaxBacktracks\\\": \\\"125\\\", \\\"sBest\\\": \\\"noBest\\\", \\\"__current_case__\\\": 0}, \\\"sAllValAligns\\\": \\\"noAllValAligns\\\", \\\"sOffrate\\\": \\\"-1\\\", \\\"sSeedLen\\\": \\\"28\\\", \\\"sValAlign\\\": \\\"1\\\", \\\"sMaxFile\\\": \\\"False\\\"}, \\\"sPaired\\\": \\\"single\\\", \\\"__current_case__\\\": 0}\"}", "tool_version": "1.1.2", "type": "tool", "user_outputs": [] Is there a way to configure bowtie in galaxy to use the species automatically associated with input file? I am currently having troubles dealing w/ parameters that are defined in sub dictionaries defined in the tool state. Any general approaches would be appreciated. Thanks! Richard On Mon, Dec 5, 2011 at 6:32 PM, Dannon Baker <dannonbaker@me.com> wrote: lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison.
Let me know if you need any help with this at all. Once it's done, if
you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution.
-Dannon
On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Richard, For specifying or changing species, you may want to inspect the input via the API (api/histories/<id>/contents/<id>/) and snag the "genome_build" attribute that way. Or am I missing the issue you're running into? As an aside, I'd love to look at the runtime parameter specification changes you've made for potential inclusion. This is a feature I've wanted to add for some time. Thanks! Dannon On Apr 4, 2012, at 4:17 PM, Richard Park wrote:
Hi Dannon, Thank for the pointers from before, I have a version of galaxy that is able to change runtime parameters through the API when running a workflow.
Format: param=<tool name>=<tool parameter>=<value>
# example execution: (currently changing 2 parameters: 1) bowtie, suppressHeader parameter 2) Chip-seq peakcalling, aligner change python workflow_execute.py api_key http://localhost:8080/api/workflows workflow_galaxy_id 'Test API' '69=ld=a799d38679e985db' '70=ld=33b43b4e7093c91f' 'param=peakcalling_spp=aligner=arachne' 'param=bowtie_wrapper=suppressHeader=True'
However, I was wondering if you had any pointers on how to deal w/ changing species or chromosome lengths?
# example workflow: bowtie tool "tool_id": "bowtie_wrapper", "tool_state": "{\"suppressHeader\": \"\\\"False\\\"\", \"refGenomeSource\": \"{\\\"genomeSource\\\": \\\"indexed\\\", \\\"index\\\": \\\"dm3\\\", \\\"__current_case__\\\": 0}\", \"__page__\": 0, \"chromInfo\": \"\\\"/data/home/galaxy/galaxy-dist/tool-data/shared/ucsc/chrom/dm3.len\\\"\", \"singlePaired\": \"{\\\"sInput1\\\": null, \\\"sParams\\\": {\\\"sMismatchSeed\\\": \\\"2\\\", \\\"sUnmappedFile\\\": \\\"False\\\", \\\"sTrimH\\\": \\\"0\\\", \\\"sTrimL\\\": \\\"0\\\", \\\"sSuppressAlign\\\": \\\"1\\\", \\\"sSettingsType\\\": \\\"full\\\", \\\"sSeed\\\": \\\"-1\\\", \\\"sMismatchQual\\\": \\\"70\\\", \\\"sMaqSoapAlign\\\": \\\"-1\\\", \\\"sAlignLimit\\\": \\\"-1\\\", \\\"sTryHard\\\": \\\"noTryHard\\\", \\\"sRounding\\\": \\\"round\\\", \\\"__current_case__\\\": 1, \\\"sSkip\\\": \\\"0\\\", \\\"sBestOption\\\": {\\\"snMaxBacktracks\\\": \\\"125\\\", \\\"sBest\\\": \\\"noBest\\\", \\\"__current_case__\\\": 0}, \\\"sAllValAligns\\\": \\\"noAllValAligns\\\", \\\"sOffrate\\\": \\\"-1\\\", \\\"sSeedLen\\\": \\\"28\\\", \\\"sValAlign\\\": \\\"1\\\", \\\"sMaxFile\\\": \\\"False\\\"}, \\\"sPaired\\\": \\\"single\\\", \\\"__current_case__\\\": 0}\"}", "tool_version": "1.1.2", "type": "tool", "user_outputs": []
Is there a way to configure bowtie in galaxy to use the species automatically associated with input file? I am currently having troubles dealing w/ parameters that are defined in sub dictionaries defined in the tool state. Any general approaches would be appreciated.
Thanks! Richard
On Mon, Dec 5, 2011 at 6:32 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison.
Let me know if you need any help with this at all. Once it's done, if you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution.
-Dannon
On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Hi Dannon, Is there a guide or format you need for submitting pull requests? I'd like to contribute my API enhancements specifically for importing, creating, deleting workflows. I also had a delete library api call, but I think that was also added to the galaxy code recently. thanks, Richard On Tue, Apr 10, 2012 at 3:45 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
For specifying or changing species, you may want to inspect the input via the API (api/histories/<id>/contents/<id>/) and snag the "genome_build" attribute that way. Or am I missing the issue you're running into?
As an aside, I'd love to look at the runtime parameter specification changes you've made for potential inclusion. This is a feature I've wanted to add for some time.
Thanks!
Dannon
On Apr 4, 2012, at 4:17 PM, Richard Park wrote:
Hi Dannon, Thank for the pointers from before, I have a version of galaxy that is able to change runtime parameters through the API when running a workflow.
Format: param=<tool name>=<tool parameter>=<value>
# example execution: (currently changing 2 parameters: 1) bowtie, suppressHeader parameter 2) Chip-seq peakcalling, aligner change python workflow_execute.py api_key http://localhost:8080/api/workflows workflow_galaxy_id 'Test API' '69=ld=a799d38679e985db' '70=ld=33b43b4e7093c91f' 'param=peakcalling_spp=aligner=arachne' 'param=bowtie_wrapper=suppressHeader=True'
However, I was wondering if you had any pointers on how to deal w/ changing species or chromosome lengths?
# example workflow: bowtie tool "tool_id": "bowtie_wrapper", "tool_state": "{\"suppressHeader\": \"\\\"False\\\"\", \"refGenomeSource\": \"{\\\"genomeSource\\\": \\\"indexed\\\", \\\"index\\\": \\\"dm3\\\", \\\"__current_case__\\\": 0}\", \"__page__\": 0, \"chromInfo\": \"\\\"/data/home/galaxy/galaxy-dist/tool-data/shared/ucsc/chrom/dm3.len\\\"\", \"singlePaired\": \"{\\\"sInput1\\\": null, \\\"sParams\\\": {\\\"sMismatchSeed\\\": \\\"2\\\", \\\"sUnmappedFile\\\": \\\"False\\\", \\\"sTrimH\\\": \\\"0\\\", \\\"sTrimL\\\": \\\"0\\\", \\\"sSuppressAlign\\\": \\\"1\\\", \\\"sSettingsType\\\": \\\"full\\\", \\\"sSeed\\\": \\\"-1\\\", \\\"sMismatchQual\\\": \\\"70\\\", \\\"sMaqSoapAlign\\\": \\\"-1\\\", \\\"sAlignLimit\\\": \\\"-1\\\", \\\"sTryHard\\\": \\\"noTryHard\\\", \\\"sRounding\\\": \\\"round\\\", \\\"__current_case__\\\": 1, \\\"sSkip\\\": \\\"0\\\", \\\"sBestOption\\\": {\\\"snMaxBacktracks\\\": \\\"125\\\", \\\"sBest\\\": \\\"noBest\\\", \\\"__current_case__\\\": 0}, \\\"sAllValAligns\\\": \\\"noAllValAligns\\\", \\\"sOffrate\\\": \\\"-1\\\", \\\"sSeedLen\\\": \\\"28\\\", \\\"sValAlign\\\": \\\"1\\\", \\\"sMaxFile\\\": \\\"False\\\"}, \\\"sPaired\\\": \\\"single\\\", \\\"__current_case__\\\": 0}\"}", "tool_version": "1.1.2", "type": "tool", "user_outputs": []
Is there a way to configure bowtie in galaxy to use the species automatically associated with input file? I am currently having troubles dealing w/ parameters that are defined in sub dictionaries defined in the tool state. Any general approaches would be appreciated.
Thanks! Richard
On Mon, Dec 5, 2011 at 6:32 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison.
Let me know if you need any help with this at all. Once it's done, if you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution.
-Dannon
On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
Hi Richard, that'd be great! The easiest thing for us is a bitbucket pull request on a clean fork (with your changes applied) of galaxy-central. -Dannon On Jun 21, 2012, at 4:54 PM, Richard Park wrote:
Hi Dannon, Is there a guide or format you need for submitting pull requests? I'd like to contribute my API enhancements specifically for importing, creating, deleting workflows. I also had a delete library api call, but I think that was also added to the galaxy code recently. thanks, Richard
On Tue, Apr 10, 2012 at 3:45 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
For specifying or changing species, you may want to inspect the input via the API (api/histories/<id>/contents/<id>/) and snag the "genome_build" attribute that way. Or am I missing the issue you're running into?
As an aside, I'd love to look at the runtime parameter specification changes you've made for potential inclusion. This is a feature I've wanted to add for some time.
Thanks!
Dannon
On Apr 4, 2012, at 4:17 PM, Richard Park wrote:
Hi Dannon, Thank for the pointers from before, I have a version of galaxy that is able to change runtime parameters through the API when running a workflow.
Format: param=<tool name>=<tool parameter>=<value>
# example execution: (currently changing 2 parameters: 1) bowtie, suppressHeader parameter 2) Chip-seq peakcalling, aligner change python workflow_execute.py api_key http://localhost:8080/api/workflows workflow_galaxy_id 'Test API' '69=ld=a799d38679e985db' '70=ld=33b43b4e7093c91f' 'param=peakcalling_spp=aligner=arachne' 'param=bowtie_wrapper=suppressHeader=True'
However, I was wondering if you had any pointers on how to deal w/ changing species or chromosome lengths?
# example workflow: bowtie tool "tool_id": "bowtie_wrapper", "tool_state": "{\"suppressHeader\": \"\\\"False\\\"\", \"refGenomeSource\": \"{\\\"genomeSource\\\": \\\"indexed\\\", \\\"index\\\": \\\"dm3\\\", \\\"__current_case__\\\": 0}\", \"__page__\": 0, \"chromInfo\": \"\\\"/data/home/galaxy/galaxy-dist/tool-data/shared/ucsc/chrom/dm3.len\\\"\", \"singlePaired\": \"{\\\"sInput1\\\": null, \\\"sParams\\\": {\\\"sMismatchSeed\\\": \\\"2\\\", \\\"sUnmappedFile\\\": \\\"False\\\", \\\"sTrimH\\\": \\\"0\\\", \\\"sTrimL\\\": \\\"0\\\", \\\"sSuppressAlign\\\": \\\"1\\\", \\\"sSettingsType\\\": \\\"full\\\", \\\"sSeed\\\": \\\"-1\\\", \\\"sMismatchQual\\\": \\\"70\\\", \\\"sMaqSoapAlign\\\": \\\"-1\\\", \\\"sAlignLimit\\\": \\\"-1\\\", \\\"sTryHard\\\": \\\"noTryHard\\\", \\\"sRounding\\\": \\\"round\\\", \\\"__current_case__\\\": 1, \\\"sSkip\\\": \\\"0\\\", \\\"sBestOption\\\": {\\\"snMaxBacktracks\\\": \\\"125\\\", \\\"sBest\\\": \\\"noBest\\\", \\\"__current_case__\\\": 0}, \\\"sAllValAligns\\\": \\\"noAllValAligns\\\", \\\"sOffrate\\\": \\\"-1\\\", \\\"sSeedLen\\\": \\\"28\\\", \\\"sValAlign\\\": \\\"1\\\", \\\"sMaxFile\\\": \\\"False\\\"}, \\\"sPaired\\\": \\\"single\\\", \\\"__current_case__\\\": 0}\"}", "tool_version": "1.1.2", "type": "tool", "user_outputs": []
Is there a way to configure bowtie in galaxy to use the species automatically associated with input file? I am currently having troubles dealing w/ parameters that are defined in sub dictionaries defined in the tool state. Any general approaches would be appreciated.
Thanks! Richard
On Mon, Dec 5, 2011 at 6:32 PM, Dannon Baker <dannonbaker@me.com> wrote:
Richard,
You're correct in that currently the workflow API affords no method for runtime modification of tool parameters, other than inputs. Depending on your needs, it might be feasible to have a few static workflows that you reuse often via the workflow API. If that isn't the case, and you think it'd be likely that you'll want to, say, programmatically modify parameters at runtime based on input data heuristics, then the API does need to be extended. The first place to look at would be lib/galaxy/web/controllers/workflow.py (run() method), to see the general approach to running workflows and providing parameters in the existing infrastructure. Then, see the API version at lib/galaxy/web/api/workflows.py (create() method) for a comparison.
Let me know if you need any help with this at all. Once it's done, if you're willing, we'd certainly like to merge the changes back in and include the functionality in the base galaxy distribution.
-Dannon
On Dec 5, 2011, at 5:10 PM, Richard Park wrote:
Hello, I was wondering what would be the best way to extend Galaxy's API functionality to allow for runtime modification of tool parameters?
I have successfully been able to run workflows programmatically using the API, following the basic steps in: scripts/api/execute_workflow.py. scripts/api/example_watch_folder.py
However, it is unclear to me, what would be the best way to run workflows through API with specific parameters at various steps. Should I generate new workflows for every workflow that requires different parameters and upload this to galaxy? Or would it be better to extend the API to allow for runtime parameter configuration? If this is the case, any pointers on how to extend this would be greatly appreciated.
Thank you, Richard Park ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at:
participants (2)
-
Dannon Baker
-
Richard Park