diff --git a/.gitignore b/.gitignore index 7e6c35e..4e6ddc8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ .secret.yml build/ ena_upload_cli.egg-info/ -ena_upload/__pycache__/ +__pycache__/ diff --git a/README.md b/README.md index f819669..0f8c86a 100644 --- a/README.md +++ b/README.md @@ -7,18 +7,18 @@ # ENA upload tool -This command line tool (CLI) allows easy submission of experimental data and respective metadata to the European Nucleotide Archive (ENA) using tabular files or one of the excel spreadsheets that can be found on this [template repo](https://github.com/ELIXIR-Belgium/ENA-metadata-templates). The supported metadata that can be submitted includes study, sample, run and experiment info so you can use the tool for programatic submission of everything ENA needs without the need of logging in to the Webin interface. This also includes client side validation using ENA checklists and releasing the ENA objects. This command line tool is also available as a [Galaxy tool](https://toolshed.g2.bx.psu.edu/view/iuc/ena_upload/) and can be added to you own Galaxy instance or you can make use of one of the existing Galaxy instances, like [usegalaxy.eu](https://usegalaxy.eu/root?tool_id=toolshed.g2.bx.psu.edu/repos/iuc/ena_upload/ena_upload). +This command line tool (CLI) allows easy submission of experimental data and respective metadata to the European Nucleotide Archive (ENA) using tabular files or one of the excel spreadsheets that can be found on this [template repo](https://github.com/ELIXIR-Belgium/ENA-metadata-templates). The supported metadata that can be submitted includes study, sample, run and experiment info so you can use the tool for programmatic submission of everything ENA needs without the need of logging in to the Webin interface. This also includes client side validation using ENA checklists and releasing the ENA objects. This command line tool is also available as a [Galaxy tool](https://toolshed.g2.bx.psu.edu/view/iuc/ena_upload/) and can be added to you own Galaxy instance or you can make use of one of the existing Galaxy instances, like [usegalaxy.eu](https://usegalaxy.eu/root?tool_id=toolshed.g2.bx.psu.edu/repos/iuc/ena_upload/ena_upload). ## Overview -The metadata should be provided in separate tables corresponding to the following ENA objects: +The metadata should be provided in separate tables or files carrying similar information corresponding to the following ENA objects: * STUDY * SAMPLE * EXPERIMENT * RUN -The program to perform the following actions: +You can set the tool to perform the following actions: * add: add an object to the archive * modify: modify an object in the archive @@ -29,11 +29,15 @@ After a successful submission, new tsv tables will be generated with the ENA acc ## Tool dependencies -* python 3.5+ including following packages: +* python 3.7+ including following packages: * Genshi * lxml * pandas * requests + * pyyaml + * openpyxl + * jsonschema + ## Installation @@ -60,12 +64,14 @@ All supported arguments: --experiment EXPERIMENT table of EXPERIMENT object --run RUN table of RUN object - --data [FILE [FILE ...]] - data for submission + --data [FILE ...] data for submission --center CENTER_NAME specific to your Webin account --checklist CHECKLIST specify the sample checklist with following pattern: ERC0000XX, Default: ERC000011 --xlsx XLSX filled in excel template with metadata + --isa_json ISA_JSON BETA: ISA json describing describing the ENA objects + --isa_assay_stream ISA_ASSAY_STREAM + BETA: specify the assay stream(s) that holds the ENA information, this can be a list of assay streams --auto_action BETA: detect automatically which action (add or modify) to apply when the action column is not given --tool TOOL_NAME specify the name of the tool this submission is done with. Default: ena-upload-cli --tool_version TOOL_VERSION @@ -88,7 +94,7 @@ To avoid exposing your credentials through the terminal history, it is recommend ### ENA sample checklists -You can specify ENA sample checklist using the `--checklist` parameter. By default the ENA default sample checklist is used supporting the minimum information required for the sample (ERC000011). The supported checklists are listed on the [ENA website](https://www.ebi.ac.uk/ena/browser/checklists). This website will also describe which Field Names you have to use in the header of your sample tsv table. The Field Names will be automatically mapped in the outputted xml if the correct `--checklist` parameter is given. +You can specify ENA sample checklist using the `--checklist` parameter. By default the ENA default sample checklist is used supporting the minimum information required for the sample (ERC000011). The supported checklists are listed on our [template repo](https://github.com/ELIXIR-Belgium/ENA-metadata-templates). #### Fixed sample columns @@ -104,55 +110,11 @@ The command line tool will automatically fetch the correct scientific name based #### Viral submissions -If you want to submit viral samples you can use the [ENA virus pathogen](https://www.ebi.ac.uk/ena/browser/view/ERC000033) checklist by adding `ERC000033` to the checklist parameter. Check out our [viral example command](#test-the-tool) as demonstration. Please use the [ENA virus pathogen](https://www.ebi.ac.uk/ena/browser/view/ERC000033) checklist on the website of ENA to know which values are allowed/possible in the `restricted text` and `text choice` fields. +If you want to submit viral samples you can use the [ENA virus pathogen](https://www.ebi.ac.uk/ena/browser/view/ERC000033) checklist by adding `ERC000033` to the checklist parameter. Check out our [viral example command](#test-the-tool) as demonstration. Please use the [ENA virus pathogen](https://github.com/ELIXIR-Belgium/ENA-metadata-templates/tree/main/templates/ERC000033) checklist in our template repo to know what is allowed/possible in the `Controlled vocabulary`fields. ### ENA study, experiment and run tables -Here we list all the possible columns one can have in its study, experiment or run table along with its cardinality and controlled vocabulary (CV). -Currently we refer to the [ENA Webin](https://wwwdev.ebi.ac.uk/ena/submit/webin/) to discover which values are allowed when a controlled vocabulary is used, but this will change in the future. - -#### Study tsv table - -| Name of column | Cardinality | Documentation | CV | -|---|---|---|---| -| alias | mandatory | Submitter designated name for the object. The name must be unique within the submission account. | | -| title | mandatory | Title of the study as would be used in a publication. | | -| study_type | mandatory | The STUDY_TYPE presents a controlled vocabulary for expressing the overall purpose of the study. | yes | -| study_abstract | mandatory | Briefly describes the goals, purpose, and scope of the Study. This need not be listed if it can be inherited from a referenced publication. | | -| center_project_name | optional | Submitter defined project name. This field is intended for backward tracking of the study record to the submitter's LIMS. | | -| study_description | optional | More extensive free-form description of the study. | | -| pubmed_id | optional | Link to publication related to this study. | | - -#### Experiment tsv table - -| Name of column | Cardinality | Documentation | CV | -|---|---|---|---| -| alias | mandatory | Submitter designated name for the object. The name must be unique within the submission account. | | -| title | mandatory | Short text that can be used to call out experiment records in searches or in displays. | | -| study_alias | mandatory | Identifies the parent study. | | -| sample_alias | mandatory | Pick a sample to associate this experiment with. The sample may be an individual or a pool, depending on how it is specified. | | -| design_description | mandatory | Goal and setup of the individual library including library was constructed. | | -| spot_descriptor | optional | The SPOT_DESCRIPTOR specifies how to decode the individual reads of interest from the monolithic spot sequence. The spot descriptor contains aspects of the experimental design, platform, and processing information. There will be two methods of specification: one will be an index into a table of typical decodings, the other being an exact specification. This construct is needed for loading data and for interpreting the loaded runs. It can be omitted if the loader can infer read layout (from multiple input files or from one input files). | | -| library_name | optional | The submitter's name for this library. | | -| library_layout | mandatory | LIBRARY_LAYOUT specifies whether to expect single, paired, or other configuration of reads. In the case of paired reads, information about the relative distance and orientation is specified. | yes | -| insert_size | mandatory | Relative distance. | | -| library_strategy | mandatory | Sequencing technique intended for this library | yes | -| library_source | mandatory | The LIBRARY_SOURCE specifies the type of source material that is being sequenced. | yes | -| library_selection | mandatory | Method used to enrich the target in the sequence library preparation | yes | -| platform | mandatory | The PLATFORM record selects which sequencing platform and platform-specific runtime parameters. This will be determined by the Center. | yes | -| instrument_model | mandatory | Model of the sequencing instrument. | yes | -| library_construction_protocol | optional | Free form text describing the protocol by which the sequencing library was constructed. | | - - -#### Run tsv table - -| Name of column | Cardinality | Documentation | CV | -|---|---|---|---| -| alias | mandatory | Submitter designated name for the object. The name must be unique within the submission account. | | -| experiment_alias | mandatory | Identifies the parent experiment. | | -| file_name | mandatory | The name or relative pathname of a run data file. | | -| file_type | mandatory | The run data file model. | yes | -| file_checksum | optional | Checksum of uncompressed file. If not given, the checksum will be calculated based on the data files specified in the --data option | | +Please check out the [template](https://github.com/ELIXIR-Belgium/ENA-metadata-templates) of your checklist to discover which attributes are mandatory for the study, experiment and run ENA object. ### Dev instance @@ -176,7 +138,7 @@ There are two ways of submitting only a selection of objects to ENA. This is han | sample_alias_5 | | sample_title_2 | 2697049 | sample_description_2 | -> IMPORTANT: if the status column is given but not filled in, or filled in with a different action from the one in the `--action` parameter, not rows will be submitted! Either leave out the column or add to every row the corect action. +> IMPORTANT: if the status column is given but not filled in, or filled in with a different action from the one in the `--action` parameter, no rows will be submitted! Either leave out the column or add to every row you want to submit the correct action. ### Using Excel templates @@ -215,7 +177,7 @@ By default the updated tables after submission will have the action `added` in t ## Tool overview **inputs**: -* metadata tables/excelsheet +* metadata tables/excelsheet/isa_json * examples in `example_table` and on this [template repo](https://github.com/ELIXIR-Belgium/ENA-metadata-templates) for excel sheets * (optional) define actions in **status** column e.g. `add`, `modify`, `cancel`, `release` (when not given the whole table is submitted) * to perform bulk submission of all objects, the `aliases ids` in different ENA objects should be in the association where alias ids in experiment object link all objects together @@ -262,6 +224,11 @@ By default the updated tables after submission will have the action `added` in t ena-upload-cli --action add --center 'your_center_name' --data example_data/*gz --dev --checklist ERC000033 --secret .secret.yml --xlsx example_tables/ENA_excel_example_ERC000033.xlsx ``` +* **Using an ISA JSON** + ``` + ena-upload-cli --action add --center 'your_center_name' --data example_data/*gz --dev --secret .secret.yml --isa_json tests/test_data/simple_test_case_v2.json --isa_assay_stream "Ena stream 1" + ``` + * **Release submission** ``` ena-upload-cli --action release --center'your_center_name' --study example_tables/ENA_template_studies_release.tsv --dev --secret .secret.yml diff --git a/ena_upload/_version.py b/ena_upload/_version.py index 364e7ba..49e0fc1 100644 --- a/ena_upload/_version.py +++ b/ena_upload/_version.py @@ -1 +1 @@ -__version__ = "0.6.4" +__version__ = "0.7.0" diff --git a/ena_upload/ena_upload.py b/ena_upload/ena_upload.py index 0e5f046..be66bed 100755 --- a/ena_upload/ena_upload.py +++ b/ena_upload/ena_upload.py @@ -12,6 +12,7 @@ import hashlib import ftplib import requests +import json import uuid import numpy as np import re @@ -21,6 +22,8 @@ import tempfile from ena_upload._version import __version__ from ena_upload.check_remote import remote_check +from ena_upload.json_parsing.ena_submission import EnaSubmission + SCHEMA_TYPES = ['study', 'experiment', 'run', 'sample'] @@ -371,7 +374,7 @@ def get_taxon_id(scientific_name): taxon_id = r.json()[0]['taxId'] return taxon_id except ValueError: - msg = f'Oops, no taxon ID avaible for {scientific_name}. Is it a valid scientific name?' + msg = f'Oops, no taxon ID available for {scientific_name}. Is it a valid scientific name?' sys.exit(msg) @@ -390,7 +393,7 @@ def get_scientific_name(taxon_id): taxon_id = r.json()['scientificName'] return taxon_id except ValueError: - msg = f'Oops, no scientific name avaible for {taxon_id}. Is it a valid taxon_id?' + msg = f'Oops, no scientific name available for {taxon_id}. Is it a valid taxon_id?' sys.exit(msg) @@ -413,16 +416,15 @@ def submit_data(file_paths, password, webin_id): except IOError as ioe: print(ioe) - print("ERROR: could not connect to the ftp server.\ + sys.exit("ERROR: could not connect to the ftp server.\ Please check your login details.") - sys.exit() for filename, path in file_paths.items(): print(f'uploading {path}') try: print(ftps.storbinary(f'STOR {filename}', open(path, 'rb'))) except BaseException as err: print(f"ERROR: {err}") - print("ERROR: If your connection times out at this stage, it propably is because of a firewall that is in place. FTP is used in passive mode and connection will be opened to one of the ports: 40000 and 50000.") + print("ERROR: If your connection times out at this stage, it probably is because of a firewall that is in place. FTP is used in passive mode and connection will be opened to one of the ports: 40000 and 50000.") raise print(ftps.quit()) @@ -699,7 +701,7 @@ def process_args(): parser.add_argument('--data', nargs='*', - help='data for submission', + help='data for submission, this can be a list of files', metavar='FILE') parser.add_argument('--center', @@ -712,6 +714,13 @@ def process_args(): parser.add_argument('--xlsx', help='filled in excel template with metadata') + + parser.add_argument('--isa_json', + help='BETA: ISA json describing describing the ENA objects') + + parser.add_argument('--isa_assay_stream', + nargs='*', + help='BETA: specify the assay stream(s) that holds the ENA information, this can be a list of assay streams') parser.add_argument('--auto_action', action="store_true", @@ -749,7 +758,7 @@ def process_args(): # check if any table is given tables = set([args.study, args.sample, args.experiment, args.run]) - if tables == {None} and not args.xlsx: + if tables == {None} and not args.xlsx and not args.isa_json: parser.error('Requires at least one table for submission') # check if .secret file exists @@ -764,6 +773,14 @@ def process_args(): msg = f"Oops, the file {args.xlsx} does not exist" parser.error(msg) + # check if ISA json file exists + if args.isa_json: + if not os.path.isfile(args.isa_json): + msg = f"Oops, the file {args.isa_json} does not exist" + parser.error(msg) + if args.isa_assay_stream is None : + parser.error("--isa_json requires --isa_assay_stream") + # check if data is given when adding a 'run' table if (not args.no_data_upload and args.run and args.action.upper() not in ['RELEASE', 'CANCEL']) or (not args.no_data_upload and args.xlsx and args.action.upper() not in ['RELEASE', 'CANCEL']): if args.data is None: @@ -816,6 +833,8 @@ def main(): secret = args.secret draft = args.draft xlsx = args.xlsx + isa_json_file = args.isa_json + isa_assay_stream = args.isa_assay_stream auto_action = args.auto_action with open(secret, 'r') as secret_file: @@ -857,6 +876,25 @@ def main(): schema_dataframe[schema] = xl_sheet path = os.path.dirname(os.path.abspath(xlsx)) schema_tables[schema] = f"{path}/ENA_template_{schema}.tsv" + elif isa_json_file: + # Read json file + with open(isa_json_file, 'r') as json_file: + isa_json = json.load(json_file) + + schema_tables = {} + schema_dataframe = {} + required_assays = [] + for stream in isa_assay_stream: + required_assays.append({"assay_stream": stream}) + submission = EnaSubmission.from_isa_json(isa_json, required_assays) + submission_dataframes = submission.generate_dataframes() + for schema, df in submission_dataframes.items(): + schema_dataframe[schema] = check_columns( + df, schema, action, dev, auto_action) + path = os.path.dirname(os.path.abspath(isa_json_file)) + schema_tables[schema] = f"{path}/ENA_template_{schema}.tsv" + + else: # collect the schema with table input from command-line schema_tables = collect_tables(args) diff --git a/ena_upload/json_parsing/__init__.py b/ena_upload/json_parsing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ena_upload/json_parsing/characteristic.py b/ena_upload/json_parsing/characteristic.py new file mode 100644 index 0000000..84b2b60 --- /dev/null +++ b/ena_upload/json_parsing/characteristic.py @@ -0,0 +1,134 @@ +import json +import os +from typing import List, Dict +import jsonschema + + +class IsaBase: + """ + This is the base class + """ + + @classmethod + def validate_json(self, isa_json: Dict[str, str], schema): + schema_path = os.path.join(os.curdir, "ena_upload", "json_parsing", "json_schemas", schema) + + json_file = open(schema_path) + json_schema = json.load(json_file) + + jsonschema.validate( + isa_json, + json_schema, + ) + + +def fetch_category_name(categories: Dict[str, str], name: str) -> str: + for cat in categories: + if name["@id"] == cat["id"]: + if "name" in cat: + return cat["name"] + elif "value" in cat: + return cat["value"] + + +def category_dict(dict: Dict[str, str], categories: Dict[str, str]) -> Dict[str, str]: + """Matches the category ID to a category name and returns a dictionary of the category. + + Args: + dict (Dict[str, str]): category dictionary + categories (Dict[str, str]): Dictionary of the characteristics to match + + Returns: + Dict[str, str]: Modified category dictionary + """ + category_name = fetch_category_name(categories, dict) + category_id = dict["@id"] + return {"id": category_id, "name": category_name} + + +class Characteristic(IsaBase): + """ + This is the generic base class of a characteristics object. + """ + + parameters = [] + + def __init__(self, category: Dict, value: str) -> None: + self.category = category + self.value = value + + @classmethod + def from_dict(self, dict: Dict[str, str], categories: List[Dict[str, str]]) -> None: + """Creates a characteristic object from a dictionary + + Args: + dict (Dict[str, str]): Characteristics dictionary + categories (List[Dict[str, str]]): List of all characteristics categories + + Returns: + Characteristic: _description_ + """ + return self( + category=category_dict(dict["category"], categories), + value=dict["value"]["annotationValue"], + ) + + def to_dict(self) -> Dict[str, str]: + return { + "category": self.category, + "value": self.value, + } + + +class OtherMaterialCharacteristic(Characteristic): + """ + This class represents a Characteristic for the other material object. + """ + + def __init__(self, category: Dict, value: str) -> None: + super().__init__(category, value) + + @classmethod + def from_dict( + cls, dict: Dict[str, str], characteristics_categories: Dict[str, str] + ): + return super().from_dict(dict, characteristics_categories) + + def to_dict(self) -> Dict[str, str]: + return super().to_dict() + + +class ParameterValue(Characteristic): + """ + This class represents a paramenter value in the isa study + and extends the Characteristic class. + """ + + def __init__(self, category: Dict[str, str], value: str) -> None: + super().__init__(category, value) + + @classmethod + def from_dict(self, dict: Dict[str, str], parameters: Dict[str, str]): + return super().from_dict(dict, parameters) + + def to_dict(self) -> Dict[str, str]: + return super().to_dict() + + +class SampleCharacteristic(Characteristic): + """ + This class represents a Sample Characteristic in the isa study + and extends the Characteristic class. + """ + + def __init__(self, category: Dict, value: str) -> None: + super().__init__(category, value) + + @classmethod + def from_dict( + self, dict: Dict[str, str], characteristics_categories: Dict[str, str] + ): + return super().from_dict(dict, characteristics_categories) + + def to_dict(self) -> Dict[str, str]: + return super().to_dict() diff --git a/ena_upload/json_parsing/ena_experiment.py b/ena_upload/json_parsing/ena_experiment.py new file mode 100644 index 0000000..c88dd91 --- /dev/null +++ b/ena_upload/json_parsing/ena_experiment.py @@ -0,0 +1,236 @@ +from typing import List, Dict, Union + +from pandas import DataFrame + +from ena_upload.json_parsing.ena_std_lib import ( + fetch_assay_comment_by_name, + get_assay_sample_associations, + clip_off_prefix, + get_parameter_values, +) +from ena_upload.json_parsing.characteristic import ( + IsaBase, + OtherMaterialCharacteristic, + ParameterValue, +) +from ena_upload.json_parsing.other_material import OtherMaterial + + +def experiment_alias(other_material: OtherMaterial, prefix: str) -> str: + """Generates an alias for the experiment, starting from an other_material + and a prefix. + + Args: + other_material (OtherMaterial): OtherMaterial object + prefix (str): Prefix + + Returns: + str: experiment alias + """ + seek_assays_id: str = clip_off_prefix(other_material.id) + return prefix + seek_assays_id + + +def fetch_characteristic_categories( + assay_stream: Dict[str, str] +) -> List[Dict[str, str]]: + """Fetches all characteristics categories from a provided study dictionary + and returns them as a list of characteristics categories. + + Args: + study_dict (Dict[str, str]): Input study dictionary + + Returns: + List[Dict[str, str]]: List of the characteristics categories + """ + categories = [] + for cc in assay_stream["characteristicCategories"]: + categories.append( + {"id": cc["@id"], "value": cc["characteristicType"]["annotationValue"]} + ) + return categories + + +def get_other_materials(assay_stream: Dict[str, str]) -> List[OtherMaterial]: + """Returns a List of 'other materials' from a study dictionary + and returns them as a list of OtherMaterial objects. + + Args: + study_dict (Dict[str, str]): Input study dictionary + + Returns: + List[OtherMaterial]: Resulting list of OtherMaterial objects + """ + other_materials = [] + characteristics_categories = fetch_characteristic_categories(assay_stream) + for om in assay_stream["materials"]["otherMaterials"]: + other_material = OtherMaterial.from_dict( + dict=om, characteristics_categories=characteristics_categories + ) + other_materials.append(other_material) + + return other_materials + + +def library_names(study_dict: Dict[str, str]) -> List[str]: + """Returns a list of library names from a study dictionary. + + Args: + study_dict (Dict[str, str]): Input study dictionary + + Returns: + List[str]: Resulting list of library names + """ + return [om["name"] for om in get_other_materials(study_dict)] + + +def get_derived_sample_alias( + other_material: OtherMaterial, + assay_stream: Dict[str, str], + sample_alias_prefix: str, + return_multiple: bool = False, +) -> Union[str, List[str]]: + """Gets Sample ids, an 'other material' is derived from. + + Args: + other_material (OtherMaterial): other material + study_dict (Dict): Input study dictioary + return_multiple (bool, optional): Optional flag to return multiple sample ID's per 'other material'. Defaults to False. + + Returns: + str: Resulting derived sample id or list of derived sample id's + """ + assoc_sample_ids = [] + sample_associations = get_assay_sample_associations(assay_stream) + for sa in sample_associations: + if clip_off_prefix(other_material.id) in clip_off_prefix(sa["output"]): + # sa["output"] => '#sample/' + # other_material.id => '#other_material/' + if return_multiple: + for input in sa["input"]: + alias = sample_alias_prefix + clip_off_prefix(input) + assoc_sample_ids.append(alias) + else: + input = sa["input"][0] + return sample_alias_prefix + clip_off_prefix(input) + return assoc_sample_ids + + +class EnaExperiment(IsaBase): + """ + Generates an Experiment object, compliant to the requirements of ENA + """ + + prefix = "ena_experiment_alias_prefix" + + def __init__( + self, + alias: str, + study_alias: str, + sample_alias: str, + library_name: str, + parameter_values: List[ParameterValue] = [], + other_material_characteristics: List[OtherMaterialCharacteristic] = [], + ) -> None: + self.alias = alias + self.study_alias = study_alias + self.sample_alias = sample_alias + self.library_name = library_name + self.parameter_values = parameter_values + self.other_material_characteristics = other_material_characteristics + + def to_dict(self) -> Dict[str, str]: + """Returns the EnaExperiment object as a dictionary. + + Returns: + Dict[str, str]: Resulting dictionary with EnaExperiment information + """ + return { + "alias": self.alias, + "study_alias": self.study_alias, + "sample_alias": self.sample_alias, + "library_name": self.library_name, + "parameter_values": [pv.to_dict() for pv in self.parameter_values], + "other_material_characteristics": [ + omc.to_dict() for omc in self.other_material_characteristics + ], + } + + @classmethod + def from_assay_stream( + self, + assay_stream: Dict[str, str], + study_alias: str, + sample_alias_prefix: str, + protocols_dict: Dict[str, str], + ) -> None: + """Generates a EnaExperiment object from a study dictionary. + + Args: + study_dict (Dict[str, str]): Input study dictionary + study_alias (str): Alias of the study associated with the experiments + + Returns: + EnaExperiment: Resulting EnaExperiment object + """ + + other_materials = get_other_materials(assay_stream) + parameter_values = get_parameter_values( + assay_stream["processSequence"], protocols_dict + ) + prefix = fetch_assay_comment_by_name(assay_stream, EnaExperiment.prefix)[ + "value" + ] + ena_experiments = [] + for om in other_materials: + om_id = clip_off_prefix(om.id) + s_alias = get_derived_sample_alias(om, assay_stream, sample_alias_prefix) + filtered_parameter_vals = list( + filter(lambda pv: pv["sample_id"] == om_id, parameter_values) + ) + + parameter_vals = [] + for fpv in filtered_parameter_vals: + for pv in fpv["parameter_values"]: + parameter_vals.append(pv) + + ena_experiments.append( + EnaExperiment( + alias=experiment_alias(om, prefix), + library_name=om.name, + study_alias=study_alias, + sample_alias=s_alias, + parameter_values=parameter_vals, + other_material_characteristics=om.other_material_characteristics, + ) + ) + return ena_experiments + + +def export_experiments_to_dataframe(experiments: List[EnaExperiment]) -> DataFrame: + """Exports the information out of a list of EnaExperiment to a pandas DataFrame + + Args: + experiments (List[EnaExperiment]): Input list of experiments + + Returns: + DataFrame: Resulting DataFrame + """ + flat_dicts = [] + for experiment in experiments: + experiment_dict = experiment.to_dict() + other_material_characteristics = experiment_dict.pop( + "other_material_characteristics" + ) + + parameter_values = experiment_dict.pop("parameter_values") + + for omc in other_material_characteristics: + experiment_dict.update({omc["category"]["name"]: omc["value"]}) + + for pv in parameter_values: + experiment_dict.update({pv["category"]["name"]: pv["value"]}) + + flat_dicts.append(experiment_dict) + + return DataFrame.from_dict(flat_dicts) diff --git a/ena_upload/json_parsing/ena_run.py b/ena_upload/json_parsing/ena_run.py new file mode 100644 index 0000000..7341dd2 --- /dev/null +++ b/ena_upload/json_parsing/ena_run.py @@ -0,0 +1,233 @@ +from typing import List, Dict + +from pandas import DataFrame + +from ena_upload.json_parsing.characteristic import IsaBase +from ena_upload.json_parsing.ena_experiment import EnaExperiment +from ena_upload.json_parsing.ena_std_lib import ( + fetch_assay_comment_by_name, + get_assay_sample_associations, + clip_off_prefix, +) + + +class DataFileComment(IsaBase): + """Object representation of a data file comment in the ISA JSON. + Extends the IsaBase class. + """ + + mandatory_keys = ["name", "value"] + + def __init__(self, name: str, value: str) -> None: + super().__init__() + self.name = name + self.value = value + + @classmethod + def from_dict(self, comments_dict: Dict[str, str]) -> None: + """Generates a DataFileComment from comment dictionary. + + Args: + comments_dict (Dict[str, str]): Input data file comment dictionary + + Returns: + DataFileComment: Resulting DataFileComment + """ + return [ + DataFileComment(name=comment["name"], value=comment["value"]) + for comment in comments_dict + ] + + def to_dict(self) -> Dict: + return {"name": self.name, "value": self.value} + + +class DataFile(IsaBase): + """Object representation of a data file in the ISA JSON. + Extends the IsaBase class. + """ + + def __init__(self, id, name, type, comments, derived_experiment_id) -> None: + super().__init__() + self.id: str = id + self.name: str = name + self.type: str = type + self.comments: List[DataFileComment] = comments + self.derived_experiment_id: str = derived_experiment_id + + @classmethod + def from_data_file_dict( + self, data_file_dict: Dict[str, str], associations: Dict[str, str] + ) -> None: + """Generates a DataFile from a data file dictionary and dictionary of data file associations. + + Args: + data_file_dict (Dict[str, str]): data file dictionary + associations (Dict[str, str]): data file associations dictionar + + Returns: + DataFile: Resulting DataFile + """ + return DataFile( + id=data_file_dict["@id"], + name=data_file_dict["name"], + type=data_file_dict["type"], + comments=DataFileComment.from_dict(data_file_dict["comments"]), + derived_experiment_id=get_derived_expertiment_id( + associations, clip_off_prefix(data_file_dict["@id"]) + ), + ) + + def to_dict(self) -> Dict[str, str]: + """Converts the DataFile object into a dictionary. + + Returns: + Dict[str, str]: Resulting dictionary + """ + return { + "id": self.id, + "name": self.name, + "type": self.type, + "comments": [comment.to_dict() for comment in self.comments], + "derived_experiment_id": self.derived_experiment_id, + } + + +def get_involved_process_id(id: str, process_sequence: List[Dict[str, str]]): + for process in process_sequence: + output_ids = [output["@id"] for output in process["outputs"]] + if id in output_ids: + return process["@id"] + + +def run_alias( + data_file: Dict[str, str], process_sequence: List[Dict[str, str]], prefix: str +) -> str: + """Generates an alias for the run, based on the data file dictionary + and prefix specified in the Class + + Args: + data_file (Dict[str, str]): Input data file dictionary + prefix (str): prefix for alias + + Returns: + str: Resulting alias + """ + + data_file_id = data_file["@id"] + process_id = get_involved_process_id(data_file_id, process_sequence) + return prefix + clip_off_prefix(process_id) + + +def get_derived_expertiment_id( + associations: List[Dict[str, str]], data_file_id: str +) -> str: + """Fetches the derived sample id from data file id and a list of datafile - experiment associations. + + Args: + associations (List[Dict[str, str]]): list of sample - experiment associations + data_file_id (str): data file id + + Returns: + str: resulting derived experiment id + """ + for association in associations: + if data_file_id in clip_off_prefix(association["output"]): + return association["input"][0] + + +def fetch_experiment_alias(data_file: DataFile, prefix: str) -> str: + """Generates the experiment alias from the information in the provided data file. + + Args: + data_file (DataFile): Input data file + + Returns: + str: associated experiment alias + """ + return prefix + clip_off_prefix(data_file.derived_experiment_id) + + +class EnaRun(IsaBase): + """ + Generates a Run object, compliant to the requirements of ENA. + """ + + prefix = "ena_run_alias_prefix" + + def __init__( + self, + alias: str, + experiment_alias: str, + data_file: DataFile, + ) -> None: + super().__init__() + self.alias = alias + self.experiment_alias = experiment_alias + self.data_file = data_file + + @classmethod + def from_assay_stream(self, assay_stream: Dict[str, str]) -> None: + """Generates a EnaRun object from a study dictionary. + + Args: + study_dict (Dict[str, str]): Input study dictionary + + Returns: + EnaRun: Resulting run + """ + ena_runs = [] + + sample_datafile_associations = get_assay_sample_associations(assay_stream) + prefix = fetch_assay_comment_by_name(assay_stream, EnaRun.prefix)["value"] + ena_experiment_prefix = fetch_assay_comment_by_name( + assay_stream, EnaExperiment.prefix + )["value"] + for data_file in assay_stream["dataFiles"]: + current_data_file = DataFile.from_data_file_dict( + data_file, sample_datafile_associations + ) + ena_runs.append( + EnaRun( + alias=run_alias(data_file, assay_stream["processSequence"], prefix), + experiment_alias=fetch_experiment_alias( + current_data_file, ena_experiment_prefix + ), + data_file=current_data_file, + ) + ) + + return ena_runs + + def to_dict(self) -> Dict[str, str]: + """Converts the EnaRun object into a dictionary + + Returns: + Dict[str, str]: resulting dictionary + """ + return { + "alias": self.alias, + "experiment_alias": self.experiment_alias, + "data_file": self.data_file.to_dict(), + } + + +def export_runs_to_dataframe(runs: List[EnaRun]) -> DataFrame: + """Exports a list of EnaRun to a pandas DataFrame + + Args: + runs (List[EnaRun]): input list of EnaRun + + Returns: + DataFrame: Resulting pandas DataFrame + """ + ena_run_dicts = [run.to_dict() for run in runs] + flat_dicts = [] + for dict in ena_run_dicts: + data_file = dict.pop("data_file") + data_file_comments = data_file.pop("comments") + dict.update({"file_name": data_file["name"]}) + for dfc in data_file_comments: + dict.update({dfc["name"]: dfc["value"]}) + flat_dicts.append(dict) + return DataFrame.from_dict(flat_dicts) diff --git a/ena_upload/json_parsing/ena_sample.py b/ena_upload/json_parsing/ena_sample.py new file mode 100644 index 0000000..37c326c --- /dev/null +++ b/ena_upload/json_parsing/ena_sample.py @@ -0,0 +1,199 @@ +from typing import List, Dict +from ena_upload.json_parsing.characteristic import SampleCharacteristic, ParameterValue + +from pandas import DataFrame + +from ena_upload.json_parsing.ena_std_lib import ( + clip_off_prefix, + fetch_study_comment_by_name, + get_parameter_values, +) + + +def fetch_characteristic_categories(study_dict: Dict) -> Dict: + """Retrieves the name of a characteristic id + + Args: + study_dict (Dict): study dictionary + id (str): characteristic ID + + Returns: + Dict: characteristic name corresponding with the ID + """ + return [ + {"id": cc["@id"], "name": cc["characteristicType"]["annotationValue"]} + for cc in study_dict["characteristicCategories"] + ] + + +def fetch_characteristics(sample_dict: Dict, study_dict: Dict) -> List[Dict]: + """Fetches the characteristics from the given sample dictionary + + Args: + sample_dict (Dict): sample dictionary + study_dict (Dict): study dictionary + + Returns: + List[Dict]: List of characteristic dictionaries + """ + characteristic_categories = fetch_characteristic_categories(study_dict) + return [ + SampleCharacteristic.from_dict(char, characteristic_categories) + for char in sample_dict["characteristics"] + ] + + +def associated_source(sample_dict: Dict, study_dict: Dict) -> List[str]: + """Retrieves the ID of the source associated with the given sample + + Args: + sample_dict (Dict): sample dictionary + study_dict (Dict): study dictionary + + Returns: + List[str]: List of source ID's + """ + sample_id = sample_dict["@id"] + for process in study_dict["processSequence"]: + input_ids = [input["@id"] for input in process["inputs"]] + output_ids = [output["@id"] for output in process["outputs"]] + if sample_id in output_ids: + return input_ids + + +def associated_source_characteristics(sources_data: Dict, ids: List[str]) -> Dict: + """Retrieves the characteristics of the associated sources, + corresponding with the provided sample ID's + + Args: + sources_data (Dict): dictionary of the sources + ids (List[str]): list of sample ID's + + Returns: + Dict: the dictionary of the source characteristics + """ + for sd in sources_data: + if sd["id"] in ids: + return sd["characteristics"] + + +def sample_alias(id: str, prefix) -> str: + """Retrieves the sample's alias + + Args: + id (str): Sample ID + + Returns: + str: Unique string representation of the alias + """ + return prefix + clip_off_prefix(id) + + +class EnaSample: + """ + Generates an Sample object, compliant to the requirements of ENA + """ + + prefix: str = "ena_sample_alias_prefix" + + def __init__( + self, + characteristics: List[SampleCharacteristic], + parameter_values: List[ParameterValue], + alias: str, + ) -> None: + self.alias = alias + self.characteristics = characteristics + self.parameter_values = parameter_values + + def to_dict(self) -> Dict: + return { + "alias": self.alias, + "characteristics": [char.to_dict() for char in self.characteristics], + "parameter_values": [pv.to_dict() for pv in self.parameter_values], + } + + @classmethod + def from_study_dict(self, study_dict: Dict) -> None: + """Generate sample objects from a study dictionary + + Args: + study_dict (Dict): study dictionary + + Returns: + List[EnaSample]: List of Ena Sample objects + """ + sources_data = [ + { + "id": source["@id"], + "name": source["name"], + "characteristics": fetch_characteristics(source, study_dict), + } + for source in study_dict["materials"]["sources"] + ] + parameter_values = get_parameter_values( + process_sequence=study_dict["processSequence"], + study_protocols_dict=study_dict["protocols"], + ) + + samples_data = [] + for sample in study_dict["materials"]["samples"]: + filtered_parameter_vals = list( + filter( + lambda pv: pv["sample_id"] == clip_off_prefix(sample["@id"]), + parameter_values, + ) + ) + parameter_vals = [] + for fpv in filtered_parameter_vals: + for pv in fpv["parameter_values"]: + parameter_vals.append(pv) + + samples_data.append( + { + "id": sample["@id"], + "name": sample["name"], + "characteristics": fetch_characteristics(sample, study_dict), + "parameter_values": parameter_vals, + "source": associated_source(sample, study_dict), + } + ) + + for sd in samples_data: + for sc in associated_source_characteristics(sources_data, sd["source"]): + sd["characteristics"].append(sc) + + study_alias_prefix = fetch_study_comment_by_name(study_dict, self.prefix)[ + "value" + ] + return [ + EnaSample( + alias=sample_alias(sd["id"], study_alias_prefix), + characteristics=sd["characteristics"], + parameter_values=sd["parameter_values"], + ) + for sd in samples_data + ] + + +def export_samples_to_dataframe(samples: List[EnaSample]): + """Exports a list of Ena Samples to a pandas DataFrame + + Args: + samples (List[EnaSample]): Ena sample list + + Returns: + DataFrame: pandas DataFrame + """ + flat_dicts = [] + for sample in samples: + sample_dict = sample.to_dict() + characteristics = sample_dict.pop("characteristics") + for char in characteristics: + sample_dict.update({char["category"]["name"]: char["value"]}) + parameter_values = sample_dict.pop("parameter_values") + for pv in parameter_values: + sample_dict.update({pv["category"]["name"]: pv["value"]}) + flat_dicts.append(sample_dict) + + return DataFrame.from_dict(flat_dicts) diff --git a/ena_upload/json_parsing/ena_std_lib.py b/ena_upload/json_parsing/ena_std_lib.py new file mode 100644 index 0000000..b6920aa --- /dev/null +++ b/ena_upload/json_parsing/ena_std_lib.py @@ -0,0 +1,154 @@ +from typing import Dict, List, Union +import re +from ena_upload.json_parsing.characteristic import ParameterValue + + +def fetch_parameters(protocol_dict: Dict[str, str]) -> List[Dict[str, str]]: + """Fetches the parameters from a protocol dictionary. + + Args: + protocol_dict (Dict[str, str]): protocol dictionary + + Returns: + List[Dict[str, str]]: Resulting list of parameters + """ + parameters = [] + for protocol in protocol_dict: + for parameter in protocol["parameters"]: + parameters.append( + { + "id": parameter["@id"], + "name": parameter["parameterName"]["annotationValue"], + } + ) + return parameters + + +def get_parameter_values( + process_sequence: Dict[str, str], study_protocols_dict: Dict[str, str] +) -> Dict[str, str]: + """Returns all parameter values from a study dictionary. + + Args: + study_dict (Dict[str, str]): Input study dictionary + + Returns: + Dict[str, str]: Resulting dictionary of parameter values. + """ + param_vals = [] + parameters = fetch_parameters(study_protocols_dict) + for process in process_sequence: + sample_ids = [clip_off_prefix(output["@id"]) for output in process["outputs"]] + parameter_values = [ + ParameterValue.from_dict(parameter_value, parameters) + for parameter_value in process["parameterValues"] + ] + for sample_id in sample_ids: + param_vals.append( + {"sample_id": sample_id, "parameter_values": parameter_values} + ) + return param_vals + + +def get_assay_sample_associations(assay_dict: Dict[str, str]) -> List[Dict[str, str]]: + """Fetches the list of sample assocations in a specified assay dictionary. + Each dictionary contains a list of input ids and output ids. + + Args: + assay_dict (Dict[str, str]): input assay dictionary + + Returns: + List[Dict[str, str]]: List of dictionaries with the associations + """ + process_sequence = [] + for process in assay_dict["processSequence"]: + input_ids = [input["@id"] for input in process["inputs"]] + output_ids = [output["@id"] for output in process["outputs"]] + process_sequence.append({"input": input_ids, "output": output_ids}) + + return process_sequence + + +def clip_off_prefix(alias: Union[str, List[str]]) -> Union[str, List[str]]: + """Clips off any prefix separated by the '/' character and returns the last subelement. + The input can be a single String or a list of Strings. + + Args: + alias (Union[str, List[str]]): Single alias or List of aliases + + Raises: + TypeError: If the type of the input is anything other than a String or a list of Strings, an Exception is raised. + + Returns: + Union[str, List[str]]: Depending on the input, returns a single String or a list of Strings. + """ + if isinstance(alias, str): + result = re.split("/", alias)[-1] + elif isinstance(alias, list): + result = [] + for item in alias: + if isinstance(item, str): + result.append(re.split("/", item)[-1]) + else: + raise TypeError( + "The 'clip_off_prefix' function only accepts strings or a list of strings" + ) + else: + raise TypeError( + "The 'clip_off_prefix' function only accepts strings or a list of strings" + ) + return result + + +def get_study_id(study_dict: Dict[str, str]) -> str: + """Fetches the study ID from the comments of a provided study dictionary + + Args: + study_dict (Dict[str, str]): study_dictionary + + Raises: + KeyError: Raised when the 'SEEK Study ID' comment is not found + + Returns: + str: Resulting identifier + """ + comment_names = [comment["name"] for comment in study_dict["comments"]] + for study_comment in study_dict["comments"]: + if "SEEK Study ID" not in comment_names: + raise KeyError( + "Bad dictionary. 'SEEK Study ID' comment is mandatory in Study." + ) + if study_comment["name"] == "SEEK Study ID": + return study_comment["value"] + + +def fetch_assay_comment_by_name( + assay_stream: Dict[str, str], comment_name: str +) -> Dict[str, str]: + for comment in assay_stream["comments"]: + if comment["name"] == comment_name: + return comment + + +def fetch_study_comment_by_name( + study_dict: Dict[str, str], comment_name: str +) -> Dict[str, str]: + for comment in study_dict["comments"]: + if comment["name"] == comment_name: + return comment + + +def fetch_assay_streams(study: Dict[str, str]) -> List[Dict[str, str]]: + return [assay for assay in study["assays"]] + + +def study_publication_ids(publication_isa_json: Dict) -> List[int]: + """Retrieves the pubmed_ids from the ISA JSON + + Args: + publication_isa_json (Dict): Publication part of the ISA JSON dictionary + + Returns: + List[int]: List of pubmed ID's + """ + return ",".join([str(pub["pubMedID"]) for pub in publication_isa_json]) diff --git a/ena_upload/json_parsing/ena_study.py b/ena_upload/json_parsing/ena_study.py new file mode 100644 index 0000000..10d1798 --- /dev/null +++ b/ena_upload/json_parsing/ena_study.py @@ -0,0 +1,102 @@ +from typing import List, Optional, Dict +from pandas import DataFrame +from ena_upload.json_parsing.characteristic import IsaBase +from ena_upload.json_parsing.ena_std_lib import ( + clip_off_prefix, + fetch_assay_comment_by_name, +) + + +def study_alias(assay_stream: Dict[str, str]) -> str: + """Creates a study_alias, based on information of the assay stream and study of the ISA JSON. + + Args: + assay_stream Dict[str, str]: assay stream part of the ISA JSON + seek_study_id str: Study ID + + Returns: + str: the study_alias + """ + assay_stream_id = clip_off_prefix(assay_stream["@id"]) + prefix = fetch_assay_comment_by_name(assay_stream, EnaStudy.prefix)["value"] + return prefix + assay_stream_id + + +def study_title(assay_stream: Dict[str, str]) -> str: + return fetch_assay_comment_by_name(assay_stream, "ena_study_title")["value"] + + +def study_type(assay_stream: Dict[str, str]) -> str: + return fetch_assay_comment_by_name(assay_stream, "study_type")["value"] + + +def new_study_type(assay_stream: Dict[str, str]) -> str: + if study_type(assay_stream).lower() != "other": + return None + + return fetch_assay_comment_by_name(assay_stream, "new_study_type")["value"] + + +def study_abstract(assay_stream: Dict[str, str]) -> str: + return fetch_assay_comment_by_name(assay_stream, "ena_study_abstract")["value"] + + +class EnaStudy(IsaBase): + """Generates a Study object, compliant to the requirements of ENA""" + + prefix = "ena_study_alias_prefix" + + def __init__( + self, + alias: str, + title: str, + study_type: str, + study_abstract: str, + new_study_type: Optional[str] = None, + pubmed_id: Optional[str] = None, + ) -> None: + self.alias = alias + self.title = title + self.study_type = study_type + self.new_study_type = new_study_type + self.study_abstract = study_abstract + self.new_study_type = new_study_type + self.pubmed_id = pubmed_id + + def to_dict(self): + return { + "alias": self.alias, + "title": self.title, + "study_type": self.study_type, + "study_abstract": self.study_abstract, + "new_study_type": self.new_study_type, + "pubmed_id": self.pubmed_id, + } + + @classmethod + def from_assay_stream(self, assay_stream: Dict[str, str], pubmed_ids): + """Method that creates an EnaStudy with params from ISA JSON Dictionary + + Args: + isa_json: ISA JSON Dict + + Returns: + EnaStudy: EnaStudy object + """ + return EnaStudy( + alias=study_alias(assay_stream), + title=study_title(assay_stream), + study_type=study_type(assay_stream), + study_abstract=study_abstract(assay_stream), + new_study_type=new_study_type(assay_stream), + pubmed_id=pubmed_ids, + ) + + +def export_studies_to_dataframe(studies: List[EnaStudy]) -> DataFrame: + """Dumps the study objects in a pandas DataFrame + + Returns: + DataFrame: Pandas DataFrame representation of the Studies + """ + return DataFrame.from_dict([study.to_dict() for study in studies]) diff --git a/ena_upload/json_parsing/ena_submission.py b/ena_upload/json_parsing/ena_submission.py new file mode 100644 index 0000000..b848e8e --- /dev/null +++ b/ena_upload/json_parsing/ena_submission.py @@ -0,0 +1,164 @@ +from typing import List, Dict + +from pandas import DataFrame +from ena_upload.json_parsing.characteristic import IsaBase +from ena_upload.json_parsing.ena_experiment import ( + EnaExperiment, + export_experiments_to_dataframe, +) +from ena_upload.json_parsing.ena_run import EnaRun, export_runs_to_dataframe +from ena_upload.json_parsing.ena_sample import EnaSample, export_samples_to_dataframe +from ena_upload.json_parsing.ena_std_lib import ( + fetch_assay_streams, + fetch_study_comment_by_name, + study_publication_ids, +) + +from ena_upload.json_parsing.ena_study import EnaStudy, export_studies_to_dataframe + + +def fetch_assay(assay, required_assays): + for ra in required_assays: + for key, value in ra.items(): + for assay_comment in assay["comments"]: + if assay_comment["name"] == key and assay_comment["value"] == value: + return assay + + +def filter_assays( + isa_json: Dict[str, str], required_assays: List[Dict[str, str]] +) -> Dict[str, str]: + new_studies = [] + new_isa_json = isa_json + studies = new_isa_json.pop("studies") + for study in studies: + assays = study.pop("assays") + filtered_assays = [ + fetch_assay(assay, required_assays) + for assay in assays + if fetch_assay(assay, required_assays) is not None + ] + if len(filtered_assays) > 0: + study["assays"] = filtered_assays + new_studies.append(study) + new_isa_json["studies"] = new_studies + return new_isa_json + + +def validate_isa_json(isa_json: Dict[str, str]): + IsaBase.validate_json(isa_json, EnaSubmission.investigation_schema) + + +class EnaSubmission(IsaBase): + """ + Wrapper objects, holding studies + """ + + investigation_schema = "investigation_schema.json" + + def __init__( + self, + studies: List[EnaStudy] = [], + samples: List[EnaSample] = [], + experiments: List[EnaExperiment] = [], + runs: List[EnaRun] = [], + ) -> None: + super().__init__() + self.studies = studies + self.samples = samples + self.experiments = experiments + self.runs = runs + + def to_dict(self) -> Dict: + return { + "study": [study.to_dict() for study in self.studies], + "sample": [sample.to_dict() for sample in self.samples], + "experiment": [experiment.to_dict() for experiment in self.experiments], + "run": [run.to_dict() for run in self.runs], + } + + + def from_isa_json( + isa_json: Dict[str, str], required_assays: List[Dict[str, str]] + ) -> None: + """Generates an EnaSubmission from a ISA JSON dictionary. + + Args: + isa_json (Dict[str, str]): ISA JSON dictionary + + Returns: + EnaSubmission: resulting EnaSubmission + """ + validate_isa_json(isa_json) + + filtered_isa_json: Dict[str, str] = filter_assays(isa_json, required_assays) + samples = [] + studies = [] + experiments = [] + runs = [] + + assay_stream_names = [a_stream['assay_stream'] for a_stream in required_assays] + + if filtered_isa_json["studies"] == []: + raise ValueError(f"No studies found with isa_assay_stream {assay_stream_names}") + + for study in filtered_isa_json["studies"]: + [samples.append(sample) for sample in EnaSample.from_study_dict(study)] + + pubmed_ids = study_publication_ids( + publication_isa_json=study["publications"] + ) + current_study_protocols_dict = study["protocols"] + assay_streams = fetch_assay_streams(study) + ena_sample_alias_prefix = fetch_study_comment_by_name( + study, EnaSample.prefix + )["value"] + for assay_stream in assay_streams: + study = EnaStudy.from_assay_stream(assay_stream, pubmed_ids) + studies.append(study) + + [ + experiments.append(experiment) + for experiment in EnaExperiment.from_assay_stream( + assay_stream, + study.alias, + ena_sample_alias_prefix, + current_study_protocols_dict, + ) + ] + + [runs.append(run) for run in EnaRun.from_assay_stream(assay_stream)] + + ena_submission = EnaSubmission( + studies=studies, samples=samples, experiments=experiments, runs=runs + ) + ena_submission.sanitize_samples() + return ena_submission + + def sanitize_samples(self): + unused_samples = [] + + for sample in self.samples: + experiment_sample_aliases = [ + experiment.sample_alias for experiment in self.experiments + ] + if sample.alias not in experiment_sample_aliases: + unused_samples.append(sample.alias) + + self.samples = [ + sample for sample in self.samples if sample.alias not in unused_samples + ] + + def generate_dataframes(self) -> Dict[str, DataFrame]: + """Generates all necessary DataFrames for the ENA Upload tool + and returns them in a dictionary. + + Returns: + Dict[str, DataFrame]: resulting dictionary of DataFrames + """ + return { + "study": export_studies_to_dataframe(self.studies).fillna(""), + "sample": export_samples_to_dataframe(self.samples).fillna(""), + "experiment": export_experiments_to_dataframe(self.experiments).fillna(""), + "run": export_runs_to_dataframe(self.runs).fillna(""), + } diff --git a/ena_upload/json_parsing/json_schemas/assay_schema.json b/ena_upload/json_parsing/json_schemas/assay_schema.json new file mode 100644 index 0000000..fd82924 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/assay_schema.json @@ -0,0 +1,88 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Assay JSON Schema", + "name": "Assay JSON Schema", + "description": "JSON Schema describing an Assay", + "@context": { + "@base": "http://purl.org/isaterms/", + "xsd": "http://www.w3.org/2001/XMLSchema#" + }, + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "filename": { + "type": "string" + }, + "measurementType": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "technologyType": { + "type": "object", + "properties": { + "ontologyAnnotation": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + } + }, + "technologyPlatform": { + "type": "string" + }, + "dataFiles": { + "type": "array", + "items": { + "$dynamicRef": "data_schema.json#" + } + }, + "materials": { + "type": "object", + "properties": { + "samples": { + "type": "array", + "items": { + "$dynamicRef": "sample_schema.json#" + } + }, + "otherMaterials": { + "type": "array", + "items": { + "$dynamicRef": "material_schema.json#" + } + } + } + }, + "characteristicCategories": { + "description": "List of all the characteristics categories (or material attributes) defined in the study, used to avoid duplication of their declaration when each material_attribute_value is created. ", + "type": "array", + "items": { + "$dynamicRef": "material_attribute_schema.json#" + } + }, + "unitCategories": { + "description": "List of all the unitsdefined in the study, used to avoid duplication of their declaration when each value is created. ", + "type": "array", + "items": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + }, + "processSequence": { + "type": "array", + "items": { + "$dynamicRef": "process_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false, + "required": [ + "processSequence", + "dataFiles" + ] +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/comment_schema.json b/ena_upload/json_parsing/json_schemas/comment_schema.json new file mode 100644 index 0000000..1ff9c12 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/comment_schema.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA comment schema - it corresponds to ISA Comment[] construct", + "description": "JSON-schema representing a comment in the ISA model", + "type": "object", + "properties": { + "@id": { "type": "string", "format": "uri" }, + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/data_schema.json b/ena_upload/json_parsing/json_schemas/data_schema.json new file mode 100644 index 0000000..3b6b483 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/data_schema.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA data schema", + "description": "JSON-schema representing a data file in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "Raw Data File", + "Derived Data File", + "Image File", + "Acquisition Parameter Data File", + "Derived Spectral Data File", + "Protein Assignment File", + "Raw Spectral Data File", + "Peptide Assignment File", + "Array Data File", + "Derived Array Data File", + "Post Translational Modification Assignment File", + "Derived Array Data Matrix File", + "Free Induction Decay Data File", + "Metabolite Assignment File", + "Array Data Matrix File" + ] + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/factor_schema.json b/ena_upload/json_parsing/json_schemas/factor_schema.json new file mode 100644 index 0000000..c63abe2 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/factor_schema.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA factor schema", + "name": "ISA factor schema", + "description": "JSON-schema representing a factor value in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "factorName": { + "type": "string" + }, + "factorType": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/factor_value_schema.json b/ena_upload/json_parsing/json_schemas/factor_value_schema.json new file mode 100644 index 0000000..ea4ec87 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/factor_value_schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA factor value schema", + "description": "JSON-schema representing a factor value in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "category": { + "$dynamicRef": "factor_schema.json#" + }, + "value": { + "anyOf": [ + { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "unit": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/investigation_schema.json b/ena_upload/json_parsing/json_schemas/investigation_schema.json new file mode 100644 index 0000000..990236f --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/investigation_schema.json @@ -0,0 +1,82 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA investigation schema", + "description": "JSON-schema representing an investigation in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "filename": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "submissionDate": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "publicReleaseDate": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "ontologySourceReferences": { + "type": "array", + "items": { + "$dynamicRef": "ontology_source_reference_schema.json#" + } + }, + "publications": { + "type": "array", + "items": { + "$dynamicRef": "publication_schema.json#" + } + }, + "people": { + "type": "array", + "items": { + "$dynamicRef": "person_schema.json#" + } + }, + "studies": { + "type": "array", + "items": { + "$dynamicRef": "study_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false, + "required": [ + "studies" + ] +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/material_attribute_schema.json b/ena_upload/json_parsing/json_schemas/material_attribute_schema.json new file mode 100644 index 0000000..fbd9fd0 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/material_attribute_schema.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA material attribute schema", + "description": "JSON-schema representing a characteristics category (what appears between the brackets in Charactersitics[]) in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "characteristicType": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/material_attribute_value_schema.json b/ena_upload/json_parsing/json_schemas/material_attribute_value_schema.json new file mode 100644 index 0000000..0cc8956 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/material_attribute_value_schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA material attribute schema", + "description": "JSON-schema representing a material attribute (or characteristic) value in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "category": { + "$dynamicRef": "material_attribute_schema.json#" + }, + "value": { + "anyOf": [ + { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "unit": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/material_schema.json b/ena_upload/json_parsing/json_schemas/material_schema.json new file mode 100644 index 0000000..195ae61 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/material_schema.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA material node schema", + "description": "JSON-schema representing a material node in the ISA model, which is not a source or a sample (as they have specific schemas) - this will correspond to 'Extract Name', 'Labeled Extract Name'", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "Extract Name", + "Labeled Extract Name" + ] + }, + "characteristics": { + "type": "array", + "items": { + "$dynamicRef": "material_attribute_value_schema.json#" + } + }, + "derivesFrom": { + "type": "array", + "items": { + "$dynamicRef": "material_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/ontology_annotation_schema.json b/ena_upload/json_parsing/json_schemas/ontology_annotation_schema.json new file mode 100644 index 0000000..988a6d5 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/ontology_annotation_schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA ontology reference schema", + "name": "ISA ontology reference schema", + "description": "JSON-schema representing an ontology reference or annotation in the ISA model (for fields that are required to be ontology annotations)", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "annotationValue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "termSource": { + "type": "string", + "description": "The abbreviated ontology name. It should correspond to one of the sources as specified in the ontologySourceReference section of the Investigation." + }, + "termAccession": { + "type": "string", + "format": "uri" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/ontology_source_reference_schema.json b/ena_upload/json_parsing/json_schemas/ontology_source_reference_schema.json new file mode 100644 index 0000000..43666aa --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/ontology_source_reference_schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA ontology source reference schema", + "name": "ISA ontology source reference schema", + "description": "JSON-schema representing an ontology reference in the ISA model", + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "file": { + "type": "string" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/organization_schema.json b/ena_upload/json_parsing/json_schemas/organization_schema.json new file mode 100644 index 0000000..e71aab1 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/organization_schema.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title" : "ISA organization schema", + "description" : "JSON-schema representing an organization in the ISA model v1.0", + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/person_schema.json b/ena_upload/json_parsing/json_schemas/person_schema.json new file mode 100644 index 0000000..fd9ad6c --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/person_schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA person schema", + "description": "JSON-schema representing a person in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "lastName": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "midInitials": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "phone": { + "type": "string" + }, + "fax": { + "type": "string" + }, + "address": { + "type": "string" + }, + "affiliation": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/process_parameter_value_schema.json b/ena_upload/json_parsing/json_schemas/process_parameter_value_schema.json new file mode 100644 index 0000000..9d5826d --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/process_parameter_value_schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA process parameter value schema", + "description": "JSON-schema representing a Parameter Value (associated with a Protocol REF) in the ISA model", + "type": "object", + "properties": { + "category": { + "$dynamicRef": "protocol_parameter_schema.json#" + }, + "value": { + "anyOf": [ + { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "unit": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/process_schema.json b/ena_upload/json_parsing/json_schemas/process_schema.json new file mode 100644 index 0000000..92ea112 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/process_schema.json @@ -0,0 +1,87 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA process or protocol application schema, corresponds to 'Protocol REF' columns in the study and assay files", + "description": "JSON-schema representing a protocol application in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "executesProtocol": { + "$dynamicRef": "protocol_schema.json#" + }, + "parameterValues": { + "type": "array", + "items": { + "$dynamicRef": "process_parameter_value_schema.json#" + } + }, + "performer": { + "type": "string" + }, + "date": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "previousProcess": { + "$dynamicRef": "process_schema.json#" + }, + "nextProcess": { + "$dynamicRef": "process_schema.json#" + }, + "inputs": { + "type": "array", + "items": { + "anyOf": [ + { + "$dynamicRef": "source_schema.json#" + }, + { + "$dynamicRef": "sample_schema.json#" + }, + { + "$dynamicRef": "data_schema.json#" + }, + { + "$dynamicRef": "material_schema.json#" + } + ] + } + }, + "outputs": { + "type": "array", + "items": { + "anyOf": [ + { + "$dynamicRef": "sample_schema.json#" + }, + { + "$dynamicRef": "data_schema.json#" + }, + { + "$dynamicRef": "material_schema.json#" + } + ] + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/protocol_parameter_schema.json b/ena_upload/json_parsing/json_schemas/protocol_parameter_schema.json new file mode 100644 index 0000000..30fd5d9 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/protocol_parameter_schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA protocol parameter schema", + "description": "JSON-schema representing a parameter for a protocol (category declared in the investigation file) in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "parameterName": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/protocol_schema.json b/ena_upload/json_parsing/json_schemas/protocol_schema.json new file mode 100644 index 0000000..f859100 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/protocol_schema.json @@ -0,0 +1,62 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA protocol schema", + "name": "ISA protocol schema", + "description": "JSON-schema representing a protocol in the ISA model", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "protocolType": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "description": { + "type": "string" + }, + "uri": { + "type": "string", + "format": "uri" + }, + "version": { + "type": "string" + }, + "parameters": { + "type": "array", + "items": { + "$dynamicRef": "protocol_parameter_schema.json#" + } + }, + "components": { + "type": "array", + "items": { + "type": "object", + "properties": { + "componentName": { + "type": "string" + }, + "componentType": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + } + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/publication_schema.json b/ena_upload/json_parsing/json_schemas/publication_schema.json new file mode 100644 index 0000000..adca8ff --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/publication_schema.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA investigation schema", + "name": "ISA investigation schema", + "description": "JSON-schema representing an investigation in the ISA model", + "type": "object", + "properties": { + "pubMedID": { + "type": "string" + }, + "doi": { + "type": "string" + }, + "authorList": { + "type": "string" + }, + "title": { + "type": "string" + }, + "status": { + "$dynamicRef": "ontology_annotation_schema.json#" + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/sample_schema.json b/ena_upload/json_parsing/json_schemas/sample_schema.json new file mode 100644 index 0000000..2ea8e26 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/sample_schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA sample schema", + "description": "JSON-schema representing a sample in the ISA model. A sample represents a major output resulting from a protocol application other than the special case outputs of Extract or a Labeled Extract.", + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "characteristics": { + "type": "array", + "items": { + "$dynamicRef": "material_attribute_value_schema.json#" + } + }, + "factorValues": { + "type": "array", + "items": { + "$dynamicRef": "factor_value_schema.json#" + } + }, + "derivesFrom": { + "type": "array", + "items": { + "$dynamicRef": "source_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/source_schema.json b/ena_upload/json_parsing/json_schemas/source_schema.json new file mode 100644 index 0000000..631a930 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/source_schema.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "title": "ISA source schema", + "description": "JSON-schema representing a source in the ISA model. Sources are considered as the starting biological material used in a study.", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "name": { + "type": "string" + }, + "characteristics": { + "type": "array", + "items": { + "$dynamicRef": "material_attribute_value_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false +} \ No newline at end of file diff --git a/ena_upload/json_parsing/json_schemas/study_schema.json b/ena_upload/json_parsing/json_schemas/study_schema.json new file mode 100644 index 0000000..95587d1 --- /dev/null +++ b/ena_upload/json_parsing/json_schemas/study_schema.json @@ -0,0 +1,141 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Study JSON Schema", + "description": "JSON Schema describing an Study", + "@context": { + "@base": "http://purl.org/isaterms/", + "xsd": "http://www.w3.org/2001/XMLSchema#" + }, + "type": "object", + "properties": { + "@id": { + "type": "string", + "format": "uri" + }, + "filename": { + "type": "string" + }, + "identifier": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "submissionDate": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "publicReleaseDate": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "maxLength": 0 + } + ] + }, + "publications": { + "type": "array", + "items": { + "$dynamicRef": "publication_schema.json#" + } + }, + "people": { + "type": "array", + "items": { + "$dynamicRef": "person_schema.json#" + } + }, + "studyDesignDescriptors": { + "type": "array", + "items": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + }, + "protocols": { + "type": "array", + "items": { + "$dynamicRef": "protocol_schema.json#" + } + }, + "materials": { + "type": "object", + "properties": { + "sources": { + "type": "array", + "items": { + "$dynamicRef": "source_schema.json#" + } + }, + "samples": { + "type": "array", + "items": { + "$dynamicRef": "sample_schema.json#" + } + }, + "otherMaterials": { + "type": "array", + "items": { + "$dynamicRef": "material_schema.json#" + } + } + } + }, + "processSequence": { + "type": "array", + "items": { + "$dynamicRef": "process_schema.json#" + } + }, + "assays": { + "type": "array", + "items": { + "$dynamicRef": "assay_schema.json#" + } + }, + "factors": { + "type": "array", + "items": { + "$dynamicRef": "factor_schema.json#" + } + }, + "characteristicCategories": { + "description": "List of all the characteristics categories (or material attributes) defined in the study, used to avoid duplication of their declaration when each material_attribute_value is created. ", + "type": "array", + "items": { + "$dynamicRef": "material_attribute_schema.json#" + } + }, + "unitCategories": { + "description": "List of all the unitsdefined in the study, used to avoid duplication of their declaration when each value is created. ", + "type": "array", + "items": { + "$dynamicRef": "ontology_annotation_schema.json#" + } + }, + "comments": { + "type": "array", + "items": { + "$dynamicRef": "comment_schema.json#" + } + } + }, + "additionalProperties": false, + "required": [ + "assays" + ] +} \ No newline at end of file diff --git a/ena_upload/json_parsing/other_material.py b/ena_upload/json_parsing/other_material.py new file mode 100644 index 0000000..e117285 --- /dev/null +++ b/ena_upload/json_parsing/other_material.py @@ -0,0 +1,48 @@ +from ena_upload.json_parsing.characteristic import ( + IsaBase, + OtherMaterialCharacteristic, +) + +from typing import List, Dict + + +class OtherMaterial(IsaBase): + """ + This Class represents an 'other_material' in the ISA JSON and extends the ISA Base class. + """ + + def __init__( + self, + id: int, + name: str, + type: str, + other_material_characteristics: OtherMaterialCharacteristic, + ) -> None: + self.id = id + self.name = name + self.type = type + self.other_material_characteristics = other_material_characteristics + + @classmethod + def from_dict( + cls, dict: Dict[str, str], characteristics_categories: List[Dict[str, str]] + ) -> None: + """Constructs an OtherMaterial, starting from a other_material dictionary + and a list of all other_material_characteristics. + + Args: + dict (Dict[str, str]): other_material dictionary + characteristics_categories (List[Dict[str, str]]): other_material_characteristics dictionary + + Returns: + OtherMaterial: other material object + """ + return OtherMaterial( + id=dict["@id"], + name=dict["name"], + type=dict["type"], + other_material_characteristics=[ + OtherMaterialCharacteristic.from_dict(char, characteristics_categories) + for char in dict["characteristics"] + ], + ) diff --git a/requirements.txt b/requirements.txt index 527c197..ebb373f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,5 @@ pandas>=2.0.3 , <= 3.0.0 pyyaml==5.* requests>=2.31.0 , <= 3.0.0 openpyxl>=3.1.2 , <= 4.0.0 +jsonschema>=4.19.1 +pytest==7.4.* diff --git a/setup.py b/setup.py index 9b5e2b2..50d6430 100644 --- a/setup.py +++ b/setup.py @@ -15,10 +15,10 @@ author="Dilmurat Yusuf", author_email="bjoern.gruening@gmail.com", long_description_content_type='text/markdown', - packages=['ena_upload'], + packages=['ena_upload', 'ena_upload.json_parsing'], package_dir={'ena_upload': 'ena_upload'}, package_data={ - 'ena_upload': ['templates/*.xml', 'templates/*.xsd'] + 'ena_upload': ['templates/*.xml', 'templates/*.xsd', 'json_parsing/json_schemas/*.json'] }, long_description=long_description, url="https://github.com/usegalaxy-eu/ena-upload-cli", diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_data/bad_assay_stream_isa_json.json b/tests/test_data/bad_assay_stream_isa_json.json new file mode 100644 index 0000000..ca2c3fe --- /dev/null +++ b/tests/test_data/bad_assay_stream_isa_json.json @@ -0,0 +1,5067 @@ +{ + "identifier": "", + "title": "Test Investigation original", + "description": "This investigation uses the Standard ENA templates.", + "submissionDate": "", + "publicReleaseDate": "", + "ontologySourceReferences": [], + "filename": "Test Investigation original.txt", + "comments": [ + { + "name": "ISAjson export time", + "value": "2023-10-13T06:24:54Z" + }, + { + "name": "SEEK Project name", + "value": "Test Project ENA upload Tool" + }, + { + "name": "SEEK Project ID", + "value": "http://localhost:3000/single_pages/16" + }, + { + "name": "SEEK Investigation ID", + "value": "19" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studies": [ + { + "identifier": "", + "title": "ENA Study 1", + "description": "This is the first ENA Study.", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "ENA Study 1.txt", + "comments": [ + { + "@id": "#study_comment/19_8_49", + "name": "ena_sample_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#study_comment/19_255b7d70-4bbf-013c-6732-7a163e608de1", + "name": "SEEK Study ID", + "value": "19" + }, + { + "@id": "#study_comment/19_255b8560-4bbf-013c-6733-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-10-09T13:39:46Z" + } + ], + "publications": [ + { + "pubMedID": 5, + "doi": "", + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test publication 1", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/1_27", + "name": "linked_assays", + "value": "[{\"id\":27,\"title\":\"ENA Library construction - Study 1 - Stream 1\"}]" + }, + { + "@id": "#publication_comment/1_7", + "name": "linked_studies", + "value": "[{\"id\":7,\"title\":\"Test Study in Single Page\"}]" + } + ] + }, + { + "pubMedID": 6, + "doi": "", + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test publication 2", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/2_29", + "name": "linked_assays", + "value": "[{\"id\":29,\"title\":\"ENA Library construction - Study 1 - Stream 2\"}]" + }, + { + "@id": "#publication_comment/2_", + "name": "linked_studies", + "value": "[]" + } + ] + } + ], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_411", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_415", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_416", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_417", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_418", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_419", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_420", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/140", + "name": "Source 1", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410" + }, + "value": { + "annotationValue": "Afghanistan", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_411" + }, + "value": { + "annotationValue": "1234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#source/141", + "name": "Source 2", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410" + }, + "value": { + "annotationValue": "Albania", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_411" + }, + "value": { + "annotationValue": "2345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/142", + "name": "Sample 1", + "derivesFrom": [ + { + "@id": "#source/140" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2023", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/143", + "name": "Sample 2", + "derivesFrom": [ + { + "@id": "#source/140" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2022", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/144", + "name": "Sample 3", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2021", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/145", + "name": "Sample 4", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2020", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/196", + "name": "Sample 7", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "This sample is not used in a ENA assay stream", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2016", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/3_19", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "This SOP describes a recipe how to make chocolate chip cookies.", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_27", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/423", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/425", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/427", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/428", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/429", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/430", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/431", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/432", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/433", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_28", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_29", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/448", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/450", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/452", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/453", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/454", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/455", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/456", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/457", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/458", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_30", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/142", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/140" + } + ], + "outputs": [ + { + "@id": "#sample/142" + } + ] + }, + { + "@id": "#process/sample_collection/143", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/140" + } + ], + "outputs": [ + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#process/sample_collection/144", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/141" + } + ], + "outputs": [ + { + "@id": "#sample/144" + } + ] + }, + { + "@id": "#process/sample_collection/145", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/141" + } + ], + "outputs": [ + { + "@id": "#sample/145" + } + ] + }, + { + "@id": "#process/sample_collection/196", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/141" + } + ], + "outputs": [ + { + "@id": "#sample/196" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/27_28", + "filename": "a_ena_stream_1.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/19_27_28_9_50", + "name": "ena_study_title", + "value": "Ena Study 1" + }, + { + "@id": "#assay_comment/19_27_28_9_51", + "name": "study_type", + "value": "Whole Genome Sequencing" + }, + { + "@id": "#assay_comment/19_27_28_9_52", + "name": "new_study_type", + "value": "This should not be submitted!" + }, + { + "@id": "#assay_comment/19_27_28_9_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 1." + }, + { + "@id": "#assay_comment/19_27_28_9_54", + "name": "assay_stream", + "value": "Ena stream 1" + }, + { + "@id": "#assay_comment/19_27_28_9_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/19_27_28_9_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/19_27_28_9_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/27_28", + "name": "linked_assays", + "value": "[{\"id\":27,\"title\":\"ENA Library construction - Study 1 - Stream 1\"},{\"id\":28,\"title\":\"ENA DNA Sequencing - Study 1 - Stream 1\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_424", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_434", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_435", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_436", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/146", + "name": "Library 1", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/142" + } + ] + }, + { + "@id": "#other_material/147", + "name": "Library 2", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#other_material/148", + "name": "Library 3", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/144" + } + ] + }, + { + "@id": "#other_material/149", + "name": "Library 4", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/145" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/146", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RANDOM", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "123", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "454 GS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/146" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/146" + }, + "inputs": [ + { + "@id": "#sample/142" + } + ], + "outputs": [ + { + "@id": "#sample/146" + } + ] + }, + { + "@id": "#process/library_construction/147", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "GENOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WGA", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/147" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/147" + }, + "inputs": [ + { + "@id": "#sample/143" + } + ], + "outputs": [ + { + "@id": "#sample/147" + } + ] + }, + { + "@id": "#process/library_construction/148", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WXS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RANDOM PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "PacBio", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "PacBio RS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/148" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/148" + }, + "inputs": [ + { + "@id": "#sample/144" + } + ], + "outputs": [ + { + "@id": "#sample/148" + } + ] + }, + { + "@id": "#process/library_construction/149", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "RNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RT-PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "456", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "AB 3730xL Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/149" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/149" + }, + "inputs": [ + { + "@id": "#sample/145" + } + ], + "outputs": [ + { + "@id": "#sample/149" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/150", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/150" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/146" + } + ], + "outputs": [ + { + "@id": "#sample/150" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/151", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/151" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/147" + } + ], + "outputs": [ + { + "@id": "#sample/151" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/152", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/152" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/148" + } + ], + "outputs": [ + { + "@id": "#sample/152" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/153", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/153" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/149" + } + ], + "outputs": [ + { + "@id": "#sample/153" + } + ] + } + ], + "dataFiles": [ + { + "@id": "#data_file/150", + "name": "Raw Data File 1", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_1.bam" + }, + { + "name": "file_type", + "value": "bam" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/151", + "name": "Raw Data File 2", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_2.cram" + }, + { + "name": "file_type", + "value": "cram" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/152", + "name": "Raw Data File 3", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_3.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/153", + "name": "Raw Data File 4", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_4.sff" + }, + { + "name": "file_type", + "value": "sff" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + }, + { + "@id": "#assay/29_30", + "filename": "a_ena_stream_2.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/19_29_30_10_50", + "name": "ena_study_title", + "value": "Ena Study 2" + }, + { + "@id": "#assay_comment/19_29_30_10_51", + "name": "study_type", + "value": "Other" + }, + { + "@id": "#assay_comment/19_29_30_10_52", + "name": "new_study_type", + "value": "My special study type" + }, + { + "@id": "#assay_comment/19_29_30_10_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 2." + }, + { + "@id": "#assay_comment/19_29_30_10_54", + "name": "assay_stream", + "value": "Ena stream 2" + }, + { + "@id": "#assay_comment/19_29_30_10_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/19_29_30_10_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/19_29_30_10_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/29_30", + "name": "linked_assays", + "value": "[{\"id\":29,\"title\":\"ENA Library construction - Study 1 - Stream 2\"},{\"id\":30,\"title\":\"ENA DNA Sequencing - Study 1 - Stream 2\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_449", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_459", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_460", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_461", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/154", + "name": "Library 5", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/142" + } + ] + }, + { + "@id": "#other_material/155", + "name": "Library 6", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#other_material/156", + "name": "Library 7", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/144" + } + ] + }, + { + "@id": "#other_material/157", + "name": "Library 8", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/145" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/154", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "ssRNA-seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "HMPR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "123", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "454 GS 20", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/154" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/154" + }, + "inputs": [ + { + "@id": "#sample/142" + } + ], + "outputs": [ + { + "@id": "#sample/154" + } + ] + }, + { + "@id": "#process/library_construction/155", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "GENOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "miRNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "MF", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer II", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/155" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/155" + }, + "inputs": [ + { + "@id": "#sample/143" + } + ], + "outputs": [ + { + "@id": "#sample/155" + } + ] + }, + { + "@id": "#process/library_construction/156", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "ncRNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "size fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "PacBio", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "PacBio RS II", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/156" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/156" + }, + "inputs": [ + { + "@id": "#sample/144" + } + ], + "outputs": [ + { + "@id": "#sample/156" + } + ] + }, + { + "@id": "#process/library_construction/157", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "SYNTHETIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "FL-cDNA", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "repeat fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "456", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "AB 3730 Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/157" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/157" + }, + "inputs": [ + { + "@id": "#sample/145" + } + ], + "outputs": [ + { + "@id": "#sample/157" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/158", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/158" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/154" + } + ], + "outputs": [ + { + "@id": "#sample/158" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/159", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/159" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/155" + } + ], + "outputs": [ + { + "@id": "#sample/159" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/160", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/160" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/156" + } + ], + "outputs": [ + { + "@id": "#sample/160" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/161", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/161" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/157" + } + ], + "outputs": [ + { + "@id": "#sample/161" + } + ] + } + ], + "dataFiles": [ + { + "@id": "#data_file/158", + "name": "Raw Data File 5", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 5.bam" + }, + { + "name": "file_type", + "value": "bam" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/159", + "name": "Raw Data File 6", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 6.cram" + }, + { + "name": "file_type", + "value": "cram" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/160", + "name": "Raw Data File 7", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 7.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/161", + "name": "Raw Data File 8", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 8.sff" + }, + { + "name": "file_type", + "value": "sff" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + }, + { + "identifier": "", + "title": "ENA Study 2", + "description": "ENA Study 2 - description", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "ENA Study 2.txt", + "comments": [ + { + "@id": "#study_comment/20_11_49", + "name": "ena_sample_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#study_comment/20_259d4380-4bbf-013c-6734-7a163e608de1", + "name": "SEEK Study ID", + "value": "20" + }, + { + "@id": "#study_comment/20_259d4a20-4bbf-013c-6735-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-10-09T14:34:40Z" + } + ], + "publications": [ + { + "pubMedID": 7, + "doi": null, + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test Publication 3", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/3_31", + "name": "linked_assays", + "value": "[{\"id\":31,\"title\":\"ENA Library construction - Study 2 - Stream 1\"}]" + }, + { + "@id": "#publication_comment/3_", + "name": "linked_studies", + "value": "[]" + } + ] + } + ], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_473", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_477", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_478", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_479", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_480", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_481", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_482", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/162", + "name": "Source 3", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472" + }, + "value": { + "annotationValue": "Afghanistan", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_473" + }, + "value": { + "annotationValue": "9876", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#source/163", + "name": "Source 4", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472" + }, + "value": { + "annotationValue": "Albania", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_473" + }, + "value": { + "annotationValue": "8765", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/164", + "name": "Sample 5", + "derivesFrom": [ + { + "@id": "#source/162" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_477" + }, + "value": { + "annotationValue": "Sample title 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_478" + }, + "value": { + "annotationValue": "Sample description 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_479" + }, + "value": { + "annotationValue": "2019", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_480" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_481" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_482" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/165", + "name": "Sample 6", + "derivesFrom": [ + { + "@id": "#source/163" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_477" + }, + "value": { + "annotationValue": "Sample title 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_478" + }, + "value": { + "annotationValue": "Sample description 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_479" + }, + "value": { + "annotationValue": "2018", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_480" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_481" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_482" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/3_20", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "This SOP describes a recipe how to make chocolate chip cookies.", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_31", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/485", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/487", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/489", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/490", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/491", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/492", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/493", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/494", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/495", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_32", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/164", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_20" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/162" + } + ], + "outputs": [ + { + "@id": "#sample/164" + } + ] + }, + { + "@id": "#process/sample_collection/165", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_20" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": {}, + "nextProcess": {}, + "inputs": [ + { + "@id": "#source/163" + } + ], + "outputs": [ + { + "@id": "#sample/165" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/31_32", + "filename": "a_ena_stream_3.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/20_31_32_12_50", + "name": "ena_study_title", + "value": "Ena Study 3" + }, + { + "@id": "#assay_comment/20_31_32_12_51", + "name": "study_type", + "value": "Other" + }, + { + "@id": "#assay_comment/20_31_32_12_52", + "name": "new_study_type", + "value": "My other special study type" + }, + { + "@id": "#assay_comment/20_31_32_12_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 3." + }, + { + "@id": "#assay_comment/20_31_32_12_54", + "name": "assay_stream", + "value": "Ena stream 3" + }, + { + "@id": "#assay_comment/20_31_32_12_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/20_31_32_12_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/20_31_32_12_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/31_32", + "name": "linked_assays", + "value": "[{\"id\":31,\"title\":\"ENA Library construction - Study 2 - Stream 1\"},{\"id\":32,\"title\":\"ENA DNA Sequencing - Study 2 - Stream 1\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_486", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_496", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_497", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_498", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/166", + "name": "Library 9", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_486" + }, + "value": { + "annotationValue": "Library title 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_496" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_497" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_498" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/164" + } + ] + }, + { + "@id": "#other_material/167", + "name": "Library 10", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_486" + }, + "value": { + "annotationValue": "Library title 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_496" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_497" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_498" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/165" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/166", + "name": "", + "executesProtocol": { + "@id": "#protocol/_31" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/485" + }, + "value": { + "annotationValue": "My library construction protocol 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/487" + }, + "value": { + "annotationValue": "Library design description 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/489" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/490" + }, + "value": { + "annotationValue": "EST", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/491" + }, + "value": { + "annotationValue": "MNase", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/492" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/493" + }, + "value": { + "annotationValue": "987", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/494" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/495" + }, + "value": { + "annotationValue": "AB 3500xL Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/166" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/166" + }, + "inputs": [ + { + "@id": "#sample/164" + } + ], + "outputs": [ + { + "@id": "#sample/166" + } + ] + }, + { + "@id": "#process/library_construction/167", + "name": "", + "executesProtocol": { + "@id": "#protocol/_31" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/485" + }, + "value": { + "annotationValue": "My library construction protocol 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/487" + }, + "value": { + "annotationValue": "Library design description 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/489" + }, + "value": { + "annotationValue": "SYNTHETIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/490" + }, + "value": { + "annotationValue": "Hi-C", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/491" + }, + "value": { + "annotationValue": "Oligo-dT", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/492" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/493" + }, + "value": { + "annotationValue": "876", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/494" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/495" + }, + "value": { + "annotationValue": "454 GS FLX", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/sample_collection/167" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/167" + }, + "inputs": [ + { + "@id": "#sample/165" + } + ], + "outputs": [ + { + "@id": "#sample/167" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/168", + "name": "", + "executesProtocol": { + "@id": "#protocol/_32" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/168" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/166" + } + ], + "outputs": [ + { + "@id": "#sample/168" + } + ] + }, + { + "@id": "#process/nucleic_acid_sequencing/169", + "name": "", + "executesProtocol": { + "@id": "#protocol/_32" + }, + "parameterValues": [], + "performer": "", + "date": "", + "previousProcess": { + "@id": "#process/library_construction/169" + }, + "nextProcess": {}, + "inputs": [ + { + "@id": "#other_material/167" + } + ], + "outputs": [ + { + "@id": "#sample/169" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + } + ] +} \ No newline at end of file diff --git a/tests/test_data/bad_investigation_isa_json.json b/tests/test_data/bad_investigation_isa_json.json new file mode 100644 index 0000000..528c60a --- /dev/null +++ b/tests/test_data/bad_investigation_isa_json.json @@ -0,0 +1,55 @@ +{ + "identifier": "", + "title": "Test Investigation original", + "description": "This investigation uses the Standard ENA templates.", + "submissionDate": "", + "publicReleaseDate": "", + "ontologySourceReferences": [], + "filename": "Test Investigation original.txt", + "comments": [ + { + "name": "ISAjson export time", + "value": "2023-10-13T06:24:54Z" + }, + { + "name": "SEEK Project name", + "value": "Test Project ENA upload Tool" + }, + { + "name": "SEEK Project ID", + "value": "http://localhost:3000/single_pages/16" + }, + { + "name": "SEEK Investigation ID", + "value": "19" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ] +} \ No newline at end of file diff --git a/tests/test_data/multi_study_multi_assay_stream_investigation_v3.json b/tests/test_data/multi_study_multi_assay_stream_investigation_v3.json new file mode 100644 index 0000000..a39c62b --- /dev/null +++ b/tests/test_data/multi_study_multi_assay_stream_investigation_v3.json @@ -0,0 +1,7449 @@ +{ + "identifier": "", + "title": "Multi study - multi assay stream Investigation", + "description": "Investigation with multiple studies and assay streams.", + "submissionDate": "", + "publicReleaseDate": "", + "ontologySourceReferences": [], + "filename": "Multi study - multi assay stream Investigation.txt", + "comments": [ + { + "name": "ISAjson export time", + "value": "2023-11-08T20:24:38Z" + }, + { + "name": "SEEK Project name", + "value": "Test Project ENA upload Tool" + }, + { + "name": "SEEK Project ID", + "value": "http://localhost:3000/single_pages/16" + }, + { + "name": "SEEK Investigation ID", + "value": "19" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "DP", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.dp@mail.com", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studies": [ + { + "identifier": "", + "title": "ENA Study 1", + "description": "This is the first ENA Study.", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "ENA Study 1.txt", + "comments": [ + { + "@id": "#study_comment/19_8_49", + "name": "ena_sample_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#study_comment/19_c394a480-60a2-013c-9ee3-7a163e608de1", + "name": "SEEK Study ID", + "value": "19" + }, + { + "@id": "#study_comment/19_c394aeb0-60a2-013c-9ee4-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-10-09T13:39:46Z" + } + ], + "publications": [ + { + "pubMedID": 5, + "doi": "", + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test publication 1", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/1_27", + "name": "linked_assays", + "value": "[{\"id\":27,\"title\":\"ENA Library construction - Study 1 - Stream 1\"}]" + }, + { + "@id": "#publication_comment/1_7", + "name": "linked_studies", + "value": "[{\"id\":7,\"title\":\"Test Study in Single Page\"}]" + } + ] + }, + { + "pubMedID": 6, + "doi": "", + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test publication 2", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/2_29", + "name": "linked_assays", + "value": "[{\"id\":29,\"title\":\"ENA Library construction - Study 1 - Stream 2\"}]" + }, + { + "@id": "#publication_comment/2_", + "name": "linked_studies", + "value": "[]" + } + ] + } + ], + "people": [ + { + "@id": "#people/4", + "lastName": "DP", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.dp@mail.com", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_411", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_415", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_416", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_417", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_418", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_419", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_420", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/140", + "name": "Source 1", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410" + }, + "value": { + "annotationValue": "Afghanistan", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_411" + }, + "value": { + "annotationValue": "1234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#source/141", + "name": "Source 2", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_410" + }, + "value": { + "annotationValue": "Albania", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_411" + }, + "value": { + "annotationValue": "2345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/142", + "name": "Sample 1", + "derivesFrom": [ + { + "@id": "#source/140" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2023", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/143", + "name": "Sample 2", + "derivesFrom": [ + { + "@id": "#source/140" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2022", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/144", + "name": "Sample 3", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2021", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/145", + "name": "Sample 4", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "Sample description 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2020", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/196", + "name": "Sample 7", + "derivesFrom": [ + { + "@id": "#source/141" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_415" + }, + "value": { + "annotationValue": "Sample title 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_416" + }, + "value": { + "annotationValue": "This sample is not used in a ENA assay stream", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_417" + }, + "value": { + "annotationValue": "2016", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_418" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_419" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_420" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/3_19", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "This SOP describes a recipe how to make chocolate chip cookies.", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_27", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/423", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/425", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/427", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/428", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/429", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/430", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/431", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/432", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/433", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_28", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_29", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/448", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/450", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/452", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/453", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/454", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/455", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/456", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/457", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/458", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_30", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/142_143", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/140" + } + ], + "outputs": [ + { + "@id": "#sample/142" + }, + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#process/sample_collection/144_145_196", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_19" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/141" + } + ], + "outputs": [ + { + "@id": "#sample/144" + }, + { + "@id": "#sample/145" + }, + { + "@id": "#sample/196" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/27_28", + "filename": "a_ena_stream_1.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/19_27_28_9_50", + "name": "ena_study_title", + "value": "Ena Study 1" + }, + { + "@id": "#assay_comment/19_27_28_9_51", + "name": "study_type", + "value": "Whole Genome Sequencing" + }, + { + "@id": "#assay_comment/19_27_28_9_52", + "name": "new_study_type", + "value": "This should not be submitted!" + }, + { + "@id": "#assay_comment/19_27_28_9_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 1." + }, + { + "@id": "#assay_comment/19_27_28_9_54", + "name": "assay_stream", + "value": "Ena stream 1" + }, + { + "@id": "#assay_comment/19_27_28_9_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/19_27_28_9_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/19_27_28_9_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/27_28", + "name": "linked_assays", + "value": "[{\"id\":27,\"title\":\"ENA Library construction - Study 1 - Stream 1\"},{\"id\":28,\"title\":\"ENA DNA Sequencing - Study 1 - Stream 1\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_424", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_434", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_435", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_436", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/146", + "name": "Library 1", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/142" + } + ] + }, + { + "@id": "#other_material/147", + "name": "Library 2", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#other_material/148", + "name": "Library 3", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/144" + } + ] + }, + { + "@id": "#other_material/149", + "name": "Library 4", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_424" + }, + "value": { + "annotationValue": "Library title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_434" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_435" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_436" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/145" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/146", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RANDOM", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "123", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "454 GS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/142" + } + ], + "outputs": [ + { + "@id": "#other_material/146" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/146" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/146" + } + }, + { + "@id": "#process/library_construction/147", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "GENOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WGA", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/143" + } + ], + "outputs": [ + { + "@id": "#other_material/147" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/147" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/147" + } + }, + { + "@id": "#process/library_construction/148", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "WXS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RANDOM PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "PacBio", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "PacBio RS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/144" + } + ], + "outputs": [ + { + "@id": "#other_material/148" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/148" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/148" + } + }, + { + "@id": "#process/library_construction/149", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/423" + }, + "value": { + "annotationValue": "My special protocol 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/425" + }, + "value": { + "annotationValue": "Library description 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/427" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/428" + }, + "value": { + "annotationValue": "RNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/429" + }, + "value": { + "annotationValue": "RT-PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/430" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/431" + }, + "value": { + "annotationValue": "456", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/432" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/433" + }, + "value": { + "annotationValue": "AB 3730xL Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/145" + } + ], + "outputs": [ + { + "@id": "#other_material/149" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/149" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/149" + } + }, + { + "@id": "#process/nucleic_acid_sequencing/150", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/146" + } + ], + "outputs": [ + { + "@id": "#data_file/150" + } + ], + "previousProcess": { + "@id": "#process/library_construction/150" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/151", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/147" + } + ], + "outputs": [ + { + "@id": "#data_file/151" + } + ], + "previousProcess": { + "@id": "#process/library_construction/151" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/152", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/148" + } + ], + "outputs": [ + { + "@id": "#data_file/152" + } + ], + "previousProcess": { + "@id": "#process/library_construction/152" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/153", + "name": "", + "executesProtocol": { + "@id": "#protocol/_28" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/149" + } + ], + "outputs": [ + { + "@id": "#data_file/153" + } + ], + "previousProcess": { + "@id": "#process/library_construction/153" + }, + "nextProcess": {} + } + ], + "dataFiles": [ + { + "@id": "#data_file/150", + "name": "Raw Data File 1", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_1.bam" + }, + { + "name": "file_type", + "value": "bam" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/151", + "name": "Raw Data File 2", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_2.cram" + }, + { + "name": "file_type", + "value": "cram" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/152", + "name": "Raw Data File 3", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_3.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/153", + "name": "Raw Data File 4", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_4.sff" + }, + { + "name": "file_type", + "value": "sff" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + }, + { + "@id": "#assay/29_30", + "filename": "a_ena_stream_2.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/19_29_30_10_50", + "name": "ena_study_title", + "value": "Ena Study 2" + }, + { + "@id": "#assay_comment/19_29_30_10_51", + "name": "study_type", + "value": "Other" + }, + { + "@id": "#assay_comment/19_29_30_10_52", + "name": "new_study_type", + "value": "My special study type" + }, + { + "@id": "#assay_comment/19_29_30_10_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 2." + }, + { + "@id": "#assay_comment/19_29_30_10_54", + "name": "assay_stream", + "value": "Ena stream 2" + }, + { + "@id": "#assay_comment/19_29_30_10_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/19_29_30_10_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/19_29_30_10_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/29_30", + "name": "linked_assays", + "value": "[{\"id\":29,\"title\":\"ENA Library construction - Study 1 - Stream 2\"},{\"id\":30,\"title\":\"ENA DNA Sequencing - Study 1 - Stream 2\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_449", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_459", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_460", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_461", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/154", + "name": "Library 5", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/142" + } + ] + }, + { + "@id": "#other_material/155", + "name": "Library 6", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/143" + } + ] + }, + { + "@id": "#other_material/156", + "name": "Library 7", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/144" + } + ] + }, + { + "@id": "#other_material/157", + "name": "Library 8", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_449" + }, + "value": { + "annotationValue": "Library title 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_459" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_460" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_461" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/145" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/154", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "ssRNA-seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "HMPR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "123", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "454 GS 20", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/142" + } + ], + "outputs": [ + { + "@id": "#other_material/154" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/154" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/154" + } + }, + { + "@id": "#process/library_construction/155", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "GENOMIC SINGLE CELL", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "miRNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "MF", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "234", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer II", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/143" + } + ], + "outputs": [ + { + "@id": "#other_material/155" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/155" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/155" + } + }, + { + "@id": "#process/library_construction/156", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 7", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "ncRNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "size fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "345", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "PacBio", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "PacBio RS II", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/144" + } + ], + "outputs": [ + { + "@id": "#other_material/156" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/156" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/156" + } + }, + { + "@id": "#process/library_construction/157", + "name": "", + "executesProtocol": { + "@id": "#protocol/_29" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/448" + }, + "value": { + "annotationValue": "My library construction protocol 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/450" + }, + "value": { + "annotationValue": "Library design description 8", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/452" + }, + "value": { + "annotationValue": "SYNTHETIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/453" + }, + "value": { + "annotationValue": "FL-cDNA", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/454" + }, + "value": { + "annotationValue": "repeat fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/455" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/456" + }, + "value": { + "annotationValue": "456", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/457" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/458" + }, + "value": { + "annotationValue": "AB 3730 Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/145" + } + ], + "outputs": [ + { + "@id": "#other_material/157" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/157" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/157" + } + }, + { + "@id": "#process/nucleic_acid_sequencing/158", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/154" + } + ], + "outputs": [ + { + "@id": "#data_file/158" + } + ], + "previousProcess": { + "@id": "#process/library_construction/158" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/159", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/155" + } + ], + "outputs": [ + { + "@id": "#data_file/159" + } + ], + "previousProcess": { + "@id": "#process/library_construction/159" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/160", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/156" + } + ], + "outputs": [ + { + "@id": "#data_file/160" + } + ], + "previousProcess": { + "@id": "#process/library_construction/160" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/161", + "name": "", + "executesProtocol": { + "@id": "#protocol/_30" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/157" + } + ], + "outputs": [ + { + "@id": "#data_file/161" + } + ], + "previousProcess": { + "@id": "#process/library_construction/161" + }, + "nextProcess": {} + } + ], + "dataFiles": [ + { + "@id": "#data_file/158", + "name": "Raw Data File 5", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 5.bam" + }, + { + "name": "file_type", + "value": "bam" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/159", + "name": "Raw Data File 6", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 6.cram" + }, + { + "name": "file_type", + "value": "cram" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/160", + "name": "Raw Data File 7", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 7.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/161", + "name": "Raw Data File 8", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 8.sff" + }, + { + "name": "file_type", + "value": "sff" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + }, + { + "identifier": "", + "title": "ENA Study 2", + "description": "ENA Study 2 - description", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "ENA Study 2.txt", + "comments": [ + { + "@id": "#study_comment/20_11_49", + "name": "ena_sample_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#study_comment/20_c4042c90-60a2-013c-9ee5-7a163e608de1", + "name": "SEEK Study ID", + "value": "20" + }, + { + "@id": "#study_comment/20_c40435b0-60a2-013c-9ee6-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-10-09T14:34:40Z" + } + ], + "publications": [ + { + "pubMedID": 7, + "doi": null, + "status": { + "termAccession": "", + "termSource": "", + "annotationValue": "" + }, + "title": "Test Publication 3", + "author_list": "", + "comments": [ + { + "@id": "#publication_comment/3_31", + "name": "linked_assays", + "value": "[{\"id\":31,\"title\":\"ENA Library construction - Study 2 - Stream 1\"}]" + }, + { + "@id": "#publication_comment/3_", + "name": "linked_studies", + "value": "[]" + } + ] + } + ], + "people": [ + { + "@id": "#people/4", + "lastName": "DP", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.dp@mail.com", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_473", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_477", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_478", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_479", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_480", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_481", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_482", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/162", + "name": "Source 3", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472" + }, + "value": { + "annotationValue": "Afghanistan", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_473" + }, + "value": { + "annotationValue": "9876", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#source/163", + "name": "Source 4", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_472" + }, + "value": { + "annotationValue": "Albania", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_473" + }, + "value": { + "annotationValue": "8765", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/164", + "name": "Sample 5", + "derivesFrom": [ + { + "@id": "#source/162" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_477" + }, + "value": { + "annotationValue": "Sample title 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_478" + }, + "value": { + "annotationValue": "Sample description 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_479" + }, + "value": { + "annotationValue": "2019", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_480" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_481" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_482" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/165", + "name": "Sample 6", + "derivesFrom": [ + { + "@id": "#source/163" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_477" + }, + "value": { + "annotationValue": "Sample title 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_478" + }, + "value": { + "annotationValue": "Sample description 6", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_479" + }, + "value": { + "annotationValue": "2018", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_480" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_481" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_482" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/3_20", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "This SOP describes a recipe how to make chocolate chip cookies.", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_31", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/485", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/487", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/489", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/490", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/491", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/492", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/493", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/494", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/495", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_32", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/164", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_20" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/162" + } + ], + "outputs": [ + { + "@id": "#sample/164" + } + ] + }, + { + "@id": "#process/sample_collection/165", + "name": "", + "executesProtocol": { + "@id": "#protocol/3_20" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/163" + } + ], + "outputs": [ + { + "@id": "#sample/165" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/31_32", + "filename": "a_ena_stream_3.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/20_31_32_12_50", + "name": "ena_study_title", + "value": "Ena Study 3" + }, + { + "@id": "#assay_comment/20_31_32_12_51", + "name": "study_type", + "value": "Other" + }, + { + "@id": "#assay_comment/20_31_32_12_52", + "name": "new_study_type", + "value": "My other special study type" + }, + { + "@id": "#assay_comment/20_31_32_12_53", + "name": "ena_study_abstract", + "value": "This is Ena Study 3." + }, + { + "@id": "#assay_comment/20_31_32_12_54", + "name": "assay_stream", + "value": "Ena stream 3" + }, + { + "@id": "#assay_comment/20_31_32_12_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/20_31_32_12_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/20_31_32_12_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/31_32", + "name": "linked_assays", + "value": "[{\"id\":31,\"title\":\"ENA Library construction - Study 2 - Stream 1\"},{\"id\":32,\"title\":\"ENA DNA Sequencing - Study 2 - Stream 1\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_486", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_496", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_497", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_498", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/166", + "name": "Library 9", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_486" + }, + "value": { + "annotationValue": "Library title 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_496" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_497" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_498" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/164" + } + ] + }, + { + "@id": "#other_material/167", + "name": "Library 10", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_486" + }, + "value": { + "annotationValue": "Library title 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_496" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_497" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_498" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/165" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/166", + "name": "", + "executesProtocol": { + "@id": "#protocol/_31" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/485" + }, + "value": { + "annotationValue": "My library construction protocol 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/487" + }, + "value": { + "annotationValue": "Library design description 9", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/489" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/490" + }, + "value": { + "annotationValue": "EST", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/491" + }, + "value": { + "annotationValue": "MNase", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/492" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/493" + }, + "value": { + "annotationValue": "987", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/494" + }, + "value": { + "annotationValue": "Themo Fisher Scientific", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/495" + }, + "value": { + "annotationValue": "AB 3500xL Genetic Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/164" + } + ], + "outputs": [ + { + "@id": "#other_material/166" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/166" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/166" + } + }, + { + "@id": "#process/library_construction/167", + "name": "", + "executesProtocol": { + "@id": "#protocol/_31" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/485" + }, + "value": { + "annotationValue": "My library construction protocol 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/487" + }, + "value": { + "annotationValue": "Library design description 10", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/489" + }, + "value": { + "annotationValue": "SYNTHETIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/490" + }, + "value": { + "annotationValue": "Hi-C", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/491" + }, + "value": { + "annotationValue": "Oligo-dT", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/492" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/493" + }, + "value": { + "annotationValue": "876", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/494" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/495" + }, + "value": { + "annotationValue": "454 GS FLX", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/165" + } + ], + "outputs": [ + { + "@id": "#other_material/167" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/167" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/167" + } + }, + { + "@id": "#process/nucleic_acid_sequencing/168", + "name": "", + "executesProtocol": { + "@id": "#protocol/_32" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/166" + } + ], + "outputs": [ + { + "@id": "#data_file/168" + } + ], + "previousProcess": { + "@id": "#process/library_construction/168" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/169", + "name": "", + "executesProtocol": { + "@id": "#protocol/_32" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/167" + } + ], + "outputs": [ + { + "@id": "#data_file/169" + } + ], + "previousProcess": { + "@id": "#process/library_construction/169" + }, + "nextProcess": {} + } + ], + "dataFiles": [ + { + "@id": "#data_file/168", + "name": "Raw Data File 9", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 9.sff" + }, + { + "name": "file_type", + "value": "sff" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/169", + "name": "Raw Data File 10", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data file 10.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + }, + { + "identifier": "", + "title": "ENA Study 3", + "description": "", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "ENA Study 3.txt", + "comments": [ + { + "@id": "#study_comment/27_16_49", + "name": "ena_sample_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#study_comment/27_c42d0d90-60a2-013c-9ee7-7a163e608de1", + "name": "SEEK Study ID", + "value": "27" + }, + { + "@id": "#study_comment/27_c42d1570-60a2-013c-9ee8-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-11-08T20:00:56Z" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "DP", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.dp@mail.com", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_737", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_738", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_742", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_743", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_744", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_745", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_746", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_747", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/236", + "name": "Source A", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_737" + }, + "value": { + "annotationValue": "Antarctica", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_738" + }, + "value": { + "annotationValue": "254564", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/237", + "name": "Sample 1", + "derivesFrom": [ + { + "@id": "#source/236" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_742" + }, + "value": { + "annotationValue": "Sample title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_743" + }, + "value": { + "annotationValue": "This is sample 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_744" + }, + "value": { + "annotationValue": "2001", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_745" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_746" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_747" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/238", + "name": "Sample 2", + "derivesFrom": [ + { + "@id": "#source/236" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_742" + }, + "value": { + "annotationValue": "Sample title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_743" + }, + "value": { + "annotationValue": "This is sample 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_744" + }, + "value": { + "annotationValue": "2002", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_745" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_746" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_747" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/239", + "name": "Sample 3", + "derivesFrom": [ + { + "@id": "#source/236" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_742" + }, + "value": { + "annotationValue": "Sample title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_743" + }, + "value": { + "annotationValue": "This is sample 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_744" + }, + "value": { + "annotationValue": "2003", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_745" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_746" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_747" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/240", + "name": "Sample 4", + "derivesFrom": [ + { + "@id": "#source/236" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_742" + }, + "value": { + "annotationValue": "Sample title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_743" + }, + "value": { + "annotationValue": "This is sample 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_744" + }, + "value": { + "annotationValue": "2004", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_745" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_746" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_747" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/_27", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/748", + "parameterName": { + "annotationValue": "Parameter Value 1", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/749", + "parameterName": { + "annotationValue": "Parameter Value 2", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_50", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/752", + "parameterName": { + "annotationValue": "library_construction_protocol", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/754", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/756", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/757", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/758", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/759", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/760", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/761", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/762", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_51", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/237_238", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/748" + }, + "value": { + "annotationValue": "A", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/749" + }, + "value": { + "annotationValue": "C", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/236" + } + ], + "outputs": [ + { + "@id": "#sample/237" + }, + { + "@id": "#sample/238" + } + ] + }, + { + "@id": "#process/sample_collection/239", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/748" + }, + "value": { + "annotationValue": "B", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/749" + }, + "value": { + "annotationValue": "C", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/236" + } + ], + "outputs": [ + { + "@id": "#sample/239" + } + ] + }, + { + "@id": "#process/sample_collection/240", + "name": "", + "executesProtocol": { + "@id": "#protocol/_27" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/748" + }, + "value": { + "annotationValue": "A", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/749" + }, + "value": { + "annotationValue": "D", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/236" + } + ], + "outputs": [ + { + "@id": "#sample/240" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/50_51", + "filename": "a_extra_assay_stream.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/27_50_51_17_50", + "name": "ena_study_title", + "value": "Extra study" + }, + { + "@id": "#assay_comment/27_50_51_17_51", + "name": "study_type", + "value": "Whole Genome Sequencing" + }, + { + "@id": "#assay_comment/27_50_51_17_52", + "name": "new_study_type", + "value": "" + }, + { + "@id": "#assay_comment/27_50_51_17_53", + "name": "ena_study_abstract", + "value": "blablabla" + }, + { + "@id": "#assay_comment/27_50_51_17_54", + "name": "assay_stream", + "value": "Extra assay stream" + }, + { + "@id": "#assay_comment/27_50_51_17_55", + "name": "ena_study_alias_prefix", + "value": "https://datahub.elixir-belgium.org/studies/" + }, + { + "@id": "#assay_comment/27_50_51_17_56", + "name": "ena_experiment_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/27_50_51_17_57", + "name": "ena_run_alias_prefix", + "value": "https://datahub.elixir-belgium.org/samples/" + }, + { + "@id": "#assay_comment/50_51", + "name": "linked_assays", + "value": "[{\"id\":50,\"title\":\"Assay 1\"},{\"id\":51,\"title\":\"Assay 2\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_753", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_763", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_764", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_765", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/241", + "name": "Library 1", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_753" + }, + "value": { + "annotationValue": "Library title 1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_763" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_764" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_765" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/237" + } + ] + }, + { + "@id": "#other_material/242", + "name": "Library 2", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_753" + }, + "value": { + "annotationValue": "Library title 2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_763" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_764" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_765" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/238" + } + ] + }, + { + "@id": "#other_material/243", + "name": "Library 3", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_753" + }, + "value": { + "annotationValue": "Library title 3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_763" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_764" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_765" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/239" + } + ] + }, + { + "@id": "#other_material/244", + "name": "Library 4", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_753" + }, + "value": { + "annotationValue": "Library title 4", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_763" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_764" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_765" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/240" + } + ] + }, + { + "@id": "#other_material/245", + "name": "Library 5", + "type": "library_name", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_753" + }, + "value": { + "annotationValue": "Library title 5", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_763" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_764" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_765" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/240" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/241", + "name": "", + "executesProtocol": { + "@id": "#protocol/_50" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/752" + }, + "value": { + "annotationValue": "My library construction protocol", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/754" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/756" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/757" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/758" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/759" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/760" + }, + "value": { + "annotationValue": "1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/761" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/762" + }, + "value": { + "annotationValue": "454 GS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/237" + } + ], + "outputs": [ + { + "@id": "#other_material/241" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/241" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/241" + } + }, + { + "@id": "#process/library_construction/242", + "name": "", + "executesProtocol": { + "@id": "#protocol/_50" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/752" + }, + "value": { + "annotationValue": "My library construction protocol", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/754" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/756" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/757" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/758" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/759" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/760" + }, + "value": { + "annotationValue": "1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/761" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/762" + }, + "value": { + "annotationValue": "454 GS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/238" + } + ], + "outputs": [ + { + "@id": "#other_material/242" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/242" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/242" + } + }, + { + "@id": "#process/library_construction/243", + "name": "", + "executesProtocol": { + "@id": "#protocol/_50" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/752" + }, + "value": { + "annotationValue": "My library construction protocol", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/754" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/756" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/757" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/758" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/759" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/760" + }, + "value": { + "annotationValue": "1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/761" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/762" + }, + "value": { + "annotationValue": "454 GS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/239" + } + ], + "outputs": [ + { + "@id": "#other_material/243" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/243" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/243" + } + }, + { + "@id": "#process/library_construction/244_245", + "name": "", + "executesProtocol": { + "@id": "#protocol/_50" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/752" + }, + "value": { + "annotationValue": "My library construction protocol", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/754" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/756" + }, + "value": { + "annotationValue": "METAGENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/757" + }, + "value": { + "annotationValue": "WGS", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/758" + }, + "value": { + "annotationValue": "PCR", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/759" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/760" + }, + "value": { + "annotationValue": "1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/761" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/762" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer II", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/240" + } + ], + "outputs": [ + { + "@id": "#other_material/244" + }, + { + "@id": "#other_material/245" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/244" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/244" + } + }, + { + "@id": "#process/nucleic_acid_sequencing/246_247", + "name": "", + "executesProtocol": { + "@id": "#protocol/_51" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/241" + } + ], + "outputs": [ + { + "@id": "#data_file/246" + }, + { + "@id": "#data_file/247" + } + ], + "previousProcess": { + "@id": "#process/library_construction/246" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/248", + "name": "", + "executesProtocol": { + "@id": "#protocol/_51" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/242" + } + ], + "outputs": [ + { + "@id": "#data_file/248" + } + ], + "previousProcess": { + "@id": "#process/library_construction/248" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/249", + "name": "", + "executesProtocol": { + "@id": "#protocol/_51" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/243" + } + ], + "outputs": [ + { + "@id": "#data_file/249" + } + ], + "previousProcess": { + "@id": "#process/library_construction/249" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/250", + "name": "", + "executesProtocol": { + "@id": "#protocol/_51" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/244" + } + ], + "outputs": [ + { + "@id": "#data_file/250" + } + ], + "previousProcess": { + "@id": "#process/library_construction/250" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/251", + "name": "", + "executesProtocol": { + "@id": "#protocol/_51" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/245" + } + ], + "outputs": [ + { + "@id": "#data_file/251" + } + ], + "previousProcess": { + "@id": "#process/library_construction/251" + }, + "nextProcess": {} + } + ], + "dataFiles": [ + { + "@id": "#data_file/246", + "name": "data file 1", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_1_A.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/247", + "name": "data file 2", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_1_B.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/248", + "name": "data file 3", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_3.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/249", + "name": "data file 4", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_4.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/250", + "name": "data file 5", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_5.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + }, + { + "@id": "#data_file/251", + "name": "data file 6", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "data_file_6.fastq" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + } + ] +} \ No newline at end of file diff --git a/tests/test_data/simple_test_case_v2.json b/tests/test_data/simple_test_case_v2.json new file mode 100644 index 0000000..2a1e878 --- /dev/null +++ b/tests/test_data/simple_test_case_v2.json @@ -0,0 +1,1631 @@ +{ + "identifier": "", + "title": "Test Case ENA upload tool", + "description": "This investigation matches the test case of the ENA upload tool", + "submissionDate": "", + "publicReleaseDate": "", + "ontologySourceReferences": [], + "filename": "Test Case ENA upload tool.txt", + "comments": [ + { + "name": "ISAjson export time", + "value": "2023-11-08T16:27:49Z" + }, + { + "name": "SEEK Project name", + "value": "Test Project ENA upload Tool" + }, + { + "name": "SEEK Project ID", + "value": "http://localhost:3000/single_pages/16" + }, + { + "name": "SEEK Investigation ID", + "value": "27" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studies": [ + { + "identifier": "", + "title": "Study - Test Case ENA", + "description": "", + "submissionDate": "", + "publicReleaseDate": "", + "filename": "Study - Test Case ENA.txt", + "comments": [ + { + "@id": "#study_comment/25_13_49", + "name": "ena_sample_alias_prefix", + "value": "sample_alias_" + }, + { + "@id": "#study_comment/25_ae7461a0-6081-013c-9ed3-7a163e608de1", + "name": "SEEK Study ID", + "value": "25" + }, + { + "@id": "#study_comment/25_ae7467e0-6081-013c-9ed4-7a163e608de1", + "name": "SEEK creation date", + "value": "2023-10-20T11:12:23Z" + } + ], + "publications": [], + "people": [ + { + "@id": "#people/4", + "lastName": "De Pelseneer", + "firstName": "Kevin", + "midInitials": "", + "email": "kevin.depelseneer@psb.ugent.be", + "phone": "", + "fax": "", + "address": "", + "affiliation": "", + "roles": [ + { + "termAccession": "", + "termSource": "", + "annotationValue": "" + } + ], + "comments": [ + { + "@id": "", + "value": "", + "name": "" + } + ] + } + ], + "studyDesignDescriptors": [], + "characteristicCategories": [ + { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_657", + "characteristicType": { + "annotationValue": "geographic location (country and/or sea)", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/taxon_id_658", + "characteristicType": { + "annotationValue": "taxon_id", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/title_662", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/sample_description_663", + "characteristicType": { + "annotationValue": "sample_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/collection_date_664", + "characteristicType": { + "annotationValue": "collection date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_665", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_666", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_667", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "sources": [ + { + "@id": "#source/223", + "name": "Source 1", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_657" + }, + "value": { + "annotationValue": "Argentina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_658" + }, + "value": { + "annotationValue": "9606", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#source/226", + "name": "Source 2", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/geographic_location_(country_and/or_sea)_657" + }, + "value": { + "annotationValue": "Belgium", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/taxon_id_658" + }, + "value": { + "annotationValue": "646099", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ], + "samples": [ + { + "@id": "#sample/224", + "name": "Sample 1", + "derivesFrom": [ + { + "@id": "#source/223" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_662" + }, + "value": { + "annotationValue": "sample_title_1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_663" + }, + "value": { + "annotationValue": "sample_description_1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_664" + }, + "value": { + "annotationValue": "2020-10-11", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_665" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_666" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_667" + }, + "value": { + "annotationValue": "add", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + }, + { + "@id": "#sample/225", + "name": "Sample 2", + "derivesFrom": [ + { + "@id": "#source/226" + } + ], + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_662" + }, + "value": { + "annotationValue": "sample_title_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/sample_description_663" + }, + "value": { + "annotationValue": "sample_description_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/collection_date_664" + }, + "value": { + "annotationValue": "2008-01-24", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_665" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_666" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_667" + }, + "value": { + "annotationValue": "add", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "factorValues": [ + { + "category": { + "@id": "" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ] + } + ] + }, + "protocols": [ + { + "@id": "#protocol/_25", + "name": "sample collection", + "protocolType": { + "annotationValue": "sample collection", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_48", + "name": "library construction", + "protocolType": { + "annotationValue": "library construction", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [ + { + "@id": "#parameter/672", + "parameterName": { + "annotationValue": "design_description", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/674", + "parameterName": { + "annotationValue": "library_source", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/675", + "parameterName": { + "annotationValue": "library_strategy", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/676", + "parameterName": { + "annotationValue": "library_selection", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/677", + "parameterName": { + "annotationValue": "library_layout", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/678", + "parameterName": { + "annotationValue": "insert_size", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/679", + "parameterName": { + "annotationValue": "platform", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#parameter/680", + "parameterName": { + "annotationValue": "instrument_model", + "termAccession": "", + "termSource": "" + } + } + ], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + }, + { + "@id": "#protocol/_49", + "name": "nucleic acid sequencing", + "protocolType": { + "annotationValue": "nucleic acid sequencing", + "termAccession": "", + "termSource": "" + }, + "description": "", + "uri": "", + "version": "", + "parameters": [], + "components": [ + { + "componentName": "", + "componentType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + } + } + ] + } + ], + "processSequence": [ + { + "@id": "#process/sample_collection/224", + "name": "", + "executesProtocol": { + "@id": "#protocol/_25" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/223" + } + ], + "outputs": [ + { + "@id": "#sample/224" + } + ] + }, + { + "@id": "#process/sample_collection/225", + "name": "", + "executesProtocol": { + "@id": "#protocol/_25" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#source/226" + } + ], + "outputs": [ + { + "@id": "#sample/225" + } + ] + } + ], + "assays": [ + { + "@id": "#assay/48_49", + "filename": "a_ena_stream_1.txt", + "measurementType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "technologyType": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "comments": [ + { + "@id": "#assay_comment/25_48_49_14_50", + "name": "ena_study_title", + "value": "study_title_1" + }, + { + "@id": "#assay_comment/25_48_49_14_51", + "name": "study_type", + "value": "Transcriptome Analysis" + }, + { + "@id": "#assay_comment/25_48_49_14_52", + "name": "new_study_type", + "value": "This should not be submitted!" + }, + { + "@id": "#assay_comment/25_48_49_14_53", + "name": "ena_study_abstract", + "value": "study_abstract_1" + }, + { + "@id": "#assay_comment/25_48_49_14_54", + "name": "assay_stream", + "value": "Ena stream 1" + }, + { + "@id": "#assay_comment/25_48_49_14_55", + "name": "ena_study_alias_prefix", + "value": "study_alias_" + }, + { + "@id": "#assay_comment/25_48_49_14_56", + "name": "ena_experiment_alias_prefix", + "value": "experiment_alias_" + }, + { + "@id": "#assay_comment/25_48_49_14_57", + "name": "ena_run_alias_prefix", + "value": "run_alias_" + }, + { + "@id": "#assay_comment/48_49", + "name": "linked_assays", + "value": "[{\"id\":48,\"title\":\"Assay 1 - Test case ENA upload tool\"},{\"id\":49,\"title\":\"Assay 2 - Test case ENA upload tool\"}]" + } + ], + "technologyPlatform": "", + "characteristicCategories": [ + { + "@id": "#characteristic_category/title_671", + "characteristicType": { + "annotationValue": "title", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/library_name_673", + "characteristicType": { + "annotationValue": "library_name", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/accession_681", + "characteristicType": { + "annotationValue": "accession", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/submission_date_682", + "characteristicType": { + "annotationValue": "submission date", + "termAccession": "", + "termSource": "" + } + }, + { + "@id": "#characteristic_category/status_683", + "characteristicType": { + "annotationValue": "status", + "termAccession": "", + "termSource": "" + } + } + ], + "materials": { + "samples": [], + "otherMaterials": [ + { + "@id": "#other_material/227", + "name": "library_construction_protocol_1", + "type": "library_construction_protocol", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_671" + }, + "value": { + "annotationValue": "experiment_title_1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/library_name_673" + }, + "value": { + "annotationValue": "library_name_1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_681" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_682" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_683" + }, + "value": { + "annotationValue": "add", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/224" + } + ] + }, + { + "@id": "#other_material/228", + "name": "library_construction_protocol_2", + "type": "library_construction_protocol", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_671" + }, + "value": { + "annotationValue": "experiment_title_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/library_name_673" + }, + "value": { + "annotationValue": "library_name_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_681" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_682" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_683" + }, + "value": { + "annotationValue": "add", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/225" + } + ] + }, + { + "@id": "#other_material/229", + "name": "library_construction_protocol_2", + "type": "library_construction_protocol", + "characteristics": [ + { + "category": { + "@id": "#characteristic_category/title_671" + }, + "value": { + "annotationValue": "experiment_title_3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/library_name_673" + }, + "value": { + "annotationValue": "library_name_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/accession_681" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/submission_date_682" + }, + "value": { + "annotationValue": "", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#characteristic_category/status_683" + }, + "value": { + "annotationValue": "add", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "derivesFrom": [ + { + "@id": "#sample/225" + } + ] + } + ] + }, + "processSequence": [ + { + "@id": "#process/library_construction/227", + "name": "", + "executesProtocol": { + "@id": "#protocol/_48" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/672" + }, + "value": { + "annotationValue": "design_description_1", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/674" + }, + "value": { + "annotationValue": "GENOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/675" + }, + "value": { + "annotationValue": "WGA", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/676" + }, + "value": { + "annotationValue": "RANDOM", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/677" + }, + "value": { + "annotationValue": "PAIRED", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/678" + }, + "value": { + "annotationValue": "250", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/679" + }, + "value": { + "annotationValue": "LS454", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/680" + }, + "value": { + "annotationValue": "454 GS 20", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/224" + } + ], + "outputs": [ + { + "@id": "#other_material/227" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/227" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/227" + } + }, + { + "@id": "#process/library_construction/228", + "name": "", + "executesProtocol": { + "@id": "#protocol/_48" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/672" + }, + "value": { + "annotationValue": "design_description_2", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/674" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/675" + }, + "value": { + "annotationValue": "RNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/676" + }, + "value": { + "annotationValue": "repeat fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/677" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/678" + }, + "value": { + "annotationValue": "None", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/679" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/680" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/225" + } + ], + "outputs": [ + { + "@id": "#other_material/228" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/228" + }, + "nextProcess": {} + }, + { + "@id": "#process/library_construction/229", + "name": "", + "executesProtocol": { + "@id": "#protocol/_48" + }, + "parameterValues": [ + { + "category": { + "@id": "#parameter/672" + }, + "value": { + "annotationValue": "design_description_3", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/674" + }, + "value": { + "annotationValue": "TRANSCRIPTOMIC", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/675" + }, + "value": { + "annotationValue": "RNA-Seq", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/676" + }, + "value": { + "annotationValue": "repeat fractionation", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/677" + }, + "value": { + "annotationValue": "SINGLE", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/678" + }, + "value": { + "annotationValue": "None", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/679" + }, + "value": { + "annotationValue": "Illumina", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + }, + { + "category": { + "@id": "#parameter/680" + }, + "value": { + "annotationValue": "Illumina Genome Analyzer", + "termSource": "", + "termAccession": "" + }, + "unit": { + "termSource": "", + "termAccession": "", + "comments": [] + } + } + ], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#sample/225" + } + ], + "outputs": [ + { + "@id": "#other_material/229" + } + ], + "previousProcess": { + "@id": "#process/sample_collection/229" + }, + "nextProcess": { + "@id": "#process/nucleic_acid_sequencing/229" + } + }, + { + "@id": "#process/nucleic_acid_sequencing/233_234", + "name": "", + "executesProtocol": { + "@id": "#protocol/_49" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/227" + } + ], + "outputs": [ + { + "@id": "#data_file/233" + }, + { + "@id": "#data_file/234" + } + ], + "previousProcess": { + "@id": "#process/library_construction/233" + }, + "nextProcess": {} + }, + { + "@id": "#process/nucleic_acid_sequencing/235", + "name": "", + "executesProtocol": { + "@id": "#protocol/_49" + }, + "parameterValues": [], + "performer": "", + "date": "", + "inputs": [ + { + "@id": "#other_material/229" + } + ], + "outputs": [ + { + "@id": "#data_file/235" + } + ], + "previousProcess": { + "@id": "#process/library_construction/235" + }, + "nextProcess": {} + } + ], + "dataFiles": [ + { + "@id": "#data_file/233", + "name": "RD file 1a", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "ENA_TEST2.R1.fastq.gz" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "add" + } + ] + }, + { + "@id": "#data_file/234", + "name": "RD file 1b", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "ENA_TEST2.R2.fastq.gz" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "add" + } + ] + }, + { + "@id": "#data_file/235", + "name": "RD file 3", + "type": "Raw Data File", + "comments": [ + { + "name": "file_name", + "value": "ENA_TEST1.R1.fastq.gz" + }, + { + "name": "file_type", + "value": "fastq" + }, + { + "name": "file checksum", + "value": "" + }, + { + "name": "accession", + "value": "" + }, + { + "name": "submission date", + "value": "" + }, + { + "name": "status", + "value": "add" + } + ] + } + ], + "unitCategories": [] + } + ], + "factors": [], + "unitCategories": [] + } + ] +} \ No newline at end of file diff --git a/tests/test_ena_objects.py b/tests/test_ena_objects.py new file mode 100644 index 0000000..ed7e23b --- /dev/null +++ b/tests/test_ena_objects.py @@ -0,0 +1,72 @@ +import jsonschema +import pytest +import json + +from ena_upload.json_parsing.characteristic import IsaBase +from ena_upload.json_parsing.ena_submission import EnaSubmission, EnaSample +from ena_upload.json_parsing.ena_std_lib import fetch_assay_streams, study_publication_ids +from ena_upload.json_parsing.ena_study import EnaStudy + +test_isa_jsonfile = open( + "tests/test_data/multi_study_multi_assay_stream_investigation.json" +) +test_isa_json = json.load(test_isa_jsonfile) + + +class TestEnaSubmission: + """Test class for Ena Submission objects""" + + def test_json_schema_validation(self): + bad_investigation_isa_json_file = open( + "tests/test_data/bad_investigation_isa_json.json" + ) + bad_investigation_isa_json = json.load(bad_investigation_isa_json_file) + + with pytest.raises(jsonschema.ValidationError): + IsaBase.validate_json( + bad_investigation_isa_json, EnaSubmission.investigation_schema + ) + + +class TestEnaStudy: + """Test class for Ena Study objects""" + + test_study_dict = { + "alias": "https://datahub.elixir-belgium.org/studies/2", + "title": "ENA Upload Study", + "study_type": "", + "study_abstract": "", + "new_study_type": None, + "pubmed_id": [1], + } + + def test_ena_study_creation(self): + studies = [study for study in test_isa_json["studies"]] + assay_streams = [] + ena_studies = [] + assert len(studies) == 2 + + for study in studies: + pubmed_ids = study_publication_ids(study["publications"]) + print(f"Study pubmed ids: {pubmed_ids}") + for assay_stream in fetch_assay_streams(study): + assay_streams.append(assay_stream) + ena_studies.append(EnaStudy.from_assay_stream(assay_stream, pubmed_ids)) + + assert len(assay_streams) == 3 + + +class TestEnaSample: + study_dict = test_isa_json["studies"][0] + + def test_sample_creation(self): + samples = EnaSample.from_study_dict(self.study_dict) + assert len(samples) == 5 + + +class TestEnaExperiment: + pass + + +class TestEnaRun: + pass