packages feed

BiobaseBlast 0.3.1.0 → 0.3.3.0

raw patch · 10 files changed

+135/−63 lines, 10 filesdep ~BiobaseTypesdep ~BiobaseXNAdep ~PrimitiveArraynew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: BiobaseTypes, BiobaseXNA, PrimitiveArray, SciBaseTypes

API changes (from Hackage documentation)

- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (GHC.Classes.Eq s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc1SubstMat t s a n)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (GHC.Classes.Eq s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc2SubstMat t s a n)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (GHC.Classes.Eq s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc3SubstMat t s a n)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2). (GHC.Classes.Eq s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.AASubstMat t s a)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2). (GHC.Read.Read s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Read.Read (Biobase.SubstMatrix.Types.AASubstMat t s a)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2). (GHC.Show.Show s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Show.Show (Biobase.SubstMatrix.Types.AASubstMat t s a)
- Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2). GHC.Generics.Generic (Biobase.SubstMatrix.Types.AASubstMat t s a)
- Biobase.SubstMatrix.Types: newtype AASubstMat t s a
+ Biobase.SubstMatrix.Statistics: estimateLambda :: (Unbox s, Num s, Real s) => AASubstMat t s a b -> Double
+ Biobase.SubstMatrix.Types: [_aaSubstLambda] :: AASubstMat t s a b -> Double
+ Biobase.SubstMatrix.Types: aaSubstLambda :: forall k_aFmv (t_aFmd :: k_aFmv) s_aFme k_aFmC (a_aFmf :: k_aFmC) k_aFmD (b_aFmg :: k_aFmD) k_aGwd (t_aGwc :: k_aGwd). Lens (AASubstMat (t_aFmd :: k_aFmv) s_aFme (a_aFmf :: k_aFmC) (b_aFmg :: k_aFmD)) (AASubstMat (t_aGwc :: k_aGwd) s_aFme (a_aFmf :: k_aFmC) (b_aFmg :: k_aFmD)) Double Double
+ Biobase.SubstMatrix.Types: data AASubstMat t s a b
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (b :: k3). (Data.Vector.Unboxed.Base.Unbox s, GHC.Classes.Eq s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.AASubstMat t s a b)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (b :: k3). (GHC.Read.Read s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Read.Read (Biobase.SubstMatrix.Types.AASubstMat t s a b)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (b :: k3). (GHC.Show.Show s, Data.Vector.Unboxed.Base.Unbox s) => GHC.Show.Show (Biobase.SubstMatrix.Types.AASubstMat t s a b)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (b :: k3). GHC.Generics.Generic (Biobase.SubstMatrix.Types.AASubstMat t s a b)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (Data.Vector.Unboxed.Base.Unbox s, GHC.Classes.Eq s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc1SubstMat t s a n)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (Data.Vector.Unboxed.Base.Unbox s, GHC.Classes.Eq s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc2SubstMat t s a n)
+ Biobase.SubstMatrix.Types: instance forall k1 (t :: k1) s k2 (a :: k2) k3 (n :: k3). (Data.Vector.Unboxed.Base.Unbox s, GHC.Classes.Eq s) => GHC.Classes.Eq (Biobase.SubstMatrix.Types.ANuc3SubstMat t s a n)
- Biobase.SubstMatrix: fromFileOrCached :: (MonadIO m, MonadError String m) => FilePath -> m (AASubstMat t (DiscLogOdds Unknown) a)
+ Biobase.SubstMatrix: fromFileOrCached :: (MonadIO m, MonadError String m) => FilePath -> m (AASubstMat t (DiscLogOdds (1 :% 1)) a b)
- Biobase.SubstMatrix: mkANuc3SubstMat :: TranslationTable (Letter DNA n) (Letter AA n) -> AASubstMat t (DiscLogOdds k) n -> ANuc3SubstMat t (Letter AA n, DiscLogOdds k) n n
+ Biobase.SubstMatrix: mkANuc3SubstMat :: TranslationTable (Letter DNA n) (Letter AA n) -> AASubstMat t (DiscLogOdds k) n n -> ANuc3SubstMat t (Letter AA n, DiscLogOdds k) n n
- Biobase.SubstMatrix: mkProbabilityMatrix :: Double -> AASubstMat t (DiscLogOdds k) n -> AASubstMat t (Log (Probability NotNormalized Double)) n
+ Biobase.SubstMatrix: mkProbabilityMatrix :: Double -> AASubstMat t (DiscLogOdds k) n m -> AASubstMat t (Log (Probability NotNormalized Double)) n m
- Biobase.SubstMatrix.Embedded: embeddedPamBlosum :: [(FilePath, AASubstMat t (DiscLogOdds Unknown) a)]
+ Biobase.SubstMatrix.Embedded: embeddedPamBlosum :: [(FilePath, AASubstMat t (DiscLogOdds (1 :% 1)) a b)]
- Biobase.SubstMatrix.Import: fromByteString :: MonadError String m => ByteString -> m (AASubstMat t (DiscLogOdds k) a)
+ Biobase.SubstMatrix.Import: fromByteString :: (MonadError String m, Real (Discretized k)) => ByteString -> m (AASubstMat t (DiscLogOdds k) a b)
- Biobase.SubstMatrix.Import: fromFile :: (MonadIO m, MonadError String m) => FilePath -> m (AASubstMat t (DiscLogOdds k) a)
+ Biobase.SubstMatrix.Import: fromFile :: (MonadIO m, MonadError String m, Real (Discretized k)) => FilePath -> m (AASubstMat t (DiscLogOdds k) a b)
- Biobase.SubstMatrix.Types: AASubstMat :: Unboxed ((Z :. Letter AA a) :. Letter AA a) s -> AASubstMat t s a
+ Biobase.SubstMatrix.Types: AASubstMat :: !Unboxed ((Z :. Letter AA a) :. Letter AA b) s -> Double -> AASubstMat t s a b
- Biobase.SubstMatrix.Types: [_aaSubstMat] :: AASubstMat t s a -> Unboxed ((Z :. Letter AA a) :. Letter AA a) s
+ Biobase.SubstMatrix.Types: [_aaSubstMat] :: AASubstMat t s a b -> !Unboxed ((Z :. Letter AA a) :. Letter AA b) s
- Biobase.SubstMatrix.Types: aaSubstMat :: forall t_aQo8 s_aQo9 a_aQoa t_aSgr s_aSgs a_aSgt. Iso (AASubstMat t_aQo8 s_aQo9 a_aQoa) (AASubstMat t_aSgr s_aSgs a_aSgt) (Unboxed ((:.) ((:.) Z (Letter AA a_aQoa)) (Letter AA a_aQoa)) s_aQo9) (Unboxed ((:.) ((:.) Z (Letter AA a_aSgt)) (Letter AA a_aSgt)) s_aSgs)
+ Biobase.SubstMatrix.Types: aaSubstMat :: forall k_aFmv (t_aFmd :: k_aFmv) s_aFme k_aFmC (a_aFmf :: k_aFmC) k_aFmD (b_aFmg :: k_aFmD) k_aGwi (t_aGwe :: k_aGwi) s_aGwf k_aGwj (a_aGwg :: k_aGwj) k_aGwk (b_aGwh :: k_aGwk). Lens (AASubstMat (t_aFmd :: k_aFmv) s_aFme (a_aFmf :: k_aFmC) (b_aFmg :: k_aFmD)) (AASubstMat (t_aGwe :: k_aGwi) s_aGwf (a_aGwg :: k_aGwj) (b_aGwh :: k_aGwk)) (Unboxed ((:.) ((:.) Z (Letter AA a_aFmf)) (Letter AA b_aFmg)) s_aFme) (Unboxed ((:.) ((:.) Z (Letter AA a_aGwg)) (Letter AA b_aGwh)) s_aGwf)
- Biobase.SubstMatrix.Types: anuc1SubstMat :: forall t_aSJ8 s_aSJ9 a_aSJa n_aSJb t_aSWi s_aSWj a_aSWk n_aSWl. Iso (ANuc1SubstMat t_aSJ8 s_aSJ9 a_aSJa n_aSJb) (ANuc1SubstMat t_aSWi s_aSWj a_aSWk n_aSWl) (Unboxed ((:.) ((:.) Z (Letter AA a_aSJa)) (Letter DNA n_aSJb)) s_aSJ9) (Unboxed ((:.) ((:.) Z (Letter AA a_aSWk)) (Letter DNA n_aSWl)) s_aSWj)
+ Biobase.SubstMatrix.Types: anuc1SubstMat :: forall k_aGZi (t_aGZe :: k_aGZi) s_aGZf k_aGZn (a_aGZg :: k_aGZn) k_aGZo (n_aGZh :: k_aGZo) k_aHc9 (t_aHc5 :: k_aHc9) s_aHc6 k_aHca (a_aHc7 :: k_aHca) k_aHcb (n_aHc8 :: k_aHcb). Iso (ANuc1SubstMat (t_aGZe :: k_aGZi) s_aGZf (a_aGZg :: k_aGZn) (n_aGZh :: k_aGZo)) (ANuc1SubstMat (t_aHc5 :: k_aHc9) s_aHc6 (a_aHc7 :: k_aHca) (n_aHc8 :: k_aHcb)) (Unboxed ((:.) ((:.) Z (Letter AA a_aGZg)) (Letter DNA n_aGZh)) s_aGZf) (Unboxed ((:.) ((:.) Z (Letter AA a_aHc7)) (Letter DNA n_aHc8)) s_aHc6)
- Biobase.SubstMatrix.Types: anuc2SubstMat :: forall t_aSvj s_aSvk a_aSvl n_aSvm t_aSIZ s_aSJ0 a_aSJ1 n_aSJ2. Iso (ANuc2SubstMat t_aSvj s_aSvk a_aSvl n_aSvm) (ANuc2SubstMat t_aSIZ s_aSJ0 a_aSJ1 n_aSJ2) (Unboxed ((:.) ((:.) ((:.) Z (Letter AA a_aSvl)) (Letter DNA n_aSvm)) (Letter DNA n_aSvm)) s_aSvk) (Unboxed ((:.) ((:.) ((:.) Z (Letter AA a_aSJ1)) (Letter DNA n_aSJ2)) (Letter DNA n_aSJ2)) s_aSJ0)
+ Biobase.SubstMatrix.Types: anuc2SubstMat :: forall k_aGLZ (t_aGLV :: k_aGLZ) s_aGLW k_aGM4 (a_aGLX :: k_aGM4) k_aGM6 (n_aGLY :: k_aGM6) k_aGZ6 (t_aGZ2 :: k_aGZ6) s_aGZ3 k_aGZ7 (a_aGZ4 :: k_aGZ7) k_aGZ8 (n_aGZ5 :: k_aGZ8). Iso (ANuc2SubstMat (t_aGLV :: k_aGLZ) s_aGLW (a_aGLX :: k_aGM4) (n_aGLY :: k_aGM6)) (ANuc2SubstMat (t_aGZ2 :: k_aGZ6) s_aGZ3 (a_aGZ4 :: k_aGZ7) (n_aGZ5 :: k_aGZ8)) (Unboxed ((:.) ((:.) ((:.) Z (Letter AA a_aGLX)) (Letter DNA n_aGLY)) (Letter DNA n_aGLY)) s_aGLW) (Unboxed ((:.) ((:.) ((:.) Z (Letter AA a_aGZ4)) (Letter DNA n_aGZ5)) (Letter DNA n_aGZ5)) s_aGZ3)
- Biobase.SubstMatrix.Types: anuc3SubstMat :: forall t_aSgB s_aSgC a_aSgD n_aSgE t_aSva s_aSvb a_aSvc n_aSvd. Iso (ANuc3SubstMat t_aSgB s_aSgC a_aSgD n_aSgE) (ANuc3SubstMat t_aSva s_aSvb a_aSvc n_aSvd) (Unboxed ((:.) ((:.) ((:.) ((:.) Z (Letter AA a_aSgD)) (Letter DNA n_aSgE)) (Letter DNA n_aSgE)) (Letter DNA n_aSgE)) s_aSgC) (Unboxed ((:.) ((:.) ((:.) ((:.) Z (Letter AA a_aSvc)) (Letter DNA n_aSvd)) (Letter DNA n_aSvd)) (Letter DNA n_aSvd)) s_aSvb)
+ Biobase.SubstMatrix.Types: anuc3SubstMat :: forall k_aGxf (t_aGwA :: k_aGxf) s_aGwB k_aGxk (a_aGwC :: k_aGxk) k_aGxn (n_aGwD :: k_aGxn) k_aGLN (t_aGLJ :: k_aGLN) s_aGLK k_aGLO (a_aGLL :: k_aGLO) k_aGLP (n_aGLM :: k_aGLP). Iso (ANuc3SubstMat (t_aGwA :: k_aGxf) s_aGwB (a_aGwC :: k_aGxk) (n_aGwD :: k_aGxn)) (ANuc3SubstMat (t_aGLJ :: k_aGLN) s_aGLK (a_aGLL :: k_aGLO) (n_aGLM :: k_aGLP)) (Unboxed ((:.) ((:.) ((:.) ((:.) Z (Letter AA a_aGwC)) (Letter DNA n_aGwD)) (Letter DNA n_aGwD)) (Letter DNA n_aGwD)) s_aGwB) (Unboxed ((:.) ((:.) ((:.) ((:.) Z (Letter AA a_aGLL)) (Letter DNA n_aGLM)) (Letter DNA n_aGLM)) (Letter DNA n_aGLM)) s_aGLK)
- Biobase.SubstMatrix.Types: type SubstBLOSUM = AASubstMat Distance (DiscLogOdds Unknown)
+ Biobase.SubstMatrix.Types: type SubstBLOSUM = AASubstMat Distance (DiscLogOdds (RTyId 1))
- Biobase.SubstMatrix.Types: type SubstPAM = AASubstMat Similarity (DiscLogOdds Unknown)
+ Biobase.SubstMatrix.Types: type SubstPAM = AASubstMat Similarity (DiscLogOdds (RTyId 1))

Files

Biobase/BLAST/Import.hs view
@@ -36,7 +36,7 @@        bs <- B.readFile filePath        let json = parseJSONBlastCmd bs        return json-     else fail "# JSON2 blast file \"%s\" does not exist\n" filePath+     else error "# JSON2 blast file \"%s\" does not exist\n" filePath  parseJSONBlastCmd :: B.ByteString -> Either String BlastCmdJSON2 parseJSONBlastCmd bs = A.eitherDecode bs :: Either String BlastCmdJSON2@@ -51,7 +51,7 @@   blastFileExists <- doesFileExist filePath   if blastFileExists      then parseTabularBlasts <$> B.readFile filePath-     else fail "# tabular blast file \"%s\" does not exist\n" filePath+     else error "# tabular blast file \"%s\" does not exist\n" filePath  -- | reads and parses tabular HTTP Blast result from provided filePath blastHTTPFromFile :: String -> IO [BlastTabularResult]@@ -60,7 +60,7 @@   blastFileExists <- doesFileExist filePath   if blastFileExists       then parseTabularHTTPBlasts <$> B.readFile filePath-      else fail "# tabular blast file \"%s\" does not exist\n" filePath+      else error "# tabular blast file \"%s\" does not exist\n" filePath  -- | Read a lazy bytestring and stream out a lsit of @BlastTabularResult@'s. -- In case, there is a parse error "late" in the file, we might have
Biobase/BLAST/Types.hs view
@@ -26,7 +26,8 @@ import Data.Aeson.Types import qualified Data.HashMap.Strict as HM import qualified Data.Sequence as DS-import Control.Lens+import Control.Lens(makeLenses)+import Data.HashMap.Strict (elems)  -- | Turn all keys in a JSON object to lowercase. jsonLower :: Value -> Value@@ -204,15 +205,37 @@ data BlastProgram = BlastX | BlastP | BlastN   deriving (Show, Eq) +makeLenses ''BlastTabularResult+makeLenses ''BlastTabularHit+makeLenses ''SearchTarget+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''SearchTarget+makeLenses ''BlastProgram+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastProgram+makeLenses ''SearchStat+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''SearchStat+makeLenses ''HitDescription+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''HitDescription+makeLenses ''Hit+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Hit+makeLenses ''Hsp+makeLenses ''Search+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Search+makeLenses ''BlastJSONResult+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastJSONResult+makeLenses ''Params+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Params+makeLenses ''BlastReport+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastReport+makeLenses ''BlastOutput2+deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastOutput2 makeLenses ''BlastCmdJSON2 --deriveJSON defaultOptions{fieldLabelModifier = (map toLower) . drop 1} ''BlastJSON2 instance FromJSON BlastCmdJSON2 where-  parseJSON (Object v) =-    BlastCmdJSON2 <$> (v .: "BlastOutput2")+  parseJSON (Object v) = BlastCmdJSON2 <$> (v .: "BlastOutput2")   parseJSON _ = mzero instance ToJSON BlastCmdJSON2 where   toJSON (BlastCmdJSON2 _blastoutput2) =-        object [ "BlastOutput2"  Data.Aeson.Types..= _blastoutput2 ]+        object [ "BlastOutput2" .= _blastoutput2 ]  makeLenses ''BlastJSON2 --deriveJSON defaultOptions{fieldLabelModifier = (map toLower) . drop 1} ''BlastJSON2@@ -221,29 +244,4 @@   parseJSON _ = mzero  instance ToJSON BlastJSON2 where-  toJSON (BlastJSON2 _blastoutput2) = object [ "BlastOutput2"  Data.Aeson.Types..= _blastoutput2 ]---deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastJSON2-makeLenses ''BlastOutput2-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastOutput2-makeLenses ''BlastReport-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastReport-makeLenses ''Params-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Params-makeLenses ''BlastJSONResult-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastJSONResult-makeLenses ''Search-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Search-makeLenses ''Hit-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Hit-makeLenses ''Hsp---deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''Hsp-makeLenses ''HitDescription-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''HitDescription-makeLenses ''SearchStat-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''SearchStat-makeLenses ''BlastTabularResult-makeLenses ''BlastTabularHit-makeLenses ''SearchTarget-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''SearchTarget-makeLenses ''BlastProgram-deriveJSON defaultOptions{fieldLabelModifier = drop 1} ''BlastProgram+  toJSON (BlastJSON2 _blastoutput2) = object [ "BlastOutput2"  .= _blastoutput2 ]
Biobase/SubstMatrix.hs view
@@ -10,7 +10,9 @@ import           Data.List (maximumBy,find) import           Data.Serialize (Serialize) import           Data.Vector.Unboxed.Deriving+import           Debug.Trace (traceShow) import           GHC.Generics (Generic)+import           GHC.Real(Ratio(..)) import           Numeric.Log import qualified Data.Map.Strict as M import qualified Data.Vector.Unboxed as VU@@ -36,6 +38,7 @@  import           Biobase.SubstMatrix.Embedded import           Biobase.SubstMatrix.Import+import           Biobase.SubstMatrix.Statistics import           Biobase.SubstMatrix.Types  @@ -46,28 +49,32 @@ -- The resulting @AA@ are tagged with the name type from the @DNA n@. -- -- TODO Definitely use the correct upper bound constants here!+--+-- TODO the amino-acid range produces wrong reads from @m@. We should have this in ExceptT to make+-- sure we do not read from undefined memory.  mkANuc3SubstMat   ∷ TranslationTable (Letter DNA n) (Letter AA n)-  → AASubstMat t (DiscLogOdds k) n+  → AASubstMat t (DiscLogOdds k) n n   → ANuc3SubstMat t (Letter AA n, (DiscLogOdds k)) n n-mkANuc3SubstMat tbl (AASubstMat m)+mkANuc3SubstMat tbl (AASubstMat m l)   = ANuc3SubstMat   $ fromAssocs (ZZ:..LtLetter AA.Undef:..LtLetter DNA.N:..LtLetter DNA.N:..LtLetter DNA.N) (AA.Undef, DiscLogOdds . Discretized $ -999)     [ ( (Z:.a:.u:.v:.w)-      , (t, m!(Z:.a:.t))+      , (t, x)       )     | a <- VU.toList aaRange     , u <- [DNA.A .. DNA.N], v <- [DNA.A .. DNA.N], w <- [DNA.A .. DNA.N]     , let b = Codon u v w     , let t = translate tbl b+    , x <- maybe [] (:[]) $ m!?(Z:.a:.t)     ]  -- | This function does the following: -- 1. check if @fname@ is a file, and if so try to load it. -- 2. if not, check if @fname@ happens to be the name of one of the known @PAM/BLOSUM@ tables. -fromFileOrCached ∷ (MonadIO m, MonadError String m) ⇒ FilePath → m (AASubstMat t (DiscLogOdds Unknown) a)+fromFileOrCached ∷ (MonadIO m, MonadError String m) ⇒ FilePath → m (AASubstMat t (DiscLogOdds (1 :% 1)) a b) fromFileOrCached fname = do   dfe ← liftIO $ doesFileExist fname   if | fname == "list" → do@@ -79,13 +86,15 @@  -- | Turn log-odds into log-probabilities. Normalizes over the whole set of -- values in the matrix.+--+-- TODO check if lambda should indeed be 1.0  mkProbabilityMatrix-  ∷ Double-  → AASubstMat t (DiscLogOdds k) n-  → AASubstMat t (Log (Probability NotNormalized Double)) n-mkProbabilityMatrix invScale (AASubstMat dlo) = AASubstMat $ PA.map (/nrm) $ dbl-  where dbl = PA.map (\(DiscLogOdds (Discretized k)) → stateLogProbability (negate invScale) $ fromIntegral @Int @Double k) dlo+  :: Double+  -> AASubstMat t (DiscLogOdds k) n m+  -> AASubstMat t (Log (Probability NotNormalized Double)) n m+mkProbabilityMatrix invScale (AASubstMat dlo l) = AASubstMat (mapArray (/nrm) $ dbl) 1.0+  where dbl = mapArray (\(DiscLogOdds (Discretized k)) → stateLogProbability (negate invScale) $ fromIntegral @Int @Double k) dlo         nrm = maximum . Prelude.map snd $ PA.assocs dbl  
Biobase/SubstMatrix/Embedded.hs view
@@ -5,6 +5,7 @@ import Data.ByteString (ByteString) import Data.FileEmbed import Control.Arrow (second)+import GHC.Real(Ratio(..))  import Numeric.Discretized import Statistics.Odds@@ -15,9 +16,9 @@   embeddedPamBlosumFiles ∷ [(FilePath,ByteString)]-embeddedPamBlosumFiles = $(embedDir "sources/PamBlosum")+embeddedPamBlosumFiles = $(makeRelativeToProject "sources/PamBlosum" >>= embedDir) -embeddedPamBlosum ∷ [(FilePath,AASubstMat t (DiscLogOdds Unknown) a)]+embeddedPamBlosum ∷ [(FilePath,AASubstMat t (DiscLogOdds (1:%1)) a b)] embeddedPamBlosum = either error id . runExcept                   . mapM (\(k,v) → fromByteString v >>= \mv → return (k,mv))                   $ embeddedPamBlosumFiles
Biobase/SubstMatrix/Import.hs view
@@ -20,6 +20,7 @@ import           Statistics.Odds  import           Biobase.SubstMatrix.Types+import           Biobase.SubstMatrix.Statistics   @@ -27,19 +28,31 @@ -- -- TODO the parser is fragile, since it uses @read@. This should be fixed. -fromByteString ∷ (MonadError String m) ⇒ ByteString → m (AASubstMat t (DiscLogOdds k) a)-fromByteString bs = do-  let (x:xs) = dropWhile (("#"==).take 1) . lines $ unpack bs-  let cs = map head . words $ x -- should give us the characters encoding an amino acid-  let ss = map (map (DiscLogOdds . Discretized) . map read . drop 1 . words) $ xs-  let xs = [ ((Z:.charAA k1:.charAA k2),z)+fromByteString+  :: ( MonadError String m+     , Real (Discretized k)+     )+  => ByteString+  -> m (AASubstMat t (DiscLogOdds k) a b)+fromByteString bstring = do+  let (b:bs) = dropWhile (("#"==).take 1) . lines $ unpack bstring+      cs = map head . words $ b -- should give us the characters encoding an amino acid+      ss = map (map (DiscLogOdds . Discretized) . map read . drop 1 . words) $ bs+      xs = [ ((Z:.charAA k1:.charAA k2),z)            | (k1,s) <- zip cs ss            , (k2,z) <- zip cs s            ]-  return . AASubstMat $ fromAssocs (ZZ:..LtLetter AA.Z:..LtLetter AA.Z) (DiscLogOdds . Discretized $ -999) xs+      as = fromAssocs (ZZ:..LtLetter AA.Z:..LtLetter AA.Z) (DiscLogOdds . Discretized $ -999) xs+      mat = AASubstMat as (estimateLambda mat)+  return mat  -- | Import substitution matrix from file. -fromFile ∷ (MonadIO m, MonadError String m) ⇒ FilePath → m (AASubstMat t (DiscLogOdds k) a)+fromFile+  :: ( MonadIO m, MonadError String m+     , Real (Discretized k)+     )+  => FilePath+  -> m (AASubstMat t (DiscLogOdds k) a b) fromFile fname = liftIO (BS.readFile fname) >>= fromByteString 
+ Biobase/SubstMatrix/Statistics.hs view
@@ -0,0 +1,41 @@++-- | This module provides statistics needed for substitution matrices. It is a+-- very modest attempt to replicate some of the Blast statistics.++module Biobase.SubstMatrix.Statistics where++import Data.Vector.Unboxed (Unbox)+import Data.Vector.Fusion.Util+import Data.Vector.Fusion.Stream.Monadic as SM+import Debug.Trace++import Data.PrimitiveArray as PA+import           Biobase.Primary.Letter++import Biobase.SubstMatrix.Types++++-- | estimate Blast lambda.+--+-- TODO use ExceptT++estimateLambda+  :: (Unbox s, Num s, Real s)+  => AASubstMat t s a b -> Double+{-# Inlinable estimateLambda #-}+estimateLambda (AASubstMat mat _) = go 1000 1 2 0 where+  go count lambda high low+    | count <= 0 = error "no convergence?!"+    | (high-low) <= 0.001 = lambda+    | s >  1              = go (count-1) ((lambda+low)/2)  lambda low+    | s <= 1              = go (count-1) ((lambda+high)/2) high   lambda+    where+      -- get the rows and columns, needed to get the probs for each row/column right.+      (ZZ:..r':..c') = PA.upperBound mat+      r = fromRational $ toRational $ size r'+      c = fromRational $ toRational $ size c'+      -- sum of all scores+      s = unId . SM.foldl' (+) 0 $ SM.map eachElem $ PA.assocsS mat+      eachElem (Z:.i:.j, z) = (1/r) * (1/c) * exp (lambda * (fromRational $ toRational z))+
Biobase/SubstMatrix/Types.hs view
@@ -27,7 +27,10 @@  -- An amino-acid substitution matrix. Tagged with the type of scoring used. -newtype AASubstMat t s a = AASubstMat { _aaSubstMat :: Unboxed (Z:.Letter AA a:.Letter AA a) s }+data AASubstMat t s a b = AASubstMat+  { _aaSubstMat     :: !(Unboxed (Z:.Letter AA a:.Letter AA b) s)+  , _aaSubstLambda  :: Double+  }   deriving (Generic,Eq,Read,Show) makeLenses ''AASubstMat @@ -40,11 +43,11 @@  -- | @PAM@ matrices are similarity matrices. -type SubstPAM = AASubstMat Similarity (DiscLogOdds Unknown)+type SubstPAM = AASubstMat Similarity (DiscLogOdds (RTyId 1))  -- | @BLOSUM@ matrices are distance matrices. -type SubstBLOSUM = AASubstMat Distance (DiscLogOdds Unknown)+type SubstBLOSUM = AASubstMat Distance (DiscLogOdds (RTyId 1))  -- | Substitution matrix from amino acids to nucleotide triplets. 
BiobaseBlast.cabal view
@@ -1,5 +1,5 @@ name:           BiobaseBlast-version:        0.3.1.0+version:        0.3.3.0 author:         Christian Hoener zu Siederdissen, Florian Eggenhofer maintainer:     choener@bioinf.uni-leipzig.de homepage:       https://github.com/choener/BiobaseBlast@@ -11,7 +11,7 @@ build-type:     Simple stability:      experimental cabal-version:  >= 1.10.0-tested-with:    GHC == 8.4.4+tested-with:    GHC == 8.8, GHC == 8.10, GHC == 9.0 synopsis:       BLAST-related tools description:                 This library contains BLAST-related functionality:@@ -151,10 +151,10 @@                , vector-th-unbox  >= 0.2                --                , BiobaseENA       == 0.0.0.*-               , BiobaseTypes     == 0.2.0.*-               , BiobaseXNA       == 0.11.0.*-               , PrimitiveArray   == 0.9.1.*-               , SciBaseTypes     == 0.1.0.*+               , BiobaseTypes     == 0.2.1.*+               , BiobaseXNA       == 0.11.1.*+               , PrimitiveArray   == 0.10.1.*+               , SciBaseTypes     == 0.1.1.*    default-language:     Haskell2010@@ -178,6 +178,7 @@     Biobase.SubstMatrix.Embedded     Biobase.SubstMatrix.Hints     Biobase.SubstMatrix.Import+    Biobase.SubstMatrix.Statistics     Biobase.SubstMatrix.Types    ghc-options:
README.md view
@@ -1,6 +1,5 @@-[![Build Status](https://travis-ci.org/choener/BiobaseBlast.svg?branch=master)](https://travis-ci.org/choener/BiobaseBlast)+# BiobaseBlast [![Hackage](https://img.shields.io/hackage/v/BiobaseBlast.svg)](https://hackage.haskell.org/package/BiobaseBlast) ![github action: CI](https://github.com/choener/BiobaseBlast/actions/workflows/ci.yml/badge.svg) -# BiobaseBlast  This library contains BLAST-related functionality. 
changelog.md view
@@ -1,3 +1,10 @@+0.3.3.0+-------++- Compatibility with GHC 9+- Switched testing to github actions++ 0.3.1.0 -------