# Ensembl Transcript Protein Domains: Step-by-Step Guide

A protein domain is a conserved, independently folding stretch of a protein that usually carries a discrete function, such as a kinase catalytic domain or a DNA binding helix-turn-helix. Ensembl attaches domain annotations to the protein products of its transcripts, so a single Ensembl transcript identifier (an ID like ENST00000269305) gives you access to a rich map of Pfam, PROSITE, SMART, and other curated domains laid out along the encoded protein. Those annotations are the raw material for many analyses: deciding which exons to screen first in a mutation study, judging whether an alternative splice variant loses a functional region, classifying a newly discovered gene into a family, or comparing domain repertoires across species.

This guide walks through the three main ways to work with Ensembl transcript protein domains. By the end you will be able to:

1. Find and read the protein domain graphic for any transcript in the [Ensembl genome browser](/blog/guides/ensembl-genome-browser).
2. Retrieve domain annotations programmatically for one transcript or thousands, using the Ensembl REST API and BioMart.
3. Validate that the coordinates you pulled are correct, and avoid the version and identifier problems that trip up most first-timers.

You will need a web browser, a Unix-style shell with curl (or any language that can issue HTTP requests), and, for the bulk workflow, R with the biomaRt package. All examples use human data, but the same steps work for the other species Ensembl covers, including the plants and other taxa served by Ensembl Genomes.

## What Protein Domain Data Ensembl Provides

Ensembl does not predict protein domains itself. It maps annotations from InterPro, an integrated resource that combines several member databases, including Pfam, PROSITE, SMART, and PRINTS, onto the proteins predicted from Ensembl transcripts. Each domain entry carries three things you will use constantly:

- A stable accession, for example a Pfam ID such as PF00870 for the p53 DNA binding domain.
- Human-readable names, such as "[Protein kinase](/knowledge/molecular-biology/protein-kinase)" for the canonical kinase domain found in hundreds of human genes.
- Start and end positions measured in amino acids along that specific transcript's protein, not in genomic coordinates.

This design has a long track record in real projects. The TRANSFAC database, for example, assigned Pfam, SMART, and PROSITE domains to [transcription factor](/knowledge/molecular-biology/transcription-factor) protein sequences automatically using InterProScan, the same annotation engine that underpins the domain data Ensembl displays [1]. The TrAPSS system for mutation screening similarly leaned on conserved protein functional domains to prioritize which candidate disease genes to screen first, rather than amplifying every exon of every gene [2]. Understanding where the annotations come from matters because it tells you what the data can and cannot support: a Pfam hit is a curated profile match with an evidence level, not an experimental structure determination.

The domain display is tied to the transcript, not just the gene. A gene with many isoforms can produce proteins with different domain architectures, which is exactly why "transcript protein domains" is the unit of analysis rather than "gene protein domains."

## Before You Start: Tools and Setup

Install or confirm the following:

- A modern web browser for the Ensembl website at ensembl.org.
- curl, available by default on macOS and most Linux distributions. On Windows, curl ships with recent versions or can be run inside WSL.
- Python 3 if you prefer scripting REST calls, though plain curl is enough to follow every command in this guide.
- R 4.x with biomaRt installed from Bioconductor if you plan the bulk retrieval workflow. Install it with `BiocManager::install("biomaRt")`.

One habit to adopt immediately: record the Ensembl release number with every dataset you download. Ensembl is re-released on a regular cycle, and transcript models, protein translations, and domain mappings can all change between releases. For reproducible work, pin your analysis to a specific release or use the archive site for that release.

## Step-by-Step: Reading Domains in the Ensembl Genome Browser

![Five ordered steps from finding the TP53 gene to exporting protein sequence and domain coordinates from the Ensembl transcript tab.](/article-images/illustrations/ensembl-transcript-protein-domains-browser-domain-steps.webp)

This section is a compact Ensembl [genome browser tutorial](/blog/guides/genome-browsers-for-researchers-a-guide-to-inspecting-genomic-evidence) focused specifically on domains. If you have never learned how to use Ensembl before, follow these five steps exactly and you will end up with both a picture and machine-readable text for one transcript.

### Step 1: Find Your Gene

Go to ensembl.org, choose Homo sapiens in the species selector, and type a gene symbol such as TP53 into the search box. Press Enter. The result page lists matching genes with stable IDs. Click the TP53 gene card to land on the Gene tab. The URL ends with the gene stable ID, ENSG00000141510 for TP53.

A quick sanity check before you continue: confirm the species banner at the top of the page and the assembly version shown in the region navigation bar. Working on GRCh38 while your collaborators work on GRCh37 coordinates is one of the most common sources of silent errors, so note the assembly now.

### Step 2: Choose a Transcript

The Gene tab shows a transcript table. Each row is one Ensembl transcript with its ID, biotype (protein coding, noncoding, and so on), length, and a small schematic of its exons. Ensembl flags one transcript as the canonical transcript, the one it treats as the reference product of the gene. For TP53 the canonical transcript is ENST00000269305. Click the transcript ID to open the Transcript tab.

If your downstream analysis needs a different isoform, this is where you choose it. The canonical transcript is a sensible default, but alternative isoforms can differ sharply in their domain content, a point the browser graphics will make obvious.

### Step 3: Read the Protein Domains Panel

Scroll to the "Protein domains" section of the Transcript tab. You will see the protein drawn to scale as a horizontal bar, with colored blocks for each domain from the InterPro member databases. Hover over a block to see the source database, the accession, the name, and the start and end positions in amino acids. The "Translation table" section, usually just below, aligns each exon with the codons and amino acids it contributes, which is the fastest way to see which exons encode a given domain.

As a worked example, open a seven-transmembrane G protein-coupled receptor such as ADGRE1. The protein domain panel shows the intracellular and extracellular regions plus repeated epidermal growth factor (EGF)-like calcium binding domains in the extracellular portion, matching what the literature describes for this rapidly evolving macrophage marker [3]. Seeing the repeats laid out to scale immediately tells you how many copies the annotated transcript carries and where they start and end.

### Step 4: Configure the Display

Click "Configure this page" and open the "Transcript" or "Protein" options. You can turn domain sources on or off, show the underlying [protein sequence](/blog/guides/protein-sequence) with domain segments shaded, and enable the "Translation table" so exon boundaries sit next to domain boundaries. Save the configuration, and the domain graphic reloads with your choices. This matters when a protein carries many overlapping predictions from several databases and you want to compare Pfam-only versus the full InterPro picture.

### Step 5: Export Sequence and Coordinates

From the Transcript tab, use the "Export data" button in the left menu. Choose FASTA to grab the protein sequence, or GFF3 to get feature annotations including domain segments with coordinates. Name the output files with the transcript ID and the release number, for example `ENST00000269305_GRCh38_release_re110.fa`. That small naming habit prevents the classic mistake of comparing domain coordinates from one release against a protein sequence from another.

## Step-by-Step: Pulling Domains with the Ensembl REST API

The browser is excellent for one gene. For programmatic work, the Ensembl REST API returns the same underlying annotation as JSON over plain HTTP. The base URL is `https://rest.ensembl.org/`.

### Step 1: Single Transcript Lookup

Query the transcript with expansion to include its translation and domains:

```
curl -s "https://rest.ensembl.org/lookup/id/ENST00000269305?expand=1" \
  -H "Content-Type: application/json" -H "Accept: application/json"
```

The `lookup` endpoint returns a JSON object describing the transcript. The `expand=1` parameter asks the server to embed child objects, including the `Translation` object, which contains a `domains` array. Each element of that array describes one domain match, with the database accession, display name, description, InterPro cross-reference where one exists, and the protein-level start and end. An abridged example of what one element looks like for TP53:

```
{
  "object_type": "protein_domain",
  "id": "PF00870",
  "display_id": "P53",
  "description": "P53",
  "interpro_id": "IPR008966",
  "analysis": "Pfam",
  "start": 97,
  "end": 289,
  "version": 8
}
```

Two parameters matter here:

- `expand`, with value 0 or 1. Without it, the response has no translation and therefore no domains.
- `Accept`, which controls the output format. JSON is the default for this endpoint. Setting `Content-Type` and `Accept` explicitly makes the call predictable and, per Ensembl's usage guidance, you should also send a descriptive contact email in the `User-Agent` header when you script against the API.

### Step 2: Domain Features Directly

If you only want domain segments, the overlap endpoint gives them without the full transcript tree:

```
curl -s "https://rest.ensembl.org/overlap/id/ENST00000269305?feature=protein_domain" \
  -H "Accept: application/json"
```

This returns a compact list of `protein_domain` features for the transcript's protein, each with `start` and `end` in amino acid coordinates. For a kinase, expect a single dominant block matching the protein kinase domain, which is the same Pfam kinase profile that large family surveys use when they mine Ensembl predictions, such as the screen that identified 561 candidate protein kinases and 162 candidate protein phosphatases in mouse using a panel of InterPro domains [4].

Convert a domain to a protein sequence slice when you need the actual residues:

```
curl -s "https://rest.ensembl.org/sequence/id/ENST00000269305?type=protein" \
  -H "Accept: text/x-fasta"
```

Then slice the returned FASTA sequence from the domain start to the domain end in Python or R. The key parameter is `type`: `type=protein` returns the translation, while `type=cdna` returns the full cDNA, a distinction that becomes important when you map protein coordinates back onto nucleotides.

### Step 3: Batch Queries

For many transcripts at once, use POST with a list of IDs. This is the efficient way to do Ensembl transcript protein domains step by step at scale:

```
curl -s -X POST "https://rest.ensembl.org/lookup/id?expand=1" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -A "my-analysis-script (contact@example.edu)" \
  -d '{"ids": ["ENST00000269305", "ENST00000366667"]}'
```

The response is a list of transcript objects in the same shape as the single lookup. Practical tips that save hours:

- Keep batches to a few hundred IDs. If a POST grows large, the request can time out server-side, typically surfacing as an HTTP 504 response, so chunk your ID list and write each chunk to disk.
- Clean your IDs first. Strip version suffixes like `.11` unless the documentation for the endpoint says they are supported, and confirm every ID is a transcript ID (ENST prefix), because a gene ID (ENSG prefix) mixed into a transcript call is a common trigger for errors.

### Step 4: Rate Limits, Mirrors, and Errors

![Decision path for a failed Ensembl REST request: check the ID prefix, then slow down on 429, then check biotype on an empty domain list.](/article-images/illustrations/ensembl-transcript-protein-domains-rest-error-triage.webp)

Ensembl asks automated users to keep request rates low and identifies scripts by their headers. If you exceed the allowed rate, the server responds with HTTP status 429 and asks you to slow down, so add a small sleep between requests in a loop, for example 0.05 to 0.1 seconds. For users in North America, the mirror hosts `useast.ensembl.org` and `uswest.ensembl.org` serve the same REST paths and can be faster and more reliable than the default European endpoint, so swap the host in the URL if you see repeated timeouts.

The most common errors, with what you will actually see and how to fix them:

- HTTP 404 with a body like `{"error": "ID not found"}`. The ID is wrong for the species or is not a transcript ID. Check the ID on the website, confirm species, and retry.
- HTTP 429. You are sending requests too fast. Add a sleep, reduce parallel connections, and retry after a pause.
- An empty `domains` array on a lookup that succeeded. The transcript has no protein product or no domain hits. Check the transcript biotype in the same response before assuming failure.

## Step-by-Step: Bulk Retrieval with BioMart and biomaRt

BioMart is Ensembl's bulk query system, and biomaRt is the standard R interface to it. This is the right tool when you want a table of domains for every transcript in a set, or for the whole genome, without looping over REST calls.

```
library(biomaRt)

ensembl <- useEnsembl(
  biomart = "genes",
  dataset = "hsapiens_gene_ensembl",
  mirror  = "useast"
)

domains <- getBM(
  attributes = c(
    "ensembl_transcript_id_version",
    "external_gene_name",
    "pfam", "pfam_start", "pfam_end",
    "interpro", "interpro_description"
  ),
  filters    = "ensembl_transcript_id_version",
  values     = c("ENST00000269305.11"),
  mart       = ensembl
)

print(domains)
```

Expected output is one row per domain hit per transcript, for example:

```
  ensembl_transcript_id_version external_gene_name    pfam pfam_start pfam_end interpro
1           ENST00000269305.11               TP53 PF00870         97      289 IPR008966
  interpro_description
1   P53 DNA-binding domain
```

Every transcript that has a Pfam hit appears with its domain start and end in amino acids. Transcripts with no hits simply do not return rows for the domain attributes, which is expected behavior, not an error.

Key parameters:

- `attributes` selects the columns. The `pfam`, `pfam_start`, and `pfam_end` triple gives coordinates, while `interpro` and `interpro_description` give the integrated entry. Add `uniprotswissprot` if you want to cross-check against Swiss-Prot reviewed entries.
- `filters` is the input key. Using `ensembl_transcript_id_version` forces exact matching on versioned IDs, which avoids silently grabbing the wrong release of a transcript.
- `mirror` chooses the server. For US users, `useast` or `uswest` usually performs better than the default European host.

For a whole-family pull, set `values` to a vector of transcript IDs, or use a gene-symbol-based filter for exploratory work. A typical next step, mirroring published family surveys, is to download all protein sequences for the recovered transcripts and scan them yourself with InterProScan or HMMER against a Pfam profile, then cluster the sequences to separate true family members from proteins of related biochemistry, the approach used to classify the mouse kinome and phosphatome from Ensembl gene predictions [4]. For plant genes, point biomaRt at Ensembl Plants and repeat the same attribute query. That pipeline identified 35 maize Snf2 family members, each carrying conserved SNF2-N and Helicase-C domains, along with motif and gene structure analysis built on the Ensembl Plants annotation [5].

## Table: Key Endpoints, Parameters, and When to Use Each

| Task | Tool | Command or option | Key parameters | Notes |
|--|--|--|--|--|
| View domains graphically | Ensembl browser | Transcript tab, "Protein domains" panel | Configure this page | Best for single genes and sanity checks |
| One transcript, full detail | REST | `GET /lookup/id/:id` | `expand=1` | Returns transcript, translation, and domains as JSON |
| Domain segments only | REST | `GET /overlap/id/:id` | `feature=protein_domain` | Compact list, protein coordinates |
| Protein sequence slice | REST | `GET /sequence/id/:id` | `type=protein` | Pair with domain start and end to extract residues |
| Many transcripts | REST | `POST /lookup/id` | JSON body with `ids` | Chunk into hundreds, watch timeouts |
| Thousands of transcripts | BioMart or biomaRt | `getBM()` with domain attributes | `pfam`, `pfam_start`, `pfam_end`, `interpro` | One row per domain per transcript |
| Older release for reproducibility | Archive site or pinned REST | Use the release archive URL for the date you need | Same endpoints | Pin the release in your methods |

## Why Transcript-Level Domain Data Earns Its Keep

Four published use cases show what this data supports, and each maps onto a workflow you can run with the commands above.

First, alternative splicing. When a transcript skips an exon or uses an alternate terminal exon, the encoded protein can lose an entire domain or a binding region. The EXPANSION web server was built on exactly this observation. Its developers retrieved protein-coding Ensembl transcripts, mapped InterPro domains and post-translational modification sites onto canonical sequences, and combined that with isoform-specific interaction data to interpret the functional consequences of splice variants in cancer genomics [6]. You can reproduce the core logic for your own gene: pull all transcript IDs for the gene, fetch each protein sequence, align them, and note which Pfam blocks fall inside skipped exons.

Second, comparative and evolutionary analysis. Functional diversity across a gene family can be quantified as counts of paralogues, protein isoforms, and structural domains per gene, and that quantity can be correlated with traits such as cell-type number across species, an analysis carried out directly on open-access Ensembl data [7]. The REST homology endpoint, for example `GET /homology/id/:id` with `type=paralogs`, gives you the paralog lists needed for that kind of count, which you combine with domain counts from the lookup endpoint.

Third, marker genes that differ across species. The ADGRE1 study used RNA-Seq comparisons across eight mammalian species and found extra exons in several species relative to the current Ensembl annotations, along with evidence that ruminant and horse sequences encode a complete duplication of the seven EGF-like domains [3]. The practical lesson for your own work is to treat the annotated transcript as a reference, not ground truth, and to check your species of interest against the browser graphic before designing antibodies or primers.

Fourth, prioritization under constraints. When a mutation screen covers hundreds of genes and thousands of exons, screening everything is expensive, and scoring candidate genes by conserved functional domains is a rational way to order the workload, the rationale behind TrAPSS [2]. The same logic applies to any budget-limited experimental validation: transcripts whose skipped or disrupted region overlaps a known catalytic domain rank higher than transcripts whose change falls between domains.

## Validating That Your Domain Data Is Right

Run these checks before you trust any pulled dataset:

1. Coordinate bounds. Every domain end must be less than or equal to the protein length. Compute the protein length from the FASTA you fetched with `type=protein` and compare. A domain end beyond the protein length means you mixed releases or pulled coordinates against a different transcript version.
2. Transcript-to-gene agreement. In biomaRt, request `ensembl_gene_id` alongside the transcript ID and confirm each transcript belongs to the gene you intended.
3. Cross-database consistency. Fetch the same protein's UniProt reviewed entry and compare the domain blocks. Exact boundaries can differ between Pfam profile cutoffs and manual curation, but gross architecture, such as a kinase domain in the first third of the protein, should agree.
4. Release stamp. Add the Ensembl release number to every saved table. biomaRt lets you query a specific dataset version, and the archive site serves the browser view for past releases, so pin both in your methods text.

## Common Mistakes and Limitations

- Querying with the wrong ID type. Passing a gene ID (ENSG) to a transcript endpoint, or a protein ID (ENSP) to a transcript lookup, returns a not-found error rather than a helpful hint. Remember the prefixes: ENSG for gene, ENST for transcript, ENSP for protein.
- Ignoring version suffixes. `ENST00000269305` and `ENST00000269305.11` are not interchangeable in every context. Versioned IDs pin an exact transcript model, which is what you want for reproducibility, but biomaRt filters and some endpoints need you to match the format you request.
- Mixing releases. Domain coordinates are relative to the protein sequence of that release. If the transcript model changed between releases, old coordinates can point to the wrong residues. Always download the protein sequence and the domains from the same release.
- Assuming every transcript has domains. Noncoding transcripts have no protein product, and even coding transcripts can return no Pfam or InterPro hits when the protein is short, poorly conserved, or matches profiles below the reporting threshold. An empty result is a real result.
- Treating all domain sources as equivalent. Pfam, PROSITE, SMART, and the other member databases use different methods and thresholds, so their boundaries can overlap or disagree. The InterPro integration exists to reconcile them, but for quantitative claims, pick one source and state it.
- Confusing domains with motifs or sites. A domain is a large conserved unit. Short motifs and individual post-translational modification sites are separate annotation types. EXPANSION, for instance, maps domains and modification sites as distinct layers on Ensembl transcripts [6], and collapsing them into one category will distort any counting analysis.
- Over-reading domain presence. A detected domain says a profile matched. Functional claims usually need the family-level context that careful analyses provide, which is why published kinome and phosphatase surveys did not stop at domain detection but went on to cluster sequences and compare against known enzyme biochemistry [4].
- Ignoring rate limits and load. Scripts that hammer the REST endpoint get throttled, and mirrors exist for a reason. Set an identifying user agent, sleep between calls, and use BioMart for anything above a few hundred IDs.
- Forgetting nonhuman species quirks. For plants and other nonvertebrate taxa, use Ensembl Genomes and its Plants mart rather than the vertebrate endpoint, as the maize Snf2 study did [5]. Species-specific annotation gaps also exist, as the ADGRE1 comparison showed for several mammals [3], so check the transcript model, not just the gene symbol.

## Frequently Asked Questions

### Where do Ensembl transcript protein domain annotations come from?

They come from InterPro and its member databases, including Pfam, PROSITE, and SMART, mapped onto the proteins predicted from Ensembl transcripts. Ensembl displays and serves these mappings but does not run its own domain prediction.

### What is the difference between a Pfam ID and an InterPro ID?

A Pfam ID, such as PF00870, is an entry from one member database, based on a hidden Markov model profile of a protein family. An InterPro ID, such as an IPR number, is an integrated entry that aggregates matching entries from member databases into a single higher-level classification.

### How do I get protein domains for all transcripts of one gene?

Call the REST lookup endpoint on the gene ID with `expand=1` to get all transcripts, then call the overlap endpoint with `feature=protein_domain` for each transcript, or use biomaRt with a gene filter and the `pfam` and `interpro` attributes to get everything in one table.

### Do all Ensembl transcripts have protein domain annotations?

No. Noncoding transcripts have no protein product, and some coding transcripts return no domain hits because the protein is short, fragmentary, or below the detection thresholds of the member databases. An empty domain list is not an error.

### How do I make my domain analysis reproducible across Ensembl releases?

Record the Ensembl release number with every download, prefer versioned transcript IDs, and use the Ensembl archive site or a pinned release for any past date you need to reproduce. Re-pull the protein sequence and domain coordinates together from that same release.

### Can I get domain positions in genomic coordinates?

The REST domain features are given in protein coordinates. To place them on the genome, use the transcript's exon structure from the lookup response or the browser's translation table to map codons back through cDNA positions to genomic positions, or export the region in GFF3 from the browser for prebuilt feature files.

### What is the fastest way to retrieve domains for thousands of transcripts?

Use BioMart or biomaRt for bulk tabular pulls, and use the REST POST form of the lookup endpoint for batched programmatic queries in chunks of a few hundred IDs. Looping single REST requests over thousands of IDs wastes time and risks throttling.

### How do I compare protein domains across species in Ensembl?

Fetch orthologous or paralogous transcripts through the Ensembl homology endpoints or browser gene trees, then pull the domain lists for each species' transcripts and compare architectures. This is the same open-access Ensembl data used to quantify paralogues, isoforms, and domain counts as measures of functional diversity across species [7].

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Where do Ensembl transcript protein domain annotations come from?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "They come from InterPro and its member databases, including Pfam, PROSITE, and SMART, mapped onto the proteins predicted from Ensembl transcripts. Ensembl displays and serves these mappings but does not run its own domain prediction."
      }
    },
    {
      "@type": "Question",
      "name": "What is the difference between a Pfam ID and an InterPro ID?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A Pfam ID, such as PF00870, is an entry from one member database, based on a profile of a protein family. An InterPro ID is an integrated entry that aggregates matching entries from member databases into a single higher-level classification."
      }
    },
    {
      "@type": "Question",
      "name": "How do I get protein domains for all transcripts of one gene?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Call the REST lookup endpoint on the gene ID with expand=1 to get all transcripts, then call the overlap endpoint with feature=protein_domain for each transcript, or use biomaRt with a gene filter and the pfam and interpro attributes to get everything in one table."
      }
    },
    {
      "@type": "Question",
      "name": "Do all Ensembl transcripts have protein domain annotations?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Noncoding transcripts have no protein product, and some coding transcripts return no domain hits because the protein is short, fragmentary, or below the detection thresholds of the member databases. An empty domain list is not an error."
      }
    },
    {
      "@type": "Question",
      "name": "How do I make my domain analysis reproducible across Ensembl releases?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Record the Ensembl release number with every download, prefer versioned transcript IDs, and use the Ensembl archive site or a pinned release for any past date you need to reproduce. Re-pull the protein sequence and domain coordinates together from that same release."
      }
    },
    {
      "@type": "Question",
      "name": "Can I get domain positions in genomic coordinates?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "REST domain features are given in protein coordinates. To place them on the genome, use the transcript exon structure from the lookup response or the browser translation table to map codons back through cDNA positions to genomic positions, or export the region in GFF3 from the browser."
      }
    },
    {
      "@type": "Question",
      "name": "What is the fastest way to retrieve domains for thousands of transcripts?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Use BioMart or biomaRt for bulk tabular pulls, and use the REST POST form of the lookup endpoint for batched programmatic queries in chunks of a few hundred IDs. Looping single REST requests over thousands of IDs wastes time and risks throttling."
      }
    },
    {
      "@type": "Question",
      "name": "How do I compare protein domains across species in Ensembl?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Fetch orthologous or paralogous transcripts through the Ensembl homology endpoints or browser gene trees, then pull the domain lists for each species transcripts and compare architectures using the same open-access Ensembl data used for functional diversity studies."
      }
    }
  ]
}
</script>

## Sources

1. [TRANSFAC and its module TRANSCompel: transcriptional gene regulation in eukaryotes.](https://pubmed.ncbi.nlm.nih.gov/16381825/)
2. [Transcript annotation prioritization and screening system (TrAPSS) for mutation screening.](https://pubmed.ncbi.nlm.nih.gov/18172923/)
3. [ADGRE1 (EMR1, F4/80) Is a Rapidly-Evolving Gene Expressed in Mammalian Monocyte-Macrophages.](https://pubmed.ncbi.nlm.nih.gov/30327653/)
4. [Phosphoregulators: protein kinases and protein phosphatases of mouse.](https://pubmed.ncbi.nlm.nih.gov/12819143/)
5. [Exploring the Roles of the Swi2/Snf2 Gene Family in Maize Abiotic Stress Responses.](https://pubmed.ncbi.nlm.nih.gov/39273633/)
6. [EXPANSION: a webserver to explore the functional consequences of protein-coding alternative splice variants in cancer genomics.](https://pubmed.ncbi.nlm.nih.gov/37810457/)
7. [Relating protein functional diversity to cell type number identifies genes that determine dynamic aspects of chromatin organisation as potential contributors to organismal complexity.](https://pubmed.ncbi.nlm.nih.gov/28945800/)