Class: Chemicalml::Convention::Molecular::Constraints::AtomParityAtomRefs4ShouldBeDistinct

Inherits:
Constraint::NodeConstraint
  • Object
show all
Defined in:
lib/chemicalml/convention/molecular/constraints/atom_parity_atom_refs4_should_be_distinct.rb

Overview

An <atomParity> element's atomRefs4 attribute SHOULD reference four distinct atom ids around a chiral center. Duplicate ids make the parity descriptor meaningless. Warning severity.

Instance Method Summary collapse

Methods inherited from Constraint::NodeConstraint

#check

Instance Method Details

#check_node(node, _path) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/chemicalml/convention/molecular/constraints/atom_parity_atom_refs4_should_be_distinct.rb', line 15

def check_node(node, _path)
  ids = parse_refs(node.atom_refs4)
  return [] if ids.size < 2
  return [] if ids.uniq.size == ids.size

  duplicates = ids.group_by { |i| i }.select { |_, v| v.size > 1 }.keys
  [violation(path: yield_path(node),
             message: "atomParity #{node.id.inspect} atomRefs4 should reference four distinct atoms; " \
                      "duplicate ids: #{duplicates.inspect}",
             severity: :warning,
             value: node.atom_refs4)]
end