Awesome Open Source
Awesome Open Source

Personal Cancer Genome Reporter (PCGR) - variant interpretation for precision cancer medicine



The Personal Cancer Genome Reporter (PCGR) is a stand-alone software package for functional annotation and translation of individual cancer genomes for precision cancer medicine. Currently, it interprets both somatic SNVs/InDels and copy number aberrations. The software extends basic gene and variant annotations from the Ensembl’s Variant Effect Predictor (VEP) with oncology-relevant, up-to-date annotations retrieved flexibly through vcfanno, and produces interactive HTML reports intended for clinical interpretation. NOTE: If you also want to interrogate the clinical impact of germline variants in the same individual, try the accompanying tool Cancer Predisposition Sequencing Reporter (CPSR).

A few screenshots of the dashboard-type HTML output (new in 0.9.0) is shown below.

PCGR overview


  • November 30th 2020: 0.9.1 release
    • Data bundle updates (CIViC, ClinVar, CancerMine, UniProt KB)
  • Sep 24th 2020: 0.9.0rc release
    • Major data bundle updates (CIViC, ClinVar, CancerMine, UniProt KB, Open Targets Platform, Pfam, DisGeNET, GENCODE)
    • VEP v101
    • New: report type output - flexdashboard HTML
    • New: detection of kataegis events
    • New: improved distinction between exact and regional biomarkers in tables
    • New: addition of other drug targets in copy number view
    • New: Inclusion of annotated molecularly targeted clinical trials (beta)
    • Changed: estimation of mutational signatures - using MutationalPatterns with the n = 67 reference collection (COSMIC v3)
    • Changed: a number of options in the configuration file is now arguments for the main Python script
    • NOTE: Non-Dockerized version (Conda-based) is in the making
    • see CHANGELOG
  • Nov 18th 2019: 0.8.4 release
    • Data bundle updates (CIViC, ClinVar, CancerMine, UniProt)
    • Software updates: VEP 98.3
  • Oct 14th 2019: 0.8.3 release
    • Software updates (VEP 98.2)
    • Data bundle updates (CIViC, ClinVar, CancerMine)
    • Bug fixing, see CHANGELOG
  • Sep 29th 2019: 0.8.2 release

Example reports


PCGR documentation

Documentation Status   Build Status

IMPORTANT: If you use PCGR, please cite the publication:

Sigve Nakken, Ghislain Fournous, Daniel Vodák, Lars Birger Aaasheim, Ola Myklebost, and Eivind Hovig. Personal Cancer Genome Reporter: variant interpretation report for precision oncology (2017). Bioinformatics. 34(10):1778–1780. doi:10.1093/bioinformatics/btx817

Annotation resources included in PCGR - 0.9.1

  • VEP - Variant Effect Predictor v101 (GENCODE v35/v19 as the gene reference dataset)
  • CIViC - Clinical interpretations of variants in cancer (November 18th 2020)
  • ClinVar - Database of variants with clinical significance (November 2020)
  • DoCM - Database of curated mutations (v3.2, Apr 2016)
  • CGI - Cancer Biomarkers database (Jan 17th 2018)
  • Cancer Hotspots - Resource for statistically significant mutations in cancer (v2 - 2017)
  • dBNSFP - Database of non-synonymous functional predictions (v4.1, June 2020)
  • TCGA - somatic mutations discovered across 33 tumor type cohorts (The Cancer Genome Atlas (TCGA), release 25, July 2020)
  • CHASMplus - predicted driver mutations across 33 tumor type cohorts in TCGA
  • UniProt/SwissProt KnowledgeBase - Resource on protein sequence and functional information (2020_05, October 2020)
  • Pfam - Database of protein families and domains (v33, May 2020)
  • Open Targets Platform - Target-disease and target-drug associations (2020_09, September 2020)
  • ChEMBL - Manually curated database of bioactive molecules (v27, May 2020)
  • CancerMine - Literature-mined database of tumor suppressor genes/proto-oncogenes (v30, November 2020)

Getting started

STEP 0: Python

An installation of Python (version 3.6) is required to run PCGR. Check that Python is installed by typing python --version in your terminal window. In addition, a Python library for parsing configuration files encoded with TOML is needed. To install, simply run the following command:

pip install toml

IMPORTANT NOTE: STEP 1 & 2 below outline installation guidelines for running PCGR with Docker. If you want to install and run PCGR without the use of Docker (i.e. through Conda), follow these instructions

STEP 1: Installation of Docker

  1. Install the Docker engine on your preferred platform
    • installing Docker on Linux
    • installing Docker on Mac OS
    • NOTE: We have not yet been able to perform enough testing on the Windows platform, and we have received feedback that particular versions of Docker/Windows do not work with PCGR (an example being mounting of data volumes)
  2. Test that Docker is running, e.g. by typing docker ps or docker images in the terminal window
  3. Adjust the computing resources dedicated to the Docker, i.e.:

STEP 2: Download PCGR and data bundle

Development version

a. Clone the PCGR GitHub repository (includes run script and default configuration file): git clone

b. Download and unpack the latest data bundles in the PCGR directory

c. Pull the PCGR Docker image (dev) from DockerHub (approx 5.1Gb):

  • docker pull sigven/pcgr:dev (PCGR annotation engine)
Latest release

a. Download and unpack the latest software release (0.9.1)

b. Download and unpack the assembly-specific data bundle in the PCGR directory

c. Pull the PCGR Docker image (0.9.1) from DockerHub (approx 5.1Gb):

  • docker pull sigven/pcgr:0.9.1 (PCGR annotation engine)

STEP 3: Input preprocessing

The PCGR workflow accepts two types of input files:

  • An unannotated, single-sample VCF file (>= v4.2) with called somatic variants (SNVs/InDels) - required

  • A copy number segment file - optional

  • We strongly recommend that the input VCF is compressed and indexed using bgzip and tabix

  • If the input VCF contains multi-allelic sites, these will be subject to decomposition

  • Variants used for reporting should be designated as 'PASS' in the VCF FILTER column

The tab-separated values file with copy number aberrations MUST contain the following four columns:

  • Chromosome
  • Start
  • End
  • Segment_Mean

Here, Chromosome, Start, and End denote the chromosomal segment, and Segment_Mean denotes the log(2) ratio for a particular segment, which is a common output of somatic copy number alteration callers. Note that coordinates must be one-based (i.e. chromosomes start at 1, not 0). Below shows the initial part of a copy number segment file that is formatted correctly according to PCGR's requirements:

Chromosome	Start	End	Segment_Mean
1 3218329 3550598 0.0024
1 3552451 4593614 0.1995
1 4593663 6433129 -1.0277

STEP 4: Configure your PCGR workflow

The PCGR software bundle comes with a default configuration file in the conf/ folder, to be used as a starting point for runnning the PCGR workflow. The configuration file, formatted using TOML, enables the user to configure a number of options related to the following:

  • IMPORTANT: Designation of VCF INFO tags that denote variant depth/allelic fraction
    • If this is not available/properly set, the report contents will be less informative AND it will not be possible to preset thresholds for variant depth/allelic fraction
  • Tumor-only analysis options
    • tick on/off various filtering schemes for exclusion of germline variants (for input VCFs coming from tumor-only sequencing assays)
  • VEP/vcfanno options

See here for more details about the exact usage of the configuration options.

To make the report as complete as possible, take a note of the following arguments which can be used in the report generation:

  • Tumor purity estimate (--tumor_ploidy, for display only)
  • Tumor ploidy estimate (--tumor_purity, for display only)
  • Type of sequencing assay (--assay)
  • Cell line sample (--cell_line, for display only)
  • Coding target size of sequencing assay (--target_size_mb)

STEP 5: Run example

A tumor sample report is generated by calling the Python script, which takes the following arguments and options:

usage: -h [options] --input_vcf INPUT_VCF --pcgr_dir PCGR_DIR --output_dir OUTPUT_DIR --genome_assembly  GENOME_ASSEMBLY --conf CONFIG_FILE --sample_id SAMPLE_ID

Personal Cancer Genome Reporter (PCGR) workflow for clinical interpretation of somatic nucleotide variants and copy number aberration segments

Required arguments:
--input_vcf INPUT_VCF
			    VCF input file with somatic variants in tumor sample, SNVs/InDels
--pcgr_dir PCGR_DIR   PCGR base directory with accompanying data directory, e.g. ~/pcgr-0.9.0
--output_dir OUTPUT_DIR
			    Output directory
--genome_assembly {grch37,grch38}
			    Human genome assembly build: grch37 or grch38
			    PCGR configuration file in TOML format
--sample_id SAMPLE_ID
			    Tumor sample/cancer genome identifier - prefix for output files

Optional arguments:
--input_cna INPUT_CNA
			    Somatic copy number alteration segments (tab-separated values)
--logr_gain LOGR_GAIN
			    Log ratio-threshold for regions containing copy number gains/amplifications (default: 0.8)
--logr_homdel LOGR_HOMDEL
			    Log ratio-threshold for regions containing homozygous deletions (default: -0.8)
--cna_overlap_pct CNA_OVERLAP_PCT
			    Mean percent overlap between copy number segment and gene transcripts for reporting of gains/losses in tumor suppressor genes/oncogenes, (default: 50)
--pon_vcf PON_VCF     VCF file with germline calls from Panel of Normals (PON) - i.e. blacklisted variants, (default: None)
--tumor_site TSITE    Optional integer code to specify primary tumor type/site of query sample,
				choose any of the following identifiers:
			    1 = Adrenal Gland
			    2 = Ampulla of Vater
			    3 = Biliary Tract
			    4 = Bladder/Urinary Tract
			    5 = Bone
			    6 = Breast
			    7 = Cervix
			    8 = CNS/Brain
			    9 = Colon/Rectum
			    10 = Esophagus/Stomach
			    11 = Eye
			    12 = Head and Neck
			    13 = Kidney
			    14 = Liver
			    15 = Lung
			    16 = Lymphoid
			    17 = Myeloid
			    18 = Ovary/Fallopian Tube
			    19 = Pancreas
			    20 = Peripheral Nervous System
			    21 = Peritoneum
			    22 = Pleura
			    23 = Prostate
			    24 = Skin
			    25 = Soft Tissue
			    26 = Testis
			    27 = Thymus
			    28 = Thyroid
			    29 = Uterus
			    30 = Vulva/Vagina
			    (default: 0 - any tumor type)
--tumor_purity TUMOR_PURITY
			    Estimated tumor purity (between 0 and 1, (default: None)
--tumor_ploidy TUMOR_PLOIDY
			    Estimated tumor ploidy (default: None)
--tumor_dp_min TUMOR_DP_MIN
			    If VCF INFO tag for sequencing depth (tumor) is provided and found, set minimum required depth for inclusion in report (default: 0)
--tumor_af_min TUMOR_AF_MIN
			    If VCF INFO tag for variant allelic fraction (tumor) is provided and found, set minimum required AF for inclusion in report (default: 0)
--control_dp_min CONTROL_DP_MIN
			    If VCF INFO tag for sequencing depth (control) is provided and found, set minimum required depth for inclusion in report (default: 0)
--control_af_max CONTROL_AF_MAX
			    If VCF INFO tag for variant allelic fraction (control) is provided and found, set maximum tolerated AF for inclusion in report (default: 1)
--target_size_mb TARGET_SIZE_MB
			    For mutational burden analysis - approximate protein-coding target size of sequencing assay (default: 34 Mb (WES/WGS))
--tumor_only          Input VCF comes from tumor-only sequencing, calls will be filtered for variants of germline origin (set configurations for filtering in .toml file), (default: False)
--cell_line           Input VCF comes from tumor cell line sequencing (requires --tumor_only), calls will be filtered for variants of germline origin (set configurations for filtering in .toml file), (default: False)
			    Type of DNA sequencing assay performed for input data (VCF) default: WES
--include_trials      (Beta) Include relevant ongoing or future clinical trials, focusing on studies with molecularly targeted interventions
--estimate_tmb        Estimate tumor mutational burden from the total number of somatic mutations and target region size, default: False
			    Predict microsatellite instability status from patterns of somatic mutations/indels, default: False
			    Estimate relative contributions of reference mutational signatures in query sample and detect potential kataegis events), default: False
--tmb_algorithm {all_coding,nonsyn}
		         Method for calculation of TMB, all coding variants (Chalmers et al., Genome Medicine, 2017), or non-synonymous variants only, default: all_coding
--min_mutations_signatures MIN_MUTATIONS_SIGNATURES
			    Minimum number of SNVs required for reconstruction of mutational signatures (SBS) by MutationalPatterns (default: 200, minimum n = 100)
			    Use all reference mutational signatures (SBS, n = 67) in signature reconstruction rather than only those already attributed to the tumor type (default: False)
--force_overwrite     By default, the script will fail with an error if any output file already exists. You can force the overwrite of existing result files by using this flag
--version             show program's version number and exit
--basic               Run functional variant annotation on VCF through VEP/vcfanno, omit other analyses (i.e. Tier assignment/MSI/TMB/Signatures etc. and report generation (STEP 4), default: False
--no_vcf_validate     Skip validation of input VCF with Ensembl's vcf-validator
--docker-uid DOCKER_USER_ID
			    Docker user ID. default is the host system user ID. If you are experiencing permission errors, try setting this up to root (`--docker-uid root`)
--no-docker           Run the PCGR workflow in a non-Docker mode (see install_no_docker/ folder for instructions)
--debug               Print full Docker commands to log, default: False

The examples folder contain input VCF files from two tumor samples sequenced within TCGA (GRCh37 only). It also contains a PCGR configuration file customized for these VCFs. A report for a colorectal tumor case can be generated by running the following command in your terminal window:

python ~/pcgr-0.9.1/
--pcgr_dir ~/pcgr-0.9.1
--output_dir ~/pcgr-0.9.1
--sample_id tumor_sample.COAD
--genome_assembly grch37
--conf ~/pcgr-0.9.1/examples/example_COAD.toml
--input_vcf ~/pcgr-0.9.1/examples/tumor_sample.COAD.vcf.gz
--tumor_site 9
--input_cna ~/pcgr-0.9.1/examples/tumor_sample.COAD.cna.tsv
--tumor_purity 0.9
--tumor_ploidy 2.0
--assay WES

This command will run the Docker-based PCGR workflow and produce the following output files in the examples folder:

  1. tumor_sample.COAD.pcgr_acmg.grch37.html - An interactive HTML report for clinical interpretation (rmarkdown-based)
  2. tumor_sample.COAD.pcgr_acmg.grch37.flexdb.html - An interactive HTML report for clinical interpretation (flexdashboard-based)
  3. tumor_sample.COAD.pcgr_acmg.grch37.pass.vcf.gz - Bgzipped VCF file with rich set of annotations for precision oncology
  4. tumor_sample.COAD.pcgr_acmg.grch37.pass.tsv.gz - Compressed vcf2tsv-converted file with rich set of annotations for precision oncology
  5. tumor_sample.COAD.pcgr_acmg.grch37.snvs_indels.tiers.tsv - Tab-separated values file with variants organized according to tiers of functional relevance
  6. tumor_sample.COAD.pcgr_acmg.grch37.mutational_signatures.tsv - Tab-separated values file with information on contribution of mutational signatures
  7. tumor_sample.COAD.pcgr_acmg.grch37.json.gz - Compressed JSON dump of HTML report content
  8. tumor_sample.COAD.pcgr_acmg.grch37.cna_segments.tsv.gz - Compressed tab-separated values file with annotations of gene transcripts that overlap with somatic copy number aberrations


Frequently asked questions regarding PCGR usage and functionality:

1. Why do I get a long list of lines with “ERROR: Line ..” during “STEP 0: validate input data”?

Answer: Your query VCF does not pass the VCF validation check by EBI's vcf-validator. Solution: 1) Fix the VCF so that it adheres to the VCF standard, or 2) run PCGR with option --vcf_no_validate if you think the formatting problems is not critical to the contents of the VCF.

2. I am not sure how to specify depth/allelic fraction in my query VCF. Why cannot PCGR pull out this information automatically from my VCF file?

Answer: This is something that you as a user need to handle yourself. To our knowledge, there is currently no standard way that variant callers format these types of data (allelic fraction/depth, tumor/normal) in the VCF, and this makes it very challenging for PCGR to automatically grab this information from the variety of VCFs produced by different variant callers. Please take a careful look at the example VCF files (examples folder) that comes with PCGR for how PCGR expects this information to be formatted, and make sure your VCF is formatted accordingly.

3. Is it possible to utilize PCGR for analysis of multiple samples?

Answer: As the name of the tool implies, PCGR was developed for the detailed analysis of individual tumor samples. However, if you take advantage of the different outputs from PCGR, it can also be utilized for analysis of multiple samples. First, make sure your input files are organized per sample (i.e. one VCF file per sample, one CNA file per sample), so that they can be fed directly to PCGR. Now, once all samples have been processed with PCGR, note that all the tab-separated output files (i.e. tiers, mutational signatures, cna segments) contain the sample identifier, which enable them to be aggregated and suitable for a downstream multi-sample analysis.

Also note that the compressed JSON output pr. sample run contains ALL information presented in the report. Explore the JSON contents e.g. with the jsonlite package in R:

report_data <- jsonlite::fromJSON('<sample_id>.pcgr_acmg.grch37.json.gz')

E.g. tiered SNV/InDel output:


Or TMB estimate:


4. I do not see the expected transcript-specific consequence for a particular variant. In what way is the primary variant consequence established?

Answer: PCGR relies upon VEP for consequence prioritization, in which a specific transcript-specific consequence is chosen as the primary variant consequence. In the PCGR configuration file, you may customise how this is chosen by changing the order of criteria applied when choosing a primary consequence block - parameter vep_pick_order

5. Is it possible to use RefSeq as the underlying gene transcript model in PCGR?

Answer: PCGR uses GENCODE as the primary gene transcript model, but we provide cross-references to corresponding RefSeq transcripts when this is available.

6. I have a VCF with structural variants detected in my tumor sample, can PCGR process those as well?

Answer: This is currently not supported as input for PCGR, but is something we want to incorporate in the future.

7. I am surprised to see a particular gene being located in TIER 3 for my sample, since I know that this gene is of potential clinical significance in the tumor type I am investigating?

Answer: PCGR classifies variants into tiers of significance through an implementation of published guidelines by ACMG/AMP. No manual efforts for individual tumor types are conducted beyond this rule-based scheme. The users need to keep this in mind when interpreting the tier contents of the report.

8. Is it possible to see all the invididual cancer subtypes that belong to each of the 30 different tumor sites?

Answer: Yes, see oncotree_ontology_xref.tsv

9. Is there any plans to incorporate data from OncoKB in PCGR?

Answer: No. PCGR relies upon publicly available open-source resources, and further that the PCGR data bundle can be distributed freely to the user community. It is our understanding that OncoKB's terms of use do not fit well with this strategy.

10. Is it possible for the users to update the data bundle to get the most recent versions of all underlying data sources?

Answer: As of now, the data bundle is updated only with each release of PCGR. This is not yet supported, but we want to allow for such updates in the future.


sigven AT

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
r (2,252
interpreter (205
annotation-tool (38
vcf (22
cancer-genomics (17

Find Open Source By Browsing 7,000 Topics Across 59 Categories