Skip to content

Commit

Permalink
Merge pull request #1169 from griffithlab/add-features-tsv-export
Browse files Browse the repository at this point in the history
port gene summaries tsv exporter to feature exporter
  • Loading branch information
acoffman authored Jan 14, 2025
2 parents 0a66cd3 + cb21e0d commit 5d0ab72
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 41 deletions.
11 changes: 10 additions & 1 deletion server/app/jobs/generate_tsvs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ def perform
public_path = public_file_path(e.file_name)
FileUtils.cp(tmp_file.path, public_path)
File.chmod(0644, public_path)

#symlink in legacy TSV names for backwards compatibility
if e.respond_to?(:file_aliases)
e.file_aliases.each do |fa|
link_path = public_file_path(fa)
FileUtils.ln_s(public_path, link_path, force: true)
File.chmod(0644, link_path)
end
end
ensure
tmp_file.unlink
end
Expand All @@ -22,7 +31,7 @@ def perform

def tsvs_to_generate
[
GeneTsvFormatter,
FeatureTsvFormatter,
VariantTsvFormatter,
EvidenceItemTsvFormatter,
VariantGroupTsvFormatter,
Expand Down
4 changes: 2 additions & 2 deletions server/app/jobs/upload_tsvs_to_aws.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def perform
def absolute_local_path(file)
File.join(TsvRelease.downloads_path, file)
end

def bucket_name
'civic-aws-opendata'
end
Expand Down Expand Up @@ -61,7 +61,7 @@ def expected_files
{
"AssertionSummaries/date=#{date_string}/AssertionSummaries.tsv" => "#{date_string}/#{date_string}-AssertionSummaries.tsv",
"ClinicalEvidenceSummaries/date=#{date_string}/ClinicalEvidenceSummaries.tsv" => "#{date_string}/#{date_string}-ClinicalEvidenceSummaries.tsv",
"GeneSummaries/date=#{date_string}/GeneSummaries.tsv" => "#{date_string}/#{date_string}-GeneSummaries.tsv",
"FeatureSummaries/date=#{date_string}/FeatureSummaries.tsv" => "#{date_string}/#{date_string}-FeatureSummaries.tsv",
"VariantGroupSummaries/date=#{date_string}/VariantGroupSummaries.tsv"=> "#{date_string}/#{date_string}-VariantGroupSummaries.tsv",
"VariantSummaries/date=#{date_string}/VariantSummaries.tsv" => "#{date_string}/#{date_string}-VariantSummaries.tsv",
"MolecularProfileSummaries/date=#{date_string}/MolecularProfileSummaries.tsv" => "#{date_string}/#{date_string}-MolecularProfileSummaries.tsv",
Expand Down
111 changes: 111 additions & 0 deletions server/app/tsv_formatters/feature_tsv_formatter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
class FeatureTsvFormatter
def self.objects
Feature.joins(variants: { molecular_profiles: [:evidence_items]})
.includes(:feature_instance)
.distinct
end

def self.headers
shared_headers = [
'feature_id',
'feature_civic_url',
'feature_type',
'name',
'feature_aliases',
'description',
'last_review_date',
'is_flagged'
]
shared_headers + gene_headers + factor_headers + fusion_headers
end

def self.gene_headers
['entrez_id']
end

def self.factor_headers
['ncit_id']
end

def self.fusion_headers
[
'five_prime_partner_status',
'three_prime_partner_status',
'five_prime_gene_id',
'five_prime_gene_name',
'five_prime_gene_entrez_id',
'three_prime_gene_id',
'three_prime_gene_name',
'three_prime_gene_entrez_id',
]
end

def self.create_gene_row(feature)
row = [
feature.feature_instance.entrez_id
]
row += Array.new(factor_headers.size)
row += Array.new(fusion_headers.size)
return row
end

def self.create_factor_row(feature)
row = Array.new(gene_headers.size)
row += [
feature.feature_instance.ncit_id
]
row += Array.new(fusion_headers.size)
end

def self.create_fusion_row(feature)
feature_instance = feature.feature_instance
row = Array.new(gene_headers.size)
row += Array.new(factor_headers.size)
row += [
feature_instance.five_prime_partner_status,
feature_instance.three_prime_partner_status,
feature_instance.five_prime_gene_id,
feature_instance.five_prime_gene&.name,
feature_instance.five_prime_gene&.entrez_id,
feature_instance.three_prime_gene_id,
feature_instance.three_prime_gene&.name,
feature_instance.three_prime_gene&.entrez_id,
]
end

def self.row_from_object(feature)
shared_cols = [
feature.id,
LinkAdaptors::Feature.new(feature).permalink_path(include_domain: true),
feature.feature_instance_type.demodulize,
feature.name,
feature.feature_aliases.map(&:name).join(","),
feature.description&.squish,
feature.updated_at,
feature.flagged
]

feature_cols = case feature.feature_instance
when Features::Gene
create_gene_row(feature)
when Features::Factor
create_factor_row(feature)
when Features::Fusion
create_fusion_row(feature)
else
raise StandardError.new("Unknown feature type for TSV export: #{feature.feature_instance_type}")
end
shared_cols + feature_cols
end

def self.file_name
'FeatureSummaries.tsv'
end

def self.file_aliases
[
'GeneSummaries.tsv'
]
end
end

37 changes: 0 additions & 37 deletions server/app/tsv_formatters/gene_tsv_formatter.rb

This file was deleted.

2 changes: 1 addition & 1 deletion server/app/tsv_formatters/variant_tsv_formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def self.gene_headers
]
end

def self.factor_headers
def self.factor_headers
[
'ncit_id'
]
Expand Down

0 comments on commit 5d0ab72

Please sign in to comment.