Create ARCs from SOPs
This guide demonstrates how to use ARCtrl to generate an ARC from previously created SOP annotation tables.
Use-case
Section titled Use-caseLabs or facilities frequently combine identical types of studies and assays into new ARCs in a modular fashion. These studies and assays following routine methods are called standard operating procedures (SOPs). Consider a lab that routinely uses mass spectrometry to assess the proteome from various samples. The lab might maintain a pool of SOPs, e.g. for different sample sources (e.g. plants or bacteria) or protein digestion methods (e.g. trypsin or formic acid).
Source
flowchart LR
subgraph ARC3 direction LR subgraph s3[Study: Samples] A31[Bacterial Growth] end subgraph a3[Assay: Proteomics] B31[Protein Digest with Formic Acid] B32[Mass Spec Proteomics] end A31 --> B31 B31 --> B32 end
subgraph ARC2 direction LR subgraph s2[Study: Samples] A21[Bacterial Growth] end subgraph a2[Assay: Proteomics] B21[Protein Digest with Trypsin] B22[Mass Spec Proteomics] end A21 --> B21 B21 --> B22 end
subgraph ARC1 direction LR subgraph s1[Study: Samples] A11[Plant Growth] end subgraph a1[Assay: Proteomics] B11[Protein Digest with Trypsin] B12[Mass Spec Proteomics] end A11 --> B11 B11 --> B12 end
linkStyle default stroke:#2D3E50,stroke-width:3px; classDef default rx:1em,ry:1em;
classDef greyBox fill:#eaecee,color:#2D3E50,rx:1em,ry:1em,width:1100px,font-weight:bold,font-size:16px,margin-top:80px; classDef whiteBox fill:#ffffff,color:#2D3E50,rx:1em,ry:1em,margin-top:80px; classDef mint fill:#62d4c1; classDef yellow fill:#ffd34d; classDef olive fill:#b4ce82; classDef red30 fill:#D46275;
class ARC1,ARC2,ARC3 greyBox; class a1,a2,a3,s1,s2,s3 whiteBox; class A11 olive; class A21,A31 red30; class B11,B21 yellow; class B31 mint;
Study SOP: Plant Growth
Section titled Study SOP: Plant GrowthThe SOP holds the following template table to be filled with the information about how the plant samples were grown:
Input [Source Name] | Protocol REF | Characteristic [organism] | Characteristic [Tissue] | Characteristic [Growth Medium] | Characteristic [ecotype] | Parameter [Light intensity] | Factor [temperature] | Parameter [growth time] | Output [Sample Name] |
---|---|---|---|---|---|---|---|---|---|
The SOP in json format looks like this
{ "Identifier": "AthalianaColdStress", "Description": "Cold acclimation analysis of Arabidopsis leaf tissue", "Tables": [ { "name": "plant-growth", "header": [ { "headertype": "Input", "values": [ "Source Name" ] }, { "headertype": "ProtocolREF", "values": [] }, { "headertype": "Characteristic", "values": [ { "annotationValue": "organism" } ] }, { "headertype": "Characteristic", "values": [ { "annotationValue": "Tissue", "termSource": "NCIT", "termAccession": "NCIT:C12801" } ] }, { "headertype": "Characteristic", "values": [ { "annotationValue": "Growth Medium", "termSource": "NCIT", "termAccession": "NCIT:C85504" } ] }, { "headertype": "Characteristic", "values": [ { "annotationValue": "ecotype", "termSource": "EFO", "termAccession": "EFO:0000434" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "Light intensity", "termSource": "MIAPPE", "termAccession": "MIAPPE:0101" } ] }, { "headertype": "Factor", "values": [ { "annotationValue": "temperature", "termSource": "EFO", "termAccession": "EFO:0001702" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "growth time", "termSource": "DPBO", "termAccession": "DPBO:0000100" } ] }, { "headertype": "Output", "values": [ "Sample Name" ] } ] } ]}
Assay SOP: Protein Digest with Trypsin
Section titled Assay SOP: Protein Digest with TrypsinThis SOP contains the already filled out annotation table with the information about the SOP to trypsin-digest extracted proteins.
Input [Sample Name] | Parameter [sample mass] | Parameter [Protein Precipitation] | Parameter [alkylating agent] | Parameter [reducing agent] | Parameter [cleavage agent name] | Parameter [Tryptic Digestion] | Parameter [sample preparation] | Output [Sample Name] |
---|---|---|---|---|---|---|---|---|
10 | acetone | Chloroacetamide | TCEP | Trypsin | in-solution digestion | reversed-phase solid-phase extraction |
The SOP in json format looks like this
{ "Identifier": "Proteomics_MS", "MeasurementType": { "annotationValue": "Proteomics_MS", "termSource": "MS", "termAccession": "https://www.ebi.ac.uk/ols4/ontologies/ms/classes/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FMS_1003348" }, "TechnologyType": { "annotationValue": "Mass Spectrometry", "termSource": "NCIT", "termAccession": "https://bioregistry.io/NCIT:C17156" }, "TechnologyPlatform": { "annotationValue": "timsTOF Pro 2", "termSource": "MS", "termAccession": "MS:1003230" }, "Tables": [ { "name": "ProtDigest-Trypsin", "header": [ { "headertype": "Input", "values": [ "Sample Name" ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "sample mass", "termSource": "MS", "termAccession": "MS:1000004" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "Protein Precipitation", "termSource": "NCIT", "termAccession": "NCIT:C113065" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "alkylating agent", "termSource": "CHEBI", "termAccession": "CHEBI:22333" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "reducing agent", "termSource": "CHEBI", "termAccession": "CHEBI:63247" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "cleavage agent name", "termSource": "MS", "termAccession": "MS:1001045" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "Tryptic Digestion", "termSource": "NCIT", "termAccession": "NCIT:C68835" } ] }, { "headertype": "Parameter", "values": [ { "annotationValue": "sample preparation", "termSource": "MS", "termAccession": "MS:1000831" } ] }, { "headertype": "Output", "values": [ "Sample Name" ] } ], "values": [ [ [ 0, 0 ], { "celltype": "FreeText", "values": [ "" ] } ], [ [ 1, 0 ], { "celltype": "Unitized", "values": [ "10", { "annotationValue": "microgram", "termSource": "UO", "termAccession": "https://bioregistry.io/UO:0000023" } ] } ], [ [ 2, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "acetone", "termSource": "CHEBI", "termAccession": "https://bioregistry.io/CHEBI:15347" } ] } ], [ [ 3, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "Chloroacetamide", "termSource": "NCIT", "termAccession": "https://bioregistry.io/NCIT:C161899" } ] } ], [ [ 4, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "TCEP", "termSource": "CHEBI", "termAccession": "https://bioregistry.io/CHEBI:63213" } ] } ], [ [ 5, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "Trypsin", "termSource": "MS", "termAccession": "https://www.ebi.ac.uk/ols4/ontologies/ms/classes/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FMS_1001251" } ] } ], [ [ 6, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "in-solution digestion", "termSource": "MS", "termAccession": "https://www.ebi.ac.uk/ols4/ontologies/ms/classes/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FMS_1002986" } ] } ], [ [ 7, 0 ], { "celltype": "Term", "values": [ { "annotationValue": "reversed-phase solid-phase extraction", "termSource": "CHMO", "termAccession": "http://purl.obolibrary.org/obo/CHMO_0001585" } ] } ], [ [ 8, 0 ], { "celltype": "FreeText", "values": [ "" ] } ] ] } ]}
Example script
Section titled Example scriptThe following script is split in two parts.
Define inputs and outputs
Section titled Define inputs and outputsThe first part includes the variable information, that needs to be adapted per ARC as highlighted, i.e.
- the path to the ARC (
arcPath
) - the
persons
to be added - the ARC’s
title
andidentifier
- the paths to existing SOPs (
studyJsonPaths
andassayJsonPaths
)
In this example, the script uses only the two SOPs (“PlantGrowth” and “ProtDigest-Trypsin”) introduced above, and it adds two contact persons. Both of these variables could be extended to add more SOPs or more persons one per line, respectively.
#r "nuget: ARCtrl"
open ARCtrlopen ARCtrl.Jsonopen ARCtrl.Helper
// Path where the ARC should be createdlet arcPath = "template-arc"
// Contactslet persons = ResizeArray[ Person(firstName = "Viola", lastName = "Canina"); Person(firstName = "Jasmine", lastName = "Beetroot", midInitials = "L"); ]
// Investigationlet inv = ArcInvestigation( identifier = "AthalianaColdStressSugar", title = "Arabidopsis thaliana cold acclimation", contacts = persons )
// Paths to study SOP(s) of type ARCtrl.jsonlet studyJsonPaths = [ @"PlantGrowth.arctrl.json" ]
// Paths to assay SOP(s) of type ARCtrl.jsonlet assayJsonPaths = [ @"ProtDigest-Trypsin.arctrl.json" ]
Combine and write the ARC
Section titled Combine and write the ARCThe second part of the script creates the ARC based on the provided information and SOPs.
// Add study
let addStudyFromJson (studyJsonPath : string) =
let studyJsonString = System.IO.File.ReadAllText(studyJsonPath) let studyFromJson = ArcStudy.fromJsonString(studyJsonString)
inv.AddStudy studyFromJson
studyJsonPaths|> Seq.iter addStudyFromJson
// Add assay
let addAssayFromJson (assayJsonPath : string) =
let assayJsonString = System.IO.File.ReadAllText(assayJsonPath) let assayFromJson = ArcAssay.fromJsonString(assayJsonString)
inv.AddAssay assayFromJson
assayJsonPaths|> Seq.iter addAssayFromJson
// Create ARC
let arc = ARC( isa = inv )
// Write ARC to path
arc.Write arcPath
Download example
Section titled Download exampleYou can download the example script and SOPs here to adapt them to your needs.