def save_candidates_to_mongodb(candidates, collection, overwrite=False): """ Save a list of light curves to the given mongodb collection """ for candidate in candidates: db_lightcurve = mongo.get_light_curve_from_collection(candidate.field_id, candidate.ccd_id, candidate.source_id, collection) if db_lightcurve != None and not overwrite: continue elif db_lightcurve != None and overwrite: collection.remove({"_id" : db_lightcurve["_id"]}) try: ra, dec = candidate.ra, candidate.dec except AttributeError: logging.error("Candidate light curve has no 'ra' or 'dec' attributes!") continue microlensing_fit = {} microlensing_fit["tE"] = candidate.tE microlensing_fit["t0"] = candidate.t0 microlensing_fit["u0"] = candidate.u0 microlensing_fit["m0"] = candidate.m0 microlensing_fit["chisqr"] = candidate.chisqr light_curve_document = mongo.light_curve_to_document(candidate, indices=candidate.indices, microlensing_fit=microlensing_fit, features=candidate.features) try: light_curve_document["tags"] += candidate.tags except AttributeError: pass mongo.save_light_curve_document_to_collection(light_curve_document, collection) return True
def ptfimage(): """ Returns a JPG PTF image """ if not request.args.has_key("source_id") or not request.args.has_key("field_id") or not request.args.has_key("ccd_id"): abort(404) light_curve = get_light_curve_from_collection(int(request.args["field_id"]), int(request.args["ccd_id"]), int(request.args["source_id"]), light_curve_collection) try: mjd = float(request.args["mjd"]) except: mjd = light_curve.mjd[0] ra = light_curve.ra dec = light_curve.dec # http://kanaloa.ipac.caltech.edu/ibe/search/ptf/dev/process?POS=12.5432151118,40.1539468896&size=0.005&columns=pfilename&where=obsmjd=55398.33127 url = "http://kanaloa.ipac.caltech.edu/ibe/search/ptf/dev/process?POS={0},{1}&SIZE={2}&columns=pfilename&where=obsmjd={3:.5f}".format(ra, dec, 10./3600., mjd) http_request = urllib2.Request(url) base64string = base64.encodestring("%s:%s" % (ptf_user, ptf_password)).replace('\n', '') http_request.add_header("Authorization", "Basic %s" % base64string) file = StringIO.StringIO(urllib2.urlopen(http_request).read()) filename = np.genfromtxt(file, skiprows=4, usecols=[3], dtype=str) fits_image_url = os.path.join(app.config['IPAC_DATA_URL'], str(filename)) http_request = urllib2.Request(fits_image_url + "?center={0},{1}&size=50px".format(ra,dec)) base64string = base64.encodestring('%s:%s' % (ptf_user, ptf_password)).replace('\n', '') http_request.add_header("Authorization", "Basic %s" % base64string) try: f = StringIO.StringIO(urllib2.urlopen(http_request).read()) except urllib2.HTTPError: flash("Error downloading image!") return try: gz = gzip.GzipFile(fileobj=f, mode="rb") gz.seek(0) fitsFile = StringIO.StringIO(gz.read()) except IOError: fitsFile = f fitsFile.seek(0) hdulist = pf.open(fitsFile, mode="readonly") image_data = hdulist[0].data scaled_image_data = (255*(image_data - image_data.min()) / (image_data.max() - image_data.min())).astype(np.uint8) image = Image.fromarray(scaled_image_data) output = StringIO.StringIO() image.save(output, format="png") #image.save(open("test.png", "w"), format="png") #contents = output.getvalue() #output.close() output.seek(0) #print 'Content-Type:image/png\n' return send_file(output, mimetype="image/png")