NCBI » GEO » Info » SOFT file format and contentLogin

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:
    SymbolDescriptionLine type
    ^caret linesentity indicator line
    !bang linesentity attribute line
    #hash linesdata table header description line
    n/adata linesdata table row
    For simplicity, these lines are referred to as caret lines, bang lines, hash lines, and data lines, respectively.
  • 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 typeExample 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.
LabelNumber of allowed labelsAllowed values and constraintsContent 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.
LabelNumber of allowed labelsAllowed values and constraintsContent 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.
LabelNumber of allowed labelsAllowed values and constraintsContent 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:

HEADERCONTENT
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:

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

Last modified: May 2, 2024