Sha256: 35bd380985e38458478b9d8a29c0bfc9d7cc93ebaf1f585673523052de7d1ca2

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

module ChemScanner
  module Interpreter
    using Extension

    module ReactionDetection
      require "chem_scanner/interpreter/reaction_detection/text_assignment"

      def assign_molecule_group
        all_reagent_ids = @reactions.reduce([]) do |acc, r|
          acc.concat(@arrow_map[r.arrow_id].text_arr)
        end

        auto_fit_arrow_polygons

        @mol_group_map.select do |tid, mgroup|
          (
            !all_reagent_ids.include?(tid) &&
            mgroup.molecules.count == 1 &&
            !mgroup.molecules.first.boxed
          )
        end.each do |mkey, mgroup|
          mol = mgroup.molecules.first
          mmid = mol.fragment.id

          mgroup_pos = {}
          @reactions.each do |reaction|
            rid = reaction.arrow_id
            arrow = @arrow_map[rid]
            group = detect_position(arrow, mgroup.title.polygon)
            next if group.nil?

            mgroup_pos[rid] = group
          end

          pos = mgroup_pos.detect { |_, p| p == "reagents" }
          next unless pos.nil?

          pos = mgroup_pos.detect { |_, p| %w[reactants products].include?(p) }
          next if pos.nil?

          # Don't need to keep it text_map anymore
          mol.text = @text_map.delete(mkey).value unless mgroup_pos.empty?
          mol.text_ids.delete(mkey)
          @mol_map.each_value { |m| m.text_ids.delete(mkey) }

          reaction = @reactions.detect { |r| r.arrow_id == pos[0] }
          group_ids = reaction.send("#{pos[1][0...-1]}_ids")
          group_ids.push(mmid)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chem_scanner-0.1.3 lib/chem_scanner/interpreter/reaction_detection/molecule_group.rb