Skip to content

Commit e57d091

Browse files
authored
Merge pull request #94 from broadinstitute/development
fixing regression with erroneous associations
2 parents c384f4f + de5aa0d commit e57d091

File tree

2 files changed

+25
-27
lines changed

2 files changed

+25
-27
lines changed

app/controllers/site_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ def annotation_query
483483
if @selected_annotation[:scope] == 'cluster'
484484
@annotations = @cluster.concatenate_data_arrays(@selected_annotation[:name], 'annotations')
485485
else
486-
study_annotations = @study.study_metadata_values(@selected_annotation[:name], @selected_annotation[:type])
486+
study_annotations = @study.cell_metadata_values(@selected_annotation[:name], @selected_annotation[:type])
487487
@annotations = []
488488
@cells.each do |cell|
489489
@annotations << study_annotations[cell]

app/models/study.rb

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,8 @@ def default_annotation
434434
if !default_cluster.nil? && default_cluster.cell_annotations.any?
435435
annot = default_cluster.cell_annotations.first
436436
default_annot = "#{annot[:name]}--#{annot[:type]}--cluster"
437-
elsif self.study_metadata.any?
438-
metadatum = self.study_metadata.first
437+
elsif self.cell_metadata.any?
438+
metadatum = self.cell_metadata.first
439439
default_annot = "#{metadatum.name}--#{metadatum.annotation_type}--study"
440440
else
441441
# annotation won't be set yet if a user is parsing metadata without clusters, or vice versa
@@ -568,7 +568,7 @@ def all_cells
568568
# cell lists from individual expression matrices
569569
def all_cells_array
570570
vals = []
571-
arrays = DataArray.where(study_id: self.id, linear_data_type: 'Study', linear_data_id: self.id, name: 'All Cells')
571+
arrays = DataArray.where(study_id: self.id, linear_data_type: 'Study', linear_data_id: self.id, name: 'All Cells').order_by(&:array_index)
572572
if arrays.any?
573573
arrays.each do |array|
574574
vals += array.values
@@ -593,25 +593,23 @@ def all_expression_matrix_cells
593593
end
594594

595595
# return a hash keyed by cell name of the requested study_metadata values
596-
def study_metadata_values(metadata_name, metadata_type)
597-
metadata_objects = self.study_metadata.by_name_and_type(metadata_name, metadata_type)
598-
vals = {}
599-
metadata_objects.each do |metadata|
600-
vals.merge!(metadata.cell_annotations)
596+
def cell_metadata_values(metadata_name, metadata_type)
597+
cell_metadatum = self.cell_metadata.by_name_and_type(metadata_name, metadata_type)
598+
if cell_metadatum.present?
599+
cell_metadatum.cell_annotations
600+
else
601+
{}
601602
end
602-
vals
603603
end
604604

605605
# return array of possible values for a given study_metadata annotation (valid only for group-based)
606-
def study_metadata_keys(metadata_name, metadata_type)
607-
vals = []
608-
unless metadata_type == 'numeric'
609-
metadata_objects = self.study_metadata.by_name_and_type(metadata_name, metadata_type)
610-
metadata_objects.each do |metadata|
611-
vals += metadata.values
612-
end
606+
def cell_metadata_keys(metadata_name, metadata_type)
607+
cell_metadatum = self.cell_metadata.by_name_and_type(metadata_name, metadata_type)
608+
if cell_metadatum.present?
609+
cell_metadatum.values
610+
else
611+
[]
613612
end
614-
vals.uniq
615613
end
616614

617615
###
@@ -1380,8 +1378,8 @@ def initialize_cluster_group_and_data_arrays(ordinations_file, user, opts={local
13801378
# set a default color profile if this is a numeric annotation
13811379
study_obj.default_options[:color_profile] = 'Reds'
13821380
end
1383-
elsif study_obj.study_metadata.any?
1384-
metadatum = study_obj.study_metadata.first
1381+
elsif study_obj.cell_metadata.any?
1382+
metadatum = study_obj.cell_metadata.first
13851383
study_obj.default_options[:annotation] = "#{metadatum.name}--#{metadatum.annotation_type}--study"
13861384
if metadatum.annotation_type == 'numeric'
13871385
# set a default color profile if this is a numeric annotation
@@ -1397,7 +1395,7 @@ def initialize_cluster_group_and_data_arrays(ordinations_file, user, opts={local
13971395
study_obj.save
13981396

13991397
# create subsampled data_arrays for visualization
1400-
study_metadata = CellMetadatum.where(study_id: self.id)
1398+
cell_metadata = CellMetadatum.where(study_id: self.id)
14011399
# determine how many levels to subsample based on size of cluster_group
14021400
required_subsamples = ClusterGroup::SUBSAMPLE_THRESHOLDS.select {|sample| sample < @cluster_group.points}
14031401
required_subsamples.each do |sample_size|
@@ -1408,7 +1406,7 @@ def initialize_cluster_group_and_data_arrays(ordinations_file, user, opts={local
14081406
end
14091407
end
14101408
# create study-based annotation subsamples
1411-
study_metadata.each do |metadata|
1409+
cell_metadata.each do |metadata|
14121410
@cluster_group.delay.generate_subsample_arrays(sample_size, metadata.name, metadata.annotation_type, 'study')
14131411
end
14141412
end
@@ -1688,7 +1686,7 @@ def initialize_cell_metadata(metadata_file, user, opts={local: true})
16881686

16891687
# next, check if this is a re-parse job, in which case we need to remove all existing entries first
16901688
if opts[:reparse]
1691-
self.study_metadata.delete_all
1689+
self.cell_metadata.delete_all
16921690
metadata_file.invalidate_cache_by_file_type
16931691
end
16941692

@@ -1783,7 +1781,7 @@ def initialize_cell_metadata(metadata_file, user, opts={local: true})
17831781
raw_vals = line.split(/[\t,]/).map(&:strip)
17841782
vals = self.sanitize_input_array(raw_vals)
17851783

1786-
# assign values to correct study_metadata object
1784+
# assign values to correct cell_metadata object
17871785
vals.each_with_index do |val, index|
17881786
unless index == name_index
17891787
if @metadata_data_arrays[index].values.size >= DataArray::MAX_ENTRIES
@@ -1792,9 +1790,9 @@ def initialize_cell_metadata(metadata_file, user, opts={local: true})
17921790
array = @metadata_data_arrays[index]
17931791
Rails.logger.info "#{Time.now}: Saving cell metadata data array: #{array.name}-#{array.array_index} using #{metadata_file.upload_file_name}:#{metadata_file.id} in #{self.name}"
17941792
array.save
1795-
new_array = metadata.study_metadata.build(name: metadata.name, array_type: 'annotation', cluster_name: metadata_file.name,
1796-
array_index: array.array_index + 1, study_file_id: metadata_file._id,
1797-
study_id: self.id, values: [])
1793+
new_array = metadata.data_arrays.build(name: metadata.name, array_type: 'annotations', cluster_name: metadata_file.name,
1794+
array_index: array.array_index + 1, study_file_id: metadata_file._id,
1795+
study_id: self.id, values: [])
17981796
@metadata_data_arrays[index] = new_array
17991797
end
18001798
# determine whether or not value needs to be cast as a float or not

0 commit comments

Comments
 (0)