view release on metacpan or search on metacpan
You will interact with several Perl classes: I<Ace>, I<Ace::Object>,
I<Ace::Iterator>, I<Ace::Model>.  I<Ace> is the database accessor, and
can be used to open both remote Ace databases (running aceserver or
gifaceserver), and local ones.
I<Ace::Object> is the superclass for all objects returned from the
database.  I<Ace> and I<Ace::Object> are linked: if you retrieve an
Ace::Object from a particular database, it will store a reference to
the database and use it to fetch any subobjects contained within it.
You may make changes to the I<Ace::Object> and have those changes
written into the database.  You may also create I<Ace::Object>s from
scratch and store them in the database.
I<Ace::Iterator> is a utility class that acts as a database cursor for
long-running ACEDB queries.  I<Ace::Model> provides object-oriented
access to ACEDB's schema.
Internally, I<Ace> uses the I<Ace::Local> class for access to local
databases and I<Ace::AceDB> for access to remote databases.
Ordinarily you will not need to interact directly with either of these
of this if you use ALRM for your own purposes.
NOTE: this feature is temporarily disabled (as of version 1.40)
because it is generating unpredictable results when used with
Apache/mod_perl.
=item B<-query_timeout>
If any query takes longer than $query_timeout seconds, will return an
undefined value.  This value can only be set at connect time, and cannot
be changed once set.
=back
If arguments are omitted, they will default to the following values:
    -host          localhost
    -port          200005;
    -path          no default
    -program       tace
    -class         Ace::Object
Ace/Graphics/Glyph.pm view on Meta::CPAN
  return $self->{cache_height};
}
sub calculate_height {
  my $self = shift;
  my $val = $self->factory->height;
  $val += $self->labelheight if $self->option('label');
  $val;
}
# change our offset
sub move {
  my $self = shift;
  my ($dx,$dy) = @_;
  $self->{left} += $dx;
  $self->{top}  += $dy;
}
# positions, in pixel coordinates
sub top    { shift->{top}                 }
sub bottom { my $s = shift; $s->top + $s->height   }
Ace/Graphics/Glyph.pm view on Meta::CPAN
Once a glyph is created, it responds to a large number of methods.  In
this section, these methods are grouped into related categories.
Retrieving glyph context:
=over 4
=item $factory = $glyph->factory
Get the Ace::Graphics::GlyphFactory associated with this object.  This
cannot be changed once it is set.
=item $feature = $glyph->feature
Get the sequence feature associated with this object.  This cannot be
changed once it is set.
=back
Retrieving glyph options:
=over 4
=item $fgcolor = $glyph->fgcolor
=item $bgcolor = $glyph->bgcolor
Ace/Graphics/Panel.pm view on Meta::CPAN
=back
=head2 ACCESSORS
The following accessor methods provide access to various attributes of
the panel object.  Called with no arguments, they each return the
current value of the attribute.  Called with a single argument, they
set the attribute and return its previous value.
Note that in most cases you must change attributes prior to invoking
gd(), png() or boxes().  These three methods all invoke an internal
layout() method which places the tracks and the glyphs within them,
and then caches the result.
   Accessor Name      Description
   -------------      -----------
   width()	      Get/set width of panel
   spacing()	      Get/set spacing between tracks
   length()	      Get/set length of segment (bp)
Ace/Graphics/Track.pm view on Meta::CPAN
=back
=head2 ACCESSORS
The following accessor methods provide access to various attributes of
the track object.  Called with no arguments, they each return the
current value of the attribute.  Called with a single argument, they
set the attribute and return its previous value.
Note that in most cases you must change attributes before the track's
layout() method is called.
   Accessor Name      Description
   -------------      -----------
   scale()	      Get/set the track scale, measured in pixels/bp
   lineheight()	      Get/set the height of each glyph, pixels
   width()	      Get/set the width of the track
   bump()	      Get/set the bump direction
Ace/Graphics/Track.pm view on Meta::CPAN
=over 4
=item $glyphs = $track->layout
Layout the features, and return an anonymous array of
Ace::Graphics::Glyph objects that have been created and correctly
positioned.
Because layout is an expensive operation, calling this method several
times will return the previously-cached result, ignoring any changes
to track attributes.
=item $height = $track->height
Invokes layout() and returns the height of the track.
=item $glyphs = $track->glyphs
Returns the glyph cache.  Returns undef before layout() and a
reference to an array of glyphs after layout().
Ace/Local.pm view on Meta::CPAN
		     READSIZE, $len);
    unless ($bytes > 0) {
      $self->{'status'} = STATUS_ERROR;
      return;
    }
    # check for prompt
    # The following checks were implemented using regexps and $' and
    # friends.  I have changed this to use {r}index and substr (a)
    # because they're much faster than regexps and (b) because using
    # $' and $` causes all regexps in a program to execute
    # very slowly due to excessive and unnecessary pre/post-match
    # copying -- tim.cutts@incyte.com 08 Sep 1999
    # Note, don't need to search the whole buffer for the prompt;
    # just need to search the new data and the prompt length from
    # any previous data.
    $searchfrom = ($len <= $plen) ? 0 : ($len - $plen);
Ace/Object.pm view on Meta::CPAN
}
sub _parse {
  my $self = shift;
  return unless my $raw = $self->{'.raw'};
  my $ts = $self->db->timestamps;
  my $col = $self->{'.col'};
  my $current_obj = $self;
  my $current_row = $self->{'.start_row'};
  my $db = $self->db;
  my $changed;
  for (my $r=$current_row+1; $r<=$self->{'.end_row'}; $r++) {
    next unless $raw->[$r][$col] ne '';
    $changed++;
    my $obj_right = $self->_fromRaw($raw,$current_row,$col+1,$r-1,$db);
    # comment handling
    if ( defined($obj_right) ) {
      my ($t,$i);
      my $row = $current_row+1;
      while ($obj_right->isComment) {
	$current_obj->comment($obj_right)   if $obj_right->isComment;
	$t = $obj_right;
Ace/Object.pm view on Meta::CPAN
  if (defined($obj_right)) {
    my ($t,$i);
    my $row = $current_row + 1;
    while ($obj_right->isComment) {
      $current_obj->comment($obj_right)   if $obj_right->isComment;
      $t = $obj_right;
      last unless defined($obj_right = $self->_fromRaw($raw,$row++,$col+1,$self->{'.end_row'},$db));
    }
  }
  $current_obj->{'.right'} = $obj_right;
  $self->_dirty(1) if $changed;
  delete @{$self}{qw[.raw .start_row .end_row .col]};
}
sub _fromRaw {
  my $pack = shift;
  # this breaks inheritance...
  #  $pack = $pack->factory();
  my ($raw,$start_row,$col,$end_row,$db) = @_;
Ace/Object.pm view on Meta::CPAN
    print $sequence->asString;
    print $sequence->asTabs;
    print $sequence->asHTML;
    # Update object
    $sequence->replace('Visible.Overlap_Right',$r,'M55555');
    $sequence->add('Visible.Homology','GR91198');
    $sequence->delete('Source.Clone','MBR122');
    $sequence->commit();
    # Rollback changes
    $sequence->rollback()
    # Get errors
    print $sequence->error;
=head1 DESCRIPTION
I<Ace::Object> is the base class for objects returned from ACEDB
databases. Currently there is only one type of I<Ace::Object>, but
this may change in the future to support more interesting
object-specific behaviors.
Using the I<Ace::Object> interface, you can explore the internal
structure of an I<Ace::Object>, retrieve its content, and convert it
into various types of text representation.  You can also fetch a
representation of any object as a GIF image.
If you have write access to the databases, add new data to an object,
replace existing data, or kill it entirely.  You can also create a new
object de novo and write it into the database.
Ace/Object.pm view on Meta::CPAN
** object.  For example, in the case of:
    $lab = $author->Laboratory;
**NOTE: The object returned is the dereferenced Laboratory object, not
a node in the Author object.  You can control this by giving the
autogenerated method a numeric offset, such as Laboratory(0) or
Laboratory(1).  For backwards compatibility, Laboratory('@') is
equivalent to Laboratory(1).
The semantics of the autogenerated methods have changed subtly between
version 1.57 (the last stable release) and version 1.62.  In earlier
versions, calling an autogenerated method in a scalar context returned
the subtree rooted at the tag.  In the current version, an implicit
right() and dereference is performed.
=head2 fetch() method
    $new_object = $object->fetch;
    $new_object = $object->fetch($tag);
Ace/Object.pm view on Meta::CPAN
Currently it is always true, since the database model is not checked.
    
=head2 replace() method
    $result_code = $object->replace($tag_path,$oldvalue,$newvalue);
    $result_code = $object->replace(-path=>$tag_path,
				    -old=>$oldvalue,
				    -new=>$newvalue);
Replaces the indicated tag and value with the new value.  This example
changes the address line "FRANCE" to "LANGUEDOC" in the Author's
mailing address:
    $object->delete('Address.Mail','FRANCE','LANGUEDOC');
No actual database changes occur until you call commit().  The
delete() result code indicates whether the replace was successful.
Currently is true if the old value was identified.
=head2 commit() method
     $result_code = $object->commit;
Commits all add(), replace() and delete() operations to the database.
It can also be used to write a completely new object into the
database.  The result code indicates whether the object was
Ace/Object.pm view on Meta::CPAN
found in the Ace->error() error string.
=head2 rollback() method
    $object->rollback;
Discard all adds, deletions and replacements, returning the object to
the state it was in prior to the last commit().
rollback() works by deleting the object from Perl memory and fetching
the object anew from AceDB.  If someone has changed the object in the
database while you were working with it, you will see this version,
ot the one you originally fetched.
If you are creating an entirely new object, you I<must> add at least
one tag in order to enter the object into the database.
=head2 kill() method
    $result_code = $object->kill;
Ace/Object.pm view on Meta::CPAN
=head2 date_style() method
   $object->date_style('ace');
This is a convenience method that can be used to set the date format
for all objects returned by the database.  It is exactly equivalent to
   $object->db->date_style('ace');
Note that the text representation of the date will change for all
objects returned from this database, not just the current one.
=head2 isRoot() method
    print "Top level object" if $object->isRoot;
This method will return true if the object is a "top level" object,
that is the root of an object tree rather than a subtree.
=head2 model() method
Ace/Object.pm view on Meta::CPAN
#   return;
# }
sub isComment {
  my $self = shift;
  return 1 if $self->class eq 'Comment';
  return;
}
################# add a new row #############
#  Only changes local copy until you perform commit() #
#  returns true if this is a valid thing to do #
sub add_row {
  my $self = shift;
  my($tag,@newvalue) = rearrange([['TAG','PATH'],'VALUE'],@_);
  # flatten array refs into array
  my @values = map { ref($_) && ref($_) eq 'ARRAY' ? @$_ : $_ } @newvalue;
  # make sure that this entry doesn't already exist
  unless ($tag =~ /\./) {
Ace/Object.pm view on Meta::CPAN
  } else {
    $p->{'.right'} = $value->{'.right'};
  }
  push(@{$self->{'.update'}},map { join(' ',@tags,$_) } split("\n",$value->asAce));
  delete $self->{'.PATHS'}; # uncache cached values
  $self->_dirty(1);
  1;
}
################# delete a portion of the tree #############
# Only changes local copy until you perform commit() #
#  returns true if this is a valid thing to do.
sub delete {
  my $self = shift;
  my($tag,$oldvalue,@rest) = rearrange([['TAG','PATH'],['VALUE','OLDVALUE','OLD']],@_);
  # flatten array refs into array
  my @values;
  @values = map { ref($_) && ref($_) eq 'ARRAY' ? @$_ : $_ } ($oldvalue,@rest) 
    if defined($oldvalue);
Ace/Object.pm view on Meta::CPAN
  push(@{$self->{'.update'}},join(' ','-D',
				 map { Ace->freeprotect($_) } ($self->_split_tags($tag),@values)));
  delete $self->{'.PATHS'}; # uncache cached values
  $self->_dirty(0);
  $self->db->file_cache_delete($self);
  1;
}
################# delete a portion of the tree #############
# Only changes local copy until you perform commit() #
#  returns true if this is a valid thing to do #
sub replace {
  my $self = shift;
  my($tag,$oldvalue,$newvalue,@rest) = rearrange([['TAG','PATH'],
						  ['OLDVALUE','OLD'],
						  ['NEWVALUE','NEW']],@_);
    $self->delete($tag,$oldvalue);
    $self->add($tag,$newvalue,@rest);
    delete $self->{'.PATHS'}; # uncache cached values
    1;
}
# commit changes from local copy to database copy
sub commit {
  my $self = shift;
  return unless my $db = $self->db;
  
  my ($retval,@cmd);
  my $name = $self->{'name'};
  return unless defined $name;
  
  $name =~ s/([^a-zA-Z0-9_-])/\\$1/g;
  return 1 unless exists $self->{'.update'} && $self->{'.update'};
Ace/Object.pm view on Meta::CPAN
  }
  return if $Ace::Error;
  undef $self->{'.update'};
  # this will force a fresh retrieval of the object
  # and synchronize our in-memory copy with the db
  delete $self->{'.right'};
  delete $self->{'.PATHS'};
  return 1;
}
# undo changes
sub rollback {
    my $self = shift;
    undef $self->{'.update'};
    # this will force object to be reloaded from database
    # next time it is needed.
    delete $self->{'.right'};
    delete $self->{'.PATHS'};
    1;
}
Ace/Sequence.pm view on Meta::CPAN
=head2 absolute()
 $abs = $seq->absolute;
 $abs = $seq->absolute(1);
This method controls whether the coordinates of features are returned
in absolute or relative coordinates.  "Absolute" coordinates are
relative to the underlying source or reference sequence.  "Relative"
coordinates are relative to the I<Ace::Sequence> object.  By default,
coordinates are relative unless new() was provided with a reference
sequence.  This default can be examined and changed using absolute().
=head2 automerge()
  $merge = $seq->automerge;
  $seq->automerge(0);
This method controls whether groups of features will automatically be
merged together by the features() call.  If true (the default), then
the left and right end of clones will be merged into "clone" features,
introns, exons and CDS entries will be merged into
	2. Can now redirect to other class.
	3. Numerous enhancements to Ace::Graphics glyphs, including directional glyphs.
1.75
	1. Fixed a bad bug involving inability to index into portions of the subtree anchored by
		numeric 0.
	2. Added the -filled argument to autogenerated methods (big win).
	3. Added -coordinates and -getcoordinates arguments to asGif() to support scrolling 
	   and zooming images.
1.71
	1. Fixed the Ace::Sequence _make_filter() function to respect the value of automerge()
	2. Made it possible to change the color of introns and exons depending on curation status
		(will need more work)
	3. Fixed Ace::Sequence to correctly report start and end of alignment targets when viewed
		from the perspective of a reversed reference sequence (order swapped).
1.70	3/5/2001
	1. Folded AceBrowser functionality into package.
	2. Added GD graphics.
1.69	10/17/2000
	1. fixes to url processing
1.67	9/5/2000
	1. Many updates to support socket server.
	You now only have to do this:
		$sequence = $clone->Sequence
	2. Removed some uninitialized variable warnings from Ace::Sequence
1.60	11/01/99
	1. Fixed suspended giface processes when using iterators.
	2. Added explicit close() method.
1.59	9/8/99
	1. Patches to Ace::Local & Ace::Object from Tim Cutts <tim.cutts@incyte.com> 
		to improve efficiency.
1.58	8/3/99
	1. Tiny change in Model.pm to accomodate @tags.
1.57	7/22/99
	1. 1.56 was contaminated with leftover rpc* files in the ace/ subdirectory, this causes
		builds on several architectures to fail.
	2. Fixed "ambiguous variable" warnings in the regression tests.
1.56	7/9/99
	1. Added Ace::Sequence, Ace::Sequence::Feature and Ace::Sequence::Feature classes
	2. Added Ace::Sequence::Multi class
	3. Regression tests now point to stein.cshl.org
	4. Added more documentation, including more acedb/aceserver hints
	5. Added more makefiles
	4. ace.pl added to exampe directory
	5. new patch file adds a few essential bug fixes to ace 4_5e.
	6. asGIF() method is now documented
	7. updated patchfile to include "phoenix effect" aceserver bug
	
1.37    1. Added timestamp and comment handling.
	2. Added -filled and -chunksize arguments to fetch_many().
	3. Quashed a bug in list(-filled).
	4. More regression tests.
	
1.36	6/6/98 Substantial API changes:
	1. row() now returns everything to the right of the current object INCLUSIVE
	of the object.  Calling row() in a scalar context returns the size of the
	array, not the first member of the array.
	2. col() now takes an optional numeric argument indicating how far to the
	right in the tree to go.  Specifically col(2) implements tag[2] semantics.
	3. search() now takes an optional numeric argument indicating how
 	far to the right in the tree to go before retrieving the column.
	Specifically, search($tag,2) implements tag[2] semantics.
	5. fetch() now takes an optional tag argument which will be followed
	prior to fetching from the database.  $obj->fetch('Laboratory') will
	return the Laboratory object.
	6. tace can be used to access local databases, by passing a -path
 	argument to the Ace::connect() method.
	7. dates are displayed in Java style (3 March 1998 hh:mm:ss) by 
	default.  This can be altered with a call to Ace::date_style().
	8. Default port has changed to 23456
1.34    5/20/98 Fixed bug in Ace.xs caused by 1.33 change!  Only some objects
	were retrieved by fetch().
1.33    5/19/98 Fixed bug in Ace.xs that caused client to crash on "quit" query.
1.01	3/20/98 Fixed bug in _appendToTable() routine that caused asHTML to hang.
1.00	2/25/98 First released version
This is version 1.86 of AcePerl, a Perl interface for the ACEDB
object-oriented database.  Designed specifically for use in genome
sequencing projects, ACEDB provides powerful modeling and management
services for biological and laboratory data.  For others, it is a good
open source introduction to the world of object-oriented databases
See the ChangeLog for important notices, including recent user
interfaces changes.  Please see DISCLAIMER.txt for disclaimers of
warranty.
INSTALLATION:
In addition to this package, you will need Perl 5.00503 or higher
(5.6.0 or higher recommended), and the Digest::MD5 module.  Both are
available on CPAN (http://www.cpan.org).
If you are using AcePerl to communicate with WormBase, a public server
is running on host aceserver.cshl.org, port 2005.  You can open a
4. make
   This will build the ACEDB client library, libaceperl.a, in the ace
   subdirectory.  It will then link in the Perl client subs.
5. make test (optional)
   You may "make test" to test the system.  It will attempt to open a
   connection to a database at beta.crbm.cnrs-mop.fr:20000100.  You may
   change these defaults by setting the environment variables ACEDB_HOST
   and ACEDB_PORT, or by defining them on the command line, as in:
    make test ACEDB_HOST=localhost ACEDB_PORT=200005
   However, since some of the tests are dependent on specific values in
   the database, this may cause some tests to fail.  Do not be alarmed if
   a handful of tests fail.  Do be alarmed if all of the tests fail.
  6. make install
  and this tree is usually not writable by mere mortals.  Do not
  despair: see the next section.
INSTALLING ACEPERL IN A NON-STANDARD LOCATION
By default, Perl will install AcePerl's library files within the
site-specific subdirectory of its library tree, usually
/usr/local/lib/perl5/site_perl.  If you wish, you can install the
library files elsewhere.
Simply change to the AcePerl distribution directory and run the
Makefile.PL script with the INSTALLSITELIB switch set to the full path 
of the directory you want to install into:
  perl Makefile.PL INSTALLSITELIB=/path/to/library
Then "make" and "make install" as described before.  You will now have
to tell Perl where to find AcePerl.  You can do this on a
script-by-script basis, or by defining an environment variable that
will affect all scripts.
To tell a single script where to find AcePerl, add a "use lib" line
to your script.  Put it _before_ the "use Ace" line:
  use lib /path/to/library;
  use Ace;
To change Perl's library search path so that it finds AcePerl
automatically, define the PERL5LIB environment variable in your
.login, .cshrc or .profile script.  PERL5LIB is a colon-delimited list 
of directories in which Perl will search for included libraries.  For
example:
  setenv PERL5LIB "/path/to/library";
If AcePerl was built as part of the main Ace distribution, you will
want to define PERL5LIB to be the location of the machine-specific 
build directory.  For example:
README.ACEBROWSER view on Meta::CPAN
it will generate an internal server error.  The location of the
configuration files directory is stored in the module
Ace::Browser::LocalSiteDefs, typically somewhere inside the
"site_perl" subdirectory of the Perl library directory (use "perl -V"
to see where that is).  You can find out where Acebrowser expects to
find its configuration files by running the following command:
  perl -MAce::Browser::LocalSiteDefs \
       -e 'print $Ace::Browser::LocalSiteDefs::SITE_DEFS,"\n"'
To change this value, either reinstall Aceperl or edit
LocalSiteDefs.pm manually.
EDITING THE CONFIGURATION FILE
The settings in the default.pm configuration file distributed with
AcePerl should work with little, if any modification.  The following
variables may need to be tweaked:
  $ROOT = '/cgi-bin/ace';
This is the root (top level) for all the Acebrowser CGI scripts.
Change this if necessary.
 $DOCROOT = '/ace';
This is the root (top level) for all of Acebrowser's static HTML files
and images.  You will need to change this if the static files are
installed somewhere else.
 $ICONS = "$DOCROOT/ico";
This is where Acebrowser expects to find its icons. This subdirectory
holds icons and other small static images.  Note how the
previously-defined $DOCROOT variable is used.  You will probably not
need to change this.
 $IMAGES = "$DOCROOT/images";
This is where Acebrowser expects to find its "images" subdirectory.
This directory contains images generated dynamically by the ACEDB
database.  It *must* be writable by the web server user, usually
"nobody".  When the AcePerl install script creates this directory, it
makes it world-writable by default.  You may prefer to make it owned
by the "nobody" user and/or group.
README.ACEBROWSER view on Meta::CPAN
 $USERNAME = '';
 $PASSWORD = '';
For password-protected ACEDB databases, these variables contain the
username and password.
 $STYLESHEET = "$DOCROOT/stylesheets/aceperl.css";
This is the cascading stylesheet used to set the background color,
font, table colors, and so forth.  You probably don't need to change
this, but you might want to modify the stylesheet itself.
 @PICTURES = ($IMAGES => "$HTML_PATH/images");
This array indicates the location of the "images" subdirectory.  The
first element of the array is the location of the directory as a URL,
and the second element is the location of the directory as a physical
path on the file system.  This array is ignored when running under
modperl/Apache::Registry; modperl uses $IMAGES to look up the
corresponding physical path.
README.ACEBROWSER view on Meta::CPAN
As described in EXTENDING ACEBROWSER, the URL_MAPPER subroutine allows
you to tinker with the way in which Acedb classes are turned into
links.
 $BANNER = <<END;
 <center><span class=banner><font size=+3>Default Database</font></span></center><p>
 END
The $BANNER variable contains HTML text that will be displayed at the
top of each generated page.  You will probably want to change this.
 $FOOTER = '';
The $FOOTER variable contains HTML text that is displayed at the
bottom of each generated page.  You will probably want to change this.
 $PRINT_PRIVACY_STATEMENT = 1;
If this variable is set to true, then AceBrowser will generate a link
in the footer that displays a privacy statement explaining
AceBrowser's use of cookies.
 @FEEDBACK_RECIPIENTS = (
			[ " $ENV{SERVER_ADMIN}", 'general complaints and suggestions', 1 ]
 );
README.ACEBROWSER view on Meta::CPAN
each object has a class, such as "Sequence".  Acebrowser takes
advantage of this object structure by allowing you to assign one or
more displays to a class.  Each display is a CGI script that fetches
the desired object from the database, formats it, and displays it as
HTML or an image.
Whenever Acebrowser is called upon to display an object, it consults
the configuration file to determine what displays are registered for
the object, and then presents a row of display names across the top of
the window.  In Acebrowser jargon, this line of displays is called the
"type selector."  The user can change the display to use by selecting
the corresponding link.
Three generic displays, which will work with all databases, come with
Acebrowser:
  tree  an HTML representation of the Acedb object which
	presents the object in the form of a collapsible outline.
  xml   an XML representation of the Acedb object
acebrowser/htdocs/index.html view on Meta::CPAN
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>AceBrowser</title>
<link rel="stylesheet" href="stylesheets/aceperl.css" />
</head>
<body>
<h1>AceBrowser Default Page</h1>
<p>
This is the default page installed by AceBrowser.  You'd better change it!
</p>
<p>
If you have stored the cgi-bin scripts at the URL
http://your.host/cgi-bin/ace, then the following links should work.
Otherwise change them as appropriate.  </p>
<ol>
  <li><a href="/cgi-bin/ace/searches/text">Text Search</a>
  <li><a href="/cgi-bin/ace/searches/browser">Class Browser</a>
  <li><a href="/cgi-bin/ace/searches/query">Ace Query</a>
</ol>
<hr>
<address><a href="http://stein.cshl.org/AcePerl">AcePerl Home Page</a></address>
acelib/freesubs.c view on Meta::CPAN
 
  if (!length)
    length = 40 ;
  return length ;
 }
 
/****************/
 
BOOL freecheck (char *fmt)
        /* checks that whatever is in card fits specified format
           note that 't' format option changes card by inserting a '"' */
 {unsigned char *keep = pos ;
  union {int i ; float r ; double d ;}
          target ;
  char *fp ;
  unsigned char *start ;
  int nquote = 1 ;
 
  for (fp = fmt ; *fp ; ++fp)
    switch (*fp)
     {
acelib/helpsubs.c view on Meta::CPAN
      return filename;
    }
  return NULL;			/* failure - no file found */
} /* helpSubjectGetFilename */
/************************************************************/
/* helpPackage utility to find out the filename of a given
   link reference. Absolute filenames are returned unchanged,
   but relative filenames are expanded to be the full path
   of the helpfile. Can be used for html/gif files referred to
   by the HREF of anchor tags or the SRC or IMG tags */
/* NOTE: the pointer returned is a static copy, which is
   re-used everytime it is called. If the calling function
   wants to mess about with the returned string, a copy
   has to be made.
   NULL is returned if the resulting file can't be opened.
   the calling function can inspect the result of
acelib/menu.c view on Meta::CPAN
 *-------------------------------------------------------------------
 * This file is part of the ACEDB genome database package, written by
 * 	Richard Durbin (MRC LMB, UK) rd@mrc-lmb.cam.ac.uk, and
 *	Jean Thierry-Mieg (CRBM du CNRS, France) mieg@kaa.cnrs-mop.fr
 *
 * Description:
 * Exported functions: all in menu.h
 * HISTORY:
 * Last edited: Dec  4 11:28 1998 (fw)
 * * Jan  9 22:52 1995 (rd): complete replacement for new menu package
 * * Jul 23 21:53 1992 (rd): big change because of new menus
     must have a separate MENUOPT* for each combination of entries
 * Created: Mon Jun 15 14:43:55 1992 (mieg)
 *-------------------------------------------------------------------
 */
/* $Id: menu.c,v 1.1 2002/11/14 20:00:06 lstein Exp $ */
 
#include "regular.h"
#include "call.h"		/* for call() and callExists() */
#include "menu_.h"		/* private header for menu package */
acelib/menu.c view on Meta::CPAN
  if (item->submenu)
    menuDestroy (item->submenu) ;
  messfree (item) ;
  return TRUE ;
}
BOOL menuSelectItem (MENUITEM item)
{
  BOOL changed = FALSE ;
  if (item->flags & (MENUFLAG_DISABLED | MENUFLAG_SPACER))
    return FALSE ;
  if (item->func)	/* call back user with old flags state */
    (*item->func)(item) ;
  else if (item->call)
    call (item->call, item) ;
  if (item->flags & MENUFLAG_TOGGLE)
    { item->flags ^= MENUFLAG_TOGGLE_STATE ;
      changed = TRUE ;
    }
  else if (!(item->flags & MENUFLAG_RADIO_STATE))
    { MENUITEM first, last ;
      for (first = item ; 
	   first && !(first->flags & MENUFLAG_START_RADIO) ; 
	   first = first->up) ;
      for (last = item ; 
	   last && !(last->flags & MENUFLAG_END_RADIO) ; 
	   last = last->down) ;
      if (first && last)
	{ while (first != last)
	    { first->flags &= ~MENUFLAG_RADIO_STATE ;
	      first = first->down ;
	    }
	  item->flags |= MENUFLAG_RADIO_STATE ;
	  changed = TRUE ;
	}
    }
  return changed ;
}
/***************** set item properties *******************/
BOOL menuSetCall (MENUITEM item, char *callName)
{ if (!item || !callExists (callName)) return FALSE ;
  item->call = callName ; return TRUE ;
}
BOOL menuSetFunc (MENUITEM item, MENUFUNCTION func)
acelib/messubs.c view on Meta::CPAN
 *
 * HISTORY:
 * Last edited: Nov 27 15:36 1998 (fw)
 * * Nov 19 13:26 1998 (edgrif): Removed the test for errorCount and messQuery
 *              in messerror, really the wrong place.
 * * Oct 22 15:26 1998 (edgrif): Replaced strdup's with strnew.
 * * Oct 21 15:07 1998 (edgrif): Removed messErrorCount stuff from graphcon.c
 *              and added to messerror (still not perfect), this was a new.
 *              bug in the message system.
 * * Sep 24 16:47 1998 (edgrif): Remove references to ACEDB in messages,
 *              change messExit prefix to "EXIT: "
 * * Sep 22 14:35 1998 (edgrif): Correct errors in buffer usage by message
 *              outputting routines and message formatting routines.
 * * Sep 11 09:22 1998 (edgrif): Add messExit routine.
 * * Sep  9 16:52 1998 (edgrif): Add a messErrorInit function to allow an
 *              application to register its name for use in crash messages.
 * * Sep  3 11:32 1998 (edgrif): Rationalise strings used as prefixes for
 *              messages. Add support for new messcrash macro to replace
 *              messcrash routine, this includes file/line info. for
 *              debugging (see regular.h for macro def.) and a new
 *              uMessCrash routine.
 * * Aug 25 14:51 1998 (edgrif): Made BUFSIZE enum (shows up in debugger).
 *              Rationalise the use of va_xx calls into a single macro/
 *              function and improve error checking on vsprintf.
 *              messdump was writing into messbuf half way up, I've stopped
 *              this and made two buffers of half the original size, one for
 *              messages and one for messdump.
 * * Aug 21 13:43 1998 (rd): major changes to make clean from NON_GRAPHICS
 *              and ACEDB.  Callbacks can be registered for essentially
 *              all functions.  mess*() versions continue to centralise
 *              handling of ... via stdarg.
 * * Aug 20 17:10 1998 (rd): moved memory handling to memsubs.c
 * * Jul  9 11:54 1998 (edgrif): 
 *              Fixed problem with SunOS not having strerror function, system
 *              is too old to have standard C libraries, have reverted to
 *              referencing sys_errlist for SunOS only.
 *              Also fixed problem with getpwuid in getLogin function, code
 *              did not check return value from getpwuid function.
acelib/messubs.c view on Meta::CPAN
/*******************************/
/* Use this function for errors that while being unrecoverable are not a     */
/* problem with the acedb code, e.g. if the user starts xace without         */
/* specifying a database.                                                    */
/* Note that there errors are logged but that this routine will exit without */
/* any chance to interrupt it (e.g. the crash routine in uMessCrash), this   */
/* could be changed to allow the application to register an exit handler.    */
/*                                                                           */
UTIL_FUNC_DEF void messExit(char *format, ...)
  {
  char *prefix = EXIT_PREFIX ;
  char *mesg_buf = NULL ;
  va_list args ;
  /* Format the message string.                                              */
  ACEFORMATSTRING(args, format, mesg_buf, prefix, NULL, 0) ;
acelib/rpcace.x view on Meta::CPAN
  };
 
union ace_reponse switch ( int ernumber) {
case 0:
  ace_data    res_data;
default:
  void;
};
/*
** Please don't change this !!!
*/
program RPC_ACE {
  version RPC_ACE_VERS   {
    ace_reponse  ACE_SERVER(ace_data) = 1;
  } = 1;
} = RPC_PORT ;
/* const RPC_ANYSOCK = rpc_socket;  */
acelib/texthelp.c view on Meta::CPAN
         fall back on oldhelp
         callMosaic if (http:)
         use freeout for server
         jaime's file name rotation
         remaining problem: help topic in tace should be case-insensitive
 * * May  1 18:24 1996 (fw): fixed freePage() to avoid mem leaks
 * * Apr 30 16:18 1996 (fw): fixed #ifdef NON_GRAPHICs for tace
 * * Apr 30 16:18 1996 (fw): added image dictionary
 * * Apr 29 12:37 1996 (fw): added handling of <DL> lists
 * * Apr 25 16:27 1996 (fw): added <IMG > tag
 * * Apr 22 17:43 1996 (fw): changed help system to HTML browser
 * Created: Thu Feb 20 14:49:50 1992 (mieg)
 *-------------------------------------------------------------------
 */
/* $Id: texthelp.c,v 1.1 2002/11/14 20:00:06 lstein Exp $ */
#ifndef MACINTOSH
/********************************************************************/
#include "help_.h"
#include "freeout.h"
acelib/texthelp.c view on Meta::CPAN
		      /* fill gap with spaces and also overwrite TAB
			 with a space */
		      for (ii = i; ii <= stringpos; ++ii)
			buf[ii] = ' ' ;
		      i = stringpos ;
		    }
		  ++i ;
		}
      /* don't use len, it might have changed when inserting spaces */
	      if (buf[strlen(buf)-1] == '\n')
		{
		  buf[strlen(buf)-1] = 0 ;
		  freeOutf ("%s", buf) ;
		  xPos += strlen(buf) ;
		  newTextLine ();	/* for the '\n' */
		}
	      else
		{
		  freeOutf ("%s", buf) ;
acelib/timesubs.c view on Meta::CPAN
      now be used in the same way as _Int _Float in models.wrm
 * HISTORY:
 * Last edited: Nov 27 13:19 1998 (fw)
 * * Jul  9 17:23 1998 (fw): added timeComparison() function for < , = and > operators
 * * Jul  8 15:49 1998 (fw): added timeDiff functions for mins,hours,months,years
                             as required by the new AQL date-functions
 * * Jan 29 22:31 1995 (rd): allow "today"  like "now", for day only
 * * Nov 13 19:04 1994 (rd): allow date abbreviations, and rename 
 	consistently, and removed timeStamp, dateStamp
 * * Jun 21 17:12 1992 (mieg): changed : to _ in time stamped
   : was preventing the file chooser from reading in a dump file
 * * Jan 20 10:46 1992 (mieg): Fixed  timeStamp, dateStamp
    and removed everything else with an ifdef
 * Created: a long time ago
 *-------------------------------------------------------------------
 */
/* $Id: timesubs.c,v 1.1 2002/11/14 20:00:06 lstein Exp $ */
#include "regular.h"
acelib/wh/help.h view on Meta::CPAN
UTIL_FUNC_DCL char *helpGetDir (void);
/* find the /whelp/ dir if possible, returns pointer to path
   If called for the first time without prior helpSetDir(),
   it will try to init to whelp/, but return 0 if it is not
   accessible*/
UTIL_FUNC_DCL BOOL  helpPrint (char *helpFilename);
/* dump helpfile as text - default for helpOn, 
   if helpOnRegister wasn't called to change it. */
UTIL_FUNC_DCL BOOL  helpWebBrowser(char *link);
/* counter-part to graphWebBrowser(), which remote-controls 
   netscape using the -remote command line option. Useful
   for textual applications running in an X11 environment,
   where x-apps can be called from within the applcation,
   but the Xtoolkit (used to drive netscape via X-atoms)
   shoiuldn't be linked in, because it is a textual app. */
acelib/wh/menu.h view on Meta::CPAN
MENUITEM menuCreateItem (char *label, MENUFUNCTION func) ;
MENUITEM menuItem (MENU menu, char *label) ;  
	/* find item from label */
BOOL menuAddItem (MENU menu, MENUITEM item, char *beforeLabel) ;
	/* add an item; if before == 0 then add at end */
BOOL menuDeleteItem (MENU menu, char *label) ; 
	/* also destroys item */
BOOL menuSelectItem (MENUITEM item) ;
        /* triggers a call back and adjusts toggle/radio states */
        /* returns true if states changed - mostly for graph library to use */
	/* calls to set properties of items */
	/* can use by name e.g. menuSetValue (menuItem (menu, "Frame 3"), 3) */
BOOL menuSetCall (MENUITEM item, char *callName) ;
BOOL menuSetFunc (MENUITEM item, MENUFUNCTION func) ;
BOOL menuSetFlags (MENUITEM item, unsigned int flags) ;
BOOL menuUnsetFlags (MENUITEM item, unsigned int flags) ;
BOOL menuSetValue (MENUITEM item, int value) ;
BOOL menuSetPtr (MENUITEM item, void *ptr) ;
BOOL menuSetMenu (MENUITEM item, MENU menu) ; /* pulldown for boxes */
acelib/wh/mystdlib.h view on Meta::CPAN
 * HISTORY:
 * Last edited: Dec  4 16:03 1998 (fw)
 * * Feb  6 14:04 1997 (srk)
 * * Jun 11 16:46 1996 (rbrusk): WIN32 tace fixes
 * * Jun 10 17:46 1996 (rbrusk): strcasecmp etc. back to simple defines...
 * * Jun  9 19:29 1996 (rd)
 * * Jun 5 15:36 1996 (rbrusk): WIN32 port details
 *	-	Added O/S specific pathname syntax token conventions as #defined symbols
 * * Jun 5 10:06 1996 (rbrusk): moved X_OK etc. from filsubs.c for IBM
 * Jun  4 23:33 1996 (rd)
 * * Jun  4 21:19 1996 (rd): WIN32 changes
 * Created: Fri Jun  5 18:29:09 1992 (mieg)
 *-------------------------------------------------------------------
 */
/* $Id: mystdlib.h,v 1.1 2002/11/14 20:00:06 lstein Exp $ */
#ifndef DEF_MYSTDLIB_H
#define DEF_MYSTDLIB_H
/* below needed for MAXPATHLEN */
acelib/wh/mystdlib.h view on Meta::CPAN
#endif
/************** #endif !defined(WIN32) *************************/
  /*<<--neil 16Sep92: to avoid using values.h*/
#define ACEDB_MAXINT 2147483647
#define ACEDB_MINDOUBLE 1.0e-305
#define ACEDB_LN_MINDOUBLE -700
/* The next few are designed to determine how the compiler aligns structures,
   not what we can get away with; change only if extreme circumstances */
#define INT_ALIGNMENT (sizeof(struct{char c; int i; }) - sizeof(int))
#define DOUBLE_ALIGNMENT (sizeof(struct {char c; double d; }) - sizeof(double))
#define SHORT_ALIGNMENT (sizeof(struct {char c; short s; }) - sizeof(short))
#define FLOAT_ALIGNMENT (sizeof(struct {char c; float f; }) - sizeof(float))
#define PTR_ALIGNMENT (sizeof(struct {char c; void *p; }) - sizeof(void *))
/* Constants for store alignment */
/* These are defined as follows:
acelib/wh/mystdlib.h view on Meta::CPAN
#define MAXPATHLEN        _MAX_PATH
#define popen _popen
#define pclose _pclose
/* rename to actual WIN32 built-in functions
* (rbrusk): this little code generated a "trigraph" error message
* when built in unix with the gcc compiler; however, I don't understand
* why gcc even sees this code, which is #if defined(WIN32)..#endif protected.
* Changing these to macros is problematic in lex4subs.c et al, which expects
* the names as function names (without parentheses.  So, I change them back..
* If the trigraph error message returns, look for another explanation,
* like MSDOS carriage returns, or something? */
#define strcasecmp  _stricmp 
#define strncasecmp  _strnicmp 
#endif /* WIN32 */
#else  /* not POSIX etc. e.g. SUNOS */
/* local versions of general types */
docs/ACEDB.HOWTO view on Meta::CPAN
executables into it:
	1) cd ~acedb
	2) mkdir bin
	3) cd ~/acedb (where the source code was compiled)
	4) cd bin.LINUX_4 (or whatever)
	5) cp xace tace giface saceserver sgifaceserver makeUserPasswd ~acedb/bin/
Now put ~acedb/bin on your path so that the Ace::Local module can find
the giface and tace programs.  This usually involves editing .cshrc or
.bashrc to change the PATH variable.  (See your system administrator
if you don't know how to do this).
CREATING DATABASES
Each ACeDB database lives in a separate subdirectory, which I
conventionally place under ~acedb/.  You will often be installing a
compressed database archive, such as the C. elegans database (see the
NCBI FTP site).  In this case, simply unpack the database into the
~acedb/ directory.  Programs like xace, tace, and the servers will
refer to the database by its path. Within the database directory
docs/ACEDB.HOWTO view on Meta::CPAN
see instead a directory named xinetd.d/ then you are using xinetd.
1) Configuring for inetd:
  a) Find the file /etc/services, and add the following line to the
      end of the file:
     elegans   5000/tcp
     This is defining a new service named "elegans" which runs on
     port 5000.  You can change this symbolic name to anything you
     like.  If you have multiple acedb databases running, give each
     one a distinctive name and port number.  Avoid using any port
     numbers that are already mentioned in the file.
   b) Find the file /etc/inetd.conf, and add the following line:
    elegans  stream  tcp wait acedb  /usr/local/acedb/bin/sgifaceserver
            sgifaceserver /usr/local/acedb/elegans
    This is all one line, but has been word-wrapped to fit.
docs/ACEDB.HOWTO view on Meta::CPAN
      ~acedb/elegans/database/serverlog.wrm
2) Configuring for xinetd:
  a) Find the file /etc/services, and add the following line to the
      end of the file:
     elegans   5000/tcp
     This is defining a new service named "elegans" which runs on
     port 5000.  You can change this symbolic name to anything you
     like.  If you have multiple acedb databases running, give each
     one a distinctive name and port number.  Avoid using any port
     numbers that are already mentioned in the file.
  b) Find the directory /etc/xinetd.d.  Create a file named after
     the service chosen in (a) containing these contents:
        # file: elegans
	# default: on
        # description: C. elegans acedb database
docs/GFF_Spec.html view on Meta::CPAN
tools like grep, sort and simple perl and awk scripts could easily
extract information out of the file.  For these reasons, for the
primary format, we propose a record-based structure, where each
feature is described on a single line, and line order is not relevant.
<P>
We do not intend GFF format to be used for complete data management of
the analysis and annotation of genomic sequence.  Systems such as
Acedb, Genotator etc. that have much richer data representation
semantics have been designed for that purpose.  The disadvantages in
using their formats for data exchange (or other richer formats such as
ASN.1) are (1) they require more complexity in parsing/processing, (2)
there is little hope on achieving consensus on how to capture all
information.  GFF is intentionally aiming for a low common
denominator. <P>
Here are some example records:
<pre>
SEQ1	EMBL	atg	103	105	.	+	0
SEQ1	EMBL	exon	103	172	.	+	0
docs/GFF_Spec.html view on Meta::CPAN
<P>
Back to <A HREF="#TOC">Table of Contents</A>
<P>
<HR>
<A NAME="version_2_update"><h2>Version 2 GFF Update</h2></A>
<P>
<FONT COLOR="#8F2020"><b>ALERT 98/12/16</b>: Following discussions with Lincoln Stein and others, we
propose the Version 2 format of GFF, as specifically described in 
this document. The Version 2 specification has not yet been frozen and 
is presented as a "work-in-progress" at this time, open to
user feedback on the proposed changes (plus other suggestions for improvement).
The main change from Version 1 to Version 2 is the requirement for a tag-value
type structure (essentially .ace format) for any additional material on the
line, following the mandatory fields.  We also now 
allow '.' as a score, for features for which there is no score.  Dumping in version
2 format is implemented in ACEDB.  Changes in the remainder of this
document are described and marked as (<b>Version 2 changes</b>).
</FONT>
<P>
<P>
Back to <A HREF="#TOC">Table of Contents</A>
<P>
<HR>
<A NAME="fields"><h2>Definition</h2></A>
Fields are:
<seqname> <source> <feature> <start> <end> <score> <strand> <frame> [group]>[comments] <P>
docs/GFF_Spec.html view on Meta::CPAN
indicate the program making the prediction, or if it comes from public
database annotation, or is experimentally verified, etc.<P>
 <dt><feature> 
 <dd> The feature type name.  We hope to suggest a standard set of
features, to facilitate import/export, comparison etc..  Of course,
people are free to define new ones as needed.  For example, Genie
splice detectors account for a region of DNA, and multiple detectors
may be available for the same site, as shown above.<P>
<A name="standard_feature_table">
(<b>Version 2 change</b>: <u>Standard Table of Features</u> - 
we would like to enforce a standard nomenclature for
common GFF features. This does not forbid the use of other features,
rather, just that if the feature is obviously described in the standard
list, that the standard label should be used. For this standard table
we propose to fall back on the international public standards for genomic 
database feature annotation, specifically, the 
<a href="http://www.ebi.ac.uk/ebi_docs/embl_db/ft/feature_key_ref.html">
DDBJ/EMBL/GenBank feature table</a>).<P>
 <dt><start>, <end>
 <dd> Integers.  <start> must be less than or equal to
<end>.  Sequence numbering starts at 1, so these numbers
should be between 1 and the length of the relevant sequence,
inclusive. (<b>Version 2 change</b>: version 2 condones values of
<start> and <end> that extend outside the
reference sequence.  This is often more natural when dumping from
acedb, rather than clipping.  It means that some software using the
files may need to clip for itself.)<P>
 <dt><score> 
 <dd> A floating point value.  When there is no score (i.e. for a
sensor that just records the possible presence of a signal, as for the
EMBL features above) you should use '.'. (<b>Version 2 change</b>: in
version 1 of GFF you had to write 0 in such circumstances.)<P>
 <dt><strand> 
 <dd> One of '+', '-' or '.'.  '.' should be used when
strand is not relevant, e.g. for dinucleotide repeats.<P>
 <dt><frame>
 <dd> One of '0', '1', '2' or '.'.  '0' indicates that the specified
region is in frame, i.e. that its first base corresponds to the first
base of a codon.  '1' indicates that there is one extra base,
docs/GFF_Spec.html view on Meta::CPAN
It has been pointed out that "phase" might be a better descriptor than
"frame" for this field.<P>
 <dt><A NAME="group_field">[group] </A>
 <dd> An optional string-valued field that can be used as a name to
group together a set of records.  Typical uses might be to group the
introns and exons in one gene prediction (or experimentally verified
gene structure), or to group multiple regions of match to another
sequence, such as an EST or a protein.  See below for examples.<br>
<b>Version 2 change</b>: In version 2, the optional [group] field on the line
must have an tag value structure following the syntax used within
objects in a .ace file, flattened onto one line by semicolon
separators.  Tags must be standard identifiers
([A-Za-z][A-Za-z0-9_]*).  Free text values must be quoted with double
quotes. <em>Note: all non-printing characters in such free text value strings
(e.g. newlines, tabs, control characters, etc)
must be explicitly represented by their C (UNIX) style backslash-escaped
representation (e.g. newlines as '\n', tabs as '\t').</em>
As in ACEDB, multiple values can follow a specific tag.  The
aim is to establish consistent use of particular tags, corresponding
docs/GFF_Spec.html view on Meta::CPAN
dJ102G20 GD_mRNA coding_exon 7105 7201   .  - 2 Sequence "dJ102G20.C1.1"
</pre></font>
</dl>
All strings (i.e. values of the <seqname>,
<source> or <feature> fields) should be under 256
characters long, and should not include whitespace.  The whole line
should be under 32k long.  A character limit is not very desirable,
but helps write parsers in some languages. The slightly silly 32k
limit is to allow plenty of space for comments/extra data. <b>Version 2 change</b>:
field and line size limitations are removed; however, fields (except the optional
[group] field above) must still not include whitespace.
<P>
All of the above described fields should be separated by TAB characters ('\t').
<b>Version 2 note</b>: previous Version 2 permission to use arbitrary whitespace
as field delimiters is now <b>revoked</b>! (99/02/26)
<P>
<P>
Back to <A HREF="#TOC">Table of Contents</A>
docs/GFF_Spec.html view on Meta::CPAN
<A NAME="comments"><h3> Comments </h3>
Comments are allowed, starting with "#" as in Perl, awk etc.
Everything following # until the end of the line is ignored.
Effectively this can be used in two ways.  Either it must be at the
beginning of the line (after any whitespace), to make the whole line a
comment, or the comment could come after all the required fields on
the line.
<P>
We also permit extra information to be given on the line following the
group field without a '#' character (<b>Version 2 change</b>: this extra
information <B>must</B> be delimited by the '#' comment delimiter <B>OR</B>
by another tab field delimiter character, following 
any and all [group] field tag-value pairs). 
<P>
This allows extra method-specific information to be transferred with the line.  However,
we discourage overuse of this feature: better to find a way to do it
with more true feature lines, and perhaps groups. (<b>Version 2
change</b>: we gave in and defined a structured way of passing
additional information, as described above under [group].  But the
sentiment of this paragraph still applies - don't overuse the
tag-value syntax. The use of tag-value pairs (with whitespace) renders problematic the parsing of
Version 1 style comments (following the group field, without a '#' character), so in Version 2,
such [group] trailing comments <B>must</B> start with the "#", as noted above.
<A NAME="meta_info"><h4> ## comment lines for meta information </h4>
There is a set of standardised (i.e. parsable) ## line types that can
be used optionally at the top of a gff file.  The philosophy is a
little like the special set of %% lines at the top of postscript
files, used for example to give the BoundingBox for EPS files.<P>
Current proposed ## lines are:
<dl>
  <dt><pre> ##gff-version 1 </pre>
  <dd> GFF version - in case it is a real success and we want to
change it.  The current version is 2. (<b>Version 2 change</b>!)
  <dt><pre> ##source-version {source} {version text} </pre>
  <dd> So that people can record what version of a program or package was
used to make the data in this file. I suggest the version is text
 without whitespace.  That allows things like 1.3, 4a etc.
  <dt> <pre> ##date {date} </pre>
  <dd> The date the file was made, or perhaps that the prediction
programs were run.  We suggest to use astronomical format: 1997-11-08
for 8th November 1997, first because these sort properly, and second
docs/GFF_Spec.html view on Meta::CPAN
seq1	BLASTX	similarity	101	136	87.1	+	0	HBA_HUMAN
seq1	BLASTX	similarity	107	133	72.4	+	0	HBB_HUMAN
seq1	BLASTX	similarity	290	343	67.1	+	0	HBA_HUMAN
</pre></font>
If further information is needed about where in the target protein
each match occurs, it can be given after the protein name, e.g.
as the start coordinate in the target.
<P>
<b>Version 2 change</b>: In version 2 this has been formalised using
the tag Target which expects to be followed by the name of the target,
followed (optionally) by start and end point in the target as
integers, as in 
<font size="3"><pre>
seq1 BLASTX similarity 101 235 87.1 + 0    Target "HBA_HUMAN" 11 55 ; E_value 0.0003
</pre></font>
We need to finalise on a tag model for gapped alignments...
<P>
Back to <A HREF="#TOC">Table of Contents</A>
<P>
docs/GFF_Spec.html view on Meta::CPAN
<code>
    subscribe gff-list
</code>
<P>
<P>
Back to <A HREF="#TOC">Table of Contents</A>
<P>
<HR>
<A NAME="edit_history"><h2>Edit History</h2></A>
<P>
971028 rd: I changed the comment initiator to '#' from '//' because a 
single symbol is easier for simple parsers.<P>
971028 rd: We also now allow extra text after <group>
without a comment character, because this immediately proved useful.<P>
971028 rd: I considered switching from start-end notation to
start-length notation, on the suggestion of Anders Krogh.  This seems
nicer in many cases, but is a debatable point.  I then switched back!<P>
971028 rd: I added the section about name space.<P>
docs/GFF_Spec.html view on Meta::CPAN
meeting 971029.  There are two main reasons.  First, to help prevent
name space clashes -- each program would have their own source
designation.  Second, to help reuse feature names, so one could have
"exon" for exon predictions from each prediction program.<P>
971113 rd: added section on mailing list.<P>
980909 ihh: fixed some small things and put this page on the Sanger
GFF site.<P>
981216 rd: introduced version 2 changes.<P>
990226 rbsk: incorporated amendments to the version 2 specification as follows:<P>
<UL>
     <LI>Non-printing characters (e.g. newlines, tabs) in Version 2 double quoted
"free text values" must be explicitly represented by their C (UNIX) style 
backslash escaped character (i.e. '\t' for tabs, '\n' for newlines, etc.)<br>
     <LI>Removed field (256) and line (32K) character size limitations for Version 2.
     <LI>Removed arbitrary whitespace field delimiter permission from specification.
TAB ('\t') field delimiters now enforced again, as in Version 1.<br>
</UL>