# Asimov
Asimov is a workflow management and automation platform for scientific analyses.
[Documentation](https://asimov.docs.ligo.org/asimov) · [Releases](https://git.ligo.org/asimov/asimov/-/releases) · [Issue Tracker](https://git.ligo.org/asimov/asimov/-/issues)
[![Anaconda-Server Badge](https://anaconda.org/conda-forge/ligo-asimov/badges/version.svg)](https://anaconda.org/conda-forge/ligo-asimov)
[![Anaconda-Server Badge](https://anaconda.org/conda-forge/ligo-asimov/badges/installer/conda.svg)](https://conda.anaconda.org/conda-forge)
[![coverage report](https://git.ligo.org/asimov/asimov/badges/infrastructure-updates/coverage.svg)](https://git.ligo.org/asimov/asimov/-/commits/infrastructure-updates)
Asimov was developed to manage and automate the parameter estimation analyses used by the LIGO, Virgo, and KAGRA collaborations to analyse gravitational wave signals, but it aims to provide tools which can be used for other workflows.
Asimov has been used to organise and run the major catalogue analyses from the third observing run, O3, but it's designed to be flexible enough to allow new pipelines and analyses to be added to the framework.
## Branch notes
These notes relate to in-development features on this branch, and what's described here is only expected to be relevant during development.
More generally useful documentation will move to the main documentation before moving to production.
### Starting the logging server
Run in ``asimov`` directory:
```
export FLASK_APP=server
flask run
```
## Features
### Job monitoring and management
Asimov is able to interact with high throughput job management tools, and can submit jobs to clusters, monitor them for problems, and initiate post-processing tasks.
### Uniform pipeline interface
Asimov provides an API layer which allows a single configuration to be deployed to numerous different analysis pipelines.
Current gravitational wave pipelines which are supported are ``lalinference``, ``bayeswave``, ``RIFT``, and ``bilby``.
### Centralised configuration
Asimov records all ongoing, completed, and scheduled analyses, allowing jobs, configurations, and results to be found easily.
### Reporting overview
Asimov can provide both machine-readible and human-friendly reports of all jobs it is monitoring, while collating relevant log files and outputs.
### Results management
Your results are important, and Asimov provides special tools to help manage the outputs of analyses as well as ensuring their veracity.
## Do I need Asimov?
Asimov makes setting-up and running parameter estimation jobs easier.
It can generate configuration files for several parameter estimation pipelines, and handle submitting these to a cluster.
Whether you're setting-up a preliminary analysis for a single gravitational wave event, or analysing hundreds of events for a catalog, Asimov can help.
## Installing Asimov
Asimov is written in Python, and is available on ``pypi``.
It can be installed by running
```
$ pip install asimov
```
It is also available on conda, and can be installed by running
```
$ conda install -c conda-forge ligo-asimov
```
Asimov also requires that you have `git` installed on your machine, and that you've set it up by running:
```
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"
```
## Get started
Asimov supports a variety of different ways of running, but the simplest way, running a workflow on a local machine, can be set up with a single command.
We start by setting up a project, which is a directory which keeps all of the analyses and the required metadata together.
A project can include just a single event or a whole selection of events, for example if you're producing a catalogue.
First create a directory to store your project:
```
$ mkdir my-new-project
$ cd my-new-project
```
and then get asimov to set things up
```
$ asimov init "Test project"
```
where you can replace `"Test project"` with the name you want to give your project.
A project will be set-up in your current working directory.
In order to start setting up analyses we next need to download some default settings.
An analysis is a pipeline run, and asimov supports `bayeswave`, `bilby` in the default installation.
We'll download the default configurations for jobs which are going to be run on the LIGO data grid.
We do this using the `asimov apply` command, which pulls-in data from a file either locally or online.
```
$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe.yaml
```
and the load default priors the same way:
```
$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe-priors.yaml
```
Now you can add an existing event, by downloading the event data settings using the `asimov apply` function, for example, to add GW150914 to the project you can run
```
$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/events/gwtc-2-1/GW150914_095045.yaml
```
This downloads the settings which were used for analysing GW150914 for the GWTC-2.1 catalogue paper, and stores them in the ledger file in the project (`.asimov/ledger.yml`).
Many analyses can be run on a single event (these are called "productions" in asimov parlence).
We can add some pre-configured analyses by downloading some analysis configuration settings.
```
$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/analyses/production-default.yaml -e GW150914_095045
```
Note that if you omit the `-e` argument asimov will ask which event the analyses should be applied to.
You can now build and submit your jobs to the cluster.
First use `asimov manage build` to create the configuration files for each analysis:
```
$ asimov manage build
```
These will be added to the git repositories in the `checkouts` directory inside the project directory.
You then submit the jobs to the cluster by running
```
$ asimov manage submit
```
It will normally take a long time for a parameter estimation job to finish, but you can get asimov to check up on it by running
```
$ asimov monitor
```
If the job is finished `asimov` will start post-processing using `PESummary`, and if it's fallen over it will attempt to fix the problem and resubmit it to the cluster.
If the post-processing has finished it will move the results to a read-only directory.
You can also set the asimov monitor to automatically check the status of the job every 15 minutes by running
```
$ asimov start
```
which will automatically start any post-processing, and start any jobs once their dependencies are met.
You can stop this automatic monitoring process any time by running
```
$ asimov stop
```
For a full description of the workflow management process see the documentation.
## I want to help develop new features, or add a new pipeline
Great! We're always looking for help with developing asimov!
Please take a look at our [contributors' guide](CONTRIBUTING.rst) to get started!
## Roadmap
### Gravitic pipelines
While Asimov already supports a large number of pre-existing pipelines, and provides a straightforward interface for adding new pipelines, we also intend to support pipelines constructed using [gravitic](https://github.com/transientlunatic/gravitic), allowing experimental tools to be used without constructing an entire new pipeline, while also allowing asimov to manage the training of machine learning algorithms.
### Workflow replication, extension and duplication
Asimov will allow an existing workflow to be duplicated, in a similar way to a ``git clone``, and then extended, with new jobs gaining access to the completed jobs in the workflow.
It will also allow entire workflows to be re-run, providing a straightforward way to replicate results, or make minor modifications.
## Authors
Asimov is made by the LIGO, Virgo, and KAGRA collaborations.
The primary maintainer of the project is Daniel Williams.
Its development is supported by the Science and Technology Facilities Council.
Raw data
{
"_id": null,
"home_page": "https://git.ligo.org/asimov/asimov",
"name": "asimov",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "pe, ligo, asimov",
"author": "Daniel Williams",
"author_email": "daniel.williams@ligo.org",
"download_url": null,
"platform": null,
"description": "# Asimov\n\nAsimov is a workflow management and automation platform for scientific analyses.\n\n[Documentation](https://asimov.docs.ligo.org/asimov) \u00b7 [Releases](https://git.ligo.org/asimov/asimov/-/releases) \u00b7 [Issue Tracker](https://git.ligo.org/asimov/asimov/-/issues)\n\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/ligo-asimov/badges/version.svg)](https://anaconda.org/conda-forge/ligo-asimov) \n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/ligo-asimov/badges/installer/conda.svg)](https://conda.anaconda.org/conda-forge)\n\n[![coverage report](https://git.ligo.org/asimov/asimov/badges/infrastructure-updates/coverage.svg)](https://git.ligo.org/asimov/asimov/-/commits/infrastructure-updates)\n\nAsimov was developed to manage and automate the parameter estimation analyses used by the LIGO, Virgo, and KAGRA collaborations to analyse gravitational wave signals, but it aims to provide tools which can be used for other workflows.\n\nAsimov has been used to organise and run the major catalogue analyses from the third observing run, O3, but it's designed to be flexible enough to allow new pipelines and analyses to be added to the framework.\n\n## Branch notes\n\nThese notes relate to in-development features on this branch, and what's described here is only expected to be relevant during development.\nMore generally useful documentation will move to the main documentation before moving to production.\n\n### Starting the logging server\n\nRun in ``asimov`` directory:\n\n```\nexport FLASK_APP=server\nflask run\n```\n\n## Features\n\n### Job monitoring and management\n\nAsimov is able to interact with high throughput job management tools, and can submit jobs to clusters, monitor them for problems, and initiate post-processing tasks.\n\n### Uniform pipeline interface\n\nAsimov provides an API layer which allows a single configuration to be deployed to numerous different analysis pipelines.\nCurrent gravitational wave pipelines which are supported are ``lalinference``, ``bayeswave``, ``RIFT``, and ``bilby``.\n\n### Centralised configuration\n\nAsimov records all ongoing, completed, and scheduled analyses, allowing jobs, configurations, and results to be found easily.\n\n### Reporting overview\n\nAsimov can provide both machine-readible and human-friendly reports of all jobs it is monitoring, while collating relevant log files and outputs.\n\n### Results management\n\nYour results are important, and Asimov provides special tools to help manage the outputs of analyses as well as ensuring their veracity.\n\n## Do I need Asimov?\n\nAsimov makes setting-up and running parameter estimation jobs easier.\nIt can generate configuration files for several parameter estimation pipelines, and handle submitting these to a cluster.\nWhether you're setting-up a preliminary analysis for a single gravitational wave event, or analysing hundreds of events for a catalog, Asimov can help.\n\n## Installing Asimov\n\nAsimov is written in Python, and is available on ``pypi``. \nIt can be installed by running\n```\n$ pip install asimov\n```\nIt is also available on conda, and can be installed by running\n```\n$ conda install -c conda-forge ligo-asimov\n```\n\nAsimov also requires that you have `git` installed on your machine, and that you've set it up by running:\n```\n$ git config --global user.email \"you@example.com\"\n$ git config --global user.name \"Your Name\"\n```\n\n## Get started\n\nAsimov supports a variety of different ways of running, but the simplest way, running a workflow on a local machine, can be set up with a single command.\n\nWe start by setting up a project, which is a directory which keeps all of the analyses and the required metadata together.\nA project can include just a single event or a whole selection of events, for example if you're producing a catalogue.\nFirst create a directory to store your project:\n```\n$ mkdir my-new-project\n$ cd my-new-project\n```\nand then get asimov to set things up\n```\n$ asimov init \"Test project\"\n```\nwhere you can replace `\"Test project\"` with the name you want to give your project.\nA project will be set-up in your current working directory.\n\nIn order to start setting up analyses we next need to download some default settings.\n\nAn analysis is a pipeline run, and asimov supports `bayeswave`, `bilby` in the default installation.\n\nWe'll download the default configurations for jobs which are going to be run on the LIGO data grid.\nWe do this using the `asimov apply` command, which pulls-in data from a file either locally or online.\n\n```\n$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe.yaml\n```\n\nand the load default priors the same way:\n```\n$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe-priors.yaml\n```\n\nNow you can add an existing event, by downloading the event data settings using the `asimov apply` function, for example, to add GW150914 to the project you can run\n\n```\n$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/events/gwtc-2-1/GW150914_095045.yaml\n```\n\nThis downloads the settings which were used for analysing GW150914 for the GWTC-2.1 catalogue paper, and stores them in the ledger file in the project (`.asimov/ledger.yml`).\n\nMany analyses can be run on a single event (these are called \"productions\" in asimov parlence).\nWe can add some pre-configured analyses by downloading some analysis configuration settings.\n\n```\n$ asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/analyses/production-default.yaml -e GW150914_095045\n```\nNote that if you omit the `-e` argument asimov will ask which event the analyses should be applied to.\n\n\nYou can now build and submit your jobs to the cluster.\nFirst use `asimov manage build` to create the configuration files for each analysis:\n```\n$ asimov manage build\n```\nThese will be added to the git repositories in the `checkouts` directory inside the project directory.\nYou then submit the jobs to the cluster by running\n```\n$ asimov manage submit\n```\n\nIt will normally take a long time for a parameter estimation job to finish, but you can get asimov to check up on it by running\n```\n$ asimov monitor\n```\nIf the job is finished `asimov` will start post-processing using `PESummary`, and if it's fallen over it will attempt to fix the problem and resubmit it to the cluster.\nIf the post-processing has finished it will move the results to a read-only directory.\n\nYou can also set the asimov monitor to automatically check the status of the job every 15 minutes by running \n```\n$ asimov start\n```\nwhich will automatically start any post-processing, and start any jobs once their dependencies are met.\nYou can stop this automatic monitoring process any time by running\n```\n$ asimov stop\n```\n\nFor a full description of the workflow management process see the documentation.\n\n\n## I want to help develop new features, or add a new pipeline\n\nGreat! We're always looking for help with developing asimov!\nPlease take a look at our [contributors' guide](CONTRIBUTING.rst) to get started!\n\n\n## Roadmap\n\n### Gravitic pipelines\n\nWhile Asimov already supports a large number of pre-existing pipelines, and provides a straightforward interface for adding new pipelines, we also intend to support pipelines constructed using [gravitic](https://github.com/transientlunatic/gravitic), allowing experimental tools to be used without constructing an entire new pipeline, while also allowing asimov to manage the training of machine learning algorithms.\n\n\n### Workflow replication, extension and duplication\n\nAsimov will allow an existing workflow to be duplicated, in a similar way to a ``git clone``, and then extended, with new jobs gaining access to the completed jobs in the workflow.\nIt will also allow entire workflows to be re-run, providing a straightforward way to replicate results, or make minor modifications.\n\n\n## Authors\n\nAsimov is made by the LIGO, Virgo, and KAGRA collaborations.\nThe primary maintainer of the project is Daniel Williams.\nIts development is supported by the Science and Technology Facilities Council.\n\n\n",
"bugtrack_url": null,
"license": "MIT license",
"summary": "A Python package for managing and interacting with data analysis jobs.",
"version": "0.5.8",
"project_urls": {
"Homepage": "https://git.ligo.org/asimov/asimov"
},
"split_keywords": [
"pe",
" ligo",
" asimov"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bab7e94642b510ab9a9e5aaed0f101a73178deb51e89bd135a11685dc413cfe1",
"md5": "c26bd6ef43117065ce2286370d67aa93",
"sha256": "1d08e070d8c7e812ff16af3c5f87286dbaab41b6df244be57619b29d3a6e8368"
},
"downloads": -1,
"filename": "asimov-0.5.8-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c26bd6ef43117065ce2286370d67aa93",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 96645,
"upload_time": "2024-10-23T14:39:28",
"upload_time_iso_8601": "2024-10-23T14:39:28.311944Z",
"url": "https://files.pythonhosted.org/packages/ba/b7/e94642b510ab9a9e5aaed0f101a73178deb51e89bd135a11685dc413cfe1/asimov-0.5.8-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-23 14:39:28",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "asimov"
}