lib/catissue/domain/abstract_specimen.rb
def create_derived(opts)
      # Merge the non-domain attribute values from this specimen, unless there is a requirement.
      opts = value_hash(DERIVED_MERGEABLE_ATTRS).merge!(opts) unless opts.has_key?(:specimen_requirement)
      # Copy this specimen's characteristics, if not already given in the options.
      opts[:specimen_characteristics] ||= default_derived_characteristics
      # Make the new specimen.
      spc = Specimen.create_specimen(opts)
      # The derived specimen's parent is this specimen.
      spc.parent = self
      spc
    end
def create_derived(opts)
      # Merge the non-domain attribute values from this specimen, unless there is a requirement.
      opts = value_hash(DERIVED_MERGEABLE_ATTRS).merge!(opts) unless opts.has_key?(:specimen_requirement)
      # Copy this specimen's characteristics, if not already given in the options.
      opts[:specimen_characteristics] ||= default_derived_characteristics
      # Make the new specimen.
      spc = Specimen.create_specimen(opts)
      # The derived specimen's parent is this specimen.
      spc.parent = self
      spc
    end
Creates a derived specimen. The options is an attribute => value hash. The options
 can also include a +:specimen_requirement+. The non-domain attribute values of the
 new derived specimen are determined according to the following precedence rule:
 1. The attribute => value option.
 2. The requirement property value.
 3. This specimen's property value.

 @param [{Symbol => Object}] opts the derived specimen attribute => value hash
 @return [AbstractSpecimen] the derived specimen or requirement