% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/gather-spc.R
\name{gather_spc}
\alias{gather_spc}
\title{Gather measurements of different spectra types, corresponding
x-axis values and metadata from nested list.}
\usage{
gather_spc(data, spc_types = "spc")
}
\arguments{
\item{data}{Recursive list named with filename (\code{file_id}) at first level
entries, where each element containing a sample measurement has nested
metadata (\code{"metadata"}), spectra types (see \code{spc_types}), corresponding
x-axis values (see section \emph{"Details on spectra data checks and matching"}).
The \code{data} list is a structural convention to organize spectra and their
metadata. It follows for example the list structure returned from the Bruker
OPUS binary reader \code{simplerspec::read_opus_univ()}.}

\item{spc_types}{Character vector with the spectra types to be extracted
from \code{data} list and gathered into list-columns. The spectra type names need
to exactly follow the naming conventions, and the element names and contents
need to be present at the second list hierarchy of \code{data}. These values are
allowed:
\itemize{
\item \code{"spc"} (default): final raw spectra after atmospheric compensation, if
performed (named \code{AB} in Bruker OPUS software; results from referencing
sample to reference single channel reflectance and transforming to
absorbance).
\item \code{"spc_nocomp"}: raw spectra without atmospheric correction
\item \code{"sc_sm"}: Single channel reflectance spectra of the samples
\item \code{"sc_rf"}: Single channel reflectance spectra of the reference (background
spectra)
\item \code{"ig_sm"}: Interferograms of the sample spectra (currently only spectra
without x-axis list-columns are matched and returned)
\item \code{"ig_rf"}: Interferograms of the reference spectra (currently only spectra
without x-axis list-columns are matched and returned)
}}
}
\value{
Spectra tibble (\code{spc_tbl} with classes \code{"tbl_df"}, \code{"tbl"}, and
\code{"data.frame"}) with the following (list-)columns:
\itemize{
\item \code{"unique_id"}: Character vector with unique measurement identifier, likely
a string with file names in combination with date and time (extracted from
each \code{"metadata"} data frame column).
\item \code{"file_id"} : Character vector with file name including the extension
(extracted from each \code{"metadata"} data frame column).
\item \code{"sample_id"}: Character vector with sample identifier. For Bruker OPUS
binary files, this corresponds to the file name without the file extension
in integer increments of sample replicate measurements.
\item One or multiple of \code{"spc"}, \code{"spc_nocomp"}, \code{"sc_sm"}, or \code{"sc_rf"}:
List(s) of data.table's containing spectra type(s).
\item One or multiple of \code{"wavenumbers"}, \code{"wavelengths"}, \code{"x_values"},
\code{"wavenumbers_sc_sm"}, \code{"wavelengths_sc_sm"}, \code{"x_values_sc_sm"},
\code{"wavenumbers_sc_rf"}, \code{"wavelengths_sc_rf"}, or \code{"x_values_sc_rf"}:
List(s) of numeric vectors with matched x-axis values (see \emph{"Details on
spectra data checks and matching"} below).
}
}
\description{
Gather spectra, corresponding x-axis values, and device and
measurement metadata from a nested list into a spectra tibble, so that one
row represents one spectral measurement. Spectra, x-axis values and metadata
are mapped from the individual list elements (named after file name including
the extension) and transformed into (list-)columns of a spectra tibble,
which is an extended data frame. For each measurement, spectral data and
metadata are combined into one row of the tidy data frame. In addition, the ID
columns \code{unique_id}, \code{file_id}, and \code{sample_id} are extracted from
\code{"metadata"} (data frame) list entries and returned as identifier columns of
the spectra tibble. List-columns facilitate keeping related data together in
a rectangular data structure. They can be manipulated easily during
subsequent transformations, for example using the standardized functions of
the simplerspec data processing pipeline.
}
\section{Details on spectra data checks and matching}{

\code{gather_spc()} checks whether these conditions are met for each measurement
in the list \code{data}:
\enumerate{
\item Make sure that the first level \code{data} elements are named (assumed to be
the file name the data originate from), and remove missing measurements with
an informative message.
\item Remove any duplicated file names and raise a message if there are
name duplicates at first level.
\item Check whether \code{spc_types} inputs are supported (see argument \code{spc_types})
and present at the second level of the \code{data} list. If not, remove
all data elements for incomplete spectral measurements.
\item Match spectra types and possible corresponding x-axis types from
a lookup list. For each selected spectrum type (left), at least one of
the element names of the x-axis type (right) needs to be present for each
measurement in the list \code{data}:
\itemize{
\item \code{"spc"}  : \code{"wavenumbers"}, \code{"wavelengths"}, or \code{"x_values"}
\item \code{"spc_nocomp"} : \code{"wavenumbers"}, \code{"wavelengths"}, or \code{"x_values"}
\item \code{"sc_sm"} : \code{"wavenumbers_sc_sm"}, \code{"wavelengths_sc_sm"}, or
\code{"x_values_sc_sm"}
\item \code{"sc_rf"} : \code{"wavenumbers_sc_rf"}, \code{"wavelengths_sc_rf"}, or
\code{"x_values_sc_rf"}
}
\item Check if \code{"metadata"} elements are present and remove data elements for
measurements with missing or incorrectly named metadata elements
(message).
}
}

