Source code for lcc.stars_processing.descriptors.color_index_descr
from lcc.entities.exceptions import QueryInputError
from lcc.stars_processing.utilities.base_descriptor import BaseDescriptor
[docs]class ColorIndexDescr(BaseDescriptor):
'''
Filter star according their color indexes
Attributes
-----------
colors : list of strings
List of magnitudes which will be used. They are keys to color indexes
in star's object attribute 'more', where can be stored anything
pass_not_found : bool
If False stars without color index will be denied
raise_if_not : bool
If True it throws exception whenever a star has no color index
without_notfound : bool
If False coordinates of stars which have no color indexes will
be returned as well, but with None instead of coordinates (list of
values)
labels : list of strings
Labels of color-diagram axis
'''
def __init__(self, colors=[("b_mag", "v_mag"), ("v_mag", "i_mag")],
pass_not_found=False, raise_if_not=False,
without_notfound=True, *args, **kwargs):
'''
Parameters
-----------
colors : list of strings
List of magnitudes which will be used. They are keys to color indexes
in star's object attribute 'more', where can be stored anything.
It can be list of keys (in stars more attribute) or list of tuples
of two keys. In this case differences of these two values is taken.
pass_not_found : bool
If False stars without color index will be denied
raise_if_not : bool
If True it throws exception whenever a star has no color index
without_notfound : bool
If False coordinates of stars which have no color indexes will
be returned as well, but with None instead of coordinates (list of
values)
'''
self.pass_not_found = pass_not_found
self.colors = colors
self.labels = self.colors
self.raise_if_not = raise_if_not
self.without_notfound = without_notfound
if colors and len(colors) == 2 and len(colors[0]) == 2:
self.LABEL = [
str(colors[0][1]) + "-" + str(colors[0][0]), str(colors[1][1]) + "-" + str(colors[1][0])]
else:
self.LABEL = colors
[docs] def getSpaceCoords(self, stars):
"""
Get list of desired colors
Parameters
-----------
stars : list of Star objects
Stars with color magnitudes in their 'more' attribute
Returns
-------
List of list of floats
"""
coords = []
for star in stars:
this_coords = []
for col in self.colors:
if hasattr(col, "__iter__"):
if len(col) == 2:
mag1 = star.more.get(col[0])
mag2 = star.more.get(col[1])
print "mag12", mag1, mag2
if mag1 and mag2:
this_coords.append(float(mag2) - float(mag1))
else:
this_coords.append(None)
else:
raise QueryInputError(
"Colors have to be list of tuples of the length of two (second - first magnitude)")
else:
this_coords.append(star.more.get(col))
coords.append(this_coords)
return coords