Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Adjudicator

Version: 1.0.0 · License: Apache-2.0 · Status: Production/Stable
PyPI:pip install adjudicator · Source:ncgr/Adjudicator
Author: Connor Cameron · ctc@ncgr.org · National Center for Genome Resources


Overview

Adjudicator is a command-line tool for collapsing and filtering structural genome annotations across multiple sources. It uses best-hit HMM domain scores from gene family assignments (via the Legume Information System) to compare overlapping gene models and select the best-supported annotation for all overlapping models.

Two commands are provided:

  • collapse — Merge overlapping gene models from two or more annotators, selecting the best model per region.
  • repeat-filter — Remove gene models that overlap known repeat or transposon regions beyond a configurable coverage threshold.

Requirements

RequirementVersion
Python≥ 3.10
click≥ 8.1
intervaltree≥ 3.2.1
sortedcontainers≥ 2.4.0

Installation

pip install adjudicator
adjudicator --version
# adjudicator, version 1.0.0

Input File Formats

TSV Sample Sheet (--input-tsv)

Tab-separated. Lines beginning with # and blank lines are skipped.

ColumnTypeDescription
1stringUnique label for this evidence set.
2pathPath to the .gff3 structural annotation file.
3pathPath to the .gfa LIS gene family assignment file.

Row order determines precedence when gene models have equivalent scores.

# labelgff3_pathgfa_pathmaker	/data/ann/maker.gff3	/data/fam/maker.gfa
helixer	/data/ann/helixer.gff3	/data/fam/helixer.gfa
stringtie	/data/ann/stringtie.gff3	/data/fam/stringtie.gfa

GFF3 (.gff3)

Standard GFF3 format with a three-level hierarchy: genemRNAexon. See the GFF3 specification.

GFA (.gfa)

LIS gene family assignment files produced by the Legume Information System gene family pipeline.


Commands

collapse

Collapses overlapping structural annotations across all entries in the TSV. Processing is hierarchical: Row 1 vs. Row 2 produces an intermediate result, which is then compared against Row 3, and so on.

Synopsis

adjudicator collapse --input-tsv <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--min-overlap-mfloat0.000010.0 – 1.0Minimum fractional overlap of feature A by feature B to consider them overlapping.
--no-orphans-nflagFalseExclude genes with no gene family assignment from the output.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── A_B.wao.gff3 # Overlap intersections
├── A_B.unique_b.gff3 # Gene models unique to annotator B
├── A_B.final.gff3 # Adjudicated gene IDs
├── A_B.gfa # Merged gene family assignments
└── A_B.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator collapse \
--input-tsv samples.tsv \
--output-dir results/collapse/
adjudicator collapse \
--input-tsv samples.tsv \
--no-orphans \
--min-overlap 0.4 \
--output-dir results/collapse/ \
--verbose

repeat-filter

Filters gene models from each entry in the TSV against a reference repeat annotation. Gene models whose exons exceed --max-coverage overlap with a repeat region are removed.

Synopsis

adjudicator repeat-filter --input-tsv <FILE> --annotation <FILE> [OPTIONS]

Options

OptionShortTypeDefaultValid rangeDescription
--input-tsv-ipath(required)Tab-separated sample sheet.
--annotation-apath(required)GFF3 file of repeat regions to filter against.
--max-coverage-mfloat0.40.0 – 1.0Maximum fractional overlap between a gene's exons and a repeat region before the model is removed.
--output-dir-opath.Directory to write output files. Created if it does not exist.
--strict / --no-strictflagFalseExit with error if any referenced input file does not exist on disk.
--verbose-vflagFalsePrint per-sample file paths and processing steps to stdout.

Output Files

<output-dir>/
├── <label>_repeat_filter.wao.gff3 # Overlap intersections
└── <label>_repeat_filter.final.wsubfeatures.gff3 # ✅ Primary output

Examples

adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation repeats.gff3 \
--output-dir results/filtered/
adjudicator repeat-filter \
--input-tsv samples.tsv \
--annotation transposons.gff3 \
--max-coverage 0.3 \
--output-dir results/filtered/ \
--strict \
--verbose

Workflow

# Step 1: Filter repeat regions
adjudicator repeat-filter \
--input-tsv raw_samples.tsv \
--annotation repeats.gff3 \
--output-dir step1_filtered/
# Step 2: Rewrite TSV to point to filtered outputs (GFA paths unchanged)
awk -F'\t''OFS="\t" { $2="step1_filtered/"$1"_repeat_filter.final.wsubfeatures.gff3"; print }' \
raw_samples.tsv > filtered_samples.tsv
# Step 3: Collapse filtered annotations
adjudicator collapse \
--input-tsv filtered_samples.tsv \
--output-dir step2_collapsed/

Error Reference

Condition--strict off--strict on
Input file not foundWarning to stderrError: The following files were not found: ...
TSV row has wrong column countBadParameter: Line N: expected 3 columns, got N.Same
Label (column 1) is emptyBadParameter: Line N: column 1 (label) must not be empty.Same
GFF3 path does not end in .gff3BadParameter: Line N: column 2 must end in '.gff3'Same
GFA path does not end in .gfaBadParameter: Line N: column 3 must end in '.gfa'Same
TSV contains no data rowsError: No data rows found in '<file>'.Same

Glossary

TermDefinition
Gene modelA predicted gene structure represented as a genemRNAexon hierarchy in GFF3.
GFF3Generic Feature Format version 3. Tab-delimited format for genomic features and their hierarchical relationships.
GFAGene Family Assignment file from the LIS pipeline, containing HMM domain scores used to rank competing gene models.
AdjudicationSelection of one gene model from a set of overlapping candidates based on HMM score evidence.
Orphan geneA gene model with no gene family assignment in the GFA file.
WAO intersectionA bedtools-style "write all overlaps" operation reporting fractional overlap between features across two GFF3 files.

About

A tool for Adjudicating structural annotation evidence from genome assemblies

Resources

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages