pub struct SampleGroup {
pub samples: Vec<Sample>,
}Expand description
Struct for storing information about multiple samples and for defining functions associated
with groups of Samples, rather than individual structs.
Fields§
§samples: Vec<Sample>A group of samples
Implementations§
Source§impl SampleGroup
impl SampleGroup
Sourcepub fn from_samples(samples: &[Sample]) -> Result<Self>
pub fn from_samples(samples: &[Sample]) -> Result<Self>
Validates a group of Samples and instantiates a Self struct if they are valid. Will
clone the Sample structs and change the number on the ordinal field on those cloned
to match the order in which they are stored in this Self.
Per-sample read structures may differ in their per-input (T, B, M, C) segment counts
across samples (which lets each sample produce a different set of output files), but
the total length of all sample-barcode (B) segments per sample must equal the
barcode column for that sample (and barcodes are required to be the same length).
§Errors
- Will error if no samples are provided.
- Will error if there are duplicate sample names provided.
- Will error if there are duplicate barcodes provided.
- Will error if barcodes don’t all have the same length.
- Will error if any sample’s per-sample sample-barcode (
B) segment is not fixed length. - Will error if any sample’s per-sample sample-barcode (
B) segment lengths don’t sum to that sample’sbarcodecolumn length.
Sourcepub fn from_file<P: AsRef<Path>>(
path: P,
globals: &[ReadStructure],
) -> Result<SampleGroup>
pub fn from_file<P: AsRef<Path>>( path: P, globals: &[ReadStructure], ) -> Result<SampleGroup>
Attempts to load a Self object from a tab-delimited file. The file must have a header
row containing at least the columns sample_id and barcode. Optional additional columns
read_structure_1, read_structure_2, …, read_structure_<N> attach per-sample read
structures to each sample (one per input FASTQ in the order given to --inputs). When
these columns are present:
globals(the--read-structuresargument) must have exactlyNentries, one per input FASTQ.- A blank cell in
read_structure_<i>falls back toglobals[i-1]for that sample. - A row whose
read_structure_<n>cells are all blank usesglobalsentirely (i.e. is equivalent to omitting the per-sample columns for that sample only).
When no read_structure_<n> columns are present, globals is unused and every sample
uses the global structures.
§Errors
- Will error if the file cannot be read.
- Will error if the header row is missing required columns.
- Will error if
read_structure_<n>columns are non-contiguous or don’t matchglobals.len()(when present). - Will error if any
read_structure_<n>cell has a value that fails to parse. - Will error if
SampleGroup::from_samplesrejects the parsed records (e.g. duplicate names/barcodes, inconsistent barcode lengths, or barcode/B-segment length mismatch).
Sourcepub fn has_per_sample_read_structures(&self) -> bool
pub fn has_per_sample_read_structures(&self) -> bool
Returns true if this group has per-sample read structures (i.e. at least one sample
carries custom read structures that override --read-structures).
Sourcepub fn matching_prefix_lens(
&self,
default_structures: &[ReadStructure],
) -> Result<Vec<usize>>
pub fn matching_prefix_lens( &self, default_structures: &[ReadStructure], ) -> Result<Vec<usize>>
Returns the per-input matching prefix lengths needed to demultiplex this sample group.
For each input FASTQ index, this is the maximum across samples of the number of bases
before the first Template segment in that sample’s read structure. Falls back to the
corresponding entry in default_structures for samples without per-sample read
structures.
§Errors
- Returns an error if any non-Template segment in the matching window has a non-fixed length.
- Returns an error if a sample’s per-sample read-structure count differs from
default_structures.len().
Sourcepub fn build_matching_patterns(
&self,
default_structures: &[ReadStructure],
prefix_lens: &[usize],
) -> Result<Vec<Vec<u8>>>
pub fn build_matching_patterns( &self, default_structures: &[ReadStructure], prefix_lens: &[usize], ) -> Result<Vec<Vec<u8>>>
Builds the matching pattern bytes for each sample. The pattern is a fixed-length
byte sequence (concatenated across all input FASTQs) of total length
prefix_lens.iter().sum(). For each input, the sample’s read structure is walked
position-by-position; B (sample-barcode) segment positions are filled from
sample.barcode (taken in order across inputs), and M/S/C/T segment positions and any
trailing positions up to the prefix length are filled with N (treated as a wildcard
by the matcher).
§Errors
- Returns an error if any sample’s read structure has a non-fixed-length non-template segment in the matching window.
- Returns an error if a sample-barcode (
B) segment crosses the matching window boundary, since silently truncating a barcode would corrupt matching.
Trait Implementations§
Source§impl Clone for SampleGroup
impl Clone for SampleGroup
Source§fn clone(&self) -> SampleGroup
fn clone(&self) -> SampleGroup
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SampleGroup
impl Debug for SampleGroup
Source§impl Display for SampleGroup
impl Display for SampleGroup
Source§impl PartialEq for SampleGroup
impl PartialEq for SampleGroup
Source§fn eq(&self, other: &SampleGroup) -> bool
fn eq(&self, other: &SampleGroup) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for SampleGroup
Auto Trait Implementations§
impl Freeze for SampleGroup
impl RefUnwindSafe for SampleGroup
impl Send for SampleGroup
impl Sync for SampleGroup
impl Unpin for SampleGroup
impl UnsafeUnpin for SampleGroup
impl UnwindSafe for SampleGroup
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more