This package (SIBsim4) implements a variation of the Sim4 algorithm,
as described below, originally written by Liliana Florea and Scott
Schwartz.  The modifications were written by Claudio Lottaz and
Christian Iseli, while working for the Swiss Institute of
Bioinformatics and the Ludwig Institute for Cancer Research.

The modifications are Copyright (c) Swiss Institute of Bioinformatics,
and Ludwig Institute for Cancer Research (LICR), 2001-2004.  For the
purposes of this copyright, the Swiss Institute of Bioinformatics acts
on behalf of its partner, LICR.

The resulting, modified, package is licensed under the terms of the
GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any
later version.

Below is the original copyright notice.

-----------------------------------------------------------------------

This package implements the Sim4 algorithm for aligning expressed DNA
with genomic sequences, described in the paper:

L. Florea, G. Hartzell, Z. Zhang, G. Rubin, and W. Miller (1998) 
"A computer program for aligning a cDNA sequence with a genomic DNA sequence."
Genome Research 8, 967-974.


Portions copyright by:

Copyright (C) 1998-2001  Liliana Florea
Copyright (C) 1998-2001  Scott Schwartz

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# The following files were written by Liliana Florea:
 
Xtend1.c
Xtend1.h
align.c
align.h
sim4.h
sim4.init.c
sim4b1.c
sim4b1.h
splice.c
splice.h

# The following files were written by Scott Schwartz:

args.c
args.h
charvec.c
charvec.h
discrim.c
discrim.h
dna.c
dna.h
encoding.c
encoding.h
libc.h
misc.c
misc.h
prnt.c
prnt.h
psublast.h
seq.c
seq.h
seq_read.c
types.h
