diff --git a/main.html b/main.html index 3c031dd0..f8652518 100644 --- a/main.html +++ b/main.html @@ -4,7 +4,7 @@ covid-19 Metadata Template - +
@@ -39,7 +39,7 @@ Show valid rows Show invalid rows Jump to... - Version 0.11.0 + Version 0.13.0
@@ -48,8 +48,8 @@ @@ -182,6 +182,7 @@ + @@ -449,7 +450,8 @@
Are you ready to harmonize your contextual data?
- - + + + diff --git a/script/export.js b/script/export.js new file mode 100644 index 00000000..ae108b2b --- /dev/null +++ b/script/export.js @@ -0,0 +1,290 @@ + + +/** + * Download secondary headers and grid data. + * @param {String} baseName Basename of downloaded file. + * @param {Object} hot Handonstable grid instance. + * @param {Object} data See `data.js`. + * @param {Object} xlsx SheetJS variable. + */ +const exportIRIDA = (baseName, hot, data, xlsx) => { + // Create an export table with template's headers (2nd row) and remaining rows of data + const matrix = [getFlatHeaders(data)[1], ...getTrimmedData(hot)]; + runBehindLoadingScreen(exportFile, [matrix, baseName, 'xls', xlsx]); +}; + +/** + * Download grid mapped to GISAID format. + * @param {String} baseName Basename of downloaded file. + * @param {Object} hot Handonstable grid instance. + * @param {Object} data See `data.js`. + * @param {Object} xlsx SheetJS variable. + */ +const exportGISAID = (baseName, hot, data, xlsx) => { + // TODO: As we add more formats, we should add such headers to 'data.js' + // ExportHeaders is an array because it can happen, as below with 'Address', + // that a column name appears two or more times. + const ExportHeaders = [ + 'Submitter', + 'FASTA filename', + 'Virus name', + 'Type', + 'Passage details/history', + 'Collection date', + 'Location', + 'Additional location information', + 'Host', + 'Additional host information', + 'Gender', + 'Patient age', + 'Patient status', + 'Specimen source', + 'Outbreak', + 'Last vaccinated', + 'Treatment', + 'Sequencing technology', + 'Assembly method', + 'Coverage', + 'Originating lab', + 'Address', + 'Sample ID given by the sample provider', + 'Submitting lab', + 'Address', + 'Sample ID given by the submitting laboratory', + 'Authors' + ]; + + // Create a map of Export format headers to template's fields. It is a + // one-to-many relationship, with indices representing the maps. + const headerMap = {}; + for (const [HeaderIndex, _] of ExportHeaders.entries()) { + headerMap[HeaderIndex] = []; + } + const fields = getFields(data); + for (const [fieldIndex, field] of fields.entries()) { + if (field.GISAID) { + let HeaderIndex = ExportHeaders.indexOf(field.GISAID); + // GISAID has two fields called 'Address' + if (field.GISAID === 'Address' && field.fieldName === 'sequence submitter contact address') { + // This locates 2nd occurance of 'Address' field in ExportHeaders + HeaderIndex = ExportHeaders.indexOf(field.GISAID, HeaderIndex+1); + } + headerMap[HeaderIndex].push(fieldIndex); + } + } + + // Create an export table with target format's headers and remaining rows of data + const matrix = [ExportHeaders]; + const unmappedMatrix = getTrimmedData(hot); + for (const unmappedRow of unmappedMatrix) { + const mappedRow = []; + for (const [HeaderIndex, HeaderName] of ExportHeaders.entries()) { + if (HeaderName === 'Type') { + // Assign constant value and do next field. + mappedRow.push('betacoronavirus'); + continue; + } + + const mappedCell = []; + for (const mappedFieldIndex of headerMap[HeaderIndex]) { + let mappedCellVal = unmappedRow[mappedFieldIndex]; + if (!mappedCellVal) continue; + + // Only map specimen processing if it is "virus passage" + const field = fields[mappedFieldIndex] + const standardizedCellVal = mappedCellVal.toLowerCase().trim(); + + if (field.fieldName === 'specimen processing') { + // Specimen processing is a multi-select field + const standardizedCellValArr = standardizedCellVal.split(';'); + if (!standardizedCellValArr.includes('virus passage')) continue; + // We only want to map "virus passage" + mappedCellVal = 'Virus passage'; + } + + // All null values should be converted to "Unknown" + if (field.dataStatus) { + const standardizedDataStatus = + field.dataStatus.map(val => val.toLowerCase().trim()); + if (standardizedDataStatus.includes(standardizedCellVal)) { + // Don't push "Unknown" to fields with multi, concat mapped values + if (headerMap[HeaderIndex].length > 1) continue; + + mappedCellVal = 'Unknown'; + } + } + + if (field.fieldName === 'passage number') { + mappedCellVal = 'passage number ' + mappedCellVal; + } + + mappedCell.push(mappedCellVal); + } + mappedRow.push(mappedCell.join(';')); + } + matrix.push(mappedRow); + } + + runBehindLoadingScreen(exportFile, [matrix, baseName, 'xls', xlsx]); +}; + +/** + * Download grid mapped to CNPHI LaSER format. + * @param {String} baseName Basename of downloaded file. + * @param {Object} hot Handonstable grid instance. + * @param {Object} data See `data.js`. + * @param {Object} xlsx SheetJS variable. + */ +const exportLASER = (baseName, hot, data, xlsx) => { + const ExportHeaders = [ + 'Primary Specimen Identification Number', + 'Related Specimen ID|Related Specimen Relationship Type', + 'BioProject Accession', + 'BioSample Accession', + 'SRA Accession', + 'Patient Sample Collected Date', + 'Patient Country', + 'Patient Province', + 'GISAID Virus Name', + 'Pathogen', + 'Reason for Sampling', + 'Test Requested', + 'Specimen Type', + 'Anatomical Material', + 'Anatomical Site', + 'Body Product', + 'Environmental Material', + 'Environmental Site', + 'Specimen Collection Matrix', + 'Collection Method', + 'Animal Type', + 'Specimen Source', + 'Host Health State', + 'Host Health State Details', + 'Host Disease', + 'Patient Age', + 'Host Age Category', + 'Patient Sex', + 'Symptoms Onset Date', + 'Symptoms', + 'Patient Symptomatic', + 'Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date', + 'Patient Travelled', + 'Exposure Event', + 'Sequencing protocol name', + 'Gene Target #1', + 'Gene Target #1 CT Value', + 'Gene Target #2', + 'Gene Target #2 CT Value' + ]; + + // Create a map of Export format headers to template's fields. It is a + // one-to-many relationship, with indices representing the maps. + const headerMap = {}; + const fieldMap = {}; + for (const [HeaderIndex, _] of ExportHeaders.entries()) { + headerMap[HeaderIndex] = []; + } + const fields = getFields(data); + for (const [fieldIndex, field] of fields.entries()) { + fieldMap[field.fieldName] = fieldIndex; + if (field.CNPHI) { + const HeaderIndex = ExportHeaders.indexOf(field.CNPHI); + if (HeaderIndex > -1) + headerMap[HeaderIndex].push(fieldIndex); + else { + const msg = 'A template CNPHI field was not found in CNPHI export header list:' + field.CNPHI; + console.log (msg); + $('#export-to-err-msg').text(msg); + } + + } + } + + // Create an export table with target format's headers and remaining rows of data + const matrix = [ExportHeaders]; + const symptoms_index = ExportHeaders.indexOf('Symptoms'); + const travel_index = ExportHeaders.indexOf('Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date'); + + for (const unmappedRow of getTrimmedData(hot)) { + const mappedRow = []; + for (const [HeaderIndex, HeaderName] of ExportHeaders.entries()) { + + if (HeaderName === 'Test Requested') { + // Assign constant value. + mappedRow.push('CanCOGeN Next Generation Sequencing (NGS)'); + continue; + } + + if (HeaderName === 'Pathogen') { + // Assign constant value. + mappedRow.push('SARS-CoV-2'); + continue; + } + + // yes/no calculated field + if (HeaderName === 'Patient Symptomatic') { + // Note: if this field eventually gets null values, then must do + // field.dataStatus check. + mappedRow.push( mappedRow[symptoms_index] ? 'yes' : 'no' ); + continue; + } + + // yes/no calculated field + if (HeaderName === 'Patient Travelled') { + // as above for field.dataStatus check. + mappedRow.push( mappedRow[travel_index].replace(/\|/g,'').length > 0 ? 'yes' : 'no' ); + continue; + } + + // A complicated rule about what is stored in 'Specimen Source' + if (HeaderName === 'Specimen Source') { + var cellValue = ''; + for (const FieldName of [ + 'host (scientific name)', + 'host (common name)', + 'environmental material', + 'environmental site'] + ) { + const field = fields[fieldMap[FieldName]]; + const value = unmappedRow[fieldMap[FieldName]]; + + // Ignore all null value types + if (!value || field.dataStatus.indexOf(value) >= 0) { + continue; + } + if (FieldName === 'host (scientific name)' || FieldName === 'host (common name)') { + if (value === 'Homo sapiens' || value === 'Human') + cellValue = 'Human' + else + cellValue = 'Animal' + break; + } + if (FieldName === 'environmental material' || FieldName === 'environmental site') { + cellValue = 'Environmental' + break; + } + } + mappedRow.push(cellValue); + continue; + } + // Loop through all template fields that this field is mapped to, and + // create a bar-separated list of values. EMPTY VALUES MUST STILL have + // bar placeholder. + const mappedCell = []; + for (const mappedFieldIndex of headerMap[HeaderIndex]) { + let mappedCellVal = unmappedRow[mappedFieldIndex]; + + if (!mappedCellVal) + mappedCellVal = ''; + + mappedCell.push(mappedCellVal); + } + mappedRow.push(mappedCell.join('|')); + } + matrix.push(mappedRow); + } + + runBehindLoadingScreen(exportFile, [matrix, baseName, 'xls', xlsx]); +}; + diff --git a/main.js b/script/main.js similarity index 85% rename from main.js rename to script/main.js index 967d609e..76a4f20a 100644 --- a/main.js +++ b/script/main.js @@ -146,11 +146,18 @@ const createHot = (data) => { licenseKey: 'non-commercial-and-evaluation', beforeChange: function(changes, source) { if (!changes) return; + + // When a change in one field triggers a change in another field. + var triggered_changes = []; + for (const change of changes) { - if (!change[3]) continue; - const col = change[1]; - change[3] = changeCase(change[3], fields[col].capitalize); + const column = change[1]; + // Check field change rules + fieldChangeRules(change, fields, triggered_changes); } + // Add any indirect field changes onto end of existing changes. + if (triggered_changes) + changes.push(...triggered_changes); }, afterRender: () => { $('#header-row').css('visibility', 'visible'); @@ -180,6 +187,7 @@ const createHot = (data) => { return enableMultiSelection(hot, data); }; + /** * Create a matrix containing the nested headers supplied to Handsontable. * These headers are HTML strings, with useful selectors for the primary and @@ -231,19 +239,30 @@ const getColumns = (data) => { for (const field of getFields(data)) { const col = {}; if (field.requirement) col.requirement = field.requirement; - if (field.datatype === 'xs:date') { - col.type = 'date'; - col.dateFormat = 'YYYY-MM-DD'; - } else if (field.datatype === 'select') { - col.type = 'autocomplete'; - col.source = field.flatVocabulary; - if (field.dataStatus) col.source.push(...field.dataStatus); - col.trimDropdown = false; - } else if (field.datatype === 'multiple') { - // TODO: we need to find a better way to enable multi-selection - col.editor = 'text'; - col.renderer = 'autocomplete'; - col.source = field.flatVocabulary; + switch (field.datatype) { + case 'xs:date': + col.type = 'date'; + col.dateFormat = 'YYYY-MM-DD'; + break; + case 'select': + col.type = 'autocomplete'; + col.source = field.flatVocabulary; + if (field.dataStatus) col.source.push(...field.dataStatus); + col.trimDropdown = false; + break; + case 'xs:nonNegativeInteger': + case 'xs:decimal': + if (field.dataStatus) { + col.type = 'autocomplete'; + col.source = field.dataStatus; + } + break; + case 'multiple': + // TODO: we need to find a better way to enable multi-selection + col.editor = 'text'; + col.renderer = 'autocomplete'; + col.source = field.flatVocabulary; + break; } ret.push(col); } @@ -383,114 +402,7 @@ const exportFile = (matrix, baseName, ext, xlsx) => { } }; -/** - * Download secondary headers and grid data. - * @param {String} baseName Basename of downloaded file. - * @param {Object} hot Handonstable grid instance. - * @param {Object} data See `data.js`. - * @param {Object} xlsx SheetJS variable. - */ -const exportIRIDA = (baseName, hot, data, xlsx) => { - const matrix = [getFlatHeaders(data)[1], ...getTrimmedData(hot)]; - runBehindLoadingScreen(exportFile, [matrix, baseName, 'xls', xlsx]); -}; - -/** - * Download grid mapped to GISAID format. - * @param {String} baseName Basename of downloaded file. - * @param {Object} hot Handonstable grid instance. - * @param {Object} data See `data.js`. - * @param {Object} xlsx SheetJS variable. - */ -const exportGISAID = (baseName, hot, data, xlsx) => { - // TODO: As we add more formats, we should add such headers to `data.js` - const GISAIDHeaders = [ - 'Submitter', 'FASTA filename', 'Virus name', 'Type', - 'Passage details/history', 'Collection date', 'Location', - 'Additional location information', 'Host', 'Additional host information', - 'Gender', 'Patient age', 'Patient status', 'Specimen source', 'Outbreak', - 'Last vaccinated', 'Treatment', 'Sequencing technology', 'Assembly method', - 'Coverage', 'Originating lab', 'Address', - 'Sample ID given by the sample provider', 'Submitting lab', 'Address', - 'Sample ID given by the submitting laboratory', 'Authors', - ]; - - // Create a map of GISAID headers to our fields. It is a one-to-many - // relationship, with indices representing the maps. - const headerMap = {}; - for (const [GISAIDIndex, _] of GISAIDHeaders.entries()) { - headerMap[GISAIDIndex] = []; - } - const fields = getFields(data); - for (const [fieldIndex, field] of fields.entries()) { - if (field.GISAID) { - let GISAIDIndex = GISAIDHeaders.indexOf(field.GISAID); - // GISAID has two fields called 'Address' - const secondAddress = 'sequence submitter contact address'; - if (field.GISAID === 'Address' && field.fieldName === secondAddress) { - GISAIDIndex = GISAIDHeaders.indexOf(field.GISAID, GISAIDIndex+1); - } - headerMap[GISAIDIndex].push(fieldIndex); - } - } - - // Construct GISAID's matrix - const mappedMatrix = [GISAIDHeaders]; - const unmappedMatrix = getTrimmedData(hot); - for (const unmappedRow of unmappedMatrix) { - const mappedRow = []; - for (const [GISAIDIndex, GISAIDHeader] of GISAIDHeaders.entries()) { - if (GISAIDHeader === 'Type') { - mappedRow.push('betacoronavirus'); - continue; - } - - const mappedCell = []; - for (const mappedFieldIndex of headerMap[GISAIDIndex]) { - let mappedCellVal = unmappedRow[mappedFieldIndex]; - if (!mappedCellVal) continue; - - // Only map specimen processing if it is "virus passage" - const field = fields[mappedFieldIndex] - const standardizedCellVal = mappedCellVal.toLowerCase().trim(); - if (field.fieldName === 'specimen processing') { - const standardizedVirusPassage = 'virus passage'.toLowerCase().trim(); - // Specimen processing is a multi-select field - const standardizedCellValArr = standardizedCellVal.split(';'); - - if (!standardizedCellValArr.includes(standardizedVirusPassage)) { - continue; - } else { - // We only want to map "virus passage" - mappedCellVal = 'Virus passage'; - } - } - - // All null values sould be converted to "Unknown" - if (field.dataStatus) { - const standardizedDataStatus = - field.dataStatus.map(val => val.toLowerCase().trim()); - if (standardizedDataStatus.includes(standardizedCellVal)) { - // Don't push "Unknown" to fields with multi, concat mapped values - if (headerMap[GISAIDIndex].length > 1) continue; - mappedCellVal = 'Unknown'; - } - } - - if (field.fieldName === 'passage number') { - mappedCellVal = 'passage number ' + mappedCellVal; - } - - mappedCell.push(mappedCellVal); - } - mappedRow.push(mappedCell.join(';')); - } - mappedMatrix.push(mappedRow); - } - - runBehindLoadingScreen(exportFile, [mappedMatrix, baseName, 'xls', xlsx]); -}; /** * Open file specified by user. @@ -515,7 +427,7 @@ const openFile = (file, hot, data, xlsx) => { const params = [worksheet, {header: 1, raw: false, range: 0}]; const matrix = (xlsx.utils.sheet_to_json(...params)); if (compareMatrixHeadersToGrid(matrix, data)) { - hot.loadData(changeCases(matrix.slice(2), hot, data)); + hot.loadData(matrixFieldChangeRules(matrix.slice(2), hot, data)); } else { launchSpecifyHeadersModal(matrix, hot, data); } @@ -547,7 +459,7 @@ const launchSpecifyHeadersModal = (matrix, hot, data) => { mapMatrixToGrid(matrix, specifiedHeaderRow-1, data); $('#specify-headers-modal').modal('hide'); runBehindLoadingScreen(() => { - hot.loadData(changeCases(mappedMatrixObj.matrix.slice(2), hot, data)); + hot.loadData(matrixFieldChangeRules(mappedMatrixObj.matrix.slice(2), hot, data)); if (mappedMatrixObj.unmappedHeaders.length) { alertOfUnmappedHeaders(mappedMatrixObj.unmappedHeaders); } @@ -664,7 +576,7 @@ const mapMatrixToGrid = (matrix, matrixHeaderRow, data) => { }; /** - * Modify matrix data for grid according to specified cases. + * Modify matrix data for grid according to specified rules. * This is useful when calling `hot.loadData`, as cell changes from said method * are not recognized by `afterChange`. * @param {Array>} matrix Data meant for grid. @@ -672,19 +584,110 @@ const mapMatrixToGrid = (matrix, matrixHeaderRow, data) => { * @param {Object} data See `data.js`. * @return {Array>} Modified matrix. */ -const changeCases = (matrix, hot, data) => { +const matrixFieldChangeRules = (matrix, hot, data) => { const fields = getFields(data); + for (let col=0; col < fields.length; col++) { + + const field = fields[col]; + + // Test field against capitalization change. + if (field.capitalize !== null) { + for (let row=0; row < matrix.length; row++) { + if (!matrix[row][col]) continue; + matrix[row][col] = changeCase(matrix[row][col], field.capitalize); + } + } - for (let row=0; row < matrix.length; row++) { - for (let col=0; col < fields.length; col++) { - if (!matrix[row][col] || !fields[col].capitalize) continue; - matrix[row][col] = changeCase(matrix[row][col], fields[col].capitalize); + var triggered_changes = []; + + // Rules that require a column following current one. + if (fields.length > col+1) { + + const next_field = fields[col+1]; + + // Rule: for any "x bin" field that follows a "x" field (see next fn) + if (next_field.fieldName == fields[col].fieldName + ' bin') { + for (let row=0; row < matrix.length; row++) { + // Do parseFloat rather than parseInt to accomodate fractional bins. + const value = matrix[row][col]; + + // For IMPORT, this is only run on fields that have a value. + // Note matrix pass cell by reference so its content can be changed. + if (value && value.length > 0) { + const number = parseFloat(matrix[row][col]); + var selection = ''; + if (number >= 0) { + // .flatVocabulary is an array of ranges e.g. "10 - 19" + for (const number_range of next_field.flatVocabulary) { + // ParseInt just looks at first part of number + if (number >= parseFloat(number_range)) { + selection = number_range; + continue; + } + break; + } + } + triggered_changes.push([row, col+1, undefined, selection]); + } + } + } + } + + // Do triggered changes: + for (const change of triggered_changes) { + matrix[change[0]][change[1]] = change[3]; } } return matrix; } + +/** + * Iterate through rules set up for named columns + * Like matrixFieldChangeRules but just for table cell change array. + * @param {Array} change array [row, col, ? , value] + * @param {Object} fields See `data.js`. + * @param {Array} triggered_changes array of change which is appended to changes. + */ +const fieldChangeRules = (change, fields, triggered_changes) => { + + const col = change[1]; + const field = fields[col]; + + // Test field against capitalization change. + if (field.capitalize !== null && change[3] && change[3].length > 0) + change[3] = changeCase(change[3], field.capitalize); + + // Rules that require a column following current one. + if (fields.length > col+1) { + + const next_field = fields[col+1]; + + // Rule: for any "x bin" field that follows a "x" field (in other words, with + // " bin" appended to its label, find and set appropriate bin selection. + // add test on field.datatypes === "xs:decimal" , "select" ? + if (next_field.fieldName == fields[col].fieldName + ' bin') { + // Do parseFloat rather than parseInt to accomodate fractional bins. + const value = parseFloat(change[3]); + var selection = ''; + if (value >= 0) { + // .flatVocabulary is an array of ranges e.g. "10 - 19" + for (const number_range of next_field.flatVocabulary) { + if (value >= parseFloat(number_range)) { + selection = number_range; + continue; + } + break; + } + } + triggered_changes.push([change[0], col+1, undefined, selection]); + + }; + } + +}; + /** * Modify visibility of columns in grid. This function should only be called * after clicking a DOM element used to toggle column visibilities. @@ -982,6 +985,8 @@ $(document).ready(() => { exportGISAID(baseName, HOT, DATA, XLSX); } else if (exportFormat === 'irida') { exportIRIDA(baseName, HOT, DATA, XLSX); + } else if (exportFormat === 'laser') { + exportLASER(baseName, HOT, DATA, XLSX); } $('#export-to-modal').modal('hide'); }); diff --git a/make_data.py b/script/make_data.py similarity index 99% rename from make_data.py rename to script/make_data.py index a7500d6f..8131f281 100755 --- a/make_data.py +++ b/script/make_data.py @@ -61,7 +61,7 @@ 'guidance': row['guidance'], 'examples': row['examples'], 'GISAID': row['GISAID'], - 'CNPHI LaSER': row['CNPHI'] + 'CNPHI': row['CNPHI'] } reference_html += ''' diff --git a/SOP.pdf b/template/Canada_covid19/SOP.pdf similarity index 100% rename from SOP.pdf rename to template/Canada_covid19/SOP.pdf diff --git a/data.js b/template/Canada_covid19/data.js similarity index 96% rename from data.js rename to template/Canada_covid19/data.js index 756c9103..e0277d38 100644 --- a/data.js +++ b/template/Canada_covid19/data.js @@ -22,7 +22,7 @@ const DATA = [ "guidance": "Store the collector sample ID. If this number is considered identifiable information, provide an alternative ID. Be sure to store the key that maps between the original and alternative IDs for traceability and follow up if necessary. Every collector sample ID from a single submitter must be unique. It can have any format, but we suggest that you make it concise, unique and consistent within your lab.", "examples": "prov_rona_99", "GISAID": "Sample ID given by the sample provider", - "CNPHI LaSER": "Primary Specimen Identification Number" + "CNPHI": "Primary Specimen Identification Number" }, { "fieldName": "NML submitted specimen primary ID", @@ -38,7 +38,7 @@ const DATA = [ "guidance": "Store the identifier for the specimen submitted through the NML LaSER system.", "examples": "SR20-12345", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "NML related specimen primary ID", @@ -60,7 +60,7 @@ const DATA = [ "guidance": "Store the primary ID of the related specimen previously submitted thorough LaSER", "examples": "SR20-12345", "GISAID": "", - "CNPHI LaSER": "Related Specimen ID" + "CNPHI": "Related Specimen ID|Related Specimen Relationship Type" }, { "fieldName": "IRIDA sample name", @@ -76,7 +76,7 @@ const DATA = [ "guidance": "Store the IRIDA sample name. The IRIDA sample name will be created by the individual entering data into the IRIDA platform. IRIDA samples may be linked to metadata and sequence data, or just metadata alone. It is recommended that the IRIDA sample name be the same as, or contain, the specimen collector sample ID for better traceability. It is also recommended that the IRIDA sample name mirror the GISAID accession. IRIDA sample names cannot contain slashes. Slashes should be replaced by underscores. See IRIDA documentation for more information regarding special characters (https://irida.corefacility.ca/documentation/user/user/samples/#adding-a-new-sample). ", "examples": "prov_rona_99", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "umbrella bioproject accession", @@ -92,7 +92,7 @@ const DATA = [ "guidance": "Store the umbrella BioProject accession by selecting it from the picklist in the template. The umbrella BioProject accession will be identical for all CanCOGen submitters. Different provinces will have their own BioProjects, however these BioProjects will be linked under one umbrella BioProject.", "examples": "PRJNA623807", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "PRJNA623807": {} } @@ -111,7 +111,7 @@ const DATA = [ "guidance": "Store the BioProject accession number. BioProjects are an organizing tool that links together raw sequence data, assemblies, and their associated metadata. Each province will be assigned a different bioproject accession number by the National Microbiology Lab. A valid NCBI BioProject accession has prefix PRJN e.g., PRJNA12345, and is created once at the beginning of a new sequencing project. ", "examples": "PRJNA608651", "GISAID": "", - "CNPHI LaSER": "BioProject Accession" + "CNPHI": "BioProject Accession" }, { "fieldName": "biosample accession", @@ -127,7 +127,7 @@ const DATA = [ "guidance": "Store the accession returned from the BioSample submission. NCBI BioSamples will have the prefix SAMN.", "examples": "SAMN14180202", "GISAID": "", - "CNPHI LaSER": "BioSample Accession" + "CNPHI": "BioSample Accession" }, { "fieldName": "SRA accession", @@ -143,7 +143,7 @@ const DATA = [ "guidance": "Store the accession assigned to the submitted \"run\". NCBI-SRA accessions start with SRR.", "examples": "SRR11177792", "GISAID": "", - "CNPHI LaSER": "SRA Accession" + "CNPHI": "SRA Accession" }, { "fieldName": "GenBank accession", @@ -159,7 +159,7 @@ const DATA = [ "guidance": "Store the accession returned from a GenBank submission (viral genome assembly).", "examples": "MN908947.3", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "GISAID accession", @@ -175,7 +175,7 @@ const DATA = [ "guidance": "Store the accession returned from the GISAID submission.", "examples": "EPI_ISL_436489", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" } ] }, @@ -202,7 +202,7 @@ const DATA = [ "guidance": "The name of the sample collector should be written out in full, (with minor exceptions) and be consistent across multple submissions e.g. Public Health Agency of Canada, Public Health Ontario, BC Centre for Disease Control. The sample collector specified is at the discretion of the data provider (i.e. may be hospital, provincial public health lab, or other).", "examples": "BC Centre for Disease Control", "GISAID": "Originating lab", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sample collector contact email", @@ -218,7 +218,7 @@ const DATA = [ "guidance": "The email address can represent a specific individual or lab e.g. johnnyblogs@lab.ca, or RespLab@lab.ca", "examples": "RespLab@lab.ca", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sample collector contact address", @@ -234,7 +234,7 @@ const DATA = [ "guidance": "The mailing address should be in the format: Street number and name, City, Province/Territory, Postal Code, Country", "examples": "655 Lab St, Vancouver, British Columbia, V5N 2A2, Canada", "GISAID": "Address", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequence submitted by", @@ -256,7 +256,7 @@ const DATA = [ "guidance": "The name of the agency should be written out in full, (with minor exceptions) and be consistent across multple submissions e.g. Public Health Agency of Canada, Public Health Ontario, BC Centre for Disease Control.", "examples": "Public Health Ontario", "GISAID": "Submitting lab", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequence submitter contact email", @@ -272,7 +272,7 @@ const DATA = [ "guidance": "The email address can represent a specific individual or lab e.g. johnnyblogs@lab.ca, or RespLab@lab.ca", "examples": "RespLab@lab.ca", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequence submitter contact address", @@ -288,7 +288,7 @@ const DATA = [ "guidance": "The mailing address should be in the format: Street number and name, City, Province/Territory, Postal Code, Country", "examples": "123 Sunnybrooke St, Toronto, Ontario, M4P 1L6, Canada", "GISAID": "Address", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sample collection date", @@ -310,7 +310,7 @@ const DATA = [ "guidance": "Sample collection date is critical for surveillance and many types of analyses. Required granularity includes year, month and day. If this date is considered identifiable information, it is acceptable to add \"jitter\" by adding or subtracting a calendar day (acceptable by GISAID). Alternatively, \u201dreceived date\u201d may be used as a substitute. The date should be provided in ISO 8601 standard format \"YYYY-MM-DD\".", "examples": "2020-03-16", "GISAID": "Collection date", - "CNPHI LaSER": "Patient Sample Collected Date" + "CNPHI": "Patient Sample Collected Date" }, { "fieldName": "sample received date", @@ -332,7 +332,7 @@ const DATA = [ "guidance": "ISO 8601 standard \"YYYY-MM-DD\".", "examples": "2020-03-20", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "geo_loc_name (country)", @@ -354,7 +354,7 @@ const DATA = [ "guidance": "Provide the country name from the controlled vocabulary provided.", "examples": "Canada", "GISAID": "Location", - "CNPHI LaSER": "Patient Country", + "CNPHI": "Patient Country", "vocabulary": { "Afghanistan": {}, "Albania": {}, @@ -609,7 +609,7 @@ const DATA = [ "Turkmenistan": {}, "Turks and Caicos Islands": {}, "Tuvalu": {}, - "USA": {}, + "United States of America": {}, "Uganda": {}, "Ukraine": {}, "United Arab Emirates": {}, @@ -649,7 +649,7 @@ const DATA = [ "guidance": "Provide the province/territory name from the controlled vocabulary provided.", "examples": "Saskatchewan", "GISAID": "", - "CNPHI LaSER": "Patient Province", + "CNPHI": "Patient Province", "vocabulary": { "Alberta": {}, "British Columbia": {}, @@ -680,7 +680,7 @@ const DATA = [ "guidance": "Provide the city name. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz", "examples": "Medicine Hat", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "organism", @@ -702,7 +702,7 @@ const DATA = [ "guidance": "Use \"Severe acute respiratory syndrome coronavirus 2\". This value is provided in the template.", "examples": "Severe acute respiratory coronavirus 2", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Severe acute respiratory syndrome coronavirus 2": {}, "RaTG13": {}, @@ -729,7 +729,7 @@ const DATA = [ "guidance": "Provide the GISAID virus name, which should be written in the format \u201chCov-19/CANADA/xxxxx/2020\u201d.", "examples": "hCov-19/CANADA/prov_rona_99/2020", "GISAID": "Virus name", - "CNPHI LaSER": "GISAID Virus Name" + "CNPHI": "GISAID Virus Name" }, { "fieldName": "purpose of sampling", @@ -751,7 +751,7 @@ const DATA = [ "guidance": "Provide the purpose of sampling from the picklist in the template.", "examples": "Diagnostic testing", "GISAID": "", - "CNPHI LaSER": "Reason for Sampling", + "CNPHI": "Reason for Sampling", "vocabulary": { "Cluster investigation": {}, "Diagnostic testing": {}, @@ -774,7 +774,7 @@ const DATA = [ "guidance": "Select the specimen type from the pick list provided.", "examples": "swab", "GISAID": "", - "CNPHI LaSER": "Specimen Type", + "CNPHI": "Specimen Type", "vocabulary": { "Swab": {}, "RNA": {}, @@ -796,7 +796,7 @@ const DATA = [ "guidance": "Provide the specimen type of the original sample submitted from the pick list provided, so that additional specimen testing can be tracked in the system.", "examples": "swab", "GISAID": "", - "CNPHI LaSER": "Related Specimen Relationship Type", + "CNPHI": "Related Specimen ID|Related Specimen Relationship Type", "vocabulary": { "Acute": {}, "Convalescent": {}, @@ -825,7 +825,7 @@ const DATA = [ "guidance": "Provide a descriptor if an anatomical material was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Blood", "GISAID": "Specimen source", - "CNPHI LaSER": "Anatomical Material", + "CNPHI": "Anatomical Material", "vocabulary": { "Blood": {}, "Fluid": { @@ -859,7 +859,7 @@ const DATA = [ "guidance": "Provide a descriptor if an anatomical part was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Nasopharynx (NP)", "GISAID": "Specimen source", - "CNPHI LaSER": "Anatomical Site", + "CNPHI": "Anatomical Site", "vocabulary": { "Anus": {}, "Buccal mucosa": {}, @@ -913,7 +913,7 @@ const DATA = [ "guidance": "Provide a descriptor if a body product was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Feces", "GISAID": "Specimen source", - "CNPHI LaSER": "Body Product", + "CNPHI": "Body Product", "vocabulary": { "Feces": {}, "Urine": {}, @@ -946,7 +946,7 @@ const DATA = [ "guidance": "Provide a descriptor if an environmental material was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Face mask", "GISAID": "Specimen source", - "CNPHI LaSER": "Environmental Material", + "CNPHI": "Environmental Material", "vocabulary": { "Air vent": {}, "Banknote": {}, @@ -1001,7 +1001,7 @@ const DATA = [ "guidance": "Provide a descriptor if an environmental site was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Building floor", "GISAID": "Specimen source", - "CNPHI LaSER": "Environmental Site", + "CNPHI": "Environmental Site", "vocabulary": { "Acute care facility": {}, "Animal house": {}, @@ -1050,7 +1050,7 @@ const DATA = [ "guidance": "Provide a descriptor if a device was used for sampling. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Swab", "GISAID": "Specimen source", - "CNPHI LaSER": "Specimen Collection Matrix", + "CNPHI": "Specimen Collection Matrix", "vocabulary": { "Air filter": {}, "Blood Collection Tube": {}, @@ -1091,7 +1091,7 @@ const DATA = [ "guidance": "Provide a descriptor if a collection method was used for sampling. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. ", "examples": "Bronchoalveolar lavage (BAL)", "GISAID": "Specimen source", - "CNPHI LaSER": "Collection Method", + "CNPHI": "Collection Method", "vocabulary": { "Amniocentesis": {}, "Aspiration": { @@ -1135,7 +1135,7 @@ const DATA = [ "guidance": "Free text.", "examples": "BCRonaSamplingProtocol v. 1.2", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "specimen processing", @@ -1157,7 +1157,7 @@ const DATA = [ "guidance": "Critical for interpreting data. Select all the applicable processes from the pick list. If virus was passaged, include information in \"lab host\", \"passage number\", and \"passage method\" fields. If none of the processes in the pick list apply, put \"not applicable\".", "examples": "Virus passage", "GISAID": "Passage details/history", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Virus passage": {}, "RNA re-extraction (post RT-PCR)": {}, @@ -1184,7 +1184,7 @@ const DATA = [ "guidance": "Type of cell line used for propagation. Provide the name of the cell line using the picklist in the template. If not passaged, put \"not applicable\".", "examples": "Vero E6 cell line", "GISAID": "Passage details/history", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "293/ACE2 cell line": {}, "Caco2 cell line": {}, @@ -1221,7 +1221,7 @@ const DATA = [ "guidance": "Provide number of known passages. If not passaged, put \"not applicable\"", "examples": "3", "GISAID": "Passage details/history", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "passage method", @@ -1239,7 +1239,7 @@ const DATA = [ "guidance": "Free text. Provide a very short description (<10 words). If not passaged, put \"not applicable\".", "examples": "", "GISAID": "Passage details/history", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "biomaterial extracted", @@ -1261,7 +1261,7 @@ const DATA = [ "guidance": "Provide the biomaterial extracted from the picklist in the template.", "examples": "RNA (total)", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "RNA (total)": {}, "RNA (poly-A)": {}, @@ -1294,7 +1294,7 @@ const DATA = [ "guidance": "Common name or scientific name are required if there was a host. Both can be provided, if known. Use terms from the pick lists in the template. Common name e.g. human, bat. If the sample was environmental, put \"not applicable.", "examples": "Human", "GISAID": "", - "CNPHI LaSER": "Animal Type", + "CNPHI": "Animal Type", "vocabulary": { "Human": {}, "Bat": {}, @@ -1330,7 +1330,7 @@ const DATA = [ "guidance": "Common name or scientific name are required if there was a host. Both can be provided, if known. Use terms from the pick lists in the template. Scientific name e.g. Homo sapiens, If the sample was environmental, put \"not applicable", "examples": "Homo sapiens", "GISAID": "Host", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Homo sapiens": {}, "Bos taurus": {}, @@ -1369,7 +1369,7 @@ const DATA = [ "guidance": "If known, select a descriptor from the pick list provided in the template.", "examples": "Symptomatic", "GISAID": "Patient status", - "CNPHI LaSER": "Host Health State", + "CNPHI": "Host Health State", "vocabulary": { "Asymptomatic": {}, "Deceased": {}, @@ -1398,7 +1398,7 @@ const DATA = [ "guidance": "If known, select a descriptor from the pick list provided in the template.", "examples": "Hospitalized (ICU)", "GISAID": "", - "CNPHI LaSER": "Host Health State Details", + "CNPHI": "Host Health State Details", "vocabulary": { "Hospitalized": { "Hospitalized (Non-ICU)": {}, @@ -1431,7 +1431,7 @@ const DATA = [ "guidance": "If known, select a descriptor from the pick list provided in the template.", "examples": "Recovered", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Deceased": {}, "Deteriorating": {}, @@ -1459,7 +1459,7 @@ const DATA = [ "guidance": "Select \"COVID-19\" from the pick list provided in the template.", "examples": "COVID-19", "GISAID": "", - "CNPHI LaSER": "Host Disease", + "CNPHI": "Host Disease", "vocabulary": { "COVID-19": {} } @@ -1481,10 +1481,10 @@ const DATA = [ "xs:maxInclusive": "130", "requirement": "required", "description": "Age of host at the time of sampling.", - "guidance": "Enter the age of the host in years. If not available, put \"missing\".", + "guidance": "Enter the age of the host in years. If not available, provide a null value. If there is not host, put \"Not Applicable\".", "examples": "79", "GISAID": "Patient age", - "CNPHI LaSER": "Patient Age" + "CNPHI": "Patient Age" }, { "fieldName": "host age bin", @@ -1506,7 +1506,7 @@ const DATA = [ "guidance": "Select the corresponding host age bin from the pick list provided in the template. If not available, provide a null value.", "examples": "60 - 69", "GISAID": "", - "CNPHI LaSER": "Host Age Category", + "CNPHI": "Host Age Category", "vocabulary": { "0 - 9": {}, "10 - 19": {}, @@ -1516,7 +1516,9 @@ const DATA = [ "50 - 59": {}, "60 - 69": {}, "70 - 79": {}, - "80+": {} + "80 - 89": {}, + "90 - 99": {}, + "100+": {} } }, { @@ -1536,10 +1538,10 @@ const DATA = [ "xs:maxInclusive": "", "requirement": "required", "description": "The gender of the host at the time of sample collection.", - "guidance": "Select the corresponding host gender from the pick list provided in the template. If not available, put \"missing\".", + "guidance": "Select the corresponding host gender from the pick list provided in the template. If not available, provide a null value. If there is no host, put \"Not Applicable\".", "examples": "male", "GISAID": "Gender", - "CNPHI LaSER": "Patient Sex", + "CNPHI": "Patient Sex", "vocabulary": { "Female": {}, "Male": {}, @@ -1568,7 +1570,7 @@ const DATA = [ "guidance": "Select the country name from pick list provided in the template.", "examples": "United Kingdom", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": {} }, { @@ -1585,7 +1587,7 @@ const DATA = [ "guidance": "Provide the host identifier. Should be a unique, user-defined identifier.", "examples": "BCxy123", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "symptom onset date", @@ -1607,7 +1609,7 @@ const DATA = [ "guidance": "ISO 8601 standard \"YYYY-MM-DD\".", "examples": "2020-03-16", "GISAID": "", - "CNPHI LaSER": "Symptoms Onset Date" + "CNPHI": "Symptoms Onset Date" }, { "fieldName": "signs and symptoms", @@ -1629,7 +1631,7 @@ const DATA = [ "guidance": "Select all of the symptoms experienced by the host from the pick list.", "examples": "Cough; Fever; Chills", "GISAID": "", - "CNPHI LaSER": "Symptoms", + "CNPHI": "Symptoms", "vocabulary": { "Abnormal lung ausculation": {}, "Abnormality of taste sensation": { @@ -1755,7 +1757,7 @@ const DATA = [ "guidance": "Select all of the pre-existing conditions and risk factors experienced by the host from the pick list. If the desired term is missing, contact the curation team.", "examples": "Asthma; Pregnancy; Smoker", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Age 60+": {}, "Anemia": {}, @@ -1893,7 +1895,7 @@ const DATA = [ "guidance": "Select all of the complications experienced by the host from the pick list. If the desired term is missing, contact the curation team.", "examples": "Acute Respiratory Failure; Coma; Septicemia", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Abnormal blood oxygen level": {}, "Acute respiratory failure": {}, @@ -2022,7 +2024,7 @@ const DATA = [ "guidance": "Select the country name from pick list provided in the template.", "examples": "Canada", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": {} }, { @@ -2045,7 +2047,7 @@ const DATA = [ "guidance": "Provide the name of the city that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz", "examples": "New York City", "GISAID": "", - "CNPHI LaSER": "City of Travel" + "CNPHI": "Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date" }, { "fieldName": "destination of most recent travel (state/province/territory)", @@ -2067,7 +2069,7 @@ const DATA = [ "guidance": "Provide the name of the state/province/territory that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz", "examples": "California", "GISAID": "", - "CNPHI LaSER": "Province of Travel" + "CNPHI": "Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date" }, { "fieldName": "destination of most recent travel (country)", @@ -2089,7 +2091,7 @@ const DATA = [ "guidance": "Provide the name of the country that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz", "examples": "United Kingdom", "GISAID": "", - "CNPHI LaSER": "Country of Travel", + "CNPHI": "Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date", "vocabulary": {} }, { @@ -2112,7 +2114,7 @@ const DATA = [ "guidance": "Provide the travel departure date.", "examples": "2020-03-16", "GISAID": "", - "CNPHI LaSER": "Travel start date" + "CNPHI": "Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date" }, { "fieldName": "most recent travel return date", @@ -2134,7 +2136,7 @@ const DATA = [ "guidance": "Provide the travel return date.", "examples": "2020-04-26", "GISAID": "", - "CNPHI LaSER": "Travel End Date" + "CNPHI": "Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date" }, { "fieldName": "travel history", @@ -2150,7 +2152,7 @@ const DATA = [ "guidance": "Specify the countries (and more granular locations if known, separated by a comma) travelled in the last six months; can include multiple travels. Separate multiple travel events with a semi-colon. List most recent travel first.", "examples": "Canada, Vancouver; USA, Seattle; Italy, Milan", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "exposure event", @@ -2172,7 +2174,7 @@ const DATA = [ "guidance": "Select an exposure event from the pick list provided in the template. If the desired term is missing, contact the curation team.", "examples": "Mass gathering (convention)", "GISAID": "Additional location information", - "CNPHI LaSER": "Exposure Event", + "CNPHI": "Exposure Event", "vocabulary": { "Mass Gathering": { "Convention": {}, @@ -2210,7 +2212,7 @@ const DATA = [ "guidance": "Select direct or indirect exposure from the pick-list.", "examples": "Direct", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Direct": {}, "Indirect": {}, @@ -2231,7 +2233,7 @@ const DATA = [ "guidance": "Select the host's personal role(s) from the pick list provided in the template. If the desired term is missing, contact the curation team.", "examples": "Patient", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Attendee": { "Student": {} @@ -2286,7 +2288,7 @@ const DATA = [ "guidance": "Select the host exposure setting(s) from the pick list provided in the template. If a desired term is missing, contact the curation team.", "examples": "Healthcare Setting", "GISAID": "", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "Human Exposure": { "Known COVID-19 Case": {}, @@ -2368,7 +2370,7 @@ const DATA = [ "guidance": "Free text description of the exposure.", "examples": "Host role - Other: Bus Driver", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" } ] }, @@ -2389,7 +2391,7 @@ const DATA = [ "guidance": "The library name should be unique, and can be an autogenerated ID from your LIMS, or modification of the isolate ID.", "examples": "XYZ_123345", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "library insert size", @@ -2405,7 +2407,7 @@ const DATA = [ "guidance": "Provide the insert size in base pairs.", "examples": "300", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "library preparation method", @@ -2421,7 +2423,7 @@ const DATA = [ "guidance": "Provide the name of the library preparation kit used.", "examples": "Nextera XT", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "MinIon barcode", @@ -2437,7 +2439,7 @@ const DATA = [ "guidance": "Provide the barcode of the MinIon used for sequencing the sample.", "examples": "FAB06069", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequencing instrument", @@ -2459,7 +2461,7 @@ const DATA = [ "guidance": "Select a sequencing instrument from the picklist provided in the template.", "examples": "MinIon", "GISAID": "Sequencing technology", - "CNPHI LaSER": "", + "CNPHI": "", "vocabulary": { "ILLUMINA": { "HiSeq X": { @@ -2526,7 +2528,7 @@ const DATA = [ "guidance": "Provide the name and version of the sequencing protocol e.g. 1D_DNA_MinION", "examples": "1D_DNA_MinION, ARTIC Network Protocol v. 3", "GISAID": "", - "CNPHI LaSER": "Sequencing protocol name" + "CNPHI": "Sequencing protocol name" }, { "fieldName": "sequencing protocol source", @@ -2542,7 +2544,7 @@ const DATA = [ "guidance": "Provide the name of the source of the protocol e.g. ARTIC Network.", "examples": "ARTIC Network", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequencing kit number", @@ -2558,7 +2560,7 @@ const DATA = [ "guidance": "Alphanumeric value.", "examples": "AB456XYZ789", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "amplicon pcr primers filename", @@ -2574,7 +2576,7 @@ const DATA = [ "guidance": "Important for documenting methods and should be considered for submission, particularly if primers were designed in-house and not by a public consortium/network.", "examples": "Rona_primers_2020.txt", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sample sequenced date", @@ -2596,7 +2598,7 @@ const DATA = [ "guidance": "ISO 8601 standard \"YYYY-MM-DD\".", "examples": "2020-06-22", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" } ] }, @@ -2617,7 +2619,7 @@ const DATA = [ "guidance": "Provide the software name followed by the version e.g. Trimmomatic v. 0.38, Porechop v. 0.2.3", "examples": "Porechop v. 0.2.3", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "sequencing depth (average)", @@ -2633,7 +2635,7 @@ const DATA = [ "guidance": "Provide the value as a fold of coverage.", "examples": "80x", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "assembly name", @@ -2649,7 +2651,7 @@ const DATA = [ "guidance": "Provide the assembly name.", "examples": "rona123assembly.fasta", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "assembly method", @@ -2665,7 +2667,7 @@ const DATA = [ "guidance": "Provide the software name followed by the version e.g. Canu 2.0", "examples": "Canu 2.0", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "assembly coverage breadth", @@ -2681,7 +2683,7 @@ const DATA = [ "guidance": "Provide value as a percent e.g. 95%.", "examples": "95%", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "assembly coverage depth", @@ -2697,7 +2699,7 @@ const DATA = [ "guidance": "Provide value as a fold of coverage e.g. 80x.", "examples": "400x", "GISAID": "Coverage", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "r1 fastq filename", @@ -2713,7 +2715,7 @@ const DATA = [ "guidance": "Provide the r1 FASTQ filename.", "examples": "ABC123_S1_L001_R1_001.fastq.gz", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "r2 fastq filename", @@ -2729,7 +2731,7 @@ const DATA = [ "guidance": "Provide the r2 FASTQ filename.", "examples": "ABC123_S1_L001_R2_001.fastq.gz", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "r1 fastq filepath", @@ -2745,7 +2747,7 @@ const DATA = [ "guidance": "Provide the filepath for the r1 FASTQ file. This information aids in data management. ", "examples": "/User/Documents/RespLab/Data", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "r2 fastq filepath", @@ -2761,7 +2763,7 @@ const DATA = [ "guidance": "Provide the filepath for the r2 FASTQ file. This information aids in data management. ", "examples": "/User/Documents/RespLab/Data", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "fast5 filename", @@ -2777,7 +2779,7 @@ const DATA = [ "guidance": "Provide the FAST5 filename.", "examples": "rona123assembly.fast5", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "fast5 filepath", @@ -2793,7 +2795,7 @@ const DATA = [ "guidance": "Provide the filepath for the FAST5 file. This information aids in data management. ", "examples": "/User/Documents/RespLab/Data", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "fasta filename", @@ -2809,7 +2811,7 @@ const DATA = [ "guidance": "Provide the FASTA filename.", "examples": "batch1a_sequences.fasta", "GISAID": "FASTA filename", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "fasta filepath", @@ -2825,7 +2827,7 @@ const DATA = [ "guidance": "Provide the filepath for the FASTA file. This information aids in data management. ", "examples": "/User/Documents/RespLab/Data", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "number base pairs", @@ -2841,7 +2843,7 @@ const DATA = [ "guidance": "Provide a numerical value (no need to include units).", "examples": "387566", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "consensus genome length", @@ -2857,7 +2859,7 @@ const DATA = [ "guidance": "Provide a numerical value (no need to include units).", "examples": "38677", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "mean contig length", @@ -2873,7 +2875,7 @@ const DATA = [ "guidance": "Provide a numerical value (no need to include units).", "examples": "12689", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "N50", @@ -2889,7 +2891,7 @@ const DATA = [ "guidance": "Provide a numerical value (no need to include units).", "examples": "10500", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "Ns per 100 kbp", @@ -2905,7 +2907,7 @@ const DATA = [ "guidance": "Provide a numerical value (no need to include units).", "examples": "330", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "reference genome accession", @@ -2921,7 +2923,7 @@ const DATA = [ "guidance": "Provide the accession number of the reference genome.", "examples": "NC_045512.2", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "consensus sequence ID", @@ -2937,7 +2939,7 @@ const DATA = [ "guidance": "Provide the consensus sequence identifier.", "examples": "ProvConsensusSeq", "GISAID": "Sample ID given by the submitting laboratory", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "consensus sequence method", @@ -2959,7 +2961,7 @@ const DATA = [ "guidance": "Provide the software name followed by the version e.g. iVar 1.2", "examples": "iVar 1.2", "GISAID": "Assembly method", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "consensus sequence filename", @@ -2975,7 +2977,7 @@ const DATA = [ "guidance": "Provide the filename for the consensus sequence. ", "examples": "ProvConsensusSeq.fasta", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "consensus sequence filepath", @@ -2991,7 +2993,7 @@ const DATA = [ "guidance": "Provide the filepath for the consensus sequence file. This information facilitates data management.", "examples": "/User/Documents/RespLab/Data", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "annotation feature table filename", @@ -3007,7 +3009,7 @@ const DATA = [ "guidance": "Provide the filename of the annotation feature table.", "examples": "BCRonaAnnotationFeatures", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "bioinformatics protocol", @@ -3023,7 +3025,7 @@ const DATA = [ "guidance": "Further details regarding the methods used to process raw data, and/or generate assemblies, and/or generate consensus sequences can be provided in an SOP or protocol. Provide the name and version number of the protocol.", "examples": "https://www.protocols.io/groups/cphln-sarscov2-sequencing-consortium/members", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" } ] }, @@ -3044,7 +3046,7 @@ const DATA = [ "guidance": "Provide the full name of the gene used in the test. The gene symbol (short form of gene name) can also be provided. Standardized gene names and symbols can be found in the Gene Ontology using this look-up service: https://bit.ly/2Sq1LbI", "examples": "E (orf4)", "GISAID": "", - "CNPHI LaSER": "Gene Target #1", + "CNPHI": "Gene Target #1", "vocabulary": { "E (orf4)": {}, "M (orf5)": {}, @@ -3096,7 +3098,7 @@ const DATA = [ "guidance": "The name and version number of the protocol used for carrying out a diagnostic PCR test. This information can be compared to sequence data for evaluation of performance and quality control.", "examples": "EGenePCRTest 2", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "diagnostic pcr Ct value 1", @@ -3112,7 +3114,7 @@ const DATA = [ "guidance": "Provide the CT value of the sample from the diagnostic RT-PCR test.", "examples": "21", "GISAID": "", - "CNPHI LaSER": "Gene Target #1 CT Value" + "CNPHI": "Gene Target #1 CT Value" }, { "fieldName": "gene name 2", @@ -3128,7 +3130,7 @@ const DATA = [ "guidance": "Provide the full name of another gene used in an RT-PCR test. The gene symbol (short form of gene name) can also be provided. Standardized gene names and symbols can be found in the Gene Ontology using this look-up service: https://bit.ly/2Sq1LbI", "examples": "nsp12 (RdRp)", "GISAID": "", - "CNPHI LaSER": "Gene Target #2", + "CNPHI": "Gene Target #2", "vocabulary": {} }, { @@ -3145,7 +3147,7 @@ const DATA = [ "guidance": "The name and version number of the protocol used for carrying out a second diagnostic PCR test. This information can be compared to sequence data for evaluation of performance and quality control.", "examples": "RdRpGenePCRTest 3", "GISAID": "", - "CNPHI LaSER": "" + "CNPHI": "" }, { "fieldName": "diagnostic pcr Ct value 2", @@ -3161,7 +3163,7 @@ const DATA = [ "guidance": "Provide the CT value of the sample from the second diagnostic RT-PCR test.", "examples": "36", "GISAID": "", - "CNPHI LaSER": "Gene Target #2 CT Value" + "CNPHI": "Gene Target #2 CT Value" } ] }, @@ -3182,7 +3184,7 @@ const DATA = [ "guidance": "Include the first and last names of all individuals that should be attributed, separated by a comma.", "examples": "Tejinder Singh, Fei Hu, Joe Blogs", "GISAID": "Authors", - "CNPHI LaSER": "" + "CNPHI": "" } ] } diff --git a/data.tsv b/template/Canada_covid19/data.tsv similarity index 98% rename from data.tsv rename to template/Canada_covid19/data.tsv index ee1918ff..c3b0f2c2 100644 --- a/data.tsv +++ b/template/Canada_covid19/data.tsv @@ -3,7 +3,7 @@ ID SC % Database Identifiers Database Identifiers specimen collector sample ID xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required The user-defined name for the sample. Store the collector sample ID. If this number is considered identifiable information, provide an alternative ID. Be sure to store the key that maps between the original and alternative IDs for traceability and follow up if necessary. Every collector sample ID from a single submitter must be unique. It can have any format, but we suggest that you make it concise, unique and consistent within your lab. prov_rona_99 Sample ID given by the sample provider Primary Specimen Identification Number Database Identifiers NML submitted specimen primary ID xs:token The primary ID of the specimen submitted thorough LaSER. Store the identifier for the specimen submitted through the NML LaSER system. SR20-12345 - Database Identifiers NML related specimen primary ID xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The primary ID of the related specimen previously submitted thorough LaSER Store the primary ID of the related specimen previously submitted thorough LaSER SR20-12345 Related Specimen ID + Database Identifiers NML related specimen primary ID xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The primary ID of the related specimen previously submitted thorough LaSER Store the primary ID of the related specimen previously submitted thorough LaSER SR20-12345 Related Specimen ID|Related Specimen Relationship Type Database Identifiers IRIDA sample name xs:token The identifier assigned to a sequenced isolate in IRIDA. Store the IRIDA sample name. The IRIDA sample name will be created by the individual entering data into the IRIDA platform. IRIDA samples may be linked to metadata and sequence data, or just metadata alone. It is recommended that the IRIDA sample name be the same as, or contain, the specimen collector sample ID for better traceability. It is also recommended that the IRIDA sample name mirror the GISAID accession. IRIDA sample names cannot contain slashes. Slashes should be replaced by underscores. See IRIDA documentation for more information regarding special characters (https://irida.corefacility.ca/documentation/user/user/samples/#adding-a-new-sample). prov_rona_99 Database Identifiers umbrella bioproject accession select UPPER The INSDC accession number assigned to the umbrella BioProject for the Canadian SARS-CoV-2 sequencing effort. Store the umbrella BioProject accession by selecting it from the picklist in the template. The umbrella BioProject accession will be identical for all CanCOGen submitters. Different provinces will have their own BioProjects, however these BioProjects will be linked under one umbrella BioProject. PRJNA623807 Database Identifiers bioproject accession xs:token UPPER The INSDC accession number of the BioProject(s) to which the BioSample belongs. Store the BioProject accession number. BioProjects are an organizing tool that links together raw sequence data, assemblies, and their associated metadata. Each province will be assigned a different bioproject accession number by the National Microbiology Lab. A valid NCBI BioProject accession has prefix PRJN e.g., PRJNA12345, and is created once at the beginning of a new sequencing project. PRJNA608651 BioProject Accession @@ -27,7 +27,7 @@ ID SC % Sample collection and processing isolate xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required Identifier of the specific isolate. Provide the GISAID virus name, which should be written in the format “hCov-19/CANADA/xxxxx/2020”. hCov-19/CANADA/prov_rona_99/2020 Virus name GISAID Virus Name Sample collection and processing purpose of sampling select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access recommended The reason that the sample was collected. Provide the purpose of sampling from the picklist in the template. Diagnostic testing Reason for Sampling Sample collection and processing NML submitted specimen type select The type of specimen submitted to the NML for testing. Select the specimen type from the pick list provided. swab Specimen Type - Sample collection and processing NML related specimen relationship type select The relationship of the related specimen to the previous submission. Provide the specimen type of the original sample submitted from the pick list provided, so that additional specimen testing can be tracked in the system. swab Related Specimen Relationship Type + Sample collection and processing NML related specimen relationship type select The relationship of the related specimen to the previous submission. Provide the specimen type of the original sample submitted from the pick list provided, so that additional specimen testing can be tracked in the system. swab Related Specimen ID|Related Specimen Relationship Type Sample collection and processing anatomical material select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required A substance obtained from an anatomical part of an organism e.g. tissue, blood. Provide a descriptor if an anatomical material was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. Blood Specimen source Anatomical Material Sample collection and processing anatomical part select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required An anatomical part of an organism e.g. oropharynx. Provide a descriptor if an anatomical part was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. Nasopharynx (NP) Specimen source Anatomical Site Sample collection and processing body product select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required A substance excreted/secreted from an organism e.g. feces, urine, sweat. Provide a descriptor if a body product was sampled. Use the picklist provided in the template. If a desired term is missing from the picklist, contact emma.griffiths@bccdc.ca. If not applicable, do not leave blank. Choose a null value. Feces Specimen source Body Product @@ -48,9 +48,9 @@ ID SC % Host Information host health status details select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access Further details pertaining to the health or disease status of the host at time of collection. If known, select a descriptor from the pick list provided in the template. Hospitalized (ICU) Host Health State Details Host Information host health outcome select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access Disease outcome in the host. If known, select a descriptor from the pick list provided in the template. Recovered Host Information host disease select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required The name of the disease experienced by the host. Select "COVID-19" from the pick list provided in the template. COVID-19 Host Disease - Host Information host age xs:decimal Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required 0 130 Age of host at the time of sampling. Enter the age of the host in years. If not available, put "missing". 79 Patient age Patient Age + Host Information host age xs:decimal Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required 0 130 Age of host at the time of sampling. Enter the age of the host in years. If not available, provide a null value. If there is not host, put "Not Applicable". 79 Patient age Patient Age Host Information host age bin select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required Age of host at the time of sampling, expressed as an age group. Select the corresponding host age bin from the pick list provided in the template. If not available, provide a null value. 60 - 69 Host Age Category - Host Information host gender select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required The gender of the host at the time of sample collection. Select the corresponding host gender from the pick list provided in the template. If not available, put "missing". male Gender Patient Sex + Host Information host gender select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access required The gender of the host at the time of sample collection. Select the corresponding host gender from the pick list provided in the template. If not available, provide a null value. If there is no host, put "Not Applicable". male Gender Patient Sex Host Information host origin geo_loc name (country) select geo_loc_name (country) Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The country of residence of the host. Select the country name from pick list provided in the template. United Kingdom Host Information host subject ID xs:token A unique identifier by which each host can be referred to e.g. #131 Provide the host identifier. Should be a unique, user-defined identifier. BCxy123 Host Information symptom onset date xs:date Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The date on which the symptoms began or were first noted. ISO 8601 standard "YYYY-MM-DD". 2020-03-16 Symptoms Onset Date @@ -61,11 +61,11 @@ Risk Factor: A variable associated with an increased risk of disease or infectio Host Information complications multiple Not Applicable; Missing; Not Collected; Not Provided; Restricted Access Patient medical complications that are believed to have occurred as result of host disease. Select all of the complications experienced by the host from the pick list. If the desired term is missing, contact the curation team. Acute Respiratory Failure; Coma; Septicemia Host exposure information Host exposure information location of exposure geo_loc name (country) select geo_loc_name (country) Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The country where the host was likely exposed to the causative agent of the illness. Select the country name from pick list provided in the template. Canada - Host exposure information destination of most recent travel (city) xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the city that was the destination of most recent travel. Provide the name of the city that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz New York City City of Travel - Host exposure information destination of most recent travel (state/province/territory) xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the province that was the destination of most recent travel. Provide the name of the state/province/territory that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz California Province of Travel - Host exposure information destination of most recent travel (country) select geo_loc_name (country) Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the country that was the destination of most recent travel. Provide the name of the country that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz United Kingdom Country of Travel - Host exposure information most recent travel departure date xs:date Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The date of a person's most recent departure from their primary residence (at that time) on a journey to one or more other locations. Provide the travel departure date. 2020-03-16 Travel start date - Host exposure information most recent travel return date xs:date Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The date of a person's most recent return to some residence from a journey originating at that residence. Provide the travel return date. 2020-04-26 Travel End Date + Host exposure information destination of most recent travel (city) xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the city that was the destination of most recent travel. Provide the name of the city that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz New York City Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date + Host exposure information destination of most recent travel (state/province/territory) xs:token Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the province that was the destination of most recent travel. Provide the name of the state/province/territory that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz California Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date + Host exposure information destination of most recent travel (country) select geo_loc_name (country) Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The name of the country that was the destination of most recent travel. Provide the name of the country that the host travelled to. Use this look-up service to identify the standardized term: https://www.ebi.ac.uk/ols/ontologies/gaz United Kingdom Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date + Host exposure information most recent travel departure date xs:date Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The date of a person's most recent departure from their primary residence (at that time) on a journey to one or more other locations. Provide the travel departure date. 2020-03-16 Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date + Host exposure information most recent travel return date xs:date Not Applicable; Missing; Not Collected; Not Provided; Restricted Access The date of a person's most recent return to some residence from a journey originating at that residence. Provide the travel return date. 2020-04-26 Country of Travel|Province of Travel|City of Travel|Travel start date|Travel End Date Host exposure information travel history xs:token Travel outside the country in last six months. Specify the countries (and more granular locations if known, separated by a comma) travelled in the last six months; can include multiple travels. Separate multiple travel events with a semi-colon. List most recent travel first. Canada, Vancouver; USA, Seattle; Italy, Milan Host exposure information exposure event select Not Applicable; Missing; Not Collected; Not Provided; Restricted Access Event leading to exposure. Select an exposure event from the pick list provided in the template. If the desired term is missing, contact the curation team. Mass gathering (convention) Additional location information Exposure Event Host exposure information direct/indirect exposure select The exposure transmission contact type. Select direct or indirect exposure from the pick-list. Direct @@ -672,7 +672,9 @@ BTO:0004755 lab host Vero E6 cell line host age bin 50 - 59 host age bin 60 - 69 host age bin 70 - 79 - host age bin 80+ + host age bin 80 - 89 + host age bin 90 - 99 + host age bin 100+ OMRSE:00000009? host gender Female OMRSE:00000008? host gender Male @@ -1129,7 +1131,7 @@ GAZ_00000558 geo_loc_name (country) Turkey GAZ_00005018 geo_loc_name (country) Turkmenistan GAZ_00003955 geo_loc_name (country) Turks and Caicos Islands GAZ_00009715 geo_loc_name (country) Tuvalu -GAZ_00002459 geo_loc_name (country) USA +GAZ_00002459 geo_loc_name (country) United States of America GAZ_00001102 geo_loc_name (country) Uganda GAZ_00002724 geo_loc_name (country) Ukraine GAZ_00005282 geo_loc_name (country) United Arab Emirates diff --git a/doc.css b/template/Canada_covid19/doc.css similarity index 100% rename from doc.css rename to template/Canada_covid19/doc.css diff --git a/exampleInput/invalidTestData.csv b/template/Canada_covid19/exampleInput/invalidTestData.csv similarity index 100% rename from exampleInput/invalidTestData.csv rename to template/Canada_covid19/exampleInput/invalidTestData.csv diff --git a/exampleInput/validTestData.csv b/template/Canada_covid19/exampleInput/validTestData.csv similarity index 100% rename from exampleInput/validTestData.csv rename to template/Canada_covid19/exampleInput/validTestData.csv diff --git a/exampleInput/validTestData.tsv b/template/Canada_covid19/exampleInput/validTestData.tsv similarity index 100% rename from exampleInput/validTestData.tsv rename to template/Canada_covid19/exampleInput/validTestData.tsv diff --git a/exampleInput/validTestData.xlsx b/template/Canada_covid19/exampleInput/validTestData.xlsx similarity index 100% rename from exampleInput/validTestData.xlsx rename to template/Canada_covid19/exampleInput/validTestData.xlsx diff --git a/reference.html b/template/Canada_covid19/reference.html similarity index 99% rename from reference.html rename to template/Canada_covid19/reference.html index 8bf524ba..08c010e2 100644 --- a/reference.html +++ b/template/Canada_covid19/reference.html @@ -7,14 +7,14 @@ - +

CanCOGeN Guidelines for Covid19 Biosample metadata collection and submission

- +

Guidelines for submitting metadata regarding Covid19 biosamples and their associated cases to sequence repositories like IRIDA, NCBI Bioproject, and GISAID.

@@ -450,7 +450,7 @@

CanCOGeN Guidelines for Covid19 Biosample metadata collection and submission

- + @@ -468,7 +468,7 @@

CanCOGeN Guidelines for Covid19 Biosample metadata collection and submission

- + diff --git a/reference_template.html b/template/Canada_covid19/reference_template.html similarity index 94% rename from reference_template.html rename to template/Canada_covid19/reference_template.html index ed1006d4..b57540bb 100644 --- a/reference_template.html +++ b/template/Canada_covid19/reference_template.html @@ -7,14 +7,14 @@ - +

CanCOGeN Guidelines for Covid19 Biosample metadata collection and submission

- +

Guidelines for submitting metadata regarding Covid19 biosamples and their associated cases to sequence repositories like IRIDA, NCBI Bioproject, and GISAID.

host age Age of host at the time of sampling.Enter the age of the host in years. If not available, put "missing".Enter the age of the host in years. If not available, provide a null value. If there is not host, put "Not Applicable". 79 ['Not Applicable', 'Missing', 'Not Collected', 'Not Provided', 'Restricted Access']
host gender The gender of the host at the time of sample collection.Select the corresponding host gender from the pick list provided in the template. If not available, put "missing".Select the corresponding host gender from the pick list provided in the template. If not available, provide a null value. If there is no host, put "Not Applicable". male ['Not Applicable', 'Missing', 'Not Collected', 'Not Provided', 'Restricted Access']