Build and submit an SDRF sample sheet

BS3 asks CZ Biohub submitters for an SDRF sample sheet. You build the sheet in MOSAIC, a Biohub web app, and upload it to the Mass Spec, Illumina or PacBio submission form. This page walks through every step.

Submissions for a CZ Biohub institute must use SDRF. BS3 turns the classic CSV sample sheet off for them.

  1. Sign in to MOSAIC at https://mosaic.apps.czbiohub.org/ with your CZ Biohub Okta account.
  2. Build the sheet in the Single Sheet Builder. Pick the Biohub template for your platform, describe your sample groups, fill in the facility columns for each sample and click Generate sheet.
  3. Export it and fill in what is left. MOSAIC downloads sdrf.tsv and writes "Please fill this value" in every BL[...], Illumina[...] or PacBio[...] cell you must fill in but left blank. Replace each one with your real value: BS3 rejects a sheet that still has one.
  4. Upload the .tsv file in the BS3 form, with Use SDRF selected under Sample Sheet Type.

What an SDRF sheet is

SDRF stands for Sample and Data Relationship Format. An SDRF sheet is a table saved as tab-separated text. Each row is one sample or measurement, and each column is one property of it. The proteomics community uses the format as SDRF-Proteomics. Biohub uses the same layout for mass spec and sequencing, so every platform describes samples the same way.

Columns come in families. The family is the word in front of the square brackets.

Column family What it holds Example
source name Your name for the sample. control_rep1
characteristics[...] The biology of the sample, such as organism, tissue, cell type and disease. characteristics[organism] is Homo sapiens
assay name, technology type The measurement on that row and the kind of assay. technology type is RNA-Seq
comment[...] Technical details such as instrument, label, fraction and data file. comment[fraction identifier] is 1
factor value[...] In Biohub sheets, the ontology ID of the matching characteristic. factor value[organism] is NCBITaxon:9606
BL[...], Illumina[...], PacBio[...] Details the Mass Spec or Genomics team needs to run your samples. BL[sample label], Illumina[Index]
bh[sdrf version] The sheet format version MOSAIC writes. Leave it alone. illumina/1.5

The public SDRF specification uses factor value[...] columns for the variables of an experiment. Biohub sheets use the fixed ones, such as factor value[organism], for the ID that goes with the name in the matching characteristics[...] column. Study variables you add in MOSAIC still export as factor value columns that hold the variable's value.

Ontology terms

Many columns take terms from public ontologies, curated vocabularies where every term has a label and a stable ID. Labels have synonyms and sometimes change. IDs don't, which is why a sheet carries both. MOSAIC looks terms up for you in the EBI Ontology Lookup Service and fills in the IDs, so you rarely type one.

Columns Ontology Label ID
organism, pathogenNCBI TaxonomyHomo sapiensNCBITaxon:9606
organism part, tissueUBERONliverUBERON:0002107
cell typeCell OntologyT cellCL:0000084
diseaseMONDO, with PATO for healthy samplesnormalPATO:0000461
cell lineCellosaurusHeLaCVCL_0030
technology type on Illumina and PacBio sheetsEFORNA-SeqEFO:0008896
label and instrument on Mass Spec sheetsPSI-MSlabel free sampleMS:1002038

Developmental stage uses the stage ontology for the organism, such as HsapDv for human, MmusDv for mouse and ZFA for zebrafish. MOSAIC picks the right one once you choose the organism.

When there is no value

Every cell needs something in it. Two phrases cover the gaps:

  • "not available" means the value exists but you don't know it.
  • "not applicable" means the property doesn't apply, like a passage number for a tissue sample.

Never leave a cell blank, and don't write none, NA, N/A, nan or null. BS3 treats all of those as empty and rejects the sheet. A few columns accept neither phrase, such as replicate numbers. The column reference marks them.

A small example

A handful of columns from a Mass Spec sheet. A real sheet has 30 or more.

source name characteristics[organism] characteristics[organism part] characteristics[experiment_or_group_id] characteristics[biological replicate] factor value[organism] BL[sample label]
control_rep1Homo sapienslivercontrol1NCBITaxon:9606Tube-01
control_rep2Homo sapienslivercontrol2NCBITaxon:9606Tube-02
treated_rep1Homo sapienslivertreated1NCBITaxon:9606Tube-03

Why BS3 asks for SDRF

BS3 passes your sheet to Deriva, Biohub's data catalog, where each row becomes a sample record attached to your data. The ontology IDs are what let anyone find, for example, every human liver sample across projects. A classic CSV sheet has to be converted first, and the conversion guesses at terms a scientist would pick better.

Read more in the EBI introduction to SDRF.

What MOSAIC is

MOSAIC, the Multi-Omics Sample Annotation & Creator, is the Biohub web app that builds SDRF sheets for mass spec, Illumina and PacBio. It knows which columns each platform needs, searches the ontologies as you type and fills in every ID.

  • Open MOSAIC and click Login with Okta. Use your CZ Biohub Okta account.
  • MOSAIC keeps one working sheet per account and saves your changes as you go. The status line reads "Saved to account". Reset sheet starts a new sheet. Discard draft drops the changes you haven't turned into a sheet with Generate sheet.
  • Column Help in the left menu explains every BL, Illumina and PacBio column. Sign in first.

Check two settings once

Open Settings in MOSAIC and make sure both of these switches are on. New accounts start with both on.

  • Enable Biohub Columns in output tsv adds the BL[...], Illumina[...] and PacBio[...] columns.
  • Include Factor Value Ontology Term ID Columns adds the factor value[...] ID columns. MOSAIC says this "may cause SDRF validation issues". That warning is about public SDRF validators. BS3 needs these columns.
MOSAIC Application Preferences. Enable Biohub Columns in output tsv, Include Factor Value Ontology Term ID Columns and Enable Required Biohub Validation Schema are switched on. Dark Mode is off.
Both export switches on. The last switch only affects the SDRF validator under Utilities.

With either switch off, MOSAIC refuses to export Illumina and PacBio sheets, and BS3 rejects Mass Spec sheets for missing columns.

Build your sheet in MOSAIC

Click Enter samples on the MOSAIC home page, or Single Sheet Builder in the left menu. The builder has five steps, and each one opens when the previous one is done. The MOSAIC screenshots on this page show version 1.6.1.

MOSAIC home page with two cards. By Sample (Bottom-Up) has an Enter samples button. By Experiment (Top-Down) has a Create a design button.
The MOSAIC home page. Enter samples opens the Single Sheet Builder.

1. Template

Pick your platform's template in the Experiment template list, then click Continue to experimental groups.

PlatformTemplate
Mass Spec Biohub MS Default Template for most experiments. Biohub MS Cell Line Template, Biohub MS Pathogen Template, Biohub MS Method Dev when they fit better.
IlluminaBiohub Illumina Template
PacBioBiohub PacBio Template

The template sets the sheet type, so only the Illumina and PacBio templates make sequencing sheets. It locks once you add a group. Delete all groups to change it.

Template step with Biohub MS Default Template chosen in the Experiment template list, a summary of its sample fields, and a Continue to experimental groups button.
Step 1 with a Mass Spec template chosen.

2. Experimental groups

A group is a set of samples that share their biology and condition, such as untreated HeLa cells. Click Add your first experimental group to open the Add Sample Group dialog.

Add Sample Group dialog for the Biohub MS Default Template. "control" is typed in Experiment/Group ID, and the Organism section starts below it.
The Add Sample Group dialog. Fields marked with a red asterisk are required.
  • Experiment/Group ID is a short name for the group, such as "control". It becomes part of every sample name.
  • Organism. Type at least three letters and pick the term from the list. MOSAIC won't accept an organism typed as a custom value, because it has no ID.
  • Tissue. Choose the Tissue Type first. It decides what else you must fill in. A cell line needs Cell Line and Passage Number, a cell culture needs Cell Type, a tissue or organoid needs Organism Part or Tissue, and an organelle needs Organelle.
  • Replication. Biological Replicates is how many samples the group has. Technical Replicates repeat each one. Fraction Count appears on Mass Spec sheets only. MOSAIC makes one row for every combination.
  • Conditions. Every group needs a Condition, such as "untreated".
  • Everything else is optional. Fill in what you know. MOSAIC exports the rest as "not available", or as "not applicable" where a field does not fit the tissue type, such as Passage Number on anything but a cell line.

Click Add Group. To make a similar group, click the copy icon on its card. The copy gets a numbered Experiment/Group ID, such as control2, so rename it and change what differs. A card marked Needs repair has a problem MOSAIC can point to. Click Repair group to fix it.

Experimental groups step with two group cards, control and treated, with two replicates each. Every card has edit, copy and delete icons. The overview counts 2 sample groups and 4 total samples.
Two groups. The second was made with the copy icon on the first card, then renamed and given its own condition.

Every ontology field searches as you type. Type at least three characters and pick a result. Some fields also list Suggested defaults before you type. The list starts with Standard options, Not applicable and Not available, for samples with no term. Use custom value only when no term fits, because a custom value has no ID.

Organism picker after typing "homo sapiens". Not applicable and Not available sit under Standard options, followed by search results that start with Homo sapiens.
An ontology search. Pick a search result so MOSAIC records its ID.

3. Source names

Choose how MOSAIC names each sample. Automatic builds names from the group, Choose fields builds them from up to five fields you pick, and Serial numbers counts up. Check the Name examples, then click Continue. The button names the next step: Continue to Biohub (BL) columns on a Mass Spec sheet, Continue to Illumina columns or Continue to PacBio columns on a sequencing sheet.

Source names step with Automatic selected and name examples such as control_homo_sapiens_control_rep1_frac1_tech1.
Step 3. The name examples preview the source name column.

4. Biohub columns

This step is named for your platform: Biohub (BL) columns on a Mass Spec sheet, Illumina columns or PacBio columns on a sequencing sheet. It lists every sample, with a cell for each facility column. The columns BS3 needs a real value in are marked Needed. Fill in real values wherever you can.

  • Type each sample's value. To give every sample the same value, pick the column under Fill a column, enter the value and click Fill every sample. You can also paste a block copied from a spreadsheet into any cell.
  • On an Illumina sheet MOSAIC checks each value as you type, against the BS3 upload rules that don't depend on your run, and refuses one that breaks them. For example, Illumina[Sample_ID] takes only letters, numbers, "-" and "_". Index lengths and unique names are still checked by BS3 at upload. On a PacBio sheet MOSAIC refuses only tabs, line breaks and double quotes.
  • For an Illumina index column your run doesn't use, such as Illumina[Index2_ID] and Illumina[Index2] on a single-index run, click Not used on this run under its header. MOSAIC writes "not available" in it on every sample.
  • A Needed cell you leave blank exports as "Please fill this value". The step counts those cells and reminds you that BS3 rejects the sheet until you fill them, here or in the downloaded file.

Click Continue to sheet target. Blank cells don't stop you, but the sheet target stays locked until you click it.

5. Sheet target

The sheet target applies to every group.

  • Mass Spec sheets need a Technology Type, such as "proteomic profiling by mass spectrometry", then an Analysis Type and a Mass Spec Platform.
  • Illumina and PacBio sheets need an EFO Assay, such as "RNA-Seq". MOSAIC writes it to the technology type columns.
Sheet target step for a Mass Spec sheet. Technology Type is proteomic profiling by mass spectrometry, Analysis Type is bulk sequencing and Mass Spec Platform is Orbitrap Fusion Lumos, with a Generate sheet button below.
The Sheet target step on a Mass Spec sheet.
Sheet target step for an Illumina sheet with EFO Assay set to RNA-Seq, EFO:0008896, and a Generate sheet button.
The Sheet target step on an Illumina sheet. PacBio sheets ask for an EFO Assay too.

Click Generate sheet. The finished table appears under Last generated sheet. Once a sheet exists the button reads Update sheet. Changes you make to groups reach the sheet, and its export, only after you click Update sheet.

Last generated sheet with a four-row SDRF table showing source name, organism, organism part, tissue type, condition and analysis type, and Annotate Samples and Export SDRF buttons below it.
The generated sheet. Export SDRF downloads it.

Shortcuts for bigger experiments

  • Power User Mode, a switch in the left menu, adds Bulk Sample Creation. It builds many groups from a CSV file.
  • Save as Template in the group dialog stores a group's fields so you can reuse them.
  • Build with AI drafts groups from a description. Check every field it fills in.
  • Experimental Designs describe an experiment once and derive a sheet from it.

Export and finish the sheet

  1. Under Last generated sheet, click Export SDRF.
  2. MOSAIC warns you about the facility columns and counts the cells, if any, that will download as "Please fill this value". Tick "I have read and understand what to fill in for the ... columns" and click Continue Export.
  3. Your browser downloads sdrf.tsv. MOSAIC may also show a pop-up listing Experiment/Group IDs it adjusted for BS3.
Biohub Columns Export Warning asking you to fill in every BL[term] column before submitting to BS3, with the "I have read and understand what to fill in for the BL columns" box ticked and a Continue Export button.
The export warning on a Mass Spec sheet.

MOSAIC writes the facility values you entered in the Biohub columns step. A Needed cell you left blank gets "Please fill this value", and the other blank cells get "not available". If the export warning counted any "Please fill this value" cells, fill them in that step, click Continue to sheet target, then Update sheet, and export again. Or open sdrf.tsv in a spreadsheet and replace each one. The checklist for your platform below says which columns matter.

Editing the TSV without breaking it

  • Google Sheets works well. Use File, Import, Upload, choose sdrf.tsv and keep the tab separator. When you finish, use File, Download, Tab-separated values.
  • Excel works with care. Save with File, Save As, Text (Tab delimited), then rename the file so it ends in .tsv. Never choose Unicode Text. It saves UTF-16, which BS3 can't read.
  • Spreadsheets reformat values that look like dates or numbers, such as the gene name MARCH1 or an ID with leading zeros. Check those cells before you save.
  • Google Sheets turns true and false into TRUE and FALSE. BS3 accepts either.

Whatever you edit with:

  • Keep every header exactly as MOSAIC wrote it. Header names are case-sensitive.
  • Don't delete columns, even ones full of "not available".
  • Don't leave blank lines, including one at the end of the file, or tabs after the last column.
  • Leave bh[sdrf version] and sdrf_conversion_notes as they are.

Mass Spec checklist

  • Template. One of the Biohub MS templates listed in step 1.
  • Sheet target. The Technology Type that matches your analysis: proteomic, metabolomic, lipidomic or imaging profiling by mass spectrometry. Then the Analysis Type and the Mass Spec Platform.
  • Facility columns. Fill in BL[preparation] and BL[sample label] on every row, and BL[multiplexing] for multiplexed samples. Fill in the other BL columns when you can. Leave out BL[injection volume], BL[method file], BL[plate id], BL[well position], BL[workflow], BL[searchgroup] and BL[experiment alias]. The Mass Spec team adds those. MOSAIC's BL column help describes each one.
  • Rules BS3 checks on Mass Spec sheets.
    • characteristics[experiment_or_group_id]: Every row needs a real value. "not available" is not accepted. Letters and numbers, with single hyphens between them, for example "3-0382". No spaces or underscores. "not available" is not accepted.
    • characteristics[organism]: Every row needs a value. Letters, numbers and spaces only. Strain names with hyphens or periods fail.
    • Replicate and fraction numbers: Every row needs a value. A whole number, 1 or higher.
    • Only comment[cleavage agent details] (one per enzyme) and comment[modification parameters] (one per PTM) may appear more than once. Keep those headers as MOSAIC writes them, without a number added to make them unique.
  • Upload. Use the Mass Spec submission form and its "Upload the sample sheet" field. Your project must already be approved, and the PI, institute, project ID and organization must match it. BS3 counts the samples from the rows of your sheet.

Illumina checklist

  • Template. Biohub Illumina Template.
  • Sheet target. The EFO Assay for your libraries, such as RNA-Seq.
  • Facility columns. Fill in these on every row: Illumina[Study_Description], Illumina[BioSample_Description], Illumina[Sample_ID], Illumina[Sample_Name], Illumina[Sample_Project] and Illumina[Index]. The exception is a pool of one library with no index read. Leave Illumina[Index] empty for it. "not available" is also accepted there.
  • Study_ID and Index_ID. Fill in Illumina[Study_ID] on every row, or write "not available" on every row, and do the same for Illumina[Index_ID]. BS3 rejects a column that mixes values with "not available". MOSAIC writes "not available" in each of these cells you leave blank, so in its Biohub columns step fill each column for every sample or for none.
  • Index 2. Illumina[Index2_ID] and Illumina[Index2]: Fill in every row, or leave every row empty or "not available". Fill both for dual-index runs. Write "not available" in both for single-index runs. BS3 rejects a pool that mixes the two.
  • Demultiplexing checks. The sequencing pipeline demultiplexes your run from these columns, so BS3 checks them with the classic sample sheet rules. The sheet needs one row per library in the pool. Index sequences use only A, C, G and T and have the index lengths you enter in the form, and every index pair is different. Sample_ID, Sample_Name and Sample_Project start with a letter and use only letters, numbers, "-" and "_". Sample_ID and Sample_Name are unique. Sample_Project is spelled with the same upper and lower case in every row. BioSample_Description has more than 5 characters. None of these cells contains commas or special characters. A "not available" counts as empty, so BS3 rejects it in every facility column except Illumina[Study_ID], Illumina[Index_ID] and the Index 2 columns. Illumina[Study_ID] and Illumina[Index_ID] take it only when every row uses it. Illumina[Index] accepts it, or an empty cell, only for the exception above. MOSAIC's Illumina column help explains every column.
  • Upload. Use the Illumina submission form for San Francisco or New York and its "Upload the sample sheet" field. The number of libraries in the pool and the index lengths you enter in the form must match the sheet.
Illumina Export Warning saying that missing or malformed values such as Study_ID, Sample_ID, Sample_Name, Index_ID and Index will block or delay the submission, with the acknowledgement box ticked.
The export warning on an Illumina sheet. PacBio sheets get the same warning for their columns.

PacBio checklist

  • Template. Biohub PacBio Template.
  • Sheet target. The EFO Assay for your libraries.
  • Facility columns. Fill in these on every row: PacBio[Study_ID], PacBio[Study_Description], PacBio[BioSample_Description], PacBio[Sample_Name], PacBio[Sample_Project] and PacBio[Index_ID]. The exception is a pool of one library with no index read. Leave PacBio[Index_ID] as "not available" for it.
  • BS3 rejects "not available" in PacBio[Study_Description], PacBio[BioSample_Description], PacBio[Sample_Name] and PacBio[Sample_Project], and only checks that PacBio[Study_ID] and PacBio[Index_ID] are filled in. The Genomics team needs real values in all of them. MOSAIC's PacBio column help explains every column.
  • Upload. Use the PacBio submission form and its "Upload barcode sample sheet" field. If the form shows an error, choose the file again before you resubmit, because the browser drops it. BS3 takes the submission's organism from characteristics[organism].

Upload it to BS3

  1. Open the submission form for your platform. Each checklist above links to it.
  2. Log in before you fill anything in, because logging in reloads the page. Use the yellow Log in with Okta link at the top of the form, which brings you back to it. CZ Biohub institutes only appear in the institute list after you log in.
  3. Choose your institute. For a CZ Biohub institute BS3 turns off the classic option and keeps Use SDRF selected.
  4. Pick your Deriva Study in the Metadata Hierarchy fields: Program, then Investigation, then Study. Submissions for a CZ Biohub institute need one.
  5. Under Sample Sheet Type keep Use SDRF, then choose your .tsv file in the upload field.
  6. Fill in the rest of the form and submit it.
Sample sheet section of the BS3 Mass Spec form. Use SDRF is selected, the "New to SDRF?" callout lists four steps above a Read the full SDRF & MOSAIC guide button, and the Upload the sample sheet field follows.
The sample sheet section of the Mass Spec form. The Illumina and PacBio forms show the same callout.

BS3 checks the sheet when you submit. It runs the checks in stages and stops at the first stage that fails. First come the file type and encoding, then the header and the shape of the rows, then each column's rules, then empty cells anywhere in the sheet, and last the organism IDs and duplicate rows. The column-rule and empty-cell stages list every failing column at once. Fixing one problem can reveal the next, so a hand edited sheet can take a few rounds.

The Illumina form shows sheet errors at the top of the page. The Mass Spec and PacBio forms show them under the upload field.

Fixing upload errors

The messages below are quoted exactly. Text in angle brackets, such as <column>, stands for the column or rows the message names.

BS3 says What it means How to fix it
Invalid file type: SDRF sample sheets must be TSV (Tab-Separated Values) files The file name does not end in .tsv. Upload the sdrf.tsv file that MOSAIC exported. If you edited it in a spreadsheet, download it as tab-separated values with a .tsv extension.
Cannot parse the samplesheet file BS3 could not read the file as tab-separated text. Saving from Excel as Unicode Text, which is UTF-16, causes this. Save the sheet again as plain tab-separated text. In Google Sheets that is File, Download, Tab-separated values.
An unknown error was encountered during SDRF samplesheet validation. <details> The file is not shaped like a sample sheet. A file with no header row does this. The Mass Spec form words the message a little differently. Start again from the MOSAIC export. If it keeps happening, email the platform team and attach the file.
The samplesheet is missing the following columns: <columns> These required headers are not in the first row. Header names must match exactly, including capitals, spaces and brackets. Export again from MOSAIC with both Settings switches on, and keep its headers as they are. The column reference on this page lists every required column.
Samplesheet has duplicated column names! Two columns share a header. Only comment[cleavage agent details] and comment[modification parameters] may repeat, and only on Mass Spec sheets. Two tabs at the end of a line also create repeated empty headers. Delete or rename the repeated column and remove trailing tabs.
<column> has one or more empty cells A required column has a blank cell, or a cell that says none, NA, N/A, nan or null. BS3 treats those words as empty. In a column that needs a real value, "not available" and "not applicable" count as empty too. Fill in every cell. Where the column reference allows it, write "not available" when a value is unknown and "not applicable" when it does not apply.
Column '<column>' has one or more empty cells The same rule applies to every other column, including ones you added. A tab at the end of every line creates an unnamed column, reported as Column ''. Fill in the column, delete it, or remove the trailing tabs.
Column '<column>' still has the placeholder "Please fill this value" at data rows <rows>. Replace it with the real value. MOSAIC writes "Please fill this value" in each cell only you can fill in, such as the sample names and index sequences, that you left blank in its Biohub columns step. BS3 rejects a sheet that still has one. This message numbers rows from the first sample row. Replace every "Please fill this value" with the real value, in the TSV or in MOSAIC's Biohub columns step before you export again. On a single-index Illumina run, write "not available" in Illumina[Index2_ID] and Illumina[Index2], or click Not used on this run under them in MOSAIC. For a pool of one library with no index read, leave Illumina[Index] empty, or click Not used on this run under it.
The samplesheet must have at least one row of data The file has a header row but no sample rows. Generate the sheet in MOSAIC before you export it.
Row <n> has <k> columns, but the header row has <m> columns. This could be due to commas in one or more cells. In a TSV this means a line has more or fewer tabs than the header. The usual causes are a tab typed inside a cell, a missing cell, or a blank line at the end of the file. The header counts as row 1. Fix that line or delete the blank line.
SDRF has duplicate (identical) rows at data rows: <rows> Two rows are identical in every column. This message numbers rows from the first sample row. Make every row describe a different sample or measurement, or delete the copy.
factor value[organism] has inconsistent ids <ids> for characteristics[organism] '<name>' One organism name is paired with different NCBI Taxonomy IDs in different rows. Use one ID per organism. Picking the organism from the MOSAIC dropdown keeps the name and the ID together.
characteristics[experiment_or_group_id] must contain only letters, numbers and single hyphens between them On Mass Spec sheets the Experiment/Group ID may contain only letters and numbers, with single hyphens between them. Spaces, underscores, a hyphen at the start or end, doubled hyphens and "not available" are all rejected. Rename the group in MOSAIC, for example to "control-1" instead of "control_1".
characteristics[organism] must be alphanumeric with spaces On Mass Spec sheets the organism name may contain only letters, numbers and spaces. A strain name such as "Escherichia coli K-12" is rejected. Choose the species-level term if it describes your samples. Otherwise email the Mass Spec team.
<column> must be an integer >= 1 Replicate and fraction numbers must be whole numbers from 1 up. These columns do not accept "not available". Use 1 when there is a single replicate or fraction.
<column> must be either empty or fully populated Illumina[Index_ID], Illumina[Index], Illumina[Index2_ID], Illumina[Index2] and sdrf_conversion_notes must be filled in on every row, or empty or "not available" on every row. BS3 rejects a pool that mixes single-index and dual-index libraries. Fill in both index 2 columns for every library, or for none of them, and do the same for Illumina[Index_ID]. Fill in Illumina[Index] for every library unless the pool is one library with no index read. Email the Genomics team before you submit a mixed pool.
Demultiplexing check failed: <problem> The sequencing pipeline demultiplexes your run from the Illumina[...] columns, so BS3 checks them with the classic sample sheet rules and the run details in the form. The message names the column, and data row 1 is the first sample row. A blank or "not available" index counts as empty. Correct that column in MOSAIC, or the number of libraries or index lengths in the form, then upload again.
Submissions for an internal CZ Biohub institute require you to log in. Please log in with Okta and try again. You chose a CZ Biohub institute without being logged in, or your login expired. Use the Log in with Okta link at the top of the form, which brings you back to it, then fill in the form again.
Internal CZ Biohub submissions must use SDRF sample sheets. Classic sample sheets are not available for internal submissions. CZ Biohub institutes cannot use the classic CSV sample sheet. Choose Use SDRF and upload the TSV you built in MOSAIC.

When MOSAIC refuses to export

MOSAIC says What it means How to fix it
Missing required headers for sequencing export: factor value[organism], factor value[organism part] MOSAIC refuses to export an Illumina or PacBio sheet while Include Factor Value Ontology Term ID Columns is off. Turn it on in MOSAIC Settings, then export again.
Illumina and PacBio sheets need the Illumina[...] or PacBio[...] columns BS3 requires. Turn on "Enable Biohub Columns in output tsv" in Settings, then export again. MOSAIC refuses to export an Illumina or PacBio sheet while Enable Biohub Columns in output tsv is off. Turn it on in MOSAIC Settings, then export again.

Column reference

Every column BS3 checks, per platform. This list is generated from the same checks BS3 runs at upload, so it always matches them. A sheet may carry extra columns, as long as every cell in them is filled in.

Mass Spec columns (40)
Column Required What BS3 checks "not available" allowed What to put in it
source name Yes Every row needs a value. Yes Your name for each sample, one per row. MOSAIC fills it from the Source names step.
characteristics[organism part] Yes Every row needs a value. Yes Anatomical part or tissue as an UBERON term name, for example "liver".
characteristics[cell type] Yes Every row needs a value. Yes Cell type as a Cell Ontology term name, for example "T cell".
characteristics[disease] Yes Every row needs a value. Yes Disease as a MONDO term name. Use "normal" for healthy samples.
characteristics[developmental stage] Yes Every row needs a value. Yes Developmental stage, from the stage ontology for the organism. That is HsapDv for human and MmusDv for mouse, for example.
characteristics[timepoint] Yes Every row needs a value. Yes Time point of the sample in a time series. MOSAIC writes "not available" when you leave Timepoint empty.
characteristics[tissue type] Yes Every row needs a value. Yes Kind of material. One of tissue, cell line, cell culture, organoid or organelle.
characteristics[organism] Yes Every row needs a value. Letters, numbers and spaces only. Yes Species the sample comes from, as its NCBI Taxonomy name, for example "Homo sapiens". Pick it from the MOSAIC dropdown so the matching ID lands in factor value[organism].
characteristics[experiment_or_group_id] Yes Every row needs a real value. "not available" is not accepted. Letters and numbers, with single hyphens between them, for example "3-0382". No spaces or underscores. No The Experiment/Group ID you gave the group in MOSAIC, for example "control".
characteristics[biological replicate] Yes Every row needs a value. A whole number, 1 or higher. No Biological replicate number within the group, counting from 1.
assay name Yes Every row needs a value. Yes Name of the measurement on that row. MOSAIC fills it.
technology type Yes Every row needs a value. Yes Kind of assay. MOSAIC fills it from Technology Type on Mass Spec sheets and from the EFO Assay you chose as the sheet target on Illumina and PacBio sheets.
comment[data file] Yes Every row needs a value. Yes Raw data file name. "not available" is fine at submission.
comment[label] Yes Every row needs a value. Yes Labeling as a PSI-MS term, for example "AC=MS:1002038;NT=label free sample".
comment[instrument] Yes Every row needs a value. Yes Mass spectrometer as a PSI-MS term. MOSAIC calls it Mass Spec Platform.
comment[fraction identifier] Yes Every row needs a value. A whole number, 1 or higher. No Fraction number. Use 1 when the sample is not fractionated.
comment[technical replicate] Yes Every row needs a value. A whole number, 1 or higher. No Technical replicate number, counting from 1.
factor value[organism] Yes Every row needs a value. Yes NCBI Taxonomy ID of the organism, for example "NCBITaxon:9606". Each organism name must map to one ID across the whole sheet.
factor value[organism part] Yes Every row needs a value. Yes UBERON ID of the organism part, for example "UBERON:0002107".
factor value[cell type] Yes Every row needs a value. Yes Cell Ontology ID of the cell type, for example "CL:0000084".
factor value[disease] Yes Every row needs a value. Yes MONDO ID of the disease. Healthy samples use "PATO:0000461".
factor value[developmental stage] Yes Every row needs a value. Yes Ontology ID of the developmental stage.
BL[preparation] Yes Every row needs a real value. "not available" is not accepted. No How samples with a similar biological background were prepared differently, such as the IP antibody, digestion enzyme or media. Examples are "0.1 DMSO" and "mock IP".
BL[sample label] Yes Every row needs a real value. "not available" is not accepted. No Label on the tube or plate position, for example "P4A4" or "Tube-001". It does not need to match the source name.
BL[sample description] Yes Every row needs a value. Yes Longer description of the sample, useful for grouping during analysis.
BL[preparation description] Yes Every row needs a value. Yes Longer description of the preparation method.
BL[fraction description] Yes Every row needs a value. Yes How the sample was fractionated, for example "Fraction 1 of 8".
BL[multiplexing] Yes Every row needs a value. Yes Required for multiplexed samples. Give the channel and lot number separated by a space, for example "131N set2".
BL[vessel format] Yes Every row needs a value. Yes What the sample is held in, for example "96-well plate" or "PCR tube".
BL[form] Yes Every row needs a value. Yes Material the platform receives, for example "cell pellet" or "dried digested peptide".
BL[quantity submitted] Yes Every row needs a value. Yes Amount of material in the vessel, as a number. The unit goes in BL[unit].
BL[unit] Yes Every row needs a value. Yes Unit of BL[quantity submitted], for example "ug" or "uL".
BL[notes] Yes Every row needs a value. Yes Anything else the Mass Spec team should know.
BL[injection volume] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[method file] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[plate id] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[well position] Optional Every row needs a value. A letter followed by letters or numbers, for example "A1", with no leading zeros ("A01" is rejected). 1, 2 and 3 are accepted only on the reagent plates SR, SG, SB and SY. S0 is only for MS imaging. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[workflow] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[searchgroup] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
BL[experiment alias] Optional Every row needs a value. Yes The Mass Spec team fills this in after submission, and BS3 sets BL[experiment alias] itself. Leave this column out of your sheet.
Illumina columns (43)
Column Required What BS3 checks "not available" allowed What to put in it
source name Yes Every row needs a value. Yes Your name for each sample, one per row. MOSAIC fills it from the Source names step.
characteristics[organism] Yes Every row needs a value. Yes Species the sample comes from, as its NCBI Taxonomy name, for example "Homo sapiens". Pick it from the MOSAIC dropdown so the matching ID lands in factor value[organism].
characteristics[pathogen] Yes Every row needs a value. Yes Pathogen in the sample as an NCBI Taxonomy name, or "not applicable".
characteristics[sex] Yes Every row needs a value. Yes Sex. One of female, male, mixed, unknown or not applicable.
characteristics[tissue type] Yes Every row needs a value. Yes Kind of material. One of tissue, cell line, cell culture, organoid or organelle.
characteristics[tissue] Yes Every row needs a value. Yes Tissue the sample comes from. MOSAIC copies the Organism Part you picked.
characteristics[developmental stage] Yes Every row needs a value. Yes Developmental stage, from the stage ontology for the organism. That is HsapDv for human and MmusDv for mouse, for example.
characteristics[disease] Yes Every row needs a value. Yes Disease as a MONDO term name. Use "normal" for healthy samples.
characteristics[organism part] Yes Every row needs a value. Yes Anatomical part or tissue as an UBERON term name, for example "liver".
characteristics[cell type] Yes Every row needs a value. Yes Cell type as a Cell Ontology term name, for example "T cell".
characteristics[modified cell line] Yes Every row needs a value. Yes Details of a modified cell line, when there is one.
characteristics[cell line] Yes Every row needs a value. Yes Cell line as its Cellosaurus name, for example "HeLa".
characteristics[biological replicate] Yes Every row needs a value. Yes Biological replicate number within the group, counting from 1.
characteristics[perturbation] Yes Every row needs a value. Yes Perturbation applied to the sample. Write "not applicable" rather than "none", because BS3 treats "none" as an empty cell.
characteristics[passage number] Yes Every row needs a value. Yes Passage number of a cell line. MOSAIC writes "not applicable" for samples that are not a cell line.
characteristics[growth medium] Yes Every row needs a value. Yes Growth medium the cells were grown in.
characteristics[timepoint] Yes Every row needs a value. Yes Time point of the sample in a time series. MOSAIC writes "not available" when you leave Timepoint empty.
assay name Yes Every row needs a value. Yes Name of the measurement on that row. MOSAIC fills it.
technology type Yes Every row needs a value. Yes Kind of assay. MOSAIC fills it from Technology Type on Mass Spec sheets and from the EFO Assay you chose as the sheet target on Illumina and PacBio sheets.
comment[multiplexing] Yes Every row needs a value. Yes "true" when the pool holds more than one library, otherwise "false". MOSAIC fills it.
factor value[organism] Yes Every row needs a value. Yes NCBI Taxonomy ID of the organism, for example "NCBITaxon:9606". Each organism name must map to one ID across the whole sheet.
factor value[pathogen] Yes Every row needs a value. Yes NCBI Taxonomy ID of the pathogen.
factor value[tissue] Yes Every row needs a value. Yes UBERON ID of the tissue. MOSAIC copies the organism part ID.
factor value[technology type] Yes Every row needs a value. Yes EFO ID of the assay, for example "EFO:0008896" for RNA-Seq. MOSAIC fills it from the sheet target.
factor value[developmental stage] Yes Every row needs a value. Yes Ontology ID of the developmental stage.
factor value[disease] Yes Every row needs a value. Yes MONDO ID of the disease. Healthy samples use "PATO:0000461".
factor value[organism part] Yes Every row needs a value. Yes UBERON ID of the organism part, for example "UBERON:0002107".
factor value[cell type] Yes Every row needs a value. Yes Cell Ontology ID of the cell type, for example "CL:0000084".
factor value[cell line] Yes Every row needs a value. Yes Cellosaurus accession of the cell line, for example "CVCL_0030".
factor value[perturbation] Yes Every row needs a value. Yes Ontology ID of the perturbation. MOSAIC writes "not available" because its perturbation field is free text.
factor value[growth medium] Yes Every row needs a value. Yes Ontology ID of the growth medium. MOSAIC writes "not available" because its growth medium field is free text.
Illumina[Sample_ID] Yes Every row needs a value. No Short, unique ID for each library, for example "L001". Starts with a letter and uses only letters, numbers, "-" and "_". It can be the same as Sample_Name.
Illumina[Study_Description] Yes Every row needs a value. No What the project behind this run is about. No commas or special characters.
Illumina[BioSample_Description] Yes Every row needs a value. No Description of the biological sample, longer than 5 characters and the same for every library made from it. No commas or special characters.
Illumina[Study_ID] Yes Every row needs a value. Fill in every row, or leave every row empty or "not available". Yes Short ID for your study or project, following your group's conventions. Letters, numbers, "-" and "_", for example "TDR".
Illumina[Sample_Name] Yes Every row needs a value. No Unique, descriptive name for each library. It becomes the FASTQ file name. Starts with a letter and uses only letters, numbers, "-" and "_".
Illumina[Sample_Project] Yes Every row needs a value. No Your FirstName_LastName, or the project each library should be demultiplexed into. Starts with a letter and uses only letters, numbers, "-" and "_".
Illumina[Index_ID] Yes Fill in every row, or leave every row empty or "not available". Yes Name of the first index, for example "Nextera-N700".
Illumina[Index] Yes Every row needs a value, except in a pool of one library with no index read, where the cell may be empty or "not available". No Sequence of index 1, the i7 index, for example "ATAGCGCT". Leave the cell empty only for a pool of one library with no index read. "not available" is also accepted there.
Illumina[Index2_ID] Yes Fill in every row, or leave every row empty or "not available". Yes Name of the second index. Write "not available" in every row for single-index runs.
Illumina[Index2] Yes Fill in every row, or leave every row empty or "not available". Yes Sequence of index 2, the i5 index. Fill in every row for dual-index runs, or write "not available" in every row for single-index runs.
sdrf_conversion_notes Yes Fill in every row, or leave every row empty or "not available". Yes Notes from MOSAIC's classic-to-SDRF converter. Sheets built in MOSAIC carry "[]". Leave it as it is.
bh[sdrf version] Yes Every row needs a value. Yes Sheet format version that MOSAIC writes, for example "illumina/1.5". Don't edit it.
PacBio columns (38)
Column Required What BS3 checks "not available" allowed What to put in it
source name Yes Every row needs a value. Yes Your name for each sample, one per row. MOSAIC fills it from the Source names step.
characteristics[organism] Yes Every row needs a value. Yes Species the sample comes from, as its NCBI Taxonomy name, for example "Homo sapiens". Pick it from the MOSAIC dropdown so the matching ID lands in factor value[organism].
characteristics[pathogen] Yes Every row needs a value. Yes Pathogen in the sample as an NCBI Taxonomy name, or "not applicable".
characteristics[sex] Yes Every row needs a value. Yes Sex. One of female, male, mixed, unknown or not applicable.
characteristics[tissue type] Yes Every row needs a value. Yes Kind of material. One of tissue, cell line, cell culture, organoid or organelle.
characteristics[tissue] Yes Every row needs a value. Yes Tissue the sample comes from. MOSAIC copies the Organism Part you picked.
characteristics[developmental stage] Yes Every row needs a value. Yes Developmental stage, from the stage ontology for the organism. That is HsapDv for human and MmusDv for mouse, for example.
characteristics[disease] Yes Every row needs a value. Yes Disease as a MONDO term name. Use "normal" for healthy samples.
characteristics[organism part] Yes Every row needs a value. Yes Anatomical part or tissue as an UBERON term name, for example "liver".
characteristics[cell type] Yes Every row needs a value. Yes Cell type as a Cell Ontology term name, for example "T cell".
characteristics[modified cell line] Yes Every row needs a value. Yes Details of a modified cell line, when there is one.
characteristics[cell line] Yes Every row needs a value. Yes Cell line as its Cellosaurus name, for example "HeLa".
characteristics[biological replicate] Yes Every row needs a value. Yes Biological replicate number within the group, counting from 1.
characteristics[perturbation] Yes Every row needs a value. Yes Perturbation applied to the sample. Write "not applicable" rather than "none", because BS3 treats "none" as an empty cell.
characteristics[passage number] Yes Every row needs a value. Yes Passage number of a cell line. MOSAIC writes "not applicable" for samples that are not a cell line.
characteristics[growth medium] Yes Every row needs a value. Yes Growth medium the cells were grown in.
characteristics[timepoint] Yes Every row needs a value. Yes Time point of the sample in a time series. MOSAIC writes "not available" when you leave Timepoint empty.
assay name Yes Every row needs a value. Yes Name of the measurement on that row. MOSAIC fills it.
technology type Yes Every row needs a value. Yes Kind of assay. MOSAIC fills it from Technology Type on Mass Spec sheets and from the EFO Assay you chose as the sheet target on Illumina and PacBio sheets.
factor value[organism] Yes Every row needs a value. Yes NCBI Taxonomy ID of the organism, for example "NCBITaxon:9606". Each organism name must map to one ID across the whole sheet.
factor value[pathogen] Yes Every row needs a value. Yes NCBI Taxonomy ID of the pathogen.
factor value[tissue] Yes Every row needs a value. Yes UBERON ID of the tissue. MOSAIC copies the organism part ID.
factor value[technology type] Yes Every row needs a value. Yes EFO ID of the assay, for example "EFO:0008896" for RNA-Seq. MOSAIC fills it from the sheet target.
factor value[developmental stage] Yes Every row needs a value. Yes Ontology ID of the developmental stage.
factor value[disease] Yes Every row needs a value. Yes MONDO ID of the disease. Healthy samples use "PATO:0000461".
factor value[organism part] Yes Every row needs a value. Yes UBERON ID of the organism part, for example "UBERON:0002107".
factor value[cell type] Yes Every row needs a value. Yes Cell Ontology ID of the cell type, for example "CL:0000084".
factor value[cell line] Yes Every row needs a value. Yes Cellosaurus accession of the cell line, for example "CVCL_0030".
factor value[perturbation] Yes Every row needs a value. Yes Ontology ID of the perturbation. MOSAIC writes "not available" because its perturbation field is free text.
factor value[growth medium] Yes Every row needs a value. Yes Ontology ID of the growth medium. MOSAIC writes "not available" because its growth medium field is free text.
PacBio[Study_Description] Yes Every row needs a real value. "not available" is not accepted. No What the project behind this run is about. No commas or special characters.
PacBio[BioSample_Description] Yes Every row needs a real value. "not available" is not accepted. No Description of the biological sample, longer than 5 characters and the same for every library made from it. No commas or special characters.
PacBio[Study_ID] Yes Every row needs a value. Yes Short ID for your study or project, following your group's conventions. Letters, numbers, "-" and "_", for example "TDR".
PacBio[Sample_Name] Yes Every row needs a real value. "not available" is not accepted. No Unique, descriptive name for each library. It becomes the FASTQ file name. Starts with a letter and uses only letters, numbers, "-" and "_".
PacBio[Sample_Project] Yes Every row needs a real value. "not available" is not accepted. No Your FirstName_LastName, or the project each library should be demultiplexed into. Starts with a letter and uses only letters, numbers, "-" and "_".
PacBio[Index_ID] Yes Every row needs a value. Yes Name of the first index, for example "Nextera-N700". Leave the cell empty only for a pool of one library with no index read. "not available" is also accepted there.
sdrf_conversion_notes Yes Fill in every row, or leave every row empty or "not available". Yes Notes from MOSAIC's classic-to-SDRF converter. Sheets built in MOSAIC carry "[]". Leave it as it is.
bh[sdrf version] Yes Every row needs a value. Yes Sheet format version that MOSAIC writes, for example "illumina/1.5". Don't edit it.

Questions

Can I build an SDRF sheet without MOSAIC?

You can, but you would type every header and ontology ID yourself. MOSAIC writes the exact headers BS3 expects and looks up the IDs. The column reference lists everything a hand-made sheet needs.

Can one sheet hold several organisms?

Yes. Each organism name has to keep the same ID on every row.

Can I change a value after I export?

Yes. Edit the TSV as described in Export and finish the sheet, or change the group in MOSAIC, click Update sheet under Sheet target and export again. MOSAIC exports the last sheet you generated, so group edits you haven't applied with Update sheet are not in the file. A new export writes only what MOSAIC has, so a value you typed only into the TSV is lost. Enter facility values in the Biohub columns step where you can.

How do I start a second sheet?

MOSAIC keeps one working sheet per account. Export the current one, then click Reset sheet and pick a template.

My pool mixes single-index and dual-index libraries

BS3 can't take that in one SDRF sheet. Email the Genomics team before you submit.

Getting help

Mass Spec:

Illumina and PacBio:

Problems with MOSAIC itself go through Report a bug in the MOSAIC header. Problems with BS3 go through Report a bug at the bottom of this page.

Glossary

SDRF
Sample and Data Relationship Format, a tab-separated table with one row per sample or measurement.
MOSAIC
The Biohub web app that builds SDRF sheets.
Ontology term
An entry in a curated vocabulary, with a label such as "liver" and an ID such as UBERON:0002107.
OLS
The EBI Ontology Lookup Service, which MOSAIC searches when you type in an ontology field.
Facility columns
The BL, Illumina and PacBio columns, which carry what the Mass Spec and Genomics teams need.
TSV
Tab-separated values, a text file where a tab separates the cells of each row.
Deriva
Biohub's data catalog. BS3 sends it your sheet with your data.