def download(request, lightcurve_id): file_type = request.GET.get('file_type') response = HttpResponse(content_type='text/csv') response[ 'Content-Disposition'] = 'attachment; filename="LightCurve%s.%s"' % ( lightcurve_id, file_type) lc = LightCurve.objects.get(id=lightcurve_id) analyses = ImageAnalysis.objects.filter(useruploadedimage__lightcurve=lc) \ .exclude(status=ImageAnalysis.ASTROMETRY_PENDING) if file_type == 'csv': writer = csv.writer(response) writer.writerow( ['Datetime', 'JD', 'Mag instrumental', 'Mag standard', 'Mag std']) for analysis in analyses: if analysis.annotated_point_sources != []: result = find_point_by_id(analysis.annotated_point_sources, analysis.target_id) if not result: continue writer.writerow([ analysis.image_datetime, get_jd_for_analysis(analysis), result.get('mag_instrumental', None), result.get('mag_standard', None), result.get('mag_std', None) ]) return response
def plot_lightcurve_json(request, lightcurve_id): lc = LightCurve.objects.get(id=lightcurve_id) ret = [] if request.GET.get('type') == 'instrumental': analyses = ImageAnalysis.objects.filter(useruploadedimage__lightcurve=lc) \ .exclude(status=ImageAnalysis.ASTROMETRY_PENDING) for analysis in analyses: result = find_point_by_id(analysis.annotated_point_sources, analysis.target_id) if not result: continue ret.append({ 'analysisId': analysis.id, 'timestamp': analysis.image_datetime, 'timestampJd': get_jd_for_analysis(analysis), 'result': result, }) else: # type == 'standard' reductions = Reduction.objects.filter( analysis__useruploadedimage__lightcurve=lc, analysis__status=ImageAnalysis.ADDED_TO_LIGHT_CURVE, status=Reduction.COMPLETE) for reduction in reductions: result = find_point_by_id(reduction.reduced_stars, reduction.analysis.target_id) if not result: # Reduction not complete. continue ret.append({ 'analysisId': reduction.analysis.id, 'reductionId': reduction.id, 'timestamp': reduction.analysis.image_datetime, 'timestampJd': get_jd_for_analysis(reduction.analysis), # TODO(ian): Maybe one day we can bake the target id into the URL. # That way you can compare your target light curve to any light # curve from a known object! 'result': result, }) return JsonResponse({ 'success': True, 'results': ret, })
def calculate_color_index(lightcurve, reduction, image_pairs): if reduction.color_index_manual is not None: # User has chosen color index. reduction.color_index = reduction.color_index_manual reduction.save() return ci1 = lightcurve.get_ci_band1() ci2 = lightcurve.get_ci_band2() ci1_key = ci1.urat1_key ci2_key = ci2.urat1_key #cis = defaultdict(list) target_cis = [] for image_pair in image_pairs: analysis1 = image_pair.analysis1 analysis2 = image_pair.analysis2 ''' for comp_desig in lightcurve.comparison_star_designations: star1 = find_star_by_designation(analysis1.annotated_point_sources) star2 = find_star_by_designation(analysis2.annotated_point_sources) ci = star1['mag_instrumental'] - star2['mag_instrumental'] ci_transformed = reduction.hidden_transform * ci + reduction.hidden_transform_intercept cis[comp_desig].append(ci_transformed) ''' target1 = find_point_by_id(analysis1.annotated_point_sources, analysis1.target_id) target2 = find_point_by_id(analysis2.annotated_point_sources, analysis2.target_id) ci = target1['mag_instrumental'] - target2['mag_instrumental'] ci_transformed = reduction.hidden_transform * ci + reduction.hidden_transform_intercept target_cis.append(ci_transformed) #color_index_by_desig = {} # TODO(ian): Show comparison standard color index vs computed color index # TODO(ian): Produce graph... (see pg 122) reduction.color_index = np.mean(target_cis) reduction.save()
def download(request, lightcurve_id): file_type = request.GET.get('file_type') lc = LightCurve.objects.get(id=lightcurve_id) analyses = ImageAnalysis.objects.filter(useruploadedimage__lightcurve=lc) \ .exclude(status=ImageAnalysis.ASTROMETRY_PENDING) if file_type == 'csv': response = HttpResponse(content_type='text/csv') response[ 'Content-Disposition'] = 'attachment; filename="LightCurve%s.csv"' % ( lightcurve_id) writer = csv.writer(response) writer.writerow( ['Datetime', 'JD', 'Mag instrumental', 'Mag standard', 'Mag std']) for analysis in analyses: if analysis.annotated_point_sources != []: result = find_point_by_id(analysis.annotated_point_sources, analysis.target_id) if not result: continue writer.writerow([ analysis.image_datetime, get_jd_for_analysis(analysis), result.get('mag_instrumental', None), result.get('mag_standard', None), result.get('mag_std', None) ]) elif file_type == 'alcdef': myalcdef = AlcdefWriter() myalcdef.set('CIBAND', lc.ciband) myalcdef.set('CONTACTNAME', lc.user) myalcdef.set('CONTACTINFO', lc.user.email) myalcdef.set('DELIMITER', 'PIPE') myalcdef.set('FILTER', 'C') myalcdef.set('OBSERVERS', lc.user) myalcdef.set('OBJECTNAME', lc.target_name) myalcdef.set('OBJECTNUMBER', lc.target_name) myalcdef.add_comment(lc.notes) total_time = 0 for analysis in analyses: total_time += time.mktime(analysis.image_datetime.timetuple()) if analysis.annotated_point_sources != []: result = find_point_by_id(analysis.annotated_point_sources, analysis.target_id) if not result: continue myalcdef.add_data(get_jd_for_analysis(analysis), result.get('mag_instrumental', None), result.get('mag_instrumental_unc', None), result.get('airmass', None)) mid_time = datetime.utcfromtimestamp(total_time / len(analyses)) myalcdef.set('SESSIONDATE', mid_time.strftime("%Y-%m-%d")) myalcdef.set('SESSIONTIME', mid_time.strftime("%H:%M:%S")) content = myalcdef.tostring() if isinstance(content, set): messages.error(request, ', '.join(content)) return HttpResponseRedirect( reverse('edit_lightcurve', args=lightcurve_id)) response = HttpResponse(content, content_type='text/plain; charset=us-ascii') response[ 'Content-Disposition'] = 'attachment; filename="LightCurve%s.alcdef"' % ( lightcurve_id) return response
def get_target(self): return find_point_by_id(self.reduced_stars, self.analysis.target_id)
def get_target(self): return find_point_by_id(self.annotated_point_sources, self.target_id)