BiobaseBlast 0.2.0.0 → 0.2.1.0
raw patch · 6 files changed
+205/−20 lines, 6 filesdep +text
Dependencies added: text
Files
- Biobase/BLAST/Import.hs +80/−10
- BiobaseBlast.cabal +6/−6
- tests/properties.hs +58/−4
- tests/succeed/httptabular.golden +1/−0
- tests/succeed/tabular.golden +1/−0
- tests/succeed/tabular.test +59/−0
Biobase/BLAST/Import.hs view
@@ -3,7 +3,11 @@ -- | Parses NCBI BLAST+ tabular output -module Biobase.BLAST.Import where+module Biobase.BLAST.Import (blastFromFile,+ parseTabularBlasts,+ parseTabularHTTPBlasts,+ blastHTTPFromFile+ ) where import Prelude hiding (takeWhile) import Data.Attoparsec.ByteString.Char8 hiding (isSpace)@@ -28,6 +32,15 @@ then parseTabularBlasts <$> B.readFile filePath else fail "# tabular blast file \"%s\" does not exist\n" filePath + -- | reads and parses tabular HTTP Blast result from provided filePath+blastHTTPFromFile :: String -> IO [BlastTabularResult]+blastHTTPFromFile filePath = do+ printf "# reading tabular blast input from file %s\n" filePath+ blastFileExists <- doesFileExist filePath+ if blastFileExists+ then parseTabularHTTPBlasts <$> B.readFile filePath+ else fail "# 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 -- already streamed out some (or many!) of these results.@@ -40,25 +53,29 @@ | B.null remainingInput -> [btr] | otherwise -> btr : go remainingInput +parseTabularHTTPBlasts :: B.ByteString -> [BlastTabularResult]+parseTabularHTTPBlasts = go+ where go xs = case L.parse genParseTabularHTTPBlast xs of+ L.Fail remainingInput ctxts err -> error $ "parseTabularHTTPBlasts failed! " ++ err ++ " ctxt: " ++ show ctxts ++ " head of remaining input: " ++ B.unpack (B.take 1000 remainingInput)+ L.Done remainingInput btr+ | B.null remainingInput -> [btr]+ | otherwise -> btr : go remainingInput+ genParseBlastProgram :: Parser BlastProgram genParseBlastProgram = do choice [string "# BLAST",string "# blast"]- (toLower <$> anyChar) >>= return . \case + (toLower <$> anyChar) >>= return . \case 'x' -> BlastX 'p' -> BlastP 'n' -> BlastN genParseTabularBlast :: Parser BlastTabularResult genParseTabularBlast = do- --choice [string "# BLAST",string "# blast"]- --_blastProgram <- choice [string "p",string "P",string "x",string "X"] <?> "Program" _blastProgram <- genParseBlastProgram <?> "Program" many1 (notChar '\n') endOfLine string "# Query: " <?> "Query"- --_blastQueryId <- many1 (notChar ' ') <* skipWhile (not (string "\n")) <?> "QueryId" _blastQueryId <- takeWhile (not . isSpace) <* manyTill anyChar endOfLine <?> "QueryId"- --_blastQueryName <- many' (notChar '\n') <?> "QueryName" string "# Database: " <?> "Database" _blastDatabase <- many1 (notChar '\n') <?> "Db" string "\n# " <?> "header linebreak"@@ -67,8 +84,31 @@ _blastHitNumber <- decimal <?> "Hit number" string " hits found\n" <?> "hits found" _tabularHit <- count _blastHitNumber (try genParseBlastTabularHit) <?> "Tabular hit"+ skipMany endOfLine return $ BlastTabularResult _blastProgram (toLB _blastQueryId) (B.pack _blastDatabase) _blastHitNumber (V.fromList _tabularHit) +genParseTabularHTTPBlast :: Parser BlastTabularResult+genParseTabularHTTPBlast = do+ _blastProgram <- genParseBlastProgram <?> "Program"+ --many1 (notChar '\n')+ endOfLine+ string "# Iteration: " <?> "Iteration" -----+ _ <- takeWhile (not . isSpace) <* manyTill anyChar endOfLine <?> "IterationNumber" -----+ string "# Query: " <?> "Query"+ _blastQueryId <- takeWhile (not . isSpace) <* manyTill anyChar endOfLine <?> "QueryId"+ string "# RID: " <?> "RID" -----+ _ <- takeWhile (not . isSpace) <* manyTill anyChar endOfLine <?> "RID" -----+ string "# Database: " <?> "Database"+ _blastDatabase <- many1 (notChar '\n') <?> "Db"+ string "\n# " <?> "header linebreak"+ --fields line+ skipMany (try genParseFieldLine) <?> "Fields"+ _blastHitNumber <- decimal <?> "Hit number"+ string " hits found\n" <?> "hits found"+ _tabularHit <- count _blastHitNumber (try genParseBlastHTTPTabularHit) <?> "Tabular hit"+ skipMany endOfLine+ return $ BlastTabularResult _blastProgram (toLB _blastQueryId) (B.pack _blastDatabase) _blastHitNumber (V.fromList _tabularHit)+ genParseFieldLine :: Parser () genParseFieldLine = do string "Fields:"@@ -78,9 +118,6 @@ genParseBlastTabularHit :: Parser BlastTabularHit genParseBlastTabularHit = do- --start <- peekChar'- --when (start == '#') (fail "irgendwas")- --_queryId <- takeWhile (\c -> c /= '#' || c /= '\t') <?> "hit qid" _queryId <- takeWhile1 ((/=9) . ord) <?> "hit qid" char '\t' _subjectId <- takeWhile1 ((/=9) . ord) <?> "hit sid"@@ -112,7 +149,40 @@ _subjectSeq <- takeWhile1 ((/=10) . ord) <?> "hit subSeq" -- 10 == '\n' char '\n' return $ BlastTabularHit (B.fromStrict _queryId) (B.fromStrict _subjectId) _seqIdentity _alignmentLength _misMatches _gapOpenScore _queryStart _queryEnd _hitSeqStart _hitSeqEnd _eValue _bitScore _subjectFrame (B.fromStrict _querySeq) (B.fromStrict _subjectSeq)- ++-- specific for Tabular Blast from NCBI HTTP requests+genParseBlastHTTPTabularHit :: Parser BlastTabularHit+genParseBlastHTTPTabularHit = do+ _queryId <- takeWhile1 ((/=9) . ord) <?> "hit qid"+ char '\t'+ _subjectId <- takeWhile1 ((/=9) . ord) <?> "hit sid"+ char '\t'+ _ <- takeWhile1 ((/=9) . ord) <?> "redundant id1"+ char '\t'+ _ <- takeWhile1 ((/=9) . ord) <?> "redundant id2"+ char '\t'+ _seqIdentity <- double <?> "hit seqid"+ char '\t'+ _alignmentLength <- decimal <?> "hit sid"+ char '\t'+ _misMatches <- decimal <?> "hit mmatch"+ char '\t'+ _gapOpenScore <- decimal <?> "hit gopen"+ char '\t'+ _queryStart <- decimal <?> "hit qstart"+ char '\t'+ _queryEnd <- decimal <?> "hit qend"+ char '\t'+ _hitSeqStart <- decimal <?> "hit sstart"+ char '\t'+ _hitSeqEnd <- decimal <?> "hit send"+ char '\t'+ _eValue <- double <?> "hit eval"+ char '\t'+ _bitScore <- double <?> "hit bs"+ char '\n'+ return $ BlastTabularHit (B.fromStrict _queryId) (B.fromStrict _subjectId) _seqIdentity _alignmentLength _misMatches _gapOpenScore _queryStart _queryEnd _hitSeqStart _hitSeqEnd _eValue _bitScore 0 B.empty B.empty+ --IUPAC amino acid with gap --aminoacidLetters :: Char -> Bool aminoacidLetters = inClass "ARNDCQEGHILMFPSTWYVBZX-"
BiobaseBlast.cabal view
@@ -1,5 +1,5 @@ name: BiobaseBlast-version: 0.2.0.0+version: 0.2.1.0 author: Christian Hoener zu Siederdissen, Florian Eggenhofer maintainer: choener@bioinf.uni-leipzig.de homepage: https://github.com/choener/BiobaseBlast@@ -32,8 +32,8 @@ extra-source-files: changelog.md README.md--+ tests/succeed/*.golden+ tests/succeed/*.test library build-depends: base >= 4.7 && < 5.0@@ -95,6 +95,7 @@ , tasty-quickcheck >= 0.8 , tasty-silver >= 3.1.9 , tasty-th >= 0.1+ , text -- , BiobaseBlast @@ -106,6 +107,5 @@ source-repository this type: git- location: https://github.com/choener/BiobaseBlast/tree/0.2.0.0- tag: 0.2.0.0-+ location: https://github.com/choener/BiobaseBlast/tree/0.2.1.0+ tag: 0.2.1.0
tests/properties.hs view
@@ -1,13 +1,67 @@ --- |--- -- TODO some unit tests to check if assumed-known values are in the right -- table cells module Main where -+import Test.Tasty+import Test.Tasty.Silver ( findByExtension)+import Test.Tasty.Silver.Advanced (goldenTest1, GDiff(..), GShow(..))+import Biobase.BLAST.Import+import System.FilePath ( replaceExtension )+import qualified Data.Text as T+import qualified Data.Text.IO as TIO+import Control.Monad main :: IO ()-main = return ()+main = defaultMain =<< allTests +allTests :: IO TestTree+allTests = do+ tabularSucceedTest <- succeedTest+ tabularHTTPSucceedTest <- succeedHTTPTest+ return $ testGroup "tests"+ [tabularSucceedTest, tabularHTTPSucceedTest]++succeedTest :: IO TestTree+succeedTest = do+ files <- findByExtension [".test"] "./tests/succeed" + return $ testGroup "succeed" $ map tastyTest files++tastyTest :: FilePath -> TestTree+tastyTest testFile =+ let+ goldenFilePath :: FilePath+ goldenFilePath = replaceExtension testFile ".golden"+ in goldenTest1 "Tabular HTTP blast" (liftM Just (TIO.readFile goldenFilePath)) (testBlast testFile) compareText (ShowText) print+ --in goldenVsAction "Tabularblast" goldenFile (blastFromFile testFile) (\a -> T.pack $ concatMap show a)++testBlast :: FilePath -> IO T.Text+testBlast testFile = do+ result <- blastFromFile testFile+ let textresult = T.pack $ ((concatMap show result)++ "\n")+ return textresult++succeedHTTPTest :: IO TestTree+succeedHTTPTest = do+ files <- findByExtension [".httptest"] "./tests/succeed"+ return $ testGroup "succeed" $ map tastyHTTPTest files++tastyHTTPTest :: FilePath -> TestTree+tastyHTTPTest testFile =+ let+ goldenFilePath :: FilePath+ goldenFilePath = replaceExtension testFile ".golden"+ in goldenTest1 "Tabular HTTP blast" (liftM Just (TIO.readFile goldenFilePath)) (testBlastHTTPS testFile) compareText (ShowText) print+ --in goldenVsAction "Tabular HTTP blast" goldenFile (blastHTTPFromFile testFile) (\a -> T.pack $ concatMap show a)++testBlastHTTPS :: FilePath -> IO T.Text+testBlastHTTPS testFile = do+ result <- blastHTTPFromFile testFile+ let textresult = T.pack $ ((concatMap show result) ++ "\n")+ return textresult++compareText :: T.Text -> T.Text -> GDiff+compareText goldT testT+ | goldT == testT = Equal+ | otherwise = DiffText (Just ("Golden file and test output are different:\nTest:\n" ++ T.unpack testT ++ "\nGold:\n" ++ T.unpack goldT)) testT goldT
+ tests/succeed/httptabular.golden view
@@ -0,0 +1,1 @@+BlastTabularResult {blastProgram = BlastN, blastQueryId = "Aeromonas", blastDatabase = "nt", blastHitNumber = 9, hitLines = [BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1214238400|gb|CP022186.1|", seqIdentity = 100.0, alignmentLength = 62, misMatches = 0, gapOpenScore = 0, queryStart = 1, queryEnd = 62, hitSeqStart = 4466360, hitSeqEnd = 4466299, eValue = 3.85e-22, bitScore = 113.0, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1214232668|gb|CP022181.1|", seqIdentity = 100.0, alignmentLength = 62, misMatches = 0, gapOpenScore = 0, queryStart = 1, queryEnd = 62, hitSeqStart = 4451525, hitSeqEnd = 4451464, eValue = 3.85e-22, bitScore = 113.0, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1214226508|gb|CP022175.1|", seqIdentity = 100.0, alignmentLength = 62, misMatches = 0, gapOpenScore = 0, queryStart = 1, queryEnd = 62, hitSeqStart = 4459524, hitSeqEnd = 4459463, eValue = 3.85e-22, bitScore = 113.0, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1202187378|gb|CP021654.1|", seqIdentity = 100.0, alignmentLength = 62, misMatches = 0, gapOpenScore = 0, queryStart = 1, queryEnd = 62, hitSeqStart = 4130312, hitSeqEnd = 4130373, eValue = 3.85e-22, bitScore = 113.0, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|142849896|gb|CP000644.1|", seqIdentity = 100.0, alignmentLength = 62, misMatches = 0, gapOpenScore = 0, queryStart = 1, queryEnd = 62, hitSeqStart = 197460, hitSeqEnd = 197521, eValue = 3.85e-22, bitScore = 113.0, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1024308492|gb|CP015448.1|", seqIdentity = 95.161, alignmentLength = 62, misMatches = 2, gapOpenScore = 1, queryStart = 1, queryEnd = 62, hitSeqStart = 690724, hitSeqEnd = 690664, eValue = 1.03e-16, bitScore = 95.1, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1024268833|gb|CP014774.1|", seqIdentity = 95.161, alignmentLength = 62, misMatches = 2, gapOpenScore = 1, queryStart = 1, queryEnd = 62, hitSeqStart = 2959093, hitSeqEnd = 2959153, eValue = 1.03e-16, bitScore = 95.1, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|1006067808|gb|CP012504.1|", seqIdentity = 95.161, alignmentLength = 62, misMatches = 2, gapOpenScore = 1, queryStart = 1, queryEnd = 62, hitSeqStart = 391011, hitSeqEnd = 391071, eValue = 1.03e-16, bitScore = 95.1, subjectFrame = 0, querySeq = "", subjectSeq = ""},BlastTabularHit {queryId = "Aeromonas", subjectId = "gi|328802836|gb|CP002607.1|", seqIdentity = 95.161, alignmentLength = 62, misMatches = 2, gapOpenScore = 1, queryStart = 1, queryEnd = 62, hitSeqStart = 167317, hitSeqEnd = 167377, eValue = 1.03e-16, bitScore = 95.1, subjectFrame = 0, querySeq = "", subjectSeq = ""}]}
+ tests/succeed/tabular.golden view
@@ -0,0 +1,1 @@+BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DWD5", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DWJ5", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DX03", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DYA3", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DYI3", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 3, hitLines = [BlastTabularHit {queryId = "UniRef50_A0A009DYI3", subjectId = "sp|P55729|Y4ZB_RHISN", seqIdentity = 39.535, alignmentLength = 86, misMatches = 52, gapOpenScore = 0, queryStart = 1, queryEnd = 86, hitSeqStart = 252, hitSeqEnd = 337, eValue = 3.7e-16, bitScore = 74.7, subjectFrame = 1, querySeq = "AIYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLVSFAQHLGKTGWTVQRLLRIIQVNLFERRTLKTLFSPDKI", subjectSeq = "ALYKGRWQIELLFRWIKQHLKIRSFLGNNDNAVRLQLFAAMIAYALLRIAARLNRITMPILRFTDLVIRCLFERRDIAAIERPPPV"},BlastTabularHit {queryId = "UniRef50_A0A009DYI3", subjectId = "sp|Q55566|T4SA_SYNY3", seqIdentity = 36.986, alignmentLength = 73, misMatches = 46, gapOpenScore = 0, queryStart = 2, queryEnd = 74, hitSeqStart = 253, hitSeqEnd = 325, eValue = 1.55e-7, bitScore = 50.8, subjectFrame = 1, querySeq = "IYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLVSFAQHLGKTGWTVQRLLRIIQVNLFER", subjectSeq = "IYKKRWQIELLWKFLKMHLKLNRLIAKNENAIGIQIYTCIIAYLILKLLVIPKEAGTTMLDKLRYLQAFMCEK"},BlastTabularHit {queryId = "UniRef50_A0A009DYI3", subjectId = "sp|Q45620|T5377_GEOSE", seqIdentity = 41.304, alignmentLength = 46, misMatches = 27, gapOpenScore = 0, queryStart = 2, queryEnd = 47, hitSeqStart = 276, hitSeqEnd = 321, eValue = 4.84e-6, bitScore = 46.6, subjectFrame = 1, querySeq = "IYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLV", subjectSeq = "MYQQRWAVEVFFRWVKQYLNVPTLFGTTENAVYNQLFAAFIAYVLL"}]}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009DZQ8", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009E0R3", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 1, hitLines = [BlastTabularHit {queryId = "UniRef50_A0A009E0R3", subjectId = "sp|P50358|Y4SN_RHISN", seqIdentity = 39.241, alignmentLength = 79, misMatches = 48, gapOpenScore = 0, queryStart = 4, queryEnd = 82, hitSeqStart = 28, hitSeqEnd = 106, eValue = 6.58e-15, bitScore = 68.9, subjectFrame = 1, querySeq = "PCFYCSIFLSIWLYRIRTGCPWRDIPSCFGHSNSIFKRFNRWSSSGKLLRLFKLLASCPDMEWIFIDGSHVRAHQHSAG", subjectSeq = "PRTNNRLFLDALLWMARSGGRWRDLPERLGDYRAVKRRYYRWIEMGVLDEMLAVLAREADLEWLMIDSTIVRAHQHAAG"}]}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009E1D7", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009E284", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009E2R5", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 0, hitLines = []}BlastTabularResult {blastProgram = BlastP, blastQueryId = "UniRef50_A0A009E3M2", blastDatabase = "uniprot_sprot.fasta", blastHitNumber = 8, hitLines = [BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q0P9C7|PGLJ_CAMJE", seqIdentity = 32.044, alignmentLength = 181, misMatches = 119, gapOpenScore = 2, queryStart = 98, queryEnd = 274, hitSeqStart = 152, hitSeqEnd = 332, eValue = 1.96e-20, bitScore = 93.6, subjectFrame = 1, querySeq = "SQGVEDDLKETLGDLPN-VSTIYNAFDQHYMQNQANEFQPELGKYLLHVGAFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQN", subjectSeq = "SKGNLEDLVQNFSISPKKCEILYNAIDLENIGQKALEDIALKDKFILSVGRLDKGKNHALLIRAYARLKTDLKLVILGEGVLKDELLALIKELNLEEKVLLLGFDNNPYKYMAKCEFFAFASVFEGFSNVLIESLACSCAVVCTDHKSGARELFGDDEFGLLVEVDNENSMFQGLKTMLED"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q58459|Y1059_METJA", seqIdentity = 38.596, alignmentLength = 114, misMatches = 67, gapOpenScore = 1, queryStart = 142, queryEnd = 252, hitSeqStart = 205, hitSeqEnd = 318, eValue = 2.28e-20, bitScore = 93.6, subjectFrame = 1, querySeq = "LLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSP", subjectSeq = "FINIGRLTEQKGQWFLIRSFKRVTEKYPNAKLIILGDGELKNKLQELINKLNLQNNVYLLGMQKNPFKFLKHSNCFVFSSLWEGLPNTVIEALSLNLPVISTDCKTGPREILCP"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q9R9N1|LPSE_RHIME", seqIdentity = 26.154, alignmentLength = 195, misMatches = 129, gapOpenScore = 7, queryStart = 89, queryEnd = 274, hitSeqStart = 116, hitSeqEnd = 304, eValue = 5.08e-12, bitScore = 68.9, subjectFrame = 1, querySeq = "YKKHPCI-CVSQGVEDDLKETLGDLPNVSTIYN--AFDQHYMQNQANEFQPELGKYLLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQN", subjectSeq = "FRNTDCIVCNTPGIAERVSD-LGWKREIRVISNFTGTGRVVAVDRAKLDTPADAPVVMSMGRFVERKGFHTLIEAVA----RLPGVYLWLLGDGEERDNLHKLATDLGVSGRVRFAGWQDDTRPFLAAVDVFVMSSSHEPLGNVILESWAQGTPVVSTRS-EGPQWFMRDGENGLMVDIGDAEGFARAIEQIVAD"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q81ST7|BSHA_BACAN", seqIdentity = 25.694, alignmentLength = 288, misMatches = 163, gapOpenScore = 11, queryStart = 1, queryEnd = 274, hitSeqStart = 87, hitSeqEnd = 337, eValue = 2.94e-11, bitScore = 67.0, subjectFrame = 1, querySeq = "IDIKHWYYKLFIIITWRYQYIAKQFDQYVLKNIGQPDLILSNLIQTNRIL--SNSKLDNIAYVIRNTFSKENENALLKNPNKVINRYREIYKKHPCICVSQGVEDDLKETLGDLPN--VSTIYNAFDQH-YMQNQANEFQPELG-----KYLLHVGAFCYAKAHDTLIKAYAESSQQI--PLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN--LVAVDDIKALAEKMNQVMQN", subjectSeq = "LDILHVHYAIPHAICA---YLAKQM-------IGERIKIVTTLHGTDITVLGSDPSLNNL---IR--FGIEQSDVVTAVSHSLINETHELVK----------------------PNKDIQTVYNFIDERVYFKRDMTQLKKEYGISESEKILIHISNFRKVKRVQDVVQAFAKIVTEVDAKLLLVGDGPEFCTILQLVKNLHIEDRVLFLGKQDNVAELLAMSDLMLLLSEKESFGLVLLEAMACGVPCIGTRVGGIPEVIQHGDTGYLCEVGDTTGVADQAIQLLKD"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q06994|RFAB_SALTY", seqIdentity = 24.675, alignmentLength = 231, misMatches = 148, gapOpenScore = 9, queryStart = 89, queryEnd = 300, hitSeqStart = 124, hitSeqEnd = 347, eValue = 2.12e-10, bitScore = 64.3, subjectFrame = 1, querySeq = "YKKHP-CI-------CVSQGVEDDLKETLGDLPNVSTIYNAFD-QHYMQNQANEFQPELGKYLLHVG--AFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPF----IKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSP---NNLVAVDDIKALAEKMNQVMQNPNDFYTPFNLNFLPCNIAKQY-LDYFK", subjectSeq = "HKKHAECITYADYHLAISSGIKEQIMARGISAQDISVVYNPVSIKTVIVPPPERDKPAV---FLYVGRLKFEGQKRVKDLFDGLARTTGEWQLHIIGDGSDFEKCQAYSRELGIEQRVIWYGWQSAPWQVVQQKIKNVTALLLTSAFEGFPMTLLEAMSYGIPCISSDCMSGPRDMIKPGLNGELYTPGAIDDFVGHLNRVISGE----VKYQHDIIPGTIERFYDVLYFK"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|P27127|RFAB_ECOLI", seqIdentity = 28.099, alignmentLength = 121, misMatches = 80, gapOpenScore = 2, queryStart = 157, queryEnd = 270, hitSeqStart = 198, hitSeqEnd = 318, eValue = 2.33e-9, bitScore = 61.2, subjectFrame = 1, querySeq = "LIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPF----IKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPN---NLVAVDDIKALAEKMNQ", subjectSeq = "LLDGLSQAKGNWKLHVLGDGSDFEKCQAYGRELNIDDRIVWYGWQQYPWELVQQDIEKVSALLLTSSFEGFPMTLLEALSWGIPCISADCVSGPADIIQPDVNGHLYQPGDIAGFVTLLNK"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|O05083|Y1698_HAEIN", seqIdentity = 26.056, alignmentLength = 142, misMatches = 99, gapOpenScore = 2, queryStart = 140, queryEnd = 275, hitSeqStart = 182, hitSeqEnd = 323, eValue = 8.24e-9, bitScore = 59.3, subjectFrame = 1, querySeq = "KYLLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQNP", subjectSeq = "KTILSVGHLFSYKGFDYLLKVWQVLAKKYPDWNLKIVGSGEEEENLKNLAKALDIEDSVNFIPRTNDVSFYYESSSIYCLPSQTEGLPLVVIEAMAFGLPIVAFNCSPGVKQLVEHKENGFLCEQNNIEEMVKGLDLLINNP"},BlastTabularHit {queryId = "UniRef50_A0A009E3M2", subjectId = "sp|Q9R9N0|LPSD_RHIME", seqIdentity = 24.419, alignmentLength = 172, misMatches = 118, gapOpenScore = 4, queryStart = 142, queryEnd = 303, hitSeqStart = 171, hitSeqEnd = 340, eValue = 1.3e-8, bitScore = 58.9, subjectFrame = 1, querySeq = "LLHVGAFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQNP-------NDFYTPFNLNFLPCNIAKQYLDYFKINI", subjectSeq = "VVGMGRFVKRKGFAGLIRAVKEV-ENTYLWLVGDGPEREQLEQLTDELGLRDRVRFTGWQTNAYGFLSAGDAFVINSSHEPLGNVCFEGWGAGKPTIASRA-EGPSWVMTHESDALMVDCGDDVGLAAAIRRLRDDPALRERLSAGGSETLRTRFSEKAITDAYLDLFDRGV"}]}
+ tests/succeed/tabular.test view
@@ -0,0 +1,59 @@+# BLASTP 2.4.0++# Query: UniRef50_A0A009DWD5 Uncharacterized protein (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009DWD5_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009DWJ5 Putative transposase (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009DWJ5_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009DX03 Uncharacterized protein (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009DX03_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009DYA3 Putative integrase n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009DYA3_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009DYI3 Transposase DDE domain protein (Fragment) n=3 Tax=Acinetobacter baumannii 348935 RepID=A0A009DYI3_ACIBA+# Database: uniprot_sprot.fasta+# Fields: query id, subject id, % identity, alignment length, mismatches, gap opens, q. start, q. end, s. start, s. end, evalue, bit score, sbjct frame, query seq, subject seq+# 3 hits found+UniRef50_A0A009DYI3 sp|P55729|Y4ZB_RHISN 39.535 86 52 0 1 86 252 337 3.70e-16 74.7 1 AIYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLVSFAQHLGKTGWTVQRLLRIIQVNLFERRTLKTLFSPDKI ALYKGRWQIELLFRWIKQHLKIRSFLGNNDNAVRLQLFAAMIAYALLRIAARLNRITMPILRFTDLVIRCLFERRDIAAIERPPPV+UniRef50_A0A009DYI3 sp|Q55566|T4SA_SYNY3 36.986 73 46 0 2 74 253 325 1.55e-07 50.8 1 IYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLVSFAQHLGKTGWTVQRLLRIIQVNLFER IYKKRWQIELLWKFLKMHLKLNRLIAKNENAIGIQIYTCIIAYLILKLLVIPKEAGTTMLDKLRYLQAFMCEK+UniRef50_A0A009DYI3 sp|Q45620|T5377_GEOSE 41.304 46 27 0 2 47 276 321 4.84e-06 46.6 1 IYKDRWKVELFFKAIKQNLKLKAFLGRSRNAIQTQIWIAMIAYLLV MYQQRWAVEVFFRWVKQYLNVPTLFGTTENAVYNQLFAAFIAYVLL+# BLASTP 2.4.0++# Query: UniRef50_A0A009DZQ8 Putative membrane protein (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009DZQ8_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009E0R3 Transposase DDE domain protein (Fragment) n=5 Tax=Acinetobacter RepID=A0A009E0R3_ACIBA+# Database: uniprot_sprot.fasta+# Fields: query id, subject id, % identity, alignment length, mismatches, gap opens, q. start, q. end, s. start, s. end, evalue, bit score, sbjct frame, query seq, subject seq+# 1 hits found+UniRef50_A0A009E0R3 sp|P50358|Y4SN_RHISN 39.241 79 48 0 4 82 28 106 6.58e-15 68.9 1 PCFYCSIFLSIWLYRIRTGCPWRDIPSCFGHSNSIFKRFNRWSSSGKLLRLFKLLASCPDMEWIFIDGSHVRAHQHSAG PRTNNRLFLDALLWMARSGGRWRDLPERLGDYRAVKRRYYRWIEMGVLDEMLAVLAREADLEWLMIDSTIVRAHQHAAG+# BLASTP 2.4.0++# Query: UniRef50_A0A009E1D7 Uncharacterized protein (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009E1D7_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009E284 Uncharacterized protein n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009E284_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009E2R5 Toxin-antitoxin system, antitoxin component, Xre family n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009E2R5_ACIBA+# Database: uniprot_sprot.fasta+# 0 hits found+# BLASTP 2.4.0++# Query: UniRef50_A0A009E3M2 Glycosyl transferases group 1 family protein (Fragment) n=1 Tax=Acinetobacter baumannii 348935 RepID=A0A009E3M2_ACIBA+# Database: uniprot_sprot.fasta+# Fields: query id, subject id, % identity, alignment length, mismatches, gap opens, q. start, q. end, s. start, s. end, evalue, bit score, sbjct frame, query seq, subject seq+# 8 hits found+UniRef50_A0A009E3M2 sp|Q0P9C7|PGLJ_CAMJE 32.044 181 119 2 98 274 152 332 1.96e-20 93.6 1 SQGVEDDLKETLGDLPN-VSTIYNAFDQHYMQNQANEFQPELGKYLLHVGAFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQN SKGNLEDLVQNFSISPKKCEILYNAIDLENIGQKALEDIALKDKFILSVGRLDKGKNHALLIRAYARLKTDLKLVILGEGVLKDELLALIKELNLEEKVLLLGFDNNPYKYMAKCEFFAFASVFEGFSNVLIESLACSCAVVCTDHKSGARELFGDDEFGLLVEVDNENSMFQGLKTMLED+UniRef50_A0A009E3M2 sp|Q58459|Y1059_METJA 38.596 114 67 1 142 252 205 318 2.28e-20 93.6 1 LLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSP FINIGRLTEQKGQWFLIRSFKRVTEKYPNAKLIILGDGELKNKLQELINKLNLQNNVYLLGMQKNPFKFLKHSNCFVFSSLWEGLPNTVIEALSLNLPVISTDCKTGPREILCP+UniRef50_A0A009E3M2 sp|Q9R9N1|LPSE_RHIME 26.154 195 129 7 89 274 116 304 5.08e-12 68.9 1 YKKHPCI-CVSQGVEDDLKETLGDLPNVSTIYN--AFDQHYMQNQANEFQPELGKYLLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQN FRNTDCIVCNTPGIAERVSD-LGWKREIRVISNFTGTGRVVAVDRAKLDTPADAPVVMSMGRFVERKGFHTLIEAVA----RLPGVYLWLLGDGEERDNLHKLATDLGVSGRVRFAGWQDDTRPFLAAVDVFVMSSSHEPLGNVILESWAQGTPVVSTRS-EGPQWFMRDGENGLMVDIGDAEGFARAIEQIVAD+UniRef50_A0A009E3M2 sp|Q81ST7|BSHA_BACAN 25.694 288 163 11 1 274 87 337 2.94e-11 67.0 1 IDIKHWYYKLFIIITWRYQYIAKQFDQYVLKNIGQPDLILSNLIQTNRIL--SNSKLDNIAYVIRNTFSKENENALLKNPNKVINRYREIYKKHPCICVSQGVEDDLKETLGDLPN--VSTIYNAFDQH-YMQNQANEFQPELG-----KYLLHVGAFCYAKAHDTLIKAYAESSQQI--PLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN--LVAVDDIKALAEKMNQVMQN LDILHVHYAIPHAICA---YLAKQM-------IGERIKIVTTLHGTDITVLGSDPSLNNL---IR--FGIEQSDVVTAVSHSLINETHELVK----------------------PNKDIQTVYNFIDERVYFKRDMTQLKKEYGISESEKILIHISNFRKVKRVQDVVQAFAKIVTEVDAKLLLVGDGPEFCTILQLVKNLHIEDRVLFLGKQDNVAELLAMSDLMLLLSEKESFGLVLLEAMACGVPCIGTRVGGIPEVIQHGDTGYLCEVGDTTGVADQAIQLLKD+UniRef50_A0A009E3M2 sp|Q06994|RFAB_SALTY 24.675 231 148 9 89 300 124 347 2.12e-10 64.3 1 YKKHP-CI-------CVSQGVEDDLKETLGDLPNVSTIYNAFD-QHYMQNQANEFQPELGKYLLHVG--AFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPF----IKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSP---NNLVAVDDIKALAEKMNQVMQNPNDFYTPFNLNFLPCNIAKQY-LDYFK HKKHAECITYADYHLAISSGIKEQIMARGISAQDISVVYNPVSIKTVIVPPPERDKPAV---FLYVGRLKFEGQKRVKDLFDGLARTTGEWQLHIIGDGSDFEKCQAYSRELGIEQRVIWYGWQSAPWQVVQQKIKNVTALLLTSAFEGFPMTLLEAMSYGIPCISSDCMSGPRDMIKPGLNGELYTPGAIDDFVGHLNRVISGE----VKYQHDIIPGTIERFYDVLYFK+UniRef50_A0A009E3M2 sp|P27127|RFAB_ECOLI 28.099 121 80 2 157 270 198 318 2.33e-09 61.2 1 LIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPF----IKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPN---NLVAVDDIKALAEKMNQ LLDGLSQAKGNWKLHVLGDGSDFEKCQAYGRELNIDDRIVWYGWQQYPWELVQQDIEKVSALLLTSSFEGFPMTLLEALSWGIPCISADCVSGPADIIQPDVNGHLYQPGDIAGFVTLLNK+UniRef50_A0A009E3M2 sp|O05083|Y1698_HAEIN 26.056 142 99 2 140 275 182 323 8.24e-09 59.3 1 KYLLHVGAFCYAKAHDTLIKAYAESSQQIP---LYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQNP KTILSVGHLFSYKGFDYLLKVWQVLAKKYPDWNLKIVGSGEEEENLKNLAKALDIEDSVNFIPRTNDVSFYYESSSIYCLPSQTEGLPLVVIEAMAFGLPIVAFNCSPGVKQLVEHKENGFLCEQNNIEEMVKGLDLLINNP+UniRef50_A0A009E3M2 sp|Q9R9N0|LPSD_RHIME 24.419 172 118 4 142 303 171 340 1.30e-08 58.9 1 LLHVGAFCYAKAHDTLIKAYAESSQQIPLYLLGKGELEADIKQLIYSLNLEKKVHFLGFNKNPYPFIKNAQALILSSRYEGFVRVISEALALGTPVISTNCPSGPNEILSPNN---LVAVDDIKALAEKMNQVMQNP-------NDFYTPFNLNFLPCNIAKQYLDYFKINI VVGMGRFVKRKGFAGLIRAVKEV-ENTYLWLVGDGPEREQLEQLTDELGLRDRVRFTGWQTNAYGFLSAGDAFVINSSHEPLGNVCFEGWGAGKPTIASRA-EGPSWVMTHESDALMVDCGDDVGLAAAIRRLRDDPALRERLSAGGSETLRTRFSEKAITDAYLDLFDRGV