Skip to content

Study Comparison Support #91

@Luke-Sikina

Description

@Luke-Sikina

Background:

The cBioPortal is an open-access, open-source resource for interactive exploration of multidimensional cancer genomics data sets, which are collected from a multitude of sources such as published research papers, publicly available data repositories, and private data sets. Please refer to the cBioPortal home page for an overview.

The public instance of the cBioPortal hosts hundreds of curated cancer genomics data sourced from public data repositories and published research articles. Many of these studies share data sources, sequencing platforms, gene panels, etc., and being able to compare two studies would be a powerful tool for users looking to understand how studies differ from one another.

Furthermore, the addition of a Cancer Study Comparison tool would useful in other ways as well such as for data curation and comparing mutation and annotation tools used on the same set of data, among many other potential uses.


Goal:

Create an in app tool that allows end users to compare two studies.

The tool should show differences in:

  • Samples / Patients
  • Gene panels
  • Molecular Profiles

Approach:

There should be a backend API that accepts a list of study IDs and returns a structured diff of the requested studies. The backend should be integrated into the existing cBioPortal codebase, and should have the route /api/study_comparison?study_ids=study_a,study_b.

There should be a frontend that consumes that API and presents it. The presentation of the information is up to you. You should try and find a way to categorize the various types of information, so that diffs of different data types don't blend together. Within datatypes, you should reference how established diffing tools display their output when designing your UI.

Resources:
Here are some API endpoints that provide information for studies. You shouldn't use these directly, as we want the comparison done on the backend, but you might want to use their underlying service methods when making a comparison endpoint. Running these curls might also give you a better idea of what these different data objects look like.

  • Samples: curl -X GET "https://www.cbioportal.org/api/studies/acc_tcga/samples?direction=ASC&pageNumber=0&pageSize=10000000&projection=SUMMARY" -H "accept: application/json"
  • Patients: curl -X GET "https://www.cbioportal.org/api/studies/acc_tcga/patients?direction=ASC&pageNumber=0&pageSize=10000000&projection=SUMMARY" -H "accept: application/json"
  • Gene Panels: curl -X POST "https://www.cbioportal.org/api/gene-panel-data/fetch" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"molecularProfileIds\": [ \"acc_tcga_rppa\", \"acc_tcga_rna_seq_v2_mrna_median_Zscores\", \"acc_tcga_linear_CNA\" ]}"
  • Molecular Profiles: curl -X GET "https://www.cbioportal.org/api/studies/acc_tcga/molecular-profiles?direction=ASC&pageNumber=0&pageSize=10000000&projection=SUMMARY" -H "accept: application/json"

Codebase
When building a REST endpoint in cBioPortal, you need to add a controller method to either an existing class or a make a new controller class. You can look at some of our existing controllers here: https://github.com/cBioPortal/cbioportal/tree/master/web/src/main/java/org/cbioportal/web In general, controllers call service methods. Service methods retrieve data from repository methods and process that data, returning the result to the controller. This means that in addition to making a new controller method, you should plan on adding a new service as well. You can find examples of service classes here: https://github.com/cBioPortal/cbioportal/tree/master/service/src/main/java/org/cbioportal/service/impl


Need skills:

  • Java, JavaScript, SQL
  • General good programming skills and willingness to learn.

Possible mentors:

@Luke-Sikina

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions