diff --git a/.github/workflows/create-frontend-release-pr.yml b/.github/workflows/create-frontend-release-pr.yml deleted file mode 100644 index 7596edc73..000000000 --- a/.github/workflows/create-frontend-release-pr.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Create Frontend Release PR - -on: - workflow_dispatch: - push: - branches: - - main - paths: - - 'frontend/**' - -permissions: - contents: write - pull-requests: write - -jobs: - create-frontend-release: - concurrency: - group: create-frontend-release-${{ github.ref }} - cancel-in-progress: true - - name: generate frontend changelog - runs-on: ubuntu-latest - if: github.repository == 'chanzuckerberg/cryoet-data-portal' - steps: - - name: create changelog - uses: google-github-actions/release-please-action@v4 - id: release - with: - # TODO Configuring using manifest file as workaround until we move the frontend to its own repo - config-file: release-please.config.json - manifest-file: release-please.manifest.json - token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/py-build.yml b/.github/workflows/py-build.yml deleted file mode 100644 index 647b6816c..000000000 --- a/.github/workflows/py-build.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Python cryoet_data_portal build - -on: - pull_request: - paths: - - "client/python/**" - - ".github/workflows/**" # Re-run if a workflow is modified - useful to test workflow changes in PRs - push: - branches: [main] - workflow_dispatch: - -jobs: - build_python_wheels: - name: Build Python wheel and sdist - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - - name: Install deps - run: | - python -m pip install -U pip setuptools build - - - name: Build - run: python -m build - working-directory: client/python/cryoet_data_portal/ - - - name: Upload build artifact - uses: actions/upload-artifact@v3 - with: - path: client/python/cryoet_data_portal/dist/* diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..bba6b5c82 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,62 @@ +name: Create Release PRs + +on: + workflow_dispatch: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + concurrency: + group: release-prs-${{ github.ref }} + cancel-in-progress: true + + runs-on: ubuntu-latest + steps: + - name: release please + uses: googleapis/release-please-action@v4 + id: release + with: + # TODO Configuring using manifest file as workaround until we move the frontend to its own repo + manifest-file: "release-please.manifest.json" + config-file: "release-please.config.json" + target-branch: "main" + token: ${{ secrets.GITHUB_TOKEN }} + + outputs: + paths_released: ${{ steps.release.outputs.paths_released }} + + publish-pypi-package: + name: Build and publish Python package to PyPI + runs-on: ubuntu-latest + needs: release-please + if: contains(needs.release-please.outputs.paths_released, 'client/python/cryoet_data_portal') + environment: + name: pypi + url: https://pypi.org/p/cryoet-data-portal + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: + - name: Checkout ref branch + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - uses: actions/setup-python@v4 + with: + pyton-version: "3.10" + + - name: build + run: | + make build -C client/python/cryoet_data_portal + + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: client/python/cryoet_data_portal/dist diff --git a/client/python/cryoet_data_portal/.coveragerc b/client/python/cryoet_data_portal/.coveragerc new file mode 100644 index 000000000..21ad4a3c3 --- /dev/null +++ b/client/python/cryoet_data_portal/.coveragerc @@ -0,0 +1,4 @@ +[run] +omit = + # omit temporary modules created by tests + */test_write_models*/_tmp_models.py diff --git a/client/python/cryoet_data_portal/CHANGELOG.md b/client/python/cryoet_data_portal/CHANGELOG.md new file mode 100644 index 000000000..294842ecf --- /dev/null +++ b/client/python/cryoet_data_portal/CHANGELOG.md @@ -0,0 +1,23 @@ +# Changelog + +## [3.1.0](https://github.com/chanzuckerberg/cryoet-data-portal/compare/cryoet-data-portal-python-client-v3.0.3...cryoet-data-portal-python-client-v3.1.0) (2024-08-22) + + +### ✨ Features + +* add user agent to client requests ([#966](https://github.com/chanzuckerberg/cryoet-data-portal/issues/966)) ([8209cd4](https://github.com/chanzuckerberg/cryoet-data-portal/commit/8209cd46cb8ab21341c7ee94672db3bae78f9aa2)) +* Generate Python client code using GraphQL introspection ([#1008](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1008)) ([35b7265](https://github.com/chanzuckerberg/cryoet-data-portal/commit/35b72656e77132c9d64cc077705da8940bb29e44)) + + +### 🐞 Bug Fixes + +* create recursive_from_prefix path if it does not exist ([#940](https://github.com/chanzuckerberg/cryoet-data-portal/issues/940)) ([0069f08](https://github.com/chanzuckerberg/cryoet-data-portal/commit/0069f080987ac05efef82d024cb17f4dc307a0f3)) +* Use match with substring for exception check in client tests ([#895](https://github.com/chanzuckerberg/cryoet-data-portal/issues/895)) ([07352ec](https://github.com/chanzuckerberg/cryoet-data-portal/commit/07352ecdb8c6f50ffe97ff7be9777c0cf6dd66cb)) +* wait for graphql to be healthy in client tests ([#1044](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1044)) ([65f0a4b](https://github.com/chanzuckerberg/cryoet-data-portal/commit/65f0a4b76783ad32bbe439f62fc32f0cae3ae646)), closes [#942](https://github.com/chanzuckerberg/cryoet-data-portal/issues/942) + + +### 🧹 Miscellaneous Chores + +* Add additional test case to TestGetDestinationPath ([#955](https://github.com/chanzuckerberg/cryoet-data-portal/issues/955)) ([a9412a8](https://github.com/chanzuckerberg/cryoet-data-portal/commit/a9412a80f3b24ff94b0803fdd59d3583b4521706)) +* add instructions and commands to manually release the python package. ([#1073](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1073)) ([4833eb9](https://github.com/chanzuckerberg/cryoet-data-portal/commit/4833eb95d32ee06a5608e69d6aebf013b1c9fd73)) +* automate release of python client ([#972](https://github.com/chanzuckerberg/cryoet-data-portal/issues/972)) ([073bff7](https://github.com/chanzuckerberg/cryoet-data-portal/commit/073bff7180e2ac3b390cac6a5665b63a7f00e472)) diff --git a/client/python/cryoet_data_portal/Makefile b/client/python/cryoet_data_portal/Makefile index d55a39414..480a7c2eb 100644 --- a/client/python/cryoet_data_portal/Makefile +++ b/client/python/cryoet_data_portal/Makefile @@ -1,6 +1,9 @@ .PHONY: test-infra test-infra: - cd tests && docker compose up -d + # Use force-recreate to handle re-initializing the database schema and data + # rather than maintaining incremental migrations. + # See the test_infra/hasura/README.md for more details. + cd tests && docker compose up -d --wait --wait-timeout 300 --force-recreate cd ./tests/test_infra/; ./seed_moto.sh .PHONY: coverage @@ -20,3 +23,24 @@ test: export BOTO_ENDPOINT_URL=http://localhost:4000; \ export BOTO_SIGNATURE_VERSION=s3v4; \ pytest -vvv -s . $(TEST) + +.PHONY: codegen +codegen: + python -m cryoet_data_portal._codegen + # Need to run pre-commit twice because black and ruff fight with each other. + # Ignore the return code because that is non-zero when pre-commit applies a fix. + -pre-commit run --files src/cryoet_data_portal/_models.py src/cryoet_data_portal/data/schema.graphql + -pre-commit run --files src/cryoet_data_portal/_models.py src/cryoet_data_portal/data/schema.graphql + +.PHONY: build +build: + python -m pip install --upgrade pip + pip install build twine + python -m build + +release/testpypi: build + python -m twine upload --repository testpypi dist/* + +release/pypi: build + # Manually release in case CI/CD pipeline is not working in ./.github/workflows/release.yml + python -m twine upload dist/* diff --git a/client/python/cryoet_data_portal/pyproject.toml b/client/python/cryoet_data_portal/pyproject.toml index 6e95d01b6..0d000ada7 100644 --- a/client/python/cryoet_data_portal/pyproject.toml +++ b/client/python/cryoet_data_portal/pyproject.toml @@ -1,10 +1,10 @@ [build-system] -requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"] +requires = ["setuptools>=64"] build-backend = "setuptools.build_meta" [project] name = "cryoet_data_portal" -dynamic = ["version"] +version = "3.1.0" description = "API Client to facilitate the use of the CryoET Portal. For more information about the API and the project visit https://github.com/chanzuckerberg/cryoet-data-portal/" authors = [ { name = "Chan Zuckerberg Initiative", email = "cryoetdataportal@chanzuckerberg.com" } @@ -38,6 +38,7 @@ dependencies= [ [project.urls] homepage = "https://github.com/chanzuckerberg/cryoet-data-portal" repository = "https://github.com/chanzuckerberg/cryoet-data-portal" +documentation = "https://chanzuckerberg.github.io/cryoet-data-portal/python-api.html" [tool.setuptools.packages.find] where = ["src"] diff --git a/client/python/cryoet_data_portal/release_process.md b/client/python/cryoet_data_portal/release_process.md index 37b26ad06..868c0639b 100644 --- a/client/python/cryoet_data_portal/release_process.md +++ b/client/python/cryoet_data_portal/release_process.md @@ -1,105 +1,19 @@ # Python package release process - -The following approach is used to manage releases of the Python package: - -1. The package is automatically built (sdist and wheels) in a GitHub action, and build artifacts are uploaded to GitHub. -2. Release candidate testing is done by installing built assets from Github. -3. Build versions are managed via [`setuptools_scm`](https://github.com/pypa/setuptools_scm) and the version is automatically determined from git tags. -4. Releases are created and managed via GitHub Releases, leaving a tag in place from which future branches (eg, emergency fixes) can be created. -5. Built packages are published to PyPi _from_ the GitHub assets, i.e. are never hand-created, to reduce errors. - -## Prerequisites - -While not strictly required, this process assumes you have met the following prerequisites: - -- You have write access to the `chanzuckerberg/cryoet-data-portal` repo -- You have an account on pypi.org and test.pypi.org, both with access to the cryoet-data-portal project -- You have the Github CLI tool (`gh`) installed. See [documentation](https://cli.github.com/). -- You have the `pipx` CLI tool installed. See [documentation](https://pypa.github.io/pipx/). - -## Step 1: Building the package assets - -A build will occur automatically upon each commit to main, upon each commit to a PR, or when the build workflow is manually invoked. The build workflow is defined by the GH `py-build.yml` workflow. Build artifacts are the Python setuptools-created `sdist` and `wheel`, and are retained for a limited period of time (currently the GH default of 90 days). - -Unless you are revising and testing the build process itself, there is no need to manually perform a build. - -## Step 2: Release candidate testing - -Any pre-built asset on Github can be installed and tested from the Github URL. For example: - -1. Identify the GH workflow run ID that contains the asset you wish to test. A simple way to do this is: - ```shell - $ gh run list - ``` - Alternatively, you can use the "Actions" tag in the GitHub web UI. -2. Download the build artifact.zip from GitHub, using the GH Action run ID associated with the `build` action for your commit OR utilizing the web UI: - - ```shell - $ gh run download - ``` - - If you download using the browser, unzip into a temp directory, e.g., - - ```shell - $ unzip artifact.zip -d ./artifact/ - Archive: artifact.zip - inflating: ./artifact/cryoet-data-portal-0.0.1.dev0-py3-none-any.whl - inflating: ./artifact/cryoet-data-portal-0.0.1.dev0.tar.gz - ``` - -3. Install and test the downloaded build, e.g., - ```shell - $ pip uninstall cryoet-data-portal - $ pip install ./artifact/cryoet-data-portal-*-any.whl - ``` - -To test a release candidate: - -1. Identify the build you wish to test. Download and test the artifact built for that commit as described above. -2. Perform end-user testing, using the above installation method -3. If acceptable, proceed to Step 3 - create a release. - -If testing exposes problems, fix and commit a solution as you would any other change. - -## Step 3: Create a release - -Prior to this process, determine the correct semver version number for the new release. Please consider if this is a major, minor or patch release, and if it should have a tag (e.g., an alpha build, with a `a#` suffix or a pre-release candidate, with a `-rc` suffix). If you are not sure, please review [PEP 440](https://peps.python.org/pep-0440/) for more information. - -This process also assumes you are releasing from `main`. If you create a release PR, it should be merged to main before releasing. - -To create a release, perform the following: - -1. Identify both the (tested & validated) commit and semver for the release. -2. Tag the commit with the release version (_including_ a `v` prefix) and push the tag to origin. **Important**: use an annotated tag, e.g., `git tag -a v1.9.4 -m 'Release 1.9.4`. For example (please replace with your version, _including_ a `v`, e.g. `v1.9.4`: - ```shell - $ git tag -a -m 'Release ' - $ git push origin - ``` -3. Trigger a build for this tag by manually triggering the `py-build.yml` workflow. For example: - ```shell - $ gh workflow run py-build.yml --ref - ``` -4. When the workflow completes, make note of the run ID (e.g., using `gh run list`). -5. Optional, _but recommended_: download the asset from the build workflow and validate it. -6. Create and publish a GitHub Release, using the `` tag above (e.g., `v1.9.4`). It is recommended that you include a release summary and change log in the GH release. - -## Step 4: Publish assets to PyPi - -To publish built release assets to PyPi (_note_: this will require your pypi/testpypi login): - -1. Download the assets built for your release commit, using the same method as step 2 above, e.g., - ```shell - $ gh run download - ``` -2. Optional: upload to TestPyPi (this assumes the downloaded assets are in ./artifact/). - - ```shell - pipx run twine upload --repository testpypi ./artifact/* - ``` - - Following the upload, confirm correct presentation on the project page and ability to download install from TestPyPi. To test with TestPyPi, use `pipx run twine upload --repository testpypi ./artifact/*`. You can find more information [here](https://packaging.python.org/en/latest/guides/using-testpypi/). - -3. Use twine to upload to PyPi (this assumes the downloaded assets are in ./artifact/), e.g., - ```shell - pipx run twine upload ./artifact/* - ``` +To release a new version of python client, merge a pull request to main with change to **./client/python/cryoet-data-portal**. Release-please will automatically create a PR with the a version bump if needed. The name of the PR will be **chore(main): release cryoet-data-portal-python-client vX.X.X**. Here is an [example](https://github.com/chanzuckerberg/cryoet-data-portal/pull/981) of a release PR. Merging the release-please PR will create a new release in github and a new version will be uploaded to pypi. If no changes were made that affect the python client, the python client will not be release. Closing the PR will skip the release of these changes and they will be included in the next release. + +If the version number needs to be change see [release-plesae documentation](https://github.com/googleapis/release-please?tab=readme-ov-file#how-do-i-change-the-version-number) for how to change the version number. This same process can be used to manually release the package. + +## Build Locally +The python client can be build locally by running the following: +```bash +make build +``` + +# Manual Release Process +After merging in the release-please PR, if the python package did not release it can be manually release by doing the following: +1. Setup your environment to upload to pypi by following the instructions [here](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#create-an-account) +2. Pull the latest changes from main +3. Run the following command to release the python client: +```bash +make release/pypi +``` diff --git a/client/python/cryoet_data_portal/scripts/requirements-dev.txt b/client/python/cryoet_data_portal/scripts/requirements-dev.txt index e23f1e1e6..22b5d65e8 100644 --- a/client/python/cryoet_data_portal/scripts/requirements-dev.txt +++ b/client/python/cryoet_data_portal/scripts/requirements-dev.txt @@ -5,3 +5,4 @@ requests-mock twine coverage nbqa +Jinja2 diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/__init__.py b/client/python/cryoet_data_portal/src/cryoet_data_portal/__init__.py index 67da96f9d..409d7b4e2 100644 --- a/client/python/cryoet_data_portal/src/cryoet_data_portal/__init__.py +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/__init__.py @@ -12,15 +12,16 @@ Dataset, DatasetAuthor, DatasetFunding, + Deposition, + DepositionAuthor, Run, TiltSeries, Tomogram, TomogramAuthor, TomogramVoxelSpacing, ) -from ._version import version -__version__ = version +__version__ = "3.1.0" __all__ = [ "Client", @@ -30,6 +31,8 @@ "Dataset", "DatasetAuthor", "DatasetFunding", + "Deposition", + "DepositionAuthor", "Run", "TiltSeries", "Tomogram", diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/_client.py b/client/python/cryoet_data_portal/src/cryoet_data_portal/_client.py index 2e62507fe..0fda834e8 100644 --- a/client/python/cryoet_data_portal/src/cryoet_data_portal/_client.py +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/_client.py @@ -8,12 +8,14 @@ from cryoet_data_portal._constants import USER_AGENT +DEFAULT_URL = "https://graphql.cryoetdataportal.cziscience.com/v1/graphql" + class Client: """A GraphQL Client library that can traverse all the metadata in the CryoET Data Portal Args: - url (Optional[str]): The API URL to connect to, defaults to "https://graphql.cryoetdataportal.cziscience.com/v1/graphql" + url (Optional[str]): The API URL to connect to, defaults to the latest portal endpoint. Returns: A GraphQL API Client library @@ -25,9 +27,8 @@ class Client: """ def __init__(self, url: Optional[str] = None): - # Use our default API URL if not url: - url = "https://graphql.cryoetdataportal.cziscience.com/v1/graphql" + url = DEFAULT_URL transport = RequestsHTTPTransport( url=url, retries=3, diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/_codegen.py b/client/python/cryoet_data_portal/src/cryoet_data_portal/_codegen.py new file mode 100644 index 000000000..85d9f8b41 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/_codegen.py @@ -0,0 +1,292 @@ +"""This module generates model code from the GraphQL schema.""" + +import logging +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Optional, Tuple, Union + +from gql import Client +from gql.transport.requests import RequestsHTTPTransport +from graphql import ( + GraphQLEnumType, + GraphQLField, + GraphQLList, + GraphQLNamedType, + GraphQLNonNull, + GraphQLObjectType, + GraphQLScalarType, + GraphQLSchema, + GraphQLType, + build_schema, + print_schema, +) +from jinja2 import Environment, FileSystemLoader + +from cryoet_data_portal._client import DEFAULT_URL + +"""Maps GraphQL field type names to model field defaults and Python types.""" +GQL_TO_MODEL_FIELD = { + "Boolean": ("BooleanField()", "bool"), + "Float": ("FloatField()", "float"), + "Int": ("IntField()", "int"), + "String": ("StringField()", "str"), + "date": ("DateField()", "date"), + "numeric": ("FloatField()", "float"), + "_numeric": ("StringField()", "str"), + "tomogram_type_enum": ("StringField()", "str"), +} + + +"""Maps GraphQL type names to model class names.""" +GQL_TO_MODEL_TYPE = { + "datasets": "Dataset", + "dataset_authors": "DatasetAuthor", + "dataset_funding": "DatasetFunding", + "runs": "Run", + "tomogram_voxel_spacings": "TomogramVoxelSpacing", + "tomograms": "Tomogram", + "tomogram_authors": "TomogramAuthor", + "annotations": "Annotation", + "annotation_files": "AnnotationFile", + "annotation_authors": "AnnotationAuthor", + "tiltseries": "TiltSeries", + "depositions": "Deposition", + "deposition_authors": "DepositionAuthor", +} + + +"""The path of directory containing this module.""" +_THIS_DIR = Path(__file__).parent + +"""The local schema path.""" +SCHEMA_PATH = _THIS_DIR / "data" / "schema.graphql" + +"""The local models module path.""" +MODELS_PATH = _THIS_DIR / "_models.py" + + +@dataclass(frozen=True) +class FieldInfo: + """The information about a parsed model field.""" + + name: str + annotation_type: str + default_value: str + description: Optional[str] = None + + +@dataclass(frozen=True) +class ModelInfo: + """The information about a parsed model.""" + + name: str + gql_name: str + fields: Tuple[FieldInfo, ...] + description: Optional[str] = None + + +def update_schema_and_models( + *, + gql_url: str, + schema_path: Path, + models_path: Path, +) -> None: + """Writes new schema and models files based on a GraphQL endpoint URL.""" + schema = fetch_schema(gql_url) + if schema is None: + raise RuntimeError(f"Could not get schema at {gql_url}") + write_schema(schema, schema_path) + models = get_models(schema) + write_models(models, models_path) + + +def write_models(models: Tuple[ModelInfo, ...], path: Path) -> None: + """Writes model classes to a Python module in a local file.""" + environment = _load_jinja_environment() + with open(path, "w") as f: + template = environment.get_template("Header.jinja2") + f.write(template.render()) + for model in models: + template = environment.select_template( + (f"{model.name}.jinja2", "Model.jinja2"), + ) + f.write(template.render(model=model)) + template = environment.get_template("Footer.jinja2") + f.write(template.render(models=(m.name for m in models))) + + +def get_models(schema: GraphQLSchema) -> Tuple[ModelInfo, ...]: + """Gets the model and field information from a GraphQL schema.""" + models = [] + for gql, model in GQL_TO_MODEL_TYPE.items(): + logging.info("Parsing gql type %s to model %s", gql, model) + gql_type = schema.get_type(gql) + assert isinstance(gql_type, GraphQLObjectType) + fields = parse_fields(gql_type) + models.append( + ModelInfo( + name=model, + gql_name=gql_type.name, + description=gql_type.description, + fields=fields, + ), + ) + return tuple(models) + + +def fetch_schema(url: str) -> Optional[GraphQLSchema]: + """Gets the GraphQL schema from a URL endpoint.""" + transport = RequestsHTTPTransport(url=url, retries=3) + with Client(transport=transport, fetch_schema_from_transport=True) as session: + return session.client.schema + + +def write_schema(schema: GraphQLSchema, path: Path) -> None: + """Writes a GraphQL schema it to a local file.""" + schema_str = print_schema(schema) + with open(path, "w") as f: + f.write(schema_str) + + +def load_schema(path: Path) -> GraphQLSchema: + """Returns the GraphQL schema defined in a local file.""" + with open(path, "r") as f: + schema_str = f.read() + return build_schema(schema_str) + + +def parse_fields(gql_type: GraphQLObjectType) -> Tuple[FieldInfo, ...]: + """Returns the field information parsed from a GraphQL object type.""" + fields = [] + for name, field in gql_type.fields.items(): + parsed = _parse_field(gql_type, name, field) + if parsed is not None: + logging.info("Parsed field %s", parsed) + fields.append(parsed) + else: + logging.warning( + "Failed to parse field: %s, %s, %r", + gql_type.name, + name, + field, + ) + return tuple(fields) + + +def _parse_field( + gql_type: GraphQLObjectType, + name: str, + field: GraphQLField, +) -> Optional[FieldInfo]: + logging.debug("_parse_field: %s, %s", name, field) + field_type = _maybe_unwrap_non_null(field.type) + if isinstance(field_type, GraphQLList): + return _parse_model_list_field(gql_type, name, field_type) + if isinstance(field_type, GraphQLObjectType) and ( + field_type.name in GQL_TO_MODEL_TYPE + ): + return _parse_model_field(gql_type, name, field_type) + if isinstance(field_type, (GraphQLScalarType, GraphQLEnumType)): + return _parse_scalar_field(name, field.description, field_type) + return None + + +def _parse_scalar_field( + name: str, + description: Optional[str], + field_type: Union[GraphQLScalarType, GraphQLEnumType], +) -> Optional[FieldInfo]: + logging.debug("_parse_scalar_field: %s", field_type) + if field_type.name in GQL_TO_MODEL_FIELD: + default_value, annotation_type = GQL_TO_MODEL_FIELD[field_type.name] + return FieldInfo( + name=name, + description=description, + annotation_type=annotation_type, + default_value=default_value, + ) + return None + + +def _parse_model_field( + gql_type: GraphQLObjectType, + name: str, + field_type: GraphQLObjectType, +) -> Optional[FieldInfo]: + logging.debug("_parse_model_field: %s", field_type) + model = GQL_TO_MODEL_TYPE.get(field_type.name) + if model is not None: + model_field = _camel_to_snake_case(model) + model_name = _camel_to_space_case(model) + source_model = GQL_TO_MODEL_TYPE[gql_type.name] + source_model_name = _camel_to_space_case(source_model) + return FieldInfo( + name=name, + description=f"The {model_name} this {source_model_name} is a part of", + annotation_type=model, + default_value=f'ItemRelationship("{model}", "{model_field}_id", "id")', + ) + return None + + +def _parse_model_list_field( + gql_type: GraphQLObjectType, + name: str, + field_type: GraphQLList[GraphQLType], +) -> Optional[FieldInfo]: + logging.debug("_parse_model_list_field: %s", field_type) + of_type = _maybe_unwrap_non_null(field_type.of_type) + if not isinstance(of_type, GraphQLNamedType): + return None + of_model = GQL_TO_MODEL_TYPE.get(of_type.name) + if of_model is not None: + source_model = GQL_TO_MODEL_TYPE[gql_type.name] + source_field = _camel_to_snake_case(source_model) + source_model_name = _camel_to_space_case(source_model) + of_model_name = _space_case_to_plural(_camel_to_space_case(of_model)) + return FieldInfo( + name=name, + description=f"The {of_model_name} of this {source_model_name}", + annotation_type=f"List[{of_model}]", + default_value=f'ListRelationship("{of_model}", "id", "{source_field}_id")', + ) + return None + + +def _maybe_unwrap_non_null(field_type: GraphQLType) -> GraphQLType: + if isinstance(field_type, GraphQLNonNull): + return field_type.of_type + return field_type + + +def _load_jinja_environment() -> Environment: + template_dir = _THIS_DIR / "templates" + loader = FileSystemLoader(template_dir) + return Environment( + loader=loader, + trim_blocks=True, + lstrip_blocks=True, + keep_trailing_newline=True, + ) + + +def _camel_to_snake_case(name: str) -> str: + return re.sub("(?!^)([A-Z]+)", r"_\1", name).lower() + + +def _camel_to_space_case(name: str) -> str: + return _camel_to_snake_case(name).replace("_", " ") + + +def _space_case_to_plural(name: str) -> str: + return name if name[-1] == "s" else f"{name}s" + + +if __name__ == "__main__": + logging.basicConfig(level=logging.WARN) + update_schema_and_models( + gql_url=DEFAULT_URL, + schema_path=SCHEMA_PATH, + models_path=MODELS_PATH, + ) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/_gql_base.py b/client/python/cryoet_data_portal/src/cryoet_data_portal/_gql_base.py index 43a548d3c..944ca749c 100644 --- a/client/python/cryoet_data_portal/src/cryoet_data_portal/_gql_base.py +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/_gql_base.py @@ -175,13 +175,11 @@ class ItemRelationship(Relationship): def __get__(self, obj, obj_class=None): if obj is None: return self - for item in self.related_class.find( - obj._client, - [ - getattr(self.related_class, self.dest_field) - == getattr(obj, self.source_field), - ], - ): + source_field = getattr(obj, self.source_field) + if source_field is None: + return None + dest_field = getattr(self.related_class, self.dest_field) + for item in self.related_class.find(obj._client, [dest_field == source_field]): return item @@ -189,12 +187,11 @@ class ListRelationship(Relationship): def __get__(self, obj, obj_class=None): if obj is None: return self + source_field = getattr(obj, self.source_field) + dest_field = getattr(self.related_class, self.dest_field) res = self.related_class.find( obj._client, - [ - getattr(self.related_class, self.dest_field) - == getattr(obj, self.source_field), - ], + [dest_field == source_field], ) return res diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/_models.py b/client/python/cryoet_data_portal/src/cryoet_data_portal/_models.py index ecc965ac2..39b9c70c7 100644 --- a/client/python/cryoet_data_portal/src/cryoet_data_portal/_models.py +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/_models.py @@ -1,9 +1,17 @@ +"""CryoET data portal client model classes. + +Auto-generated by running 'make codegen'. Do not edit. +Edit the Jinja2 templates instead. +""" + +from __future__ import annotations + import os from datetime import date from typing import List, Optional -from ._file_tools import download_directory, download_https -from ._gql_base import ( +from cryoet_data_portal._file_tools import download_directory, download_https +from cryoet_data_portal._gql_base import ( BooleanField, DateField, FloatField, @@ -16,11 +24,10 @@ class Dataset(Model): - """Metadata for a dataset in the CryoET Data Portal + """Metadata for a dataset Attributes: - id (int): An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree - authors (List[DatasetAuthor]): An array relationship with DatasetAuthor + authors (List[DatasetAuthor]): The dataset authors of this dataset cell_component_id (str): If the dataset focuses on a specific part of a cell, the subset is included here cell_component_name (str): Name of the cellular component cell_name (str): Name of the cell from which a biological sample used in a CryoET study is derived from. @@ -29,21 +36,24 @@ class Dataset(Model): cell_type_id (str): Cell Ontology identifier for the cell type dataset_citations (str): DOIs for publications that cite the dataset. Use a comma to separate multiple DOIs. dataset_publications (str): DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. - deposition_date: Date when a dataset is initially received by the Data Portal. + deposition (Deposition): The deposition this dataset is a part of + deposition_date (date): Date when a dataset is initially received by the Data Portal. + deposition_id (int): Reference to the deposition this dataset is associated with description (str): A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. - funding_sources: List[FundingSource] An array relationship with FundingSource + funding_sources (List[DatasetFunding]): The dataset fundings of this dataset grid_preparation (str): Describe Cryo-ET grid preparation. - https_prefix (str): The HTTPS directory path where this dataset is contained + https_prefix (str): The https directory path where this dataset is contained + id (int): An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree key_photo_thumbnail_url (str): URL for the thumbnail of preview image. key_photo_url (str): URL for the dataset preview image. - last_modified_date (date):Date when a released dataset is last modified. + last_modified_date (date): Date when a released dataset is last modified. organism_name (str): Name of the organism from which a biological sample used in a CryoET study is derived from, e.g. homo sapiens organism_taxid (str): NCBI taxonomy identifier for the organism, e.g. 9606 other_setup (str): Describe other setup not covered by sample preparation or grid preparation that may make this dataset unique in the same publication related_database_entries (str): If a CryoET dataset is also deposited into another database, enter the database identifier here (e.g. EMPIAR-11445). Use a comma to separate multiple identifiers. - related_database_links (str): If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + related_database_links (str): If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. release_date (date): Date when a dataset is made available on the Data Portal. - runs: List[Run] An array relationship with Run + runs (List[Run]): The runs of this dataset s3_prefix (str): The S3 public bucket path where this dataset is contained sample_preparation (str): Describe how the sample was prepared. sample_type (str): Type of samples used in a CryoET study. (cell, tissue, organism, intact organelle, in-vitro mixture, in-silico synthetic data, other) @@ -52,9 +62,9 @@ class Dataset(Model): title (str): Title of a CryoET dataset """ - _gql_type = "datasets" + _gql_type: str = "datasets" - id: int = IntField() + authors: List[DatasetAuthor] = ListRelationship("DatasetAuthor", "id", "dataset_id") cell_component_id: str = StringField() cell_component_name: str = StringField() cell_name: str = StringField() @@ -63,10 +73,18 @@ class Dataset(Model): cell_type_id: str = StringField() dataset_citations: str = StringField() dataset_publications: str = StringField() + deposition: Deposition = ItemRelationship("Deposition", "deposition_id", "id") deposition_date: date = DateField() + deposition_id: int = IntField() description: str = StringField() + funding_sources: List[DatasetFunding] = ListRelationship( + "DatasetFunding", + "id", + "dataset_id", + ) grid_preparation: str = StringField() https_prefix: str = StringField() + id: int = IntField() key_photo_thumbnail_url: str = StringField() key_photo_url: str = StringField() last_modified_date: date = DateField() @@ -76,6 +94,7 @@ class Dataset(Model): related_database_entries: str = StringField() related_database_links: str = StringField() release_date: date = DateField() + runs: List[Run] = ListRelationship("Run", "id", "dataset_id") s3_prefix: str = StringField() sample_preparation: str = StringField() sample_type: str = StringField() @@ -83,18 +102,6 @@ class Dataset(Model): tissue_name: str = StringField() title: str = StringField() - runs: List["Run"] = ListRelationship("Run", "id", "dataset_id") - authors: List["DatasetAuthor"] = ListRelationship( - "DatasetAuthor", - "id", - "dataset_id", - ) - funding_sources: List["DatasetFunding"] = ListRelationship( - "DatasetFunding", - "id", - "dataset_id", - ) - def download_everything(self, dest_path: Optional[str] = None): """Download all of the data for this dataset. @@ -109,88 +116,84 @@ class DatasetAuthor(Model): """Metadata for authors of a dataset Attributes: - id (int): A numeric identifier for this author affiliation_address (str): Address of the institution an author is affiliated with. - affiliation_identifier (str): A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + affiliation_identifier (str): A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). affiliation_name (str): Name of the institutions an author is affiliated with. Comma separated - author_list_order(int): The order in which the author appears in the publication - corresponding_author_status (bool):Indicating whether an author is the corresponding author - dataset (Dataset): An object relationship with the dataset this author corresponds to + author_list_order (int): The order in which the author appears in the publication + corresponding_author_status (bool): Indicating whether an author is the corresponding author + dataset (Dataset): The dataset this dataset author is a part of dataset_id (int): Numeric identifier for the dataset this author corresponds to email (str): Email address for each author + id (int): A numeric identifier for this author (May change!) name (str): Full name of a dataset author (e.g. Jane Doe). orcid (str): A unique, persistent identifier for researchers, provided by ORCID. - primary_author_status (bool): Indicating whether an annotator is the main person executing the annotation, especially on manual annotation + primary_author_status (bool): Indicating whether an author is the main person associated with the corresponding dataset """ - _gql_type = "dataset_authors" - - dataset: Dataset = ItemRelationship(Dataset, "dataset_id", "id") + _gql_type: str = "dataset_authors" - id: int = IntField() affiliation_address: str = StringField() affiliation_identifier: str = StringField() affiliation_name: str = StringField() author_list_order: int = IntField() - corresponding_author_status: int = BooleanField() + corresponding_author_status: bool = BooleanField() + dataset: Dataset = ItemRelationship("Dataset", "dataset_id", "id") dataset_id: int = IntField() email: str = StringField() + id: int = IntField() name: str = StringField() orcid: str = StringField() - primary_author_status: int = BooleanField() + primary_author_status: bool = BooleanField() class DatasetFunding(Model): """Metadata for a dataset's funding sources Attributes: - id (int): A numeric identifier for this funding record - dataset (Dataset): An object relationship with the dataset this funding source corresponds to + dataset (Dataset): The dataset this dataset funding is a part of dataset_id (int): Numeric identifier for the dataset this funding source corresponds to funding_agency_name (str): Name of the funding agency. grant_id (str): Grant identifier provided by the funding agency. + id (int): A numeric identifier for this funding record (May change!) """ - _gql_type = "dataset_funding" - - dataset: Dataset = ItemRelationship(Dataset, "dataset_id", "id") + _gql_type: str = "dataset_funding" - id: int = IntField() + dataset: Dataset = ItemRelationship("Dataset", "dataset_id", "id") dataset_id: int = IntField() funding_agency_name: str = StringField() grant_id: str = StringField() + id: int = IntField() class Run(Model): """Metadata for an experiment run Attributes: - id (int): Numeric identifier (May change!) - dataset (Dataset): An object relationship with the dataset this run is a part of + dataset (Dataset): The dataset this run is a part of dataset_id (int): Reference to the dataset this run is a part of https_prefix (str): The HTTPS directory path where this dataset is contained - name (str): Short name for the experiment run + id (int): Numeric identifier (May change!) + name (str): Short name for this experiment run s3_prefix (str): The S3 public bucket path where this dataset is contained - tiltseries (list[TiltSeries]): An array relationship with TiltSeries that correspond to this run - tomogram_voxel_spacings (list[TomogramVoxelSpacing]): An array relationship with the Tomogram Voxel Spacings created from this run + tiltseries (List[TiltSeries]): The tilt series of this run + tomogram_voxel_spacings (List[TomogramVoxelSpacing]): The tomogram voxel spacings of this run """ - _gql_type = "runs" - - dataset: Dataset = ItemRelationship(Dataset, "dataset_id", "id") + _gql_type: str = "runs" - id: int = IntField() + dataset: Dataset = ItemRelationship("Dataset", "dataset_id", "id") dataset_id: int = IntField() https_prefix: str = StringField() + id: int = IntField() name: str = StringField() s3_prefix: str = StringField() - - tomogram_voxel_spacings: List["TomogramVoxelSpacing"] = ListRelationship( + tiltseries: List[TiltSeries] = ListRelationship("TiltSeries", "id", "run_id") + tomogram_voxel_spacings: List[TomogramVoxelSpacing] = ListRelationship( "TomogramVoxelSpacing", "id", "run_id", ) - tiltseries: List["TiltSeries"] = ListRelationship("TiltSeries", "id", "run_id") def download_everything(self, dest_path: Optional[str] = None): """Download all of the data for this run. @@ -209,42 +212,40 @@ def download_frames(self, dest_path: Optional[str] = None): class TomogramVoxelSpacing(Model): - """Metadata for a set of tomograms and annotations of a given voxel spacing + """Metadata for a given voxel spacing related to tomograms and annotations Attributes: + annotations (List[Annotation]): The annotations of this tomogram voxel spacing + https_prefix (str): The HTTPS directory path where this tomogram voxel spacing is contained id (int): Numeric identifier (May change!) - annotations (list[Annotation]): An array relationship with the annotations associated with this voxel spacing - https_prefix (str): The HTTPS directory path where this dataset is contained - run (Run): An object relationship with the run this voxel spacing is a part of - run_id (int): Reference to the dataset this run is a part of - s3_prefix (str): The S3 public bucket path where this dataset is contained - tomograms (list[Tomogram]): An array relationship with Tomograms of this voxel spacing - voxel_spacing (float): The voxel spacing for the tomograms in this set + run (Run): The run this tomogram voxel spacing is a part of + run_id (int): The ID of the run this tomogram voxel spacing is a part of + s3_prefix (str): The S3 public bucket path where this tomogram voxel spacing is contained + tomograms (List[Tomogram]): The tomograms of this tomogram voxel spacing + voxel_spacing (float): The voxel spacing for the tomograms in this set in angstroms """ - _gql_type = "tomogram_voxel_spacings" - - run: Run = ItemRelationship(Run, "run_id", "id") + _gql_type: str = "tomogram_voxel_spacings" - id: int = IntField() + annotations: List[Annotation] = ListRelationship( + "Annotation", + "id", + "tomogram_voxel_spacing_id", + ) https_prefix: str = StringField() + id: int = IntField() + run: Run = ItemRelationship("Run", "run_id", "id") run_id: int = IntField() s3_prefix: str = StringField() - voxel_spacing: float = FloatField() - - tomograms: List["Tomogram"] = ListRelationship( + tomograms: List[Tomogram] = ListRelationship( "Tomogram", "id", "tomogram_voxel_spacing_id", ) - annotations: List["Annotation"] = ListRelationship( - "Annotation", - "id", - "tomogram_voxel_spacing_id", - ) + voxel_spacing: float = FloatField() def download_everything(self, dest_path: Optional[str] = None): - """Download all of the data for this run. + """Download all of the data for this tomogram voxel spacing. Args: dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. @@ -256,13 +257,15 @@ class Tomogram(Model): """Metadata for a tomogram Attributes: - id (int): Numeric identifier for this tomogram (this may change!) affine_transformation_matrix (str): The flip or rotation transformation of this author submitted tomogram is indicated here + authors (List[TomogramAuthor]): The tomogram authors of this tomogram ctf_corrected (bool): Whether this tomogram is CTF corrected - fiducial_alignment_status (str): Fiducial Alignment status: True = aligned with fiducial False = aligned without fiducial + deposition (Deposition): The deposition this tomogram is a part of deposition_id (int): If the tomogram is part of a deposition, the related deposition's id + fiducial_alignment_status (str): Fiducial Alignment status: True = aligned with fiducial False = aligned without fiducial https_mrc_scale0 (str): HTTPS path to this tomogram in MRC format (no scaling) https_omezarr_dir (str): HTTPS path to this tomogram in multiscale OME-Zarr format + id (int): Numeric identifier for this tomogram (this may change!) is_canonical (bool): Is this tomogram considered the canonical tomogram for the run experiment? True=Yes key_photo_thumbnail_url (str): URL for the thumbnail of key photo key_photo_url (str): URL for the key photo @@ -270,41 +273,42 @@ class Tomogram(Model): neuroglancer_config (str): the compact json of neuroglancer config offset_x (int): x offset data relative to the canonical tomogram in pixels offset_y (int): y offset data relative to the canonical tomogram in pixels - offset_z (int): z offset data relative to the canonical tomogram in pixels + offset_z (int): z offset data relative to the canonical tomogram in pixels processing (str): Describe additional processing used to derive the tomogram processing_software (str): Processing software used to derive the tomogram - reconstruction_method (str):Describe reconstruction method (Weighted back-projection, SART, SIRT) - reconstruction_software (str):Name of software used for reconstruction - s3_mrc_scale0 (str):S3 path to this tomogram in MRC format (no scaling) - s3_omezarr_dir (str):S3 path to this tomogram in multiscale OME-Zarr format - scale0_dimensions (str):comma separated x,y,z dimensions of the unscaled tomogram - scale1_dimensions (str):comma separated x,y,z dimensions of the scale1 tomogram - scale2_dimensions (str):comma separated x,y,z dimensions of the scale2 tomogram + reconstruction_method (str): Describe reconstruction method (Weighted back-projection, SART, SIRT) + reconstruction_software (str): Name of software used for reconstruction + s3_mrc_scale0 (str): S3 path to this tomogram in MRC format (no scaling) + s3_omezarr_dir (str): S3 path to this tomogram in multiscale OME-Zarr format + scale0_dimensions (str): comma separated x,y,z dimensions of the unscaled tomogram + scale1_dimensions (str): comma separated x,y,z dimensions of the scale1 tomogram + scale2_dimensions (str): comma separated x,y,z dimensions of the scale2 tomogram size_x (int): Number of pixels in the 3D data fast axis size_y (int): Number of pixels in the 3D data medium axis - size_z (int): Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt + size_z (int): Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt tomogram_version (str): Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version - tomogram_voxel_spacing (TomogramVoxelSpacing): An object relationship with a specific voxel spacing for this experiment run - type (str): Tomogram purpose (ex: CANONICAL) + tomogram_voxel_spacing (TomogramVoxelSpacing): The tomogram voxel spacing this tomogram is a part of + tomogram_voxel_spacing_id (int): The ID of the tomogram voxel spacing this tomogram is part of + type (str): Tomogram purpose (ex: CANONICAL) voxel_spacing (float): Voxel spacing equal in all three axes in angstroms """ - _gql_type = "tomograms" + _gql_type: str = "tomograms" - tomogram_voxel_spacing: TomogramVoxelSpacing = ItemRelationship( - TomogramVoxelSpacing, - "tomogram_voxel_spacing_id", + affine_transformation_matrix: str = StringField() + authors: List[TomogramAuthor] = ListRelationship( + "TomogramAuthor", "id", + "tomogram_id", ) - - id: int = IntField() - affine_transformation_matrix: str = StringField() - ctf_corrected: int = BooleanField() + ctf_corrected: bool = BooleanField() + deposition: Deposition = ItemRelationship("Deposition", "deposition_id", "id") deposition_id: int = IntField() fiducial_alignment_status: str = StringField() https_mrc_scale0: str = StringField() https_omezarr_dir: str = StringField() - is_canonical: int = BooleanField() + id: int = IntField() + is_canonical: bool = BooleanField() key_photo_thumbnail_url: str = StringField() key_photo_url: str = StringField() name: str = StringField() @@ -325,14 +329,14 @@ class Tomogram(Model): size_y: int = IntField() size_z: int = IntField() tomogram_version: str = StringField() + tomogram_voxel_spacing: TomogramVoxelSpacing = ItemRelationship( + "TomogramVoxelSpacing", + "tomogram_voxel_spacing_id", + "id", + ) tomogram_voxel_spacing_id: int = IntField() type: str = StringField() voxel_spacing: float = FloatField() - authors: List["TomogramAuthor"] = ListRelationship( - "TomogramAuthor", - "id", - "tomogram_id", - ) def download_omezarr(self, dest_path: Optional[str] = None): """Download the OME-Zarr version of this tomogram @@ -374,34 +378,33 @@ class TomogramAuthor(Model): """Metadata for a tomogram's authors Attributes: - id (int): Numeric identifier for this tomogram's author (this may change!) affiliation_address (str): Address of the institution an author is affiliated with. affiliation_identifier (str): A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). affiliation_name (str): Name of the institution an annotator is affiliated with. Sometimes, one annotator may have multiple affiliations. author_list_order (int): The order in which the author appears in the publication - tomogram (Tomogram): An object relationship with the Tomogram this author is a part of - tomogram_id (int): Reference to the tomogram this author contributed to - corresponding_author_status (bool): Indicating whether an author is the corresponding author + corresponding_author_status (bool): Indicating whether an author is the corresponding author (YES or NO) email (str): Email address for this author + id (int): Numeric identifier for this tomogram author (this may change!) name (str): Full name of an author (e.g. Jane Doe). orcid (str): A unique, persistent identifier for researchers, provided by ORCID. - primary_author_status (bool): Indicating whether an annotator is the main person executing the annotation, especially on manual annotation + primary_author_status (bool): Indicating whether an author is the main person creating the tomogram (YES or NO) + tomogram (Tomogram): The tomogram this tomogram author is a part of + tomogram_id (int): Reference to the tomogram this author contributed to """ - _gql_type = "tomogram_authors" - - tomogram: Tomogram = ItemRelationship(Tomogram, "tomogram_id", "id") + _gql_type: str = "tomogram_authors" - id: int = IntField() affiliation_address: str = StringField() affiliation_identifier: str = StringField() affiliation_name: str = StringField() author_list_order: int = IntField() - corresponding_author_status: int = BooleanField() + corresponding_author_status: bool = BooleanField() email: str = StringField() + id: int = IntField() name: str = StringField() orcid: str = StringField() - primary_author_status: int = BooleanField() + primary_author_status: bool = BooleanField() + tomogram: Tomogram = ItemRelationship("Tomogram", "tomogram_id", "id") tomogram_id: int = IntField() @@ -409,48 +412,55 @@ class Annotation(Model): """Metadata for an annotation Attributes: - id (int): Numeric identifier (May change!) annotation_method (str): Describe how the annotation is made (e.g. Manual, crYoLO, Positive Unlabeled Learning, template matching) annotation_publication (str): DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. annotation_software (str): Software used for generating this annotation - authors (list[Author]): An array relationship with the authors of this annotation + authors (List[AnnotationAuthor]): The annotation authors of this annotation confidence_precision (float): Describe the confidence level of the annotation. Precision is defined as the % of annotation objects being true positive confidence_recall (float): Describe the confidence level of the annotation. Recall is defined as the % of true positives being annotated correctly + deposition (Deposition): The deposition this annotation is a part of deposition_date (date): Date when an annotation set is initially received by the Data Portal. deposition_id (int): If the annotation is part of a deposition, the related deposition's id - files (list[AnnotationFile]): An array relationship with the files of this annotation + files (List[AnnotationFile]): The annotation files of this annotation ground_truth_status (bool): Whether an annotation is considered ground truth, as determined by the annotator. ground_truth_used (str): Annotation filename used as ground truth for precision and recall https_metadata_path (str): HTTPS path for the metadata json file for this annotation + id (int): Numeric identifier (May change!) + is_curator_recommended (bool): Data curator’s subjective choice as the best annotation of the same annotation object ID last_modified_date (date): Date when an annotation was last modified in the Data Portal - method_type (str): The method type for generating the annotation (eg. manual, hybrid, automated) + method_type (str): The method type for generating the annotation (e.g. manual, hybrid, automated) object_count (int): Number of objects identified object_description (str): A textual description of the annotation object, can be a longer description to include additional information not covered by the Annotation object name and state. object_id (str): Gene Ontology Cellular Component identifier for the annotation object object_name (str): Name of the object being annotated (e.g. ribosome, nuclear pore complex, actin filament, membrane) object_state (str): Molecule state annotated (e.g. open, closed) release_date (date): Date when annotation data is made public by the Data Portal. - tomogram_voxel_spacing (TomogramVoxelSpacing): An object relationship with a specific voxel spacing for this annotation - tomogram_voxel_spacing_id (int): Reference to the tomogram voxel spacing group this annotation applies to s3_metadata_path (str): S3 path for the metadata json file for this annotation + tomogram_voxel_spacing (TomogramVoxelSpacing): The tomogram voxel spacing this annotation is a part of + tomogram_voxel_spacing_id (int): The ID of the tomogram voxel spacing this annotation is part of """ - _gql_type = "annotations" - - tomogram_voxel_spacing: TomogramVoxelSpacing = ItemRelationship( - TomogramVoxelSpacing, - "tomogram_voxel_spacing_id", - "id", - ) + _gql_type: str = "annotations" annotation_method: str = StringField() annotation_publication: str = StringField() annotation_software: str = StringField() + authors: List[AnnotationAuthor] = ListRelationship( + "AnnotationAuthor", + "id", + "annotation_id", + ) confidence_precision: float = FloatField() confidence_recall: float = FloatField() + deposition: Deposition = ItemRelationship("Deposition", "deposition_id", "id") deposition_date: date = DateField() deposition_id: int = IntField() - ground_truth_status: int = BooleanField() + files: List[AnnotationFile] = ListRelationship( + "AnnotationFile", + "id", + "annotation_id", + ) + ground_truth_status: bool = BooleanField() ground_truth_used: str = StringField() https_metadata_path: str = StringField() id: int = IntField() @@ -464,18 +474,12 @@ class Annotation(Model): object_state: str = StringField() release_date: date = DateField() s3_metadata_path: str = StringField() - tomogram_voxel_spacing_id: int = IntField() - - authors: List["AnnotationAuthor"] = ListRelationship( - "AnnotationAuthor", - "id", - "annotation_id", - ) - files: List["AnnotationFile"] = ListRelationship( - "AnnotationFile", + tomogram_voxel_spacing: TomogramVoxelSpacing = ItemRelationship( + "TomogramVoxelSpacing", + "tomogram_voxel_spacing_id", "id", - "annotation_id", ) + tomogram_voxel_spacing_id: int = IntField() def download( self, @@ -506,28 +510,23 @@ class AnnotationFile(Model): """Metadata for an annotation file Attributes: - id (int): Numeric identifier (May change!) + annotation (Annotation): The annotation this annotation file is a part of + annotation_id (int): The ID of the annotation this file applies to format (str): File format for this file - https_path (str): HTTPS url for the annotation file - is_visualization_default (bool): Is this annotation shape displayed in visualization tools by default - s3_path (str): S3 path for the annotation file - shape_type (str): Describe whether this is a Point, OrientedPoint, or SegmentationMask file - annotation_id (int): Reference to the annotation this file applies to - Annotation (Annotation): The annotation this file is a part of + https_path (str): HTTPS path for this annotation file + id (int): Numeric identifier (May change!) + is_visualization_default (bool): Data curator’s subjective choice of default annotation to display in visualization for an object + s3_path (str): s3 path of the annotation file + shape_type (str): The type of the annotation """ - _gql_type = "annotation_files" - - annotation: "Annotation" = ItemRelationship( - "Annotation", - "annotation_id", - "id", - ) + _gql_type: str = "annotation_files" - id: int = IntField() + annotation: Annotation = ItemRelationship("Annotation", "annotation_id", "id") annotation_id: int = IntField() format: str = StringField() https_path: str = StringField() + id: int = IntField() is_visualization_default: bool = BooleanField() s3_path: str = StringField() shape_type: str = StringField() @@ -544,64 +543,70 @@ class AnnotationAuthor(Model): """Metadata for an annotation's authors Attributes: - id (int): Numeric identifier for this annotation author (this may change!) affiliation_address (str): Address of the institution an annotator is affiliated with. affiliation_identifier (str): A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). affiliation_name (str): Name of the institution an annotator is affiliated with. Sometimes, one annotator may have multiple affiliations. - annotation (Annotation): An object relationship with the annotation this author is a part of + annotation (Annotation): The annotation this annotation author is a part of annotation_id (int): Reference to the annotation this author contributed to - corresponding_author_status (bool): Indicating whether an annotator is the corresponding author + author_list_order (int): The order in which the author appears in the publication + corresponding_author_status (bool): Indicating whether an annotator is the corresponding author (YES or NO) email (str): Email address for this author + id (int): Numeric identifier for this annotation author (this may change!) name (str): Full name of an annotation author (e.g. Jane Doe). orcid (str): A unique, persistent identifier for researchers, provided by ORCID. - primary_annotator_status (bool): Indicating whether an annotator is the main person executing the annotation, especially on manual annotation + primary_annotator_status (bool): Indicating whether an annotator is the main person executing the annotation, especially on manual annotation (YES or NO) + primary_author_status (bool): Indicating whether an author is the main person executing the annotation, especially on manual annotation (YES or NO) """ - _gql_type = "annotation_authors" + _gql_type: str = "annotation_authors" - annotation: Annotation = ItemRelationship(Annotation, "annotation_id", "id") - - id: int = IntField() affiliation_address: str = StringField() affiliation_identifier: str = StringField() affiliation_name: str = StringField() + annotation: Annotation = ItemRelationship("Annotation", "annotation_id", "id") annotation_id: int = IntField() - corresponding_author_status: int = BooleanField() + author_list_order: int = IntField() + corresponding_author_status: bool = BooleanField() email: str = StringField() + id: int = IntField() name: str = StringField() orcid: str = StringField() - primary_annotator_status: int = BooleanField() + primary_annotator_status: bool = BooleanField() + primary_author_status: bool = BooleanField() class TiltSeries(Model): """Metadata about how a tilt series was generated, and locations of output files Attributes: - id (int): Numeric identifier for this tilt series (this may change!) - run (Run): An object relationship with the run this tiltseries is a part of - run_id (int): Reference to the run this tiltseries is a part of acceleration_voltage (int): Electron Microscope Accelerator voltage in volts aligned_tiltseries_binning (int): Binning factor of the aligned tilt series binning_from_frames (float): Describes the binning factor from frames to tilt series file - camera_manufacturer: (str): Name of the camera manufacturer + camera_manufacturer (str): Name of the camera manufacturer camera_model (str): Camera model name - data_acquisition_software: (str): Software used to collect data - frames_count (int): Number of frames associated with this tiltseries + data_acquisition_software (str): Software used to collect data + deposition (Deposition): The deposition this tilt series is a part of + deposition_id (int): Reference to the deposition this tiltseries is associated with + frames_count (int): Number of frames associated to the tilt series https_alignment_file (str): HTTPS path to the alignment file for this tiltseries https_angle_list (str): HTTPS path to the angle list file for this tiltseries https_collection_metadata (str): HTTPS path to the collection metadata file for this tiltseries https_mrc_bin1 (str): HTTPS path to this tiltseries in MRC format (no scaling) https_omezarr_dir (str): HTTPS path to this tomogram in multiscale OME-Zarr format - microscope_additional_info (str): Other microscope optical setup information, in addition to energy filter, phase plate and image corrector - microscope_energy_filter: (str): Energy filter setup used + id (int): Numeric identifier for this tilt series (this may change!) + is_aligned (bool): Tilt series is aligned + microscope_additional_info (str): Other microscope optical setup information, in addition to energy filter, phase plate and image corrector + microscope_energy_filter (str): Energy filter setup used microscope_image_corrector (str): Image corrector setup microscope_manufacturer (str): Name of the microscope manufacturer microscope_model (str): Microscope model name microscope_phase_plate (str): Phase plate configuration - pixel_spacing (float): Pixel spacing for the tilt series - related_empiar_entry (str): If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier - s3_alignment_file (str): S3 path to the alignment file for this tiltseries - s3_angle_list (str): S3 path to the angle list file for this tiltseries + pixel_spacing (float): Pixel spacing equal in both axes in angstroms + related_empiar_entry (str): If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier + run (Run): The run this tilt series is a part of + run_id (int): The ID of the experimental run this tilt series is part of + s3_alignment_file (str): S3 path to the alignment file for this tilt series + s3_angle_list (str): S3 path to the angle list file for this tilt series s3_collection_metadata (str): S3 path to the collection metadata file for this tiltseries s3_mrc_bin1 (str): S3 path to this tiltseries in MRC format (no scaling) s3_omezarr_dir (str): S3 path to this tomogram in multiscale OME-Zarr format @@ -616,16 +621,16 @@ class TiltSeries(Model): total_flux (float): Number of Electrons reaching the specimen in a square Angstrom area for the entire tilt series """ - _gql_type = "tiltseries" - - run: Run = ItemRelationship(Run, "run_id", "id") + _gql_type: str = "tiltseries" acceleration_voltage: int = IntField() aligned_tiltseries_binning: int = IntField() binning_from_frames: float = FloatField() camera_manufacturer: str = StringField() camera_model: str = StringField() - data_acquisition_software: float = FloatField() + data_acquisition_software: str = StringField() + deposition: Deposition = ItemRelationship("Deposition", "deposition_id", "id") + deposition_id: int = IntField() frames_count: int = IntField() https_alignment_file: str = StringField() https_angle_list: str = StringField() @@ -642,6 +647,7 @@ class TiltSeries(Model): microscope_phase_plate: str = StringField() pixel_spacing: float = FloatField() related_empiar_entry: str = StringField() + run: Run = ItemRelationship("Run", "run_id", "id") run_id: int = IntField() s3_alignment_file: str = StringField() s3_angle_list: str = StringField() @@ -704,15 +710,104 @@ def download_mrcfile( download_https(url, dest_path) -# Perform any additional configuration work for these models. +class Deposition(Model): + """Deposition metadata + + Attributes: + annotations (List[Annotation]): The annotations of this deposition + authors (List[DepositionAuthor]): The deposition authors of this deposition + dataset (List[Dataset]): The datasets of this deposition + deposition_date (date): The date the deposition was deposited + deposition_publications (str): The publications related to this deposition + deposition_types (str): The types of data submitted as a part of this deposition + description (str): Description for the deposition + https_prefix (str): The https directory path where data about this deposition is contained + id (int): Numeric identifier for this depositions + key_photo_thumbnail_url (str): URL for the deposition thumbnail image. + key_photo_url (str): URL for the deposition preview image. + last_modified_date (date): The date the deposition was last modified + related_database_entries (str): The related database entries to this deposition + release_date (date): The date the deposition was released + s3_prefix (str): The S3 public bucket path where data about this deposition is contained + tiltseries (List[TiltSeries]): The tilt series of this deposition + title (str): Title for the deposition + tomograms (List[Tomogram]): The tomograms of this deposition + """ + + _gql_type: str = "depositions" + + annotations: List[Annotation] = ListRelationship( + "Annotation", + "id", + "deposition_id", + ) + authors: List[DepositionAuthor] = ListRelationship( + "DepositionAuthor", + "id", + "deposition_id", + ) + dataset: List[Dataset] = ListRelationship("Dataset", "id", "deposition_id") + deposition_date: date = DateField() + deposition_publications: str = StringField() + deposition_types: str = StringField() + description: str = StringField() + https_prefix: str = StringField() + id: int = IntField() + key_photo_thumbnail_url: str = StringField() + key_photo_url: str = StringField() + last_modified_date: date = DateField() + related_database_entries: str = StringField() + release_date: date = DateField() + s3_prefix: str = StringField() + tiltseries: List[TiltSeries] = ListRelationship("TiltSeries", "id", "deposition_id") + title: str = StringField() + tomograms: List[Tomogram] = ListRelationship("Tomogram", "id", "deposition_id") + + +class DepositionAuthor(Model): + """Authors for a deposition + + Attributes: + affiliation_address (str): Address of the institution an author is affiliated with. + affiliation_identifier (str): A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + affiliation_name (str): Name of the institution an author is affiliated with. + author_list_order (int): The order in which the author appears in the publication + corresponding_author_status (bool): Indicates whether an author is the corresponding author + deposition (Deposition): The deposition this deposition author is a part of + deposition_id (int): Reference to the deposition this author contributed to + email (str): Email address for this author + id (int): Numeric identifier for this deposition author (this may change!) + name (str): Full name of a deposition author (e.g. Jane Doe). + orcid (str): A unique, persistent identifier for researchers, provided by ORCID. + primary_author_status (bool): Indicates whether an author is the main person creating the deposition + """ + + _gql_type: str = "deposition_authors" + + affiliation_address: str = StringField() + affiliation_identifier: str = StringField() + affiliation_name: str = StringField() + author_list_order: int = IntField() + corresponding_author_status: bool = BooleanField() + deposition: Deposition = ItemRelationship("Deposition", "deposition_id", "id") + deposition_id: int = IntField() + email: str = StringField() + id: int = IntField() + name: str = StringField() + orcid: str = StringField() + primary_author_status: bool = BooleanField() + + Dataset.setup() DatasetAuthor.setup() DatasetFunding.setup() Run.setup() +TomogramVoxelSpacing.setup() Tomogram.setup() TomogramAuthor.setup() Annotation.setup() -AnnotationFile.setup() # NEW +AnnotationFile.setup() AnnotationAuthor.setup() TiltSeries.setup() -TomogramVoxelSpacing.setup() +Deposition.setup() +DepositionAuthor.setup() diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/data/schema.graphql b/client/python/cryoet_data_portal/src/cryoet_data_portal/data/schema.graphql index 0d71f5156..a5b84c647 100644 --- a/client/python/cryoet_data_portal/src/cryoet_data_portal/data/schema.graphql +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/data/schema.graphql @@ -112,7 +112,7 @@ input _numeric_comparison_exp { _nin: [_numeric!] } -"""Authors for an annotation""" +"""Metadata for an annotation's authors""" type annotation_authors { """Address of the institution an annotator is affiliated with.""" affiliation_address: String @@ -157,6 +157,11 @@ type annotation_authors { Indicating whether an annotator is the main person executing the annotation, especially on manual annotation (YES or NO) """ primary_annotator_status: Boolean + + """ + Indicating whether an author is the main person executing the annotation, especially on manual annotation (YES or NO) + """ + primary_author_status: Boolean } """ @@ -273,6 +278,7 @@ input annotation_authors_bool_exp { name: String_comparison_exp orcid: String_comparison_exp primary_annotator_status: Boolean_comparison_exp + primary_author_status: Boolean_comparison_exp } """aggregate max on columns""" @@ -429,6 +435,7 @@ input annotation_authors_order_by { name: order_by orcid: order_by primary_annotator_status: order_by + primary_author_status: order_by } """ @@ -467,6 +474,9 @@ enum annotation_authors_select_column { """column name""" primary_annotator_status + + """column name""" + primary_author_status } """ @@ -478,6 +488,9 @@ enum annotation_authors_select_column_annotation_authors_aggregate_bool_exp_bool """column name""" primary_annotator_status + + """column name""" + primary_author_status } """ @@ -489,6 +502,9 @@ enum annotation_authors_select_column_annotation_authors_aggregate_bool_exp_bool """column name""" primary_annotator_status + + """column name""" + primary_author_status } """aggregate stddev on columns""" @@ -673,17 +689,21 @@ input annotation_authors_variance_order_by { id: order_by } -"""Information about associated files for a given annotation""" +"""Metadata for an annotation file""" type annotation_files { """An object relationship""" annotation: annotations! + + """The ID of the annotation this file applies to""" annotation_id: Int! - """Format of the annotation object file""" + """File format for this file""" format: String! - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: String! + + """Numeric identifier (May change!)""" id: Int! """ @@ -769,7 +789,10 @@ input annotation_files_aggregate_order_by { """aggregate avg on columns""" type annotation_files_avg_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -777,7 +800,10 @@ type annotation_files_avg_fields { order by avg() on columns of table "annotation_files" """ input annotation_files_avg_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } @@ -800,13 +826,16 @@ input annotation_files_bool_exp { """aggregate max on columns""" type annotation_files_max_fields { + """The ID of the annotation this file applies to""" annotation_id: Int - """Format of the annotation object file""" + """File format for this file""" format: String - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: String + + """Numeric identifier (May change!)""" id: Int """s3 path of the annotation file""" @@ -820,13 +849,16 @@ type annotation_files_max_fields { order by max() on columns of table "annotation_files" """ input annotation_files_max_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by - """Format of the annotation object file""" + """File format for this file""" format: order_by - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: order_by + + """Numeric identifier (May change!)""" id: order_by """s3 path of the annotation file""" @@ -838,13 +870,16 @@ input annotation_files_max_order_by { """aggregate min on columns""" type annotation_files_min_fields { + """The ID of the annotation this file applies to""" annotation_id: Int - """Format of the annotation object file""" + """File format for this file""" format: String - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: String + + """Numeric identifier (May change!)""" id: Int """s3 path of the annotation file""" @@ -858,13 +893,16 @@ type annotation_files_min_fields { order by min() on columns of table "annotation_files" """ input annotation_files_min_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by - """Format of the annotation object file""" + """File format for this file""" format: order_by - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: order_by + + """Numeric identifier (May change!)""" id: order_by """s3 path of the annotation file""" @@ -930,7 +968,10 @@ enum annotation_files_select_column_annotation_files_aggregate_bool_exp_bool_or_ """aggregate stddev on columns""" type annotation_files_stddev_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -938,13 +979,19 @@ type annotation_files_stddev_fields { order by stddev() on columns of table "annotation_files" """ input annotation_files_stddev_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } """aggregate stddev_pop on columns""" type annotation_files_stddev_pop_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -952,13 +999,19 @@ type annotation_files_stddev_pop_fields { order by stddev_pop() on columns of table "annotation_files" """ input annotation_files_stddev_pop_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } """aggregate stddev_samp on columns""" type annotation_files_stddev_samp_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -966,7 +1019,10 @@ type annotation_files_stddev_samp_fields { order by stddev_samp() on columns of table "annotation_files" """ input annotation_files_stddev_samp_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } @@ -983,13 +1039,16 @@ input annotation_files_stream_cursor_input { """Initial value of the column from where the streaming should start""" input annotation_files_stream_cursor_value_input { + """The ID of the annotation this file applies to""" annotation_id: Int - """Format of the annotation object file""" + """File format for this file""" format: String - """https path of the annotation file""" + """HTTPS path for this annotation file""" https_path: String + + """Numeric identifier (May change!)""" id: Int """ @@ -1006,7 +1065,10 @@ input annotation_files_stream_cursor_value_input { """aggregate sum on columns""" type annotation_files_sum_fields { + """The ID of the annotation this file applies to""" annotation_id: Int + + """Numeric identifier (May change!)""" id: Int } @@ -1014,13 +1076,19 @@ type annotation_files_sum_fields { order by sum() on columns of table "annotation_files" """ input annotation_files_sum_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } """aggregate var_pop on columns""" type annotation_files_var_pop_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -1028,13 +1096,19 @@ type annotation_files_var_pop_fields { order by var_pop() on columns of table "annotation_files" """ input annotation_files_var_pop_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } """aggregate var_samp on columns""" type annotation_files_var_samp_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -1042,13 +1116,19 @@ type annotation_files_var_samp_fields { order by var_samp() on columns of table "annotation_files" """ input annotation_files_var_samp_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } """aggregate variance on columns""" type annotation_files_variance_fields { + """The ID of the annotation this file applies to""" annotation_id: Float + + """Numeric identifier (May change!)""" id: Float } @@ -1056,11 +1136,14 @@ type annotation_files_variance_fields { order by variance() on columns of table "annotation_files" """ input annotation_files_variance_order_by { + """The ID of the annotation this file applies to""" annotation_id: order_by + + """Numeric identifier (May change!)""" id: order_by } -"""Inoformation about annotations for a given run""" +"""Metadata for an annotation""" type annotations { """ Describe how the annotation is made (e.g. Manual, crYoLO, Positive Unlabeled Learning, template matching) @@ -1071,6 +1154,8 @@ type annotations { DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ annotation_publication: String + + """Software used for generating this annotation""" annotation_software: String """An array relationship""" @@ -1119,10 +1204,13 @@ type annotations { """ confidence_recall: numeric + """An object relationship""" + deposition: depositions + """Date when an annotation set is initially received by the Data Portal.""" deposition_date: date! - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Int """An array relationship""" @@ -1169,7 +1257,7 @@ type annotations { """Annotation filename used as ground truth for precision and recall""" ground_truth_used: String - """https path for the metadata json file for this annotation""" + """HTTPS path for the metadata json file for this annotation""" https_metadata_path: String! """Numeric identifier (May change!)""" @@ -1183,7 +1271,17 @@ type annotations { """Date when an annotation was last modified in the Data Portal""" last_modified_date: date - """Provides information on the method type used for generating annotation""" + """ + Provides links that generates information on the method used for generating annotation + """ + method_links( + """JSON select path""" + path: String + ): json + + """ + The method type for generating the annotation (e.g. manual, hybrid, automated) + """ method_type: String """Number of objects identified""" @@ -1208,11 +1306,13 @@ type annotations { """Date when annotation data is made public by the Data Portal.""" release_date: date! - """s3 path for the metadata json file for this annotation""" + """S3 path for the metadata json file for this annotation""" s3_metadata_path: String! """An object relationship""" tomogram_voxel_spacing: tomogram_voxel_spacings + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Int } @@ -1297,7 +1397,7 @@ type annotations_avg_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -1305,6 +1405,8 @@ type annotations_avg_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -1322,7 +1424,7 @@ input annotations_avg_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -1330,6 +1432,8 @@ input annotations_avg_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1347,6 +1451,7 @@ input annotations_bool_exp { authors_aggregate: annotation_authors_aggregate_bool_exp confidence_precision: numeric_comparison_exp confidence_recall: numeric_comparison_exp + deposition: depositions_bool_exp deposition_date: date_comparison_exp deposition_id: Int_comparison_exp files: annotation_files_bool_exp @@ -1357,6 +1462,7 @@ input annotations_bool_exp { id: Int_comparison_exp is_curator_recommended: Boolean_comparison_exp last_modified_date: date_comparison_exp + method_links: json_comparison_exp method_type: String_comparison_exp object_count: Int_comparison_exp object_description: String_comparison_exp @@ -1380,6 +1486,8 @@ type annotations_max_fields { DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ annotation_publication: String + + """Software used for generating this annotation""" annotation_software: String """ @@ -1395,13 +1503,13 @@ type annotations_max_fields { """Date when an annotation set is initially received by the Data Portal.""" deposition_date: date - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Int """Annotation filename used as ground truth for precision and recall""" ground_truth_used: String - """https path for the metadata json file for this annotation""" + """HTTPS path for the metadata json file for this annotation""" https_metadata_path: String """Numeric identifier (May change!)""" @@ -1410,7 +1518,9 @@ type annotations_max_fields { """Date when an annotation was last modified in the Data Portal""" last_modified_date: date - """Provides information on the method type used for generating annotation""" + """ + The method type for generating the annotation (e.g. manual, hybrid, automated) + """ method_type: String """Number of objects identified""" @@ -1435,8 +1545,10 @@ type annotations_max_fields { """Date when annotation data is made public by the Data Portal.""" release_date: date - """s3 path for the metadata json file for this annotation""" + """S3 path for the metadata json file for this annotation""" s3_metadata_path: String + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Int } @@ -1453,6 +1565,8 @@ input annotations_max_order_by { DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ annotation_publication: order_by + + """Software used for generating this annotation""" annotation_software: order_by """ @@ -1468,13 +1582,13 @@ input annotations_max_order_by { """Date when an annotation set is initially received by the Data Portal.""" deposition_date: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Annotation filename used as ground truth for precision and recall""" ground_truth_used: order_by - """https path for the metadata json file for this annotation""" + """HTTPS path for the metadata json file for this annotation""" https_metadata_path: order_by """Numeric identifier (May change!)""" @@ -1483,7 +1597,9 @@ input annotations_max_order_by { """Date when an annotation was last modified in the Data Portal""" last_modified_date: order_by - """Provides information on the method type used for generating annotation""" + """ + The method type for generating the annotation (e.g. manual, hybrid, automated) + """ method_type: order_by """Number of objects identified""" @@ -1508,8 +1624,10 @@ input annotations_max_order_by { """Date when annotation data is made public by the Data Portal.""" release_date: order_by - """s3 path for the metadata json file for this annotation""" + """S3 path for the metadata json file for this annotation""" s3_metadata_path: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1524,6 +1642,8 @@ type annotations_min_fields { DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ annotation_publication: String + + """Software used for generating this annotation""" annotation_software: String """ @@ -1539,13 +1659,13 @@ type annotations_min_fields { """Date when an annotation set is initially received by the Data Portal.""" deposition_date: date - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Int """Annotation filename used as ground truth for precision and recall""" ground_truth_used: String - """https path for the metadata json file for this annotation""" + """HTTPS path for the metadata json file for this annotation""" https_metadata_path: String """Numeric identifier (May change!)""" @@ -1554,7 +1674,9 @@ type annotations_min_fields { """Date when an annotation was last modified in the Data Portal""" last_modified_date: date - """Provides information on the method type used for generating annotation""" + """ + The method type for generating the annotation (e.g. manual, hybrid, automated) + """ method_type: String """Number of objects identified""" @@ -1579,8 +1701,10 @@ type annotations_min_fields { """Date when annotation data is made public by the Data Portal.""" release_date: date - """s3 path for the metadata json file for this annotation""" + """S3 path for the metadata json file for this annotation""" s3_metadata_path: String + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Int } @@ -1597,6 +1721,8 @@ input annotations_min_order_by { DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ annotation_publication: order_by + + """Software used for generating this annotation""" annotation_software: order_by """ @@ -1612,13 +1738,13 @@ input annotations_min_order_by { """Date when an annotation set is initially received by the Data Portal.""" deposition_date: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Annotation filename used as ground truth for precision and recall""" ground_truth_used: order_by - """https path for the metadata json file for this annotation""" + """HTTPS path for the metadata json file for this annotation""" https_metadata_path: order_by """Numeric identifier (May change!)""" @@ -1627,7 +1753,9 @@ input annotations_min_order_by { """Date when an annotation was last modified in the Data Portal""" last_modified_date: order_by - """Provides information on the method type used for generating annotation""" + """ + The method type for generating the annotation (e.g. manual, hybrid, automated) + """ method_type: order_by """Number of objects identified""" @@ -1652,8 +1780,10 @@ input annotations_min_order_by { """Date when annotation data is made public by the Data Portal.""" release_date: order_by - """s3 path for the metadata json file for this annotation""" + """S3 path for the metadata json file for this annotation""" s3_metadata_path: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1665,6 +1795,7 @@ input annotations_order_by { authors_aggregate: annotation_authors_aggregate_order_by confidence_precision: order_by confidence_recall: order_by + deposition: depositions_order_by deposition_date: order_by deposition_id: order_by files_aggregate: annotation_files_aggregate_order_by @@ -1674,6 +1805,7 @@ input annotations_order_by { id: order_by is_curator_recommended: order_by last_modified_date: order_by + method_links: order_by method_type: order_by object_count: order_by object_description: order_by @@ -1729,6 +1861,9 @@ enum annotations_select_column { """column name""" last_modified_date + """column name""" + method_links + """column name""" method_type @@ -1791,7 +1926,7 @@ type annotations_stddev_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -1799,6 +1934,8 @@ type annotations_stddev_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -1816,7 +1953,7 @@ input annotations_stddev_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -1824,6 +1961,8 @@ input annotations_stddev_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1839,7 +1978,7 @@ type annotations_stddev_pop_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -1847,6 +1986,8 @@ type annotations_stddev_pop_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -1864,7 +2005,7 @@ input annotations_stddev_pop_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -1872,6 +2013,8 @@ input annotations_stddev_pop_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1887,7 +2030,7 @@ type annotations_stddev_samp_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -1895,6 +2038,8 @@ type annotations_stddev_samp_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -1912,7 +2057,7 @@ input annotations_stddev_samp_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -1920,6 +2065,8 @@ input annotations_stddev_samp_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1935,7 +2082,7 @@ type annotations_sum_fields { """ confidence_recall: numeric - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Int """Numeric identifier (May change!)""" @@ -1943,6 +2090,8 @@ type annotations_sum_fields { """Number of objects identified""" object_count: Int + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Int } @@ -1960,7 +2109,7 @@ input annotations_sum_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -1968,6 +2117,8 @@ input annotations_sum_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -1983,7 +2134,7 @@ type annotations_var_pop_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -1991,6 +2142,8 @@ type annotations_var_pop_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -2008,7 +2161,7 @@ input annotations_var_pop_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -2016,6 +2169,8 @@ input annotations_var_pop_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -2031,7 +2186,7 @@ type annotations_var_samp_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -2039,6 +2194,8 @@ type annotations_var_samp_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -2056,7 +2213,7 @@ input annotations_var_samp_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -2064,6 +2221,8 @@ input annotations_var_samp_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -2079,7 +2238,7 @@ type annotations_variance_fields { """ confidence_recall: Float - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier (May change!)""" @@ -2087,6 +2246,8 @@ type annotations_variance_fields { """Number of objects identified""" object_count: Float + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: Float } @@ -2104,7 +2265,7 @@ input annotations_variance_order_by { """ confidence_recall: order_by - """id of the associated deposition.""" + """If the annotation is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier (May change!)""" @@ -2112,6 +2273,8 @@ input annotations_variance_order_by { """Number of objects identified""" object_count: order_by + + """The ID of the tomogram voxel spacing this annotation is part of""" tomogram_voxel_spacing_id: order_by } @@ -2124,7 +2287,7 @@ enum cursor_ordering { DESC } -"""Authors of a dataset""" +"""Metadata for authors of a dataset""" type dataset_authors { """Address of the institution an author is affiliated with.""" affiliation_address: String @@ -2145,10 +2308,14 @@ type dataset_authors { """An object relationship""" dataset: datasets! + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Int! """Email address for each author""" email: String + + """A numeric identifier for this author (May change!)""" id: Int! """Full name of a dataset author (e.g. Jane Doe).""" @@ -2156,6 +2323,10 @@ type dataset_authors { """A unique, persistent identifier for researchers, provided by ORCID.""" orcid: String + + """ + Indicating whether an author is the main person associated with the corresponding dataset + """ primary_author_status: Boolean } @@ -2232,7 +2403,11 @@ input dataset_authors_aggregate_order_by { type dataset_authors_avg_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2242,7 +2417,11 @@ order by avg() on columns of table "dataset_authors" input dataset_authors_avg_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2282,10 +2461,14 @@ type dataset_authors_max_fields { """The order in which the author appears in the publication""" author_list_order: Int + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Int """Email address for each author""" email: String + + """A numeric identifier for this author (May change!)""" id: Int """Full name of a dataset author (e.g. Jane Doe).""" @@ -2312,10 +2495,14 @@ input dataset_authors_max_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by """Email address for each author""" email: order_by + + """A numeric identifier for this author (May change!)""" id: order_by """Full name of a dataset author (e.g. Jane Doe).""" @@ -2340,10 +2527,14 @@ type dataset_authors_min_fields { """The order in which the author appears in the publication""" author_list_order: Int + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Int """Email address for each author""" email: String + + """A numeric identifier for this author (May change!)""" id: Int """Full name of a dataset author (e.g. Jane Doe).""" @@ -2370,10 +2561,14 @@ input dataset_authors_min_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by """Email address for each author""" email: order_by + + """A numeric identifier for this author (May change!)""" id: order_by """Full name of a dataset author (e.g. Jane Doe).""" @@ -2463,7 +2658,11 @@ enum dataset_authors_select_column_dataset_authors_aggregate_bool_exp_bool_or_ar type dataset_authors_stddev_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2473,7 +2672,11 @@ order by stddev() on columns of table "dataset_authors" input dataset_authors_stddev_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2481,7 +2684,11 @@ input dataset_authors_stddev_order_by { type dataset_authors_stddev_pop_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2491,7 +2698,11 @@ order by stddev_pop() on columns of table "dataset_authors" input dataset_authors_stddev_pop_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2499,7 +2710,11 @@ input dataset_authors_stddev_pop_order_by { type dataset_authors_stddev_samp_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2509,7 +2724,11 @@ order by stddev_samp() on columns of table "dataset_authors" input dataset_authors_stddev_samp_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2517,7 +2736,11 @@ input dataset_authors_stddev_samp_order_by { type dataset_authors_sum_fields { """The order in which the author appears in the publication""" author_list_order: Int + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Int + + """A numeric identifier for this author (May change!)""" id: Int } @@ -2527,7 +2750,11 @@ order by sum() on columns of table "dataset_authors" input dataset_authors_sum_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2535,7 +2762,11 @@ input dataset_authors_sum_order_by { type dataset_authors_var_pop_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2545,7 +2776,11 @@ order by var_pop() on columns of table "dataset_authors" input dataset_authors_var_pop_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2553,7 +2788,11 @@ input dataset_authors_var_pop_order_by { type dataset_authors_var_samp_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2563,7 +2802,11 @@ order by var_samp() on columns of table "dataset_authors" input dataset_authors_var_samp_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } @@ -2571,7 +2814,11 @@ input dataset_authors_var_samp_order_by { type dataset_authors_variance_fields { """The order in which the author appears in the publication""" author_list_order: Float + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: Float + + """A numeric identifier for this author (May change!)""" id: Float } @@ -2581,14 +2828,20 @@ order by variance() on columns of table "dataset_authors" input dataset_authors_variance_order_by { """The order in which the author appears in the publication""" author_list_order: order_by + + """Numeric identifier for the dataset this author corresponds to""" dataset_id: order_by + + """A numeric identifier for this author (May change!)""" id: order_by } -"""Funding sources for a dataset""" +"""Metadata for a dataset's funding sources""" type dataset_funding { """An object relationship""" dataset: datasets! + + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Int! """Name of the funding agency.""" @@ -2596,6 +2849,8 @@ type dataset_funding { """Grant identifier provided by the funding agency.""" grant_id: String + + """A numeric identifier for this funding record (May change!)""" id: Int! } @@ -2654,7 +2909,10 @@ input dataset_funding_aggregate_order_by { """aggregate avg on columns""" type dataset_funding_avg_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2662,7 +2920,10 @@ type dataset_funding_avg_fields { order by avg() on columns of table "dataset_funding" """ input dataset_funding_avg_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } @@ -2682,6 +2943,7 @@ input dataset_funding_bool_exp { """aggregate max on columns""" type dataset_funding_max_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Int """Name of the funding agency.""" @@ -2689,6 +2951,8 @@ type dataset_funding_max_fields { """Grant identifier provided by the funding agency.""" grant_id: String + + """A numeric identifier for this funding record (May change!)""" id: Int } @@ -2696,6 +2960,7 @@ type dataset_funding_max_fields { order by max() on columns of table "dataset_funding" """ input dataset_funding_max_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by """Name of the funding agency.""" @@ -2703,11 +2968,14 @@ input dataset_funding_max_order_by { """Grant identifier provided by the funding agency.""" grant_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate min on columns""" type dataset_funding_min_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Int """Name of the funding agency.""" @@ -2715,6 +2983,8 @@ type dataset_funding_min_fields { """Grant identifier provided by the funding agency.""" grant_id: String + + """A numeric identifier for this funding record (May change!)""" id: Int } @@ -2722,6 +2992,7 @@ type dataset_funding_min_fields { order by min() on columns of table "dataset_funding" """ input dataset_funding_min_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by """Name of the funding agency.""" @@ -2729,6 +3000,8 @@ input dataset_funding_min_order_by { """Grant identifier provided by the funding agency.""" grant_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } @@ -2760,7 +3033,10 @@ enum dataset_funding_select_column { """aggregate stddev on columns""" type dataset_funding_stddev_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2768,13 +3044,19 @@ type dataset_funding_stddev_fields { order by stddev() on columns of table "dataset_funding" """ input dataset_funding_stddev_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate stddev_pop on columns""" type dataset_funding_stddev_pop_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2782,13 +3064,19 @@ type dataset_funding_stddev_pop_fields { order by stddev_pop() on columns of table "dataset_funding" """ input dataset_funding_stddev_pop_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate stddev_samp on columns""" type dataset_funding_stddev_samp_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2796,13 +3084,19 @@ type dataset_funding_stddev_samp_fields { order by stddev_samp() on columns of table "dataset_funding" """ input dataset_funding_stddev_samp_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate sum on columns""" type dataset_funding_sum_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Int + + """A numeric identifier for this funding record (May change!)""" id: Int } @@ -2810,13 +3104,19 @@ type dataset_funding_sum_fields { order by sum() on columns of table "dataset_funding" """ input dataset_funding_sum_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate var_pop on columns""" type dataset_funding_var_pop_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2824,13 +3124,19 @@ type dataset_funding_var_pop_fields { order by var_pop() on columns of table "dataset_funding" """ input dataset_funding_var_pop_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate var_samp on columns""" type dataset_funding_var_samp_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2838,13 +3144,19 @@ type dataset_funding_var_samp_fields { order by var_samp() on columns of table "dataset_funding" """ input dataset_funding_var_samp_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } """aggregate variance on columns""" type dataset_funding_variance_fields { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: Float + + """A numeric identifier for this funding record (May change!)""" id: Float } @@ -2852,11 +3164,14 @@ type dataset_funding_variance_fields { order by variance() on columns of table "dataset_funding" """ input dataset_funding_variance_order_by { + """Numeric identifier for the dataset this funding source corresponds to""" dataset_id: order_by + + """A numeric identifier for this funding record (May change!)""" id: order_by } -"""Dataset Metadata""" +"""Metadata for a dataset""" type datasets { """An array relationship""" authors( @@ -2895,7 +3210,7 @@ type datasets { ): dataset_authors_aggregate! """ - If this dataset only focuses on a specific part of a cell, include the subset here + If the dataset focuses on a specific part of a cell, the subset is included here """ cell_component_id: String @@ -2907,7 +3222,7 @@ type datasets { """ cell_name: String - """NCBI Identifier for the cell line or strain""" + """Link to more information about the cell strain""" cell_strain_id: String """Cell line or strain for the sample.""" @@ -2926,9 +3241,15 @@ type datasets { """ dataset_publications: String + """An object relationship""" + deposition: depositions + """Date when a dataset is initially received by the Data Portal.""" deposition_date: date! + """Reference to the deposition this dataset is associated with""" + deposition_id: Int + """ A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. """ @@ -3009,7 +3330,7 @@ type datasets { related_database_entries: String """ - If a CryoET dataset is also deposited into another database, e.g. EMPAIR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. """ related_database_links: String @@ -3083,6 +3404,17 @@ type datasets_aggregate { nodes: [datasets!]! } +input datasets_aggregate_bool_exp { + count: datasets_aggregate_bool_exp_count +} + +input datasets_aggregate_bool_exp_count { + arguments: [datasets_select_column!] + distinct: Boolean + filter: datasets_bool_exp + predicate: Int_comparison_exp! +} + """ aggregate fields of "datasets" """ @@ -3100,14 +3432,47 @@ type datasets_aggregate_fields { variance: datasets_variance_fields } +""" +order by aggregate values of table "datasets" +""" +input datasets_aggregate_order_by { + avg: datasets_avg_order_by + count: order_by + max: datasets_max_order_by + min: datasets_min_order_by + stddev: datasets_stddev_order_by + stddev_pop: datasets_stddev_pop_order_by + stddev_samp: datasets_stddev_samp_order_by + sum: datasets_sum_order_by + var_pop: datasets_var_pop_order_by + var_samp: datasets_var_samp_order_by + variance: datasets_variance_order_by +} + """aggregate avg on columns""" type datasets_avg_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ id: Float } +""" +order by avg() on columns of table "datasets" +""" +input datasets_avg_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by +} + """ Boolean expression to filter rows from the table "datasets". All fields are combined with a logical 'AND'. """ @@ -3125,7 +3490,9 @@ input datasets_bool_exp { cell_type_id: String_comparison_exp dataset_citations: String_comparison_exp dataset_publications: String_comparison_exp + deposition: depositions_bool_exp deposition_date: date_comparison_exp + deposition_id: Int_comparison_exp description: String_comparison_exp funding_sources: dataset_funding_bool_exp funding_sources_aggregate: dataset_funding_aggregate_bool_exp @@ -3154,7 +3521,7 @@ input datasets_bool_exp { """aggregate max on columns""" type datasets_max_fields { """ - If this dataset only focuses on a specific part of a cell, include the subset here + If the dataset focuses on a specific part of a cell, the subset is included here """ cell_component_id: String @@ -3166,7 +3533,7 @@ type datasets_max_fields { """ cell_name: String - """NCBI Identifier for the cell line or strain""" + """Link to more information about the cell strain""" cell_strain_id: String """Cell line or strain for the sample.""" @@ -3188,6 +3555,9 @@ type datasets_max_fields { """Date when a dataset is initially received by the Data Portal.""" deposition_date: date + """Reference to the deposition this dataset is associated with""" + deposition_id: Int + """ A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. """ @@ -3232,7 +3602,7 @@ type datasets_max_fields { related_database_entries: String """ - If a CryoET dataset is also deposited into another database, e.g. EMPAIR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. """ related_database_links: String @@ -3262,104 +3632,223 @@ type datasets_max_fields { title: String } -"""aggregate min on columns""" -type datasets_min_fields { +""" +order by max() on columns of table "datasets" +""" +input datasets_max_order_by { """ - If this dataset only focuses on a specific part of a cell, include the subset here + If the dataset focuses on a specific part of a cell, the subset is included here """ - cell_component_id: String + cell_component_id: order_by """Name of the cellular component""" - cell_component_name: String + cell_component_name: order_by """ Name of the cell from which a biological sample used in a CryoET study is derived from. """ - cell_name: String + cell_name: order_by - """NCBI Identifier for the cell line or strain""" - cell_strain_id: String + """Link to more information about the cell strain""" + cell_strain_id: order_by """Cell line or strain for the sample.""" - cell_strain_name: String + cell_strain_name: order_by """Cell Ontology identifier for the cell type""" - cell_type_id: String + cell_type_id: order_by """ DOIs for publications that cite the dataset. Use a comma to separate multiple DOIs. """ - dataset_citations: String + dataset_citations: order_by """ DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. """ - dataset_publications: String + dataset_publications: order_by """Date when a dataset is initially received by the Data Portal.""" - deposition_date: date + deposition_date: order_by + + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by """ A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. """ - description: String + description: order_by """Describe Cryo-ET grid preparation.""" - grid_preparation: String + grid_preparation: order_by """The https directory path where this dataset is contained""" - https_prefix: String + https_prefix: order_by """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ - id: Int + id: order_by """URL for the thumbnail of preview image.""" - key_photo_thumbnail_url: String + key_photo_thumbnail_url: order_by """URL for the dataset preview image.""" - key_photo_url: String + key_photo_url: order_by """Date when a released dataset is last modified.""" - last_modified_date: date + last_modified_date: order_by """ Name of the organism from which a biological sample used in a CryoET study is derived from, e.g. homo sapiens """ - organism_name: String + organism_name: order_by """NCBI taxonomy identifier for the organism, e.g. 9606""" - organism_taxid: String + organism_taxid: order_by """ Describe other setup not covered by sample preparation or grid preparation that may make this dataset unique in the same publication """ - other_setup: String + other_setup: order_by """ If a CryoET dataset is also deposited into another database, enter the database identifier here (e.g. EMPIAR-11445). Use a comma to separate multiple identifiers. """ - related_database_entries: String + related_database_entries: order_by """ - If a CryoET dataset is also deposited into another database, e.g. EMPAIR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. """ - related_database_links: String + related_database_links: order_by """Date when a dataset is made available on the Data Portal.""" - release_date: date + release_date: order_by """The S3 public bucket path where this dataset is contained""" - s3_prefix: String + s3_prefix: order_by """Describe how the sample was prepared.""" - sample_preparation: String + sample_preparation: order_by """ Type of samples used in a CryoET study. (cell, tissue, organism, intact organelle, in-vitro mixture, in-silico synthetic data, other) """ - sample_type: String + sample_type: order_by + + """UBERON identifier for the tissue""" + tissue_id: order_by + + """ + Name of the tissue from which a biological sample used in a CryoET study is derived from. + """ + tissue_name: order_by + + """Title of a CryoET dataset""" + title: order_by +} + +"""aggregate min on columns""" +type datasets_min_fields { + """ + If the dataset focuses on a specific part of a cell, the subset is included here + """ + cell_component_id: String + + """Name of the cellular component""" + cell_component_name: String + + """ + Name of the cell from which a biological sample used in a CryoET study is derived from. + """ + cell_name: String + + """Link to more information about the cell strain""" + cell_strain_id: String + + """Cell line or strain for the sample.""" + cell_strain_name: String + + """Cell Ontology identifier for the cell type""" + cell_type_id: String + + """ + DOIs for publications that cite the dataset. Use a comma to separate multiple DOIs. + """ + dataset_citations: String + + """ + DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. + """ + dataset_publications: String + + """Date when a dataset is initially received by the Data Portal.""" + deposition_date: date + + """Reference to the deposition this dataset is associated with""" + deposition_id: Int + + """ + A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. + """ + description: String + + """Describe Cryo-ET grid preparation.""" + grid_preparation: String + + """The https directory path where this dataset is contained""" + https_prefix: String + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: Int + + """URL for the thumbnail of preview image.""" + key_photo_thumbnail_url: String + + """URL for the dataset preview image.""" + key_photo_url: String + + """Date when a released dataset is last modified.""" + last_modified_date: date + + """ + Name of the organism from which a biological sample used in a CryoET study is derived from, e.g. homo sapiens + """ + organism_name: String + + """NCBI taxonomy identifier for the organism, e.g. 9606""" + organism_taxid: String + + """ + Describe other setup not covered by sample preparation or grid preparation that may make this dataset unique in the same publication + """ + other_setup: String + + """ + If a CryoET dataset is also deposited into another database, enter the database identifier here (e.g. EMPIAR-11445). Use a comma to separate multiple identifiers. + """ + related_database_entries: String + + """ + If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + """ + related_database_links: String + + """Date when a dataset is made available on the Data Portal.""" + release_date: date + + """The S3 public bucket path where this dataset is contained""" + s3_prefix: String + + """Describe how the sample was prepared.""" + sample_preparation: String + + """ + Type of samples used in a CryoET study. (cell, tissue, organism, intact organelle, in-vitro mixture, in-silico synthetic data, other) + """ + sample_type: String """UBERON identifier for the tissue""" tissue_id: String @@ -3373,6 +3862,122 @@ type datasets_min_fields { title: String } +""" +order by min() on columns of table "datasets" +""" +input datasets_min_order_by { + """ + If the dataset focuses on a specific part of a cell, the subset is included here + """ + cell_component_id: order_by + + """Name of the cellular component""" + cell_component_name: order_by + + """ + Name of the cell from which a biological sample used in a CryoET study is derived from. + """ + cell_name: order_by + + """Link to more information about the cell strain""" + cell_strain_id: order_by + + """Cell line or strain for the sample.""" + cell_strain_name: order_by + + """Cell Ontology identifier for the cell type""" + cell_type_id: order_by + + """ + DOIs for publications that cite the dataset. Use a comma to separate multiple DOIs. + """ + dataset_citations: order_by + + """ + DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs. + """ + dataset_publications: order_by + + """Date when a dataset is initially received by the Data Portal.""" + deposition_date: order_by + + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + A short description of a CryoET dataset, similar to an abstract for a journal article or dataset. + """ + description: order_by + + """Describe Cryo-ET grid preparation.""" + grid_preparation: order_by + + """The https directory path where this dataset is contained""" + https_prefix: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by + + """URL for the thumbnail of preview image.""" + key_photo_thumbnail_url: order_by + + """URL for the dataset preview image.""" + key_photo_url: order_by + + """Date when a released dataset is last modified.""" + last_modified_date: order_by + + """ + Name of the organism from which a biological sample used in a CryoET study is derived from, e.g. homo sapiens + """ + organism_name: order_by + + """NCBI taxonomy identifier for the organism, e.g. 9606""" + organism_taxid: order_by + + """ + Describe other setup not covered by sample preparation or grid preparation that may make this dataset unique in the same publication + """ + other_setup: order_by + + """ + If a CryoET dataset is also deposited into another database, enter the database identifier here (e.g. EMPIAR-11445). Use a comma to separate multiple identifiers. + """ + related_database_entries: order_by + + """ + If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links. + """ + related_database_links: order_by + + """Date when a dataset is made available on the Data Portal.""" + release_date: order_by + + """The S3 public bucket path where this dataset is contained""" + s3_prefix: order_by + + """Describe how the sample was prepared.""" + sample_preparation: order_by + + """ + Type of samples used in a CryoET study. (cell, tissue, organism, intact organelle, in-vitro mixture, in-silico synthetic data, other) + """ + sample_type: order_by + + """UBERON identifier for the tissue""" + tissue_id: order_by + + """ + Name of the tissue from which a biological sample used in a CryoET study is derived from. + """ + tissue_name: order_by + + """Title of a CryoET dataset""" + title: order_by +} + """Ordering options when selecting data from "datasets".""" input datasets_order_by { authors_aggregate: dataset_authors_aggregate_order_by @@ -3384,7 +3989,9 @@ input datasets_order_by { cell_type_id: order_by dataset_citations: order_by dataset_publications: order_by + deposition: depositions_order_by deposition_date: order_by + deposition_id: order_by description: order_by funding_sources_aggregate: dataset_funding_aggregate_order_by grid_preparation: order_by @@ -3439,6 +4046,9 @@ enum datasets_select_column { """column name""" deposition_date + """column name""" + deposition_id + """column name""" description @@ -3499,75 +4109,1338 @@ enum datasets_select_column { """aggregate stddev on columns""" type datasets_stddev_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ id: Float } -"""aggregate stddev_pop on columns""" -type datasets_stddev_pop_fields { +""" +order by stddev() on columns of table "datasets" +""" +input datasets_stddev_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ - id: Float + id: order_by } -"""aggregate stddev_samp on columns""" -type datasets_stddev_samp_fields { +"""aggregate stddev_pop on columns""" +type datasets_stddev_pop_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ id: Float } -"""aggregate sum on columns""" -type datasets_sum_fields { +""" +order by stddev_pop() on columns of table "datasets" +""" +input datasets_stddev_pop_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ - id: Int + id: order_by } -"""aggregate var_pop on columns""" -type datasets_var_pop_fields { +"""aggregate stddev_samp on columns""" +type datasets_stddev_samp_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ id: Float } -"""aggregate var_samp on columns""" -type datasets_var_samp_fields { +""" +order by stddev_samp() on columns of table "datasets" +""" +input datasets_stddev_samp_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by +} + +"""aggregate sum on columns""" +type datasets_sum_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Int + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: Int +} + +""" +order by sum() on columns of table "datasets" +""" +input datasets_sum_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by +} + +"""aggregate var_pop on columns""" +type datasets_var_pop_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: Float +} + +""" +order by var_pop() on columns of table "datasets" +""" +input datasets_var_pop_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by +} + +"""aggregate var_samp on columns""" +type datasets_var_samp_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: Float +} + +""" +order by var_samp() on columns of table "datasets" +""" +input datasets_var_samp_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + """ An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree """ + id: order_by +} + +"""aggregate variance on columns""" +type datasets_variance_fields { + """Reference to the deposition this dataset is associated with""" + deposition_id: Float + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: Float +} + +""" +order by variance() on columns of table "datasets" +""" +input datasets_variance_order_by { + """Reference to the deposition this dataset is associated with""" + deposition_id: order_by + + """ + An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree + """ + id: order_by +} + +scalar date + +""" +Boolean expression to compare columns of type "date". All fields are combined with logical 'AND'. +""" +input date_comparison_exp { + _eq: date + _gt: date + _gte: date + _in: [date!] + _is_null: Boolean + _lt: date + _lte: date + _neq: date + _nin: [date!] +} + +"""Authors for a deposition""" +type deposition_authors { + """Address of the institution an author is affiliated with.""" + affiliation_address: String + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: String + + """Name of the institution an author is affiliated with.""" + affiliation_name: String + + """The order in which the author appears in the publication""" + author_list_order: Int! + + """Indicates whether an author is the corresponding author""" + corresponding_author_status: Boolean + + """An object relationship""" + deposition: depositions! + + """Reference to the deposition this author contributed to""" + deposition_id: Int! + + """Email address for this author""" + email: String + + """Numeric identifier for this deposition author (this may change!)""" + id: Int! + + """Full name of a deposition author (e.g. Jane Doe).""" + name: String! + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: String + + """Indicates whether an author is the main person creating the deposition""" + primary_author_status: Boolean +} + +""" +aggregated selection of "deposition_authors" +""" +type deposition_authors_aggregate { + aggregate: deposition_authors_aggregate_fields + nodes: [deposition_authors!]! +} + +input deposition_authors_aggregate_bool_exp { + bool_and: deposition_authors_aggregate_bool_exp_bool_and + bool_or: deposition_authors_aggregate_bool_exp_bool_or + count: deposition_authors_aggregate_bool_exp_count +} + +input deposition_authors_aggregate_bool_exp_bool_and { + arguments: deposition_authors_select_column_deposition_authors_aggregate_bool_exp_bool_and_arguments_columns! + distinct: Boolean + filter: deposition_authors_bool_exp + predicate: Boolean_comparison_exp! +} + +input deposition_authors_aggregate_bool_exp_bool_or { + arguments: deposition_authors_select_column_deposition_authors_aggregate_bool_exp_bool_or_arguments_columns! + distinct: Boolean + filter: deposition_authors_bool_exp + predicate: Boolean_comparison_exp! +} + +input deposition_authors_aggregate_bool_exp_count { + arguments: [deposition_authors_select_column!] + distinct: Boolean + filter: deposition_authors_bool_exp + predicate: Int_comparison_exp! +} + +""" +aggregate fields of "deposition_authors" +""" +type deposition_authors_aggregate_fields { + avg: deposition_authors_avg_fields + count(columns: [deposition_authors_select_column!], distinct: Boolean): Int! + max: deposition_authors_max_fields + min: deposition_authors_min_fields + stddev: deposition_authors_stddev_fields + stddev_pop: deposition_authors_stddev_pop_fields + stddev_samp: deposition_authors_stddev_samp_fields + sum: deposition_authors_sum_fields + var_pop: deposition_authors_var_pop_fields + var_samp: deposition_authors_var_samp_fields + variance: deposition_authors_variance_fields +} + +""" +order by aggregate values of table "deposition_authors" +""" +input deposition_authors_aggregate_order_by { + avg: deposition_authors_avg_order_by + count: order_by + max: deposition_authors_max_order_by + min: deposition_authors_min_order_by + stddev: deposition_authors_stddev_order_by + stddev_pop: deposition_authors_stddev_pop_order_by + stddev_samp: deposition_authors_stddev_samp_order_by + sum: deposition_authors_sum_order_by + var_pop: deposition_authors_var_pop_order_by + var_samp: deposition_authors_var_samp_order_by + variance: deposition_authors_variance_order_by +} + +"""aggregate avg on columns""" +type deposition_authors_avg_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by avg() on columns of table "deposition_authors" +""" +input deposition_authors_avg_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +""" +Boolean expression to filter rows from the table "deposition_authors". All fields are combined with a logical 'AND'. +""" +input deposition_authors_bool_exp { + _and: [deposition_authors_bool_exp!] + _not: deposition_authors_bool_exp + _or: [deposition_authors_bool_exp!] + affiliation_address: String_comparison_exp + affiliation_identifier: String_comparison_exp + affiliation_name: String_comparison_exp + author_list_order: Int_comparison_exp + corresponding_author_status: Boolean_comparison_exp + deposition: depositions_bool_exp + deposition_id: Int_comparison_exp + email: String_comparison_exp + id: Int_comparison_exp + name: String_comparison_exp + orcid: String_comparison_exp + primary_author_status: Boolean_comparison_exp +} + +"""aggregate max on columns""" +type deposition_authors_max_fields { + """Address of the institution an author is affiliated with.""" + affiliation_address: String + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: String + + """Name of the institution an author is affiliated with.""" + affiliation_name: String + + """The order in which the author appears in the publication""" + author_list_order: Int + + """Reference to the deposition this author contributed to""" + deposition_id: Int + + """Email address for this author""" + email: String + + """Numeric identifier for this deposition author (this may change!)""" + id: Int + + """Full name of a deposition author (e.g. Jane Doe).""" + name: String + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: String +} + +""" +order by max() on columns of table "deposition_authors" +""" +input deposition_authors_max_order_by { + """Address of the institution an author is affiliated with.""" + affiliation_address: order_by + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: order_by + + """Name of the institution an author is affiliated with.""" + affiliation_name: order_by + + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Email address for this author""" + email: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by + + """Full name of a deposition author (e.g. Jane Doe).""" + name: order_by + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: order_by +} + +"""aggregate min on columns""" +type deposition_authors_min_fields { + """Address of the institution an author is affiliated with.""" + affiliation_address: String + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: String + + """Name of the institution an author is affiliated with.""" + affiliation_name: String + + """The order in which the author appears in the publication""" + author_list_order: Int + + """Reference to the deposition this author contributed to""" + deposition_id: Int + + """Email address for this author""" + email: String + + """Numeric identifier for this deposition author (this may change!)""" + id: Int + + """Full name of a deposition author (e.g. Jane Doe).""" + name: String + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: String +} + +""" +order by min() on columns of table "deposition_authors" +""" +input deposition_authors_min_order_by { + """Address of the institution an author is affiliated with.""" + affiliation_address: order_by + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: order_by + + """Name of the institution an author is affiliated with.""" + affiliation_name: order_by + + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Email address for this author""" + email: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by + + """Full name of a deposition author (e.g. Jane Doe).""" + name: order_by + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: order_by +} + +"""Ordering options when selecting data from "deposition_authors".""" +input deposition_authors_order_by { + affiliation_address: order_by + affiliation_identifier: order_by + affiliation_name: order_by + author_list_order: order_by + corresponding_author_status: order_by + deposition: depositions_order_by + deposition_id: order_by + email: order_by + id: order_by + name: order_by + orcid: order_by + primary_author_status: order_by +} + +""" +select columns of table "deposition_authors" +""" +enum deposition_authors_select_column { + """column name""" + affiliation_address + + """column name""" + affiliation_identifier + + """column name""" + affiliation_name + + """column name""" + author_list_order + + """column name""" + corresponding_author_status + + """column name""" + deposition_id + + """column name""" + email + + """column name""" + id + + """column name""" + name + + """column name""" + orcid + + """column name""" + primary_author_status +} + +""" +select "deposition_authors_aggregate_bool_exp_bool_and_arguments_columns" columns of table "deposition_authors" +""" +enum deposition_authors_select_column_deposition_authors_aggregate_bool_exp_bool_and_arguments_columns { + """column name""" + corresponding_author_status + + """column name""" + primary_author_status +} + +""" +select "deposition_authors_aggregate_bool_exp_bool_or_arguments_columns" columns of table "deposition_authors" +""" +enum deposition_authors_select_column_deposition_authors_aggregate_bool_exp_bool_or_arguments_columns { + """column name""" + corresponding_author_status + + """column name""" + primary_author_status +} + +"""aggregate stddev on columns""" +type deposition_authors_stddev_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by stddev() on columns of table "deposition_authors" +""" +input deposition_authors_stddev_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""aggregate stddev_pop on columns""" +type deposition_authors_stddev_pop_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by stddev_pop() on columns of table "deposition_authors" +""" +input deposition_authors_stddev_pop_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""aggregate stddev_samp on columns""" +type deposition_authors_stddev_samp_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by stddev_samp() on columns of table "deposition_authors" +""" +input deposition_authors_stddev_samp_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +""" +Streaming cursor of the table "deposition_authors" +""" +input deposition_authors_stream_cursor_input { + """Stream column input with initial value""" + initial_value: deposition_authors_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input deposition_authors_stream_cursor_value_input { + """Address of the institution an author is affiliated with.""" + affiliation_address: String + + """ + A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR). + """ + affiliation_identifier: String + + """Name of the institution an author is affiliated with.""" + affiliation_name: String + + """The order in which the author appears in the publication""" + author_list_order: Int + + """Indicates whether an author is the corresponding author""" + corresponding_author_status: Boolean + + """Reference to the deposition this author contributed to""" + deposition_id: Int + + """Email address for this author""" + email: String + + """Numeric identifier for this deposition author (this may change!)""" + id: Int + + """Full name of a deposition author (e.g. Jane Doe).""" + name: String + + """A unique, persistent identifier for researchers, provided by ORCID.""" + orcid: String + + """Indicates whether an author is the main person creating the deposition""" + primary_author_status: Boolean +} + +"""aggregate sum on columns""" +type deposition_authors_sum_fields { + """The order in which the author appears in the publication""" + author_list_order: Int + + """Reference to the deposition this author contributed to""" + deposition_id: Int + + """Numeric identifier for this deposition author (this may change!)""" + id: Int +} + +""" +order by sum() on columns of table "deposition_authors" +""" +input deposition_authors_sum_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""aggregate var_pop on columns""" +type deposition_authors_var_pop_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by var_pop() on columns of table "deposition_authors" +""" +input deposition_authors_var_pop_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""aggregate var_samp on columns""" +type deposition_authors_var_samp_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by var_samp() on columns of table "deposition_authors" +""" +input deposition_authors_var_samp_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""aggregate variance on columns""" +type deposition_authors_variance_fields { + """The order in which the author appears in the publication""" + author_list_order: Float + + """Reference to the deposition this author contributed to""" + deposition_id: Float + + """Numeric identifier for this deposition author (this may change!)""" + id: Float +} + +""" +order by variance() on columns of table "deposition_authors" +""" +input deposition_authors_variance_order_by { + """The order in which the author appears in the publication""" + author_list_order: order_by + + """Reference to the deposition this author contributed to""" + deposition_id: order_by + + """Numeric identifier for this deposition author (this may change!)""" + id: order_by +} + +"""Deposition metadata""" +type depositions { + """An array relationship""" + annotations( + """distinct select on columns""" + distinct_on: [annotations_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [annotations_order_by!] + + """filter the rows returned""" + where: annotations_bool_exp + ): [annotations!]! + + """An aggregate relationship""" + annotations_aggregate( + """distinct select on columns""" + distinct_on: [annotations_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [annotations_order_by!] + + """filter the rows returned""" + where: annotations_bool_exp + ): annotations_aggregate! + + """An array relationship""" + authors( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): [deposition_authors!]! + + """An aggregate relationship""" + authors_aggregate( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): deposition_authors_aggregate! + + """An array relationship""" + dataset( + """distinct select on columns""" + distinct_on: [datasets_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [datasets_order_by!] + + """filter the rows returned""" + where: datasets_bool_exp + ): [datasets!]! + + """An aggregate relationship""" + dataset_aggregate( + """distinct select on columns""" + distinct_on: [datasets_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [datasets_order_by!] + + """filter the rows returned""" + where: datasets_bool_exp + ): datasets_aggregate! + + """The date the deposition was deposited""" + deposition_date: date! + + """The publications related to this deposition""" + deposition_publications: String + + """The types of data submitted as a part of this deposition""" + deposition_types: String! + + """Description for the deposition""" + description: String! + + """The https directory path where data about this deposition is contained""" + https_prefix: String + + """Numeric identifier for this depositions""" + id: Int! + + """URL for the deposition thumbnail image.""" + key_photo_thumbnail_url: String + + """URL for the deposition preview image.""" + key_photo_url: String + + """The date the deposition was last modified""" + last_modified_date: date! + + """The related database entries to this deposition""" + related_database_entries: String + + """The date the deposition was released""" + release_date: date! + + """ + The S3 public bucket path where data about this deposition is contained + """ + s3_prefix: String + + """An array relationship""" + tiltseries( + """distinct select on columns""" + distinct_on: [tiltseries_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [tiltseries_order_by!] + + """filter the rows returned""" + where: tiltseries_bool_exp + ): [tiltseries!]! + + """An aggregate relationship""" + tiltseries_aggregate( + """distinct select on columns""" + distinct_on: [tiltseries_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [tiltseries_order_by!] + + """filter the rows returned""" + where: tiltseries_bool_exp + ): tiltseries_aggregate! + + """Title for the deposition""" + title: String! + + """An array relationship""" + tomograms( + """distinct select on columns""" + distinct_on: [tomograms_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [tomograms_order_by!] + + """filter the rows returned""" + where: tomograms_bool_exp + ): [tomograms!]! + + """An aggregate relationship""" + tomograms_aggregate( + """distinct select on columns""" + distinct_on: [tomograms_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [tomograms_order_by!] + + """filter the rows returned""" + where: tomograms_bool_exp + ): tomograms_aggregate! +} + +""" +aggregated selection of "depositions" +""" +type depositions_aggregate { + aggregate: depositions_aggregate_fields + nodes: [depositions!]! +} + +""" +aggregate fields of "depositions" +""" +type depositions_aggregate_fields { + avg: depositions_avg_fields + count(columns: [depositions_select_column!], distinct: Boolean): Int! + max: depositions_max_fields + min: depositions_min_fields + stddev: depositions_stddev_fields + stddev_pop: depositions_stddev_pop_fields + stddev_samp: depositions_stddev_samp_fields + sum: depositions_sum_fields + var_pop: depositions_var_pop_fields + var_samp: depositions_var_samp_fields + variance: depositions_variance_fields +} + +"""aggregate avg on columns""" +type depositions_avg_fields { + """Numeric identifier for this depositions""" + id: Float +} + +""" +Boolean expression to filter rows from the table "depositions". All fields are combined with a logical 'AND'. +""" +input depositions_bool_exp { + _and: [depositions_bool_exp!] + _not: depositions_bool_exp + _or: [depositions_bool_exp!] + annotations: annotations_bool_exp + annotations_aggregate: annotations_aggregate_bool_exp + authors: deposition_authors_bool_exp + authors_aggregate: deposition_authors_aggregate_bool_exp + dataset: datasets_bool_exp + dataset_aggregate: datasets_aggregate_bool_exp + deposition_date: date_comparison_exp + deposition_publications: String_comparison_exp + deposition_types: String_comparison_exp + description: String_comparison_exp + https_prefix: String_comparison_exp + id: Int_comparison_exp + key_photo_thumbnail_url: String_comparison_exp + key_photo_url: String_comparison_exp + last_modified_date: date_comparison_exp + related_database_entries: String_comparison_exp + release_date: date_comparison_exp + s3_prefix: String_comparison_exp + tiltseries: tiltseries_bool_exp + tiltseries_aggregate: tiltseries_aggregate_bool_exp + title: String_comparison_exp + tomograms: tomograms_bool_exp + tomograms_aggregate: tomograms_aggregate_bool_exp +} + +"""aggregate max on columns""" +type depositions_max_fields { + """The date the deposition was deposited""" + deposition_date: date + + """The publications related to this deposition""" + deposition_publications: String + + """The types of data submitted as a part of this deposition""" + deposition_types: String + + """Description for the deposition""" + description: String + + """The https directory path where data about this deposition is contained""" + https_prefix: String + + """Numeric identifier for this depositions""" + id: Int + + """URL for the deposition thumbnail image.""" + key_photo_thumbnail_url: String + + """URL for the deposition preview image.""" + key_photo_url: String + + """The date the deposition was last modified""" + last_modified_date: date + + """The related database entries to this deposition""" + related_database_entries: String + + """The date the deposition was released""" + release_date: date + + """ + The S3 public bucket path where data about this deposition is contained + """ + s3_prefix: String + + """Title for the deposition""" + title: String +} + +"""aggregate min on columns""" +type depositions_min_fields { + """The date the deposition was deposited""" + deposition_date: date + + """The publications related to this deposition""" + deposition_publications: String + + """The types of data submitted as a part of this deposition""" + deposition_types: String + + """Description for the deposition""" + description: String + + """The https directory path where data about this deposition is contained""" + https_prefix: String + + """Numeric identifier for this depositions""" + id: Int + + """URL for the deposition thumbnail image.""" + key_photo_thumbnail_url: String + + """URL for the deposition preview image.""" + key_photo_url: String + + """The date the deposition was last modified""" + last_modified_date: date + + """The related database entries to this deposition""" + related_database_entries: String + + """The date the deposition was released""" + release_date: date + + """ + The S3 public bucket path where data about this deposition is contained + """ + s3_prefix: String + + """Title for the deposition""" + title: String +} + +"""Ordering options when selecting data from "depositions".""" +input depositions_order_by { + annotations_aggregate: annotations_aggregate_order_by + authors_aggregate: deposition_authors_aggregate_order_by + dataset_aggregate: datasets_aggregate_order_by + deposition_date: order_by + deposition_publications: order_by + deposition_types: order_by + description: order_by + https_prefix: order_by + id: order_by + key_photo_thumbnail_url: order_by + key_photo_url: order_by + last_modified_date: order_by + related_database_entries: order_by + release_date: order_by + s3_prefix: order_by + tiltseries_aggregate: tiltseries_aggregate_order_by + title: order_by + tomograms_aggregate: tomograms_aggregate_order_by +} + +""" +select columns of table "depositions" +""" +enum depositions_select_column { + """column name""" + deposition_date + + """column name""" + deposition_publications + + """column name""" + deposition_types + + """column name""" + description + + """column name""" + https_prefix + + """column name""" + id + + """column name""" + key_photo_thumbnail_url + + """column name""" + key_photo_url + + """column name""" + last_modified_date + + """column name""" + related_database_entries + + """column name""" + release_date + + """column name""" + s3_prefix + + """column name""" + title +} + +"""aggregate stddev on columns""" +type depositions_stddev_fields { + """Numeric identifier for this depositions""" + id: Float +} + +"""aggregate stddev_pop on columns""" +type depositions_stddev_pop_fields { + """Numeric identifier for this depositions""" + id: Float +} + +"""aggregate stddev_samp on columns""" +type depositions_stddev_samp_fields { + """Numeric identifier for this depositions""" + id: Float +} + +""" +Streaming cursor of the table "depositions" +""" +input depositions_stream_cursor_input { + """Stream column input with initial value""" + initial_value: depositions_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input depositions_stream_cursor_value_input { + """The date the deposition was deposited""" + deposition_date: date + + """The publications related to this deposition""" + deposition_publications: String + + """The types of data submitted as a part of this deposition""" + deposition_types: String + + """Description for the deposition""" + description: String + + """The https directory path where data about this deposition is contained""" + https_prefix: String + + """Numeric identifier for this depositions""" + id: Int + + """URL for the deposition thumbnail image.""" + key_photo_thumbnail_url: String + + """URL for the deposition preview image.""" + key_photo_url: String + + """The date the deposition was last modified""" + last_modified_date: date + + """The related database entries to this deposition""" + related_database_entries: String + + """The date the deposition was released""" + release_date: date + + """ + The S3 public bucket path where data about this deposition is contained + """ + s3_prefix: String + + """Title for the deposition""" + title: String +} + +"""aggregate sum on columns""" +type depositions_sum_fields { + """Numeric identifier for this depositions""" + id: Int +} + +"""aggregate var_pop on columns""" +type depositions_var_pop_fields { + """Numeric identifier for this depositions""" + id: Float +} + +"""aggregate var_samp on columns""" +type depositions_var_samp_fields { + """Numeric identifier for this depositions""" id: Float } """aggregate variance on columns""" -type datasets_variance_fields { - """ - An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree - """ +type depositions_variance_fields { + """Numeric identifier for this depositions""" id: Float } -scalar date +scalar json """ -Boolean expression to compare columns of type "date". All fields are combined with logical 'AND'. +Boolean expression to compare columns of type "json". All fields are combined with logical 'AND'. """ -input date_comparison_exp { - _eq: date - _gt: date - _gte: date - _in: [date!] +input json_comparison_exp { + _eq: json + _gt: json + _gte: json + _in: [json!] _is_null: Boolean - _lt: date - _lte: date - _neq: date - _nin: [date!] + _lt: json + _lte: json + _neq: json + _nin: [json!] } scalar numeric @@ -3700,7 +5573,10 @@ type query_root { """ fetch data from the table: "annotation_files" using primary key columns """ - annotation_files_by_pk(id: Int!): annotation_files + annotation_files_by_pk( + """Numeric identifier (May change!)""" + id: Int! + ): annotation_files """An array relationship""" annotations( @@ -3785,7 +5661,10 @@ type query_root { ): dataset_authors_aggregate! """fetch data from the table: "dataset_authors" using primary key columns""" - dataset_authors_by_pk(id: Int!): dataset_authors + dataset_authors_by_pk( + """A numeric identifier for this author (May change!)""" + id: Int! + ): dataset_authors """ fetch data from the table: "dataset_funding" @@ -3828,7 +5707,10 @@ type query_root { ): dataset_funding_aggregate! """fetch data from the table: "dataset_funding" using primary key columns""" - dataset_funding_by_pk(id: Int!): dataset_funding + dataset_funding_by_pk( + """A numeric identifier for this funding record (May change!)""" + id: Int! + ): dataset_funding """ fetch data from the table: "datasets" @@ -3878,6 +5760,100 @@ type query_root { id: Int! ): datasets + """ + fetch data from the table: "deposition_authors" + """ + deposition_authors( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): [deposition_authors!]! + + """ + fetch aggregated fields from the table: "deposition_authors" + """ + deposition_authors_aggregate( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): deposition_authors_aggregate! + + """ + fetch data from the table: "deposition_authors" using primary key columns + """ + deposition_authors_by_pk( + """Numeric identifier for this deposition author (this may change!)""" + id: Int! + ): deposition_authors + + """ + fetch data from the table: "depositions" + """ + depositions( + """distinct select on columns""" + distinct_on: [depositions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [depositions_order_by!] + + """filter the rows returned""" + where: depositions_bool_exp + ): [depositions!]! + + """ + fetch aggregated fields from the table: "depositions" + """ + depositions_aggregate( + """distinct select on columns""" + distinct_on: [depositions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [depositions_order_by!] + + """filter the rows returned""" + where: depositions_bool_exp + ): depositions_aggregate! + + """fetch data from the table: "depositions" using primary key columns""" + depositions_by_pk( + """Numeric identifier for this depositions""" + id: Int! + ): depositions + """An array relationship""" runs( """distinct select on columns""" @@ -3957,7 +5933,10 @@ type query_root { ): tiltseries_aggregate! """fetch data from the table: "tiltseries" using primary key columns""" - tiltseries_by_pk(id: Int!): tiltseries + tiltseries_by_pk( + """Numeric identifier for this tilt series (this may change!)""" + id: Int! + ): tiltseries """ fetch data from the table: "tomogram_authors" @@ -4069,7 +6048,10 @@ type query_root { """ fetch data from the table: "tomogram_voxel_spacings" using primary key columns """ - tomogram_voxel_spacings_by_pk(id: Int!): tomogram_voxel_spacings + tomogram_voxel_spacings_by_pk( + """Numeric identifier (May change!)""" + id: Int! + ): tomogram_voxel_spacings """An array relationship""" tomograms( @@ -4114,7 +6096,7 @@ type query_root { ): tomograms } -"""Data related to an experiment run""" +"""Metadata for an experiment run""" type runs { """An object relationship""" dataset: datasets! @@ -4122,13 +6104,13 @@ type runs { """Reference to the dataset this run is a part of""" dataset_id: Int! - """The https directory path where this dataset is contained""" + """The HTTPS directory path where this dataset is contained""" https_prefix: String! """Numeric identifier (May change!)""" id: Int! - """Short name for the tilt series""" + """Short name for this experiment run""" name: String! """The S3 public bucket path where this dataset is contained""" @@ -4304,13 +6286,13 @@ type runs_max_fields { """Reference to the dataset this run is a part of""" dataset_id: Int - """The https directory path where this dataset is contained""" + """The HTTPS directory path where this dataset is contained""" https_prefix: String """Numeric identifier (May change!)""" id: Int - """Short name for the tilt series""" + """Short name for this experiment run""" name: String """The S3 public bucket path where this dataset is contained""" @@ -4324,13 +6306,13 @@ input runs_max_order_by { """Reference to the dataset this run is a part of""" dataset_id: order_by - """The https directory path where this dataset is contained""" + """The HTTPS directory path where this dataset is contained""" https_prefix: order_by """Numeric identifier (May change!)""" id: order_by - """Short name for the tilt series""" + """Short name for this experiment run""" name: order_by """The S3 public bucket path where this dataset is contained""" @@ -4342,13 +6324,13 @@ type runs_min_fields { """Reference to the dataset this run is a part of""" dataset_id: Int - """The https directory path where this dataset is contained""" + """The HTTPS directory path where this dataset is contained""" https_prefix: String """Numeric identifier (May change!)""" id: Int - """Short name for the tilt series""" + """Short name for this experiment run""" name: String """The S3 public bucket path where this dataset is contained""" @@ -4362,13 +6344,13 @@ input runs_min_order_by { """Reference to the dataset this run is a part of""" dataset_id: order_by - """The https directory path where this dataset is contained""" + """The HTTPS directory path where this dataset is contained""" https_prefix: order_by """Numeric identifier (May change!)""" id: order_by - """Short name for the tilt series""" + """Short name for this experiment run""" name: order_by """The S3 public bucket path where this dataset is contained""" @@ -4591,7 +6573,10 @@ type subscription_root { """ fetch data from the table: "annotation_files" using primary key columns """ - annotation_files_by_pk(id: Int!): annotation_files + annotation_files_by_pk( + """Numeric identifier (May change!)""" + id: Int! + ): annotation_files """ fetch data from the table in a streaming manner: "annotation_files" @@ -4607,6 +6592,128 @@ type subscription_root { where: annotation_files_bool_exp ): [annotation_files!]! + """ + fetch data from the table: "deposition_authors" + """ + deposition_authors( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): [deposition_authors!]! + + """ + fetch aggregated fields from the table: "deposition_authors" + """ + deposition_authors_aggregate( + """distinct select on columns""" + distinct_on: [deposition_authors_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [deposition_authors_order_by!] + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): deposition_authors_aggregate! + + """ + fetch data from the table: "deposition_authors" using primary key columns + """ + deposition_authors_by_pk( + """Numeric identifier for this deposition author (this may change!)""" + id: Int! + ): deposition_authors + + """ + fetch data from the table in a streaming manner: "deposition_authors" + """ + deposition_authors_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [deposition_authors_stream_cursor_input]! + + """filter the rows returned""" + where: deposition_authors_bool_exp + ): [deposition_authors!]! + + """ + fetch data from the table: "depositions" + """ + depositions( + """distinct select on columns""" + distinct_on: [depositions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [depositions_order_by!] + + """filter the rows returned""" + where: depositions_bool_exp + ): [depositions!]! + + """ + fetch aggregated fields from the table: "depositions" + """ + depositions_aggregate( + """distinct select on columns""" + distinct_on: [depositions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [depositions_order_by!] + + """filter the rows returned""" + where: depositions_bool_exp + ): depositions_aggregate! + + """fetch data from the table: "depositions" using primary key columns""" + depositions_by_pk( + """Numeric identifier for this depositions""" + id: Int! + ): depositions + + """ + fetch data from the table in a streaming manner: "depositions" + """ + depositions_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [depositions_stream_cursor_input]! + + """filter the rows returned""" + where: depositions_bool_exp + ): [depositions!]! + """ fetch data from the table: "tomogram_authors" """ @@ -4707,14 +6814,14 @@ type subscription_root { ): [tomogram_type!]! } -"""Tilt Series Metadata""" +""" +Metadata about how a tilt series was generated, and locations of output files +""" type tiltseries { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Int! - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Int """Describes the binning factor from frames to tilt series file""" @@ -4729,13 +6836,31 @@ type tiltseries { """Software used to collect data""" data_acquisition_software: String! + """An object relationship""" + deposition: depositions + + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Int + """Number of frames associated to the tilt series""" frames_count: Int + + """HTTPS path to the alignment file for this tiltseries""" https_alignment_file: String + + """HTTPS path to the angle list file for this tiltseries""" https_angle_list: String + + """HTTPS path to the collection metadata file for this tiltseries""" https_collection_metadata: String + + """HTTPS path to this tiltseries in MRC format (no scaling)""" https_mrc_bin1: String! + + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String! + + """Numeric identifier for this tilt series (this may change!)""" id: Int! """Tilt series is aligned""" @@ -4761,21 +6886,33 @@ type tiltseries { """Phase plate configuration""" microscope_phase_plate: String - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: numeric """ - If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier + If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier """ related_empiar_entry: String """An object relationship""" run: runs! + + """The ID of the experimental run this tilt series is part of""" run_id: Int! + + """S3 path to the alignment file for this tilt series""" s3_alignment_file: String + + """S3 path to the angle list file for this tilt series""" s3_angle_list: String + + """S3 path to the collection metadata file for this tiltseries""" s3_collection_metadata: String + + """S3 path to this tiltseries in MRC format (no scaling)""" s3_mrc_bin1: String! + + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String! """Spherical Aberration Constant of the objective lens in millimeters""" @@ -4790,13 +6927,15 @@ type tiltseries { """Minimal tilt angle in degrees""" tilt_min: numeric! - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: numeric! """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Int! + + """Tilt step in degrees""" tilt_step: numeric! """The order of stage tilting during acquisition of the data""" @@ -4882,20 +7021,25 @@ type tiltseries_avg_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -4910,13 +7054,15 @@ type tiltseries_avg_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -4932,20 +7078,25 @@ input tiltseries_avg_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -4960,13 +7111,15 @@ input tiltseries_avg_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -4988,6 +7141,8 @@ input tiltseries_bool_exp { camera_manufacturer: String_comparison_exp camera_model: String_comparison_exp data_acquisition_software: String_comparison_exp + deposition: depositions_bool_exp + deposition_id: Int_comparison_exp frames_count: Int_comparison_exp https_alignment_file: String_comparison_exp https_angle_list: String_comparison_exp @@ -5027,9 +7182,7 @@ type tiltseries_max_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Int - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Int """Describes the binning factor from frames to tilt series file""" @@ -5044,13 +7197,28 @@ type tiltseries_max_fields { """Software used to collect data""" data_acquisition_software: String + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Int + """Number of frames associated to the tilt series""" frames_count: Int + + """HTTPS path to the alignment file for this tiltseries""" https_alignment_file: String + + """HTTPS path to the angle list file for this tiltseries""" https_angle_list: String + + """HTTPS path to the collection metadata file for this tiltseries""" https_collection_metadata: String + + """HTTPS path to this tiltseries in MRC format (no scaling)""" https_mrc_bin1: String + + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String + + """Numeric identifier for this tilt series (this may change!)""" id: Int """ @@ -5073,18 +7241,30 @@ type tiltseries_max_fields { """Phase plate configuration""" microscope_phase_plate: String - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: numeric """ - If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier + If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier """ related_empiar_entry: String + + """The ID of the experimental run this tilt series is part of""" run_id: Int + + """S3 path to the alignment file for this tilt series""" s3_alignment_file: String + + """S3 path to the angle list file for this tilt series""" s3_angle_list: String + + """S3 path to the collection metadata file for this tiltseries""" s3_collection_metadata: String + + """S3 path to this tiltseries in MRC format (no scaling)""" s3_mrc_bin1: String + + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5099,13 +7279,15 @@ type tiltseries_max_fields { """Minimal tilt angle in degrees""" tilt_min: numeric - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: numeric """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Int + + """Tilt step in degrees""" tilt_step: numeric """The order of stage tilting during acquisition of the data""" @@ -5124,9 +7306,7 @@ input tiltseries_max_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" @@ -5141,13 +7321,28 @@ input tiltseries_max_order_by { """Software used to collect data""" data_acquisition_software: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """HTTPS path to the alignment file for this tiltseries""" https_alignment_file: order_by + + """HTTPS path to the angle list file for this tiltseries""" https_angle_list: order_by + + """HTTPS path to the collection metadata file for this tiltseries""" https_collection_metadata: order_by + + """HTTPS path to this tiltseries in MRC format (no scaling)""" https_mrc_bin1: order_by + + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by """ @@ -5170,18 +7365,30 @@ input tiltseries_max_order_by { """Phase plate configuration""" microscope_phase_plate: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by """ - If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier + If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier """ related_empiar_entry: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by + + """S3 path to the alignment file for this tilt series""" s3_alignment_file: order_by + + """S3 path to the angle list file for this tilt series""" s3_angle_list: order_by + + """S3 path to the collection metadata file for this tiltseries""" s3_collection_metadata: order_by + + """S3 path to this tiltseries in MRC format (no scaling)""" s3_mrc_bin1: order_by + + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5196,13 +7403,15 @@ input tiltseries_max_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """The order of stage tilting during acquisition of the data""" @@ -5219,9 +7428,7 @@ type tiltseries_min_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Int - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Int """Describes the binning factor from frames to tilt series file""" @@ -5236,13 +7443,28 @@ type tiltseries_min_fields { """Software used to collect data""" data_acquisition_software: String + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Int + """Number of frames associated to the tilt series""" frames_count: Int + + """HTTPS path to the alignment file for this tiltseries""" https_alignment_file: String + + """HTTPS path to the angle list file for this tiltseries""" https_angle_list: String + + """HTTPS path to the collection metadata file for this tiltseries""" https_collection_metadata: String + + """HTTPS path to this tiltseries in MRC format (no scaling)""" https_mrc_bin1: String + + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String + + """Numeric identifier for this tilt series (this may change!)""" id: Int """ @@ -5265,18 +7487,30 @@ type tiltseries_min_fields { """Phase plate configuration""" microscope_phase_plate: String - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: numeric """ - If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier + If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier """ related_empiar_entry: String + + """The ID of the experimental run this tilt series is part of""" run_id: Int + + """S3 path to the alignment file for this tilt series""" s3_alignment_file: String + + """S3 path to the angle list file for this tilt series""" s3_angle_list: String + + """S3 path to the collection metadata file for this tiltseries""" s3_collection_metadata: String + + """S3 path to this tiltseries in MRC format (no scaling)""" s3_mrc_bin1: String + + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5291,13 +7525,15 @@ type tiltseries_min_fields { """Minimal tilt angle in degrees""" tilt_min: numeric - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: numeric """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Int + + """Tilt step in degrees""" tilt_step: numeric """The order of stage tilting during acquisition of the data""" @@ -5316,9 +7552,7 @@ input tiltseries_min_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" @@ -5333,13 +7567,28 @@ input tiltseries_min_order_by { """Software used to collect data""" data_acquisition_software: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """HTTPS path to the alignment file for this tiltseries""" https_alignment_file: order_by + + """HTTPS path to the angle list file for this tiltseries""" https_angle_list: order_by + + """HTTPS path to the collection metadata file for this tiltseries""" https_collection_metadata: order_by + + """HTTPS path to this tiltseries in MRC format (no scaling)""" https_mrc_bin1: order_by + + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by """ @@ -5362,18 +7611,30 @@ input tiltseries_min_order_by { """Phase plate configuration""" microscope_phase_plate: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by """ - If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier + If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier """ related_empiar_entry: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by + + """S3 path to the alignment file for this tilt series""" s3_alignment_file: order_by + + """S3 path to the angle list file for this tilt series""" s3_angle_list: order_by + + """S3 path to the collection metadata file for this tiltseries""" s3_collection_metadata: order_by + + """S3 path to this tiltseries in MRC format (no scaling)""" s3_mrc_bin1: order_by + + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5388,13 +7649,15 @@ input tiltseries_min_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """The order of stage tilting during acquisition of the data""" @@ -5414,6 +7677,8 @@ input tiltseries_order_by { camera_manufacturer: order_by camera_model: order_by data_acquisition_software: order_by + deposition: depositions_order_by + deposition_id: order_by frames_count: order_by https_alignment_file: order_by https_angle_list: order_by @@ -5470,6 +7735,9 @@ enum tiltseries_select_column { """column name""" data_acquisition_software + """column name""" + deposition_id + """column name""" frames_count @@ -5585,20 +7853,25 @@ type tiltseries_stddev_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5613,13 +7886,15 @@ type tiltseries_stddev_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -5635,20 +7910,25 @@ input tiltseries_stddev_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5663,13 +7943,15 @@ input tiltseries_stddev_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -5683,20 +7965,25 @@ type tiltseries_stddev_pop_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5711,13 +7998,15 @@ type tiltseries_stddev_pop_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -5733,20 +8022,25 @@ input tiltseries_stddev_pop_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5761,13 +8055,15 @@ input tiltseries_stddev_pop_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -5781,20 +8077,25 @@ type tiltseries_stddev_samp_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5809,13 +8110,15 @@ type tiltseries_stddev_samp_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -5831,20 +8134,25 @@ input tiltseries_stddev_samp_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5859,13 +8167,15 @@ input tiltseries_stddev_samp_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -5879,20 +8189,25 @@ type tiltseries_sum_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Int - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Int """Describes the binning factor from frames to tilt series file""" binning_from_frames: numeric + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Int + """Number of frames associated to the tilt series""" frames_count: Int + + """Numeric identifier for this tilt series (this may change!)""" id: Int - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: numeric + + """The ID of the experimental run this tilt series is part of""" run_id: Int """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5907,13 +8222,15 @@ type tiltseries_sum_fields { """Minimal tilt angle in degrees""" tilt_min: numeric - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: numeric """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Int + + """Tilt step in degrees""" tilt_step: numeric """ @@ -5929,20 +8246,25 @@ input tiltseries_sum_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -5957,13 +8279,15 @@ input tiltseries_sum_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -5977,20 +8301,25 @@ type tiltseries_var_pop_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6005,13 +8334,15 @@ type tiltseries_var_pop_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -6027,20 +8358,25 @@ input tiltseries_var_pop_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6055,13 +8391,15 @@ input tiltseries_var_pop_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -6075,20 +8413,25 @@ type tiltseries_var_samp_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6103,13 +8446,15 @@ type tiltseries_var_samp_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -6125,20 +8470,25 @@ input tiltseries_var_samp_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6153,13 +8503,15 @@ input tiltseries_var_samp_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -6173,20 +8525,25 @@ type tiltseries_variance_fields { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: Float - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: Float """Describes the binning factor from frames to tilt series file""" binning_from_frames: Float + """Reference to the deposition this tiltseries is associated with""" + deposition_id: Float + """Number of frames associated to the tilt series""" frames_count: Float + + """Numeric identifier for this tilt series (this may change!)""" id: Float - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: Float + + """The ID of the experimental run this tilt series is part of""" run_id: Float """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6201,13 +8558,15 @@ type tiltseries_variance_fields { """Minimal tilt angle in degrees""" tilt_min: Float - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: Float """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: Float + + """Tilt step in degrees""" tilt_step: Float """ @@ -6223,20 +8582,25 @@ input tiltseries_variance_order_by { """Electron Microscope Accelerator voltage in volts""" acceleration_voltage: order_by - """ - The binning factor between the unaligned tilt series and the aligned tiltseries. - """ + """Binning factor of the aligned tilt series""" aligned_tiltseries_binning: order_by """Describes the binning factor from frames to tilt series file""" binning_from_frames: order_by + """Reference to the deposition this tiltseries is associated with""" + deposition_id: order_by + """Number of frames associated to the tilt series""" frames_count: order_by + + """Numeric identifier for this tilt series (this may change!)""" id: order_by - """Pixel spacing equal in both axes in angstrom""" + """Pixel spacing equal in both axes in angstroms""" pixel_spacing: order_by + + """The ID of the experimental run this tilt series is part of""" run_id: order_by """Spherical Aberration Constant of the objective lens in millimeters""" @@ -6251,13 +8615,15 @@ input tiltseries_variance_order_by { """Minimal tilt angle in degrees""" tilt_min: order_by - """The difference between tilt_min and tilt_max""" + """Total tilt range in degrees""" tilt_range: order_by """ Author assessment of tilt series quality within the dataset (1-5, 5 is best) """ tilt_series_quality: order_by + + """Tilt step in degrees""" tilt_step: order_by """ @@ -6266,9 +8632,9 @@ input tiltseries_variance_order_by { total_flux: order_by } -"""Authors for a tomogram""" +"""Metadata for a tomogram's authors""" type tomogram_authors { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: String """ @@ -6293,7 +8659,7 @@ type tomogram_authors { """Numeric identifier for this tomogram author (this may change!)""" id: Int! - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: String! """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6429,7 +8795,7 @@ input tomogram_authors_bool_exp { """aggregate max on columns""" type tomogram_authors_max_fields { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: String """ @@ -6451,7 +8817,7 @@ type tomogram_authors_max_fields { """Numeric identifier for this tomogram author (this may change!)""" id: Int - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: String """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6465,7 +8831,7 @@ type tomogram_authors_max_fields { order by max() on columns of table "tomogram_authors" """ input tomogram_authors_max_order_by { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: order_by """ @@ -6487,7 +8853,7 @@ input tomogram_authors_max_order_by { """Numeric identifier for this tomogram author (this may change!)""" id: order_by - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: order_by """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6499,7 +8865,7 @@ input tomogram_authors_max_order_by { """aggregate min on columns""" type tomogram_authors_min_fields { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: String """ @@ -6521,7 +8887,7 @@ type tomogram_authors_min_fields { """Numeric identifier for this tomogram author (this may change!)""" id: Int - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: String """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6535,7 +8901,7 @@ type tomogram_authors_min_fields { order by min() on columns of table "tomogram_authors" """ input tomogram_authors_min_order_by { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: order_by """ @@ -6557,7 +8923,7 @@ input tomogram_authors_min_order_by { """Numeric identifier for this tomogram author (this may change!)""" id: order_by - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: order_by """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6734,7 +9100,7 @@ input tomogram_authors_stream_cursor_input { """Initial value of the column from where the streaming should start""" input tomogram_authors_stream_cursor_value_input { - """Address of the institution an annotator is affiliated with.""" + """Address of the institution an author is affiliated with.""" affiliation_address: String """ @@ -6759,7 +9125,7 @@ input tomogram_authors_stream_cursor_value_input { """Numeric identifier for this tomogram author (this may change!)""" id: Int - """Full name of an tomogram author (e.g. Jane Doe).""" + """Full name of an author (e.g. Jane Doe).""" name: String """A unique, persistent identifier for researchers, provided by ORCID.""" @@ -6987,7 +9353,9 @@ input tomogram_type_stream_cursor_value_input { value: String } -"""The tomograms for each run are grouped by their voxel spacing""" +""" +Metadata for a given voxel spacing related to tomograms and annotations +""" type tomogram_voxel_spacings { """An array relationship""" annotations( @@ -7024,12 +9392,24 @@ type tomogram_voxel_spacings { """filter the rows returned""" where: annotations_bool_exp ): annotations_aggregate! + + """ + The HTTPS directory path where this tomogram voxel spacing is contained + """ https_prefix: String + + """Numeric identifier (May change!)""" id: Int! """An object relationship""" run: runs! + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Int! + + """ + The S3 public bucket path where this tomogram voxel spacing is contained + """ s3_prefix: String """An array relationship""" @@ -7067,6 +9447,8 @@ type tomogram_voxel_spacings { """filter the rows returned""" where: tomograms_bool_exp ): tomograms_aggregate! + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: numeric! } @@ -7125,8 +9507,13 @@ input tomogram_voxel_spacings_aggregate_order_by { """aggregate avg on columns""" type tomogram_voxel_spacings_avg_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7134,8 +9521,13 @@ type tomogram_voxel_spacings_avg_fields { order by avg() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_avg_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } @@ -7160,10 +9552,23 @@ input tomogram_voxel_spacings_bool_exp { """aggregate max on columns""" type tomogram_voxel_spacings_max_fields { + """ + The HTTPS directory path where this tomogram voxel spacing is contained + """ https_prefix: String + + """Numeric identifier (May change!)""" id: Int + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Int + + """ + The S3 public bucket path where this tomogram voxel spacing is contained + """ s3_prefix: String + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: numeric } @@ -7171,19 +9576,45 @@ type tomogram_voxel_spacings_max_fields { order by max() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_max_order_by { + """ + The HTTPS directory path where this tomogram voxel spacing is contained + """ https_prefix: order_by + + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """ + The S3 public bucket path where this tomogram voxel spacing is contained + """ s3_prefix: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate min on columns""" type tomogram_voxel_spacings_min_fields { + """ + The HTTPS directory path where this tomogram voxel spacing is contained + """ https_prefix: String + + """Numeric identifier (May change!)""" id: Int + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Int + + """ + The S3 public bucket path where this tomogram voxel spacing is contained + """ s3_prefix: String + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: numeric } @@ -7191,10 +9622,23 @@ type tomogram_voxel_spacings_min_fields { order by min() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_min_order_by { + """ + The HTTPS directory path where this tomogram voxel spacing is contained + """ https_prefix: order_by + + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """ + The S3 public bucket path where this tomogram voxel spacing is contained + """ s3_prefix: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } @@ -7232,8 +9676,13 @@ enum tomogram_voxel_spacings_select_column { """aggregate stddev on columns""" type tomogram_voxel_spacings_stddev_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7241,15 +9690,25 @@ type tomogram_voxel_spacings_stddev_fields { order by stddev() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_stddev_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate stddev_pop on columns""" type tomogram_voxel_spacings_stddev_pop_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7257,15 +9716,25 @@ type tomogram_voxel_spacings_stddev_pop_fields { order by stddev_pop() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_stddev_pop_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate stddev_samp on columns""" type tomogram_voxel_spacings_stddev_samp_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7273,15 +9742,25 @@ type tomogram_voxel_spacings_stddev_samp_fields { order by stddev_samp() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_stddev_samp_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate sum on columns""" type tomogram_voxel_spacings_sum_fields { + """Numeric identifier (May change!)""" id: Int + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Int + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: numeric } @@ -7289,15 +9768,25 @@ type tomogram_voxel_spacings_sum_fields { order by sum() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_sum_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate var_pop on columns""" type tomogram_voxel_spacings_var_pop_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7305,15 +9794,25 @@ type tomogram_voxel_spacings_var_pop_fields { order by var_pop() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_var_pop_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate var_samp on columns""" type tomogram_voxel_spacings_var_samp_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7321,15 +9820,25 @@ type tomogram_voxel_spacings_var_samp_fields { order by var_samp() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_var_samp_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } """aggregate variance on columns""" type tomogram_voxel_spacings_variance_fields { + """Numeric identifier (May change!)""" id: Float + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: Float + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: Float } @@ -7337,12 +9846,17 @@ type tomogram_voxel_spacings_variance_fields { order by variance() on columns of table "tomogram_voxel_spacings" """ input tomogram_voxel_spacings_variance_order_by { + """Numeric identifier (May change!)""" id: order_by + + """The ID of the run this tomogram voxel spacing is a part of""" run_id: order_by + + """The voxel spacing for the tomograms in this set in angstroms""" voxel_spacing: order_by } -"""information about the tomograms in the CryoET Data Portal""" +"""Metadata for a tomogram""" type tomograms { """ The flip or rotation transformation of this author submitted tomogram is indicated here @@ -7384,9 +9898,14 @@ type tomograms { """filter the rows returned""" where: tomogram_authors_bool_exp ): tomogram_authors_aggregate! + + """Whether this tomogram is CTF corrected""" ctf_corrected: Boolean - """id of the associated deposition.""" + """An object relationship""" + deposition: depositions + + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Int """ @@ -7394,10 +9913,10 @@ type tomograms { """ fiducial_alignment_status: String! - """https path to this tomogram in MRC format (no scaling)""" + """HTTPS path to this tomogram in MRC format (no scaling)""" https_mrc_scale0: String! - """HTTPS path to the this multiscale omezarr tomogram""" + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String! """Numeric identifier for this tomogram (this may change!)""" @@ -7435,7 +9954,7 @@ type tomograms { """Processing software used to derive the tomogram""" processing_software: String - """Describe reconstruction method (Weighted backprojection, SART, SIRT)""" + """Describe reconstruction method (Weighted back-projection, SART, SIRT)""" reconstruction_method: String! """Name of software used for reconstruction""" @@ -7444,7 +9963,7 @@ type tomograms { """S3 path to this tomogram in MRC format (no scaling)""" s3_mrc_scale0: String! - """S3 path to the this multiscale omezarr tomogram""" + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String! """comma separated x,y,z dimensions of the unscaled tomogram""" @@ -7477,7 +9996,11 @@ type tomograms { """An object relationship""" tomogram_voxel_spacing: tomogram_voxel_spacings + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Int + + """Tomogram purpose (ex: CANONICAL)""" type: tomogram_type_enum """Voxel spacing equal in all three axes in angstroms""" @@ -7555,7 +10078,7 @@ input tomograms_aggregate_order_by { """aggregate avg on columns""" type tomograms_avg_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -7580,6 +10103,8 @@ type tomograms_avg_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -7590,7 +10115,7 @@ type tomograms_avg_fields { order by avg() on columns of table "tomograms" """ input tomograms_avg_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -7615,6 +10140,8 @@ input tomograms_avg_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -7632,6 +10159,7 @@ input tomograms_bool_exp { authors: tomogram_authors_bool_exp authors_aggregate: tomogram_authors_aggregate_bool_exp ctf_corrected: Boolean_comparison_exp + deposition: depositions_bool_exp deposition_id: Int_comparison_exp fiducial_alignment_status: String_comparison_exp https_mrc_scale0: String_comparison_exp @@ -7667,7 +10195,7 @@ input tomograms_bool_exp { """aggregate max on columns""" type tomograms_max_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Int """ @@ -7675,10 +10203,10 @@ type tomograms_max_fields { """ fiducial_alignment_status: String - """https path to this tomogram in MRC format (no scaling)""" + """HTTPS path to this tomogram in MRC format (no scaling)""" https_mrc_scale0: String - """HTTPS path to the this multiscale omezarr tomogram""" + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String """Numeric identifier for this tomogram (this may change!)""" @@ -7711,7 +10239,7 @@ type tomograms_max_fields { """Processing software used to derive the tomogram""" processing_software: String - """Describe reconstruction method (Weighted backprojection, SART, SIRT)""" + """Describe reconstruction method (Weighted back-projection, SART, SIRT)""" reconstruction_method: String """Name of software used for reconstruction""" @@ -7720,7 +10248,7 @@ type tomograms_max_fields { """S3 path to this tomogram in MRC format (no scaling)""" s3_mrc_scale0: String - """S3 path to the this multiscale omezarr tomogram""" + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String """comma separated x,y,z dimensions of the unscaled tomogram""" @@ -7747,6 +10275,8 @@ type tomograms_max_fields { Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version """ tomogram_version: String + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Int """Voxel spacing equal in all three axes in angstroms""" @@ -7757,7 +10287,7 @@ type tomograms_max_fields { order by max() on columns of table "tomograms" """ input tomograms_max_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """ @@ -7765,10 +10295,10 @@ input tomograms_max_order_by { """ fiducial_alignment_status: order_by - """https path to this tomogram in MRC format (no scaling)""" + """HTTPS path to this tomogram in MRC format (no scaling)""" https_mrc_scale0: order_by - """HTTPS path to the this multiscale omezarr tomogram""" + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -7801,7 +10331,7 @@ input tomograms_max_order_by { """Processing software used to derive the tomogram""" processing_software: order_by - """Describe reconstruction method (Weighted backprojection, SART, SIRT)""" + """Describe reconstruction method (Weighted back-projection, SART, SIRT)""" reconstruction_method: order_by """Name of software used for reconstruction""" @@ -7810,7 +10340,7 @@ input tomograms_max_order_by { """S3 path to this tomogram in MRC format (no scaling)""" s3_mrc_scale0: order_by - """S3 path to the this multiscale omezarr tomogram""" + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: order_by """comma separated x,y,z dimensions of the unscaled tomogram""" @@ -7837,6 +10367,8 @@ input tomograms_max_order_by { Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version """ tomogram_version: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -7845,7 +10377,7 @@ input tomograms_max_order_by { """aggregate min on columns""" type tomograms_min_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Int """ @@ -7853,10 +10385,10 @@ type tomograms_min_fields { """ fiducial_alignment_status: String - """https path to this tomogram in MRC format (no scaling)""" + """HTTPS path to this tomogram in MRC format (no scaling)""" https_mrc_scale0: String - """HTTPS path to the this multiscale omezarr tomogram""" + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: String """Numeric identifier for this tomogram (this may change!)""" @@ -7889,7 +10421,7 @@ type tomograms_min_fields { """Processing software used to derive the tomogram""" processing_software: String - """Describe reconstruction method (Weighted backprojection, SART, SIRT)""" + """Describe reconstruction method (Weighted back-projection, SART, SIRT)""" reconstruction_method: String """Name of software used for reconstruction""" @@ -7898,7 +10430,7 @@ type tomograms_min_fields { """S3 path to this tomogram in MRC format (no scaling)""" s3_mrc_scale0: String - """S3 path to the this multiscale omezarr tomogram""" + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: String """comma separated x,y,z dimensions of the unscaled tomogram""" @@ -7925,6 +10457,8 @@ type tomograms_min_fields { Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version """ tomogram_version: String + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Int """Voxel spacing equal in all three axes in angstroms""" @@ -7935,7 +10469,7 @@ type tomograms_min_fields { order by min() on columns of table "tomograms" """ input tomograms_min_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """ @@ -7943,10 +10477,10 @@ input tomograms_min_order_by { """ fiducial_alignment_status: order_by - """https path to this tomogram in MRC format (no scaling)""" + """HTTPS path to this tomogram in MRC format (no scaling)""" https_mrc_scale0: order_by - """HTTPS path to the this multiscale omezarr tomogram""" + """HTTPS path to this tomogram in multiscale OME-Zarr format""" https_omezarr_dir: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -7979,7 +10513,7 @@ input tomograms_min_order_by { """Processing software used to derive the tomogram""" processing_software: order_by - """Describe reconstruction method (Weighted backprojection, SART, SIRT)""" + """Describe reconstruction method (Weighted back-projection, SART, SIRT)""" reconstruction_method: order_by """Name of software used for reconstruction""" @@ -7988,7 +10522,7 @@ input tomograms_min_order_by { """S3 path to this tomogram in MRC format (no scaling)""" s3_mrc_scale0: order_by - """S3 path to the this multiscale omezarr tomogram""" + """S3 path to this tomogram in multiscale OME-Zarr format""" s3_omezarr_dir: order_by """comma separated x,y,z dimensions of the unscaled tomogram""" @@ -8015,6 +10549,8 @@ input tomograms_min_order_by { Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version """ tomogram_version: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8026,6 +10562,7 @@ input tomograms_order_by { affine_transformation_matrix: order_by authors_aggregate: tomogram_authors_aggregate_order_by ctf_corrected: order_by + deposition: depositions_order_by deposition_id: order_by fiducial_alignment_status: order_by https_mrc_scale0: order_by @@ -8181,7 +10718,7 @@ enum tomograms_select_column_tomograms_aggregate_bool_exp_bool_or_arguments_colu """aggregate stddev on columns""" type tomograms_stddev_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8206,6 +10743,8 @@ type tomograms_stddev_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8216,7 +10755,7 @@ type tomograms_stddev_fields { order by stddev() on columns of table "tomograms" """ input tomograms_stddev_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8241,6 +10780,8 @@ input tomograms_stddev_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8249,7 +10790,7 @@ input tomograms_stddev_order_by { """aggregate stddev_pop on columns""" type tomograms_stddev_pop_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8274,6 +10815,8 @@ type tomograms_stddev_pop_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8284,7 +10827,7 @@ type tomograms_stddev_pop_fields { order by stddev_pop() on columns of table "tomograms" """ input tomograms_stddev_pop_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8309,6 +10852,8 @@ input tomograms_stddev_pop_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8317,7 +10862,7 @@ input tomograms_stddev_pop_order_by { """aggregate stddev_samp on columns""" type tomograms_stddev_samp_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8342,6 +10887,8 @@ type tomograms_stddev_samp_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8352,7 +10899,7 @@ type tomograms_stddev_samp_fields { order by stddev_samp() on columns of table "tomograms" """ input tomograms_stddev_samp_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8377,6 +10924,8 @@ input tomograms_stddev_samp_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8385,7 +10934,7 @@ input tomograms_stddev_samp_order_by { """aggregate sum on columns""" type tomograms_sum_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Int """Numeric identifier for this tomogram (this may change!)""" @@ -8410,6 +10959,8 @@ type tomograms_sum_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Int + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Int """Voxel spacing equal in all three axes in angstroms""" @@ -8420,7 +10971,7 @@ type tomograms_sum_fields { order by sum() on columns of table "tomograms" """ input tomograms_sum_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8445,6 +10996,8 @@ input tomograms_sum_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8453,7 +11006,7 @@ input tomograms_sum_order_by { """aggregate var_pop on columns""" type tomograms_var_pop_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8478,6 +11031,8 @@ type tomograms_var_pop_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8488,7 +11043,7 @@ type tomograms_var_pop_fields { order by var_pop() on columns of table "tomograms" """ input tomograms_var_pop_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8513,6 +11068,8 @@ input tomograms_var_pop_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8521,7 +11078,7 @@ input tomograms_var_pop_order_by { """aggregate var_samp on columns""" type tomograms_var_samp_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8546,6 +11103,8 @@ type tomograms_var_samp_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8556,7 +11115,7 @@ type tomograms_var_samp_fields { order by var_samp() on columns of table "tomograms" """ input tomograms_var_samp_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8581,6 +11140,8 @@ input tomograms_var_samp_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" @@ -8589,7 +11150,7 @@ input tomograms_var_samp_order_by { """aggregate variance on columns""" type tomograms_variance_fields { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: Float """Numeric identifier for this tomogram (this may change!)""" @@ -8614,6 +11175,8 @@ type tomograms_variance_fields { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: Float + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: Float """Voxel spacing equal in all three axes in angstroms""" @@ -8624,7 +11187,7 @@ type tomograms_variance_fields { order by variance() on columns of table "tomograms" """ input tomograms_variance_order_by { - """id of the associated deposition.""" + """If the tomogram is part of a deposition, the related deposition's id""" deposition_id: order_by """Numeric identifier for this tomogram (this may change!)""" @@ -8649,6 +11212,8 @@ input tomograms_variance_order_by { Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt """ size_z: order_by + + """The ID of the tomogram voxel spacing this tomogram is part of""" tomogram_voxel_spacing_id: order_by """Voxel spacing equal in all three axes in angstroms""" diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Annotation.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Annotation.jinja2 new file mode 100644 index 000000000..a7b87fcee --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Annotation.jinja2 @@ -0,0 +1,25 @@ +{% include 'Model.jinja2' %} + + def download( + self, + dest_path: Optional[str] = None, + format: Optional[str] = None, + shape: Optional[str] = None, + ): + """Download annotation files for a given format and/or shape + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + shape (Optional[str], optional): Choose a specific shape type to download (e.g.: OrientedPoint, SegmentationMask) + format (Optional[str], optional): Choose a specific file format to download (e.g.: mrc, ndjson) + """ + download_metadata = False + for file in self.files: + if format and file.format != format: + continue + if shape and file.shape_type != shape: + continue + file.download(dest_path) + download_metadata = True + if download_metadata: + download_https(self.https_metadata_path, dest_path) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/AnnotationFile.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/AnnotationFile.jinja2 new file mode 100644 index 000000000..48b4182c0 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/AnnotationFile.jinja2 @@ -0,0 +1,8 @@ +{% include 'Model.jinja2' %} + + def download(self, dest_path: Optional[str] = None): + if self.format == "zarr": + recursive_prefix = "/".join(self.s3_path.split("/")[:-1]) + "/" + download_directory(self.s3_path, recursive_prefix, dest_path) + else: + download_https(self.https_path, dest_path) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Dataset.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Dataset.jinja2 new file mode 100644 index 000000000..0488b9366 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Dataset.jinja2 @@ -0,0 +1,10 @@ +{% include 'Model.jinja2' %} + + def download_everything(self, dest_path: Optional[str] = None): + """Download all of the data for this dataset. + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + recursive_prefix = "/".join(self.s3_prefix.strip("/").split("/")[:-1]) + "/" + download_directory(self.s3_prefix, recursive_prefix, dest_path) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Footer.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Footer.jinja2 new file mode 100644 index 000000000..2fde5548a --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Footer.jinja2 @@ -0,0 +1,3 @@ +{% for model in models %} +{{ model }}.setup() +{% endfor %} diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Header.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Header.jinja2 new file mode 100644 index 000000000..1dcdf42ae --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Header.jinja2 @@ -0,0 +1,23 @@ +"""CryoET data portal client model classes. + +Auto-generated by running 'make codegen'. Do not edit. +Edit the Jinja2 templates instead. +""" + +from __future__ import annotations + +import os +from datetime import date +from typing import List, Optional + +from cryoet_data_portal._file_tools import download_directory, download_https +from cryoet_data_portal._gql_base import ( + BooleanField, + DateField, + FloatField, + IntField, + ItemRelationship, + ListRelationship, + Model, + StringField, +) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Model.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Model.jinja2 new file mode 100644 index 000000000..386fa5808 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Model.jinja2 @@ -0,0 +1,14 @@ +class {{ model.name }}(Model): + """{{ model.description }} + + Attributes: + {% for field in model.fields %} + {{ field.name }} ({{ field.annotation_type }}): {{ field.description}} + {% endfor %} + """ + + _gql_type: str = "{{ model.gql_name }}" + + {% for field in model.fields %} + {{ field.name }}: {{ field.annotation_type }} = {{ field.default_value }} + {% endfor %} diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Run.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Run.jinja2 new file mode 100644 index 000000000..50c6bace3 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Run.jinja2 @@ -0,0 +1,16 @@ +{% include 'Model.jinja2' %} + + def download_everything(self, dest_path: Optional[str] = None): + """Download all of the data for this run. + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + download_directory(self.s3_prefix, self.dataset.s3_prefix, dest_path) + + def download_frames(self, dest_path: Optional[str] = None): + download_directory( + os.path.join(self.s3_prefix, "Frames"), + self.s3_prefix, + dest_path, + ) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TiltSeries.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TiltSeries.jinja2 new file mode 100644 index 000000000..b89f4af7e --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TiltSeries.jinja2 @@ -0,0 +1,46 @@ +{% include 'Model.jinja2' %} + + def download_collection_metadata(self, dest_path: Optional[str] = None): + """Download the collection metadata for this tiltseries + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + download_https(self.https_collection_metadata, dest_path) + + def download_angle_list(self, dest_path: Optional[str] = None): + """Download the angle list for this tiltseries + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + download_https(self.https_angle_list, dest_path) + + def download_alignment_file(self, dest_path: Optional[str] = None): + """Download the alignment file for this tiltseries + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + download_https(self.https_alignment_file, dest_path) + + def download_omezarr(self, dest_path: Optional[str] = None): + """Download the omezarr version of this tiltseries + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + recursive_prefix = "/".join(self.s3_omezarr_dir.split("/")[:-1]) + "/" + download_directory(self.s3_omezarr_dir, recursive_prefix, dest_path) + + def download_mrcfile( + self, + dest_path: Optional[str] = None, + ): + """Download an MRC file for this tiltseries + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + url = self.https_mrc_bin1 + download_https(url, dest_path) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Tomogram.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Tomogram.jinja2 new file mode 100644 index 000000000..fed38eb10 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/Tomogram.jinja2 @@ -0,0 +1,36 @@ +{% include 'Model.jinja2' %} + + def download_omezarr(self, dest_path: Optional[str] = None): + """Download the OME-Zarr version of this tomogram + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + recursive_prefix = "/".join(self.s3_omezarr_dir.split("/")[:-1]) + "/" + download_directory(self.s3_omezarr_dir, recursive_prefix, dest_path) + + def download_mrcfile(self, dest_path: Optional[str] = None): + """Download an MRC file of this tomogram + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + url = self.https_mrc_scale0 + download_https(url, dest_path) + + def download_all_annotations( + self, + dest_path: Optional[str] = None, + format: Optional[str] = None, + shape: Optional[str] = None, + ): + """Download all annotation files for this tomogram + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + shape (Optional[str], optional): Choose a specific shape type to download (e.g.: OrientedPoint, SegmentationMask) + format (Optional[str], optional): Choose a specific file format to download (e.g.: mrc, ndjson) + """ + vs = self.tomogram_voxel_spacing + for anno in vs.annotations: + anno.download(dest_path, format, shape) diff --git a/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TomogramVoxelSpacing.jinja2 b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TomogramVoxelSpacing.jinja2 new file mode 100644 index 000000000..c8dd71340 --- /dev/null +++ b/client/python/cryoet_data_portal/src/cryoet_data_portal/templates/TomogramVoxelSpacing.jinja2 @@ -0,0 +1,9 @@ +{% include 'Model.jinja2' %} + + def download_everything(self, dest_path: Optional[str] = None): + """Download all of the data for this tomogram voxel spacing. + + Args: + dest_path (Optional[str], optional): Choose a destination directory. Defaults to $CWD. + """ + download_directory(self.s3_prefix, self.run.s3_prefix, dest_path) diff --git a/client/python/cryoet_data_portal/tests/conftest.py b/client/python/cryoet_data_portal/tests/conftest.py index 0a9b7fbcd..c7adabd0f 100644 --- a/client/python/cryoet_data_portal/tests/conftest.py +++ b/client/python/cryoet_data_portal/tests/conftest.py @@ -4,8 +4,13 @@ @pytest.fixture -def client(): - client = Client("http://localhost:8080/v1/graphql") +def gql_url() -> str: + return "http://localhost:8080/v1/graphql" + + +@pytest.fixture +def client(gql_url: str): + client = Client(gql_url) yield client diff --git a/client/python/cryoet_data_portal/tests/docker-compose.yml b/client/python/cryoet_data_portal/tests/docker-compose.yml index f04e26d9d..9618bc6cb 100644 --- a/client/python/cryoet_data_portal/tests/docker-compose.yml +++ b/client/python/cryoet_data_portal/tests/docker-compose.yml @@ -49,6 +49,8 @@ services: HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_DEV_MODE: "true" HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log + healthcheck: + test: timeout 1s bash -c ':> /dev/tcp/127.0.0.1/8080' || exit 1 depends_on: db: condition: service_healthy diff --git a/client/python/cryoet_data_portal/tests/test_codegen.py b/client/python/cryoet_data_portal/tests/test_codegen.py new file mode 100644 index 000000000..53cf362cc --- /dev/null +++ b/client/python/cryoet_data_portal/tests/test_codegen.py @@ -0,0 +1,133 @@ +import sys +from contextlib import contextmanager +from importlib import import_module +from importlib.util import module_from_spec, spec_from_file_location +from pathlib import Path +from types import ModuleType +from typing import Generator + +import pytest +from graphql import GraphQLObjectType, GraphQLSchema + +from cryoet_data_portal._codegen import ( + GQL_TO_MODEL_TYPE, + SCHEMA_PATH, + FieldInfo, + ModelInfo, + fetch_schema, + get_models, + load_schema, + parse_fields, + update_schema_and_models, + write_models, + write_schema, +) + + +def test_load_schema(): + schema = load_schema(SCHEMA_PATH) + + assert isinstance(schema, GraphQLSchema) + assert all(schema.get_type(t) for t in GQL_TO_MODEL_TYPE) + + +def test_fetch_schema(gql_url: str): + schema = fetch_schema(gql_url) + + assert isinstance(schema, GraphQLSchema) + assert all(schema.get_type(t) for t in GQL_TO_MODEL_TYPE) + + +def test_write_schema(tmp_path: Path): + schema = load_schema(SCHEMA_PATH) + output_schema_path = tmp_path / "schema.graphql" + + write_schema(schema, output_schema_path) + + schema_content = _file_content(SCHEMA_PATH) + output_schema_content = _file_content(output_schema_path) + assert output_schema_content == schema_content + + +def test_get_models(): + schema = load_schema(SCHEMA_PATH) + + models = get_models(schema) + + assert len(models) > 0 + assert all(isinstance(m, ModelInfo) for m in models) + model_names = tuple(m.name for m in models) + assert model_names == tuple(GQL_TO_MODEL_TYPE.values()) + + +@pytest.mark.parametrize("gql_type", GQL_TO_MODEL_TYPE.keys()) +def test_parse_fields_dataset(gql_type: str): + schema = load_schema(SCHEMA_PATH) + dataset_type = schema.get_type(gql_type) + assert isinstance(dataset_type, GraphQLObjectType) + + fields = parse_fields(dataset_type) + + assert len(fields) > 0 + assert all(isinstance(f, FieldInfo) for f in fields) + + +def test_write_models(tmp_path: Path): + models = ( + ModelInfo( + name="TestDataset", + gql_name="test_datasets", + fields=( + FieldInfo("id", "int", "IntField()"), + FieldInfo("title", "str", "StringField()"), + ), + ), + ModelInfo( + name="TestRun", + gql_name="test_runs", + fields=( + FieldInfo("id", "int", "IntField()"), + FieldInfo("name", "str", "StringField()"), + ), + ), + ) + models_path = tmp_path / "_tmp_models.py" + + write_models(models, models_path) + + with _import_module_from_file(models_path) as module: + module_dir = dir(module) + assert "TestDataset" in module_dir + assert "TestRun" in module_dir + + +def test_update_schema_and_models(gql_url: str, tmp_path: Path): + schema_path = tmp_path / "schema.graphql" + models_path = tmp_path / "models.graphql" + + update_schema_and_models( + gql_url=gql_url, + schema_path=schema_path, + models_path=models_path, + ) + + assert _file_content(schema_path) + assert _file_content(models_path) + + +@contextmanager +def _import_module_from_file(path: Path) -> Generator[ModuleType, None, None]: + name = path.stem + spec = spec_from_file_location(name, path) + module = module_from_spec(spec) + try: + sys.modules[name] = module + spec.loader.exec_module(module) + yield import_module(name) + finally: + sys.modules.pop(name) + + +def _file_content(path: Path) -> str: + with open(path, "r") as f: + return f.read().rstrip() diff --git a/client/python/cryoet_data_portal/tests/test_get_client.py b/client/python/cryoet_data_portal/tests/test_get_client.py index 5d60284c5..cc9e74acc 100644 --- a/client/python/cryoet_data_portal/tests/test_get_client.py +++ b/client/python/cryoet_data_portal/tests/test_get_client.py @@ -1,4 +1,6 @@ from cryoet_data_portal import Dataset, Run +from cryoet_data_portal._client import Client +from cryoet_data_portal._models import Annotation def test_relationships(client) -> None: @@ -6,6 +8,12 @@ def test_relationships(client) -> None: ds = datasets.pop() assert ds assert ds.authors.pop() + depo = ds.deposition + assert depo + assert depo.authors.pop() + assert depo.dataset.pop() + assert depo.tomograms.pop() + assert depo.annotations.pop() run = Run.find(client, [Run.dataset.id == ds.id]).pop() assert run assert run.dataset_id == ds.id @@ -37,10 +45,23 @@ def test_relationships_reverse(client) -> None: assert tomo_author.tomogram assert tomo.tomogram_voxel_spacing + assert tomo.deposition assert anno_author.annotation assert anno_file.annotation assert anno.tomogram_voxel_spacing + assert anno.deposition assert vs.run assert ts.run + assert ts.deposition assert ds_author.dataset assert run.dataset + + +def test_item_relationship_with_missing_id(client: Client): + annos = Annotation.find(client, [Annotation.id == 45]) + + assert len(annos) == 1 + anno = annos[0] + assert anno + assert anno.deposition_id is None + assert anno.deposition is None diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/README.md b/client/python/cryoet_data_portal/tests/test_infra/hasura/README.md new file mode 100644 index 000000000..f99deef13 --- /dev/null +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/README.md @@ -0,0 +1,35 @@ +The hasura metadata and migrations need to be manually kept in sync with the definitions in the backend repo. + +# Metadata + +This can simply be copied over with a command like the following + +```shell +cp -r ~/src/cryoet-data-portal-backend/api_server/metadata . +``` + +# Migrations + +There should only be one table (cryoetdataportal) with two migrations. + +## Initialization + +The first init migration is created by dumping the schema from the test infrastructure defined in the cryoet data portal backend repo. + +Assuming that the postgres container in that repo is running (e.g. after running `make init`), you can run + +``` +pg_dump --host=localhost --port=5432 --dbname=cryoet --username=postgres --schema=public --schema-only --no-owner --no-tablespaces -f migrations/cryoetdataportal/0000000000000_init/up.sql +``` + +to dump the commands necessary to define that schema. You may have to manually remove a few lines to make this work with the test infrastructure defined here (e.g. by removing `CREATE SCHEMA public`). + +## Data definition + +The second data migration is manually maintained. + +It contains the commands to define fake data used for testing. + +The values here only matter with respect to any tests against the client. + +When defining new fake values, be creative and ideally avoid real values (e.g. actual author names from the portal). diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_authors.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_authors.yaml index 87975a1db..24bedd0b7 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_authors.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_authors.yaml @@ -20,6 +20,7 @@ select_permissions: - name - orcid - primary_annotator_status + - primary_author_status filter: {} allow_aggregations: true query_root_fields: diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_files.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_files.yaml index 649cfa79a..40217f667 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_files.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotation_files.yaml @@ -10,11 +10,11 @@ select_permissions: permission: columns: - annotation_id - - id - - is_visualization_default - - shape_type - format - https_path + - id + - is_visualization_default - s3_path + - shape_type filter: {} allow_aggregations: true diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotations.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotations.yaml index 7edf5fa5d..8911f441b 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotations.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_annotations.yaml @@ -2,6 +2,15 @@ table: name: annotations schema: public object_relationships: + - name: deposition + using: + manual_configuration: + column_mapping: + deposition_id: id + insertion_order: null + remote_table: + name: depositions + schema: public - name: tomogram_voxel_spacing using: foreign_key_constraint_on: tomogram_voxel_spacing_id @@ -37,6 +46,7 @@ select_permissions: - id - is_curator_recommended - last_modified_date + - method_links - method_type - object_count - object_description diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_datasets.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_datasets.yaml index 91e36b57e..4bc2f3ad0 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_datasets.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_datasets.yaml @@ -1,6 +1,16 @@ table: name: datasets schema: public +object_relationships: + - name: deposition + using: + manual_configuration: + column_mapping: + deposition_id: id + insertion_order: null + remote_table: + name: depositions + schema: public array_relationships: - name: authors using: @@ -27,15 +37,16 @@ select_permissions: - role: anonymous permission: columns: + - cell_component_id + - cell_component_name - cell_name - cell_strain_id - cell_strain_name - cell_type_id - - cell_component_id - - cell_component_name - dataset_citations - dataset_publications - deposition_date + - deposition_id - description - grid_preparation - https_prefix diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_deposition_authors.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_deposition_authors.yaml new file mode 100644 index 000000000..80696cca3 --- /dev/null +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_deposition_authors.yaml @@ -0,0 +1,24 @@ +table: + name: deposition_authors + schema: public +object_relationships: + - name: deposition + using: + foreign_key_constraint_on: deposition_id +select_permissions: + - role: anonymous + permission: + columns: + - affiliation_address + - affiliation_identifier + - orcid + - email + - name + - corresponding_author_status + - primary_author_status + - affiliation_name + - id + - deposition_id + - author_list_order + filter: {} + allow_aggregations: true diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_depositions.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_depositions.yaml new file mode 100644 index 000000000..74690e0ac --- /dev/null +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_depositions.yaml @@ -0,0 +1,66 @@ +table: + name: depositions + schema: public +array_relationships: + - name: annotations + using: + manual_configuration: + column_mapping: + id: deposition_id + insertion_order: null + remote_table: + name: annotations + schema: public + - name: authors + using: + foreign_key_constraint_on: + column: deposition_id + table: + name: deposition_authors + schema: public + - name: dataset + using: + manual_configuration: + column_mapping: + id: deposition_id + insertion_order: null + remote_table: + name: datasets + schema: public + - name: tiltseries + using: + manual_configuration: + column_mapping: + id: deposition_id + insertion_order: null + remote_table: + name: tiltseries + schema: public + - name: tomograms + using: + manual_configuration: + column_mapping: + id: deposition_id + insertion_order: null + remote_table: + name: tomograms + schema: public +select_permissions: + - role: anonymous + permission: + columns: + - deposition_date + - deposition_publications + - deposition_types + - description + - https_prefix + - id + - key_photo_thumbnail_url + - key_photo_url + - last_modified_date + - related_database_entries + - release_date + - s3_prefix + - title + filter: {} + allow_aggregations: true diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tiltseries.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tiltseries.yaml index b8987075b..f8983f901 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tiltseries.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tiltseries.yaml @@ -2,6 +2,15 @@ table: name: tiltseries schema: public object_relationships: + - name: deposition + using: + manual_configuration: + column_mapping: + deposition_id: id + insertion_order: null + remote_table: + name: depositions + schema: public - name: run using: foreign_key_constraint_on: run_id @@ -15,6 +24,7 @@ select_permissions: - camera_manufacturer - camera_model - data_acquisition_software + - deposition_id - frames_count - https_alignment_file - https_angle_list diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tomograms.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tomograms.yaml index 6427f6fa9..d71eff736 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tomograms.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/public_tomograms.yaml @@ -2,6 +2,15 @@ table: name: tomograms schema: public object_relationships: + - name: deposition + using: + manual_configuration: + column_mapping: + deposition_id: id + insertion_order: null + remote_table: + name: depositions + schema: public - name: tomogram_type using: foreign_key_constraint_on: type diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/tables.yaml b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/tables.yaml index 9ab37c491..7ce06caaf 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/tables.yaml +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/metadata/databases/cryoetdataportal/tables/tables.yaml @@ -4,6 +4,8 @@ - "!include public_dataset_authors.yaml" - "!include public_dataset_funding.yaml" - "!include public_datasets.yaml" +- "!include public_deposition_authors.yaml" +- "!include public_depositions.yaml" - "!include public_runs.yaml" - "!include public_tiltseries.yaml" - "!include public_tomogram_authors.yaml" diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000000_init/up.sql b/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000000_init/up.sql index b260365a9..54592f17d 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000000_init/up.sql +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000000_init/up.sql @@ -1,3 +1,10 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 14.2 (Debian 14.2-1.pgdg110+1) +-- Dumped by pg_dump version 14.13 (Homebrew) + SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; @@ -9,6 +16,9 @@ SET xmloption = content; SET client_min_messages = warning; SET row_security = off; +-- +-- Name: annotation_authors; Type: TABLE; Schema: public; Owner: - +-- CREATE TABLE public.annotation_authors ( id integer NOT NULL, @@ -21,23 +31,106 @@ CREATE TABLE public.annotation_authors ( affiliation_name character varying, affiliation_address character varying, affiliation_identifier character varying, - author_list_order integer + author_list_order integer, + primary_author_status boolean ); -COMMENT ON TABLE public.annotation_authors IS 'Authors for an annotation'; +-- +-- Name: TABLE annotation_authors; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.annotation_authors IS 'Metadata for an annotation''s authors'; + + +-- +-- Name: COLUMN annotation_authors.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.id IS 'Numeric identifier for this annotation author (this may change!)'; + + +-- +-- Name: COLUMN annotation_authors.annotation_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.annotation_id IS 'Reference to the annotation this author contributed to'; + + +-- +-- Name: COLUMN annotation_authors.name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.name IS 'Full name of an annotation author (e.g. Jane Doe).'; + + +-- +-- Name: COLUMN annotation_authors.orcid; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.orcid IS 'A unique, persistent identifier for researchers, provided by ORCID.'; + + +-- +-- Name: COLUMN annotation_authors.corresponding_author_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.corresponding_author_status IS 'Indicating whether an annotator is the corresponding author (YES or NO)'; + + +-- +-- Name: COLUMN annotation_authors.primary_annotator_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.primary_annotator_status IS 'Indicating whether an annotator is the main person executing the annotation, especially on manual annotation (YES or NO)'; + + +-- +-- Name: COLUMN annotation_authors.email; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.email IS 'Email address for this author'; + + +-- +-- Name: COLUMN annotation_authors.affiliation_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.affiliation_name IS 'Name of the institution an annotator is affiliated with. Sometimes, one annotator may have multiple affiliations.'; + + +-- +-- Name: COLUMN annotation_authors.affiliation_address; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.affiliation_address IS 'Address of the institution an annotator is affiliated with.'; + + +-- +-- Name: COLUMN annotation_authors.affiliation_identifier; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.affiliation_identifier IS 'A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR).'; + + +-- +-- Name: COLUMN annotation_authors.author_list_order; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_authors.author_list_order IS 'The order in which the author appears in the publication'; + +-- +-- Name: COLUMN annotation_authors.primary_author_status; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_authors.primary_author_status IS 'Indicating whether an author is the main person executing the annotation, especially on manual annotation (YES or NO)'; + + +-- +-- Name: annotation_authors_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.annotation_authors_id_seq AS integer START WITH 1 @@ -46,23 +139,89 @@ CREATE SEQUENCE public.annotation_authors_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: annotation_authors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.annotation_authors_id_seq OWNED BY public.annotation_authors.id; + +-- +-- Name: annotation_files; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.annotation_files ( id integer NOT NULL, annotation_id integer NOT NULL, shape_type character varying NOT NULL, format character varying NOT NULL, https_path character varying NOT NULL, - s3_path character varying NOT NULL + s3_path character varying NOT NULL, + is_visualization_default boolean DEFAULT false ); -COMMENT ON TABLE public.annotation_files IS 'Information about associated files for a given annotation'; + +-- +-- Name: TABLE annotation_files; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.annotation_files IS 'Metadata for an annotation file'; + + +-- +-- Name: COLUMN annotation_files.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_files.id IS 'Numeric identifier (May change!)'; + + +-- +-- Name: COLUMN annotation_files.annotation_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_files.annotation_id IS 'The ID of the annotation this file applies to'; + + +-- +-- Name: COLUMN annotation_files.shape_type; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_files.shape_type IS 'The type of the annotation'; -COMMENT ON COLUMN public.annotation_files.format IS 'Format of the annotation object file'; -COMMENT ON COLUMN public.annotation_files.https_path IS 'https path of the annotation file'; + + +-- +-- Name: COLUMN annotation_files.format; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_files.format IS 'File format for this file'; + + +-- +-- Name: COLUMN annotation_files.https_path; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_files.https_path IS 'HTTPS path for this annotation file'; + + +-- +-- Name: COLUMN annotation_files.s3_path; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotation_files.s3_path IS 's3 path of the annotation file'; + +-- +-- Name: COLUMN annotation_files.is_visualization_default; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotation_files.is_visualization_default IS 'Data curator’s subjective choice of default annotation to display in visualization for an object'; + + +-- +-- Name: annotation_files_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.annotation_files_id_seq AS integer START WITH 1 @@ -71,8 +230,18 @@ CREATE SEQUENCE public.annotation_files_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: annotation_files_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.annotation_files_id_seq OWNED BY public.annotation_files.id; + +-- +-- Name: annotations; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.annotations ( id integer NOT NULL, s3_metadata_path character varying NOT NULL, @@ -93,29 +262,185 @@ CREATE TABLE public.annotations ( ground_truth_used character varying, tomogram_voxel_spacing_id integer, annotation_software character varying, - is_curator_recommended boolean DEFAULT false + is_curator_recommended boolean DEFAULT false, + method_type character varying, + deposition_id integer, + method_links json ); -COMMENT ON TABLE public.annotations IS 'Inoformation about annotations for a given run'; + +-- +-- Name: TABLE annotations; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.annotations IS 'Metadata for an annotation'; + + +-- +-- Name: COLUMN annotations.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.id IS 'Numeric identifier (May change!)'; -COMMENT ON COLUMN public.annotations.s3_metadata_path IS 's3 path for the metadata json file for this annotation'; -COMMENT ON COLUMN public.annotations.https_metadata_path IS 'https path for the metadata json file for this annotation'; + + +-- +-- Name: COLUMN annotations.s3_metadata_path; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.s3_metadata_path IS 'S3 path for the metadata json file for this annotation'; + + +-- +-- Name: COLUMN annotations.https_metadata_path; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.https_metadata_path IS 'HTTPS path for the metadata json file for this annotation'; + + +-- +-- Name: COLUMN annotations.deposition_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.deposition_date IS 'Date when an annotation set is initially received by the Data Portal.'; + + +-- +-- Name: COLUMN annotations.release_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.release_date IS 'Date when annotation data is made public by the Data Portal.'; + + +-- +-- Name: COLUMN annotations.last_modified_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.last_modified_date IS 'Date when an annotation was last modified in the Data Portal'; + + +-- +-- Name: COLUMN annotations.annotation_publication; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.annotation_publication IS 'DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs.'; + + +-- +-- Name: COLUMN annotations.annotation_method; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.annotation_method IS 'Describe how the annotation is made (e.g. Manual, crYoLO, Positive Unlabeled Learning, template matching)'; + + +-- +-- Name: COLUMN annotations.ground_truth_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.ground_truth_status IS 'Whether an annotation is considered ground truth, as determined by the annotator.'; + + +-- +-- Name: COLUMN annotations.object_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.object_name IS 'Name of the object being annotated (e.g. ribosome, nuclear pore complex, actin filament, membrane)'; + + +-- +-- Name: COLUMN annotations.object_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.object_id IS 'Gene Ontology Cellular Component identifier for the annotation object'; + + +-- +-- Name: COLUMN annotations.object_description; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.object_description IS 'A textual description of the annotation object, can be a longer description to include additional information not covered by the Annotation object name and state.'; + + +-- +-- Name: COLUMN annotations.object_state; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.object_state IS 'Molecule state annotated (e.g. open, closed)'; + + +-- +-- Name: COLUMN annotations.object_count; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.object_count IS 'Number of objects identified'; + + +-- +-- Name: COLUMN annotations.confidence_precision; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.confidence_precision IS 'Describe the confidence level of the annotation. Precision is defined as the % of annotation objects being true positive'; + + +-- +-- Name: COLUMN annotations.confidence_recall; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.confidence_recall IS 'Describe the confidence level of the annotation. Recall is defined as the % of true positives being annotated correctly'; + + +-- +-- Name: COLUMN annotations.ground_truth_used; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.ground_truth_used IS 'Annotation filename used as ground truth for precision and recall'; + + +-- +-- Name: COLUMN annotations.tomogram_voxel_spacing_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.tomogram_voxel_spacing_id IS 'The ID of the tomogram voxel spacing this annotation is part of'; + + +-- +-- Name: COLUMN annotations.annotation_software; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.annotation_software IS 'Software used for generating this annotation'; + + +-- +-- Name: COLUMN annotations.is_curator_recommended; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.annotations.is_curator_recommended IS 'Data curator’s subjective choice as the best annotation of the same annotation object ID'; + +-- +-- Name: COLUMN annotations.method_type; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.method_type IS 'The method type for generating the annotation (e.g. manual, hybrid, automated)'; + + +-- +-- Name: COLUMN annotations.deposition_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.deposition_id IS 'If the annotation is part of a deposition, the related deposition''s id'; + + +-- +-- Name: COLUMN annotations.method_links; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.annotations.method_links IS 'Provides links that generates information on the method used for generating annotation'; + + +-- +-- Name: annotations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.annotations_id_seq AS integer START WITH 1 @@ -124,8 +449,18 @@ CREATE SEQUENCE public.annotations_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: annotations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.annotations_id_seq OWNED BY public.annotations.id; + +-- +-- Name: dataset_authors; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.dataset_authors ( id integer NOT NULL, name character varying NOT NULL, @@ -140,16 +475,95 @@ CREATE TABLE public.dataset_authors ( author_list_order integer ); -COMMENT ON TABLE public.dataset_authors IS 'Authors of a dataset'; + +-- +-- Name: TABLE dataset_authors; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.dataset_authors IS 'Metadata for authors of a dataset'; + + +-- +-- Name: COLUMN dataset_authors.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.dataset_authors.id IS 'A numeric identifier for this author (May change!)'; + + +-- +-- Name: COLUMN dataset_authors.name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.name IS 'Full name of a dataset author (e.g. Jane Doe).'; + + +-- +-- Name: COLUMN dataset_authors.orcid; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.orcid IS 'A unique, persistent identifier for researchers, provided by ORCID.'; + + +-- +-- Name: COLUMN dataset_authors.corresponding_author_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.corresponding_author_status IS 'Indicating whether an author is the corresponding author'; + + +-- +-- Name: COLUMN dataset_authors.email; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.email IS 'Email address for each author'; + + +-- +-- Name: COLUMN dataset_authors.affiliation_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.affiliation_name IS 'Name of the institutions an author is affiliated with. Comma separated'; + + +-- +-- Name: COLUMN dataset_authors.affiliation_address; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.affiliation_address IS 'Address of the institution an author is affiliated with.'; + + +-- +-- Name: COLUMN dataset_authors.affiliation_identifier; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.affiliation_identifier IS 'A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR).'; + + +-- +-- Name: COLUMN dataset_authors.dataset_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.dataset_authors.dataset_id IS 'Numeric identifier for the dataset this author corresponds to'; + + +-- +-- Name: COLUMN dataset_authors.primary_author_status; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.dataset_authors.primary_author_status IS 'Indicating whether an author is the main person associated with the corresponding dataset'; + + +-- +-- Name: COLUMN dataset_authors.author_list_order; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_authors.author_list_order IS 'The order in which the author appears in the publication'; + +-- +-- Name: dataset_authors_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.dataset_authors_id_seq AS integer START WITH 1 @@ -158,8 +572,18 @@ CREATE SEQUENCE public.dataset_authors_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: dataset_authors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.dataset_authors_id_seq OWNED BY public.dataset_authors.id; + +-- +-- Name: dataset_funding; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.dataset_funding ( id integer NOT NULL, dataset_id integer NOT NULL, @@ -167,10 +591,46 @@ CREATE TABLE public.dataset_funding ( grant_id character varying ); -COMMENT ON TABLE public.dataset_funding IS 'Funding sources for a dataset'; + +-- +-- Name: TABLE dataset_funding; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.dataset_funding IS 'Metadata for a dataset''s funding sources'; + + +-- +-- Name: COLUMN dataset_funding.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.dataset_funding.id IS 'A numeric identifier for this funding record (May change!)'; + + +-- +-- Name: COLUMN dataset_funding.dataset_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.dataset_funding.dataset_id IS 'Numeric identifier for the dataset this funding source corresponds to'; + + +-- +-- Name: COLUMN dataset_funding.funding_agency_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_funding.funding_agency_name IS 'Name of the funding agency.'; + + +-- +-- Name: COLUMN dataset_funding.grant_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.dataset_funding.grant_id IS 'Grant identifier provided by the funding agency.'; + +-- +-- Name: dataset_funding_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.dataset_funding_id_seq AS integer START WITH 1 @@ -179,8 +639,18 @@ CREATE SEQUENCE public.dataset_funding_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: dataset_funding_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.dataset_funding_id_seq OWNED BY public.dataset_funding.id; + +-- +-- Name: datasets; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.datasets ( id integer NOT NULL, title character varying NOT NULL, @@ -209,38 +679,486 @@ CREATE TABLE public.datasets ( key_photo_url character varying, key_photo_thumbnail_url character varying, cell_component_name character varying, - cell_component_id character varying + cell_component_id character varying, + deposition_id integer ); -COMMENT ON TABLE public.datasets IS 'Dataset Metadata'; + +-- +-- Name: TABLE datasets; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.datasets IS 'Metadata for a dataset'; + + +-- +-- Name: COLUMN datasets.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.id IS 'An identifier for a CryoET dataset, assigned by the Data Portal. Used to identify the dataset as the directory name in data tree'; + + +-- +-- Name: COLUMN datasets.title; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.title IS 'Title of a CryoET dataset'; + + +-- +-- Name: COLUMN datasets.description; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.description IS 'A short description of a CryoET dataset, similar to an abstract for a journal article or dataset.'; + + +-- +-- Name: COLUMN datasets.deposition_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.deposition_date IS 'Date when a dataset is initially received by the Data Portal.'; + + +-- +-- Name: COLUMN datasets.release_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.release_date IS 'Date when a dataset is made available on the Data Portal.'; + + +-- +-- Name: COLUMN datasets.last_modified_date; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.last_modified_date IS 'Date when a released dataset is last modified.'; + + +-- +-- Name: COLUMN datasets.related_database_entries; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.related_database_entries IS 'If a CryoET dataset is also deposited into another database, enter the database identifier here (e.g. EMPIAR-11445). Use a comma to separate multiple identifiers.'; -COMMENT ON COLUMN public.datasets.related_database_links IS 'If a CryoET dataset is also deposited into another database, e.g. EMPAIR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links.'; + + +-- +-- Name: COLUMN datasets.related_database_links; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.related_database_links IS 'If a CryoET dataset is also deposited into another database, e.g. EMPIAR, enter the database identifier here (e.g.https://www.ebi.ac.uk/empiar/EMPIAR-12345/). Use a comma to separate multiple links.'; + + +-- +-- Name: COLUMN datasets.dataset_publications; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.dataset_publications IS 'DOIs for publications that describe the dataset. Use a comma to separate multiple DOIs.'; + + +-- +-- Name: COLUMN datasets.dataset_citations; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.dataset_citations IS 'DOIs for publications that cite the dataset. Use a comma to separate multiple DOIs.'; + + +-- +-- Name: COLUMN datasets.sample_type; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.sample_type IS 'Type of samples used in a CryoET study. (cell, tissue, organism, intact organelle, in-vitro mixture, in-silico synthetic data, other)'; + + +-- +-- Name: COLUMN datasets.organism_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.organism_name IS 'Name of the organism from which a biological sample used in a CryoET study is derived from, e.g. homo sapiens'; + + +-- +-- Name: COLUMN datasets.organism_taxid; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.organism_taxid IS 'NCBI taxonomy identifier for the organism, e.g. 9606'; -COMMENT ON COLUMN public.datasets.tissue_name IS 'Name of the tissue from which a biological sample used in a CryoET study is derived from.'; -COMMENT ON COLUMN public.datasets.tissue_id IS 'UBERON identifier for the tissue'; + + +-- +-- Name: COLUMN datasets.tissue_name; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.tissue_name IS 'Name of the tissue from which a biological sample used in a CryoET study is derived from.'; + + +-- +-- Name: COLUMN datasets.tissue_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.tissue_id IS 'UBERON identifier for the tissue'; + + +-- +-- Name: COLUMN datasets.cell_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.cell_name IS 'Name of the cell from which a biological sample used in a CryoET study is derived from.'; + + +-- +-- Name: COLUMN datasets.cell_type_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.cell_type_id IS 'Cell Ontology identifier for the cell type'; + + +-- +-- Name: COLUMN datasets.cell_strain_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.cell_strain_name IS 'Cell line or strain for the sample.'; -COMMENT ON COLUMN public.datasets.cell_strain_id IS 'NCBI Identifier for the cell line or strain'; + + +-- +-- Name: COLUMN datasets.cell_strain_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.cell_strain_id IS 'Link to more information about the cell strain'; + + +-- +-- Name: COLUMN datasets.sample_preparation; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.sample_preparation IS 'Describe how the sample was prepared.'; + + +-- +-- Name: COLUMN datasets.grid_preparation; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.grid_preparation IS 'Describe Cryo-ET grid preparation.'; + + +-- +-- Name: COLUMN datasets.other_setup; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.other_setup IS 'Describe other setup not covered by sample preparation or grid preparation that may make this dataset unique in the same publication'; + + +-- +-- Name: COLUMN datasets.s3_prefix; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.s3_prefix IS 'The S3 public bucket path where this dataset is contained'; + + +-- +-- Name: COLUMN datasets.https_prefix; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.https_prefix IS 'The https directory path where this dataset is contained'; + + +-- +-- Name: COLUMN datasets.key_photo_url; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.key_photo_url IS 'URL for the dataset preview image.'; + + +-- +-- Name: COLUMN datasets.key_photo_thumbnail_url; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.key_photo_thumbnail_url IS 'URL for the thumbnail of preview image.'; + + +-- +-- Name: COLUMN datasets.cell_component_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.datasets.cell_component_name IS 'Name of the cellular component'; -COMMENT ON COLUMN public.datasets.cell_component_id IS 'If this dataset only focuses on a specific part of a cell, include the subset here'; + + +-- +-- Name: COLUMN datasets.cell_component_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.cell_component_id IS 'If the dataset focuses on a specific part of a cell, the subset is included here'; + + +-- +-- Name: COLUMN datasets.deposition_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.datasets.deposition_id IS 'Reference to the deposition this dataset is associated with'; + + +-- +-- Name: deposition_authors; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.deposition_authors ( + id integer NOT NULL, + name character varying NOT NULL, + orcid character varying, + corresponding_author_status boolean DEFAULT false, + email character varying, + affiliation_name character varying, + affiliation_address character varying, + affiliation_identifier character varying, + deposition_id integer NOT NULL, + primary_author_status boolean DEFAULT false, + author_list_order integer NOT NULL +); + + +-- +-- Name: TABLE deposition_authors; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.deposition_authors IS 'Authors for a deposition'; + + +-- +-- Name: COLUMN deposition_authors.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.id IS 'Numeric identifier for this deposition author (this may change!)'; + + +-- +-- Name: COLUMN deposition_authors.name; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.name IS 'Full name of a deposition author (e.g. Jane Doe).'; + + +-- +-- Name: COLUMN deposition_authors.orcid; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.orcid IS 'A unique, persistent identifier for researchers, provided by ORCID.'; + + +-- +-- Name: COLUMN deposition_authors.corresponding_author_status; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.corresponding_author_status IS 'Indicates whether an author is the corresponding author'; + + +-- +-- Name: COLUMN deposition_authors.email; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.email IS 'Email address for this author'; + + +-- +-- Name: COLUMN deposition_authors.affiliation_name; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.affiliation_name IS 'Name of the institution an author is affiliated with.'; + + +-- +-- Name: COLUMN deposition_authors.affiliation_address; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.affiliation_address IS 'Address of the institution an author is affiliated with.'; + + +-- +-- Name: COLUMN deposition_authors.affiliation_identifier; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.affiliation_identifier IS 'A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR).'; + + +-- +-- Name: COLUMN deposition_authors.deposition_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.deposition_id IS 'Reference to the deposition this author contributed to'; + + +-- +-- Name: COLUMN deposition_authors.primary_author_status; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.primary_author_status IS 'Indicates whether an author is the main person creating the deposition'; + + +-- +-- Name: COLUMN deposition_authors.author_list_order; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.deposition_authors.author_list_order IS 'The order in which the author appears in the publication'; + + +-- +-- Name: deposition_authors_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.deposition_authors_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: deposition_authors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.deposition_authors_id_seq OWNED BY public.deposition_authors.id; + + +-- +-- Name: depositions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.depositions ( + id integer NOT NULL, + title character varying NOT NULL, + description character varying NOT NULL, + deposition_date date NOT NULL, + release_date date NOT NULL, + last_modified_date date NOT NULL, + related_database_entries character varying, + deposition_publications character varying, + deposition_types character varying NOT NULL, + s3_prefix character varying, + https_prefix character varying, + key_photo_url character varying, + key_photo_thumbnail_url character varying +); + + +-- +-- Name: TABLE depositions; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.depositions IS 'Deposition metadata'; + + +-- +-- Name: COLUMN depositions.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.id IS 'Numeric identifier for this depositions'; + + +-- +-- Name: COLUMN depositions.title; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.title IS 'Title for the deposition'; + + +-- +-- Name: COLUMN depositions.description; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.description IS 'Description for the deposition'; + + +-- +-- Name: COLUMN depositions.deposition_date; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.deposition_date IS 'The date the deposition was deposited'; + + +-- +-- Name: COLUMN depositions.release_date; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.release_date IS 'The date the deposition was released'; + + +-- +-- Name: COLUMN depositions.last_modified_date; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.last_modified_date IS 'The date the deposition was last modified'; + + +-- +-- Name: COLUMN depositions.related_database_entries; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.related_database_entries IS 'The related database entries to this deposition'; + + +-- +-- Name: COLUMN depositions.deposition_publications; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.deposition_publications IS 'The publications related to this deposition'; + + +-- +-- Name: COLUMN depositions.deposition_types; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.deposition_types IS 'The types of data submitted as a part of this deposition'; + + +-- +-- Name: COLUMN depositions.s3_prefix; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.s3_prefix IS 'The S3 public bucket path where data about this deposition is contained'; + + +-- +-- Name: COLUMN depositions.https_prefix; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.https_prefix IS 'The https directory path where data about this deposition is contained'; + + +-- +-- Name: COLUMN depositions.key_photo_url; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.key_photo_url IS 'URL for the deposition preview image.'; + + +-- +-- Name: COLUMN depositions.key_photo_thumbnail_url; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.depositions.key_photo_thumbnail_url IS 'URL for the deposition thumbnail image.'; + + +-- +-- Name: depositions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.depositions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: depositions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.depositions_id_seq OWNED BY public.depositions.id; + + +-- +-- Name: runs; Type: TABLE; Schema: public; Owner: - +-- CREATE TABLE public.runs ( id integer NOT NULL, @@ -250,12 +1168,52 @@ CREATE TABLE public.runs ( https_prefix character varying NOT NULL ); -COMMENT ON TABLE public.runs IS 'Data related to an experiment run'; + +-- +-- Name: TABLE runs; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.runs IS 'Metadata for an experiment run'; + + +-- +-- Name: COLUMN runs.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.runs.id IS 'Numeric identifier (May change!)'; + + +-- +-- Name: COLUMN runs.dataset_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.runs.dataset_id IS 'Reference to the dataset this run is a part of'; -COMMENT ON COLUMN public.runs.name IS 'Short name for the tilt series'; + + +-- +-- Name: COLUMN runs.name; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.runs.name IS 'Short name for this experiment run'; + + +-- +-- Name: COLUMN runs.s3_prefix; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.runs.s3_prefix IS 'The S3 public bucket path where this dataset is contained'; -COMMENT ON COLUMN public.runs.https_prefix IS 'The https directory path where this dataset is contained'; + + +-- +-- Name: COLUMN runs.https_prefix; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.runs.https_prefix IS 'The HTTPS directory path where this dataset is contained'; + + +-- +-- Name: runs_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- CREATE SEQUENCE public.runs_id_seq AS integer @@ -265,8 +1223,18 @@ CREATE SEQUENCE public.runs_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: runs_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.runs_id_seq OWNED BY public.runs.id; + +-- +-- Name: tiltseries; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.tiltseries ( id integer NOT NULL, run_id integer NOT NULL, @@ -304,35 +1272,288 @@ CREATE TABLE public.tiltseries ( is_aligned boolean DEFAULT false NOT NULL, pixel_spacing numeric, aligned_tiltseries_binning integer, - frames_count integer DEFAULT 0 + frames_count integer DEFAULT 0, + deposition_id integer ); -COMMENT ON TABLE public.tiltseries IS 'Tilt Series Metadata'; + +-- +-- Name: TABLE tiltseries; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.tiltseries IS 'Metadata about how a tilt series was generated, and locations of output files'; + + +-- +-- Name: COLUMN tiltseries.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.id IS 'Numeric identifier for this tilt series (this may change!)'; + + +-- +-- Name: COLUMN tiltseries.run_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.run_id IS 'The ID of the experimental run this tilt series is part of'; + + +-- +-- Name: COLUMN tiltseries.s3_mrc_bin1; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.s3_mrc_bin1 IS 'S3 path to this tiltseries in MRC format (no scaling)'; + + +-- +-- Name: COLUMN tiltseries.s3_omezarr_dir; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.s3_omezarr_dir IS 'S3 path to this tomogram in multiscale OME-Zarr format'; + + +-- +-- Name: COLUMN tiltseries.https_mrc_bin1; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.https_mrc_bin1 IS 'HTTPS path to this tiltseries in MRC format (no scaling)'; + + +-- +-- Name: COLUMN tiltseries.https_omezarr_dir; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.https_omezarr_dir IS 'HTTPS path to this tomogram in multiscale OME-Zarr format'; + + +-- +-- Name: COLUMN tiltseries.s3_collection_metadata; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.s3_collection_metadata IS 'S3 path to the collection metadata file for this tiltseries'; + + +-- +-- Name: COLUMN tiltseries.https_collection_metadata; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.https_collection_metadata IS 'HTTPS path to the collection metadata file for this tiltseries'; + + +-- +-- Name: COLUMN tiltseries.s3_angle_list; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.s3_angle_list IS 'S3 path to the angle list file for this tilt series'; + + +-- +-- Name: COLUMN tiltseries.https_angle_list; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.https_angle_list IS 'HTTPS path to the angle list file for this tiltseries'; + + +-- +-- Name: COLUMN tiltseries.s3_alignment_file; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.s3_alignment_file IS 'S3 path to the alignment file for this tilt series'; + + +-- +-- Name: COLUMN tiltseries.https_alignment_file; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.https_alignment_file IS 'HTTPS path to the alignment file for this tiltseries'; + + +-- +-- Name: COLUMN tiltseries.acceleration_voltage; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.acceleration_voltage IS 'Electron Microscope Accelerator voltage in volts'; + + +-- +-- Name: COLUMN tiltseries.spherical_aberration_constant; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.spherical_aberration_constant IS 'Spherical Aberration Constant of the objective lens in millimeters'; + + +-- +-- Name: COLUMN tiltseries.microscope_manufacturer; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_manufacturer IS 'Name of the microscope manufacturer'; + + +-- +-- Name: COLUMN tiltseries.microscope_model; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_model IS 'Microscope model name'; + + +-- +-- Name: COLUMN tiltseries.microscope_energy_filter; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_energy_filter IS 'Energy filter setup used'; + + +-- +-- Name: COLUMN tiltseries.microscope_phase_plate; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_phase_plate IS 'Phase plate configuration'; + + +-- +-- Name: COLUMN tiltseries.microscope_image_corrector; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_image_corrector IS 'Image corrector setup'; + + +-- +-- Name: COLUMN tiltseries.microscope_additional_info; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.microscope_additional_info IS 'Other microscope optical setup information, in addition to energy filter, phase plate and image corrector'; + + +-- +-- Name: COLUMN tiltseries.camera_manufacturer; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.camera_manufacturer IS 'Name of the camera manufacturer'; + + +-- +-- Name: COLUMN tiltseries.camera_model; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.camera_model IS 'Camera model name'; + + +-- +-- Name: COLUMN tiltseries.tilt_min; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.tilt_min IS 'Minimal tilt angle in degrees'; + + +-- +-- Name: COLUMN tiltseries.tilt_max; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.tilt_max IS 'Maximal tilt angle in degrees'; -COMMENT ON COLUMN public.tiltseries.tilt_range IS 'The difference between tilt_min and tilt_max'; + + +-- +-- Name: COLUMN tiltseries.tilt_range; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.tilt_range IS 'Total tilt range in degrees'; + + +-- +-- Name: COLUMN tiltseries.tilt_step; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.tilt_step IS 'Tilt step in degrees'; + + +-- +-- Name: COLUMN tiltseries.tilting_scheme; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.tilting_scheme IS 'The order of stage tilting during acquisition of the data'; + + +-- +-- Name: COLUMN tiltseries.tilt_axis; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.tilt_axis IS 'Rotation angle in degrees'; + + +-- +-- Name: COLUMN tiltseries.total_flux; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.total_flux IS 'Number of Electrons reaching the specimen in a square Angstrom area for the entire tilt series'; + + +-- +-- Name: COLUMN tiltseries.data_acquisition_software; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.data_acquisition_software IS 'Software used to collect data'; -COMMENT ON COLUMN public.tiltseries.related_empiar_entry IS 'If a tilt series is deposited into EMPIAR, enter the EMPIAR dataset identifier'; + + +-- +-- Name: COLUMN tiltseries.related_empiar_entry; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.related_empiar_entry IS 'If a tilt series is deposited into EMPIAR, the EMPIAR dataset identifier'; + + +-- +-- Name: COLUMN tiltseries.binning_from_frames; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.binning_from_frames IS 'Describes the binning factor from frames to tilt series file'; + + +-- +-- Name: COLUMN tiltseries.tilt_series_quality; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.tilt_series_quality IS 'Author assessment of tilt series quality within the dataset (1-5, 5 is best)'; + + +-- +-- Name: COLUMN tiltseries.is_aligned; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.is_aligned IS 'Tilt series is aligned'; -COMMENT ON COLUMN public.tiltseries.pixel_spacing IS 'Pixel spacing equal in both axes in angstrom'; -COMMENT ON COLUMN public.tiltseries.aligned_tiltseries_binning IS 'The binning factor between the unaligned tilt series and the aligned tiltseries.'; + + +-- +-- Name: COLUMN tiltseries.pixel_spacing; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.pixel_spacing IS 'Pixel spacing equal in both axes in angstroms'; + + +-- +-- Name: COLUMN tiltseries.aligned_tiltseries_binning; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.aligned_tiltseries_binning IS 'Binning factor of the aligned tilt series'; + + +-- +-- Name: COLUMN tiltseries.frames_count; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tiltseries.frames_count IS 'Number of frames associated to the tilt series'; + +-- +-- Name: COLUMN tiltseries.deposition_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tiltseries.deposition_id IS 'Reference to the deposition this tiltseries is associated with'; + + +-- +-- Name: tiltseries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.tiltseries_id_seq AS integer START WITH 1 @@ -341,8 +1562,18 @@ CREATE SEQUENCE public.tiltseries_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: tiltseries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.tiltseries_id_seq OWNED BY public.tiltseries.id; + +-- +-- Name: tomogram_authors; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.tomogram_authors ( id integer NOT NULL, tomogram_id integer NOT NULL, @@ -357,19 +1588,95 @@ CREATE TABLE public.tomogram_authors ( affiliation_identifier character varying ); -COMMENT ON TABLE public.tomogram_authors IS 'Authors for a tomogram'; + +-- +-- Name: TABLE tomogram_authors; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.tomogram_authors IS 'Metadata for a tomogram''s authors'; + + +-- +-- Name: COLUMN tomogram_authors.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.id IS 'Numeric identifier for this tomogram author (this may change!)'; + + +-- +-- Name: COLUMN tomogram_authors.tomogram_id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.tomogram_id IS 'Reference to the tomogram this author contributed to'; + + +-- +-- Name: COLUMN tomogram_authors.author_list_order; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.author_list_order IS 'The order in which the author appears in the publication'; -COMMENT ON COLUMN public.tomogram_authors.name IS 'Full name of an tomogram author (e.g. Jane Doe).'; + + +-- +-- Name: COLUMN tomogram_authors.name; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_authors.name IS 'Full name of an author (e.g. Jane Doe).'; + + +-- +-- Name: COLUMN tomogram_authors.orcid; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.orcid IS 'A unique, persistent identifier for researchers, provided by ORCID.'; + + +-- +-- Name: COLUMN tomogram_authors.corresponding_author_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.corresponding_author_status IS 'Indicating whether an author is the corresponding author (YES or NO)'; + + +-- +-- Name: COLUMN tomogram_authors.primary_author_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.primary_author_status IS 'Indicating whether an author is the main person creating the tomogram (YES or NO)'; + + +-- +-- Name: COLUMN tomogram_authors.email; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.email IS 'Email address for this author'; + + +-- +-- Name: COLUMN tomogram_authors.affiliation_name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.affiliation_name IS 'Name of the institution an annotator is affiliated with. Sometimes, one annotator may have multiple affiliations.'; -COMMENT ON COLUMN public.tomogram_authors.affiliation_address IS 'Address of the institution an annotator is affiliated with.'; + + +-- +-- Name: COLUMN tomogram_authors.affiliation_address; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_authors.affiliation_address IS 'Address of the institution an author is affiliated with.'; + + +-- +-- Name: COLUMN tomogram_authors.affiliation_identifier; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomogram_authors.affiliation_identifier IS 'A unique identifier assigned to the affiliated institution by The Research Organization Registry (ROR).'; + +-- +-- Name: tomogram_authors_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.tomogram_authors_id_seq AS integer START WITH 1 @@ -378,15 +1685,35 @@ CREATE SEQUENCE public.tomogram_authors_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: tomogram_authors_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.tomogram_authors_id_seq OWNED BY public.tomogram_authors.id; + +-- +-- Name: tomogram_type; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.tomogram_type ( value text NOT NULL, description text ); + +-- +-- Name: TABLE tomogram_type; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON TABLE public.tomogram_type IS 'The type of tomograms'; + +-- +-- Name: tomogram_voxel_spacings; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.tomogram_voxel_spacings ( id integer NOT NULL, run_id integer NOT NULL, @@ -395,7 +1722,52 @@ CREATE TABLE public.tomogram_voxel_spacings ( https_prefix character varying ); -COMMENT ON TABLE public.tomogram_voxel_spacings IS 'The tomograms for each run are grouped by their voxel spacing'; + +-- +-- Name: TABLE tomogram_voxel_spacings; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.tomogram_voxel_spacings IS 'Metadata for a given voxel spacing related to tomograms and annotations'; + + +-- +-- Name: COLUMN tomogram_voxel_spacings.id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_voxel_spacings.id IS 'Numeric identifier (May change!)'; + + +-- +-- Name: COLUMN tomogram_voxel_spacings.run_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_voxel_spacings.run_id IS 'The ID of the run this tomogram voxel spacing is a part of'; + + +-- +-- Name: COLUMN tomogram_voxel_spacings.voxel_spacing; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_voxel_spacings.voxel_spacing IS 'The voxel spacing for the tomograms in this set in angstroms'; + + +-- +-- Name: COLUMN tomogram_voxel_spacings.s3_prefix; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_voxel_spacings.s3_prefix IS 'The S3 public bucket path where this tomogram voxel spacing is contained'; + + +-- +-- Name: COLUMN tomogram_voxel_spacings.https_prefix; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomogram_voxel_spacings.https_prefix IS 'The HTTPS directory path where this tomogram voxel spacing is contained'; + + +-- +-- Name: tomogram_voxel_spacing_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- CREATE SEQUENCE public.tomogram_voxel_spacing_id_seq AS integer @@ -405,8 +1777,18 @@ CREATE SEQUENCE public.tomogram_voxel_spacing_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: tomogram_voxel_spacing_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.tomogram_voxel_spacing_id_seq OWNED BY public.tomogram_voxel_spacings.id; + +-- +-- Name: tomograms; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.tomograms ( id integer NOT NULL, name character varying NOT NULL, @@ -437,38 +1819,239 @@ CREATE TABLE public.tomograms ( key_photo_url character varying, key_photo_thumbnail_url character varying, neuroglancer_config character varying, - type text + type text, + deposition_id integer ); -COMMENT ON TABLE public.tomograms IS 'information about the tomograms in the CryoET Data Portal'; + +-- +-- Name: TABLE tomograms; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON TABLE public.tomograms IS 'Metadata for a tomogram'; + + +-- +-- Name: COLUMN tomograms.id; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.id IS 'Numeric identifier for this tomogram (this may change!)'; + + +-- +-- Name: COLUMN tomograms.name; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.name IS 'Short name for this tomogram'; + + +-- +-- Name: COLUMN tomograms.size_x; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.size_x IS 'Number of pixels in the 3D data fast axis'; + + +-- +-- Name: COLUMN tomograms.size_y; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.size_y IS 'Number of pixels in the 3D data medium axis'; + + +-- +-- Name: COLUMN tomograms.size_z; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.size_z IS 'Number of pixels in the 3D data slow axis. This is the image projection direction at zero stage tilt'; + + +-- +-- Name: COLUMN tomograms.voxel_spacing; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.voxel_spacing IS 'Voxel spacing equal in all three axes in angstroms'; + + +-- +-- Name: COLUMN tomograms.fiducial_alignment_status; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.fiducial_alignment_status IS 'Fiducial Alignment status: True = aligned with fiducial False = aligned without fiducial'; -COMMENT ON COLUMN public.tomograms.reconstruction_method IS 'Describe reconstruction method (Weighted backprojection, SART, SIRT)'; + + +-- +-- Name: COLUMN tomograms.reconstruction_method; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.reconstruction_method IS 'Describe reconstruction method (Weighted back-projection, SART, SIRT)'; + + +-- +-- Name: COLUMN tomograms.reconstruction_software; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.reconstruction_software IS 'Name of software used for reconstruction'; + + +-- +-- Name: COLUMN tomograms.processing; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.processing IS 'Describe additional processing used to derive the tomogram'; + + +-- +-- Name: COLUMN tomograms.processing_software; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.processing_software IS 'Processing software used to derive the tomogram'; + + +-- +-- Name: COLUMN tomograms.tomogram_version; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.tomogram_version IS 'Version of tomogram using the same software and post-processing. Version of tomogram using the same software and post-processing. This will be presented as the latest version'; + + +-- +-- Name: COLUMN tomograms.is_canonical; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.is_canonical IS 'Is this tomogram considered the canonical tomogram for the run experiment? True=Yes'; -COMMENT ON COLUMN public.tomograms.s3_omezarr_dir IS 'S3 path to the this multiscale omezarr tomogram'; -COMMENT ON COLUMN public.tomograms.https_omezarr_dir IS 'HTTPS path to the this multiscale omezarr tomogram'; + + +-- +-- Name: COLUMN tomograms.s3_omezarr_dir; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.s3_omezarr_dir IS 'S3 path to this tomogram in multiscale OME-Zarr format'; + + +-- +-- Name: COLUMN tomograms.https_omezarr_dir; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.https_omezarr_dir IS 'HTTPS path to this tomogram in multiscale OME-Zarr format'; + + +-- +-- Name: COLUMN tomograms.s3_mrc_scale0; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.s3_mrc_scale0 IS 'S3 path to this tomogram in MRC format (no scaling)'; -COMMENT ON COLUMN public.tomograms.https_mrc_scale0 IS 'https path to this tomogram in MRC format (no scaling)'; + + +-- +-- Name: COLUMN tomograms.https_mrc_scale0; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.https_mrc_scale0 IS 'HTTPS path to this tomogram in MRC format (no scaling)'; + + +-- +-- Name: COLUMN tomograms.scale0_dimensions; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.scale0_dimensions IS 'comma separated x,y,z dimensions of the unscaled tomogram'; + + +-- +-- Name: COLUMN tomograms.scale1_dimensions; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.scale1_dimensions IS 'comma separated x,y,z dimensions of the scale1 tomogram'; + + +-- +-- Name: COLUMN tomograms.scale2_dimensions; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.scale2_dimensions IS 'comma separated x,y,z dimensions of the scale2 tomogram'; + + +-- +-- Name: COLUMN tomograms.ctf_corrected; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.ctf_corrected IS 'Whether this tomogram is CTF corrected'; + + +-- +-- Name: COLUMN tomograms.tomogram_voxel_spacing_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.tomogram_voxel_spacing_id IS 'The ID of the tomogram voxel spacing this tomogram is part of'; + + +-- +-- Name: COLUMN tomograms.offset_x; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.offset_x IS 'x offset data relative to the canonical tomogram in pixels'; + + +-- +-- Name: COLUMN tomograms.offset_y; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.offset_y IS 'y offset data relative to the canonical tomogram in pixels'; + + +-- +-- Name: COLUMN tomograms.offset_z; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.offset_z IS 'z offset data relative to the canonical tomogram in pixels'; + + +-- +-- Name: COLUMN tomograms.affine_transformation_matrix; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.affine_transformation_matrix IS 'The flip or rotation transformation of this author submitted tomogram is indicated here'; + + +-- +-- Name: COLUMN tomograms.key_photo_url; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.key_photo_url IS 'URL for the key photo'; + + +-- +-- Name: COLUMN tomograms.key_photo_thumbnail_url; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.key_photo_thumbnail_url IS 'URL for the thumbnail of key photo'; + + +-- +-- Name: COLUMN tomograms.neuroglancer_config; Type: COMMENT; Schema: public; Owner: - +-- + COMMENT ON COLUMN public.tomograms.neuroglancer_config IS 'the compact json of neuroglancer config'; + +-- +-- Name: COLUMN tomograms.type; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.type IS 'Tomogram purpose (ex: CANONICAL)'; + + +-- +-- Name: COLUMN tomograms.deposition_id; Type: COMMENT; Schema: public; Owner: - +-- + +COMMENT ON COLUMN public.tomograms.deposition_id IS 'If the tomogram is part of a deposition, the related deposition''s id'; + + +-- +-- Name: tomograms_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + CREATE SEQUENCE public.tomograms_id_seq AS integer START WITH 1 @@ -477,88 +2060,429 @@ CREATE SEQUENCE public.tomograms_id_seq NO MAXVALUE CACHE 1; + +-- +-- Name: tomograms_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + ALTER SEQUENCE public.tomograms_id_seq OWNED BY public.tomograms.id; + +-- +-- Name: annotation_authors id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_authors ALTER COLUMN id SET DEFAULT nextval('public.annotation_authors_id_seq'::regclass); + + +-- +-- Name: annotation_files id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_files ALTER COLUMN id SET DEFAULT nextval('public.annotation_files_id_seq'::regclass); + + +-- +-- Name: annotations id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotations ALTER COLUMN id SET DEFAULT nextval('public.annotations_id_seq'::regclass); + + +-- +-- Name: dataset_authors id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_authors ALTER COLUMN id SET DEFAULT nextval('public.dataset_authors_id_seq'::regclass); + + +-- +-- Name: dataset_funding id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_funding ALTER COLUMN id SET DEFAULT nextval('public.dataset_funding_id_seq'::regclass); + + +-- +-- Name: deposition_authors id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.deposition_authors ALTER COLUMN id SET DEFAULT nextval('public.deposition_authors_id_seq'::regclass); + + +-- +-- Name: depositions id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.depositions ALTER COLUMN id SET DEFAULT nextval('public.depositions_id_seq'::regclass); + + +-- +-- Name: runs id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.runs ALTER COLUMN id SET DEFAULT nextval('public.runs_id_seq'::regclass); + + +-- +-- Name: tiltseries id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tiltseries ALTER COLUMN id SET DEFAULT nextval('public.tiltseries_id_seq'::regclass); + + +-- +-- Name: tomogram_authors id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_authors ALTER COLUMN id SET DEFAULT nextval('public.tomogram_authors_id_seq'::regclass); + + +-- +-- Name: tomogram_voxel_spacings id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_voxel_spacings ALTER COLUMN id SET DEFAULT nextval('public.tomogram_voxel_spacing_id_seq'::regclass); + + +-- +-- Name: tomograms id; Type: DEFAULT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomograms ALTER COLUMN id SET DEFAULT nextval('public.tomograms_id_seq'::regclass); + + +-- +-- Name: annotation_authors annotation_authors_annotation_id_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_authors ADD CONSTRAINT annotation_authors_annotation_id_name_key UNIQUE (annotation_id, name); + + +-- +-- Name: annotation_authors annotation_authors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_authors ADD CONSTRAINT annotation_authors_pkey PRIMARY KEY (id); + + +-- +-- Name: annotation_files annotation_files_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_files ADD CONSTRAINT annotation_files_pkey PRIMARY KEY (id); + + +-- +-- Name: annotation_files annotation_files_shape_type_annotation_id_format_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_files ADD CONSTRAINT annotation_files_shape_type_annotation_id_format_key UNIQUE (shape_type, annotation_id, format); + + +-- +-- Name: annotations annotations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotations ADD CONSTRAINT annotations_pkey PRIMARY KEY (id); + + +-- +-- Name: dataset_authors dataset_authors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_authors ADD CONSTRAINT dataset_authors_pkey PRIMARY KEY (id); + + +-- +-- Name: dataset_funding dataset_funding_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_funding ADD CONSTRAINT dataset_funding_pkey PRIMARY KEY (id); + + +-- +-- Name: datasets datasets_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.datasets ADD CONSTRAINT datasets_pkey PRIMARY KEY (id); + + +-- +-- Name: deposition_authors deposition_authors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.deposition_authors + ADD CONSTRAINT deposition_authors_pkey PRIMARY KEY (id); + + +-- +-- Name: depositions depositions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.depositions + ADD CONSTRAINT depositions_pkey PRIMARY KEY (id); + + +-- +-- Name: runs runs_dataset_id_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.runs ADD CONSTRAINT runs_dataset_id_name_key UNIQUE (dataset_id, name); + + +-- +-- Name: runs runs_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.runs ADD CONSTRAINT runs_pkey PRIMARY KEY (id); + + +-- +-- Name: tiltseries tiltseries_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tiltseries ADD CONSTRAINT tiltseries_pkey PRIMARY KEY (id); + + +-- +-- Name: tomogram_authors tomogram_authors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_authors ADD CONSTRAINT tomogram_authors_pkey PRIMARY KEY (id); + + +-- +-- Name: tomogram_authors tomogram_authors_tomogram_id_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_authors ADD CONSTRAINT tomogram_authors_tomogram_id_name_key UNIQUE (tomogram_id, name); + + +-- +-- Name: tomogram_type tomogram_type_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_type ADD CONSTRAINT tomogram_type_pkey PRIMARY KEY (value); + + +-- +-- Name: tomogram_voxel_spacings tomogram_voxel_spacing_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_voxel_spacings ADD CONSTRAINT tomogram_voxel_spacing_pkey PRIMARY KEY (id); + + +-- +-- Name: tomograms tomograms_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomograms ADD CONSTRAINT tomograms_pkey PRIMARY KEY (id); + +-- +-- Name: annotation_files_annotation_id; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX annotation_files_annotation_id ON public.annotation_files USING btree (annotation_id); + + +-- +-- Name: annotation_method; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX annotation_method ON public.annotations USING btree (annotation_method); + + +-- +-- Name: annotations_deposition_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX annotations_deposition_id ON public.annotations USING btree (deposition_id); + + +-- +-- Name: annotations_tomogram_voxel_spacing; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX annotations_tomogram_voxel_spacing ON public.annotations USING btree (tomogram_voxel_spacing_id); + + +-- +-- Name: dataset_authors_dataset; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX dataset_authors_dataset ON public.dataset_authors USING btree (dataset_id); + + +-- +-- Name: dataset_deposition_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX dataset_deposition_id ON public.datasets USING btree (deposition_id); + + +-- +-- Name: dataset_funding_dataset; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX dataset_funding_dataset ON public.dataset_funding USING btree (dataset_id); + + +-- +-- Name: depositions_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX depositions_type ON public.depositions USING btree (deposition_types); + + +-- +-- Name: tiltseries_deposition_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX tiltseries_deposition_id ON public.tiltseries USING btree (deposition_id); + + +-- +-- Name: tiltseries_run; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX tiltseries_run ON public.tiltseries USING btree (run_id); + + +-- +-- Name: tomogram_voxel_spacing_run; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX tomogram_voxel_spacing_run ON public.tomogram_voxel_spacings USING btree (run_id); + + +-- +-- Name: tomograms_deposition_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX tomograms_deposition_id ON public.tomograms USING btree (deposition_id); + + +-- +-- Name: tomograms_tomogram_voxel_spacing_id; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX tomograms_tomogram_voxel_spacing_id ON public.tomograms USING btree (tomogram_voxel_spacing_id); + +-- +-- Name: annotation_authors annotation_authors_annotation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_authors ADD CONSTRAINT annotation_authors_annotation_id_fkey FOREIGN KEY (annotation_id) REFERENCES public.annotations(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: annotation_files annotation_files_annotation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotation_files ADD CONSTRAINT annotation_files_annotation_id_fkey FOREIGN KEY (annotation_id) REFERENCES public.annotations(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: annotations annotations_tomogram_voxel_spacing_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.annotations ADD CONSTRAINT annotations_tomogram_voxel_spacing_id_fkey FOREIGN KEY (tomogram_voxel_spacing_id) REFERENCES public.tomogram_voxel_spacings(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: dataset_authors dataset_authors_dataset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_authors ADD CONSTRAINT dataset_authors_dataset_id_fkey FOREIGN KEY (dataset_id) REFERENCES public.datasets(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: dataset_funding dataset_funding_dataset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.dataset_funding ADD CONSTRAINT dataset_funding_dataset_id_fkey FOREIGN KEY (dataset_id) REFERENCES public.datasets(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: deposition_authors deposition_authors_deposition_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.deposition_authors + ADD CONSTRAINT deposition_authors_deposition_id_fkey FOREIGN KEY (deposition_id) REFERENCES public.depositions(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + + +-- +-- Name: runs runs_dataset_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.runs ADD CONSTRAINT runs_dataset_id_fkey FOREIGN KEY (dataset_id) REFERENCES public.datasets(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: tiltseries tiltseries_run_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tiltseries ADD CONSTRAINT tiltseries_run_id_fkey FOREIGN KEY (run_id) REFERENCES public.runs(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: tomogram_authors tomogram_authors_tomogram_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_authors ADD CONSTRAINT tomogram_authors_tomogram_id_fkey FOREIGN KEY (tomogram_id) REFERENCES public.tomograms(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: tomogram_voxel_spacings tomogram_voxel_spacing_run_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomogram_voxel_spacings ADD CONSTRAINT tomogram_voxel_spacing_run_id_fkey FOREIGN KEY (run_id) REFERENCES public.runs(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: tomograms tomograms_tomogram_voxel_spacing_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomograms ADD CONSTRAINT tomograms_tomogram_voxel_spacing_id_fkey FOREIGN KEY (tomogram_voxel_spacing_id) REFERENCES public.tomogram_voxel_spacings(id) ON UPDATE RESTRICT ON DELETE RESTRICT; + +-- +-- Name: tomograms tomograms_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.tomograms ADD CONSTRAINT tomograms_type_fkey FOREIGN KEY (type) REFERENCES public.tomogram_type(value) ON UPDATE RESTRICT ON DELETE RESTRICT; + + +-- +-- PostgreSQL database dump complete +-- diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000001_data/up.sql b/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000001_data/up.sql index 39664690f..29268ff79 100644 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000001_data/up.sql +++ b/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/0000000000001_data/up.sql @@ -1,8 +1,8 @@ INSERT INTO public.tomogram_type VALUES ('CANONICAL', NULL); INSERT INTO public.tomogram_type VALUES ('UNKNOWN', NULL); -INSERT INTO public.datasets VALUES (20001, 'Test Dataset 1', 'Description 1', '2023-04-01', '2023-06-01', '2023-06-01', NULL, NULL, 'EMPIAR-99990, EMD-12345, EMD-12346, 10.1101/2022.01.01.111111', NULL, 'organism', 'Test Bacteria 1', '5555', NULL, NULL, '', '', NULL, 'http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=8888', 'Sample Prep 1', 'Grid Prep 1', NULL, 's3://test-public-bucket/20001/', 'http://localhost:4444/20001/', NULL, NULL, NULL, NULL); -INSERT INTO public.datasets VALUES (20002, 'Test Dataset 2', 'Description 2', '2023-02-01', '2023-06-21', '2023-06-22', NULL, NULL, 'EMPIAR-99991, 10.1101/2022.01.01.22222', NULL, 'organism', 'Test Virus 2', '6666', NULL, NULL, '', '', NULL, 'http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=7777', 'Sample Prep 2', 'Grid Prep 2', NULL, 's3://test-public-bucket/20002/', 'http://localhost:4444/20002/', NULL, NULL, NULL, NULL); +INSERT INTO public.datasets VALUES (20001, 'Test Dataset 1', 'Description 1', '2023-04-01', '2023-06-01', '2023-06-01', NULL, NULL, 'EMPIAR-99990, EMD-12345, EMD-12346, 10.1101/2022.01.01.111111', NULL, 'organism', 'Test Bacteria 1', '5555', NULL, NULL, '', '', NULL, 'http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=8888', 'Sample Prep 1', 'Grid Prep 1', NULL, 's3://test-public-bucket/20001/', 'http://localhost:4444/20001/', NULL, NULL, NULL, NULL, 300); +INSERT INTO public.datasets VALUES (20002, 'Test Dataset 2', 'Description 2', '2023-02-01', '2023-06-21', '2023-06-22', NULL, NULL, 'EMPIAR-99991, 10.1101/2022.01.01.22222', NULL, 'organism', 'Test Virus 2', '6666', NULL, NULL, '', '', NULL, 'http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=7777', 'Sample Prep 2', 'Grid Prep 2', NULL, 's3://test-public-bucket/20002/', 'http://localhost:4444/20002/', NULL, NULL, NULL, NULL, 301); INSERT INTO public.dataset_funding VALUES (1, 20001, 'Grant For dataset1', '11111'); INSERT INTO public.dataset_funding VALUES (2, 20002, 'Grant For dataset2', '22222'); @@ -22,12 +22,13 @@ INSERT INTO public.tomogram_voxel_spacings VALUES (5, 2, 7.56, 's3://test-public INSERT INTO public.tomogram_voxel_spacings VALUES (6, 3, 7.56, 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/', 'http://localhost:4444/20002/RUN001/TomogramVoxelSpacing7.56/'); INSERT INTO public.tomogram_voxel_spacings VALUES (7, 4, 13.48, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/'); -INSERT INTO public.annotations VALUES (40, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-mitochondria-1.0.json', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-mitochondria-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Mitochondria', 'GO:0000000', NULL, NULL, 16, NULL, NULL, NULL, 4, NULL, true); -INSERT INTO public.annotations VALUES (41, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-ribosome-1.0.json', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 4, NULL, true); -INSERT INTO public.annotations VALUES (42, 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/Annotations/author2-ribosome-1.0.json', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/Annotations/author2-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 5, NULL, true); -INSERT INTO public.annotations VALUES (43, 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/Annotations/author3-ribosome-1.0.json', 'http://localhost:4444/20002/RUN001/TomogramVoxelSpacing7.56/Annotations/author3-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 6, NULL, true); -INSERT INTO public.annotations VALUES (44, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-ribosome-1.0.json', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 7, NULL, true); -INSERT INTO public.annotations VALUES (45, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-spike-1.0.json', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-spike-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Spike Protein', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 7, NULL, true); +INSERT INTO public.annotations VALUES (40, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-mitochondria-1.0.json', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-mitochondria-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Mitochondria', 'GO:0000000', NULL, NULL, 16, NULL, NULL, NULL, 4, NULL, true, NULL, 300, NULL); +INSERT INTO public.annotations VALUES (41, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-ribosome-1.0.json', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/Annotations/author1-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 4, NULL, true, NULL, 300, NULL); +INSERT INTO public.annotations VALUES (42, 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/Annotations/author2-ribosome-1.0.json', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/Annotations/author2-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 5, NULL, true, NULL, 300, NULL); +INSERT INTO public.annotations VALUES (43, 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/Annotations/author3-ribosome-1.0.json', 'http://localhost:4444/20002/RUN001/TomogramVoxelSpacing7.56/Annotations/author3-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 6, NULL, true, NULL, 301, NULL); +INSERT INTO public.annotations VALUES (44, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-ribosome-1.0.json', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-ribosome-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Ribosome', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 7, NULL, true, NULL, 301, NULL); +-- The following annotation has a NULL deposition_id to help test that the client can handle that missing value. +INSERT INTO public.annotations VALUES (45, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-spike-1.0.json', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/author4-spike-1.0.json', '2023-04-01', '2023-06-01', '2023-06-01', 'EMPIAR-77777', 'Manual', true, 'Spike Protein', 'GO:000000A', NULL, NULL, 16, NULL, NULL, NULL, 7, NULL, true, NULL, NULL, NULL); INSERT INTO public.annotation_authors VALUES (50, 40, 'Author 1', '0000-0000-0000-0007', false, true, NULL, NULL, NULL, NULL, NULL); INSERT INTO public.annotation_authors VALUES (51, 40, 'Author 2', '0000-0000-0000-0008', false, true, NULL, NULL, NULL, NULL, NULL); @@ -55,15 +56,15 @@ INSERT INTO public.annotation_files VALUES (80, 44, 'SegmentationMask', 'zarr', INSERT INTO public.annotation_files VALUES (81, 44, 'SegmentationMask', 'mrc', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing7.56/Annotations/ribosome.mrc', 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/ribosome.mrc'); INSERT INTO public.annotation_files VALUES (82, 45, 'Point', 'ndjson', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing7.56/Annotations/ribosome.json', 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/Annotations/ribosome.json'); -INSERT INTO public.tiltseries VALUES (11, 1, 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1_bin1.mrc', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.zarr', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1_bin1.mrc', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.zarr', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.mdoc', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.mdoc', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.rawtlt', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.rawtlt', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.xf', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0); -INSERT INTO public.tiltseries VALUES (12, 2, 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.mrc', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.zarr', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.mrc', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.zarr', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.mdoc', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.mdoc', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.rawtlt', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.rawtlt', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.xf', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0); -INSERT INTO public.tiltseries VALUES (13, 3, 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.mrc', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.zarr', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.mrc', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.zarr', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.mdoc', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.mdoc', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.rawtlt', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.rawtlt', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.xf', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0); -INSERT INTO public.tiltseries VALUES (14, 4, 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.mrc', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.zarr', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.mrc', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.zarr', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.mdoc', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.mdoc', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.rawtlt', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.rawtlt', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.xf', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0); +INSERT INTO public.tiltseries VALUES (11, 1, 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1_bin1.mrc', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.zarr', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1_bin1.mrc', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.zarr', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.mdoc', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.mdoc', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.rawtlt', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.rawtlt', 's3://test-public-bucket/20001/RUN1/TiltSeries/RUN1.xf', 'http://localhost:4444/20001/RUN1/TiltSeries/RUN1.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0, 300); +INSERT INTO public.tiltseries VALUES (12, 2, 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.mrc', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.zarr', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.mrc', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.zarr', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.mdoc', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.mdoc', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.rawtlt', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.rawtlt', 's3://test-public-bucket/20001/RUN2/TiltSeries/RUN2.xf', 'http://localhost:4444/20001/RUN2/TiltSeries/RUN2.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0, 300); +INSERT INTO public.tiltseries VALUES (13, 3, 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.mrc', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.zarr', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.mrc', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.zarr', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.mdoc', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.mdoc', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.rawtlt', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.rawtlt', 's3://test-public-bucket/20002/RUN001/TiltSeries/RUN001.xf', 'http://localhost:4444/20002/RUN001/TiltSeries/RUN001.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0, 301); +INSERT INTO public.tiltseries VALUES (14, 4, 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.mrc', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.zarr', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.mrc', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.zarr', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.mdoc', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.mdoc', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.rawtlt', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.rawtlt', 's3://test-public-bucket/20002/RUN002/TiltSeries/RUN002.xf', 'http://localhost:4444/20002/RUN002/TiltSeries/RUN002.xf', 300000, 2.7, 'MicroCorp', 'MicroZap5000', 'PhaseOTron', 'None', 'None', NULL, 'FancyCam', 'Sharpshooter', -30.0, 30.0, 60.0, 2.0, 'Dose symmetric from 0.0 degrees', 84.7, 122.0, 'Software1', NULL, 1.0, 5, false, NULL, NULL, 0, 301); -INSERT INTO public.tomograms VALUES (31, 'RUN1', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.zarr', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.zarr', 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.mrc', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.mrc', '960,928,500', '480,464,250', '240,232,125', false, 4, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); -INSERT INTO public.tomograms VALUES (32, 'RUN2', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.zarr', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.zarr', 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.mrc', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.mrc', '960,928,500', '480,464,250', '240,232,125', false, 5, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); -INSERT INTO public.tomograms VALUES (33, 'RUN001', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.zarr', 'http://localhost:4444/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.zarr', 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.mrc', 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.mrc', '960,928,500', '480,464,250', '240,232,125', false, 6, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); -INSERT INTO public.tomograms VALUES (34, 'RUN002', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.zarr', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.zarr', 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.mrc', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.mrc', '960,928,500', '480,464,250', '240,232,125', false, 7, 0, 0, 0, NULL, NULL, NULL, NULL, NULL); +INSERT INTO public.tomograms VALUES (31, 'RUN1', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.zarr', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.zarr', 's3://test-public-bucket/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.mrc', 'http://localhost:4444/20001/RUN1/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN1.mrc', '960,928,500', '480,464,250', '240,232,125', false, 4, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 300); +INSERT INTO public.tomograms VALUES (32, 'RUN2', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.zarr', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.zarr', 's3://test-public-bucket/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.mrc', 'http://localhost:4444/20001/RUN2/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN2.mrc', '960,928,500', '480,464,250', '240,232,125', false, 5, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 300); +INSERT INTO public.tomograms VALUES (33, 'RUN001', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.zarr', 'http://localhost:4444/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.zarr', 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.mrc', 's3://test-public-bucket/20002/RUN001/TomogramVoxelSpacing7.56/CanonicalTomogram/RUN001.mrc', '960,928,500', '480,464,250', '240,232,125', false, 6, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 301); +INSERT INTO public.tomograms VALUES (34, 'RUN002', 960, 928, 500, 13.48, 'NON_FIDUCIAL', 'Weighted back projection', 'SW1', 'raw', NULL, '1', true, 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.zarr', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.zarr', 's3://test-public-bucket/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.mrc', 'http://localhost:4444/20002/RUN002/TomogramVoxelSpacing13.48/CanonicalTomogram/RUN002.mrc', '960,928,500', '480,464,250', '240,232,125', false, 7, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 301); INSERT INTO public.tomogram_authors VALUES (91, 31, 1, 'Bob Bobberson', '03234234234', true, false, 'bob@bobberson.com', NULL, NULL, NULL); INSERT INTO public.tomogram_authors VALUES (92, 31, 2, 'Rob Robberson', '44444234234', false, false, 'rob@robberson.com', NULL, NULL, NULL); @@ -73,3 +74,11 @@ INSERT INTO public.tomogram_authors VALUES (95, 33, 1, 'Kate Kateey', '333349999 INSERT INTO public.tomogram_authors VALUES (96, 33, 2, 'May Mayabell', '55554888834', false, true, 'may@mayabell.com', NULL, NULL, NULL); INSERT INTO public.tomogram_authors VALUES (97, 34, 1, 'Hal Hallow', '11111999994', true, false, 'hal@hallow.com', NULL, NULL, NULL); INSERT INTO public.tomogram_authors VALUES (98, 34, 2, 'Marc Marker', '66666888834', false, true, 'marc@marker.com', NULL, NULL, NULL); + +INSERT INTO public.depositions VALUES (300, 'Deposition1', 'The first deposition', '2023-04-01', '2023-06-01', '2023-06-01', '', '', 'dataset', 's3://test-public-bucket/depositions_metadata/300/', 'https://files.cryoetdataportal.cziscience.com/depositions_metadata/300/'); +INSERT INTO public.depositions VALUES (301, 'Deposition2', 'The second deposition', '2023-05-01', '2023-07-01', '2023-07-01', '', '', 'dataset', 's3://test-public-bucket/depositions_metadata/301/', 'https://files.cryoetdataportal.cziscience.com/depositions_metadata/301/'); + +INSERT INTO public.deposition_authors VALUES (111, 'Hal Hallow', '1111-1111-1111-1111', true, 'hal@hallow.com', NULL, NULL, NULL, 300, true, 1); +INSERT INTO public.deposition_authors VALUES (112, 'Marc Marker', '2222-2222-2222-2222', false, 'marc@marker.com', NULL, NULL, NULL, 300, false, 2); +INSERT INTO public.deposition_authors VALUES (113, 'Alexis Alexei', '3333-3333-3333-3333', true, 'alexis@alexei.com', NULL, NULL, NULL, 301, true, 1); +INSERT INTO public.deposition_authors VALUES (114, 'Chad Chadders', '4444-4444-4444-4444', false, 'chad@chadders.com', NULL, NULL, NULL, 301, false, 2); diff --git a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/1706552817192_alter_annotation_add_tomogram_table/up.sql b/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/1706552817192_alter_annotation_add_tomogram_table/up.sql deleted file mode 100644 index 1d2e679e7..000000000 --- a/client/python/cryoet_data_portal/tests/test_infra/hasura/migrations/cryoetdataportal/1706552817192_alter_annotation_add_tomogram_table/up.sql +++ /dev/null @@ -1,4 +0,0 @@ -alter table "public"."annotation_files" add column "is_visualization_default" boolean null default 'false'; -alter table "public"."annotations" add column "method_type" varchar null; -alter table "public"."annotations" add column "deposition_id" integer null; -alter table "public"."tomograms" add column "deposition_id" integer null; diff --git a/docs/cryoet_data_portal_docsite_data.md b/docs/cryoet_data_portal_docsite_data.md index c48812488..1c6c5e2f0 100644 --- a/docs/cryoet_data_portal_docsite_data.md +++ b/docs/cryoet_data_portal_docsite_data.md @@ -178,7 +178,7 @@ Each annotation has its own metadata, which can be viewed using the info icon on | **Portal Metadata** | **API Expression** | **Definition** | |---------------------------|------------------------------------|--------------------------------------------------------------------------------------------------------------| | Object Name | Annotation.object_name | Name of the object being annotated, e.g., ribosome, nuclear pore complex, actin filament, membrane. | -| GO ID | Annotation.object_id | Gene Ontology Cellular Component identifier for the annotation object. | +| Object ID | Annotation.object_id | Gene Ontology Cellular Component identifier or UniProtKB accession for the annotation object. | | Object Count | Annotation.object_count | Number of objects identified. | | Object Shape Type | AnnotationFile.shape_type | Description of whether this is a Point, OrientedPoint, or SegmentationMask file. | | Object State | Annotation.object_state | Additional information about the annotated object not captured by the gene ontology (e.g., open or closed state for molecules). | diff --git a/frontend/CHANGELOG.md b/frontend/CHANGELOG.md index 58a6ea835..b3b8405d5 100644 --- a/frontend/CHANGELOG.md +++ b/frontend/CHANGELOG.md @@ -1,5 +1,36 @@ # Changelog +## [1.25.0](https://github.com/chanzuckerberg/cryoet-data-portal/compare/web-v1.24.0...web-v1.25.0) (2024-08-22) + + +### ✨ Features + +* annotation GO ID -> annotation Object ID: add UniProtKB support to annotation Object IDs ([#1068](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1068)) ([58b5bf9](https://github.com/chanzuckerberg/cryoet-data-portal/commit/58b5bf968733985001242bb5a1330fc7b369f090)) + + +### 🐞 Bug Fixes + +* ID detection for annotation object id link ([#1075](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1075)) ([dc4fd8f](https://github.com/chanzuckerberg/cryoet-data-portal/commit/dc4fd8fb2a92187ab2bfa507e538a066227eb2c9)) + +## [1.24.0](https://github.com/chanzuckerberg/cryoet-data-portal/compare/web-v1.23.1...web-v1.24.0) (2024-08-22) + + +### ✨ Features + +* add single deposition info panel ([#986](https://github.com/chanzuckerberg/cryoet-data-portal/issues/986)) ([62fb35f](https://github.com/chanzuckerberg/cryoet-data-portal/commit/62fb35fe2a59215387c29e36cfb62d1b6ed7a9a9)) + + +### ⚙ Continuous Integration + +* fixes prod e2e tests ([#1066](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1066)) ([de5e273](https://github.com/chanzuckerberg/cryoet-data-portal/commit/de5e2738541c163a80442b394c10a8dac967a794)) + +## [1.23.1](https://github.com/chanzuckerberg/cryoet-data-portal/compare/web-v1.23.0...web-v1.23.1) (2024-08-20) + + +### 🐞 Bug Fixes + +* wrap collapsible lists in a div ([#1038](https://github.com/chanzuckerberg/cryoet-data-portal/issues/1038)) ([4df83f0](https://github.com/chanzuckerberg/cryoet-data-portal/commit/4df83f060227d6d0cc81ff0806aea333f19866b9)) + ## [1.23.0](https://github.com/chanzuckerberg/cryoet-data-portal/compare/web-v1.22.0...web-v1.23.0) (2024-08-20) diff --git a/frontend/package.json b/frontend/package.json index 8101342b3..d7f76deea 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.23.0", + "version": "1.25.0", "scripts": { "preinstall": "npx only-allow pnpm", "build": "pnpm -r build", diff --git a/frontend/packages/data-portal/app/components/AccordionMetadataTable.tsx b/frontend/packages/data-portal/app/components/AccordionMetadataTable.tsx index d413e441b..75e2b8bc6 100644 --- a/frontend/packages/data-portal/app/components/AccordionMetadataTable.tsx +++ b/frontend/packages/data-portal/app/components/AccordionMetadataTable.tsx @@ -28,7 +28,7 @@ export function AccordionMetadataTable({ data={data} tableCellLabelProps={{ renderLoadingSkeleton: false, - width: { min: COLUMN_WIDTH, max: COLUMN_WIDTH }, + width: { min: COLUMN_WIDTH, width: COLUMN_WIDTH, max: COLUMN_WIDTH }, ...tableCellLabelProps, }} tableCellValueProps={{ diff --git a/frontend/packages/data-portal/app/components/AnnotationFilter/AnnotationFilter.tsx b/frontend/packages/data-portal/app/components/AnnotationFilter/AnnotationFilter.tsx index eb4c8fe15..bfcdaeab3 100644 --- a/frontend/packages/data-portal/app/components/AnnotationFilter/AnnotationFilter.tsx +++ b/frontend/packages/data-portal/app/components/AnnotationFilter/AnnotationFilter.tsx @@ -11,8 +11,8 @@ import { useRunById } from 'app/hooks/useRunById' import { useFeatureFlag } from 'app/utils/featureFlags' import { AnnotationSoftwareFilter } from './AnnotationSoftwareFilter' -import { GeneOntologyFilter } from './GeneOntologyFilter' import { MethodTypeFilter } from './MethodTypeFilter' +import { ObjectIdFilter } from './ObjectIdFilter' export function AnnotationFilter() { const { t } = useI18n() @@ -26,7 +26,7 @@ export function AnnotationFilter() { label={t('objectName')} allObjectNames={objectNames} /> - + diff --git a/frontend/packages/data-portal/app/components/AnnotationFilter/GeneOntologyFilter.tsx b/frontend/packages/data-portal/app/components/AnnotationFilter/GeneOntologyFilter.tsx deleted file mode 100644 index 099bbc757..000000000 --- a/frontend/packages/data-portal/app/components/AnnotationFilter/GeneOntologyFilter.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { IDFilter } from 'app/components/Filters' -import { IdPrefix } from 'app/constants/idPrefixes' -import { QueryParams } from 'app/constants/query' -import { useI18n } from 'app/hooks/useI18n' - -export function GeneOntologyFilter() { - const { t } = useI18n() - - return ( - - ) -} diff --git a/frontend/packages/data-portal/app/components/AnnotationFilter/ObjectIdFilter.tsx b/frontend/packages/data-portal/app/components/AnnotationFilter/ObjectIdFilter.tsx new file mode 100644 index 000000000..982732433 --- /dev/null +++ b/frontend/packages/data-portal/app/components/AnnotationFilter/ObjectIdFilter.tsx @@ -0,0 +1,21 @@ +import { RegexFilter } from 'app/components/Filters' +import { + GO_PREFIX, + UNIPROTKB_PREFIX, +} from 'app/constants/annotationObjectIdLinks' +import { QueryParams } from 'app/constants/query' +import { useI18n } from 'app/hooks/useI18n' + +export function ObjectIdFilter() { + const { t } = useI18n() + + return ( + + ) +} diff --git a/frontend/packages/data-portal/app/components/AuthorLink/AuthorLink.tsx b/frontend/packages/data-portal/app/components/AuthorLink/AuthorLink.tsx index 072708689..c7660ae96 100644 --- a/frontend/packages/data-portal/app/components/AuthorLink/AuthorLink.tsx +++ b/frontend/packages/data-portal/app/components/AuthorLink/AuthorLink.tsx @@ -39,12 +39,10 @@ export function AuthorLink({ )} > {author.orcid && ( - + )} - - {author.name} - + {author.name} {author.corresponding_author_status && ( diff --git a/frontend/packages/data-portal/app/components/BrowseData/DepositionTable.tsx b/frontend/packages/data-portal/app/components/BrowseData/DepositionTable.tsx index 278d0ab60..adec7c84b 100644 --- a/frontend/packages/data-portal/app/components/BrowseData/DepositionTable.tsx +++ b/frontend/packages/data-portal/app/components/BrowseData/DepositionTable.tsx @@ -18,7 +18,6 @@ import { DepositionTableWidths } from 'app/constants/table' import { Deposition, useDepositions } from 'app/hooks/useDepositions' import { useI18n } from 'app/hooks/useI18n' import { useIsLoading } from 'app/hooks/useIsLoading' -import { I18nKeys } from 'app/types/i18n' import { LogLevel } from 'app/types/logging' import { cnsNoMerge } from 'app/utils/cns' import { sendLogs } from 'app/utils/logging' @@ -295,7 +294,7 @@ export function DepositionTable() { className="whitespace-nowrap overflow-x-hidden overflow-ellipsis" key={entry[0]} > - {t(entry[1] as I18nKeys)} + {t(entry[1])} ))} diff --git a/frontend/packages/data-portal/app/components/CollapsibleList.tsx b/frontend/packages/data-portal/app/components/CollapsibleList.tsx index 0a0867008..79e0ba13f 100644 --- a/frontend/packages/data-portal/app/components/CollapsibleList.tsx +++ b/frontend/packages/data-portal/app/components/CollapsibleList.tsx @@ -45,7 +45,9 @@ export function CollapsibleList({ className={cns( 'flex', inlineVariant ? 'flex-wrap gap-sds-xxs' : 'flex-col gap-sds-xs', - 'text-sds-body-xxs leading-sds-body-xxs', + tableVariant + ? 'text-sds-body-s leading-sds-body-s' + : 'text-sds-body-xxs leading-sds-body-xxs', collapsible && 'transition-[max-height_0.2s_ease-out]', )} > @@ -83,7 +85,9 @@ export function CollapsibleList({ sdsType="static" className="!text-current" /> - {t('showMore', { count: entries.length - collapseAfter })} + {t('showNumberMore', { + count: entries.length - collapseAfter, + })} ) : ( <> diff --git a/frontend/packages/data-portal/app/components/DatabaseEntry.tsx b/frontend/packages/data-portal/app/components/DatabaseEntry.tsx index 5b097ab58..add8bd07c 100644 --- a/frontend/packages/data-portal/app/components/DatabaseEntry.tsx +++ b/frontend/packages/data-portal/app/components/DatabaseEntry.tsx @@ -51,3 +51,17 @@ export function DatabaseEntry(props: DatabaseEntryProps) {

) } + +export function DatabaseEntryList({ entries }: { entries: string }) { + return ( +
    + {entries.split(',').map((entry) => { + return ( +
  • + +
  • + ) + })} +
+ ) +} diff --git a/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataDrawer.tsx b/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataDrawer.tsx index df28da6e5..a29236035 100644 --- a/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataDrawer.tsx +++ b/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataDrawer.tsx @@ -1,20 +1,21 @@ import { MetadataDrawer } from 'app/components/MetadataDrawer' import { useDatasetById } from 'app/hooks/useDatasetById' +import { useI18n } from 'app/hooks/useI18n' import { MetadataDrawerId } from 'app/hooks/useMetadataDrawer' -import { i18n } from 'app/i18n' import { DatasetMetadataTable } from './DatasetMetadataTable' import { DatasetTiltSeriesTable } from './DatasetTiltSeriesTable' import { SampleAndExperimentConditionsTable } from './SampleAndExperimentConditionsTable' export function DatasetMetadataDrawer() { + const { t } = useI18n() const { dataset } = useDatasetById() return ( diff --git a/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataTable.tsx b/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataTable.tsx index 0c3d16f91..2fc916c63 100644 --- a/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataTable.tsx +++ b/frontend/packages/data-portal/app/components/Dataset/DatasetMetadataTable.tsx @@ -5,44 +5,28 @@ import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable' import { AuthorLegend } from 'app/components/AuthorLegend' import { AuthorInfo } from 'app/components/AuthorLink' import { AuthorList } from 'app/components/AuthorList' -import { DatabaseEntry } from 'app/components/DatabaseEntry' +import { DatabaseEntryList } from 'app/components/DatabaseEntry' import { Link } from 'app/components/Link' import { useI18n } from 'app/hooks/useI18n' import { getTableData } from 'app/utils/table' import { DatasetType } from './type' -function DatabaseEntryList({ entries }: { entries: string }) { - return ( -
    - {entries.split(',').map((entry) => { - return ( -
  • - -
  • - ) - })} -
- ) -} - -interface DatasetMetadataTableProps { - dataset: DatasetType - allFields?: boolean - initialOpen?: boolean -} - export function DatasetMetadataTable({ dataset, - allFields, + showAllFields, initialOpen, -}: DatasetMetadataTableProps) { +}: { + dataset: DatasetType + showAllFields?: boolean + initialOpen?: boolean +}) { const { t } = useI18n() const datasetMetadata = getTableData( - !!allFields && { + !!showAllFields && { label: t('datasetTitle'), - values: [dataset.title!], + values: [dataset.title ?? ''], renderValue: (value) => { return ( { @@ -140,7 +124,7 @@ export function DatasetMetadataTable({ return ( diff --git a/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx b/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx index 74fd6d4cb..6780c7e7d 100644 --- a/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx +++ b/frontend/packages/data-portal/app/components/DatasetFilter/AnnotationMetadataFilterSection.tsx @@ -1,4 +1,4 @@ -import { GeneOntologyFilter } from 'app/components/AnnotationFilter/GeneOntologyFilter' +import { ObjectIdFilter } from 'app/components/AnnotationFilter/ObjectIdFilter' import { AnnotatedObjectNameFilter, AnnotatedObjectShapeTypeFilter, @@ -29,7 +29,7 @@ export function AnnotationMetadataFilterSection({ label={t('objectName')} /> - {depositionPageVariant && } + {depositionPageVariant && } diff --git a/frontend/packages/data-portal/app/components/Deposition/AnnotationsSummaryMetadataTable.tsx b/frontend/packages/data-portal/app/components/Deposition/AnnotationsSummaryMetadataTable.tsx new file mode 100644 index 000000000..6c566dc47 --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/AnnotationsSummaryMetadataTable.tsx @@ -0,0 +1,110 @@ +import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable' +import { CollapsibleList } from 'app/components/CollapsibleList' +import { shapeTypeToI18nKeyPlural } from 'app/constants/objectShapeTypes' +import { useI18n } from 'app/hooks/useI18n' +import { getTableData } from 'app/utils/table' + +export function AnnotationsSummaryMetadataTable({ + initialOpen, +}: { + initialOpen?: boolean +}) { + const { t } = useI18n() + + // TODO: replace this when backend data hooked up + const fakeListData = [ + { + key: '1', + entry: 'dfasdfsdf', + }, + { + key: '2', + entry: 'werweqe', + }, + { + key: '3', + entry: 'fdsgfdg', + }, + { + key: '4', + entry: 'dfghdfgh', + }, + { + key: '5', + entry: 'fghjgfhjfghj', + }, + { + key: '6', + entry: 'ryturtyu', + }, + { + key: '7', + entry: 'ertyery', + }, + ] + + const annotationsSummaryMetadata = getTableData( + { + label: t('annotationsTotal'), + // TODO: replace this when backend data hooked up + values: [(10000).toLocaleString()], + }, + + { + label: t('annotatedOrganisms'), + values: [], + renderValue: () => ( + + ), + }, + + { + label: t('annotatedObjects'), + values: [], + renderValue: () => ( + + ), + }, + + { + label: t('objectShapeTypes'), + values: [], + renderValue: () => { + // TODO: replace this when backend data hooked up + const shapeTypes = [ + 'InstanceSegmentation', + 'OrientedPoint', + 'Point', + 'SegmentationMask', + ] + + return ( +
    + {Object.entries(shapeTypeToI18nKeyPlural) + .filter(([k]) => shapeTypes.includes(k)) + .map(([k, v]) => ( +
  • {t(v)}
  • + ))} +
+ ) + }, + }, + ) + + return ( + + ) +} diff --git a/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataDrawer.tsx b/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataDrawer.tsx new file mode 100644 index 000000000..ac45081fe --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataDrawer.tsx @@ -0,0 +1,25 @@ +import { MetadataDrawer } from 'app/components/MetadataDrawer' +import { useDepositionById } from 'app/hooks/useDepositionById' +import { useI18n } from 'app/hooks/useI18n' +import { MetadataDrawerId } from 'app/hooks/useMetadataDrawer' + +import { AnnotationsSummaryMetadataTable } from './AnnotationsSummaryMetadataTable' +import { DepositionMetadataTable } from './DepositionMetadataTable' +import { MethodLinksMetadataTable } from './MethodLinks' + +export function DepositionMetadataDrawer() { + const { t } = useI18n() + const { deposition } = useDepositionById() + + return ( + + + + + + ) +} diff --git a/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataTable.tsx b/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataTable.tsx new file mode 100644 index 000000000..14a36dc8e --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/DepositionMetadataTable.tsx @@ -0,0 +1,115 @@ +import { Icon } from '@czi-sds/components' +import { useState } from 'react' + +import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable' +import { AuthorLegend } from 'app/components/AuthorLegend' +import { AuthorInfo } from 'app/components/AuthorLink' +import { AuthorList } from 'app/components/AuthorList' +import { DatabaseEntryList } from 'app/components/DatabaseEntry' +import { Deposition } from 'app/hooks/useDepositionById' +import { useI18n } from 'app/hooks/useI18n' +import { getTableData } from 'app/utils/table' + +function CollapsibleDescription({ text }: { text: string }) { + const { t } = useI18n() + const [isCollapsed, setCollapsed] = useState(true) + + return ( +
+

+ {text} +

+
+ +
+
+ ) +} + +export function DepositionMetadataTable({ + deposition, + initialOpen, +}: { + deposition: Deposition + initialOpen?: boolean +}) { + const { t } = useI18n() + + const depositionMetadata = getTableData( + { + label: t('depositionId'), + values: [`CZCPD-${deposition.id}`], + }, + + { + label: + deposition.authors && deposition.authors.length === 1 + ? t('author') + : t('authors'), + labelExtra: , + renderValue: () => { + return + }, + values: [], + className: 'leading-sds-body-s', + }, + + { + label: t('publications'), + values: [deposition.deposition_publications ?? ''], + renderValue: (value: string) => { + return + }, + }, + + { + label: t('relatedDatabases'), + values: [deposition.related_database_entries ?? ''], + renderValue: (value: string) => { + return + }, + }, + + { + label: t('description'), + values: [deposition.description], + renderValue: (value: string) => { + return + }, + }, + + { + label: t('depositionDate'), + values: [deposition.deposition_date], + }, + + { + label: t('releaseDate'), + values: [deposition.release_date], + }, + + { + label: t('lastModifiedDate'), + values: [deposition.last_modified_date ?? ''], + }, + ) + + return ( + + ) +} diff --git a/frontend/packages/data-portal/app/components/Deposition/DepositionOverview.tsx b/frontend/packages/data-portal/app/components/Deposition/DepositionOverview.tsx index ffc762f64..ebe1c30d2 100644 --- a/frontend/packages/data-portal/app/components/Deposition/DepositionOverview.tsx +++ b/frontend/packages/data-portal/app/components/Deposition/DepositionOverview.tsx @@ -10,7 +10,7 @@ import { useDepositionById } from 'app/hooks/useDepositionById' import { useI18n } from 'app/hooks/useI18n' import { cnsNoMerge } from 'app/utils/cns' -import { AnnotationMethodsSummary } from './AnnotationMethodsSummary' +import { MethodLinksOverview } from './MethodLinks' // use clsx here instead of cns since it erroneously merges text-sds-gray-500 and text-sds-caps-xxxs const sectionHeaderStyles = cnsNoMerge( @@ -96,7 +96,7 @@ export function DepositionOverview() { - + ) } diff --git a/frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksMetadataTable.tsx b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksMetadataTable.tsx new file mode 100644 index 000000000..c83d7dfa4 --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksMetadataTable.tsx @@ -0,0 +1,226 @@ +import { useMemo } from 'react' + +import { Accordion } from 'app/components/Accordion' +import { Link } from 'app/components/Link' +import { MetadataTable } from 'app/components/Table' +import { methodLabels, MethodType } from 'app/constants/methodTypes' +import { useI18n } from 'app/hooks/useI18n' +import { getTableData } from 'app/utils/table' + +import { generateMethodLinks, MethodLinkVariantProps } from './common' + +const COLUMN_WIDTH = 170 + +type MethodDataType = { + method_type: MethodType + annotations_count: number + method_description: string + annotation_software: string + links: MethodLinkVariantProps[] +} + +function MethodLinkList({ + links: variantLinks, +}: { + links: MethodLinkVariantProps[] +}) { + const links = useMemo(() => generateMethodLinks(variantLinks), [variantLinks]) + + const { t } = useI18n() + + if (links.length === 0) { + return ( +

+ {t('notSubmitted')} +

+ ) + } + + return ( +
    + {links.map((link) => ( +
  • + + + {link.icon} + + {t(link.i18nLabel)}: + + + + {link.title ?? link.url} + + +
  • + ))} +
+ ) +} + +function MethodSummarySection({ + label, + data, +}: { + label?: string + data: MethodDataType +}) { + const { t } = useI18n() + + const tableData = getTableData( + { + label: t('methodType'), + values: [t(methodLabels[data.method_type])], + }, + { + label: t('numberOfAnnotations'), + values: [data.annotations_count.toLocaleString()], + }, + { + label: t('annotationMethod'), + values: [data.method_description], + }, + { + label: t('annotationSoftware'), + values: [data.annotation_software], + }, + { + label: t('methodLinks'), + values: [], + renderValue: () => , + }, + ) + + return ( +
+ {label && ( +
+

+ {label} +

+
+
+ )} + +
+ ) +} + +export function MethodLinksMetadataTable({ + initialOpen = true, +}: { + initialOpen?: boolean +}) { + const { t } = useI18n() + + const methodOne: MethodDataType = { + method_type: 'hybrid', + annotations_count: 3000, + method_description: + 'Cumulative template-matching trained 2D CNN predictions + visual filtering + distance constraints + manual addition', + annotation_software: 'pyTOM + Keras', + links: [ + { + variant: 'sourceCode', + title: 'My model’s source code', + url: 'https://example.com', + }, + { + variant: 'sourceCode', + title: 'Lorem-Ispum3-Dolor-V-2_5', + url: 'https://example.com', + }, + { + variant: 'modelWeights', + title: 'Model Weights for model Lorem-Ispum3-Dolor-V-2_5', + url: 'https://example.com', + }, + { + variant: 'website', + url: 'www.url.com', + }, + { + variant: 'documentation', + title: 'How to Use', + url: 'https://example.com', + }, + { + variant: 'other', + url: 'https://github.com/lorem-sum-dolor-amet-ipsiti-dolorum-ullrelle ', + }, + ], + } + + const methodTwo: MethodDataType = { + method_type: 'manual', + annotations_count: 1000, + method_description: + 'Vestibulum id ligula porta felis euismod semper. Maecenas sed diam eget risus varius blandit sit amet non magna.', + annotation_software: 'pyTOM + Keras', + links: [], + } + + const methodThree: MethodDataType = { + method_type: 'automated', + annotations_count: 6000, + method_description: + 'Cumulative template-matching trained 2D CNN predictions + visual filtering + distance constraints + manual addition', + annotation_software: 'pyTOM + Keras', + links: [ + { + variant: 'sourceCode', + title: 'My model’s source code', + url: 'https://example.com', + }, + { + variant: 'sourceCode', + title: 'Lorem-Ispum3-Dolor-V-2_5', + url: 'https://example.com', + }, + { + variant: 'modelWeights', + title: 'Model Weights for model Lorem-Ispum3-Dolor-V-2_5', + url: 'https://example.com', + }, + { + variant: 'website', + url: 'www.url.com', + }, + { + variant: 'documentation', + title: 'How to Use', + url: 'https://example.com', + }, + { + variant: 'other', + url: 'https://github.com/lorem-sum-dolor-amet-ipsiti-dolorum-ullrelle ', + }, + ], + } + + return ( + +
+ + + +
+
+ ) +} diff --git a/frontend/packages/data-portal/app/components/Deposition/AnnotationMethodsSummary.tsx b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksOverview.tsx similarity index 73% rename from frontend/packages/data-portal/app/components/Deposition/AnnotationMethodsSummary.tsx rename to frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksOverview.tsx index e5e532f49..ed2a83618 100644 --- a/frontend/packages/data-portal/app/components/Deposition/AnnotationMethodsSummary.tsx +++ b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/MethodLinksOverview.tsx @@ -1,9 +1,7 @@ import { Icon } from '@czi-sds/components' -import { ReactNode } from 'react' import { CollapsibleList } from 'app/components/CollapsibleList' import { I18n } from 'app/components/I18n' -import { SourceCodeIcon, WeightsIcon } from 'app/components/icons' import { Link } from 'app/components/Link' import { PageHeaderSubtitle } from 'app/components/PageHeaderSubtitle' import { Tooltip } from 'app/components/Tooltip' @@ -13,83 +11,12 @@ import { MethodType, } from 'app/constants/methodTypes' import { useI18n } from 'app/hooks/useI18n' -import { I18nKeys } from 'app/types/i18n' -interface MethodLink { - i18nLabel: I18nKeys - url: string - icon: ReactNode - title?: string -} - -const iconMap = { - sourceCode: ( - - ), - modelWeights: ( - - ), - website: ( - - ), - documentation: ( - - ), - other: ( - - ), -} as const - -interface MethodLinkVariantProps { - variant: keyof typeof iconMap - url: string - title?: string -} - -const variantOrder: (keyof typeof iconMap)[] = [ - 'sourceCode', - 'modelWeights', - 'website', - 'documentation', - 'other', -] - -function methodLinkFromVariant({ - variant, - url, - title, -}: MethodLinkVariantProps): MethodLink { - return { - i18nLabel: variant, - url, - title, - icon: iconMap[variant], - } -} - -function generateMethodLinks(links: MethodLinkVariantProps[]): MethodLink[] { - return links - .toSorted( - (a, b) => - variantOrder.indexOf(a.variant) - variantOrder.indexOf(b.variant), - ) - .map((props) => methodLinkFromVariant(props)) -} +import { + generateMethodLinks, + MethodLink, + MethodLinkVariantProps, +} from './common' function MethodTypeSection({ methodType, @@ -150,11 +77,12 @@ function MethodTypeSection({ ) } -export function AnnotationMethodsSummary() { +export function MethodLinksOverview() { const { t } = useI18n() const separator =
+ // TODO: populate this with backend data when available const hybridMethodLinks: MethodLinkVariantProps[] = [ { variant: 'sourceCode', diff --git a/frontend/packages/data-portal/app/components/Deposition/MethodLinks/common.tsx b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/common.tsx new file mode 100644 index 000000000..4765fec8c --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/common.tsx @@ -0,0 +1,83 @@ +import { Icon } from '@czi-sds/components' +import { ReactNode } from 'react' + +import { SourceCodeIcon, WeightsIcon } from 'app/components/icons' +import { I18nKeys } from 'app/types/i18n' + +export interface MethodLink { + i18nLabel: I18nKeys + url: string + icon: ReactNode + title?: string +} + +export const iconMap = { + sourceCode: ( + + ), + modelWeights: ( + + ), + website: ( + + ), + documentation: ( + + ), + other: ( + + ), +} as const + +export interface MethodLinkVariantProps { + variant: keyof typeof iconMap + url: string + title?: string +} + +const variantOrder: (keyof typeof iconMap)[] = [ + 'sourceCode', + 'modelWeights', + 'website', + 'documentation', + 'other', +] + +function methodLinkFromVariant({ + variant, + url, + title, +}: MethodLinkVariantProps): MethodLink { + return { + i18nLabel: variant, + url, + title, + icon: iconMap[variant], + } +} + +export function generateMethodLinks( + links: MethodLinkVariantProps[], +): MethodLink[] { + return links + .toSorted( + (a, b) => + variantOrder.indexOf(a.variant) - variantOrder.indexOf(b.variant), + ) + .map((props) => methodLinkFromVariant(props)) +} diff --git a/frontend/packages/data-portal/app/components/Deposition/MethodLinks/index.ts b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/index.ts new file mode 100644 index 000000000..960e43797 --- /dev/null +++ b/frontend/packages/data-portal/app/components/Deposition/MethodLinks/index.ts @@ -0,0 +1,2 @@ +export * from './MethodLinksMetadataTable' +export * from './MethodLinksOverview' diff --git a/frontend/packages/data-portal/app/components/Deposition/index.ts b/frontend/packages/data-portal/app/components/Deposition/index.ts index e69de29bb..554f40988 100644 --- a/frontend/packages/data-portal/app/components/Deposition/index.ts +++ b/frontend/packages/data-portal/app/components/Deposition/index.ts @@ -0,0 +1 @@ +export * from './DepositionMetadataDrawer' diff --git a/frontend/packages/data-portal/app/components/DepositionFilter/DepositionIdFilter.tsx b/frontend/packages/data-portal/app/components/DepositionFilter/DepositionIdFilter.tsx index 58b3a5ffa..e28626899 100644 --- a/frontend/packages/data-portal/app/components/DepositionFilter/DepositionIdFilter.tsx +++ b/frontend/packages/data-portal/app/components/DepositionFilter/DepositionIdFilter.tsx @@ -1,4 +1,4 @@ -import { IDFilter } from 'app/components/Filters' +import { IdFilter } from 'app/components/Filters' import { IdPrefix } from 'app/constants/idPrefixes' import { QueryParams } from 'app/constants/query' import { useI18n } from 'app/hooks/useI18n' @@ -7,7 +7,7 @@ export function DepositionIdFilter() { const { t } = useI18n() return ( - (prefix ? RegExp(`^(?:${prefix}-)?(\\d+)$`, 'i') : /^\d+$/), + [prefix], + ) + + return ( + + prefix && value.startsWith(prefix) ? value : `${prefix}-${value}` + } + paramNormalizer={(value) => + value.replace(new RegExp(`^${prefix}-`, 'i'), '') + } + /> + ) +} diff --git a/frontend/packages/data-portal/app/components/Filters/IDFilter.tsx b/frontend/packages/data-portal/app/components/Filters/RegexFilter.tsx similarity index 69% rename from frontend/packages/data-portal/app/components/Filters/IDFilter.tsx rename to frontend/packages/data-portal/app/components/Filters/RegexFilter.tsx index c625c90cf..1cf18e3df 100644 --- a/frontend/packages/data-portal/app/components/Filters/IDFilter.tsx +++ b/frontend/packages/data-portal/app/components/Filters/RegexFilter.tsx @@ -7,18 +7,22 @@ import { useI18n } from 'app/hooks/useI18n' import { DropdownFilterButton } from './DropdownFilterButton' import { InputFilter } from './InputFilter' -export function IDFilter({ +export function RegexFilter({ id, label, title, queryParam, - prefix, + regex, + displayNormalizer, + paramNormalizer, }: { id: string label: string title: string queryParam: QueryParams - prefix?: string + regex: RegExp + displayNormalizer?: (value: string) => string + paramNormalizer?: (value: string) => string }) { const { t } = useI18n() const [searchParams, setSearchParams] = useSearchParams() @@ -26,19 +30,16 @@ export function IDFilter({ const paramValue = searchParams.get(queryParam) ?? '' const [value, setValue] = useState(paramValue) - const validatingRegex = useMemo( - () => (prefix ? RegExp(`^(?:${prefix})?(\\d+)$`, 'i') : /^\d+$/), - [prefix], + const displayValue = useMemo( + () => (displayNormalizer ? displayNormalizer(paramValue) : paramValue), + [paramValue, displayNormalizer], ) - const isDisabled = useMemo( - () => !validatingRegex.test(value), - [value, validatingRegex], - ) + const isDisabled = useMemo(() => !regex.test(value), [value, regex]) return (

@@ -52,17 +53,17 @@ export function IDFilter({ } label={label} onApply={() => { - const matches = validatingRegex.exec(value) ?? [] + const matches = regex.exec(value) ?? [] if (matches.length > 0) { - const match = matches[1] - setValue(`${prefix}${match}`) + const newParamValue = paramNormalizer ? paramNormalizer(value) : value + setValue(displayNormalizer ? displayNormalizer(value) : value) setSearchParams((prev) => { prev.delete(queryParam) - if (match) { - prev.set(queryParam, match) + if (newParamValue) { + prev.set(queryParam, newParamValue) } return prev diff --git a/frontend/packages/data-portal/app/components/Filters/index.ts b/frontend/packages/data-portal/app/components/Filters/index.ts index 9aa7e4756..bfe84f4c1 100644 --- a/frontend/packages/data-portal/app/components/Filters/index.ts +++ b/frontend/packages/data-portal/app/components/Filters/index.ts @@ -5,8 +5,9 @@ export * from './BooleanFilter' export * from './FilterPanel' export * from './FilterSection' export * from './GroundTruthAnnotationFilter' -export * from './IDFilter' +export * from './IdFilter' export * from './InputFilter' export * from './MultiInputFilter' +export * from './RegexFilter' export * from './SelectFilter' export * from './TiltRangeFilter' diff --git a/frontend/packages/data-portal/app/components/Run/AnnotationDrawer.tsx b/frontend/packages/data-portal/app/components/Run/AnnotationDrawer.tsx index 988a04f38..6cf654d9e 100644 --- a/frontend/packages/data-portal/app/components/Run/AnnotationDrawer.tsx +++ b/frontend/packages/data-portal/app/components/Run/AnnotationDrawer.tsx @@ -5,7 +5,7 @@ import { useAnnotation } from 'app/state/annotation' import { getAnnotationTitle } from 'app/utils/annotation' import { AnnotationConfidenceTable } from './AnnotationConfidenceTable' -import { AnnotationObjectTable } from './AnnotationObjectTable' +import { AnnotationObjectTable } from './AnnotationObjectTable/AnnotationObjectTable' import { AnnotationOverviewTable } from './AnnotationOveriewTable' export function AnnotationDrawer() { diff --git a/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable.tsx b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable.tsx deleted file mode 100644 index c58ece3fd..000000000 --- a/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable' -import { useI18n } from 'app/hooks/useI18n' -import { useAnnotation } from 'app/state/annotation' - -import { Link } from '../Link' - -export function AnnotationObjectTable() { - const { t } = useI18n() - const { activeAnnotation: annotation } = useAnnotation() - - if (!annotation) { - return null - } - - return ( - ( - - {String(value)} - - ), - }, - - { - label: t('objectCount'), - values: [annotation.object_count], - }, - { - label: t('objectShapeType'), - values: [annotation.shape_type], - }, - { - label: t('objectState'), - values: [annotation.object_state ?? '--'], - }, - { - label: t('objectDescription'), - values: [annotation.object_description ?? '--'], - }, - ]} - /> - ) -} diff --git a/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/AnnotationObjectTable.tsx b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/AnnotationObjectTable.tsx new file mode 100644 index 000000000..2b7ba62ec --- /dev/null +++ b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/AnnotationObjectTable.tsx @@ -0,0 +1,53 @@ +import { AccordionMetadataTable } from 'app/components/AccordionMetadataTable' +import { useI18n } from 'app/hooks/useI18n' +import { useAnnotation } from 'app/state/annotation' +import { getTableData } from 'app/utils/table' + +import { ObjectIdLink } from './components/ObjectIdLink' + +export function AnnotationObjectTable() { + const { t } = useI18n() + const { activeAnnotation: annotation } = useAnnotation() + + if (!annotation) { + return null + } + + const annotationObject = getTableData( + { + label: t('objectName'), + values: [annotation.object_name], + }, + { + label: t('objectId'), + renderValue: () => { + return + }, + values: [], + }, + { + label: t('objectCount'), + values: [String(annotation.object_count)], + }, + { + label: t('objectShapeType'), + values: [annotation.shape_type], + }, + { + label: t('objectState'), + values: [annotation.object_state ?? '--'], + }, + { + label: t('objectDescription'), + values: [annotation.object_description ?? '--'], + }, + ) + + return ( + + ) +} diff --git a/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/ObjectIdLink.tsx b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/ObjectIdLink.tsx new file mode 100644 index 000000000..d1de21a57 --- /dev/null +++ b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/ObjectIdLink.tsx @@ -0,0 +1,26 @@ +import { Link } from 'app/components/Link' +import { + GO, + GO_PREFIX, + UNIPROTKB, + UNIPROTKB_PREFIX, +} from 'app/constants/annotationObjectIdLinks' + +export function ObjectIdLink({ id }: { id: string }) { + let link + if (id.startsWith(GO_PREFIX)) { + link = `${GO}${id}` + } else if (id.startsWith(UNIPROTKB_PREFIX)) { + link = `${UNIPROTKB}${id.replaceAll('UniProtKB:', '')}` + } + // don't link if no patterns match + if (link) { + return ( + + {id} + + ) + } + + return {id} +} diff --git a/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/index.ts b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/index.ts new file mode 100644 index 000000000..d8ae806d1 --- /dev/null +++ b/frontend/packages/data-portal/app/components/Run/AnnotationObjectTable/components/ObjectIdLink/index.ts @@ -0,0 +1 @@ +export { ObjectIdLink } from './ObjectIdLink' diff --git a/frontend/packages/data-portal/app/components/Run/RunMetadataDrawer.tsx b/frontend/packages/data-portal/app/components/Run/RunMetadataDrawer.tsx index 846f82bd9..8a8ed516b 100644 --- a/frontend/packages/data-portal/app/components/Run/RunMetadataDrawer.tsx +++ b/frontend/packages/data-portal/app/components/Run/RunMetadataDrawer.tsx @@ -18,7 +18,7 @@ export function RunMetadataDrawer() { label={i18n.runDetails} > diff --git a/frontend/packages/data-portal/app/components/RunFilter/RunFilter.tsx b/frontend/packages/data-portal/app/components/RunFilter/RunFilter.tsx index 3694986d1..a9a742653 100644 --- a/frontend/packages/data-portal/app/components/RunFilter/RunFilter.tsx +++ b/frontend/packages/data-portal/app/components/RunFilter/RunFilter.tsx @@ -11,7 +11,7 @@ import { useDatasetById } from 'app/hooks/useDatasetById' import { useI18n } from 'app/hooks/useI18n' import { useFeatureFlag } from 'app/utils/featureFlags' -import { GeneOntologyFilter } from '../AnnotationFilter/GeneOntologyFilter' +import { ObjectIdFilter } from '../AnnotationFilter/ObjectIdFilter' import { QualityScoreFilter } from './QualityScoreFilter' export function RunFilter() { @@ -37,7 +37,7 @@ export function RunFilter() { allObjectNames={objectNames} label={t('objectName')} /> - {showDepositions && } + {showDepositions && } diff --git a/frontend/packages/data-portal/app/constants/annotationObjectIdLinks.ts b/frontend/packages/data-portal/app/constants/annotationObjectIdLinks.ts new file mode 100644 index 000000000..5bd05f9a0 --- /dev/null +++ b/frontend/packages/data-portal/app/constants/annotationObjectIdLinks.ts @@ -0,0 +1,5 @@ +export const GO = 'https://amigo.geneontology.org/amigo/term/' +export const UNIPROTKB = 'https://www.uniprot.org/uniprotkb/' + +export const GO_PREFIX = 'GO:' +export const UNIPROTKB_PREFIX = 'UniProtKB:' diff --git a/frontend/packages/data-portal/app/constants/filterQueryParams.ts b/frontend/packages/data-portal/app/constants/filterQueryParams.ts index 52a1708ce..9117747e1 100644 --- a/frontend/packages/data-portal/app/constants/filterQueryParams.ts +++ b/frontend/packages/data-portal/app/constants/filterQueryParams.ts @@ -33,7 +33,7 @@ export const ANNOTATION_FILTERS = [ QueryParams.AuthorName, QueryParams.AuthorOrcid, QueryParams.ObjectName, - QueryParams.GoId, + QueryParams.ObjectId, QueryParams.ObjectShapeType, QueryParams.MethodType, QueryParams.AnnotationSoftware, diff --git a/frontend/packages/data-portal/app/constants/idPrefixes.ts b/frontend/packages/data-portal/app/constants/idPrefixes.ts index 10812e546..96dfb9a8c 100644 --- a/frontend/packages/data-portal/app/constants/idPrefixes.ts +++ b/frontend/packages/data-portal/app/constants/idPrefixes.ts @@ -1,4 +1,3 @@ export enum IdPrefix { - Deposition = 'CZCDP-', - GeneOntology = 'GO:', + Deposition = 'CZCDP', } diff --git a/frontend/packages/data-portal/app/constants/objectShapeTypes.ts b/frontend/packages/data-portal/app/constants/objectShapeTypes.ts index aa29d97a8..e8d25120e 100644 --- a/frontend/packages/data-portal/app/constants/objectShapeTypes.ts +++ b/frontend/packages/data-portal/app/constants/objectShapeTypes.ts @@ -1,6 +1,18 @@ -export const shapeTypeToI18nKey = { +import { I18nKeys } from 'app/types/i18n' +import { ObjectShapeType } from 'app/types/shapeTypes' + +type ShapeTypeToI18nKeyMap = { [key in ObjectShapeType]: I18nKeys } + +export const shapeTypeToI18nKey: ShapeTypeToI18nKeyMap = { InstanceSegmentation: 'instanceSegmentation', OrientedPoint: 'orientedPoint', Point: 'point', SegmentationMask: 'segmentationMask', } + +export const shapeTypeToI18nKeyPlural: ShapeTypeToI18nKeyMap = { + InstanceSegmentation: 'instanceSegmentations', + OrientedPoint: 'orientedPoints', + Point: 'points', + SegmentationMask: 'segmentationMasks', +} diff --git a/frontend/packages/data-portal/app/constants/query.ts b/frontend/packages/data-portal/app/constants/query.ts index 20d46f209..715777c05 100644 --- a/frontend/packages/data-portal/app/constants/query.ts +++ b/frontend/packages/data-portal/app/constants/query.ts @@ -15,12 +15,12 @@ export enum QueryParams { EmpiarId = 'empiar_id', FiducialAlignmentStatus = 'fiducial_alignment', FileFormat = 'file-format', - GoId = 'go-id', GroundTruthAnnotation = 'ground_truth', MetadataDrawer = 'metadata', MethodType = 'method-type', NumberOfRuns = 'runs', ObjectName = 'object', + ObjectId = 'object-id', ObjectShapeType = 'object_shape', Organism = 'organism', Page = 'page', diff --git a/frontend/packages/data-portal/app/graphql/getRunById.server.ts b/frontend/packages/data-portal/app/graphql/getRunById.server.ts index faadfb049..69eb268d8 100644 --- a/frontend/packages/data-portal/app/graphql/getRunById.server.ts +++ b/frontend/packages/data-portal/app/graphql/getRunById.server.ts @@ -433,7 +433,7 @@ function getFilter(filterState: FilterState): Annotations_Bool_Exp[] { }) } - const { objectNames, annotationSoftwares, methodTypes, goId } = + const { objectNames, annotationSoftwares, methodTypes, objectId } = filterState.annotation if (objectNames.length > 0) { @@ -444,10 +444,10 @@ function getFilter(filterState: FilterState): Annotations_Bool_Exp[] { }) } - if (goId) { + if (objectId) { filters.push({ object_id: { - _ilike: `%${goId.replace(':', '_')}`, + _ilike: `%${objectId.replace(':', '_')}`, }, }) } diff --git a/frontend/packages/data-portal/app/hooks/useFilter.ts b/frontend/packages/data-portal/app/hooks/useFilter.ts index 3a6ef7238..4fee84647 100644 --- a/frontend/packages/data-portal/app/hooks/useFilter.ts +++ b/frontend/packages/data-portal/app/hooks/useFilter.ts @@ -65,7 +65,7 @@ export function getFilterState(searchParams: URLSearchParams) { annotation: { annotationSoftwares: searchParams.getAll(QueryParams.AnnotationSoftware), - goId: searchParams.get(QueryParams.GoId), + objectId: searchParams.get(QueryParams.ObjectId), methodTypes: searchParams.getAll(QueryParams.MethodType), diff --git a/frontend/packages/data-portal/app/i18n.ts b/frontend/packages/data-portal/app/i18n.ts index 2ac29ad24..044282e0f 100644 --- a/frontend/packages/data-portal/app/i18n.ts +++ b/frontend/packages/data-portal/app/i18n.ts @@ -85,7 +85,6 @@ export const i18n = { frames: 'Frames', fundingAgency: 'Funding Agency', github: 'GitHub', - goId: 'GO ID', good: 'Good', goToDocs: 'Go to Documentation', grantID: 'Grant ID', @@ -122,6 +121,7 @@ export const i18n = { numberOfRuns: 'Number of Runs', objectCount: 'Object Count', objectDescription: 'Object Description', + objectId: 'Object ID', objectName: 'Object Name', objectShapeType: 'Object Shape Type', objectState: 'Object State', diff --git a/frontend/packages/data-portal/app/routes/depositions.$id.tsx b/frontend/packages/data-portal/app/routes/depositions.$id.tsx index c94672b9f..d36e8ded0 100644 --- a/frontend/packages/data-portal/app/routes/depositions.$id.tsx +++ b/frontend/packages/data-portal/app/routes/depositions.$id.tsx @@ -7,6 +7,7 @@ import { useEffect } from 'react' import { Order_By } from 'app/__generated__/graphql' import { apolloClient } from 'app/apollo.server' import { DatasetFilter } from 'app/components/DatasetFilter' +import { DepositionMetadataDrawer } from 'app/components/Deposition' import { DatasetsTable } from 'app/components/Deposition/DatasetsTable' import { DepositionHeader } from 'app/components/Deposition/DepositionHeader' import { TablePageLayout } from 'app/components/TablePageLayout' @@ -103,6 +104,7 @@ export default function DepositionByIdPage() { countLabel: t('datasets'), }, ]} + drawers={} /> ) } diff --git a/frontend/packages/data-portal/app/routes/runs.$id.tsx b/frontend/packages/data-portal/app/routes/runs.$id.tsx index b97504163..6038bc972 100644 --- a/frontend/packages/data-portal/app/routes/runs.$id.tsx +++ b/frontend/packages/data-portal/app/routes/runs.$id.tsx @@ -66,7 +66,7 @@ export function shouldRevalidate(args: ShouldRevalidateFunctionArgs) { QueryParams.AuthorName, QueryParams.AuthorOrcid, QueryParams.ObjectName, - QueryParams.GoId, + QueryParams.ObjectId, QueryParams.ObjectShapeType, QueryParams.MethodType, QueryParams.AnnotationSoftware, diff --git a/frontend/packages/data-portal/app/types/shapeTypes.ts b/frontend/packages/data-portal/app/types/shapeTypes.ts new file mode 100644 index 000000000..4fac266d6 --- /dev/null +++ b/frontend/packages/data-portal/app/types/shapeTypes.ts @@ -0,0 +1,5 @@ +export type ObjectShapeType = + | 'InstanceSegmentation' + | 'OrientedPoint' + | 'Point' + | 'SegmentationMask' diff --git a/frontend/packages/data-portal/e2e/config.json b/frontend/packages/data-portal/e2e/config.json index 9abe3bf3e..b4961c8d4 100644 --- a/frontend/packages/data-portal/e2e/config.json +++ b/frontend/packages/data-portal/e2e/config.json @@ -7,14 +7,14 @@ "depositionId": "10000", "emdbId": "17241", "empiarId": "11221", - "goId": "0005835", + "objectId": "GO:0005835", "methodType": "automated", "objectName": "membrane-enclosed lumen", "objectShapeType": "InstanceSegmentation", "organismName1": "Bacillus subtilis", "organismName2": "Bdellovibrio bacteriovorus", "organismNameQuery": "bac", - "reconstructionMethod": "Weighted back projection", + "reconstructionMethod": "SIRT", "reconstructionObjectName": "Actin filament", "reconstructionSoftware": "IMOD", "runId": "258", diff --git a/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts b/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts index 0285f4cbb..f97b5ac7a 100644 --- a/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts +++ b/frontend/packages/data-portal/e2e/pageObjects/filters/utils.ts @@ -79,7 +79,7 @@ export function getPrefixedId({ id: string prefixKey: keyof typeof IdPrefix }): string { - return `${IdPrefix[prefixKey]}${id}` + return `${IdPrefix[prefixKey]}-${id}` } // #Region runPage diff --git a/frontend/packages/data-portal/e2e/pageObjects/metadataDrawer/utils.ts b/frontend/packages/data-portal/e2e/pageObjects/metadataDrawer/utils.ts index 3941e0474..c96fd6635 100644 --- a/frontend/packages/data-portal/e2e/pageObjects/metadataDrawer/utils.ts +++ b/frontend/packages/data-portal/e2e/pageObjects/metadataDrawer/utils.ts @@ -127,7 +127,7 @@ function getAnnotationTestMetdata( annotationMethod: annotation.annotation_method, annotationSoftware: annotation.annotation_software, objectName: annotation.object_name, - goId: annotation.object_id, + objectId: annotation.object_id, objectCount: annotation.object_count, objectShapeType: file?.shape_type, objectState: annotation.object_state, diff --git a/frontend/packages/data-portal/e2e/singleRunFilters.test.ts b/frontend/packages/data-portal/e2e/singleRunFilters.test.ts index 9fb087bfe..ffc4bc2bd 100644 --- a/frontend/packages/data-portal/e2e/singleRunFilters.test.ts +++ b/frontend/packages/data-portal/e2e/singleRunFilters.test.ts @@ -418,15 +418,15 @@ test.describe('Single run page filters', () => { }) }) - test.describe('Go ID filter', () => { + test.describe('Object ID filter (GO ID)', () => { test('should filter when selecting', async () => { await filtersPage.goTo(SINGLE_RUN_URL) await filtersActor.addMultiInputFilter({ - buttonLabel: translations.goId, + buttonLabel: translations.objectId, filter: { - label: translations.filterByGeneOntologyId, - value: E2E_CONFIG.goId, + label: translations.filterByObjectId, + value: E2E_CONFIG.objectId, }, hasMultipleFilters: false, }) @@ -435,8 +435,8 @@ test.describe('Single run page filters', () => { url: SINGLE_RUN_URL, queryParamsList: [ { - queryParamKey: QueryParams.GoId, - queryParamValue: E2E_CONFIG.goId, + queryParamKey: QueryParams.ObjectId, + queryParamValue: E2E_CONFIG.objectId, }, ], }) @@ -447,8 +447,8 @@ test.describe('Single run page filters', () => { url: SINGLE_RUN_URL, queryParamsList: [ { - queryParamKey: QueryParams.GoId, - queryParamValue: E2E_CONFIG.goId, + queryParamKey: QueryParams.ObjectId, + queryParamValue: E2E_CONFIG.objectId, }, ], }) @@ -458,8 +458,8 @@ test.describe('Single run page filters', () => { baseUrl: SINGLE_RUN_URL, queryParamsList: [ { - queryParamKey: QueryParams.GoId, - queryParamValue: E2E_CONFIG.goId, + queryParamKey: QueryParams.ObjectId, + queryParamValue: E2E_CONFIG.objectId, }, ], }) @@ -470,8 +470,8 @@ test.describe('Single run page filters', () => { url: SINGLE_RUN_URL, queryParamsList: [ { - queryParamKey: QueryParams.GoId, - queryParamValue: E2E_CONFIG.goId, + queryParamKey: QueryParams.ObjectId, + queryParamValue: E2E_CONFIG.objectId, }, ], }) @@ -482,13 +482,13 @@ test.describe('Single run page filters', () => { baseUrl: SINGLE_RUN_URL, queryParamsList: [ { - queryParamKey: QueryParams.GoId, - queryParamValue: E2E_CONFIG.goId, + queryParamKey: QueryParams.ObjectId, + queryParamValue: E2E_CONFIG.objectId, }, ], }) - await filtersPage.removeMultiInputFilter(E2E_CONFIG.goId) + await filtersPage.removeMultiInputFilter(E2E_CONFIG.objectId) await filtersActor.expectUrlQueryParamsToBeCorrect({ url: SINGLE_RUN_URL, diff --git a/frontend/packages/data-portal/public/locales/en/translation.json b/frontend/packages/data-portal/public/locales/en/translation.json index 4df2452f1..64c1fd5e4 100644 --- a/frontend/packages/data-portal/public/locales/en/translation.json +++ b/frontend/packages/data-portal/public/locales/en/translation.json @@ -21,6 +21,7 @@ "allDatasets": "All Datasets", "allDepositions": "All Depositions", "annotatedObjects": "Annotated Objects", + "annotatedOrganisms": "Annotated Organisms", "annotationAuthor": "Annotation Author", "annotationAuthors": "Annotation Authors", "annotationConfidence": "Annotation Confidence", @@ -33,6 +34,8 @@ "annotationOverview": "Annotation Overview", "annotationSoftware": "Annotation Software", "annotations": "Annotations", + "annotationsSummary": "Annotations Summary", + "annotationsTotal": "Annotations (Total)", "api": "API", "apiDocLink": "https://chanzuckerberg.github.io/cryoet-data-portal/cryoet_data_portal_docsite_quick_start.html", "apply": "Apply", @@ -107,6 +110,7 @@ "depositionAnnotationsOnly": "Deposition annotations only", "depositionData": "Deposition Data", "depositionDate": "Deposition Date", + "depositionDetails": "Deposition Details", "depositionId": "Deposition ID", "depositionName": "Deposition Name", "depositionOnly": "Deposition only", @@ -149,7 +153,7 @@ "filterBy": "Filter by", "filterByAnyOfTheFollowing": "Filter by any of the following", "filterByDepositionId": "Filter by Deposition ID", - "filterByGeneOntologyId": "Filter by Gene Ontology ID", + "filterByObjectId": "Filter by Object ID", "filterCountOfMaxType": "{{count}} of {{max}} {{type}}", "filterNoResultsFound": "No results were found", "filterRange": "Filter Range", @@ -157,7 +161,6 @@ "frames": "Frames", "fundingAgency": "Funding Agency", "github": "GitHub", - "goId": "GO ID", "goToDocs": "Go to Documentation", "good": "Good", "grantID": "Grant ID", @@ -182,6 +185,7 @@ "includedContents": "Included Contents", "info": "Info", "instanceSegmentation": "Instance Segmentation", + "instanceSegmentations": "Instance Segmentations", "keyPhoto": "key photo", "landingHeaderImageAttribution": "Top Image: The inner workings of an algal cell as depicted with cryo-electron tomography, which aggregates multiple snapshots of a single piece of material. Visible are the Golgi apparatus (green and magenta), and vesicles (multi-colored circles). | Photo credit: Y. S. Bykkov et al./eLIFE (CC BY 4.0)", "landingHeaderTitle": "Open access to annotated cryoET tomograms", @@ -201,11 +205,14 @@ "meetsAll": "Meets all", "metadata": "Metadata", "methodLinks": "Method Links", + "methodThree": "Method Three", + "methodTwo": "Method Two", "methodType": "Method Type", "methodTypeAutomated": "Automated: Annotations were generated using automated tools or algorithms without supervision.", "methodTypeHybrid": "Hybrid: Annotations were generated using a combination of automated and manual methods.", "methodTypeInfo": "Method Type: Describes how the annotations were generated.", "methodTypeManual": "Manual: Annotations were created by hand.", + "methodOne": "Method One", "microscopeManufacturer": "Microscope Manufacturer", "microscopeModel": "Microscope model", "modelWeights": "Model Weights", @@ -224,11 +231,14 @@ "normalText": "Normal text", "notApplicable": "Not Applicable", "notSubmitted": "Not Submitted", + "numberOfAnnotations": "Number of Annotations", "numberOfRuns": "Number of Runs", "objectCount": "Object Count", "objectDescription": "Object Description", + "objectId": "Object ID", "objectName": "Object Name", "objectShapeType": "Object Shape Type", + "objectShapeTypes": "Object Shape Types", "objectState": "Object State", "openDataset": "Open Dataset", "openDeposition": "Open Deposition", @@ -240,6 +250,7 @@ "organismName": "Organism Name", "organizers": "Organizers", "orientedPoint": "Oriented Point", + "orientedPoints": "Oriented Points", "other": "Other", "otherAnnotations_one": "{{count}} Other Annotation", "otherAnnotations_other": "{{count}} Other Annotations", @@ -250,6 +261,7 @@ "pixelSpacing": "Pixel Spacing", "plusMore": "+{{count}} More", "point": "Point", + "points": "Points", "poor": "Poor", "postProcessing": "Post Processing", "precision": "Precision", @@ -292,13 +304,15 @@ "sampleType": "Sample Type", "search": "Search", "segmentationMask": "Segmentation Mask", + "segmentationMasks": "Segmentation Masks", "selectASpecificTomogram": "Select a specific tomogram from this run to download.", "selectDownload": "Select Download", "selectDownloadMethod": "Select Download Method", "selectSaveDestination": "Select Save Destination", "seriesIsAligned": "Series is Aligned", "showLess": "Show less", - "showMore": "Show {{count}} more", + "showMore": "Show more", + "showNumberMore": "Show {{count}} more", "size": "Size", "smallestAvailableVoxelSpacing": "Smallest Available Voxel Spacing", "somethingWentWrong": "Something went wrong", diff --git a/release-please.config.json b/release-please.config.json index 9fd94f2cf..7d32d1431 100644 --- a/release-please.config.json +++ b/release-please.config.json @@ -1,6 +1,4 @@ { - "bootstrap-sha": "79825da91dd20c3be2f47912285e2c977848af32", - "skip-github-release": true, "changelog-sections": [ { "type": "feat", "section": "✨ Features" }, { "type": "fix", "section": "🐞 Bug Fixes" }, @@ -16,7 +14,14 @@ ], "packages": { "frontend": { - "release-type": "node" + "release-type": "node", + "skip-github-release": true, + "separate-pull-requests": true + }, + "client/python/cryoet_data_portal": { + "package-name": "cryoet-data-portal-python-client", + "release-type": "python", + "separate-pull-requests": true } } } diff --git a/release-please.manifest.json b/release-please.manifest.json index fa40b364c..974adf072 100644 --- a/release-please.manifest.json +++ b/release-please.manifest.json @@ -1,3 +1,4 @@ { - "frontend": "1.23.0" + "frontend": "1.25.0", + "client/python/cryoet_data_portal": "3.1.0" }