Skip to content

Google Summer of Code 2016

crystal95 edited this page Aug 23, 2016 · 19 revisions

An integrated graphical environment for visual inspection and filtering of time-series for astronomy

Abstract

This project involves building an integrated graphical environment for visual inspection filtering of time-series for astronomy. With the progress of data science industry, it is very crucial to have advances in data visualization tools. Most of the existing tools for data analysis lack in efficient data exploration due to lack of graphical user interface.Displaying data graphically in form of plots, helps in quickly viewing the most important aspects of the given data and helps in finding the patterns and trends hidden in the Data. Project involves performing series of operations on the data , and produce interactive plots out of it, for analysis.

The project was started as a part of Google Summer of Code (GSoC-16) programme.

Important Links

Link to source code
Link to commits

Starting Point

The project is done from scratch. There was no initial codebase for the project.The major challenge for starting the project was the choice of technologies that would best suit the required functionality. The initial phases of the project involved prototyping and selection of appropriate technologies. Different prototypes were developed and the final technologies were selected .

Prototyping

Initial prototype included the following functionalities.

  • Choosing Time Series file as the input.
  • Choosing the type of library for plotting the input like matplotlib or pygal etc.
  • Plotting graphs with external features like displaying information on hovering etc.
  • Clearing the graph.

    This was the initial prototype that was built. Many more features and functionalities are added that are displayed in the Issues Section.

###Technology Selection
Plotting library selection
One of the major requirement of the project is that it should present good-looking as well as interactive plots that can be manipulated with the mouse (for example sensitive to hovering,zooming).So the choice of plotting library was really important task .Following are the different libraries I compared for plotting :
Pygal : Python charting library
Plotly : Python analytics and data visualization library
Matplotlib : Python plotting library
D3.js : JavaScript library for visualizing data
Highcharts : Charting library in JavaScript

Since the GUI is to be built on the top of the Stingray library and majority of the algorithms have been implemented in python programming language,so a plotting library based on python was most suitable for GUI.Keeping this in mind , plotly was selected as the plotting library.Plotly provides diverse range of features that satisfy most of the requirements of the project .

Framework Selection
Flask : Light weight Python Framework.

Current State of the project

The current state of the project is that we have a standalone application that opens in an electron window . It has various features that have been mentioned in the Issues section below .

Architecture
Front-End : HTML, Javascript, Jquery
Back-End : Flask, Python
Plotting : Plotly library
Electron : For building a standalone application

Installations

  • Clone the project :
    git clone https://github.com/StingraySoftware/dave

  • Install a Python virtual env and a compatible version of node:
    source src/main/resources/bash/setup_dev_env.bash

  • Run the application :
    src/main/resources/bash/run_gui.bash

Issues Solved

Following are the salient features that I implemented during the course of GSoC Programme. Majority of them are already complete and merged, while few of them needs further improvements.

Issue-ID Brief Description
Completely Solved
DAVE-3 As a user I should be able to install the dependencies of the application
DAVE-4 As an astronomer; I want to plot the light curve given as input a table with two columns of numbers: Time, Count Rate; so that I can visualise the count rate level and variability with time.
DAVE-5 As an astronomer; I want to plot the light curve given as input a table with three columns of numbers: Time, Count Rate, Error on Count Rate; so that I can visualise the count rate level and variability with time and check if it is significant.
DAVE-6 Plot light curve from FITS file
DAVE-7 As an astronomer; I want to be able to select in time a region of the light curve and visualize it; so that I can check details and short-time variability in the light curve.
DAVE-8 As an astronomer; I want to be able to select and visualize a region of the light curve by selecting a range of count rates; so that I can check details of specific features of the light curve such as spikes, or deselect others like instrumental drops.
DAVE-9 Show coordinates in plot on mouse-over outside plot
DAVE-12 When hovering over point/marker in graph, show labels outside
DAVE-13 Change Flask server to send data in plottable form
DAVE-14 Add file chooser dialog when clicking load spectrum
DAVE-16 Error bars on x and y
DAVE-17 Error handling on server
DAVE-18 Allow loading files from outside datasets directory
DAVE-20 Deselect data in plot
DAVE-21 two plots from ASCII file
DAVE-22 Select on one plot resize both plots
DAVE-23 Filtering by selecting on plots - usability improvements
DAVE-25 Clear filtering ranges
DAVE-26 Adjust slider ranges to data
DAVE-27 Dynamical Spectrum - 3D plot in 2D
Partially Solved
DAVE-11 Add packager for application
DAVE-15 Automate Python tests
DAVE-28 Multi plot visualization

Personal Experience

Taking part in GSoC and working on this project gave me tremendous learning opportunity and helped me to expand my horizon. Thanks to GSoC and Timelab for giving me this amazing opportunity. Working on this project not only helped me to improve software development skills but also helped me in improving my work-management skills. The fact that my work will be used by great astronomers of the world, further motivates me to work harder on this project.

Contributors

Danish Sodhi
Email : [email protected]
Github : crystal95