defmodule Bio.QualityScore do @moduledoc """ A struct representing the quality score of a FASTQ file. ``` elixir %QualityScore{ scoring_characters: binary(), scores: [integer()], label: binary(), encoding: Bio.IO.FastQ.quality_encoding() } ``` """ defstruct scoring_characters: "", scores: '', label: "", encoding: :phred_33 @doc false def new(bin, opts \\ []) do label = Keyword.get(opts, :label, "") encoding = Keyword.get(opts, :encoding) %__MODULE__{ scoring_characters: bin, scores: parse_scores(bin, encoding), label: label, encoding: encoding } end defp parse_scores(bin, :phred_33) do offset = 33 bin |> String.to_charlist() |> Enum.map(&(&1 - offset)) end defp parse_scores(bin, :phred_64) do offset = 64 bin |> String.to_charlist() |> Enum.map(&(&1 - offset)) end defp parse_scores(bin, :decimal) do bin |> String.split(" ") |> Enum.map(&String.to_integer/1) end end