Link to the stand-alone PyRAF download page
Print updates of the progress bar to a new line when debugging

Progress bars are implemented using carriage returns: they start with
a '\r' character, thus causing all text to be echoed at the beginning
of the line every time they are printed. However, this means that,
when the logging level is set to INFO or lower, the first logging
message between two updates of the progress bar is appended to the
text of the first one — which is ugly. We can fix this by printing
the progress bar to a new line each time.
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
Make the 'Plot airmasses' option global

Using an independent checkbox to determine whether the airmasses of
each star are plotted gives excessively detailed control and ends up
being even confusing — especially taking into account that the number
of hours used for the intervals is also set separately. Normally the
user is only interested in showing or hiding the airmasses from the
plots all at once and without further consideration.

Thus, we have decided to move the 'Plot airmasses' checkbox to the
View menu. The length of the intervals cannot yet be chosen: until
this is implemented we are using a fixed value of three hours, which
should work fine in almost all conceivable scenarios.
Show magnitudes and standard deviations of reference stars

In the list of comparison stars used to compute each light curve,
include also their instrumental magnitude and standard deviation.
This information, as Matilde Fernández has explained, is useful to
evaluate at a glance the precision of the photometric measurements
of both the star under study and those used as comparison.
Fix position of vertical separator (must be in the middle)
Put the scrollbar for the list of reference stars on the left
Migrate XMLOffsetFile from xml.dom.minidom to lxml

The Python light-weight implementation of the Document Object Model
interface, simple and convenient enough in the early stages of our
development, scales awfully with the size of the XML files. Let us
note, for illustration purposes, that a 2.2-megabyte XML file with
6324 offsets took this morning almost twenty minutes to parse.

I will not argue that there had to be room for improvement in our
implementation using xml.dom.minidom, but after the refactoring, now
with lxml, the time needed has been reduced down to ~1.3 seconds. That
is more than two orders of magnitude of speed-up. It really is, as it
fancies itself to be, outstandingly fast!
Remove unused import
Migrate CandidateAnnuli from xml.dom.minidom to lxml

Although in no conceivable circumstance the CandidateAnnuli class will
produce and read XML files so large as to force us to rewrite it using
a faster library, in this manner, and after having also refactored
XMLOffsetFile, our code no longer depends on xml.dom.minidom.
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.
Merge branch 'master' of wn21.iaa.csic.es:~/lemon