Add missing 'done.' after images are sorted by their observation date
Use only one thread for each instance of SExtractor

By default, when run on symmetric multiprocessor systems, SExtractor
automatically determines the number of threads to be used in order to
speed up the execution. However, the seeing.py module runs SExtractor
in parallel, spawning multiple instances of it, so we better restrict
the number of threads to one per process.
Ignore Python bytecode files
Raise NoStarsSelectedError when no stars are found

Instead of raising the vague ValueError exception when LEMONdB cannot
find any star within the selection criteria (for example, if we ask
for the correlation of the light curves in filters for which there is
no information), raise a specific exception: NoStarsSelectedError.
Catch exception when there are no light curves for an aperture

The method mining.LEMONdBMiner.sort_by_curve_stdev raises
NoStarsSelectedError in case nothing can be returned (that is, if the
light curve of none of the stars in the specified photometric filter
has the indicated minimum number of points). This exception was not
being catched, so, although a rare event, the script would abort if
this happened when computing the median of the standard deviation of
the light curves for a specific aperture and sky annulus. The fix is
as simple as catching the exception and moving to the next iteration
of the loop.
Ignore PyRAF cache directory
Ignore IRAF startup file
Include debug messages throughout FITSeeingImage.__init__

There already were some DEBUG and INFO messages, but now the method
keeps track of all the events that occur. FITSImage.update_keyword,
which is called by FITSeeingImage.__init__, has also been modified to
include the appropriate log messages — it is the first of the many
methods of the FITSImage class that will make use the logging module.
Factor out the hard-coded 'SATURATION LEVEL' keyword

This keyword, with the number of ADUs at which arises saturation in
the image, is written by FITSeeingImage.__init__ and, at least as of
now, never read. This might explain why it was originally hard-coded,
although absolutely nothing can justify such a horrendous crime.
Use 'sex' as an alternative name for the SExtractor executable

The name of the SExtractor executable is 'sex', but in the Debian
package it was renamed to 'sextractor', which is what we have used
(and therefore also expected) in our code. We have realized this now
because we have had to install SExtractor on a Red Hat Enterprise
Linux system, for which we have downloaded for the first time the RPM
package available at the Astromatic website. We now take into account
that the SExtractor executable could have any of these two names.
Remove the temporary file if the execution of SExtractor fails
Set SATUR_KEY parameter to a non-default value

The SATUR_KEY parameter, which defaults to 'SATURATE', sets the FITS
keyword from which the saturation level, in ADUs, is read. If present
in the image header, the value of this keyword overrides, as Emmanuel
Bertin himself has amiably explained to us, the one given in the
SATUR_LEVEL parameter.

This is precisely what was causing SExtractor to work strangely with
one of our images: because of a 'SATURATE' keyword with a value of 5
ADUs, all the stars were being flagged as saturated regardless of the
value that we gave as saturation level. To avoid this happening again
in the future, we must set SATUR_KEY to a value with which we should
never conceivably come across.
Add Emmanuel Bertin
Remove outdated references to the now-nonexistent configuration file
Save settings to (and read them from) a configuration file

Instead of using the default options (those defined in the Glade XML
file, such as whether coordinates are expressed in sexagesimal format,
decimal or both) every time the program starts up, write them to disk
so that they persist across different executions. In this manner, the
options selected by the user (for now, only in the View submenu) are
always the same and do not have to be changed again the next time.

In order to implement this feature, we subclass SafeConfigParser and
have the destructor automatically update the configuration file when
the instance is about to be destroyed. For this to work, of course, we
need to update the SafeConfigParser as soon as any option is modified,
as well as, now that we are stating the obvious, set them at startup
to the values specified in the configuration file.

This first version uses 'juicerc' as the name of the configuration
file, expecting it to be in the current working directory. If it is
not found, the file is created with default values.
Store the configuration file in the user's home directory

Create the configuration file in the home directory of the user, as
most, if not all, respectable applications do. Also, prepend it with
a period ('.juicerc'), making it a hidden file in the Unix world.
Remove redundancy by referring to existing module-level variables
Un-hardcode the values in the default configuration file

Use module-level variables to determine the values to be written to
the default configuration file, instead of storing them in strings.
It could be argued that these values are still hardcoded, but they
are, at least, easier to modify than if in a list of strings.
Plot light curves in each photometric filter with a different color

Matplotlib has so far automatically chosen the color with which light
curves are drawn — when undefined, the first element in the cycle of
colors is used. After a brief meeting with Matilde Fernández and very
little discussion, we have reached consensus on which colors should be
used for each of the thirteen photometric filters currently supported:

Letter |   Color
-------------------
   U   | Violet
   B   | Blue
   V   | Green
   R   | Light red
   I   | Dark red
   Z   | Cyan
   Y   | Brown
   J   | Yellow
   H   | Pink
  K(s) | Orange
   L   | Light gray
   M   | Dark gray

These are the default colors, used for both the circle markers and the
vertical errorbars in the light curves. Although they cannot (yet) be
modified through the graphical interface, they can be edited manually
in the configuration file.
Plot airmasses with the same color as the light curve