Integrate Crystallography with Revvity Signals

Signals is an ELN that can store peptides and projects that could be useful when filling the information in Crystaline.

The integration with Signals includes:

  • Validation. Checking that Protein ane Compound names actually exist in Signals Materials registry when submitting harvested crystals.

  • TBD: Fetching a list of projects

Configuration

In docker-compose.yml need to specify environment variables:

# a host where your Signals instance is running
external.signals.base_url=https://some.host.com
# One of the authorization headers. It could be `x-api-key` from page `/snconfig/settings/apikey`
# or `Authorization: Bearer ...` with the OAuth2 token.
# You can actually specify many headers using this variable - HTTP's standard \r\n
# separator between them. But most of the time you need only the auth-related headers.
external.signals.headers=x-api-key:SPECIFY_TOKEN_HERE

And while Crystaline is running, turn on the actual integration by change Global Property using the API (at /swagger-ui/index.html#/global-settings-api/update):

[
  {"key": "external.protein.name_check_enabled", "value": true},
  {"key": "external.compound.name_check_enabled", "value": true}
]

Setting up permissions for the user in Signals

In order to set up a service user that can access only Compounds and Proteins, create a System Group "Crystaline" and add the user to that group. On System Security Policy page (https://signals.host/snconfig/security-policy) add 2 rules:

# For some reason when searching just for one entity, it's enough to have
# only permissions to assets, while when searching for 2+ we need to grant
# read access for AssetTypes as well, otherwise we get EnrichException.
RULE "Read Only Crystaline Access to Compound AssetTypes"
IF
  user group in "Crystaline"
  resource type equal "assettype" AND
  resource attribute "Material Library Type" in "Compounds"
THEN
  grant "entity.read"

RULE "Read Only Crystaline Access to Protein AssetType"
IF
  user group in "Crystaline"
  resource type equal "assettype" AND
  resource attribute "Material Library Type" in "Proteins"
THEN
  grant "entity.read"

RULE "Read Only Crystaline Access to Compound Assets"
IF
  user group in "Crystaline"
  resource type equal "asset" AND
  resource attribute "Material Library Type" in "Compounds"
THEN
  grant "entity.read"

RULE "Read Only Crystaline Access to Protein Assets"
IF
  user group in "Crystaline"
  resource type equal "asset" AND
  resource attribute "Material Library Type" in "Proteins"
THEN
  grant "entity.read"