SOFT file format and content
Overview Back to top
Simple Omnibus Format in Text (SOFT) is a simple line-based, plain text format, that was originally developed by GEO for data submissions, updates, and downloads. GEO discontinued the use of SOFT format for data submissions and updates in early 2024, but continues to make all records available for download in SOFT format. A single SOFT file can hold both data tables and accompanying descriptive information for multiple, concatenated Platforms (GPL records), Samples (GSM records), and/or Series (GSE records), and the format can be programmatically-accessed or opened in common spreadsheet and database applications.
This document was originally written to guide submitters on how to construct a SOFT file for the purpose of submitting to GEO, but now serves only as a guide to users on the structure and content of SOFT files downloaded from GEO. As such, some of the information provided is no longer applicable (i.e. any information pertaining to submission requirements or recommendations is not applicable).
Examples of SOFT files are available to view.
SOFT format structure and content Back to top
The following section explains the components and structure of a SOFT file.
-
Line-type characters: There are four different types of line that are recognized in SOFT.
The presence of any one of three characters in the first character position in the line indicates
three of the line types, and the absence of any of these indicates the fourth line type.
The four line-type characters and descriptions of what they indicate are:
Symbol Description Line type ^ caret lines entity indicator line ! bang lines entity attribute line # hash lines data table header description line n/a data lines data table row -
Label-value pairs: Label-value pairs are the generic way that lines are organized.
Data lines are the only line types that are not organized in label-value pairs. Label-value pairs have the form:
- [line-type character] [label] = [value]
-
Entity types (caret lines): Entity type and its unique identifier are indicated as
a label-value pair on the caret lines. The entity's unique ID is any string of characters
different from any other entity ID within the document (i.e., locally unique).
As described in the Overview submitters supply three entity types: PLATFORM, SAMPLE and SERIES.
Entity type Example entity indicator line Platform ^PLATFORM = my_array_name Sample ^SAMPLE = my_sample_name Series ^SERIES = my_series_name -
Attributes (bang lines): Entity attributes are contained in bang lines and
immediately follow caret lines or other bang lines.
The second column in the table indicates the 'number of allowed values' per attribute:
- '1' indicates required, only one value allowed
- '1 or more' indicates required, one or more values allowed
- '0 or more' indicates not required, zero or more values allowed
Several Sample attributes have _[n] where [n] indicates the channel number. For example, !Sample_label_ch[2]=Cy3 indicates that Cy3 was the label in one of the channels of a two-color experiment. If the experiment is single channel, _[n] may be omitted from the attribute.
- Data table header description lines (hash lines): Data table header descriptions are contained in hash lines and immediately follow caret lines, bang lines, or other hash lines. Hash lines take the label-value pair form. Hash lines are used to provide a description of the headers named in the header line of the data table.
Label | Number of allowed labels | Allowed values and constraints | Content description |
---|---|---|---|
^PLATFORM | 1 | any, must be unique within local file | Provide an identifier for this entity. This identifier is used only as an internal reference within a given file. The identifier will not appear on final GEO records. |
!Platform_title | 1 | string of length 1-120 characters, must be unique within local file and over all previously submitted Platforms for that submitter | Provide a unique title that describes the Platform. |
!Platform_distribution | 1 | commercial, non-commercial, custom-commercial, or virtual | Microarrays are 'commercial', 'non-commercial', or 'custom-commercial' in accordance with how the array was manufactured. 'Virtual' is used only for high throughput sequencing or RT-PCR data. |
!Platform_technology | 1 | spotted DNA/cDNA, spotted oligonucleotide, in situ oligonucleotide, antibody, tissue, SARST, RT-PCR, or MPSS | Select the category that best describes the Platform technology. |
!Platform_organism | 1 or more | use standard NCBI Taxonomy nomenclature | Identify the organism(s) from which the features on the Platform were designed or derived. |
!Platform_manufacturer | 1 | any | Provide the name of the company, facility or laboratory where the array was manufactured or produced. |
!Platform_manufacture_protocol | 1 or more | any | Describe the array manufacture protocol. Include as much detail as possible, e.g., clone/primer set identification and preparation, strandedness/length, arrayer hardware/software, spotting protocols. |
!Platform_catalog_number | 0 or more | any | Provide the manufacturer catalog number for commercially-available arrays. |
!Platform_web_link | 0 or more | valid URL | Specify a Web link that directs users to supplementary information about the array. |
!Platform_support | 0 or 1 | any | Provide the surface type of the array, e.g., glass, nitrocellulose, nylon, silicon, unknown. |
!Platform_coating | 0 or 1 | any | Provide the coating of the array, e.g., aminosilane, quartz, polysine, unknown. |
!Platform_description | 0 or more | any | Provide any additional descriptive information not captured in another field, e.g., array and/or feature physical dimensions, element grid system. |
!Platform_contributor | 0 or more | each value in the form 'firstname,middleinitial,lastname' or 'firstname,lastname': firstname must be at least one character and cannot contain spaces; middleinitial, if present, is one character; lastname is at least two characters and can contain spaces. | List all people associated with this array design. |
!Platform_pubmed_id | 0 or more | an integer | Specify a valid PubMed identifier (PMID) that references a published article that describes the array. |
!Platform_geo_accession | 0 or 1 | a valid Platform accession number (GPLxxx) | |
!Platform_table_begin | 1 | no content required | Indicates the start of the data table. |
!Platform_table_end | 1 | no content required | Indicates the end of the data table. |
Label | Number of allowed labels | Allowed values and constraints | Content description |
---|---|---|---|
^SAMPLE | 1 | any, must be unique within local file | Provide an identifier for this entity. This identifier is used only as an internal reference within a given file. The identifier will not appear on final GEO records. |
!Sample_title | 1 | string of length 1-120 characters, must be unique within local file and over all previously submitted Samples for that submitter | Provide a unique title that describes this Sample. |
!Sample_supplementary_file | 1 or more | name of supplementary file, or 'none' | Examples of supplementary file types include original Affymetrix CEL and EXP files, and GenePix GPR files. |
!Sample_table | 0 or 1 | name of external CHP or tab-delimited file to be used as data table | - Affymetrix CHP file name: If the processed data are CHP files, reference the CHP file name in this field. If the manuscript discusses data processed by RMA or another algorithm, we recommend providing those values in the table section. There is no need to specify the !Sample_platform_id when CHP files are supplied. |
!Sample_source_name_ch[n] | 1 per channel | any | Briefly identify the biological material and the experimental variable(s), e.g., vastus lateralis muscle, exercised, 60 min. |
!Sample_organism_ch[n] | 1 or more | use standard NCBI Taxonomy nomenclature | Identify the organism(s) from which the biological material was derived. |
!Sample_characteristics_ch[n] | 1 or more | 'Tag: Value' format | Describe all available characteristics of the biological source, including factors not necessarily under investigation. Provide in 'Tag: Value' format, where 'Tag' is a type of characteristic (e.g. "gender", "strain", "tissue", "developmental stage", "tumor stage", etc), and 'Value' is the value for each tag (e.g. "female", "129SV", "brain", "embryo", etc). |
!Sample_biomaterial_provider_ch[n] | 0 or more | any | Specify the name of the company, laboratory or person that provided the biological material. |
!Sample_treatment_protocol_ch[n] | 0 or more | any | Describe any treatments applied to the biological material prior to extract preparation. |
!Sample_growth_protocol_ch[n] | 0 or more | any | Describe the conditions that were used to grow or maintain organisms or cells prior to extract preparation. |
!Sample_molecule_ch[n] | 1 per channel | total RNA, polyA RNA, cytoplasmic RNA, nuclear RNA, genomic DNA, protein, or other | Specify the type of molecule that was extracted from the biological material. |
!Sample_extract_protocol_ch[n] | 1 or more | any | Describe the protocol used to isolate the extract material. |
!Sample_label_ch[n] | 1 per channel | any | Specify the compound used to label the extract e.g., biotin, Cy3, Cy5, 33P. |
!Sample_label_protocol_ch[n] | 1 or more | any | Describe the protocol used to label the extract. |
!Sample_hyb_protocol | 1 or more | any | Describe the protocols used for hybridization, blocking and washing, and any post-processing steps such as staining. |
!Sample_scan_protocol | 1 or more | any | Describe the scanning and image acquisition protocols, hardware, and software. |
!Sample_data_processing | 1 or more | any | Provide details of how data in the VALUE column of the table were generated and calculated, i.e., normalization method, data selection procedures and parameters, transformation algorithm (e.g., MAS5.0), and scaling parameters. |
!Sample_description | 0 or more | any | Include any additional information not provided in the other fields, or broad descriptions that cannot be easily dissected into the other fields. |
!Sample_platform_id | 1 | a valid Platform identifier | Reference the Platform upon which this hybridization was performed. |
!Sample_geo_accession | 0 or 1 | a valid Sample accession number (GSMxxx) | |
!Sample_anchor | 1 | SAGE enzyme anchor, usually NlaIII or Sau3A | Use for SAGE submissions only. |
!Sample_type | 1 | SAGE | Use for SAGE submissions only. |
!Sample_tag_count | 1 | sum of tags quantified in SAGE library | Use for SAGE submissions only. |
!Sample_tag_length | 1 | base pair length of the SAGE tags, excluding anchor sequence | Use for SAGE submissions only. |
!Sample_table_begin | 1 | no content required | Indicates the start of the data table. |
!Sample_table_end | 1 | no content required | Indicates the end of the data table. |
Label | Number of allowed labels | Allowed values and constraints | Content description |
---|---|---|---|
^SERIES | 1 | any, must be unique within local file | Provide an identifier for this entity. This identifier is used only as an internal reference within a given file. The identifier will not appear on final GEO records. |
!Series_title | 1 | string of length 1-255 characters, must be unique within local file and over all previously submitted Series for that submitter | Provide a unique title that describes the overall study. |
!Series_summary | 1 or more | any | Summarize the goals and objectives of this study. The abstract from the associated publication may be suitable. |
!Series_overall_design | 1 | any | Provide a description of the experimental design. Indicate how many Samples are analyzed, if replicates are included, are there control and/or reference Samples, dye-swaps, etc. |
!Series_pubmed_id | 0 or more | an integer | Specify a valid PubMed identifier (PMID) that references a published article describing this study. |
!Series_web_link | 0 or more | valid URL | Specify a Web link that directs users to supplementary information about the study. |
!Series_contributor | 0 or more | each value in the form 'firstname,middleinitial,lastname' or 'firstname,lastname': firstname must be at least one character and cannot contain spaces; middleinitial, if present, is one character; lastname is at least two characters and can contain spaces. | List all people associated with this study. |
!Series_variable_[n] | 0 or more | dose, time, tissue, strain, gender, cell line, development stage, age, agent, cell type, infection, isolate, metabolism, shock, stress, temperature, specimen, disease state, protocol, growth protocol, genotype/variation, species, individual, or other | Indicate the variable type(s) investigated in this study, e.g., !Series_variable_1 = age !Series_variable_2 = age NOTE - this information is optional and does not appear in Series records or downloads, but will be used to assemble corresponding GEO DataSet records. |
!Series_variable_description_[n] | 0 or more | any | Describe each variable, e.g., !Series_variable_description_1 = 2 months !Series_variable_description_2 = 12 months NOTE - this information is optional and does not appear in Series records or downloads, but will be used to assemble corresponding GEO DataSet records. |
!Series_variable_sample_list_[n] | 0 or more | each value a valid reference to a ^SAMPLE identifier, or all | List which Samples belong to each group, e.g., !Series_variable_sample_list_1 = samA, samB !Series_variable_sample_list_2 = samC, samD NOTE - this information is optional and does not appear in Series records or downloads, but will be used to assemble corresponding GEO DataSet records. |
!Series_repeats_[n] | 0 or more | biological replicate, technical replicate - extract, or technical replicate - labeled-extract | Indicate the repeat type(s), e.g., !Series_repeats_1 = biological replicate !Series_repeats_2 = biological replicate NOTE - this information is optional and does not appear in Series records or downloads, but will be used to assemble corresponding GEO DataSet records. |
!Series_repeats_sample_list_[n] | 0 or more | each value a valid reference to a ^SAMPLE identifier, or all | List which Samples belong to each group, e.g., !Series_repeats_sample_list_1 = samA, samB !Series_repeats_sample_list_2 = samC, samD NOTE - this information is optional and does not appear in Series records or downloads, but will be used to assemble corresponding GEO DataSet records. |
!Series_sample_id | 1 or more | valid Sample identifiers | Reference the Samples that make up this experiment. Reference the Sample accession numbers (GSMxxx) if the Samples already exists in GEO, or reference the ^Sample identifiers if they are being submitted in the same file. |
!Series_geo_accession | 0 or 1 | a valid Series accession number (GSExxx) |
Platform data table formatBack to top
- A Platform data table should lie between the !Platform_table_begin and !Platform_table_end attributes.
- Data tables must be in plain text (ASCII) tab-delimited format.
- Each row of the Platform table is represented by its own unique identifier (ID). The ID column provided in the Platform table corresponds to the ID_REF column used in accompanying Sample data tables - there should be a 1:1 correspondence. Sample data tables should contain normalized data.
- The Platform table must include meaningful, trackable, sequence identifiers (e.g. GenBank/RefSeq accessions, locus tags, clone IDs, oligo sequences, chromosome locations, etc - see table below for full list). This information enables users to comprehensively interpret the data in compliance with MIAME standards, and allows GEO to retrieve up-to-date annotation for the Platform when incorporated into our downstream data query tools. References to in-house databases or top BLAST hits are not sufficient.
Standard Platform Headers
The first row in the Platform table is a header line that identifies the content of each column. Column headers may be standard or non-standard. At least one standard column (other than ID) is supplied with each Platform submission.
In addition to these standard columns, the data table may include any number of non-standard columns. Examples of non-standard columns include array coordinate information, gene symbol or description, gene ontology terms, quality indicators, etc. Columns may appear in any order after the ID column.
Standard column headers and their content are as follows:
HEADER | CONTENT |
---|---|
ID | (Required) An identifier that unambiguously identifies each row on the Platform table. Each ID within a Platform table must be unique. This column heading should appear first and may be used only once in the data table. Sample data tables should contain normalized data. If the normalization strategy requires taking the average of replicate array features, the Platform should reflect the condensed template. |
SEQUENCE | The nucleotide sequence of each oligo, clone or PCR product. |
GB_ACC | GenBank accession - identifies a biological sequence through the GenBank sequence accession number assigned to the sequence, or the representative GenBank or RefSeq accession number upon which the sequence was designed. It is recommended to include the version number of the accessions upon which the sequences were designed (e.g., NM_022975.1 rather than NM_022975). This is particularly important for RefSeq accessions which are updated frequently. GenBank accessions representing the top BLAST hits for the sequences are not acceptable. Also, chromosome, genome and contig accession numbers are generally not acceptable as they are not specific enough to accurately identify the portion of the sequence printed on arrays (use GB_RANGE instead). |
GB_LIST | GenBank accession list - as for GB_ACC, but allows more than one GenBank accession number to be presented. For example, the sequences may have GenBank accession numbers representing both the 5' and 3' ends of the clones. Multiple accession numbers should be separated using commas or spaces. Alternatively, more than one GB_ACC column may be supplied. |
GB_RANGE | GenBank accession range - specifies a particular sequence position within a GenBank accession number. Use format ACCESSION.VERSION[start..end]. Useful for tiling arrays. |
RANGE_GB | Use format ACCESSION.VERSION. Should be used in conjunction with RANGE_START and RANGE_END. Useful for tiling arrays. |
RANGE_START | Use in conjunction with RANGE_GB. Indicates the start position (relative to the RANGE_GB accession). Useful for tiling arrays. |
RANGE_END | Use in conjunction with RANGE_GB. Indicates the end position (relative to the RANGE_GB accession). Useful for tiling arrays. |
RANGE_STRAND | Use in conjunction with RANGE_GB. Indicates the strand represented. Use + or - or empty. Useful for tiling arrays. |
GI | GenBank identifier - as for GB_ACC, but specify the GenBank identifier number rather than the GenBank accession number. |
GI_LIST | GenBank identifier list - as for GI, but allows more than one GenBank identifier to be presented. Multiple GIs should be separated using commas or spaces. Alternatively, more than one GI column may be supplied. |
GI_RANGE | GenBank identifier range - specifies a particular sequence position on a GenBank identifier number. Use format GI[start..end]. |
CLONE_ID | Clone identifier - identifies a biological sequence through a standard clone identifier. Only CLONE_IDs that can be used to identify the sequence through an NCBI or other public-database query should be provided in this column. Examples include FlyBase IDs, RIKEN clone IDs and IMAGE clone numbers. |
CLONE_ID_LIST | CLONE_ID list - as for CLONE_ID, but allows more than one clone identifier to be presented. Multiple Clone IDs should be separated using commas or spaces. Alternatively, more than one CLONE_ID column may be supplied. |
ORF | Open reading frame designator - identifies a biological sequence through an experimentally or computationally derived open reading frame identifier. The ORF designator is intended to represent a known or predicted DNA coding region or locus_tag identified in NCBI Datasets division. It may be appropriate to include a GENOME_ACC column to reference the GenBank accession from which the ORF names are derived. |
ORF_LIST | ORF list - as for ORF, but allows more than one open reading frame designator to be presented. Multiple ORFs should be separated using commas or spaces. Alternatively, more than one ORF column may be supplied. |
GENOME_ACC | Genome accession number - specifies the GenBank or RefSeq genome accession number from which ORF identifiers are derived. It is important to include the version number of the genome accession upon which the sequences were generated (e.g., NC_004721.1 rather than NC_004721) because updates to the genome sequence may render the ORF designations incorrect. |
SNP_ID | SNP identifier - typically specifies a dbSNP refSNP ID with format rsXXXXXXXX. |
SNP_ID_LIST | SNP identifier list - as for SNP_ID, but allows more than one SNP_ID to be presented. Multiple SNP_IDs should be separated using commas or spaces. Alternatively, more than one SNP_ID column may be supplied. |
miRNA_ID | microRNA identifier - typically has format e.g., hsa-let-7a or MIRNLET7A2. |
miRNA_ID_LIST | microRNA identifier list - as for miRNA_ID, but allows more than one miRNA_ID to be presented. Multiple miRNA_IDs should be separated using commas or spaces. Alternatively, more than one miRNA_ID column may be supplied. |
SPOT_ID | Alternative spot identifier - use only when no identifier or sequence tracking information is available. This column is useful for designating control and empty features. |
ORGANISM | The organism source of each feature on the array. This is most useful for when the array contains sequences derived from multiple organisms. |
PT_ACC | Protein accession - identifies any GenBank or RefSeq protein accession number. Protein accession numbers should only be supplied for protein arrays. Nucleotide accession numbers should be supplied for nucleotide arrays. |
PT_LIST | Protein accession list - as for PT_ACC, but allows more than one protein accession number to be presented. Multiple accession numbers should be separated using commas or spaces. Alternatively, more than one PT_ACC column may be supplied. Protein accession numbers should only be supplied for protein arrays. Nucleotide accession numbers should be supplied for nucleotide arrays. |
PT_GI | Protein GenBank or RefSeq identifier. Protein identifiers should only be supplied for protein arrays or proteomic mass spectrometry Platforms. Nucleotide identifiers should be supplied for nucleotide arrays. |
PT_GI_LIST | Protein identifier list - as for PT_GI, but allows more than one protein identifier to be presented. Multiple identifiers should be separated using commas or spaces. Alternatively, more than one PT_GI column may be supplied. Protein identifiers should only be supplied for protein arrays. Nucleotide identifiers should be supplied for nucleotide arrays. |
SP_ACC | SwissProt accession. SwissProt accession numbers should only be supplied for protein arrays. Nucleotide accession numbers should be supplied for nucleotide arrays. |
SP_LIST | SwissProt accession list - as for SP_ACC, but allows more than one SwissProt accession number to be presented. Multiple accession numbers should be separated using commas or spaces. Alternatively, more than one SP_ACC column may be supplied. SwissProt accession numbers should only be supplied for protein arrays. Nucleotide accession numbers should be supplied for nucleotide arrays. |
Sample data table contentBack to top
- A Sample data table should lie between the !Sample_table_begin and !Sample_table_end attributes (unless supplying Affymetrix CHP files or external text files, see !Sample_table attribute description).
- Normalized values should be included in the table.
- The Sample data table should only contain information that pertains to the quantification measurements. With the exception of the ID information, no annotation data that can be found on the reference Platform should be included in the Sample record.
Sample data table headers and content
The first row in the file must be a header line that identifies the content of each column. The two required columns are listed below. In addition to the required columns, submitters may supply any number of auxiliary non-standard columns describing, for example, supporting measurements and calculations, quality evaluations or flags. Columns may appear in any order after the ID_REF column.
- ID_REF: (Required) Identifier reference - these should match the unique identifiers given in the identifier (ID) column of the corresponding Platform data table.
-
VALUE: (Required) These values should be the final, normalized quantification measurements that are comparable across rows and Samples,
and preferably processed as described in any accompanying manuscript.
Values that should be discarded (e.g., background higher than count, or otherwise flagged as 'bad')
should either be left blank or labeled as "null".
- For single channel data, this column should contain normalized (scaled) signal count data.
- For dual channel data, this column should contain normalized log ratio data (preferably test/reference).
SOFT file examplesBack to top
The following examples (data tables truncated at 20 rows) represent valid GEO SOFT submissions:
- An example of a SOFT file containing a single Platform submission.
- An example of a SOFT file containing three dual channel Sample submissions.
- An example of a SOFT file containing a single Series submission.
- An example of a SOFT file containing a family (Platform, Samples and Series) submission.
- An example of a SOFT file containing three Affymetrix Samples and one Series submission.
- An example of a SOFT file containing three Affymetrix Samples and one Series submission referencing CHP files.
SOFT downloadBack to top
SOFT format for batch download contains a few additional attributes in the output, including:
_geo_accession
_status
_submission_date
_last_update_date
_row_count
_contact_name
_contact_email
_contact_institute
_contact_department
_contact_city
_contact_phone
_contact_fax
_contact_web_link
Sample_channel_count
Series_type