packages feed

ClustalParser 1.2.2 → 1.2.3

raw patch · 4 files changed

+87/−17 lines, 4 filesdep +hspec-discoverdep ~hspecPVP ok

version bump matches the API change (PVP)

Dependencies added: hspec-discover

Dependency ranges changed: hspec

API changes (from Hackage documentation)

Files

ClustalParser.cabal view
@@ -1,15 +1,9 @@ name:                ClustalParser--- The package version.  See the Haskell package versioning policy (PVP) --- for standards guiding when and how versions should be incremented.--- http://www.haskell.org/haskellwiki/Package_versioning_policy--- PVP summary:      +-+------- breaking API changes---                   | | +----- non-breaking API additions---                   | | | +--- code changes with no API change-version:             1.2.2+version:             1.2.3 synopsis:            Libary for parsing Clustal tools output description:         Currently contains parsers and datatypes for: clustalw2, clustalo, mlocarna, cmalign                      .-	             Clustal tools are multiple sequence alignment tools for biological sequence like DNA, RNA and Protein.+                     Clustal tools are multiple sequence alignment tools for biological sequence like DNA, RNA and Protein.                      For more information on clustal Tools refer to <http://www.clustal.org/>.                      .                      Mlocarna is a multiple sequence alignment tool for RNA sequences with secondary structure output. @@ -22,10 +16,11 @@ license-file:        LICENSE author:              Florian Eggenhofer maintainer:          egg@informatik.uni-freiburg.de--- copyright:           +-- copyright: category:            Bioinformatics build-type:          Simple cabal-version:       >=1.8+Tested-With: GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2  extra-source-files:   README.md changelog@@ -36,9 +31,10 @@  source-repository this   type:     git-  location: https://github.com/eggzilla/ClustalParser/tree/1.2.2-  tag:      1.2.2+  location: https://github.com/eggzilla/ClustalParser/tree/1.2.3+  tag:      1.2.3 + library   -- Modules exported by the library.   exposed-modules:   Bio.ClustalParser@@ -47,7 +43,7 @@   -- Other library packages from which modules are imported.   build-depends:       base >=4.5 && <5, parsec>=3.1.9, vector, text    -- compiler options-  ghc-options:         -Wall -O2 -fno-warn-unused-do-bind+  ghc-options:         -Wall -fno-warn-unused-do-bind   -- Directories containing source files.   hs-source-dirs:      src   @@ -55,10 +51,11 @@   main-is:          ClustalParserTest.hs   build-depends:    base >= 4 && <= 5, cmdargs, ClustalParser, either-unwrap   -- compiler options  -  ghc-options:         -Wall -O2+  ghc-options:         -Wall  test-suite hspec-    build-depends:    base, parsec, ClustalParser, hspec >= 1.8, text+    build-depends:    base, parsec, ClustalParser, hspec >= 2.0, text, hspec-discover     hs-source-dirs:   test-suite     main-is:          Spec.hs-    type:             exitcode-stdio-1.0  +    type:             exitcode-stdio-1.0+    other-modules:    ClustalParserSpec
changelog view
@@ -1,4 +1,6 @@ -*-change-log-*-+1.2.3 Florian Eggenhofer <egg@cs.uni-freiburg.de> 12. March 2018+        * Fixed parsing of additional newline in Biopythons AlignIO output without conservation track 1.2.2 Florian Eggenhofer <egg@cs.uni-freiburg.de> 07. March 2018         * Clustal parser can now parse alignments with missing consensus 	annotation
src/Bio/ClustalParser.hs view
@@ -118,6 +118,7 @@   many1 (noneOf "\n")   many1 (try newline)   alignmentSlices <- many1 (try genParserClustalAlignmentSlice)+  optional newline   eof     return (mergealignmentSlices alignmentSlices) @@ -140,11 +141,11 @@   entrySlices' <- many1 genParserClustalEntrySlice   --extract length of identifier and spacer to determine offset of conservation track   let offsetLenght = length (entrySequenceSliceIdentifier (head entrySlices')) + spacerLength (head entrySlices')-  conservationTrackSlice  <- choice [(lookAhead (string "\n")), (try (genParserConservationTrackSlice offsetLenght))]+  conservationTrackSliceChoice  <- choice [(lookAhead (string "\n")), (try (genParserConservationTrackSlice offsetLenght))]   --spacerAndConservationTrackSlice <- many1 (noneOf "\n")   --let conservationTrackSlice' = drop offsetLenght spacerAndConservationTrackSlice   --newline-  let conservationTrackSlice' = if (conservationTrackSlice == "\n") then "" else conservationTrackSlice+  let conservationTrackSlice' = if (conservationTrackSliceChoice == "\n") then "" else conservationTrackSliceChoice   optional newline   return $ ClustalAlignmentSlice entrySlices' conservationTrackSlice' 
+ test-suite/ClustalParserSpec.hs view
@@ -0,0 +1,70 @@+module ClustalParserSpec (spec) where++import Bio.ClustalParser +import Test.Hspec+import Test.Hspec.QuickCheck+import Text.Parsec.Error+import Text.Parsec.Pos+import Text.ParserCombinators.Parsec.Error+import qualified Data.Text as T++spec :: Spec+spec = do+  describe "Clustal W Parser" $ do+    context "Parsing RNAalifold input" $ do+      it "Returns ClustalAlignment type" $ do+        (parseClustalAlignment clustalExample) `shouldBe` (Right clustalResult)+    context "Parsing invalid input" $ do+      it "Returns ParseError" $ do+        (parseClustalAlignment "invalid input") `shouldBe` Left clustalParseError+  describe "Structural Clustal Parser" $ do+    context "Parsing Structural Clustal input" $ do+      it "Returns StructuralClustalAlignment type" $ do+        (parseStructuralClustalAlignment structuralClustalExample) `shouldBe` Right structuralClustalResult+    context "Parsing invalid input" $ do+      it "Returns ParseError" $ do+        (parseStructuralClustalAlignment "invalid input") `shouldBe` Left structuralClustalParseError+  describe "Structural Clustal Parser 2" $ do+    context "Parsing Structural Clustal input 2" $ do+      it "Returns StructuralClustalAlignment type" $ do+        (parseStructuralClustalAlignment structuralClustalExample2) `shouldBe` Right structuralClustalResult2+    context "Parsing invalid input" $ do+      it "Returns ParseError" $ do+        (parseStructuralClustalAlignment "invalid input") `shouldBe` Left structuralClustalParseError+                                                       + +clustalParseError :: ParseError+clustalParseError = (addErrorMessage (Expect "\"CLUSTAL\"") (newErrorMessage clustalErrorMessage clustalErrorSourcePosition))++clustalErrorMessage :: Message+clustalErrorMessage = SysUnExpect "\"i\""++clustalErrorSourcePosition :: SourcePos+clustalErrorSourcePosition = newPos "genParserClustalAlignment" 1 1++clustalExample :: String+clustalExample = "CLUSTAL 2.1 multiple sequence alignment\n\n\nNC_0123:123-540 AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTT\nNC_0223:123-540 AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTT\nNC_0323:123-540 AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTT\n                ************************************************************\nNC_0123:123-540 TTTTTTTTTTTTTT----------------------------------------------\nNC_0223:123-540 TTTTTTTTTTTTTTAATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAA\nNC_0323:123-540 TTTTTTTTTTTTTTAATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAA\n                **************                                              \n\nNC_0123:123-540 ----------------------------\nNC_0223:123-540 AAAAAAATTTTTTTTTTTTTTTTTTTTT\nNC_0323:123-540 AAAAAAATTTTTTTTTTTTTTTTTTTTT\n                *                           \n"++clustalResult :: ClustalAlignment+clustalResult = ClustalAlignment [ClustalAlignmentEntry (T.pack "NC_0123:123-540") (T.pack "AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTT--------------------------------------------------------------------------"),ClustalAlignmentEntry (T.pack "NC_0223:123-540") (T.pack "AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTAATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTT"),ClustalAlignmentEntry (T.pack "NC_0323:123-540") (T.pack "AATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTAATATATATTTTTTTTTTTTTTTTTTTTTTAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTT")] (T.pack "**************************************************************************                                              *                           ")++structuralClustalParseError :: ParseError+structuralClustalParseError = addErrorMessage (Expect "\"mLocARNA\"") (newErrorMessage structuralClustalErrorMessage structuralClustalErrorSourcePosition)++structuralClustalErrorMessage :: Message+structuralClustalErrorMessage = SysUnExpect "\"i\""++structuralClustalErrorSourcePosition :: SourcePos+structuralClustalErrorSourcePosition = newPos "genParserStructuralClustalAlignment" 1 1++structuralClustalExample :: String+structuralClustalExample = "mLocARNA --- multiple Local (and global) Alignment of RNA --- LocARNA 1.8.0\nCopyright Sebastian Will\n\nCompute pair probs ...\nPerform progressive alignment ...\n\n\n\nAB001721.1/2735-2851  CCCGGUGACUAUAGAGAGAGGGCCACACCCGUUCCCAUCCCGAACACGGAAGUUAAGCCUCUCAUCGCUGAUGGUACUAUGUGGUUCGCUGCAUGGGAGAGUAGGACGUUGCCGGGU\ngi|451991584:1-117    CCCGGUGACUAUAGAGAGAGGGCCACACCCGUUCCCAUCCCGAACACGGAAGUUAAGCCUCUCAUCGCUGAUGGUACUAUGUGGUUCGCUGCAUGGGAGAGUAGGACGUUGCCGGGU\nalifold               (((((((((....(.(((.(((.....))).))).)...(((....)))..(((..(((((((((.((.(.(((.(((....))))))).))))))))).))..)))))))))))). (-38.30 = -38.30 +   0.00)\n"+                           +structuralClustalResult :: StructuralClustalAlignment+structuralClustalResult = StructuralClustalAlignment [ClustalAlignmentEntry (T.pack "AB001721.1/2735-2851") (T.pack "CCCGGUGACUAUAGAGAGAGGGCCACACCCGUUCCCAUCCCGAACACGGAAGUUAAGCCUCUCAUCGCUGAUGGUACUAUGUGGUUCGCUGCAUGGGAGAGUAGGACGUUGCCGGGU"),ClustalAlignmentEntry (T.pack "gi|451991584:1-117") (T.pack "CCCGGUGACUAUAGAGAGAGGGCCACACCCGUUCCCAUCCCGAACACGGAAGUUAAGCCUCUCAUCGCUGAUGGUACUAUGUGGUUCGCUGCAUGGGAGAGUAGGACGUUGCCGGGU")] (T.pack  "(((((((((....(.(((.(((.....))).))).)...(((....)))..(((..(((((((((.((.(.(((.(((....))))))).))))))))).))..)))))))))))).") (-38.30)++structuralClustalExample2 :: String+structuralClustalExample2 = "mLocARNA --- multiple Local (and global) Alignment of RNA --- LocARNA 1.9.0\nCopyright Sebastian Will\n\nCompute pair probs ...\nCompute pairwise alignments ... \nPerform progressive alignment ...\n\n\n\nAARQ02000011.1/391-585   -AAUUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUG-AAGGUGAAAUCCCUGAAAAGUA-UCGAUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCG\nCP006940.1:755039-755234 CAAUUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUG-AAGGUGAAAUCCCUGAAAAGUA-UCGAUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCG\nAM263198.1:720654-720850 CAAUUAAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUACUUG-AAGGUGAAAUUCCUGAAAAGUA-ACGGUCAGUUGACGAGGAGGAGAUUAAUCGAAAGUUCGGCGGGAGUCUCCCG\nAL596166.1:50733-50929   CAACUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUA-AAGGUGAAAUUCCUGGAAAGUAAACAAUCAGUUGACGAGGAGGAGAUUAAUCGAAAUUUCGGCGGGAGUCUCCCG\nFR687253.1:714343-714539 CAACUGAAUAGAAGCGCCAGAACUGAUCGGAUCGAAAUUACUUUCUAGGUGAAAUUCCU-AAAAGUAACGGGUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCG\n\nAARQ02000011.1/391-585   GCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGCUU\nCP006940.1:755039-755234 GCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAAUAUGCUU\nAM263198.1:720654-720850 GCUGUAGCAUGCAGUCGUUAAGUCUUACUUACAAAACAUUUGGGUGACCAAAUGGACAGAGUAGUAAUGAAAUAUGUGU\nAL596166.1:50733-50929   GCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGUGC\nFR687253.1:714343-714539 GCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGCGC\n\nalifold                  .............(((((..((((((((((........(((((...(((.......)))...))))).))))))))))......(.(((((((..((((....))))....)))))))))\n                         )).)).(((((...((((((....((((((.....((((((((....))))))))...))))))))))))..))))).. (-68.86 = -47.45 + -21.41)\n"++structuralClustalResult2 :: StructuralClustalAlignment+structuralClustalResult2 = StructuralClustalAlignment [ClustalAlignmentEntry (T.pack "AARQ02000011.1/391-585") (T.pack "-AAUUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUG-AAGGUGAAAUCCCUGAAAAGUA-UCGAUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCGGCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGCUU"),ClustalAlignmentEntry (T.pack "CP006940.1:755039-755234") (T.pack "CAAUUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUG-AAGGUGAAAUCCCUGAAAAGUA-UCGAUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCGGCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAAUAUGCUU"),ClustalAlignmentEntry (T.pack "AM263198.1:720654-720850") (T.pack "CAAUUAAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUACUUG-AAGGUGAAAUUCCUGAAAAGUA-ACGGUCAGUUGACGAGGAGGAGAUUAAUCGAAAGUUCGGCGGGAGUCUCCCGGCUGUAGCAUGCAGUCGUUAAGUCUUACUUACAAAACAUUUGGGUGACCAAAUGGACAGAGUAGUAAUGAAAUAUGUGU"),ClustalAlignmentEntry (T.pack "AL596166.1:50733-50929") (T.pack "CAACUGAAUAGAAGCGCCAGAACUGAUUGGGACGAAAAUGCUUA-AAGGUGAAAUUCCUGGAAAGUAAACAAUCAGUUGACGAGGAGGAGAUUAAUCGAAAUUUCGGCGGGAGUCUCCCGGCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGUGC"),ClustalAlignmentEntry (T.pack "FR687253.1:714343-714539") (T.pack "CAACUGAAUAGAAGCGCCAGAACUGAUCGGAUCGAAAUUACUUUCUAGGUGAAAUUCCU-AAAAGUAACGGGUCAGUUGACGAGGAGGAGAUUAAUCGAAGUUUCGGCGGGAGUCUCCCGGCUGU-GCAUGCAGUCGUUAAGUCUUACUUACAAAUCAUUUGGGUGACCAAGUGGACAGAGUAGUAAUGAAACAUGCGC")] (T.pack  ".............(((((..((((((((((........(((((...(((.......)))...))))).))))))))))......(.(((((((..((((....))))....))))))))))).)).(((((...((((((....((((((.....((((((((....))))))))...))))))))))))..)))))..") (-68.86)