Frequently-asked questions to NeedleHaystack

by Dr. Andreas Hoppe

1. Wie kann man einstellen welche Atomarten zu welchen zugeordnet werden, z. B. carbons sollen nur zu carbons zugeordnet werden oder Protonen sollen ausgelassen werden, geht das? Momentan habe ich den Eindruck, das Programm ordnet die Atome im Target und Model ungeachtet der Atomart einander zu.

Letzteres ist richtig. Es gibt aber eine Möglichkeit, die Zuordnung von ungleichen Atomtypen zu bestrafen.

Die dich interessierende Option ist -A >filename<, die eine Straftermmatrix einliest. Der Hilfetext dazu ist am Ende von `haystack -hh` zu finden.

Hier sind einige Beispielmatrizen:

Protonen werden voll berücksichtigt, wenn sie in den Eingabefiles vorhanden sind. In NeedleHaystack werden die Eingabedaten kaum vorgefiltert (Ausnahme MODEL, ALTLOC), die Verarbeitung soll schon vorher passieren. Ich benutze dazu Skripts, die ich auf Anfrage versenden kann.

2. Koenntest Du vielleicht die Beispieldateien fuer den in Deinem paper beschriebenen Testfall zur Verfuegung stellen, damit man sieht wie so etwas aufgesetzt wird?

Die Berechnungen im Paper wurden mithilfe geschachtelter Makefiles gemacht, das ist relativ unübersichtlich. Ich kann aber das Wesentliche zusammenfassen:

  1. Packe alle Models (kleine Atommenge) in ein Verzeichnis models/ alle Targets in ein Verzeichnis targets/.
  2. Probiere Optionen aus, die bei einer Stichprobe zu ausreichend Matches führen.
  3. Speichere die Parameter mit: haystack ... ... -hm > Params.ini

mkdir -p log
for m in models/*; do
  mkdir -p $m;
  for t in targets/*; do
    haystack -I Params.ini $m $t -su $m/$t > log/$m-$t.out 2> log/$m-$t.err
  done
done

3. Bei einem wiederholten Lauf kommen geringfügig andere Überlagerungen zustande. Warum sind die Ergebnisse nicht komplett reduzierbar?

NeedleHaystack benutzt in der Tat an einigen Stellen bewusst Elemente stochastischer Methoden. Diese werden über Compileroptionen gesteuert.

Sie heißen: NOT_TARGET_RANDOMIZE und NOT_MODEL_RANDOMIZE. Dieses "Durcheinanderschütteln" der Atome hat im Durchschnitt einen Vorteil. Für Referenzzwecke hinterlege ich aber Versionen, in denen das abgeschaltet wird:
haystack_nocona_norandom
haystack_pentiumpro_norandom
haystack_athlonxp_norandom
haystack_pentium4_norandom

Standardmäßig benutzt NeedleHaystack Zufallszahlen, deren Startwerte sich aus den Millisekunden der aktuellen Zeit errechnen, es sind also echte Zufallszahlen. Eine andere Compileroption ändert das zu Pseudo-Zufallszahlen. Damit sind die Ergebnisse von NeedleHaystack normalerweise auf dem selben Rechner reproduzierbar. Sie heißt: REALRANDOM
haystack_nocona_norealrandom
haystack_pentiumpro_norealrandom
haystack_athlonxp_norealrandom
haystack_pentium4_norealrandom
Daneben ergibt sich auch durch die Zeitsteuerung nichtdeterministisches Verhalten. Für komplett reproduzierbare Ergebnisse muss also Timeout bzw. -to ausgeschaltet werden.

4. Wie kann man prüfen, welche Compileroptionen eine Programmversion hat?

haystack -v
Dann erscheint so etwas:
haystack version 3.3.21
  (unrestricted length/4 word floats/4 word precision floats)
  no checks done, no warnings done
  Compiler: Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/specs Configured with: /var/tmp/portage/gcc-3.3.6/work/gcc-3.3.6/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.3.6 --includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.3.6/info --with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/include/g++-v3 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --enable-java-awt=gtk --enable-languages=c,c++,java,objc,f77 --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 3.3.6 (Gentoo 3.3.6, ssp-3.3.6-1.0, pie-8.7.8)
  Compiler flags:   -DDOUBLEFLOAT -DLARGEINDECES -DNOMALLINFO   -DMAININFO -DLINUX -DREALRANDOM -DPSF_IMPORTANCE -DPSF_ORIENT -DPSF_ATOMMATCH -DPSF_MEANS -Wall -Wno-uninitialized -D_GNU_SOURCE -pipe  -mcpu=athlon-xp -march=athlon-xp    -static  -O3 -ffast-math 
  Inlining: yes
  Compiled: Thu Oct 26 17:06:41 CEST 2006
Unter "Compiler flags:" finden sich unter "-D" die Compileroptionen.

last update: 26.2.2008