
 $Name: fa_34_26_5 $ - $Id: readme.v34t0,v 1.167 2007/04/26 18:42:43 wrp Exp $

>>April 26, 2007

Modify scaleswn.c to prevent mle_cen() from hanging when it fails to
converge.  Also, free() more arrays in work_thr.c; initialize
m_msg.hist.entries=0 in comp_lib.c, and various clean-ups for a_res
encoded alignments.

>>March 22, 2007

Update faatran.c genetic codes (and documentation on -t option).  Update
ncbl2_mlib.c to parse non-NCBI format 12 databases better.

>>March 21, 2007	fasta-34_26_2

Fix conflict between "-S" "-s matrix.file".

>>February 26, 2007	fasta-34_26_2

Fix problem with dropfs2.c (curv.start = lpos before initialized).

>>January 12, 2007

Fix a problem with pssm_asn_subs.c reading strings (sequences) longer
than 1024 bytes.

Remove searchfa.cgi, searchnn.cgi, cgi-lib.pl, my-cgi.pl - this code
was used for an ancient FASTA WWW implementation and has been replaced
by the FASTA_WWW package.

FASTA Version numbers are being modified to make releases easier to
track, thus fa34t26b5 has become fasta-34_26_1.  I would prefer to use
decimal versions, but CVS does not allow '.' in tags.

>>January 4, 2007	fasta-34_26_1

Include scripts for building Mac OS X Universal binaries on a PPC
machine.  Programs are compiled first with Makefile.os_x (gcc-3.3 for
PPC) and then installed into ./ppc/.  Programs are next compiled with
Makefile.os_x86 for i386, and the resulting executables installed into
./i386/.  Finally, the "make_osx_univ.sh" script is run to build the
universal binaries from the two executables using "lipo".

>>December 12, 2006

Fix some problems with p2_workcomp.c: (1) no longer initialize pad
characters for non-existant sequences. (2) deal with small libraries
consistently with the serial versions.

>>November 17, 2006	fa34t26b5

Fixed a problem reading ASN.1 format 2 PSSM's.  It is now possible to
download a PSI-BLAST PSSM RID and search properly.  Next, the query
sequence from the PSSM should be used instead of the provided query
sequence, so that the query sequence is ignored.

>>October 19, 2006	fa34t26b4

Fixed problem with SSE2 code when PSSM's are used.

>>October 6, 2006	fa34t26b3

A new set of WIN32 programs is now available that use the Intel C++
9.1 compiler, rather than the much older Borland Turbo-C compiler. All
of the unthreaded programs that are part of the Unix and MacOSX FASTA
distributions are now available.  Threaded (multiprocessor) versions
of the program as available as well, as are sse2 accelerated versions
of ssearch34 (ssearch34sse2.exe, ssearch34sse2_t.exe).

Th new WIN32 code also uses Microsoft's "nmake" program to build the
programs, which allows much greater consistency between the Unix and
Windows versions.


>>September 18, 2006

Static global alignment variables removed from dropnfa.c, dropfx.c,
dropfz2.c.  dropnfa.c, dropfx.c and dropfz2.c should be thread safe.
Together with the earlier changes, all the FASTA functions should now
be thread safe during the alignment process.

>>August 17, 2006

Begin removal of static variables from Smith-Waterman alignment
functions.  These variables kept the functions from being thread-safe.
Now dropgsw.c and dropnsw.c are thread-safe.

>>August 15, 2006	fa34t26b2

Fixed a problem with pv34compfx/mp34compfx (and fy) producing
improperly labeled alignments and de-allocating memory for the reverse
complement.

>>July 18, 2006

The library file name parsing programs now provide the option for
environment variable substitions.  For example, SLIB2=/slib2 as an
environment variable (e.g. export SLIB2=/slib2 for ksh and bash), then

	fasta34 -q query.aa '${SLIB2}/swissprot.fa'  expands as expected.

While this is not important for command lines, where the Unix shell
would expand things anyway, it is very helpful for various
configuration files, such as files of file names, where:

	<${SLIB2}/blast
	swissprot.fa

now expands properly, and in FASTLIBS files the line:

	NCBI/Blast Swissprot$0S${SLIB2}/blast/swissprot.fa

expands properly.  Currently, Environment variable expansion only
takes place for library file names, and the <directory in a file of
file names.

>>July 14, 2006	  fa34t26b1

Updated Farrar smith_waterman_sse2.c code to address possible bug
(code from Michael Farrar).  Include <sunmedia_intrin.h> for
compilation with Sun compiler with Makefile.sun_x86.

>>July 2, 2006	  fa34t26b0

This release provides an extremely efficient SSE2 implementation of
the Smith-Waterman algorithm for the SSE2 vector instructions written
by Michael Farrar (farrar.michael@gmail.com).  The SSE code speeds up
Smith-Waterman 8 - 10-fold in my tests, making it comparable to Eric
Lindahl's Altivec code for the Apple/IBM G4/G5 architecture.

The Farrar code is largely confined to smith_waterman_sse2.c and
smith_waterman_sse2.h, which are copyright (2006) by Michael Farrar,
and cannot be redistributed without his permission.  Mr. Farrar has
agreed to provide his code under the same policy used by FASTA -
e.g. the code can be used without permission, but not redistributed.

The Farrar code uses GCC version 4.0 SSE2 intrinsic functions to avoid
assembly language code.  Unfortunately, in my hands, "gcc -O3" causes
"out of memory" errors, and other problems, so "gcc -O" is used instead.

>>June 23, 2006   fa34t25d10

Modifications to comp_lib.c, compacc.c, and other files to ensure that
function-specific MAXTOT values are used properly.  MAXTOT is now
available as m_msg.max_tot, which is set in initfa.c (m_msg.max_tot =
MAXTOT) to ensure that functions that need very large MAXTOT values
(e.g. TFASTX) can get them.  tfastx can now search successfully with
titin, a 27,000 residue protein.

Other changes have been made to accomodate long query sequences.

A serious bug was found in fastx34(_t) that caused alignment
coordinates to be calculated improperly when the DNA sequence was much
longer than the protein sequence.

>>May 31, 2006	fa34t25d9

Fixed some problems with fasts/fastf alignments when -m 9 options were
used.  Unlike the other algorithms, the a_res structure does not
capture all the information to re-produce an alignment, so do_walign
now sets bptr->have_ares to indicate whether the a_res structure is
valid.

Various problems with bad library names, and short query titles were
also fixed.

Updated version number/date on all drop*.c functions.

>>May 24, 2006	fa34t25d8

Revised code for NCBI *.pal/*.nal databases has been tested on all
architectures, including Windows.

In addition, support for ASN.1 PSSM:2 files provided by the NCBI
PSI-BLAST WWW site is included.  This code will not work with
iteration 0 PSSM's (which have no PSSM information).  For ASN.1
PSSM's, which provide the matrix name (and in some cases the gap
penalties), the scoring matrix and gap penalties are set appropriately
if they were not specified on the command line. ASN.1 PSSM's are type 2:
	ssearch34 -P "pssm.asn1 2" .....

>>May 18, 2006

Support for NCBI Blast formatdb databases has been expanded.  The
FASTA programs can now read some NCBI *.pal and *.nal files, which are
used to specify subsets of databases.  Specifically, the
swissprot.00.pal and pdbaa.00.pal files are supported.  FASTA supports
files that refer to *.msk files (i.e. swissprot.00.pal refers to
swissprot.00.msk); it does not currently support .pal files that
simply list other .pal or database files (e.g. FASTA does not support
nr.pal or swissprot.pal).

In the process of providing this support, the routines used to read
ASN.1 binary formatdb files were substantially improved.  It is now
possible to see multiple description lines for a single sequence.

IS_BIG_ENDIAN has been removed from all of the Makefiles.  The code
now looks for the definition of __BIG_ENDIAN__ or _BIG_ENDIAN to
decide whether the architecture IS_BIG_ENDIAN.  If, for some reason,
one of these macros is not defined on a BIG_ENDIAN architecture, then
-DIS_BIG_ENDIAN is required.

>>May 12, 2006	CVS fa34t25d7

Corrected serious problem with coordinate display calculation for
fasta34 and ssearch34 - in some cases the coordinates and alignment
symbols were off by the length of the context (typically 30 residues).

Added capability to read ASN.1 binary PSSM information.  This
information is provided (in an encoded form) from the NCBI PSI-BLAST
WWW site.  (What is actually provided from the WWW site is a bzip2-ed
binary file that is converted to ASCII HEX.  The ASCII HEX file must
be converted to binary, and then bunzip'ed. This bunzip-ed file is
binary ASN.1.)  These files can also be generated by 

 blastpgp -J T -C pssm.asn1_bin -u 2

I am parsing the ASN.1 binary manually, not using the NCBI toolkit, so
there may be some files that are not parsed properly - if so, let me
know.

(May 12, 2006 - The NCBI changed the format of the psi-blast ASN.1
PSSM - and has not yet provided documentation of the new structure, so
this code does not work. It does work with blastpgp v 2.2.13, but not
with the web site version 2.2.14.  A fix was provided 24-May-2006)

>>April 18, 2006

Small modification in mshowbest.c to provide more consistent display
widths with -m 9i in list of best hits.

>>April 11, 2006 CVS fa34t25d6

Corrected a problem introduced with the new, more efficient method for
displaying alignments.  For the tfast* programs, which must translate
the library sequence, translations were not done when alignments were
re-displayed.

Corrected an older problem with tfastx34 against very long sequence
databases - the code to more efficiently do the display alignment did
not use the correct sequence coordinates.

Modifications to dropfs2.c to ensure that exact peptide matches are
captured more frequently.

>>March 16, 2006 CVS fa34t25d5

Change to initfa.c to allow lower case DNA libraries using the
-DDNALIB_LC compile time option.

Modify p2_complib.c, p2_worklib.c (and doinit.c, msg.h) to allow the
-V annotation option for the parallel programs.  Also modify to allow
specification of the query range (but only for the first query, like
fasta34) for the parallel programs.

Modification of p2_workcomp.c to correct some problems presenting
percent similarity.  Also correct unreleased bugs in the alignment
routines that allow more efficient alignment re-calculation.

>>Nov 20, 2005

Changes to support asymmetric matrices - a scoring matrix read in from
a file can be asymmetric.  Default matrices are all symmetric.

>>Oct 24, 2005

Modifications extended to p2_complib.c/p2_workcomp.c.  Incorporation
of drop_func.h into p2_workcomp.c greatly simplifies things.  No
changes in communication - struct a_res_str is internal to
p2_workcomp.c.

Additional changes to do_walign() so that aln_func_vals() must be
called to set llfact, qlfact, etc in a_struct aln before or after
do_walign is called.  do_walign produces a_res_str a_res, which has
all the information necessary to produce a calcons() or calc_code()
alignment.

>>Oct 19, 2005 CVS fa34t26b0

Modifications to drop*.c and c_dispn.c to separate (and simplify) some
of the alignment coordinate calculations.  Before, the "a_struct" had
the coordinates of the alignment used in the display (seqc0, seqc1)
AND in the original sequences (aa0, aa1), as well as other information
used to calculate alignment coordinates.  In the new version, astruct
coordinates always refer to seqc0,1, while a new structure, a_res_str,
has coordinates for aa0, aa1 as well as the alignment encoding in res[nres].
Eventually, this should make it possible to display multiple local
alignments from the same two sequences.

In addition, the file "drop_func.h" has been added to the project, and
is included by many of the files (all the drop*.c functions,
mshowbest.c, mshowalign.c) to ensure that the various functions are
declared and used consistently.

>>Sept 19, 2005	CVS fa34t25d4

Changes to support Mac OS 10.4 - Tiger (include sys/types.h in more
files).  Documentation update for prss34/prfx34. Modifications to
comp_lib.c to support prss34_t/prfx34_t.  Shuffle numbers for
prss/prfx can now be specified by "-k #".

>>Sept 2, 2005

The prss34 program has been modified to use the same display routines
as the other search programs.  To be more consistent with the other
programs, the old "-w shuffle-window-size" is now "-v window-size".

prss34/prfx34 will also show the optimal alignment for which the
significance is calculated by using the "-A" option. 

Since the new program reports results exactly like other
fasta/ssearch/fastxy34 programs, parsing for statistical significance
is considerably different.  The old format program can be make using
"make prss34o".

>>Aug 26, 2005

Modifications to save_best() in comp_lib.c to support prss34_t.  It
did not work before.

>>July 25, 2005

Modify mshowbest.c to suppress gi|12345 in HTML mode.

>>July 18, 2005	CVS fa34t25d3

Modifications to Makefile.tc to support NCBI formatdb formats under
Windows.

>>May 19, 2005  CVS fa34t25d2

Modifications to dropfs2.c to fix an obscure bug that occurred when
correctly ordered peptides aligned one residue apart.

>>May 5, 2005 CVS fa34t25d1

Modification to the -x option, so that both an "X:X" match score and
an "X:not-X" mismatch score can be specified. (This score is also used

give a positive score to a "*:*" match - the end of a reading frame,
while giving a negative score to "*:not-*".

>>March 14, 2005  CVS fa34t25b4

Fixed some problems caused by padding characters required for
Smith-Waterman ALTIVEC in the parallel (p2_complib.c, p2_workcomp.c)
versions.

>>Feb 24, 2005	CVS fa34t25b3

Changes to comp_lib.c (and Makefile.pcom) to support prss34_t.

>>Feb 12, 2005

Modify dropfs.c to dynamically allocate space for alignments, so that
queries with a large number of fragments can still place all the
fragments on the alignment.  Also fix a problem produced by removing
-DBIGMEM from most of the Makefile's, but not fixing defs.h to use
BIGMEM sizes by default.

>>Jan 24, 2005

Include a new program, "print_pssm", which reads a blastpgp binary
checkpoint file and writes out the frequency values as text.  These
values can be used with a new option with ssearch34(_t) and prss34,
which provides the ability to read a text PSSM file.  To specify a
text PSSM, use the option -P "query.ckpt 1" where the "1" indicates a
text, rather than a binary checkpoint file.  "initfa.c" has also been
modified to work with PSSM files with zero's in the in the frequency
table.  Presumably these positions (at the ends) do not provide
information. (Jan 26, 2005) blastpgp actually uses BLOSUM62 values
when zero frequencies are provided, so read_pssm() has been modified
to use scoring matrix values for zero frequencies as well.

>>Jan 13, 2005

Change to initfa.c to have fasts34 do a protein comparison by default,
rather than an unknown sequence type.  Automatic checking for fasts34
does not work reliably, because queries can be very short.  Likewise
for fastm34.  [Jan 26, 2004] Undo this change, which broke DNA
comparison when "-n" was specified.

>>Jan 7, 2005

Changes to tatstats.h, dropfs2.c to allow larger numbers of peptides
to match when fasts is used to show coverage on a proteomics
experiment.  Previously fasts could match no more than 30 peptides,
that has been increased to 50.  In addition, ktup=2 can be used
to increase the likelihood that short exact matchs trump longer
mismatched regions.  

>>Nov 11, 2004	   CVS fa34t25

Finished merge of earlier fa34t24 branch with HEAD.  Correct
labeling of TFASTM.

>>Nov 4-8, 2004	   

Incorporation of Erik Lindahl "anti-diagonal" Altivec code for
Smith-Waterman, only.  Altivec SSEARCH is now faster than FASTA for
query sequences < 250 amino acids.

Small modifications to output score display to ensure that the correct
scores are shown, and that they are correctly labeled.

>>Aug 25,26, 2004  CVS fa34t24b3

Small change in output format for p34comp* programs in
">>>query_file#1 string" line before alignments.  This line is not present
in the non-parallel versions - it would be better for them to be consistent.

Change in last_stats.c to properly label fasts statistics with -z != 1.

Change in dropfs2.c to ensure that tatprobs are not precalculated with -z 4.

Modify -m 9i output option to show in HTML output.

Add "#ifdef NOOVERHANG" to dropfs2.c that causes overlapping
alignments to score a 0, rather than the partial overlap score.
Useful for SAGE alignments, because "fasts" requires global alignments
(except for for overhangs, unless NOOVERHANG is defined).

>>Aug 23, 2004

Fix problem with very long definition lines with formatdb version4
ASN databases.  Fix mshowalign.c to re-enable "-L" option.

>>July 28, 2004 

Fix to re-enable -w window shuffle for PRSS.  Modify comp_lib.c
for PRSS to ensure that the unshuffled score and probability
are shown, even for very high probabililty alignments.

>>July 21, 2004

Modifications to support PostgreSQL databases with the same commands
as MySQL databases.  MySQL database libraries are type 16, PostgreSQL
are type 17.  Makefile.linux_sql and Makefile.pvm4_sql support both
database types simultaneously.

>>June 23, 2004 CVS fa34t24b2

Additional fixes to enable -n or -p with fasts34 and
fastm34. Makefile.pcom was fixed for fastm34_t.  A new file,
mgstm1.nts, of DNA fragments from mgstm1.seq, is included for testing
fasts34 and fastm34.

>>May 4, 2004  

Fixes to initfa.c to allow DNA:DNA for FASTS, FASTM.  This change
introduced a bug that broke FASTS completely, but was fixed June 18,
2004 (and retagged fa34t24b2).

>>April 23, 2004 CVS fa34t24b1

Fix bug in initfa.c that caused tfasts/tfastf not to examine all six
frames.

>>May 4, 2004

Fixes to initfa.c to allow DNA:DNA for FASTS, FASTM.

>>March 19, 2004 CVS fa34t24b0

Modify all the drop*.c files, plus mshowbest.c and mshowalign.c, to
display percent similarity, rather than percent ungapped.  An
alignment is counted as similar if the score is greater than or equal
to zero (the same criterion used for placing ".". To disable this
change, remove -DSHOWSIM from the appropriate Makefile.*.

>>March 18, 2004 CVS fa34t23b8

Fix bug in initfa.c tables that caused prss to generally compare
proteins.

>>March 15, 2004 

Fix bug in calls to revcomp(); make revcomp() guarantee NULL termination.

>>March 2, 2004	CVS fa34t23b7

Fix a very embarrassing and surprising bug that caused insertions
in fasta alignments to appear in the wrong sequence.

>>Feb 7, 2004	CVS fa34t23b6

Change initfa.c to allow "-i" (reverse complement) and "-i -3" with
"fastx34" and "prfx34".  In addition, "prfx34" now examines both query
DNA strands in calculated the shuffled statistical significance.

>>Feb 5, 2004

Reverse assignments for G:U baseparing in initfa.c.

Fix memory allocation error caused by doubling DNA alignment width.

>>Jan 7, 2004	CVS fa34t23b5

Change in do_walign() in dropnfa.c to make final DNA alignments use a
band that is 2X as large as the search band width.

>>Dec 22, 2003	CVS fa34t23b4

Fix typo in p2_complib.c that prevented compilation.  Fix problem
with karlin.c for assymetrical matrices, such as used with -U.

>>Dec 10, 2003  CVS fa34t23b3

Fix problem in resetp()/initfa.c that disabled banded Smith-Waterman
DNA alignments.

Allow spam() to do extended alignments for DNA if one of the sequences
is < 50 nt.

Cause default ktup to drop for short sequences.  For protein < 50, ktup=1;
for DNA < 20, 50, 100 ktup = 1, 2, 3, respectively.

>>Dec 7, 2003

A new option, "-U" is available for RNA sequence comparison.  "-U"
functions like "-n", indicating that the query is an RNA sequence.  In
addition, to account for "G:U" base pairs, "-U" modifies the scoring
matrices so that a "G:A" match has the same score as a "G:G" match,
and "T:C" match has the same score as a "T:T" match.  The asymmetric
matrix required changes in dropnfa.c that were similar to the changes
in dropgsw.c required for profiles.  In addition, m_msg.qdnaseq and pst.dnaseq
 can now be SEQT_DNA, SEQT_RNA, SEQT_PROT, SEQT_UNK, or SEQT_OTHER.
m_msg.ldnaseq does not use SEQT_RNA, only SEQT_DNA.  A new member of
struct pstruct: int nt_align, is used to indicate nucleotide
alignments.

>>Nov 19, 2003

Changes to Makefile's to distinguish between tatstats_fs.o and
tatstats_ff.o.

>>Nov 2, 2003

Substantial changes to comp_lib.c, p2_complib.c, mshowbest.c, and
mshowalign.c to support more sophisticated display options.
Previously, one could have only on "-m #" option, even though several
of the options were orthogonal (-m 9c is independent of -m 1 and -m2,
which is independent of -m 6 (HTML)).  The programs now use a bitmask
that allows independent options to be combined.  In particular -m 9c
can be combined with -m 6, which can be very helpful for runs that
need HTML output but can also exploit the encoding provided by -m 9c.

The "-m 9" option now also allows "-m 9i", which shows the standard
best score information, plus percent identity and alignment length.

>>Oct 26, 2003	CVS fa34t23b1

Additional fixes to Makefiles to enable tfastf34(_t).  Changes to
support ossearch34 (a non-Phil Green optimized Smith-Waterman).

>>Oct 8, 2003	CVS fa34t23b0

Fixes to get DNA queries working in both directions, and to fix PCOMPLIB
programs for "-V" option.  Currently, the parallel programs cannot use
the "-V" option.

>>Sept 25, 2003

A new option is available for annotating alignments.  -V '@#?!'
can be used to annotate sites in a sequence, e.g:
	>GTM1_HUMAN ...
	PMILGYWDIRGLAHAIRLLLEYTDS@S?YEEKKYT@MG
	DAPDYDRS@QWLNEKFKLGLDFPNLPYLIDGAHKIT
might mark known and expected (S,T) phosphorylation sites.  These
symbols are then displayed on the query coordinate line:

               10        20    @?  30  @     40  @     50        60
GTM1_H PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP
       ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
gtm1_h PMILGYWDIRGLAHAIRLLLEYTDSSYEEKKYTMGDAPDYDRSQWLNEKFKLGLDFPNLP
               10        20        30        40        50        60

This annotation is mostly designed to display post-translational
modifications detected by MassSpec with FASTS, but is also available
with FASTA and SSEARCH.

>>Sept 22, 2003	  CVS fa34t22b5

The Altivec Smith-Waterman code has been removed.

>>Sept 17, 2003	  CVS fa34t22b4

A variety of different bugs have been fixed.  (1) All the functions in
the old initsw.c are now in initfa.c; initsw.c will be removed.
Specifically, the Profile/PSSM code is now in initfa.c.  initfa.c is
now fully table driven. (2) various problems with prss34 and prfx34
have been fixed in initfa.c.  (3) An additional ncbl2_mlib.c buffer
overrun has been fixed. (4) fastf34 is now available in this package.
Its performance is very similar to, but not identical to, fastf33.  I
am tracking down the differences.  In general, the raw scores
calculated by both programs are the same, but the statistical analysis
seems to be slightly different.

>>July 30, 2003   CVS fa34t22b3

Fix bug in ncbl2_mlib.c that caused buffer overrun with blast/formatdb
v3 description lines.

>>July 28, 2003

The initfa.c file has been substantially re-structured to use a
table-driven approach to parameter setting, rather than the previous
confusing combinations of #ifdef's.  Two tables of parameters are
used, pgm_def_arr[] and msg_def_arr[], which specify values like the
program name, reference, scoring matrix, default gap penalties, etc.
msg_def_arr[] has the sequence types for the query, library, and
algorithm, as well as other parameters (qframe, nframe, nrelv, etc),
which greatly simplifies the sequence recognition logic.  ppst->pgm_id
can be used to identify the program that is running.  Eventually,
almost all of the program specific #ifdef's will be removed from
initfa.c.  initfa.c now provides initsw.c functionality, so that
initsw.c is no longer needed.

>>July 25, 2003

A new file is included - fasta.defaults - that lists the scoring
matrix, gap penalty, and other defaults for all of the fasta34
programs.  This file will be used soon to simplify parameter setting
for the FASTA programs, and should also be used by Javascript WWW
interfaces to the FASTA programs.

>>July 22, 2003    CVS fa34t22b2

Fixes to dropfs2.c, tatprobs.c to ensure that negative probabilities
cannot occur.  Negative probabilities were never seen with standard
matrices, but did occur with BL50.  Another optimization in dropfs.c
considerably improves fasts34 performance in some cases.

Fix a problem with formatdb v4 ASN.1 format files.

>>July 12, 2003

Fix a bug that prevented "-L" (long sequence descriptions) from
working.

>>July 9, 2003

Fix reverse complement (M:K) error.  Fix off-by-one error for FASTA
DNA alignments that caused the first aligned residue pair to be
missed.

>>July 4 - 8, 2003

Incorporate blast-def-line ASN.1 parsing so that NCBI formatdb version
4 files can be read.

>>June 26, 2003

The strategy for displaying the match/mismatch line (" .:" for -m 0)
has been changed dramatically to acommodate more sophisticated
strategies for indicating conservative replacements, e.g. because of
PSSM's.  In addition to seqc0 and seqc1, which hold the aligned
sequences for display, there is also seqca, which holds the alignment
symbol.  calcons(), do_show(), and discons() have all changed to
include seqca.  calcons() is somewhat more complex; discons() is much
simpler.  (June 29, 2003 - dropgsw.c calcons() now displays profile
similarity accurately - it is very very illuminating.)

>>June 16, 2003	version: fasta34t22

ssearch34 now supports PSI-BLAST PSSM/profiles.  Currently, it only
supports the "checkpoint" file produced by blastall, and only on
certain architectures where byte-reordering is unnecessary.  It has not
been tested extensively with the -S option.

	ssearch34 -P blast.ckpt -f -11 -g -1 -s BL62 query.aa library

Will use the frequency information in the blast.chkpt file to do a
position specific scoring matrix (PSSM) search using the
Smith-Waterman algorithm.  Because ssearch34 calculates scores for
each of the sequences in the database, we anticipate that PSSM
ssearch34 statistics will be more reliable than PSI-Blast statistics.

The Blast checkpoint file is mostly double precision frequency
numbers, which are represented in a machine specific way.  Thus, you
must generate the checkpoint file on the same machine that you run
ssearch34 or prss34 -P query.ckpt.  To generate a checkpoint file,
run:

blastpgp -j 2 -h 1e-6 -i query.fa -d swissprot -C query.ckpt -o /dev/null

(This searches swissprot for 2 iterations ("-j 2" using a E()
threshold 1e-6 saving the resulting position specific frequencies in
query.ckpt.  Note that the original query.fa and query.ckpt must
match.)

>>June 5, 2003

Fix to mshowbest.c to get -m 9 coordinates correct on reverse strand
with pv34comp*.  Some additional fixes for prfx34.

>>May 22, 2003

Changes to llgetaa.c, getseq.c, comp_lib.c to provide a different
library residue lookup table (sascii) for queries and libraries.  This
allows one to make a prfx34 (like prss34, but using the fastx
algorithm).  prfx34 is now available.

>>May 13,14 2003

Fixes to most of the drop*.c files, and mshowbest.c, to ensure that
coordinates displayed with -m 9(c) and the final alignment are
consistent.  They were consistent for fasta34/ssearch34/fasts34, but
not for fastx34/fasty34.  The alignment coordinate system has been
been revised for consistency in allthe drop*.c programs (coordinates
used to be off-by-one for some, but not other functions).

Fixes to -m 9c for fasty34/pv34compfy.  In addition, a problem was
fixed with fastx34/fasty34 that appeared with a protein sequence was
considerably longer than the DNA query, e.g. an EST vs titin (26K
residues).  This problem only appeared on pv34compfx/fy on Xserve's
under OS_X; but it should improve fastx34/fasty34 performance with
very long protein sequences on all platforms.

>>May 7,8 2003

Changes to p2_workcomp.c, compacc.c, and p_mw.h to fix persistent
bugs in the -m 9c display.  Previous pv34comp* programs would not
return the correct coded alignment if more than 100 alignments came
from the same node, or if an encoding was longer than 127 chars.

Also, fixes to p2_complib.c, comp_lib.c, to allow long query sequences
to be segmented.  Previously, only the first 20,000 residues were
used.  The segmented queries are not overlapped; segmented library
sequences are.

>>May 5, 2003

Changes to last_tat.c, scaleswt.c to ensure that all fasts alignments
that are likely to have significant scores are displayed.  In previous
implementations, if the query had more than 10 fragments, only the 100
best scores were shown.  Now, we rescore up to 2500 alignments.  The
new approach allows large mixtures to be used for searches, where some
of the fragments from the mixture match too many proteins
(e.g. actins).  Some differences between the fasts34 and pv34compfs
implementations have been fixed.  The two programs typically will not
give exactly the same results, because of small differences in the
sampling procedures, but the results are essentially equivalent.

>>Apr 11, 2003  CVS fa34t21b3

Fixes for "-E" and "-F" with ssearch34, which was inadvertantly disabled.

A new option, "-t t", is available to specify that all the protein
sequences have implicit termination codons "*" at the end.  Thus, all
protein sequences are one residue longer, and full length matches are
extended one extra residue and get a higher score.  For
fastx34/tfastx34, this helps extend alignments to the very end in
cases where there may be a mismatch at the C-terminal residues.

-m 9c has also been modified to indicate locations of termination
codons ( *1).

>>Mar 17, 2003  CVS fa34t21b2

A new option on scoring matrices "-MS" (e.g. "BL50-MS") can be used to
turn the I/L, K/Q identities on or off.  Thus, to make "fastm34" use
the isobaric identities, use "-s M20-MS".  To turn them off for "fasts34",
use "-s M20".

More fixes for correct alignment coordinates.  There was a conflict between
-m 9 and -m 9c and subsequent alignment displays.

>>Mar 13, 2003	

Various fixes to produce correct fastm34 alignments.  Changes to all
functions to correct potential problem with -m 9 alignment coordinates
when both -m 9 and actual alignments are shown.

>>Feb 25,27, 2003

Modifications to re-activate showsum.c, which included corrections to
the showbest() call in p2_complib.c.

>>Feb 13, 2003	CVS fa34t21b1

Modifications to dropfx.c to dramatically improve alignment speed for
cases where the DNA sequence is considerably longer than the protein
sequence.  Previously, a 200 aa vs 5000 nt comparison would do a full
200 x 5000 Smith-Waterman alignment; with this modification, no more
than a 200 x 1200 (2x3x200) alignment is done.  This optimization has
not (yet) been applied to dropfz2.c (fasty/tfasty).

>>Feb 11, 2003

Small modifications to comp_lib.c, p2_complib.c, and nmgetlib.c to
pass openlib() a possibly old lmf_str.  This allows openlib() to
re-use memory mapped files.  closelib() no longer releases memory
mapped file buffers.  Under Linux, memory mapped file buffers were not
really released, so when comparing a set of sequences against nr, the
program could not mmap() the database after several searches.  This
will also speed up memory mapped multiple sequence searches.

>>Jan 28-31, 2003  CVS fa34t21b0

Fix another bug (all of v34t20) involved with overlapping long
sequences.  And another bug that occurred when using sampled
statistics, but appeared only on the SGI platform - thanks to Dmitri
Mikhailov.  Several other issues have been addressed based on more
instrumented runtime testing.

Fix an old (all v34) bug that caused problems with -z 11-16 (shuffled
sequence array was not allocated properly).  Fixed another bug with -z
6/16 when using threaded (_t) searches in fasta34_t.

Restructure statistical analysis functions (scaleswn.c, scaleswt.c) to
return the "final" statistical estimation routine done in pst.zsflag_f.
This allows the program to cope with searches against a single sequence
correctly.

Corrected an error for DNA sequences needing Altschul-Gish statistics.

>>Jan 25, 2003

Add option "-J start:stop" to pv34comp*/mp34comp*.  "-J x" used to
allow one to start at query sequence "x"; now both start and stop can
be specified.

>>Jan 14, 2003

Changes to apam.c to provide an error message on stderr when a scoring
matrix cannot be found.

Changes to dropfs2.c, initsw.c, initfa.c to provide -m9c information
for fasts34 searches.  Modify the alignment algorithm to use
probabilistic scores properly.

>>Dec 22, 2002

Change to compacc.c (sortbeste()) to do a second sort on zscore when
several sequences have E() == 0.

>>Nov 27, 2002

Change FSEEK_T to fseek_t to keep Borland BCC5 happy. 

>>Nov 14-22, 2002  CVS fa34t20b6

Include compile-time define (-DPGM_DOC) that causes all the fasta
programs to provide the same command line echo that is provided by the
PVM and MPI parallel programs.  Thus, if you run the program:

    fasta34_t -q -S gtt1_drome.aa /slib/swissprot 12

the first lines of output from FASTA will be:

    # fasta34_t -q gtt1_drome.aa /slib/swissprot
     FASTA searches a protein or DNA sequence data bank
     version 3.4t20 Nov 10, 2002
    Please cite:
     W.R. Pearson & D.J. Lipman PNAS (1988) 85:2444-2448

This has been turned on by default in most FASTA Makefiles.  

Fix p2_complib.c so that qstats[] is always allocated before it is used.

Fix serious bug in non-threaded comp_lib.c that caused some high
scoring sequences to be missed by fasts34.  New tests are included in
test.sh to detect this problem in the future.

The shell sort algorithm in sortbeste(), sortbestz(), and sortbesto()
has been modified to use an improved algorithm that will not go
quadratic in pathological cases.

nmgetlib.c and mmgetaa.c have been modified to remove "^A" in libstr
when used with p2_complib.c.

Fix problem with MAXSEG in tatstats.h with IBM/AIX.

Changes to most Makefiles to use -DSAMP_STATS; fixes to p2_complib.c
for SAMP_STATS.

>>Oct 22, Nov 3, Nov 9, 2002   CVS tag fa34t20b5

Fix problem in comp_lib.c that caused the query sequence length to be
counted twice.

Fixed problem with prss34 (updated find_zp in showrss.c).

Correct shuffling function in several places.

Add jitter back to addhistz() - improves appearance with prss34.

Changes to fix problems with aln_code using -m 9c.

Fix to serious bug in scaleswt.c (fasts34, etc) that caused sorts on
the high scores to take much to long.  The program is now 10X faster,
and scales well on PVM/MPI.

Fix to llgetaa.c to work with new getseq() API with automatic alphabet
recognition.

>>Oct 12, 2002 CVS tag fa34t20b4

Several very obscure (and sometimes old) bugs that appeared in certain
MPI environments have been fixed.  This occurred because the pst.sq[]
array did not always have a '\0' at the end.  In addition,
mshowalign.c/p2_workcomp.c sometimes failed to put the '\0' at the end
of seqc0/seqc1.  Correct bug introduced in fa34t20b3 for fasts34(_t).

>>Oct 9, 2002 CVS tag fa34t20b3

Fix to apam.c build_xascii() to not zero-out qascii[0].  Fix
Makefile.pvm4.  Mix problem with -m 9c with compacc.c.

>>Sept 28, 2002 

Additional fixes to -m 9c in p2_complib.c/compacc.c/mshowbest.c.
Remove restriction in fasts34(_t) to less than 30 peptides (though no
more than 30 peptides can be aligned currently).

>>Sept 24, 2002

Fix p2_workcomp.c so that e_scores are delivered correctly when
last_calc flag is set, and -m 9c provides alignments when only one
best hit is present.

Fix comp_lib.c to use different maxn and overlap for each different
query sequence.  fasta34 and fasta34_t now have identical results when
a long sequence is searched.

Add '@C:101' support to memory mapped FASTA format files.

Fix mshowalign.c so that coordinates returned by cal_coord() use
loffset+l_off.

>>Sept 14, 2002	CVS tag fa34t20b2

Changes to p2_complib.c, compacc.c to fix statistics problems with
pv34compfs on query sequences with more than 10 fragments.

>>Aug 27, 2002

Modifications to mshowbest.c and drop*.c (and p2_workcomp.c,
compacc.c, doinit.c, etc.) to provide more information about the
alignment with the -m 9 option.  There is now a "-m 9c" option, which
displays an encoded alignment after the -m 9 alignment information.
The encoding is a string of the form: "=#mat+#ins=#mat-#del=#mat".
Thus, an alignment over 218 amino acids with no gaps (not necessarily
100% identical) would be =218.  The alignment:

       10        20        30        40        50          60         70  
GT8.7  NVRGLTHPIRMLLEYTDSSYDEKRYTMGDAPDFDRSQWLNEKFKL--GLDFPNLPYL-IDGSHKITQ
       :.::  . :: ::  .   .:::         : .:    ::.:   .: : ..:.. :::  :..:
XURTG  NARGRMECIRWLLAAAGVEFDEK---------FIQSPEDLEKLKKDGNLMFDQVPMVEIDG-MKLAQ
               20        30                 40        50        60        

would be encoded: "=23+9=13-2=10-1=3+1=5".  The alignment encoding is
with respect to the beginning of the alignment, not the beginning of
either sequence.  The beginning of the alignment in either sequence is
given by the an0/an1 values. This capability is particularly useful
for [t]fast[xy], where it can be used to indicate frameshift positions
"/#\#" compactly.  If "-m 9c" is used, the "The best scores" title
line includes "aln_code".

>>Aug 14, 2002	CVS tag fa34t20

Changes to nmgetlib.c to allow multiple query searches coming from
STDIN, either through pipes or input redirection.  Thus, the command

       cat prot_test.lseg | fasta34 -q -S @ /seqlib/swissprot

produces 11 searches.  If you use the multiple query functions, the
query subset applies only to the first sequence.

Unfortunately, it is not possible to search against a STDIN library,
because the FASTA programs do not keep the entire library in memory
and need to be able to re-read high-scoring library sequences.  Since
it is not possible to fseek() against STDIN, searching against a STDIN
library is not possible.

>>Aug 5, 2002

fasts34(_t) and fastm34(_t) have been modified to allow searches with
DNA sequences.  This gives a new capability to search for DNA motifs,
or to search for ordered or unordered DNA sequences spaced at
arbitrary distances.

>>Aug 4, 2002

comp_lib.c has been modified to provide comp_mlib.c function.
comp_mlib.c is no longer used.  comp_lib.c with the "mlib" function
can now recognize protein or DNA sequences automatically, and reads
from stdin can now detect DNA/protein sequence types automatically.
Changes to compacc.c, getseq.c, doinit.c initfa.c, initsw.c, and
nmgetlib.c to support automatic sequence type detection.

>>July 28-31, 2002

(1) The various Makefile's have been "normalized".  The fast*34[_t]
    (Makefile.34m.common[_sql]), Makefile.pvm4[_sql], and
    Makefile.mpi4[_sql] make files all use a common set of filenames,
    described in Makefile.fcom.  This greatly simplifies adding
    programs, but requires that all *.o files be deleted when moving
    from fast*34* to pv34comp* to mp34comp*.

(2) showalign.c/p_showalign.c have been merged into mshowalign.c
    showbest.c/manshowbest.c have been merged into mshowbest.c.  Some
    of the related files (showun.c, manshowun.c, have not been merged
    or tested).

(3) Code for ranking scores with valid e_value's incorporated.

(4) Bug fixes in p2_complib.c, so that fasts34/fasts34_t/pvcompfs
    provide identical statistics.

>>July 26, 2002

Makefile.pvm4_sql and Makefile.pvm4 have been substantially simplified
by providing the worker program name from the h_init() function in the
initfa.c/initsw.c files.

>>July 24, 2002

Substantial modifications to param.h, structs.h to ensure that no
sequence specific information is kept in struct pstruct.  This
structure now holds the pam[] matrix, and other scoring parameters,
but nothing that is dependent on aa0.  The aa0 dependent stuff (nm0,
Lambda, K, etc) is now stored in struct mngmsg.  This was mostly done
to support the pv34comp* programs, which have separate mngmsg
structures but the same pstructs.

The fasts34, fasts34_t, and pv34compfs/c34.workfs have all been tested
successfully.

>>July 19, 2002

Fix an old bug in the calculation of E()-values in DNA databases
longer than 2147483647 residues on machines with 32-bit longs.


>>July 28-31, 2002

(1) The various Makefile's have been "normalized".  The fast*34[_t]
    (Makefile.34m.common[_sql]), Makefile.pvm4[_sql], and
    Makefile.mpi4[_sql] make files all use a common set of filenames,
    described in Makefile.fcom.  This greatly simplifies adding
    programs, but requires that all *.o files be deleted when moving
    from fast*34* to pv34comp* to mp34comp*.

(2) showalign.c/p_showalign.c have been merged into mshowalign.c
    showbest.c/manshowbest.c have been merged into mshowbest.c.  Some
    of the related files (showun.c, manshowun.c, have not been merged
    or tested).

(3) Code for ranking scores with valid e_value's incorporated.

(4) Bug fixes in p2_complib.c, so that fasts34/fasts34_t/pvcompfs
    provide identical statistics.

>>July 26, 2002

Makefile.pvm4_sql and Makefile.pvm4 have been substantially simplified
by providing the worker program name from the h_init() function in the
initfa.c/initsw.c files.

>>July 24, 2002

Substantial modifications to param.h, structs.h to ensure that no
sequence specific information is kept in struct pstruct.  This
structure now holds the pam[] matrix, and other scoring parameters,
but nothing that is dependent on aa0.  The aa0 dependent stuff (nm0,
Lambda, K, etc) is now stored in struct mngmsg.  This was mostly done
to support the pv34comp* programs, which have separate mngmsg
structures but the same pstructs.

The fasts34, fasts34_t, and pv34compfs/c34.workfs have all been tested
successfully.

>>July 8, 2002

Modifications to comp_lib.c, initfa.c and new scaleswt.c, tatstats.c
to support FASTS with Tatusov statistics.

last_params() has been introduced to allow aa0 dependent changes in m_msg/pstr.

sortbest() has been moved into initfa.c/initsw.c to make it function specific.

find_z() takes an additional parameter, escore.

The do_work() results structure, beststr, and stat_str all accommodate
escores as well as integer scores (stat_str also saves segn and segl
but doesn't need them).

In scaleswt.c, process_hist() now knows much more about Tatusov statistics.

last_stats() provided to accommodate rank-based statistical corrections.

scale_scores() is the last function to modify the beststr scores
(final calculation of E-value).

Some sortbest*() calls and some bptr[i]->zscore=find_zp() loops have
been moved into scale_scores();

>>July 3,5, 2002

Modifications to allow mySQL comments (--) in "library.sql 16" files.
Thus, a first line of:

	--host seqdb user password;

is read by FASTA as the login information to a mySQL server, but is
ignored by mySQL.  "DO" commands in FASTA mySQL files can also be
rendered invisible to mySQL in this way.  See "do.sql".

Modifications to mysql_lib.c to allow very long SQL statements.  The
buffer is now dynamically reallocated in 4Kb chunks.

The fasta3.1 man page has been updated and re-organized.

>>June 26, 2002

Minor modifications to nmgetaa.c (openlib()) to use the same arguments
for searching and PRSS.  PRSS needs access to all of m_msg, but
searches do not.  Other small fixes to comp_mlib.c, towards the goal
of merging comp_mlib.c and comp_lib.c.

>>June 25, 2002

Modify the statistical estimation strategy to sample all the sequences
in the database, not just the first 60,000.  The histogram is still
based only on the first 60,000 scores and lengths, though all scores
an lengths are shown.  The fit to the data may be better than the
histogram indicates, but it should not be worse.

Currently, this modification is available only if the -DSAMPLE_STATS
option is defined.

>>June 23, 2002	CVS fa34t11d4

Fix a very long-standing bug in fasty/tfasty that caused 'NNN' to be
translated as 'S', rather than 'X'.  fastx/tfastx has done this
correctly for many years, but the fasty/tfasty code that I received
from Zheng Zhang was not implemented correctly (my fault, his code was
fine).

>>June 19, 2002

Added "-C #" option, where 6 <= # <= MAX_UID (20), to specify the
length of the sequence name display on the alignment labels.  Until
now, only 6 characters were ever displayed.  Now, up to MAX_UID
characters are available.

>>May 30, 2002	CVS fa34t11d3

Fixed problem with programs using the default -E cutoff when -b was
provided.  With this implementation, -E can override -b, but -b
overrides the default -E.

Fixed problem with 64-bit file offsets in param.h (change USE_FSEEK0
-> USE_FSEEKO, include -D_LARGEFILE_SOURCE and -D_LARGEFILE64_SOURCE
in Makefile.linux_sql).  Put limits on alignment display length (200
chars).  More checks for null returns from SQL queries.

>>Apr 17, 2002	CVS fa34t11d2

Fixed bug in mm_file.h/ncbl2_mlib.c that caused the SGI version to be
unable to read blast2 format files.

Changed "mp_*" tags to "pg_*" for -m 10 option.

>>Mar 30, 2002

Fix embarrassing bug in revcomp() (getseq.c) that failed to complement
the central nucleotide in a sequence with an odd number of residues.

Small changes to dropfs.c for more segments.

>>Mar 16, 2002

Added create_seq_demo.sql, nt_to_sql.pl to show how to build an SQL
protein sequence database that can be used with with the mySQL
versions of the fasta34 programs.  Once the mySQL seq_demo database
has been installed, it can be searched using the command:

	fasta34 -q mgstm1.aa "seq_demo.sql 16"

mysql_lib.c has been modified to remove the restriction that mySQL
protein sequence unique identifiers be integers.  This allows the
program to be used with the PIRPSD database.  The RANLIB() function
call has been changed to include "libstr", to support SQL text keys.
Due to the size of libstr[], unique ID's must be < MAX_UID (20)
characters.

A "pirpsd.sql" file is available for searching the mySQL distribution
of the PIRPSD database.  PIRPSD is available from
ftp://nbrfa.georgetown.edu/pir_databases/psd/mysql.

>>Mar 6, 2002

Fix showbest.c showbest() to report pst.zdb_size as database size.
Fix dropnfa.c spam() to address off-by-one on end of run, and double
counting on backwards scan.  Fix dropnfa.c do_fasta() to fix another
problem introduced by -S.  Changes to comp_lib.c to ensure that both
the beginning and end of the query and library sequence have '\0'
present.  Changes to initfa.c, initsw.c to ensure that a match to a
lower-case letter with -S gets exactly the same score as a match to an
'X'.  Changes to mmgetlib.c to work with 64-bit longs in *.xin files.

>>Feb 26, 2002

Fixes to doinit.c, initfa.c, initsw.c to allow DNA matrices using the
"-s dna.mat" option.  A new matrix, "d50ry.mat" is available that
scores +5 for a match, -2 for a transition, and -5 for a
transversion. "d50ry.mat" corresponds to DNA PAM50 with transitions
twice as common as transversions.  When "-s dna.mat" is used, "-n"
MUST be used as well.

Query sequence names ("aa", "nt") should be more accurate.

>>Feb 22, 2002

Fix to getseq.c to allow "plain" sequence files.

>>Feb 12, 2002

Minor fix to res_stats.c.

>>Jan 28, 2002

Fixes to resurrect res_stats.c.  res_stats (cc -o res_stats
res_stats.c scaleswn.c -lm) takes the output from a current "-R
file.res" file and calculates statistical significance - this allows
one to take exactly the same set of scores (and lengths) and calculate
statistical estimates using different strategies.

>>Jan 24, 2002

modifications to mmgetlib.c, ncbl2_mlib.c to more robustly read memory
mapped files (*.xin, map_db) on machines lacking "native" 64-bit
longs.  If the machine provides some definition for a 64-bit long
(e.g. "long long", "int64_t"), things should work. 64-bit offsets into
memory mapped files work properly on Alpha, SGI, i386 Linux, and
MacOSX.  The current implementation depends either on 64 bit longs
(Compaq Alpha's pre 4.0G) or the <sys/inttype.h> file.  Makefile,
Makefile.alpha, and Makefile.linux have been modified.

Modifications to nmgetlib.c, mmgetlib.c to provide GI numbers and
Accession versions for Genbank searches.  If the GI:123456 number is
available, it will be used and the description line will be formatted:

	gi|123456|gb|ACC1234.1|LOCUS description

This should help FAST_PAN runs, where the version of a sequence
changes frequently.

>>Jan 10, 2002

Modifications to p2_complib.c, p2_workcomp.c to more reliably allocate
space for library sequence descriptions on the master and workers.

>>Jan 2-3, 2002		CVS fa34t10c/fa34t10d3

Fixes to comp_lib.c to support Macintosh and Windows/Turbo-C
compilation.  New Makefile.tc.  Macintosh version supports both
"Classic" and "Carbon" environments.

"<values.h>" has been replaced with the more modern "<limits.h>"

Fixes to p2_complib.c to support n_libstr (libstr length) in GETLIB().

comp_thr.c, complib.c removed.

>>Dec 16, 2001

Complete integration of comp_mlib.c with both the unthreaded and
threaded programs.  Comp_mlib allows fasta34 and fasta34_t to compare
a database with a second database, just as pv34compfa does.  Using
multiple queries with fasta34_t is not as efficient as pv34compfa (and
it cannot use networks of Unix workstations), but it is much easier to
use and install.

With the comp_mlib.c option, fasta34 cannot automatically recognize
DNA sequences, just as pv34compfa no longer recognizes DNA sequences.
You must use the "-n" option to search with DNA sequences.  The other
programs (fastx34, tfastx34, etc) "know" the type of the query and
database sequences, so "-n" is only required for fasta34(_t).

>>Dec 14, 2001		CVS tag fa34t10b

Fix problems reading DNA databases in blast2 format.

>>Dec 11, 2001

Changes to spam() in dropnfa.c so that, for DNA sequences, the
previous behavior for finding the boundaries of a local alignment
region use the same algorithm as previous versions of fasta.  For
protein sequences, the algorithm will extend the local region beyond
the "ktup" boundaries if a better score can be found.  For DNA
sequences, this raises the noise rather than increasing sensitivity,
so it is turned off and "ktup" boundaries are respected.  The old,
"ktup" boundary algorithm is available with -DNOSPAM_EXT.

This version also includes a working res_stats.c, which can be used to
test various statistical estimates on exactly the same set of scores.

Fixed problems with -m 9 percent identity for fastx/fasty/tfastx/tfasty.
These errors have been present since -m 9 was implemented.

>>Dec 10, 2001

Fix to map_db.c to work correctly with files > 2 Gb when 64-bit longs
are available.  It is not yet designed to work with ftello() and other
offset types.

>>Nov 11,21, 2001	CVS tag fa34t10a, fa34t10d1

Substantial changes to revcomp(), getseq(), and other functions to
correct problems with -S on DNA sequences.  Sequences with lower case
nucleotides were not recognized or reverse complemented properly.

Fix to dropnfa.c (v34t07, Nov 21, 2001) bg_align() to re-initialize
static globals - this fixes a problem encountered with pv34compfa.  A
new main program, comp_mlib.c has been added to the CVS archive,
although it is not referenced in any of the Makefile.  comp_mlib.c
works like p2_complib.c and compares a library against another
library.

>>Nov 4, 2001

Change to dropnfa.c spam () while(1) -> while(lpos <= dmax->stop).
This fixes a problem with ktup=1 on Suns only, so far.

>>Oct 4, 2001		CVS tag fa34t10

Add comp_lib.c file, which merges complib.c (unthreaded) and
comp_thr.c (threaded) code into one file.

Modifications to nmgetlib.c, mmgetaa.c to allow Genbank flatfile
format without DESCRIPTION or ACCESSION lines.

Additional fix for -S with ktup=1.

>>Sept. 24, 2001

Fix to have correct gap-penalties for short scoring matrices with
tfastx/fastx.

>>Sept. 10, 2001	CVS tag fa34t05d6

Fix a bug introduced by -S fix in fa34t05d5.  Also, try to remove
changes in p34compfa compared to pv4compfa output.

>>Sept. 6, 2001		CVS tag fa34t05d5

Fix the -S dropnfa/fx/fz2 bug that was not actually fixed in
fa34t05d4.  Incorporate the correct scaleswn.c refered to in
fa34t05d4.

>>Sept. 5, 2001		CVS tag fa34t05d4

Fix problem with m_msg.quiet that prevented interactive prompts for
ktup, file name, etc with threaded programs.

Fix serious bug in dropnfa.c/dropfx.c/dropfz2.c that caused -S to work
improperly on sequences with effective length of 3 or less.

Change to scaleswn.c to make mle_cen(), mle_cen2() more robust to cases
where the top and bottom scores are the same.

Change p2_complib.c to avoid compiler complaints with (void *)wstage2p=NULL
on some platforms.

>>Aug. 30, 2001		CVS tag fa34t05d3

Fixed problem with uthr_subs.c for Suns, but changed Makefile.sun to
use pthreads rather than Sun Unix threads.  Removed SQL stuff from
Makefile.mpi4/pvm4 and added Makefile.mpi4_sql/pvm4_sql.  

fa34t05d2 - fix to map_db.c to provide *sascii.

fa34t05d1 - fixes to ibm_pthr_subs.c and Makefile.ibm from IBM.

>>Aug. 20, 2001		CVS tag fa34t05d0

The pvm/mpi complib programs have been substantially updated with
release 3.4.  See readme.v34t0 for more information.  With version
3.4, the MPI programs are mp34comp*, mu34comp*, etc.

A major effect of this change is to disable automatic sequence type
(protein/DNA) recognition with pv34compfa/mp34compfa.  By default,
protein libraries are assumed.  Thus, pv34compfa/mp34compfa require
the "-n" command line option when running pv34compfa/mp34compfa on DNA
sequence libraries.  This issue does not occur with the other
programs, which will recognize the appropriate sequence type, because
it is determined by the program (e.g. pv34compfx requires
DNA:protein).

Fixed substantial problem with 64-bit file offsets for Linux in
complib.c/comp_thr.c, p2_complib.c.  This problem, solved by Doug
Blair, was preventing the threaded versions from working properly in
memory mapped mode.

In all earlier versions of fasta, when very long sequences were
searched, the sequence length reported was that of the "chunk" that
was actually searched (typically 80,000-query_length) rather than the
actual library sequence length.  The peculiar behavior now changed,
and the full length of the library sequence, not the sequence chunk,
is reported as the library sequence length.  Note that chunks are
still used, however, which can cause the same alignment to be shown
twice.  In addition, the "-m 9" output format has changed to report
the coordinates of the query and library sequence (see below), which
may be different from 1-sequence_length because the the query and
library sequences may have been extracted from larger sequences.  Four
additional fields have been added, "pn0", "px0","pn1", "px1" that are
the positions in for the beginning (pn0/1) and end (px0/1) of they
query/library sequence.  pn0/1 would typically be changed with the
"@C:#" directive, described below.

Changes to doinit.c/initfa.c/initsw.c to provide a new function -
f_lastenv() - that allows function-specific adjustments to parameters
after the command line options have been read but before the first
sequence is read.  This change solved problems with "mp/pv34compfx -S".

fasts34/tfasts34 now recognize that 'I/L' are the same, as are 'Q/K'
(which are apparently indistinguishable by Mass-Spec).  The latter
identity is on by default, but can be turned off with "-h 0".

The MPI/PVM versions of the programs have been tested extensively with
compfa, compfx, and comptfx.  Makefile.mpi4 now works properly.
Changes to p2complib.c to support the PVM option "-T 1-4", which
allows one to run on nodes 1-4 of a (presumably larger) PVM virtual
machine.  This option has no effect on the mp34comp* programs.  The
old "-T 4" to run on 4 nodes, is also available.  If each node has 2
cpu's, as indicated in the "pvmd hostfile", both CPU's will be used
for a total, in this example, of 8 processes. This allows one to
specify a large PVM machine and use separate parts of it
independently.

Changes to nmgetlib.c to fix problems with longer dates in GCG files
(Y2K).  Fixes to faatran.c for extended alphabets and 'X's.  Various
code clean-ups to make "gcc -Wall" a little bit (not much) happier.

This is the first distributed fasta34 version.

================
>>Aug 9, 2001		CVS tag fa34t05

Corrections to initfa.c to allow -S to work with tfastx/y.
Fix to manshowbest.c for query position with -m 9.

>>July 18, 2001		CVS tag fa34t04

Various changes to complib.c, comp_thr.c, p2_complib.c, showbest.c,
showalign.c to deal with overlapping alignments in long sequences that
have been segmented.  When long sequences are segmented (lcont>0), the
eventual total length (n1tot_v) is saved at beststr->n1tot_p.  If
there was no lcont, then beststr->n1tot_p = NULL, and beststr->n1
should be used as the sequence length.  This has the advantage of
requiring space only when long sequences are encountered, and
requiring only one integer for several segments.

m_msg.noshow has been removed.

The -m 9 format has been changed - 5 fields have been added, 4
(pmn0/pmx0/pmn1/pmx1) provide the beginning and end coordinates of the
query and library sequence; the last (fs) reports the number of
frameshifts.  The names of the alignment boundaries have been changed
from min0/max0/min1/max1 to amn0/amx0/amn1/amx1 (Alignment miN/maX).

The SQL format has been extended to provide for statements that do
things but do not generate results, such as creating and selecting into a temporary table, e.g.:
================
    do
    create temporary table seq_pos (
    id int unsigned not null auto_increment primary key,
    prot_id int unsigned not null default 0,
    start int unsigned not null default 0,
    length int unsigned not null default 0,
    )
    ;
    do
    insert into seq_pos (prot_id, start, length)
      select id, 11, len-10
      from protein, annot
      where len > 100
      and annot.protein_id = protein.id
      and annot.pref=1
    ;
    select seq_pos.id,
       substring(protein.seq, start, length),
       concat("@C:", start, " ", descr)
    from protein, seq_pos, annot
    where protein.id = annot.protein_id
      and protein.id = seq_pos.prot_id
      and annot.pref = 1
    ;
    select prot_id,
       concat("@C:", start, " ", descr)
    from seq_pos, annot
    where annot.protein_id = seq_pos.prot_id
      and seq_pos.id = #
      and annot.pref = 1
     ;
================

  In the current implementation, these statements must start with "DO"
as the first two characters on the line, and come immediately after a
line ending with ';'.  The text from "DO" to the next ";", excluding
the "DO", is executed when the database connection is made.

===== >>July 12, 2001

The allocation of the work_info data structure used to send
information to the worker threads has been changed.  The old method
worked, possibly by accident.

A bug in p2_complib.c that caused E()-values to be calculated
improperly for the first query sequence has been fixed.

>>July 11, 2001	--> fa34t02

It is now possible to specify output coordinates in library sequences
by including the string: "@C:number" on the description line, e.g.

   >gtm1_human gi|12345 human glutathione transferase M1 @C:21

would label the first residue in the library sequence "21" rather than
"1".  This capability has been included to provide accurate
coordinates for searches done against subsequences generated by an SQL
query.  For example, one could use a query of the form:

 SELECT protein.id, substring(protein.seq,11,length(protein.seq)-20),
	concat(protein.name," @C:11 ",protein.descr)
 FROM protein;

to generate a sequence set with each sequence starting with residue
11.  Without the "@C:11" option on the description line, the program
would number the alignment positions starting at 1, even though the
first residue of the sequence really started at 11.  "@C:11" allows
one to correct the coordinate system.

Currently, "@C:offset" is available only with library type 1 (fasta
format) and 16 (mySQL).

The SQL-generated database with "@C:offset" can be used with both the
fast*34(_t) programs and with pv34comp*.  However, the SQL syntax is
used differently in the fasta34 and pv34compfa programs.  fast*34(_t)
requires three SQL statements during a search: (1) a statement to
generate a large set of library sequences; (2) a statement to generate
a description of a single sequence, given a unique identifier provided
by (1); and (3) a statement to generate a single sequence given a
unique identifier provided by (1).  For fast*34 searches, the third
(3) SQL statement must provide the "@C:offset" information in the
third results field for the offset to be used.  It is optional in (1)
and (2).

The pv34comp* programs only require one SQL statement, statement (1)
above, which must provide three fields, a unique identifier, the
sequence, and a complete description that must include "@C:offset" if
substrings are used.  If SQL queries (2) and (3) are provided, they
are  ignored.  Thus, the same files can be used by both programs, but
the "@C:offset" is required in different SQL queries by the fast*34
and pv34comp* programs.

Other changes:

Re-incorporation of GAP_OPEN option; fix to Altschul-Gish stats when
GAP_OPEN is used.

Re-incorporation of A. Mackey's spam() improvement in dropnfa.

Fixes to include file ordering to allow fast*34(_t) pv34comp* programs
to compile.

Fix to lascii[] for SQL database queries.

Fix to an old bug in comp_thr.c to send individual worker_info
structures to threads (does not fix LINUX threads problems, however).

=====
>>July 9, 2001

Considerable changes to support no-global library functions. 

(1) Separate ascii/sequence mapping arrays are used by the
    query-reading (qascii), library-reading (lascii), and sequence
    comparison function (pascii) routines.  As a result, there is no
    longer a need for tgetlib.o/lgetlib.o - lgetlib.o can serve both
    functions.

(2) This also allows us to remove all #ifdef TFAST/FASTX conditionals
    from complib.c/comp_thr.c/p2_complib.c.  We no longer need
    tcomp_thr.o, comp_thrx.o, etc.  We still have a variety of
    p2_complib.o variations to support the different c34.work* files.

(3) Because non-global openlib/getlib functions are available, exactly
    the same open/get functions are available for reading both the
    query and reference libraries in pv34comp* programs.  The
    host-specific openlib/getlib functions in hxgetaa.c are now
    provided by nmgetlib.c, etc. This has two effect:

    (a) it is now possible to compare a query database generated by an
        SQL query to a library database generated by a different SQL
        query.

    (b) pv34comp* has lost (at least in this version) the ability to
        automatically detect the query sequence type. To search with a
        DNA query, you MUST use "-n".

(4) the resetp() function is now responsible for almost all of the
    function sepcific (TFAST/FASTX/etc) initializations.  All of the
    function specific code has been removed from complib.c/comp_thr.c
    and most of it has been moved to initfa.c/resetp().

(5) manageacc.c has been merged into compacc.c (mostly prhist()).

=====
>>June 1, 2001

Many changes to accommodate a new - no global variable - strategy for
reading sequence databases.  Every time a file is opened, a struct
lmf_str is allocated which can be used for memory mapped files, ncbl2,
files, and mysql files.

In addition, an open'ed file has a default sequence type: DNA or
protein, or one can open a file in a mode that will allow the sequence
type to be changed.

=====
>>May 18, 2001		CVS: fa33t09d0

A new compile time parameter - -DGAP_OPEN, is available to change the
definition of the "-f gap-open" parameter from the penalty for the
first residue in a gap to a true gap-open penalty, as is used in BLAST
and many other comparison algorithms.  This will probably become the
default for fasta in version 3.4.

Fixes to conflicts between "-S" and "-s matrix".  When a scoring
matrix file was specified, lower-case alignments were not displayed
with -S (although the scores were calculated properly).

More extensive testting of mysql_lib.c (mySQL query-libraries) with
the pv4comp* and mp4comp* programs.

=====
>>April 5, 2001		CVS: fa33t08d4b3

Changes in nmgetlib.c and ncbl2_mlib.c to return long sequence
descriptions for PCOMPLIB (pv4/mp3comp*).  Also fix p2_complib.c to
request DNA library for translated comparisons.

Fix for prss33(_t) to read both sequences from stdin.

=====
>>March 27, 2001	CVS: fa33t08d4

Modifications to allow 64-bit fseek/ftell on machines like Sun,
Linux/Intel, that support -D_FILE_OFFSET_BITS=64, -D_LARGE_FILE_SOURCE
off_t, and fseeko(), ftello() with the option -DUSE_FSEEKO.  Machines
with 64-bit long's do not need this option.  Machines with 32-bit
longs that allow files >2 Gb can do so with 64-bit file access
functions, including fseeko() and ftello(), which work with off_t file
offsets instead of long's.

=====
>>March 3, 2001		CVS: fa33t08d2

Corrected problems in nmgetaa.c and mysql_lib.c with parallel
programs, and one serious problem with alternate DNA scoring matrices
(initfa.c, initsw.c) not being set properly.  A subtle problem with
the merge of scaleswn.c and scaleswg.c is fixed.

>>February 17, 2001

Modified mysql_lib.c to use "#", rather than "%ld", to indicate the
position of the GID.  This change was made because sprintf() cannot be
used reliably to generate an SQL string, as '"' and '%' are used in 
such strings.

=====
>>January 17, 2001
(no version change, date change)

Minor fixes to initfa.c, initsw.c to deal with DNA scoring matrices
properly. "-n -s dna.mat" is required for the sequence/matrix to be
recognized as DNA.

>>January 16, 2001
-->v34t00

Merge of the main CVS trunk - fa33t06 with the latest release branch,
fa33t08.

In addition, PCOMPLIB mods have been made to mysql_lib.c.  Because
p2_complib.c gets sequence description information during the first
read of the database, the mysql_query must be changed to return:
result[0]=GID, result[1]=description, result[2]=sequence.  In the
PCOMPLIB case, the other SQL queries (for GID description, sequence)
are not necessary but must still be provided.
