-
Notifications
You must be signed in to change notification settings - Fork 19
Add more wrappers for ISCC-SUM #162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 9 commits
609362e
554e346
3dbf198
757be8a
402ef65
3eccef8
5c00880
e2e23e6
66e3119
9f14bed
0b99e9d
0a2a791
57e50ac
11487b0
06908a0
0d90677
29619f8
1863f57
916fc64
aea916f
5ed6929
136ac4f
c6fdf72
1a7cfce
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,131 @@ | ||||||||||||||
| <tool id="iscc_sum_compare" name="Compare ISCC hash similarity" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="24.1"> | ||||||||||||||
| <description>with ISCC-SUM</description> | ||||||||||||||
| <macros> | ||||||||||||||
| <import>macros.xml</import> | ||||||||||||||
| <import>creators.xml</import> | ||||||||||||||
| </macros> | ||||||||||||||
| <expand macro="requirements" /> | ||||||||||||||
| <expand macro="version_command" /> | ||||||||||||||
| <creator> | ||||||||||||||
| <expand macro="creators/iscc" /> | ||||||||||||||
| <expand macro="creators/lco" /> | ||||||||||||||
| <expand macro="creators/maartenpaul" /> | ||||||||||||||
| <expand macro="creators/etzm" /> | ||||||||||||||
| </creator> | ||||||||||||||
|
|
||||||||||||||
| <command detect_errors="exit_code"><![CDATA[ | ||||||||||||||
| #if $input_type.input_selector == "two_files": | ||||||||||||||
| ## Pairwise comparison | ||||||||||||||
| iscc-sum --similar --threshold $threshold '$input_type.file1' '$input_type.file2' > '${output_file}' | ||||||||||||||
| #else: | ||||||||||||||
| ## Collection comparison | ||||||||||||||
| mkdir -p input_files && | ||||||||||||||
| #for $file in $input_type.file_collection: | ||||||||||||||
| ln -s '$file' 'input_files/$file.element_identifier' && | ||||||||||||||
| #end for | ||||||||||||||
| iscc-sum --similar --threshold $threshold input_files/* > '${output_file}' | ||||||||||||||
| #end if | ||||||||||||||
| ]]></command> | ||||||||||||||
|
|
||||||||||||||
| <inputs> | ||||||||||||||
| <conditional name="input_type"> | ||||||||||||||
| <param name="input_selector" type="select" label="Input type"> | ||||||||||||||
| <option value="two_files">Compare two files</option> | ||||||||||||||
| <option value="collection">Find similar files in collection</option> | ||||||||||||||
| </param> | ||||||||||||||
| <when value="two_files"> | ||||||||||||||
| <param name="file1" type="data" format="data" label="First file"/> | ||||||||||||||
| <param name="file2" type="data" format="data" label="Second file"/> | ||||||||||||||
|
Comment on lines
+58
to
+59
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The tests only cover cases for working with images, right? As of today, is it supposed to work with other data too? If so, it'd make sense to add some more tests with other data. Otherwise, I'd suggest to restrict the input formats to images for now, to avoid negative user experiences:
Suggested change
Same also in lines 63, 66, 69, in tools/iscc-sum/iscc_verify.xml, and tools/iscc-sum/iscc_sum.xml.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes it should work for any data. I have a fasta file in the test data, can make sure it is used in more different tests. |
||||||||||||||
| </when> | ||||||||||||||
| <when value="collection"> | ||||||||||||||
| <param name="file_collection" type="data_collection" collection_type="list" | ||||||||||||||
| format="data" label="File collection to compare"/> | ||||||||||||||
| </when> | ||||||||||||||
| </conditional> | ||||||||||||||
| <param name="threshold" type="integer" value="12" min="0" max="256" | ||||||||||||||
| label="Similarity threshold (Hamming distance)" | ||||||||||||||
| help="Maximum Hamming distance for similarity matching. 0-5: Nearly identical, 6-12: Likely similar (default), 13-20: Probably somewhat similar"/> | ||||||||||||||
| </inputs> | ||||||||||||||
|
|
||||||||||||||
| <outputs> | ||||||||||||||
| <data name="output_file" format="txt" label="${tool.name} on ${on_string}"/> | ||||||||||||||
| </outputs> | ||||||||||||||
|
|
||||||||||||||
| <tests> | ||||||||||||||
| <!-- Test pairwise comparison --> | ||||||||||||||
| <test expect_num_outputs="1"> | ||||||||||||||
| <conditional name="input_type"> | ||||||||||||||
| <param name="input_selector" value="two_files"/> | ||||||||||||||
| <param name="file1" value="test1.png"/> | ||||||||||||||
| <param name="file2" value="test1.png"/> | ||||||||||||||
| </conditional> | ||||||||||||||
| <param name="threshold" value="12"/> | ||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For tighter testing, wouldn't it make sense to set this threshold to 0, since the two inputs are identical?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In the ISCC-SUM CLI tool the default threshold for similarity is set to 12. Only when files are similar it will return their similarity. As we discussed below I will revise the output. I think it should always output the similarity score for all files |
||||||||||||||
| <output name="output_file"> | ||||||||||||||
| <assert_contents> | ||||||||||||||
| <has_text text="~00"/> | ||||||||||||||
| </assert_contents> | ||||||||||||||
| </output> | ||||||||||||||
| </test> | ||||||||||||||
| <!-- Test collection comparison --> | ||||||||||||||
| <test expect_num_outputs="1"> | ||||||||||||||
| <conditional name="input_type"> | ||||||||||||||
| <param name="input_selector" value="collection"/> | ||||||||||||||
| <param name="file_collection"> | ||||||||||||||
| <collection type="list"> | ||||||||||||||
| <element name="file1" value="test1.png"/> | ||||||||||||||
| <element name="file2" value="test2.tiff"/> | ||||||||||||||
| <element name="file3" value="test2.tiff"/> | ||||||||||||||
| </collection> | ||||||||||||||
| </param> | ||||||||||||||
| </conditional> | ||||||||||||||
| <param name="threshold" value="12"/> | ||||||||||||||
| <output name="output_file"> | ||||||||||||||
| <assert_contents> | ||||||||||||||
| <has_text text="~00"/> | ||||||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The output of the tool for this test case is: We can make the tests a bit stricter:
Suggested change
I guess, something similar can be done for lines 94 and 137. |
||||||||||||||
| </assert_contents> | ||||||||||||||
| </output> | ||||||||||||||
| </test> | ||||||||||||||
| </tests> | ||||||||||||||
|
|
||||||||||||||
| <help><![CDATA[ | ||||||||||||||
| **What it does** | ||||||||||||||
maartenpaul marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||
|
|
||||||||||||||
| Compares files by their ISCC codes to detect content similarity. | ||||||||||||||
|
|
||||||||||||||
| This tool can operate in two modes: | ||||||||||||||
|
|
||||||||||||||
| 1. **Pairwise comparison**: Compare two specific files to determine their similarity | ||||||||||||||
| 2. **Collection comparison**: Find all similar files within a collection | ||||||||||||||
|
|
||||||||||||||
| **Similarity Measurement** | ||||||||||||||
|
|
||||||||||||||
| Similarity is measured using Hamming distance on the Data-Code component of ISCC codes. | ||||||||||||||
| Lower numbers indicate higher similarity: | ||||||||||||||
|
|
||||||||||||||
| - **0-5**: Nearly identical files | ||||||||||||||
| - **6-12**: Likely similar content (default threshold) | ||||||||||||||
| - **13-20**: Probably somewhat similar | ||||||||||||||
|
|
||||||||||||||
| **Input** | ||||||||||||||
|
|
||||||||||||||
| Either: | ||||||||||||||
| - Two individual files for pairwise comparison | ||||||||||||||
| - A dataset collection containing multiple files | ||||||||||||||
|
|
||||||||||||||
| **Output** | ||||||||||||||
|
|
||||||||||||||
| A text report showing similarity relationships. Files are grouped by similarity, with | ||||||||||||||
| reference files listed first and similar files indented below with their Hamming distance (~N). | ||||||||||||||
|
|
||||||||||||||
| Example output:: | ||||||||||||||
|
|
||||||||||||||
| document_v1.txt | ||||||||||||||
| ~08 document_v2.txt | ||||||||||||||
| ~12 document_draft.txt | ||||||||||||||
|
Comment on lines
+177
to
+179
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Judging by what I observed with
Suggested change
|
||||||||||||||
|
|
||||||||||||||
| **More Information** | ||||||||||||||
|
|
||||||||||||||
| For more details about ISCC, visit: https://iscc.codes/ | ||||||||||||||
| ]]></help> | ||||||||||||||
| <expand macro="citations" /> | ||||||||||||||
| </tool> | ||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,147 @@ | ||
| <tool id="iscc_sum_verify" name="Verify ISCC hash" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="24.1"> | ||
| <description>with ISCC-SUM</description> | ||
| <macros> | ||
| <import>macros.xml</import> | ||
| <import>creators.xml</import> | ||
| </macros> | ||
| <expand macro="requirements" /> | ||
| <expand macro="version_command" /> | ||
| <creator> | ||
| <expand macro="creators/iscc" /> | ||
| <expand macro="creators/lco" /> | ||
| <expand macro="creators/maartenpaul" /> | ||
| <expand macro="creators/etzm" /> | ||
| </creator> | ||
|
|
||
| <command detect_errors="exit_code"><![CDATA[ | ||
| GENERATED=\$(iscc-sum '$input_file' | cut -d':' -f2 | cut -d' ' -f1) && | ||
| #if $expected_code_source.source_type == "text": | ||
| EXPECTED='$expected_code_source.expected_code_text' | ||
| #else: | ||
| ## Read file and remove all whitespace including newlines | ||
| EXPECTED=\$(cat '$expected_code_source.expected_code_file' | head -n 1 | tr -d '[:space:]') | ||
| #end if | ||
| && | ||
| echo "File: $input_file.element_identifier" > '${output_file}' && | ||
| echo "Expected: \$EXPECTED" >> '${output_file}' && | ||
| echo "Generated: \$GENERATED" >> '${output_file}' && | ||
| if [ "\$GENERATED" = "\$EXPECTED" ]; then | ||
| echo "Status: OK" >> '${output_file}'; | ||
| else | ||
| echo "Status: FAILED" >> '${output_file}'; | ||
| fi | ||
| ]]></command> | ||
|
|
||
| <inputs> | ||
| <param name="input_file" type="data" format="data" label="File to verify"/> | ||
| <conditional name="expected_code_source"> | ||
| <param name="source_type" type="select" label="Source of expected ISCC code"> | ||
maartenpaul marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| <option value="text">Enter manually</option> | ||
| <option value="file">From file (workflow input)</option> | ||
| </param> | ||
| <when value="text"> | ||
| <param name="expected_code_text" type="text" label="Expected ISCC code" | ||
| help="The 55-character ISCC-SUM code to verify against"> | ||
| <validator type="length" min="55" max="55" message="ISCC code must be exactly 55 characters"/> | ||
| </param> | ||
| </when> | ||
| <when value="file"> | ||
| <param name="expected_code_file" type="data" format="txt" label="File containing expected ISCC code" | ||
| help="Text file containing the ISCC code from a previous step"/> | ||
| </when> | ||
| </conditional> | ||
maartenpaul marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| </inputs> | ||
|
|
||
| <outputs> | ||
| <data name="output_file" format="txt" label="${tool.name} on ${on_string}"/> | ||
| </outputs> | ||
|
|
||
| <tests> | ||
| <!-- Test verification with text input - match --> | ||
| <test expect_num_outputs="1"> | ||
| <param name="input_file" value="test1.png"/> | ||
| <conditional name="expected_code_source"> | ||
| <param name="source_type" value="text"/> | ||
| <param name="expected_code_text" value="K4AOMGOGQJA4Y46PAC4YPPA63GKD5RVFPR7FU3I4OOEW44TYXNYOTMY"/> | ||
| </conditional> | ||
| <output name="output_file"> | ||
| <assert_contents> | ||
| <has_text text="Status: OK"/> | ||
| </assert_contents> | ||
| </output> | ||
| </test> | ||
| <!-- Test verification with text input - mismatch --> | ||
| <test expect_num_outputs="1"> | ||
| <param name="input_file" value="test1.png"/> | ||
| <conditional name="expected_code_source"> | ||
| <param name="source_type" value="text"/> | ||
| <param name="expected_code_text" value="K4AGSPOSB5SS2X427WZ27QASTSBVTS55DXLMFDF7WOJKEOSTDEI3OXQ"/> | ||
| </conditional> | ||
| <output name="output_file"> | ||
| <assert_contents> | ||
| <has_text text="Status: FAILED"/> | ||
| </assert_contents> | ||
| </output> | ||
| </test> | ||
| <!-- Test verification with file input --> | ||
| <test expect_num_outputs="1"> | ||
| <param name="input_file" value="test1.png"/> | ||
| <conditional name="expected_code_source"> | ||
| <param name="source_type" value="file"/> | ||
| <param name="expected_code_file" value="test1_iscc.txt"/> | ||
| </conditional> | ||
| <output name="output_file"> | ||
| <assert_contents> | ||
| <has_text text="Status: OK"/> | ||
| </assert_contents> | ||
| </output> | ||
| </test> | ||
| </tests> | ||
|
|
||
| <help><![CDATA[ | ||
| **What it does** | ||
|
|
||
| Verifies that a file matches an expected ISCC code for checksum verification. | ||
|
|
||
| This tool generates an ISCC code for the input file and compares it against | ||
| the provided expected code. It reports whether the codes match (OK) or don't match (FAILED). | ||
|
|
||
| **Use Cases** | ||
|
|
||
| - Verify file integrity after transfer or storage | ||
| - Confirm you have the correct version of a file | ||
| - Validate that a file hasn't been modified | ||
| - Workflow verification: Generate ISCC code in one step, verify in another | ||
|
|
||
| **Input** | ||
|
|
||
| - A file to verify | ||
| - The expected ISCC-SUM code, either: | ||
| - Entered manually as text (55-character string) | ||
| - From a file output from a previous workflow step | ||
|
|
||
| **Output** | ||
|
|
||
| A verification report showing: | ||
|
|
||
| - The filename | ||
| - Expected ISCC code | ||
| - Generated ISCC code from the file | ||
| - Status: OK (codes match) or FAILED (codes don't match) | ||
|
|
||
| **Workflow Usage** | ||
|
|
||
| In a workflow, you can: | ||
|
|
||
| 1. Use "Generate ISCC hash" tool to create an ISCC code for a reference file | ||
| 2. Connect that output to this tool's "expected code file" input | ||
| 3. Provide a test file to verify | ||
|
|
||
| This allows automated verification within Galaxy workflows. | ||
|
|
||
| **More Information** | ||
|
|
||
| For more details about ISCC, visit: https://iscc.codes/ | ||
| ]]></help> | ||
| <expand macro="citations" /> | ||
| </tool> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| K4AOMGOGQJA4Y46PAC4YPPA63GKD5RVFPR7FU3I4OOEW44TYXNYOTMY |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| >sp|P51587|BRCA2_HUMAN Breast cancer type 2 susceptibility protein OS=Homo sapiens OX=9606 GN=BRCA2 PE=1 SV=4 | ||
| MPIGSKERPTFFEIFKTRCNKADLGPISLNWFEELSSEAPPYNSEPAEESEHKNNNYEPN | ||
| LFKTPQRKPSYNQLASTPIIFKEQGLTLPLYQSPVKELDKFKLDLGRNVPNSRHKSLRTV | ||
| KTKMDQADDVSCPLLNSCLSESPVVLQCTHVTPQRDKSVVCGSLFHTPKFVKGRQTPKHI | ||
| SESLGAEVDPDMSWSSSLATPPTLSSTVLIVRNEEASETVFPHDTTANVKSYFSNHDESL | ||
| KKNDRFIASVTDSENTNQREAASHGFGKTSGNSFKVNSCKDHIGKSMPNVLEDEVYETVV | ||
| DTSEEDSFSLCFSKCRTKNLQKVRTSKTRKKIFHEANADECEKSKNQVKEKYSFVSEVEP | ||
| NDTDPLDSNVANQKPFESGSDKISKEVVPSLACEWSQLTLSGLNGAQMEKIPLLHISSCD | ||
| QNISEKDLLDTENKRKKDFLTSENSLPRISSLPKSEKPLNEETVVNKRDEEQHLESHTDC | ||
| ILAVKQAISGTSPVASSFQGIKKSIFRIRESPKETFNASFSGHMTDPNFKKETEASESGL | ||
| EIHTVCSQKEDSLCPNLIDNGSWPATTTQNSVALKNAGLISTLKKKTNKFIYAIHDETSY | ||
| KGKKIPKDQKSELINCSAQFEANAFEAPLTFANADSGLLHSSVKRSCSQNDSEEPTLSLT | ||
| SSFGTILRKCSRNETCSNNTVISQDLDYKEAKCNKEKLQLFITPEADSLSCLQEGQCEND | ||
| PKSKKVSDIKEEVLAAACHPVQHSKVEYSDTDFQSQKSLLYDHENASTLILTPTSKDVLS | ||
| NLVMISRGKESYKMSDKLKGNNYESDVELTKNIPMEKNQDVCALNENYKNVELLPPEKYM | ||
| RVASPSRKVQFNQNTNLRVIQKNQEETTSISKITVNPDSEELFSDNENNFVFQVANERNN | ||
| LALGNTKELHETDLTCVNEPIFKNSTMVLYGDTGDKQDTQVSIKKDLVYVLAEENKNSVK | ||
| QHIKMTLGQDLKSDISLNIDKIPEKNNDYMNKWAGLLGPISNHSFGGSFRTASNKEIKLS | ||
| EHNIKKSKMFFKDIEEQYPTSLACVEIVNTLALDNQKKLSKPQSINTVSAHLQSSVVVSD | ||
| CKNSHITPQMLFSKQDFNSNHNLTPSQKAEITELSTILEESGSQFEFTQFRKPSYILQKS | ||
| TFEVPENQMTILKTTSEECRDADLHVIMNAPSIGQVDSSKQFEGTVEIKRKFAGLLKNDC | ||
| NKSASGYLTDENEVGFRGFYSAHGTKLNVSTEALQKAVKLFSDIENISEETSAEVHPISL | ||
| SSSKCHDSVVSMFKIENHNDKTVSEKNNKCQLILQNNIEMTTGTFVEEITENYKRNTENE | ||
| DNKYTAASRNSHNLEFDGSDSSKNDTVCIHKDETDLLFTDQHNICLKLSGQFMKEGNTQI | ||
| KEDLSDLTFLEVAKAQEACHGNTSNKEQLTATKTEQNIKDFETSDTFFQTASGKNISVAK | ||
| ESFNKIVNFFDQKPEELHNFSLNSELHSDIRKNKMDILSYEETDIVKHKILKESVPVGTG | ||
| NQLVTFQGQPERDEKIKEPTLLGFHTASGKKVKIAKESLDKVKNLFDEKEQGTSEITSFS | ||
| HQWAKTLKYREACKDLELACETIEITAAPKCKEMQNSLNNDKNLVSIETVVPPKLLSDNL | ||
| CRQTENLKTSKSIFLKVKVHENVEKETAKSPATCYTNQSPYSVIENSALAFYTSCSRKTS | ||
| VSQTSLLEAKKWLREGIFDGQPERINTADYVGNYLYENNSNSTIAENDKNHLSEKQDTYL | ||
| SNSSMSNSYSYHSDEVYNDSGYLSKNKLDSGIEPVLKNVEDQKNTSFSKVISNVKDANAY | ||
| PQTVNEDICVEELVTSSSPCKNKNAAIKLSISNSNNFEVGPPAFRIASGKIVCVSHETIK | ||
| KVKDIFTDSFSKVIKENNENKSKICQTKIMAGCYEALDDSEDILHNSLDNDECSTHSHKV | ||
| FADIQSEEILQHNQNMSGLEKVSKISPCDVSLETSDICKCSIGKLHKSVSSANTCGIFST | ||
| ASGKSVQVSDASLQNARQVFSEIEDSTKQVFSKVLFKSNEHSDQLTREENTAIRTPEHLI | ||
| SQKGFSYNVVNSSAFSGFSTASGKQVSILESSLHKVKGVLEEFDLIRTEHSLHYSPTSRQ | ||
| NVSKILPRVDKRNPEHCVNSEMEKTCSKEFKLSNNLNVEGGSSENNHSIKVSPYLSQFQQ | ||
| DKQQLVLGTKVSLVENIHVLGKEQASPKNVKMEIGKTETFSDVPVKTNIEVCSTYSKDSE | ||
| NYFETEAVEIAKAFMEDDELTDSKLPSHATHSLFTCPENEEMVLSNSRIGKRRGEPLILV | ||
| GEPSIKRNLLNEFDRIIENQEKSLKASKSTPDGTIKDRRLFMHHVSLEPITCVPFRTTKE | ||
| RQEIQNPNFTAPGQEFLSKSHLYEHLTLEKSSSNLAVSGHPFYQVSATRNEKMRHLITTG | ||
| RPTKVFVPPFKTKSHFHRVEQCVRNINLEENRQKQNIDGHGSDDSKNKINDNEIHQFNKN | ||
| NSNQAVAVTFTKCEEEPLDLITSLQNARDIQDMRIKKKQRQRVFPQPGSLYLAKTSTLPR | ||
| ISLKAAVGGQVPSACSHKQLYTYGVSKHCIKINSKNAESFQFHTEDYFGKESLWTGKGIQ | ||
| LADGGWLIPSNDGKAGKEEFYRALCDTPGVDPKLISRIWVYNHYRWIIWKLAAMECAFPK | ||
| EFANRCLSPERVLLQLKYRYDTEIDRSRRSAIKKIMERDDTAAKTLVLCVSDIISLSANI | ||
| SETSSNKTSSADTQKVAIIELTDGWYAVKAQLDPPLLAVLKNGRLTVGQKIILHGAELVG | ||
| SPDACTPLEAPESLMLKISANSTRPARWYTKLGFFPDPRPFPLPLSSLFSDGGNVGCVDV | ||
| IIQRAYPIQWMEKTSSGLYIFRNEREEFKEAAKYVEAQQKRLEALFTKIQEEFEEHEENT | ||
| TKPYLPSRALTRQQVRALQDGAELYEAVKNAADPAYLEGYFSEEQLRALNNHRQMLNDKK | ||
| QAQIQLEIRKAMESAEQKEQGLSRDVTTVWKLRIVSYSKKEKDSVILSIWRPSSDLYSLL | ||
| TEGKRYRIYHLATSKSKSKSERANIQLAATKKTQYQQLPVSDEILFQIYQPREPLHFSKF | ||
| LDPDFQPSCSEVDLIGFVVSVVKKTGLAPFVYLSDECYNLLAIKFWIDLNEDIIKPHMLI | ||
| AASNLQWRPESKSGLLTLFAGDFSVFSASPKEGHFQETFNKMKNTVENIDILCNEAENKL | ||
| MHILHANDPKWSTPTKDCTSGPYTAQIIPGTGNKLLMSSPNCEIYYQSPLSLCMAKRKSV | ||
| STPVSAQMTSKSCKGEKEIDDQKNCKKRRASDFLSRLPLPPPVSPICTFVSPAAQKAFQP | ||
| PRSCGTKYETPIKKKELNSPQMTPFKKFNEISLLESNSIADEELALINTQALLSGSTGEK | ||
| QFISVSESTRTAPTSSEDYLRLKRRCTTSLIKEQESSQASTEECEKNKQDTITTKKYI |
Uh oh!
There was an error while loading. Please reload this page.