"""Built-in example sequences for the LLPSense demo. Shared by app.py (UI + on-the-fly extraction fallback) and preprocess/extract_example_feat.py (offline pre-computation), so both stay in sync on which sequences have a cached ProtT5 feature under assets/. To add another example, just append a dict with a unique "id" here, then run `python preprocess/extract_example_feat.py` to populate its cached feature in assets/ before deploying. """ from pathlib import Path ASSETS_DIR = Path(__file__).parent / "assets" EXAMPLES = [ { "id": "synuclein", "name": "α-Synuclein", "seq": ( "MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTK" "EQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDP" "DNEAYEMPSEEGYQDYEPEA" ), }, { "id": "ubqln4", "name": "UBQLN4", "seq": ( "MAEPSGAETRPPIRVTVKTPKDKEEIVICDRASVKEFKEEISRRFKAQQDQLVLIFAGKI" "LKDGDTLNQHGIKDGLTVHLVIKTPQKAQDPAAATASSPSTPDPASAPSTTPASPATPAQ" "PSTSGSASSDAGSGSRRSSGGGPSPGAGEGSPSATASILSGFGGILGLGSLGLGSANFME" "LQQQMQRQLMSNPEMLSQIMENPLVQDMMSNPDLMRHMIMANPQMQQLMERNPEISHMLN" "NPELMRQTMELARNPAMMQEMMRNQDRALSNLESIPGGYNALRRMYTDIQEPMFSAAREQ" "FGNNPFSSLAGNSDSSSSQPLRTENREPLPNPWSPSPPTSQAPGSGGEGTGGSGTSQVHP" "TVSNPFGINAASLGSGMFNSPEMQALLQQISENPQLMQNVISAPYMRSMMQTLAQNPDFA" "AQMMVNVPLFAGNPQLQEQLRLQLPVFLQQMQNPESLSILTNPRAMQALLQIQQGLQTLQ" "TEAPGLVPSLGSFGISRTPAPSAGSNAGSTPEAPTSSPATPATSSPTGASSAQQQLMQQM" "IQLLAGSGNSQVQTPEVRFQQQLEQLNSMGFINREANLQALIATGGDINAAIERLLGSQL" "S" ), }, { "id": 'ascl1', "name": 'ASCL1', "seq": ( "MESSAKMESGGAGQQPQPQPQQPFLPPAACFFATAAAAAAAAAAAAAQSAQQQQQQQQQQ" "QQAPQLRPAADGQPSGGGHKSAPKQVKRQRSSSPELMRCKRRLNFSGFGYSLPQQQPAAV" "ARRNERERNRVKLVNLGFATLREHVPNGAANKKMSKVETLRSAVEYIRALQQLLDEHDAV" "SAAFQAGVLSPTISPNYSNDLNSMAGSPVSSYSSDEGSYDPLSPEEQELLDFTNWF" ), }, { "id": 'atn1', "name": 'ATN1', "seq": ( "MKTRQNKDSMSMRSGRKKEAPGPREELRSRGRASPGGVSTSSSDGKAEKSRQTAKKARVE" "EASTPKVNKQGRSEEISESESEETNAPKKTKTEQELPRPQSPSDLDSLDGRSLNDDGSSD" "PRDIDQDNRSTSPSIYSPGSVENDSDSSSGLSQGPARPYHPPPLFPPSPQPPDSTPRQPE" "ASFEPHPSVTPTGYHAPMEPPTSRMFQAPPGAPPPHPQLYPGGTGGVLSGPPMGPKGGGA" "ASSVGGPNGGKQHPPPTTPISVSSSGASGAPPTKPPTTPVGGGNLPSAPPPANFPHVTPN" "LPPPPALRPLNNASASPPGLGAQPLPGHLPSPHAMGQGMGGLPPGPEKGPTLAPSPHSLP" "PASSSAPAPPMRFPYSSSSSSSAAASSSSSSSSSSASPFPASQALPSYPHSFPPPTSLSV" "SNQPPKYTQPSLPSQAVWSQGPPPPPPYGRLLANSNAHPGPFPPSTGAQSTAHPPVSTHH" "HHHQQQQQQQQQQQQQQQQQQQHHGNSGPPPPGAFPHPLEGGSSHHAHPYAMSPSLGSLR" "PYPPGPAHLPPPHSQVSYSQAGPNGPPVSSSSNSSSSTSQGSYPCSHPSPSQGPQGAPYP" "FPPVPTVTTSSATLSTVIATVASSPAGYKTASPPGPPPYGKRAPSPGAYKTATPPGYKPG" "SPPSFRTGTPPGYRGTSPPAGPGTFKPGSPTVGPGPLPPAGPSGLPSLPPPPAAPASGPP" "LSATQIKQEPAEEYETPESPVPPARSPSPPPKVVDVPSHASQSARFNKHLDRGFNSCARS" "DLYFVPLEGSKLAKKRADLVEKVRREAEQRAREEKEREREREREKEREREKERELERSVK" "LAQEGRAPVECPSLGPVPHRPPFEPGSAVATVPPYLGPDTPALRTLSEYARPHVMSPGNR" "NHPFYVPLGAVDPGLLGYNVPALYSSDPAAREREREARERDLRDRLKPGFEVKPSELEPL" "HGVPGPGLDPFPRHGGLALQPGPPGLHPFPFHPSLGPLERERLALAAGPALRPDMSYAER" "LAAERQHAERVAALGNDPLARLQMLNVTPHHHQHSHIHSHLHLHQQDAIHAASASVHPLI" "DPLASGSHLTRIPYPAGTLPNPLLPHPLHENEVLRHQLFAAPYRDLPASLSAPMSAAHQL" "QAMHAQSAELQRLALEQQQWLHAHHPLHSVPLPAQEDYYSHLKKESDKPL" ), }, { "id": 'fbll1', "name": 'FBLL1', "seq": ( "MKSAASSRGGGGGGRGGGGWGSWGGGRGGGGGAGKGGGGDGGGQGGKGGFGARARGFGGG" "GRGRGRGGGDGKDRGGGGQRRGGVAKSKSRRRKGAMVVSVEPHRHEGVFIYRGAEDALVT" "LNMVPGQSVYGERRVTVTEGGVKQEYRTWNPFRSKLAAAILGGVDQIHIKPKSKVLYLGA" "ASGTTVSHVSDIIGPDGLVYAVEFSHRAGRDLVNVAKKRTNIIPVLEDARHPLKYRMLIG" "MVDVIFADVAQPDQSRIVALNAHTFLRNGGHFLISIKANCIDSTASAEAVFASEVRKLQQ" "ENLKPQEQLTLEPYERDHAVVVGVYRPLPKSSSK" ), }, { "id": 'foxp2', "name": 'FOXP2', "seq": ( "MMQESATETISNSSMNQNGMSTLSSQLDAGSRDGRSSGDTSSEVSTVELLHLQQQQALQA" "ARQLLLQQQTSGLKSPKSSDKQRPLQVPVSVAMMTPQVITPQQMQQILQQQVLSPQQLQA" "LLQQQQAVMLQQQQLQEFYKKQQEQLHLQLLQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" "QQQQQQQQQQQHPGKQAKEQQQQQQQQQQLAAQQLVFQQQLLQMQQLQQQQHLLSLQRQG" "LISIPPGQAALPVQSLPQAGLSPAEIQQLWKEVTGVHSMEDNGIKHGGLDLTTNNSSSTT" "SSNTSKASPPITHHSIVNGQSSVLSARRDSSSHEETGASHTLYGHGVCKWPGCESICEDF" "GQFLKHLNNEHALDDRSTAQCRVQMQVVQQLEIQLSKERERLQAMMTHLHMRPSEPKPSP" "KPLNLVSSVTMSKNMLETSPQSLPQTPTTPTAPVTPITQGPSVITPASVPNVGAIRRRHS" "DKYNIPMSSEIAPNYEFYKNADVRPPFTYATLIRQAIMESSDRQLTLNEIYSWFTRTFAY" "FRRNAATWKNAVRHNLSLHKCFVRVENVKGAVWTVDEVEYQKRRSQKITGSPTLVKNIPT" "SLGYGAALNASLQAALAESSLPLLSNPGLINNASSGLLQAVHEDLNGSLDHIDSNGNSSP" "GCSPQPHIHSIHVKEEPVIAEDEDCPMSLVTTANHSPELEDDREIEEEPLSEDLE" ), }, { "id": 'semg2', "name": 'SEMG2', "seq": ( "MKSIILFVLSLLLILEKQAAVMGQKGGSKGQLPSGSSQFPHGQKGQHYFGQKDQQHTKSK" "GSFSIQHTYHVDINDHDWTRKSQQYDLNALHKATKSKQHLGGSQQLLNYKQEGRDHDKSK" "GHFHMIVIHHKGGQAHHGTQNPSQDQGNSPSGKGLSSQCSNTEKRLWVHGLSKEQASASG" "AQKGRTQGGSQSSYVLQTEELVVNKQQRETKNSHQNKGHYQNVVDVREEHSSKLQTSLHP" "AHQDRLQHGPKDIFTTQDELLVYNKNQHQTKNLSQDQEHGRKAHKISYPSSRTEERQLHH" "GEKSVQKDVSKGSISIQTEEKIHGKSQNQVTIHSQDQEHGHKENKISYQSSSTEERHLNC" "GEKGIQKGVSKGSISIQTEEQIHGKSQNQVRIPSQAQEYGHKENKISYQSSSTEERRLNS" "GEKDVQKGVSKGSISIQTEEKIHGKSQNQVTIPSQDQEHGHKENKMSYQSSSTEERRLNY" "GGKSTQKDVSQSSISFQIEKLVEGKSQIQTPNPNQDQWSGQNAKGKSGQSADSKQDLLSH" "EQKGRYKQESSESHNIVITEHEVAQDDHLTQQYNEDRNPIST" ), }, { "id": 'sgta', "name": 'SGTA', "seq": ( "MDNKKRLAYAIIQFLHDQLRHGGLSSDAQESLEVAIQCLETAFGVTVEDSDLALPQTLPE" "IFEAAATGKEMPQDLRSPARTPPSEEDSAEAERLKTEGNEQMKVENFEAAVHFYGKAIEL" "NPANAVYFCNRAAAYSKLGNYAGAVQDCERAICIDPAYSKAYGRMGLALSSLNKHVEAVA" "YYKKALELDPDNETYKSNLKIAELKLREAPSPTGGVGSFDIAGLLNNPGFMSMASNLMNN" "PQIQQLMSGMISGGNNPLGTPGTSPSQNDLASLIQAGQQFAQQMQQQNPELIEQLRSQIR" "SRTPSASNDDQQE" ), }, { "id": 'ss18', "name": 'SS18', "seq": ( "MSVAFAAPRQRGKGEITPAAIQKMLDDNNHLIQCIMDSQNKGKTSECSQYQQMLHTNLVY" "LATIADSNQNMQSLLPAPPTQNMPMGPGGMNQSGPPPPPRSHNMPSDGMVGGGPPAPHMQ" "NQMNGQMPGPNHMPMQGPGPNQLNMTNSSMNMPSSSHGSMGGYNHSVPSSQSMPVQNQMT" "MSQGQPMGNYGPRPNMSMQPNQGPMMHQQPPSQQYNMPQGGGQHYQGQQPPMGMMGQVNQ" "GNHMMGQRQIPPYRPPQQGPPQQYSGQEDYYGDQYSHGGQGPPEGMNQQYYPDGHNDYGY" "QQPSYPEQGYDRPYEDSSQHYYEGGNSQYGQQQDAYQGPPPQQGYPPQQQQYPGQQGYPG" "QQQGYGPSQGGPGPQYPNYPQGQGQQYGGYRPTQPGPPQPPQQRPYGYDQGQYGNYQQ" ), }, { "id": 'ubqln4_mut10', "name": 'UBQLN4-mut10', "seq": ( "MAEPSGAETRPPIRVTVKTPKDKEEIVICDRASVKEFKEEISRRFKAQQDQLVLIFAGKI" "LKDGDTLNQHGIKDGLTVHLVIKTPQKAQDPAAATASSPSTPDPASAPSTTPASPATPAQ" "PSTSGSASSDAGSGSRRSSGGGPSPGAGEGSPSATASILSGFGGILGLGSLGLGSANFME" "LQQQMQRQLMSNPEMLSQICENPLVQDMMSNPDLMRHCCMANPQYQQLCERNPEISHMLN" "NPELMRQTMELARNPAMMQEMMRNQDRALSNCESIPGGYNALRRMYTDIQEPMFSAAREQ" "FGNNPFSSLAGNSDSSSSQPLRTENREPLPNPWSPSPPTSQAPGSGGEGTGGSGTSQVHP" "TVSNPFGINAASLGSGMCNSPEMQALLQQISENCQLMQNVISAPYMRSMMQTLAQNPDFA" "AQMMVNVPLFAGNPQLQEQLRLQLPVFLQQCQNPESLSILTNPRAMQALLQIQQGLQTLQ" "TEAPGLVPSLGSFGISRTPAPSAGSNAGSTPEAPTSSPATPATSSPTGASSAQQQLMQQM" "IQLLAGSGNSQVQTPEVRFQQQLEQLNSCGFINREANLQALIATGGDINAAIERLLGSQL" "S" ), }, { "id": 'ubqln4_mut20', "name": 'UBQLN4-mut20', "seq": ( "MAEPSGAETNPNIRVTVKTPKDKEEIVICDIASVKEFKEEISRRFKAQQDQLVLIFAGKD" "LKDGDTLNQHGIKDGETYHLVIKTPQKAQDPAAATASSPSTPDPASAPSTTPASPATPAQ" "PSTSGSASSDAGSGSRRSSGGGPSPGAGEGSPSATASILSGFGGILGLGSLGLGSANFME" "LQQQMQRQLMSNPEMLSQICENPLVQDMMSNPDLMRHCCMANPQYQQLCERNPEISHMLN" "NPELMRQTMELARNPAMMQEMMRNQDRALSNCESIPGGYNALRRMYTDIQEPMFSAAREQ" "FGNNPDSSLAGNSDSSSSQPLRTENREPLPNPWSPSPPTSQAPGSGGEGTGGSGTSQVHP" "TVSNPFGINAASLGSGMCNSPEMQALLQQISENCQLMQNVISAPKMRSMMQTLAQNPDFA" "AQMMVNVPLFAGNPQLQEQLRLQLPVFLQQCQNPESLSIDTNPRAMQALLQIQQGLQTLQ" "TEAPGLVPSLGSFGISRTPAPSAGSNAGSTPEAPTSSPATPATSSPTGASSAQQQLKQQM" "IQLLAGSGNSQVQTPEVRFQQQLEQLNSCGFINREANLQALIATGGDINAAIERLLGSQL" "S" ), }, { "id": 'ubqln4_mut30', "name": 'UBQLN4-mut30', "seq": ( "MAEPSGAETNPNIRVTVKTPKDKEEIVICDIASVKEFKEEISRRFKAQQDQLVLIFAGKD" "DKDGDTDNQHGIKDGETYHLVIKTPQKAQDPAAATASSPSTPDPASAPSTTPASPATPAQ" "PSTSGSASSDAGSGSRRSSGGGPSPGAGEGSPSATASILSGFGGILGLGSLGLGSANFME" "LQQQMQRQLMSNPEMLSQPCENLLVQDMMSNPDLMRHCCMANPQYQQLCERNPEISHMLN" "NPELMRQPMELARNPAMMQEMMRNQDRALSNCESIPGGYNADRRDYTDIQEPMFSAAREQ" "FGNNPDSSLAGNSDSSSSQPLRTENREPLPNPWSPSPPTSQAPGSGGEGTGGSGTSQVHP" "TVSNPFGINAASLGSGMCNSPEMQALLQQISENCQLMQNVISAPKMRSMMQTLAQNPDFA" "AQMMVNVPLFAGNPQLQEQLRLQLPVFLQQCQNPESLSIDTNPRAMQALLQIQQGLQTLQ" "TEAPGLVPSLGSFGISRTPAPSAGSNAGSTPEAPTSSPATPATSSPTGASSAQQQLKQQM" "IQLLAGSGNSQVQTPEVRFQQQLEQLNSCGPINREANLQALPATGGDINADIERLLGSQL" "S" ), }, ] def feature_path(example_id: str) -> Path: return ASSETS_DIR / f"{example_id}.h5" def find_example_by_seq(seq: str): """Return the EXAMPLES entry whose sequence matches `seq`, or None.""" norm = seq.strip().upper() for example in EXAMPLES: if example["seq"].strip().upper() == norm: return example return None