Bitte um Hilfe von den Profis
-
Hallo,
ich habe hier ein Programm, genannt Pratt2.1, geschreiben in Ansi C, dass an einer Stelle etwas verändert werden muss.
Das Programm wurde von Inge Jonassen von der Uni Norwegen geschrieben, die Homepage ist http://www.ii.uib.no/~inge/Pratt.html Das Programm läuft unter Linux und ist ein wissenschaftliches Programm. Auf der Seite gibt es u.a. den Source-Code. Das Programm ist frei, man kann es verändern, wenn man kann.
Mein Problem ist nun wie folgt: Es gibt eine PL-Option (Pattern-Length, Muster-Länge), die auf 100 Stellen begrenzt ist. Ich bräuchte aber aber eine Limitierung bei 10000. Da ich nun nicht ANSI C kann, der Autor sich auf Anfrage nicht meldet, das Programm frei ist, Online-Pratt bei PL-Option auf 10000 limitiert ist und ich das Programm wirklich brauche, seit ihr meine letzte Chance.
Ich weiß nicht, wie kompliziert es ist, die Limitierung hochzusetzen, aber wenn es jemand kann, dann befindet er sich hier auf dem Board. Und diesem Menschen wäre ich sehr dankbar, wenn er/sie sich mal die Sache anschauen könnte.
-
Hi, der Link geht leider nicht.
-
Einfach den Punkt nach html entfernen ... Darauf hätte man aber auch selbst kommen können
-
Hi
Erstaunlicherweise hab ich das Programm sogar unter WinXP zum laufen gebracht.
Prinzipiell muss ich nur eine Zeile verändern.
Allerdings müsste ich noch schauen ob das nicht irgendwelche Nachfolgen hat, die mir jetzt nicht aufgefallen sind.
Könntest du mir mal eine entsprechend lange Testsequenz mit Anweisungsprotokoll schicken? [jettz4d@web.de]Viele Grüße
Fischi
-
So, der Punkt ist nun weg und der Link funktioniert auch so.
@ Fischi
Ich habe dir die Datei mal geschickt. Sie ist im Fast-Format. Ein spezielle Anweisung gibt es nicht. Du gibts in der Befehlszeile ./pratt fasta Datei.txt ein. Danach kannst du die Optionen hoch- oder runtersetzen und das Programm starten.
Für alle die sich mal so ein Fasta-File anschauen wollen: hier gibt es 10 Sequenzen. Für die Mustererkennung, die Pratt ja machen soll, ist die Zeile ">....." bedeutungslos. Das ist nur eine beliebige Beschreibung. (Die Sequenz steht in einer Zeile. Unten wurden Zeilenumrüche eingeführt, um die Sache nicht zu unübersichtlich zu machen.)
1:length:317 ac_num:Q9EZB5
TKEQELLAYREMLLIRRFEEKAGQMYGMGLIGGFCHLYIGQEAVVVGMQMAMKQGDQVITGYRDHGHMLATGMESRGV
MAELTGRKGGYSKGKGGSMHMFSIEKQFFGGHGIVGCAGVAGHRPRLREPLSAENGSVSVTYFGDGAANQGQVYESFN
MAELWKLPVVYVIENNKYAMGSAVSRASAQTDFSKRGQSFNIPGEQVDGMDSAQPVKAAGERALEFARSGKGPYILEM
QTYRYRGHSMSDPAKYRSKEEVQKMRTEHDPIEQVRNRLLEAGLVTEDELKKVDAEIRDIVNDAADFATHDPEPDPSE
LYTDI
2:length:320 ac_num:Q818T3
LSDEQVLEMFRTMLLARKIDERMWLLNRAGKIPFVISCQGQEAAQVGAAFALDREKDYALPYYRDMGVALTFGMTAKE
LMLSAFAKAGDPNSGGRQMPGHFGQKKNRIVTGSSPVTTQVPHAVGIALAGKMEKKDLVTFVTFGEGSSNQGDFHEGA
NFAGVHKLPVIFMCENNKYAISIPVEKQLACKNVSDRAIGYGMPGYTIDGNDPLAVYKAVKEAADRGRRGEGPTLIET
VSYRLTAHSSDDDDRVYRDKEEVEEAKKKDSIITFAAYLKEAGVLTEESEKQMLDEIMHIVNEATEYAENAPYAAPED
ALKHVYAE
3:length:326 ac_num:Q97Y23
DIPKSKLLDMYKKMLLIRYHELTAKELFASGKIPGFVHLYVGEEAVAVGVMSTLRDDDYITSTHRGHGHCIAKGLDVK
RMLAEIMGKKTGVCKGKGGSMHIFDYSKGMLGANGIVGGGAPHAVGAALAFKLKGLDRVAVAFIGDGAMNQGVVLESL
NLSAIWKLPVIFVVEDNMYAMSTRSLVPGKLQPRHSAAKSYVERALGFGIPAVEVDGMDVLAVYEVAKEAVDRARRGG
GPSLLHCKTYRFFGHFEGDPLVYRDKEEEEMWRKRDPITLFRDKLVSNNIINSEELDKIDREAKAEIEQALKFAEESP
YPEVEEALTDVFTD
4:length:318 ac_num:P37940
LTDQEAVDMYRTMLLARKIDERMWLLNRSGKIPFVISCQGQEAAQVGAAFALDREMDYVLPYYRDMGVVLAFGMTAKD
LMMSGFAKAADPNSGGRQMPGHFGQKKNRIVTGSSPVTTQVPHAVGIALAGRMEKKDIAAFVTFGEGSSNQGDFHEGA
NFAAVHKLPVIFMCENNKYAISVPYDKQVACENISDRAIGYGMPGVTVNGNDPLEVYQAVKEARERARRGEGPTLIET
ISYRLTPHSSDDDDSSYRGREEVEEAKKSDPLLTYQAYLKETGLLSDEIEQTMLDEIMAIVNEATDEAENAPYAAPES
ALDYVY
5:length:320 ac_num:Q8CXE7
ISNDIALGMYEMMLLARKLDERMWLLNRAGKIPFVISCQGQEAAQVGAAFALNRTTDYIAPYYRDLGVVLAFGMSAQD
VMLSAFAKAEDPNSGGRQMPGHFGQKKNRILTGSSPVTTQLPHAVGVALAAKMDKEPLVSFVTLGEGSSNQGDFHEGL
NFAGVHKLPVITMVENNKYAISVPYDRQVASETISERANSYGMPGVTVDGNDPVAVYQAVSEARDRAVRGEGPTLIEA
ITYRLTAHSSDDDDRAYREKNEVEEAKKKDSIITFATTLKEAGVLKDEKEQEIMSRIDELVNEATDYAENASYAEPED
ALRYVYEE
6:length:314 ac_num:Q8F4N0
QDLFELYRQMLLIRRFEEGAAKSYSTGKIGGFCHLYIGQEAVGVGSIAALKEQDYIVSTYRDHGHALARGLDPKALMA
ELFGKRTGISSGYGGSMHFFDKNKRFMGGHGIVGGHISLAAGIAYASKYKNENSVTICFFGEGAANIGSFHEGMNLAA
IWKLPLVMICENNHYAMGTPEYRSLSVKDVSVRATAYDIARDHIEGDEVRKVRDHVSVAVERARRGEGPTLMEISTYR
FRGHSMSDPAKYRTKEELDRYKKSDPLLKAKDDLIHSEWKEEELEKLDIDIQAQVEDAIVFADKSEEPPLGWLYKHVY
AE
7:length:315 ac_num:Q92IS3
TKEEYIKSFKDMLLLRRFEEKCGQLYGMGEIGGFCHLYIGQEAVISAIDMVKQKGDSTITSYRDHAHIILAGTEPKYV
LAELMGRATGCSKGKGGSMHLFNVPNKFYGGHGIVGAQVPIGTGLAFVEKYNDTHNICFTFLGDGAVNQGQVYEAFNM
AALWGLPVVYIIENNEYSMGTSVARSTFMRDLYKKGASFGIKGFQLDGMDFEEMYDGSKQAAEYVRENSFPLILEVKT
YRYRGHSMSDPAKYRSKEEVEQYKERDPLVIIRKTILDNKYVTEADLKAIEQSVKEIVKEAVEFSENSPLPDEGELYT
QVY
8:length:314 ac_num:Q9ZDR4
KEEYIKSFKDMLLLRRFEEKCGQLYGMGKIGGFCHLYIGQEAVISAVAMIKKKGDSTITSYRDHAHIILAGTEPKYVL
AELMGRATGCSKGKGGSMHLFDIPNKFYGGHGIVGAQVPIGTGLAFAEKYNGTNNICFTFLGDGAVNQGQVYEAFNMA
SLWGLPIVYIIENNEYSMGTSVARSTFMCDLYKKGESFGIRGFQLDGMDFEEMYNGTKQVAEYVRENSFPVILEVKTY
RYRGHSMSDPAKYRSKEEVEKYKERDTLVRIREIILDNKYATEADLKAIEQSVREIIKVAVEFSENSPLPAEDELYTE
IY
9:length:319 ac_num:Q8DPQ7
LDKNLLLEMFRKMEEIRRMDLKIAQLVKKGKVPGMTHFSVGEEAANVGAMLALNPDDLITSNHRGHGQAIAKGIDLNG
MMAEILGKYTGTCKGKGGSMHIADLDAGNLGANGIVGGGMGIAVGAALSQQMQNTGKIVVCFFGDGATNEGVFHEAVN
MASIWNLPVIFYCINNGYGISADIKKMTNIEHIHQRSAAYGIPGMFIEDGNNVIDVYEGFQKAVDHVRSGNGPVLIES
VTYRWLGHSSSDPGKYRTREEVELWKQKDPIENLRNYLIENNIASAEELEKIQAQVKEAVEASVKFAEESPFPPLESA
FEDIYTD
10:length:340 ac_num:Q8L1Z6
MAERLKKNSASVVHNALSNTTKKAKIANFTKEEEIDAYREMLLIRRFEEKAGQLYGMGLIGGFCHLYIGQEAVVIGTL
KAAKEGDQVITSYRDHGHMLAVGMSPRGVMAELTGRQGGFSKGKGGSMHMFSKEKNFYGGHGIVGAQVPIGSGLAFSN
QYLGKDNVTLVYFGDGAANQGQVYESFNMASLWKLPVVYIIENNQYAMGTSVARASAETDFSRRGLSFEIPGIVVDGM
DVRAVKGAADEAITWTRSGKGPIILDMQTYRYRGHSMSDPAKYRSKEEVQKIKEEQDPIDQVRNRILQQGFASEDDLK
SIDKEVRAIVADAVDFAQSDQEPDASEL
-
dEUs schrieb:
Einfach den Punkt nach html entfernen ... Darauf hätte man aber auch selbst kommen können
Hmmm, hab ich gar nicht gesehen, sorry.
-
Hallo,
ich hab jetzt bloß mal kurz drüber geguckt. Kann es sein dass die Begrenzung durch die statische implementierung des Baumes zustande kommt ?
Das ist aber eigentlich auch Nebensache, was ich mich frage ist: Welchen Sinn hat die Begrenzung ? Wenn die Ergebnisse nicht verfälscht werden oder es sonst irgendwelche Auswirkungen hat, hätte der Programmierer meiner Meinung nach eine solche Begrenzung nicht eingebaut. Oder liege ich da falsch ?
-
prolog schrieb:
Hallo,
ich hab jetzt bloß mal kurz drüber geguckt. Kann es sein dass die Begrenzung durch die statische implementierung des Baumes zustande kommt ?
Hmmm, weiß ich nicht. Vielleicht kann sich mal jemand dazu äußern.
Der einzige für mich in Frage kommende Sinn der Begrenzung ist der Rechenaufwand, der mit der Aufhebung der Limitierung einhergeht. Das Programm stammt von 1997, da gab es noch nicht so leistungsstarke Rechner wie heute. Und der Rechenaufwand ist sehr groß, wenn man bedenkt, dass man vielleicht nicht 15 sondern 5000 Sequenzen untersuchen will. Man kann Sequenzen auch interaktiv auf deren Server hochladen, sie rechnen lassen und das Ergebnis bekommen. Dort liegt die Begrenzung bei 10000, nicht bei 100.
Das Ergebnis sollte nicht verfälscht, aber dennoch anders sein. Das Progamm arbeitet in Prinzip so, dass alle Sequenzen übereinander gelegt und gegeneinander verschoben werden, bis die größte Ähnlichkeit vorhanden ist (wenn man z.B. von Stelle 1 durch alle Sequenzen geht). Ist dort immer der gleiche Buchstabe, haben wir den ersten Buchstaben fürs Muster. Kommen an Stelle 2 insgesamt 3 Buchstaben vor, kommen diese drei Buchstaben an Stelle drei ins Muster. Kommen an Stelle 4 10 Buchstaben vor, kommt diese Stelle nicht ins Muster, bzw. als X. Es werden auch Lücken in die Sequenzen eingefügt, um das Ergebenis zu verbessern.(Wenn z.B. ein Buchstabe in einer Sequenz fehlt, die Sequenz absolut identisch, aber verschoben ist, wird eine Lücke ("-") eingefüllt.
Das Muster ist nun mittels PL-Option auf 50 Stellen begrenzt. Habe ich eine Sequenz mit 600 Buchstaben, findet das Programm mehrere Muster an verschiedenen Stellen mit unterschiedlicher Qualität. Setzte ich nun PL hoch, werde ich ein Gesamt-Muster über alle 600 Buchstaben haben, das sich von dem Muster bei PL 100 unterscheidet.
Die Qualität des erzeugten Musters erkennt man anhand der Ausgangssequenzen, ob an bestimmten Stellen tatsächlich die Buchstaben vorkommen, die das Muster vorgiebt.Der Autor meldet sich wie gesagt nicht.
Ich würde mich über jede Hilfe freuen.
-
Hmmm, ich dachte, hier werden sie geholfen.
Kommt schon Leute, ich weiß, dass ihr es könnt, also gebt euch einen Ruck!
Es ist doch nur ein Wert?!
-
Danke Leute:-((((
-
kennst du 'grep' ?
man@work:~/pratt$ grep MAX *.h block.h:#define MAX_NR_SETS 1000 block.h:#define MAX_NR_GEN 10 block.h: int symbols[MAX_NR_GEN]; mst.h:#define MAX_NUM_DIST 500 mst.h:int read_mat(float[MAX_NUM_DIST][MAX_NUM_DIST],char*); mst.h:float mst_weight(float[MAX_NUM_DIST][MAX_NUM_DIST],int,int[MAX_NUM_DIST],char[]); pattern.h:#define NFA_MAX_FLEX 20 pattern.h:#define MAX_WORD_NFA 20 pattern.h: unsigned int shift_vector[NFA_MAX_FLEX]; pattern.h: unsigned int char_vector[26][MAX_WORD_NFA]; pattern.h: unsigned int shift_vector[NFA_MAX_FLEX][MAX_WORD_NFA]; pattern.h:#define MAX_MATCHING_STRINGS 100 pattern.h:#define G_MAX_COMP 101 pattern.h:#define G_MAX_FLEX 10 pattern.h: float Max_Score[G_MAX_COMP][G_MAX_FLEX]; scan.h:#define MAX_WORD 8 scan.h:#define MAX_FLEX 10 scan.h:#define MAX_LEN_PAT 256 scan.h:#define MAX_SYMBOL 20 sequence.h:#define MAX_RESTRICT 10 sequence.h: int first[MAX_RESTRICT]; sequence.h: int last[MAX_RESTRICT];
das könnte dein kandidat sein:
pattern.h:#define MAX_MATCHING_STRINGS 100
no guarantee !