Utility functions for SAM references.

(ns cljam.io.sam.util.refs
  (:require [clojure.set :as cset]))

Return a reference sequence from the sam header.

(defn make-refs
  [hdr]
  (map
   #(cset/rename-keys
     %
     {:SN :name, :LN :len, :AH :alt, :AS :assembly,
      :M5 :md5, :SP :species, :UR :uri})
   (:SQ hdr)))
(defn- ref-id*
  [refs name]
  (some #(when (= name (:name (second %))) (first %))
        (map-indexed vector refs)))

Returns reference ID from the reference sequence and the specified reference name. If not found, returns nil.

(def ref-id
  (memoize ref-id*))

Returns a reference name from the reference ID. Returns nil if id is not mapped.

(defn ref-name
  [refs ^long id]
  (when (<= 0 id (dec (count refs)))
    (:name (nth refs id))))

Returns the first reference which has the specified name.

(defn ref-by-name
  [refs name]
  (some #(when (= (:name %) name) %) refs))