FAQ
===

Why Python?
-----------

Well, the easiest answer is that I knew it, and it met the requirements.  The
more interesting answer, though, is a combination of things.  Python right now
has a lot of momentum behind it, particularly in the scientific community.
It's easy to compile, portable across many architectures, relatively simple to
write C-based exntesions for, and it's well-suited to rapid application
development.  With access to an interpreter, new avenues of data-exploration
are opened, and this can lead to much more rapid and interesting analysis.

.. _learn-python:

Where can I learn more about Python?
------------------------------------

There are several good, free books about Python available on the web.  The best
place to start is with the `official tutorial <http://docs.python.org/tut/>`_,
but there's also `Dive Into Python <http://www.diveintopython.org/>`_, an
entire `collection of videos <http://showmedo.com/videos/python?topic=beginner_programming>`_ on 
`ShowMeDo.com <http://showmedo.com/>`_, and a much more specific guide to using
`NumPy <http://www.scipy.org/Tentative_NumPy_Tutorial>`_, which is the backend
on which all the math done in yt is based.

As far as books go, the only book I've found to be absolutely indispensible is
the `Beazley Book <http://www.amazon.com/exec/obidos/ASIN/0735710910>`_.

There are also tutorials designed for Scientific computing, such as the
`tutorial at SC09 <http://www.mcs.anl.gov/~wscullin/python/tut/sc09/Site/Introduction.html>`_.

Who works on yt?
----------------

Matthew Turk is the lead developer, but Britton Smith, Jeff Oishi, Dave Collins
and Stephen Skory have all made substantive contributions.  For the full list,
see the ``CREDITS`` file.

What's up with the names?
-------------------------

In the book `Snow Crash <http://en.wikipedia.org/wiki/Snow_Crash>`_, yt is
Uncle Enzo's messenger.  Lagos is the keeper of the data, Raven is a master
slicer, and so on.  In version 2.0, many of these names will be eliminated when
the code base is reorganized.

Are there any restrictions on my use of yt?
-------------------------------------------

yt has been released under Version 3 of the 
`GNU General Public License <http://www.gnu.org/licenses/gpl.html>`_.

If you found it useful, and have extended it in some meaningful way, of course
I'd love to see your contributions so they can be shared with the community.
Additionally, if you use yt in a paper, I'd love it if you'd drop me a line to
let me know.

.. _units:

How do I know what the units returned are?
------------------------------------------

This is a very important question.  The derived fields -- and the native data
types -- are returned as CGS units, to the best knowledge of the code; but if
you see something that looks way off, you should investigate.  To see,
specifically, what yt is returning for a given field, you can do: ::

   print lagos.fieldInfo[some_field].units

and it will show you the units that have been assigned to it.

If you are defining your own derived field, you should assume that the units
given to the function you define are already in CGS.

That being said, if for some reason yt is unable to determine the correct units
for your simulation, it will notify you.  It knows how to parse output from
all of the versions of Enzo I have used or encountered, and the newest public
release is a target platform.  However, the Enzo and Orion codebases are so
diverse and -- at times -- fragmented that it is difficult if not impossible to
know that all the corner cases have been identified and handled.

.. _dot-yt-files:

What are all these .yt files?
-----------------------------

By default, yt attempts to serialize a couple pieces of data that help speed it
up in future invocations.  Specifically, the entire contents of the hierarchy,
the parent-child relationships between the grids, and any projections of the
entire volume that are made.  Furthermore, objects that have been saved to the
hierarchy are stored here as well.

.. _contributing:

How can I help?
---------------

If you find a bug, report it.  If you do something cool, write it up.  If you
find a place to improve the code, send in a patch.  We're very interested in
contributions!  There is a set of `hacking guidelines
<http://yt.enzotools.org/wiki/HackingGuidelines>`_ on the wiki.

.. _help:

Something has gone wrong.  What do I do?
----------------------------------------

Well, first off, double check that you're giving the code what it needs, and
not asking it for something it can't provide.  Use the ``help()`` command on
an object or a method to get more information.

If you can't figure out what's up, please go ahead and copy the resultant
traceback information (the error message it prints out) along with any log
files, and either send an email to the ``yt-users`` mailing list (subscribe
first!) or attach them to a ticket at `<http://yt.enzotools.org/>`_.  If you
are running from within a script, re-run the script with ``--paste`` on the
command line; this will upload the error message to the `pastebin
<http://paste.enzotools.org>`_ and print a URL.  Include the URL in your email
message to the mailing list.

.. _axis-specification:

How do I specify an axis?
-------------------------

For now, axes are specified by integers -- 0,1,2 for x,y,z.  In version 2.0
this will probably change to allow for string-identification as well.

Where can I go for support?
---------------------------

I've set up a ``yt-users`` mailing list.  There's more information about it
at the `yt homepage <http://yt.enzotools.org>`_ and in the section
:ref:`asking-for-help`.
