From 1c1fe97fb6c25d1a19989112bde479003aafcd25 Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Mon, 1 Jun 2020 09:05:13 -0500 Subject: [PATCH 1/4] Add additional evidence/assertion fields to the CIViC consequence annotation --- civicpy/civic.py | 26 ++++++++++++++++++++++++++ civicpy/exports.py | 13 +++++++++++++ 2 files changed, 39 insertions(+) diff --git a/civicpy/civic.py b/civicpy/civic.py index 51b0ad8..a4298cf 100644 --- a/civicpy/civic.py +++ b/civicpy/civic.py @@ -638,6 +638,19 @@ def csq(self, include_status=None): "{} ({})".format(evidence.source.citation_id, evidence.source.source_type), str(evidence.variant_origin), evidence.status, + str(evidence.clinical_significance or ''), + str(evidence.evidence_direction or ''), + "{} (DOID {})".format(evidence.disease.name, evidence.disease.doid), + '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in evidence.drugs]), + str(evidence.drug_interaction_type or ""), + '&'.join(["{} (HPO ID {})".format(phenotype.hpo_class, phenotype.hpo_id) for phenotype in evidence.phenotypes]), + evidence.evidence_level, + str(evidence.rating), + "", + "", + "", + "", + "", ])) for assertion in self.assertions: if include_status is not None and assertion.status not in include_status: @@ -664,6 +677,19 @@ def csq(self, include_status=None): "", str(assertion.variant_origin), assertion.status, + assertion.clinical_significance, + assertion.evidence_direction, + "{} (DOID {})".format(assertion.disease.name, assertion.disease.doid), + '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in assertion.drugs]), + str(assertion.drug_interaction_type or ''), + "", + "", + "", + "&".join([acmg_code.code for acmg_code in assertion.acmg_codes]), + str(assertion.amp_level or ''), + "{} (v{})".format(assertion.nccn_guideline, assertion.nccn_guideline_version), + str(assertion.fda_regulatory_approval or ''), + str(assertion.fda_companion_test or ''), ])) return csq diff --git a/civicpy/exports.py b/civicpy/exports.py index 5fc33a9..3121cac 100644 --- a/civicpy/exports.py +++ b/civicpy/exports.py @@ -78,6 +78,19 @@ class VCFWriter(DictWriter): 'CIViC Entity Source', 'CIViC Entity Variant Origin', 'CIViC Entity Status', + 'CIViC Entity Clinical Signifiance', + 'CIViC Entity Direction', + 'CIViC Entity Disease', + 'CIViC Entity Drugs', + 'CIViC Entity Drug Interaction Type', + 'CIViC Evidence Phenotypes', + 'CIViC Evidence Level', + 'CIViC Evidence Rating', + 'CIViC Assertion ACMG Codes', + 'CIViC Assertion AMP Category', + 'CIViC Assertion NCCN Guideline', + 'CIVIC Assertion Regulatory Approval', + 'CIVIC Assertion FDA Companion Test ', ])) From 59f2d7d114f0c9679dccda38b11d3ba67129926c Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Fri, 19 Jun 2020 09:33:41 -0500 Subject: [PATCH 2/4] Overwrite the Disease __str__ method to control formatting of disease with/without doid --- civicpy/civic.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/civicpy/civic.py b/civicpy/civic.py index a4298cf..2b64df2 100644 --- a/civicpy/civic.py +++ b/civicpy/civic.py @@ -640,7 +640,7 @@ def csq(self, include_status=None): evidence.status, str(evidence.clinical_significance or ''), str(evidence.evidence_direction or ''), - "{} (DOID {})".format(evidence.disease.name, evidence.disease.doid), + str(evidence.disease), '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in evidence.drugs]), str(evidence.drug_interaction_type or ""), '&'.join(["{} (HPO ID {})".format(phenotype.hpo_class, phenotype.hpo_id) for phenotype in evidence.phenotypes]), @@ -679,7 +679,7 @@ def csq(self, include_status=None): assertion.status, assertion.clinical_significance, assertion.evidence_direction, - "{} (DOID {})".format(assertion.disease.name, assertion.disease.doid), + str(assertion.disease), '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in assertion.drugs]), str(assertion.drug_interaction_type or ''), "", @@ -926,6 +926,12 @@ class Drug(CivicAttribute): class Disease(CivicAttribute): _SIMPLE_FIELDS = CivicRecord._SIMPLE_FIELDS.union({'display_name', 'doid', 'url'}) + def __str__(self): + if self.doid is None: + return self.name + else: + return "{} (DOID {})".format(self.name, self.doid) + class Country(CivicAttribute): _SIMPLE_FIELDS = CivicRecord._SIMPLE_FIELDS.union({'iso', 'name'}) From 98ba619e65fbf29fda2b632a22360069d2990f9b Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Fri, 19 Jun 2020 09:34:12 -0500 Subject: [PATCH 3/4] Overwrite the Drug __str__ method to control formatting of drug with/without ncit_id --- civicpy/civic.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/civicpy/civic.py b/civicpy/civic.py index 2b64df2..bce1756 100644 --- a/civicpy/civic.py +++ b/civicpy/civic.py @@ -641,7 +641,7 @@ def csq(self, include_status=None): str(evidence.clinical_significance or ''), str(evidence.evidence_direction or ''), str(evidence.disease), - '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in evidence.drugs]), + '&'.join([str(drug) for drug in evidence.drugs]), str(evidence.drug_interaction_type or ""), '&'.join(["{} (HPO ID {})".format(phenotype.hpo_class, phenotype.hpo_id) for phenotype in evidence.phenotypes]), evidence.evidence_level, @@ -680,7 +680,7 @@ def csq(self, include_status=None): assertion.clinical_significance, assertion.evidence_direction, str(assertion.disease), - '&'.join(["{} (NCIt ID {})".format(drug.name, drug.ncit_id) for drug in assertion.drugs]), + '&'.join([str(drug) for drug in assertion.drugs]), str(assertion.drug_interaction_type or ''), "", "", @@ -922,6 +922,12 @@ def update(self): class Drug(CivicAttribute): _SIMPLE_FIELDS = CivicRecord._SIMPLE_FIELDS.union({'ncit_id'}) + def __str__(self): + if self.ncit_id is None: + return self.name + else: + return "{} (NCIt ID {})".format(self.name, self.ncit_id) + class Disease(CivicAttribute): _SIMPLE_FIELDS = CivicRecord._SIMPLE_FIELDS.union({'display_name', 'doid', 'url'}) From 49cd95fb6e0355d13cd73a26912397897a16c764 Mon Sep 17 00:00:00 2001 From: Susanna Kiwala Date: Fri, 19 Jun 2020 09:34:35 -0500 Subject: [PATCH 4/4] Fix formatting for assertions without nccn_guideline --- civicpy/civic.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/civicpy/civic.py b/civicpy/civic.py index bce1756..ba6ba04 100644 --- a/civicpy/civic.py +++ b/civicpy/civic.py @@ -687,7 +687,7 @@ def csq(self, include_status=None): "", "&".join([acmg_code.code for acmg_code in assertion.acmg_codes]), str(assertion.amp_level or ''), - "{} (v{})".format(assertion.nccn_guideline, assertion.nccn_guideline_version), + assertion.format_nccn_guideline(), str(assertion.fda_regulatory_approval or ''), str(assertion.fda_companion_test or ''), ])) @@ -824,6 +824,12 @@ def evidence(self): def hpo_ids(self): return [x.hpo_id for x in self.phenotypes if x.hpo_id] + def format_nccn_guideline(self): + if self.nccn_guideline is None: + return "" + else: + return "{} (v{})".format(self.nccn_guideline, self.nccn_guideline_version) + class User(CivicRecord):