Module: TaxonWorks::Analysis::AssertedDistribution::BasicEndemism

Defined in:
lib/taxonworks/analysis/asserted_distribution/basic_endemism.rb

Class Method Summary collapse

Class Method Details

.quick_endemism(taxon_name, asserted_distribution_shape_type, asserted_distribution_shape_id) ⇒ Hash

Returns a very simple report summarizing asserted distributions !! only a single shape is used (not its children).

Parameters:

  • taxon_name (TaxonName)

    required

  • asserted_distribution_shape_type (String)

    required

  • asserted_distribution_shape_id (Integer)

    required

Returns:

  • (Hash)

    a very simple report summarizing asserted distributions !! only a single shape is used (not its children)



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/taxonworks/analysis/asserted_distribution/basic_endemism.rb', line 12

def self.quick_endemism(taxon_name,
  asserted_distribution_shape_type, asserted_distribution_shape_id
)
  data = {}

  otus =  Otu.descendant_of_taxon_name(taxon_name.id)
  return {} if otus.count > 2000

  q = ::Queries::AssertedDistribution::Filter.new(
    taxon_name_id: taxon_name.id,
    descendants: true,
    asserted_distribution_shape_type:,
    asserted_distribution_shape_id:
  )

  return {} if q.all.select(:otu_id).distinct.count > 2000

  q.all.find_each do |a|

    e = ::AssertedDistribution
      .where(project: taxon_name.project, otu_id: a.otu_id)
      .where(asserted_distribution_shape_type:)
      .where.not(asserted_distribution_shape_id:).count

    n = a.otu.taxon_name&.valid_taxon_name

    if e == 0 && !data[n]
      data[n] = false
    else
      data[n] = true
    end
  end
  data
end