← BioTransfer Blog
File formats · SequencingJuly 17, 2026

From FASTQ to Results: The File Formats Behind Every Sequencing Analysis

You followed the tutorial. You pasted the command. It ran — then it broke on the next sample, or the output looked wrong, and suddenly you're lost, because nobody ever told you what the files actually are.

Here's the secret every bioinformatician knows and rarely says out loud: a sequencing analysis is not really a list of commands. It's a chain of files, where each step reads one format and writes another. Understand the files, and the commands become obvious. Memorise the commands without the files, and you're one error message away from being stuck.

So let's ignore the commands entirely. This is a field guide to the files themselves — what each one holds, where it comes from, and where it goes next.

The whole pipeline, on one line

Almost every DNA/RNA sequencing analysis — RNA-seq, variant calling, ChIP-seq, ATAC-seq — is a variation on this exact flow. Watch the file formats on the arrows, not the tools:

THE FILE THAT FLOWS → FASTQ raw reads align BAM / CRAM aligned reads count / call count matrix genes × samples · RNA-seq VCF variants · genome/exome Results gene lists, plots, variant tables FASTA + GTF/GFF reference genome + annotation — the "map" every step reads against

Every arrow is a tool. Every box is a file format. Debugging almost always means asking: which box did the data go wrong in, and does its file still look the way it should?

The eight formats worth actually knowing

You will meet these again and again. For each: what it is, a real peek inside, where it comes from, and where it goes.

FASTQ .fastq · .fq · .gz

Raw reads straight off the sequencer. Every read is 4 lines: an ID, the DNA sequence, a + separator, and a quality string — one character per base saying how confident the machine was.

@SRR123.1  read identifier
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCC
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**  ← quality per base
Comes fromThe sequencer (Illumina, etc.), or downloaded from SRA / ENA Goes toAn aligner → BAM. Or straight into QC (FastQC). GotchaPaired-end runs give two files: _R1 and _R2. They must stay together and in order.
FASTA .fasta · .fa

Sequences without quality scores. The reference genome, a set of gene sequences, or protein sequences. Just a > header line followed by the letters.

>chr1  reference sequence for chromosome 1
NNNNNNNNNNNNTAACCCTAACCCTAACCCTAACCCTAACC
CTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAAC
Comes fromEnsembl, UCSC, NCBI (the reference); or your assembly output Goes toThe aligner reads it as the "map" to place your FASTQ reads onto RememberFASTQ = your reads + quality. FASTA = reference sequence, no quality.
SAM / BAM / CRAM aligned reads

Your reads after they've been placed onto the genome. Each line says: this read sat here, on this chromosome, matching this well. SAM is the human-readable text version; BAM is the same thing compressed (binary); CRAM is smaller still.

Comes fromAn aligner (BWA, Bowtie2, STAR, HISAT2) reading FASTQ + FASTA Goes toVariant callers, peak callers, or counting tools Why so bigIt holds every single read plus where it mapped. A BAM is usually sorted by position and indexed (a .bai file) so genome browsers can jump around instantly. GotchaYou can't open a BAM in a text editor — it's binary. You "read" it through a viewer (IGV) or a tool.
VCF variants

The differences between your sample and the reference. One row per variant: the position, what the reference base was, what your sample had instead, and how confident the caller is.

#CHROM  POS     REF  ALT  QUAL
chr1    14653   C    T    212   ← a SNP: C became T
chr7   117559   ATG  A    340   ← a deletion
Comes fromA variant caller (GATK, bcftools) reading a BAM against the reference Goes toAnnotation (what gene? harmful?), filtering, clinical interpretation GotchaA VCF records only differences. "Not in the file" means "same as reference" — not "not sequenced."
GTF / GFF annotation

The genome's table of contents. FASTA tells you the letters; GTF/GFF tells you what those letters mean — where each gene, exon, and transcript starts and ends.

Comes fromEnsembl / GENCODE / NCBI — always paired to a specific genome build Goes toCounting tools, to turn "reads at position X" into "reads in gene Y" GotchaThe annotation build must match your genome build. GRCh37 coordinates on a GRCh38 genome = silently wrong genes.
BED regions

A simple list of genomic regions. Three columns is enough: chromosome, start, end. Used for peaks (ChIP/ATAC-seq), target regions, or "these are the spots I care about."

The famous trapBED is 0-based (counting starts at 0); GTF, VCF and GFF are 1-based. The same base can be "100" or "99" depending on the file — the classic off-by-one in every beginner's script.
Count matrix .csv · .tsv · genes × samples

The output of RNA-seq, and the input to your statistics. A plain table: rows are genes, columns are samples, each cell is "how many reads landed in this gene, in this sample."

gene      ctrl_1  ctrl_2  treat_1  treat_2
TP53       842     910     1503     1620
GAPDH     9931    9820     9905     9877
Comes fromA counter (featureCounts, HTSeq) or a pseudo-aligner (Salmon, kallisto) Goes toDESeq2 / edgeR / limma → your differential-expression gene list Why it mattersThis is where a biologist takes back over. Everything before it was plumbing; everything after is your biology.
H5AD / MTX / Loom single-cell

A count matrix, but for thousands of cells at once. Too big and too sparse to be a plain CSV, so single-cell data gets packed into container formats that bundle the matrix plus per-cell and per-gene metadata in one file.

You'll see.h5ad (Scanpy/Python), .rds Seurat objects (R), .mtx triplets (10x), .loom The pointThey're all "cells × genes + labels." The format is just which ecosystem made it.

The mental model to keep

You don't need to memorise flags. You need to be able to answer four questions at any point in a pipeline: What file am I holding? What's supposed to be inside it? What made it? What's it feeding next?

When something breaks, one of those four answers will be wrong — an empty FASTQ, a BAM that never got indexed, a GTF from the wrong genome build, a count matrix with a shifted column. That's the whole game. The command was never the hard part.

Rule of thumb: if you can't say what a file should look like before you open it, you're not ready to trust what comes out of it.

Need to move these files between labs?

FASTQ and BAM files are huge. BioTransfer sends them encrypted, browser-to-storage, with no size headaches — free.

Try BioTransfer →

Part of the Bioinformatics Tutorials series · more explainers on workflows and formats coming next.

Published July 17, 2026 · BioTransfer · More posts