InputMods

Struct InputMods 

Source
#[non_exhaustive]
pub struct InputMods<S: TagState + Args + FromArgMatches + Default> { pub tag: S, pub mod_strand: Option<RestrictModCalledStrand>, pub mod_prob_filter: ThresholdState, pub trim_read_ends_mod: usize, pub base_qual_filter_mod: u8, pub mod_region: Option<GenomicRegion>, pub region_bed3: Option<Bed3<i32, u64>>, }
Expand description

This struct contains the options input to our modification-data functions with restrictions on data received.

If you want to build this, use InputModsBuilder. In CLI mode, clap populates this struct. This and the InputBam struct are used to set almost all input options to many of our functions that process BAM/modBAM files.

§Examples

Please look at the documentation of InputBam to see a fully-worked example to set up inputs to perform a calculation.

Following example uses many fields and is for a RequiredTag variant. You can omit some of them depending on your use case. mod_region must can be converted to region_bed3 using GenomicRegion::try_to_bed3 with a suitable BAM header before this struct can be used with most of our functions. We do not force this in the builder route as we may not want to do this for some reason.

use nanalogue_core::{InputModsBuilder, Error, RequiredTag, ThresholdState};
use std::str::FromStr;

let input_options = InputModsBuilder::default()
    .tag(RequiredTag::from_str("m")?)
    .mod_strand("bc".into())
    .mod_prob_filter(ThresholdState::GtEq(0))
    .trim_read_ends_mod(10)
    .base_qual_filter_mod(10)
    .mod_region("chr3:4000-5000".into())
    .build()?;

A RequiredTag variant that sets region_bed3 instead of mod_region. If mod_region is set, then a downstream function must parse a BAM file, and then convert mod_region into region_bed3 using the header. If the user is confident that they know the index number of a contig, then they can directly set region_bed3. In the example below, the user knows chr3 corresponds to 4, so they set the region directly.

use bedrs::prelude::Bed3;
use nanalogue_core::{InputModsBuilder, Error, RequiredTag, ThresholdState};
use std::str::FromStr;

let input_options = InputModsBuilder::<RequiredTag>::default()
    .tag(RequiredTag::from_str("m")?)
    .mod_strand("bc".into())
    .mod_prob_filter(ThresholdState::GtEq(0))
    .trim_read_ends_mod(10)
    .base_qual_filter_mod(10)
    .region_bed3(Bed3::<i32, u64>::new(4, 4000, 5000))
    .build()?;

Setting both region_bed3 and mod_region should result in an error, even if they both refer to the same region. This is because setting both can result in an undefined state, so we do not allow this.

use bedrs::prelude::Bed3;
use nanalogue_core::{InputModsBuilder, Error, RequiredTag, ThresholdState};
use std::str::FromStr;

let input_options = InputModsBuilder::<RequiredTag>::default()
    .mod_prob_filter(ThresholdState::GtEq(0))
    .region_bed3(Bed3::<i32, u64>::new(4, 4000, 5000))
    .mod_region("chr3:4000-5000".into())
    .build()?;

Following example is for an OptionalTag variant with the tag omitted, and many other fields omitted as well, which take on a default value.

use nanalogue_core::{InputModsBuilder, Error, OptionalTag, ThresholdState};
use std::str::FromStr;

let input_options = InputModsBuilder::<OptionalTag>::default()
    .mod_prob_filter(ThresholdState::GtEq(0))
    .build()?;

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§tag: S

modified tag

§mod_strand: Option<RestrictModCalledStrand>

modified strand, set this to bc or bc_comp, meaning on basecalled strand or its complement. Some technologies like PacBio or ONT duplex can call mod data on both a strand and its complementary DNA and store it in the record corresponding to the strand, so you can use this filter to select only for mod data on a strand or its complement. Please note that this filter is different from selecting for forward or reverse aligned reads using the BAM flags.

§mod_prob_filter: ThresholdState

Filter to reject mods before analysis. Specify as low,high where both are fractions to reject modifications where the probabilities (p) are in this range e.g. “0.4,0.6” rejects 0.4 <= p <= 0.6. You can use this to reject ‘weak’ modification calls before analysis i.e. those with probabilities close to 0.5. NOTE: (1) Whether this filtration is applied or not, mods < 0.5 are considered unmodified and >= 0.5 are considered modified by our program. (2) mod probabilities are stored as a number from 0-255 in the modBAM format, so we internally convert 0.0-1.0 to 0-255. Default: reject nothing.

§trim_read_ends_mod: usize

Filter this many bp at the start and end of a read before any mod operations. Please note that the units here are bp and not units of base being queried.

§base_qual_filter_mod: u8

Exclude bases whose base quality is below this threshold before any mod operation, defaults to 0 i.e. unused. NOTE: (1) This step is only applied before modification operations, and not before any other operations. (2) No offsets such as +33 are needed here. (3) Modifications on reads where base quality information is not available are all rejected if this is non-zero.

§mod_region: Option<GenomicRegion>

Only keep modification data from this region

§region_bed3: Option<Bed3<i32, u64>>

Only keep modification data from this region. We do not expose this to the user, but infer it from the other options set by the user. We cannot populate this directly at the time of CLI parsing, as we need to look at the BAM header to convert a contig name into a numeric contig id.

Implementations§

Source§

impl InputMods<RequiredTag>

can return tag without encasing in an option in the RequiredTag variant

Source

pub fn required_tag(&self) -> ModChar

retrieves tag

Trait Implementations§

Source§

impl<S: TagState + Args + FromArgMatches + Default> Args for InputMods<S>

Source§

fn group_id() -> Option<Id>

Report the ArgGroup::id for this set of arguments
Source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate Self via FromArgMatches::from_arg_matches_mut Read more
Source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate self via FromArgMatches::update_from_arg_matches_mut Read more
Source§

impl<S: Clone + TagState + Args + FromArgMatches + Default> Clone for InputMods<S>

Source§

fn clone(&self) -> InputMods<S>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<S: Debug + TagState + Args + FromArgMatches + Default> Debug for InputMods<S>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<S: TagState + Args + FromArgMatches + Default> Default for InputMods<S>

Implements defaults for InputMods

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de, S> Deserialize<'de> for InputMods<S>

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<S: TagState + Args + FromArgMatches + Default> FromArgMatches for InputMods<S>

Source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

impl<S: TagState + Args + FromArgMatches + Default> InputModOptions for InputMods<S>

Source§

fn tag(&self) -> Option<ModChar>

retrieves tag
Source§

fn mod_strand(&self) -> Option<RestrictModCalledStrand>

retrieves option to set basecalled strand or opposite in mod retrieval
Source§

fn mod_prob_filter(&self) -> ThresholdState

returns probability filter
Source§

fn trim_read_ends_mod(&self) -> usize

returns read end trimming
Source§

fn base_qual_filter_mod(&self) -> u8

returns threshold for filtering base PHRED quality
Source§

impl<S: TagState + Args + FromArgMatches + Default> InputRegionOptions for InputMods<S>

Source§

fn region_filter_genomic_string(&self) -> Option<GenomicRegion>

returns region requested but region in genomic string format
Source§

fn region_filter(&self) -> &Option<Bed3<i32, u64>>

returns region requested
Source§

fn set_region_filter(&mut self, value: Option<Bed3<i32, u64>>)

sets region requested
Source§

fn is_full_overlap(&self) -> bool

returns true if full overlap with region is requested as opposed to only partial overlap. defaults to false.
Source§

fn convert_region_to_bed3(&mut self, header: HeaderView) -> Result<(), Error>

converts region from genomic string representation to bed3 representation Read more
Source§

impl<S> Serialize for InputMods<S>

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl<S> Freeze for InputMods<S>
where S: Freeze,

§

impl<S> RefUnwindSafe for InputMods<S>
where S: RefUnwindSafe,

§

impl<S> Send for InputMods<S>
where S: Send,

§

impl<S> Sync for InputMods<S>
where S: Sync,

§

impl<S> Unpin for InputMods<S>
where S: Unpin,

§

impl<S> UnwindSafe for InputMods<S>
where S: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Key for T
where T: Clone,

Source§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
Source§

fn size(&self) -> usize

The size of the key in bytes.
Source§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
Source§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
Source§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MetaBounds for T
where T: Clone + Default + Debug + Send + Sync,

Source§

impl<T> PlanCallbackArgs for T

Source§

impl<T> PlanCallbackOut for T