- fInteriorOuter :: BaseF (NInteLoop -> ExtFeatures (Vector (PairIdx, Double)))
- btInteriorOuter :: Params -> Primary -> EStem -> NInteLoop -> NBT -> ExtBT
- fInteriorLoop :: BaseF (NInte -> Features (Vector (PairIdx, Double)))
- btInteriorLoop :: Params -> Primary -> NInteLoop -> NInte -> NBT -> NBT
- fInteriorInner :: BaseF (EStem -> Features (Vector (ExtPairIdx, Double)))
- btInteriorInner :: Params -> Primary -> NInte -> EStem -> ExtBT -> NBT
- fInteriorKLs :: Int -> Int -> Vector (Int, Int)

# Outer part

fInteriorOuter :: BaseF (NInteLoop -> ExtFeatures (Vector (PairIdx, Double)))Source

The outer part of an interior loop. Given a certain basepair type, add the cost from the unpaired part.

# Loop part

fInteriorLoop :: BaseF (NInte -> Features (Vector (PairIdx, Double)))Source

Performs the interior loop calculations between (i,j) outer and (k,l) inner part. The score based on the unpaired nucleotides is independent of both, the outer and the inner basepair type.

NOTE / TODO -- fusion enabled for this function (due to it taking 50% of the time), full fusion is still dependent on other factors and needs to be checked (in particular, we still have allocation events)

btInteriorLoop :: Params -> Primary -> NInteLoop -> NInte -> NBT -> NBTSource

Backtrack the unpaired loop region

# Inner part

fInteriorInner :: BaseF (EStem -> Features (Vector (ExtPairIdx, Double)))Source

This opens up an interior loop. For each index (i,j) we minimize over all possible basepair types.

btInteriorInner :: Params -> Primary -> NInte -> EStem -> ExtBT -> NBTSource

Backtrack from an NInte result to the corresponding EStem parts

# Helper functions

fInteriorKLs :: Int -> Int -> Vector (Int, Int)Source

Since backtracking interior loops is mostly selfcontained, we encapsulate the above three functions -- which we can't do easily with the forward calculations as they actually have to save on runtime.

Given the outer indices (i,j), produces delta_i and delta_j so that
i+delta_i and j-delta_j are the inner indices. `fInteriorKLs`

should fuse
and should make sure that l-k>=4 is always true (maxd). Furthermore the
maximal unpaired length of both sides combined is determined by `maxLength`

.

TODO better name than `maxLength`