def gaia_in_file(infile, maglim=18): """Retrieve the Gaia objects from a HEALPixel-split Gaia file. Parameters ---------- maglim : :class:`float`, optional, defaults to 18 Magnitude limit for GFAs in Gaia G-band. Returns ------- :class:`~numpy.ndarray` Gaia objects in the passed Gaia file brighter than `maglim`, formatted according to `desitarget.gfa.gfadatamodel`. Notes ----- - A "Gaia file" here is as made by, e.g. :func:`~desitarget.gaiamatch.gaia_fits_to_healpix()` """ # ADM read in the Gaia file and limit to the passed magnitude. objs = read_gaia_file(infile) ii = objs['GAIA_PHOT_G_MEAN_MAG'] < maglim objs = objs[ii] # ADM rename GAIA_RA/DEC to RA/DEC, as that's what's used for GFAs. for radec in ["RA", "DEC"]: objs.dtype.names = [radec if col == "GAIA_"+radec else col for col in objs.dtype.names] # ADM initiate the GFA data model. gfas = np.zeros(len(objs), dtype=gfadatamodel.dtype) # ADM make sure all columns initially have "ridiculous" numbers gfas[...] = -99. for col in gfas.dtype.names: if isinstance(gfas[col][0].item(), (bytes, str)): gfas[col] = 'U' if isinstance(gfas[col][0].item(), int): gfas[col] = -1 # ADM populate the common columns in the Gaia/GFA data models. cols = set(gfas.dtype.names).intersection(set(objs.dtype.names)) for col in cols: gfas[col] = objs[col] # ADM update the Gaia morphological type. gfas["TYPE"] = gaia_morph(gfas) # ADM populate the BRICKID columns. gfas["BRICKID"] = bricks.brickid(gfas["RA"], gfas["DEC"]) return gfas
def gaia_in_file(infile, maglim=18, mindec=-30., mingalb=10.): """Retrieve the Gaia objects from a HEALPixel-split Gaia file. Parameters ---------- infile : :class:`str` File name of a single Gaia "healpix" file. maglim : :class:`float`, optional, defaults to 18 Magnitude limit for GFAs in Gaia G-band. mindec : :class:`float`, optional, defaults to -30 Minimum declination (o) to include for output Gaia objects. mingalb : :class:`float`, optional, defaults to 10 Closest latitude to Galactic plane for output Gaia objects (e.g. send 10 to limit to areas beyond -10o <= b < 10o)" Returns ------- :class:`~numpy.ndarray` Gaia objects in the passed Gaia file brighter than `maglim`, formatted according to `desitarget.gfa.gfadatamodel`. Notes ----- - A "Gaia healpix file" here is as made by, e.g. :func:`~desitarget.gaiamatch.gaia_fits_to_healpix()` """ # ADM read in the Gaia file and limit to the passed magnitude. objs = read_gaia_file(infile) ii = objs['GAIA_PHOT_G_MEAN_MAG'] < maglim objs = objs[ii] # ADM rename GAIA_RA/DEC to RA/DEC, as that's what's used for GFAs. for radec in ["RA", "DEC"]: objs.dtype.names = [ radec if col == "GAIA_" + radec else col for col in objs.dtype.names ] # ADM initiate the GFA data model. gfas = np.zeros(len(objs), dtype=gfadatamodel.dtype) # ADM make sure all columns initially have "ridiculous" numbers gfas[...] = -99. for col in gfas.dtype.names: if isinstance(gfas[col][0].item(), (bytes, str)): gfas[col] = 'U' if isinstance(gfas[col][0].item(), int): gfas[col] = -1 # ADM some default special cases. Default to REF_EPOCH of Gaia DR2, # ADM make RA/Dec very precise for Gaia measurements. gfas["REF_EPOCH"] = 2015.5 gfas["RA_IVAR"], gfas["DEC_IVAR"] = 1e16, 1e16 # ADM populate the common columns in the Gaia/GFA data models. cols = set(gfas.dtype.names).intersection(set(objs.dtype.names)) for col in cols: gfas[col] = objs[col] # ADM update the Gaia morphological type. gfas["TYPE"] = gaia_morph(gfas) # ADM populate the BRICKID columns. gfas["BRICKID"] = bricks.brickid(gfas["RA"], gfas["DEC"]) # ADM limit by Dec first to speed transform to Galactic coordinates. decgood = is_in_box(gfas, [0., 360., mindec, 90.]) gfas = gfas[decgood] # ADM now limit to requesed Galactic latitude range. bbad = is_in_gal_box(gfas, [0., 360., -mingalb, mingalb]) gfas = gfas[~bbad] return gfas
def gaia_in_file(infile, maglim=18, mindec=-30., mingalb=10., nside=None, pixlist=None, addobjid=False): """Retrieve the Gaia objects from a HEALPixel-split Gaia file. Parameters ---------- infile : :class:`str` File name of a single Gaia "healpix" file. maglim : :class:`float`, optional, defaults to 18 Magnitude limit for GFAs in Gaia G-band. mindec : :class:`float`, optional, defaults to -30 Minimum declination (o) to include for output Gaia objects. mingalb : :class:`float`, optional, defaults to 10 Closest latitude to Galactic plane for output Gaia objects (e.g. send 10 to limit to areas beyond -10o <= b < 10o)" nside : :class:`int`, optional, defaults to `None` (NESTED) HEALPix `nside` to use with `pixlist`. pixlist : :class:`list` or `int`, optional, defaults to `None` Only return sources in a set of (NESTED) HEALpixels at the supplied `nside`. addobjid : :class:`bool`, optional, defaults to ``False`` If ``True``, include, in the output, a column "GAIA_OBJID" that is the integer number of each row read from file. Returns ------- :class:`~numpy.ndarray` Gaia objects in the passed Gaia file brighter than `maglim`, formatted according to `desitarget.gfa.gfadatamodel`. Notes ----- - A "Gaia healpix file" here is as made by, e.g. :func:`~desitarget.gaiamatch.gaia_fits_to_healpix()` """ # ADM read in the Gaia file and limit to the passed magnitude. objs = read_gaia_file(infile, addobjid=addobjid) ii = objs['GAIA_PHOT_G_MEAN_MAG'] < maglim objs = objs[ii] # ADM rename GAIA_RA/DEC to RA/DEC, as that's what's used for GFAs. for radec in ["RA", "DEC"]: objs.dtype.names = [ radec if col == "GAIA_" + radec else col for col in objs.dtype.names ] # ADM initiate the GFA data model. dt = gfadatamodel.dtype.descr if addobjid: for tup in ('GAIA_BRICKID', '>i4'), ('GAIA_OBJID', '>i4'): dt.append(tup) gfas = np.zeros(len(objs), dtype=dt) # ADM make sure all columns initially have "ridiculous" numbers gfas[...] = -99. for col in gfas.dtype.names: if isinstance(gfas[col][0].item(), (bytes, str)): gfas[col] = 'U' if isinstance(gfas[col][0].item(), int): gfas[col] = -1 # ADM some default special cases. Default to REF_EPOCH of Gaia DR2, # ADM make RA/Dec very precise for Gaia measurements. gfas["REF_EPOCH"] = 2015.5 gfas["RA_IVAR"], gfas["DEC_IVAR"] = 1e16, 1e16 # ADM populate the common columns in the Gaia/GFA data models. cols = set(gfas.dtype.names).intersection(set(objs.dtype.names)) for col in cols: gfas[col] = objs[col] # ADM update the Gaia morphological type. gfas["TYPE"] = gaia_morph(gfas) # ADM populate the BRICKID columns. gfas["BRICKID"] = bricks.brickid(gfas["RA"], gfas["DEC"]) # ADM limit by HEALPixel first as that's the fastest. if pixlist is not None: inhp = is_in_hp(gfas, nside, pixlist) gfas = gfas[inhp] # ADM limit by Dec first to speed transform to Galactic coordinates. decgood = is_in_box(gfas, [0., 360., mindec, 90.]) gfas = gfas[decgood] # ADM now limit to requesed Galactic latitude range. if mingalb > 1e-9: bbad = is_in_gal_box(gfas, [0., 360., -mingalb, mingalb]) gfas = gfas[~bbad] return gfas