Class: Sequencescape::Api::V2::Well

Inherits:
Base
  • Object
show all
Includes:
Shared::HasRequests
Defined in:
app/sequencescape/sequencescape/api/v2/well.rb

Overview

rubocop:todo Style/Documentation

Instance Method Summary collapse

Instance Method Details

#all_latest_qcObject



49
50
51
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 49

def all_latest_qc
  qc_results.sort_by(&:id).index_by(&:key).values
end

#contains_control?Boolean

Returns:

  • (Boolean)


96
97
98
99
100
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 96

def contains_control?
  return true if aliquots[0]&.sample&.control

  false
end

#control_infoObject



102
103
104
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 102

def control_info
  aliquots[0]&.sample&.control_type
end

#control_info_formattedObject



106
107
108
109
110
111
112
113
114
115
116
117
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 106

def control_info_formatted
  return nil unless contains_control?

  case control_info
  when 'positive', 'pcr positive'
    '+'
  when 'negative', 'pcr negative', 'lysate negative'
    '-'
  else
    'c' # control of unspecified type
  end
end

#coordinateObject



53
54
55
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 53

def coordinate
  WellHelpers.well_coordinate(location)
end

#empty?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 69

def empty?
  aliquots.blank? || aliquots.empty?
end

#inactive?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 73

def inactive?
  empty? || failed? || cancelled?
end

#input_amount_availableObject



89
90
91
92
93
94
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 89

def input_amount_available
  molarity = latest_molarity&.value
  return unless molarity

  molarity.to_f * 25
end

#latest_cell_viabilityObject



38
39
40
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 38

def latest_cell_viability
  latest_qc(key: 'viability', units: '%')
end

#latest_concentrationObject



26
27
28
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 26

def latest_concentration
  latest_qc(key: 'concentration', units: 'ng/ul')
end

#latest_live_cell_countObject



34
35
36
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 34

def latest_live_cell_count
  latest_qc(key: 'live_cell_count', units: 'cells/ml')
end

#latest_molarityObject



30
31
32
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 30

def latest_molarity
  latest_qc(key: 'molarity', units: 'nM')
end

#latest_qc(key:, units:) ⇒ Object



42
43
44
45
46
47
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 42

def latest_qc(key:, units:)
  qc_results.to_a # Convert to array to resolve any api queries. Otherwise select fails to work.
    .select { |qc| qc.key.casecmp(key).zero? }
    .select { |qc| qc.units.casecmp(units).zero? }
    .max_by(&:created_at)
end

#locationObject



61
62
63
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 61

def location
  position['name']
end

#order_groupObject



119
120
121
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 119

def order_group
  aliquots.map(&:order_group).uniq
end

#quadrant_indexObject



57
58
59
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 57

def quadrant_index
  WellHelpers.well_quadrant(location)
end

#sanger_sample_idObject



81
82
83
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 81

def sanger_sample_id
  aliquots.first.sample.sanger_sample_id
end

#suboptimal?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 77

def suboptimal?
  aliquots.any?(&:suboptimal)
end

#supplier_nameObject



85
86
87
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 85

def supplier_name
  aliquots.first.sample..supplier_name
end

#tagged?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'app/sequencescape/sequencescape/api/v2/well.rb', line 65

def tagged?
  aliquots.any?(&:tagged?)
end