GSoC with cBioPortal— Integrating MolecularMatch Clinical Trials Data into cBioPortal

Throughout the last four months I was quite fortunate to participate as a Google Summer of Code intern with cBioPortal to work on integrating MolecularMatch clinical trials data into cBioPortal. In order to achieve the project milestones I had to work with both cBioPortal and MolecularMatch teams. This article describes the project in detail, a summary of the work I have done and my overall experience during the GSoC 2017.
cBioPortal for Cancer Genomics
The cBioPortal for Cancer Genomics is a resource designed to provide broad community access to cancer genomic data. It provides a unique user-friendly and “biology-centric computational user interface”, with the goal of making genomic data more easily accessible to translational scientists, biologists, and clinicians. The interface was explicitly built and continues to evolve with careful usability studies involving multiple biological and clinical users, and an active and engaged user base.
Project Details
One of the main challenges in cBioPortal is to interpret the great amount of genomic data it has accumulated. It has currently integrated a few resources, including OncoKB, MyCancerGenome, and CancerHotspot.org in the annotation column in the mutation table. In addition to this, it is useful to link to clinical trials for each mutation as well.
Through this project we explore the possibility of integrating Clinical Trials into cBioPortal. Some of the sources that provide clinical trials include MolecularMatch, MatchMiner, JacksonLab etc.
MolecularMatch provides an effective API to retrieve precise data in real time.
Importance To Community
Clinical trials are one type of research that’s done before a new treatment becomes available to people. Thus they are an important step in discovering new treatments for various cancers and other diseases as well as new ways to detect, diagnose, and reduce the risk of disease. They also play the role of a key research tool in advancing medical knowledge and patient care.
Through this project we improve the ability to analyze and interpret the genomic data in cBioPortal in order to help patients and researchers find clinical trials to help improve and advance medical care. They also can help health care decision makers direct resources to the strategies and treatments that work best.
Work Done (Project Milestones)
Milestone 1: back-end integration with MolecularMatch
Technologies
Java, Spring MVC
GitHub Pull Request
https://github.com/cBioPortal/cbioportal/pull/3036
Milestone2: UI design and development
- Part 1: Annotation
showing the total trial count for each mutation in the Patient view page as an annotation - Part 2: Tooltip
showing the top 5 trial results for each mutation as a tooltip when the user hover over the clinical trial(MolecularMatch) annotation
Technologies
ReactJS, Typescript
Github Pull Request
https://github.com/cBioPortal/cbioportal-frontend/pull/583
Implementation Overview

1. Backend Integration
For retrieving clinical trials I implemented a new API in CbioPortal Backend(ClinicalTrialsController : <cbioportal-uri>/api/molecularmatch) which can be used to connect to the Molecular Match API through https://api.molecularmatch.com/v1/search/trials resource endpoint in MolecularMatch.
Sample cURL request to retrieve data from MolecularMatch trials endpoint
curl -X POST 'https://api-demo.molecularmatch.com/v1/search/trials' --data 'apiKey=<api key>' --data-urlencode 'filters=[{"facet":"CONDITION","term":"Melanoma"}, {"facet":"MUTATION","term":"BRAF V600E"}, {"facet":"MUTATION","term":"BRAF V600D"}, {"facet":"MUTATION","term":"BRAF V600"},
{"facet":"STATUS", "term":"Enrolling"},
{"facet":"TRIALTYPE", "term":"Interventional"}]'The ClinicalTrialsController requires an array of filters to be passed as its arguments and it is possible to pass multiple mutations as a batch in a single API call similar to above cURL request. Hence, for a single cancer study of a patient, we can pass all the available mutations in the patient view page to retrieve matching clinical trials. However, the trials retrieved with this approach are unsorted. Therefore, before sending them in the response it was needed to do some pre-processing to identify matching trials per mutations. (Total trial count and the top 5 trials for a mutation).
Data Pre-processing

Matching trial results can be obtained by evaluating the molecular alterations (1) of a trial. If the alteration matches with a mutation we need we can include the trial details as well as increment the matched-trial count by 1. The top trials are obtained based on the score parameter (2). The trials in the response are sorted according to the descending of their scores. Hence the first 5 trials to match for a mutation would be among the top 5 matched trials.
Molecular Data (Filters to be passed)
- Mutation : Gene and Variant
- Status : Enrolling (subjects actively participating in the trial)
- Condition : Cancer Type Patient diagnosed
- Trial Type : Interventional (clinical trials which set out to test treatments or combinations of treatments which have not yet been officially approved)
2. Frontend Development
When the patient view page renders an initial API request will be made to the trials endpoint with the filters included in the request body. The retrieved JSON response which contains the matched trials will be set as default molecularMatchData in patientViewPageStore. This data along with the mutations is passed to the MolecularMatch (react component) through the patientViewMutationTable’s render function. The data will be parsed and each mutation’s total matched trial count is displayed as an annotation in the annotation column. I used CSS sprites to display the MolecularMatch icon with its total matched-trial count.

Trial results which include the top 5 trial details, will be displayed as a tooltip (MolecularMatchCard) on the clinical trial annotation. (by adding an event listener on onHover). The tooltip header contains the total number of matched trials with the header linking to the same search criteria on MolecularMatch website. The tooltip body consists of the top 5 trial details including the Trial ID, brief description on the trial and the phase. The Trial ID links to the trial details on MolecularMatch site where the user will be able to find additional information on the trial.
Some Screenshots
Clinical Trials UI — Patient View Page


Clinical Trials UI — Tooltip
Some mock-up designs done prior to implementation

Final Output


How to set up locally?
Please follow the guidelines in [1] to set up a local instance of cBioPortal. Make sure you have met all the software and hardware requirements before setting up. Use the repo in [2] to build the product from source.
[1] https://cbioportal.readthedocs.io/en/latest/
[2] https://github.com/emswbandara/cbioportal
Setting up React frontend for cBioPortal
clone https://github.com/emswbandara/cbioportal-frontend
Make sure you have the latest stable node version installed: https://nodejs.org/en/
To install all app and dev dependencies
npm installTo build DLLs in common-dist folder (must be done prior to start of dev server)
npm run buildDLL:devTo start dev server with hot reload enabled
npm run startA good example page to view the clinical trials would be:
http://localhost:3000/?cancer_study_id=skcm_tcga&case_id=TCGA-D3-A3C3#/patient?caseId=TCGA-D3-A3C3&studyId=skcm_tcga
Future Work
- Implement clinical trials sorting algorithm
- Improve the code base on clinical trials to be more generic such that we can include trial results from other sources
- Matched trials validation
- Providing the capability to customize the filters through a property file
- Improve performance
- Improve the hover over card styles
Thank You
Thank you cBioPortal for giving me this opportunity to participate in Google Summer of Code Program as a part of your team. Participating in this program helped me learn a lot of new things and to improve my skills.
Thank you my mentors Hongxin Zhang, Shane Neeley, James Lindsay, Ryan Smith for the guidance and support extended throughout this period by giving me constant feedback, helping me to overcome various issues I faced and encouraging me to achieve successful completion of this project.
