Summer Research Fellowship Programme of India's Science Academies

Observation and analysis of optical counterparts from celestial objects using GROWTH-India telescope

Abhinand V

Integrated BS-MS Student, Indian Institute of Science Education and Research-Thiruvananthapuram, Maruthamala PO, Vithura, Kerala 695551

Dr Varun Balachandra Bhalerao

Assistant Professor, Department of Physics, Indian Institute of Technology, Powai, Mumbai, Maharashtra 400 076


GROWTH (Global Relay of Observatories Watching Transients Happen) is an international scientific collaborative project in astronomy studying the physics of fast-changing events in the cosmos. Data on cosmic transient events are gathered by jointly operating 18 observatories in the northern hemisphere which efficiently extends the night-time darkness available for observation. Light curves and spectra of astrophysical transient events provide insights into the formation of heavy elements and the generation of gravitational waves. GROWTH-India telescope (GIT) at the Indian Astronomical Observatory located in Hanle, Ladakh is the Indian collaborator of GROWTH. The 0.7 m telescope with a 0.6x0.6 degree field of view is in the process of being fully automated. Observations supervised from IIT Bombay are carried out each night using the GIT if the weather conditions are favourable at Hanle. These observations are in search for explosions in the optical regime when LIGO detects a Binary Neutron Star merger, studying nearby supernova explosions and asteroids. Imaging and processing (image reduction and subtractions) are accomplished using various modules based on the python programming language. Image subtraction helps in detecting transients if any. Principles behind the python based modules used for processing and analysis were introduced through a lecture series from GROWTH Winter school, 2018. Photometry is done on processed images to determine the magnitude of observed targets. The photometric follow-up of a recent gamma-ray burst (GRB190530A) with GIT determined the magnitude of source to be 20.118. We found that the source is fading with a power-law index of 1.52. The results were published in the Gamma-ray Coordinates Network (GCN) circulars archive 24745. Besides, the robustness testing of a python script for better focusing of telescope on targets is carried out.

Keywords: gamma-ray burst, Be/X-ray binary, Full width at half maximum (FWHM), Binary neutron star merger.


A list of abbreviations frequently used in this report is given below:

Table 1 
GROWTHGlobal Relay of Observatories Watching Transients Happen
GITGROWTH India Telescope
 RARight ascension
 Dec Declination
GRBGamma-ray burst 
FWHM Full width at half maximum 



Gamma-ray bursts are short flashes of photons thought to originate from collapsing stars. These strong pulses have energies in the X-ray to gamma-ray ranges and time scales ranging from a few milliseconds to around 100 seconds. GRBs have also been observed on much longer time scales - up to tens of kiloseconds after the prompt gamma-ray phase of the burst. This so-called "afterglow" emission has been seen over a broad range of wavebands, from radio wavelengths to GeV energies, and is believed to be generated when relativistic material flowing interacts with the ambient material surrounding the source of the GRB​. In this project, the field of GRB190530A was observed using the GIT for further analysis.

The focus loop tests done before observations are made for obtaining better-focused images. A robustness testing of this python based script can be effective in complete automation of GIT. The code, which is run prior to observation, carefully evaluates the FWHM corresponding to the sources in the image and sorts out the focus which can be used for further observations that can give accurately focused images. Analysing the images taken as a part of focus test provides insights to misalignment of detectors in the GIT if any.

Objectives of the Research

  • To observe and determine the magnitude of GRB190530A.
  • Identify the properties of the fading of GRB190530A.
  • Evaluating the focus loop tests to identify the efficiency at which focusing on observed targets is currently performed.


In this section, the methods and approaches used to determine the magnitude of GRB and robustness testing of focus loops are discussed.

Observation of GRB190530A

The field of GRB190530A, as reported by Fermi GBM Team, was observed using the GIT at 2019-06-01.635 and 2019-06-02.685 UT, at the position RA 1 : 08h 02m 07.73s, Dec 1​  : +35d 28m 47.7s. The images were taken in red (r) filter. Filters 2 are an accessory used in astronomy with telescopes, instruments such a CCD camera, to improve the observation of celestial objects and to facilitate the measurement of the number of photons of selected wavelengths of light. Filters of varying wavelength width or bandpass can be used. The use of r filter in this observation reduces the sky brightness, particularly during daylight and twilight observations.

Determining the magnitude of GRB190530A

Photometry, in astronomy, is the measurement of brightness of celestial objects. The magnitude calculated is a unitless measure of brightness of an object. The scale used is logarithmic, such that each step of one magnitude corresponds to a change in the brightness of source by a factor of the fifth root of 100, i.e. approximately 2.512. The brighter an object appears, the lower the value of its magnitude, with the brightest objects reaching negative values.

The apparent magnitude ( mappm _{app}) is the brightness of an object as it appears in the night sky from Earth.​ Apparent magnitude depends on an object's intrinsic luminosity, its distance and the extinction reducing the brightness. The instrumental magnitude ( minsm_{ins}) of a source is related to its physical magnitude via the zero-point ( ZPZP) relation:

mapp=ZP+minsm_{app} = ZP + m_{ins}

mins=2.5log(Totalflux)m_{ins} = - 2.5log(Total flux)

​where the zero-point in a photometric system is defined to be the detector count when the apparent magnitude is zero. The zero-point is used to calibrate a system to the standard magnitude system, as the flux detected from stars will vary from detector to detector. The amount of flux measured is dependent on the size of the aperture chosen. An image of the GRB190530A taken using the GIT after reduction is shown below:


    To derive a good photometric solution, we find sources that are not blended with other objects and are away from the edges of the image. To identify point sources in this image and compare their brightness to a known catalogue, a code known as 'Source Extractor' ( SExtractor 3) is used. The variation of magnitude with aperture size is shown in the plot below.

      Change in magnitude with aperture size

      The larger the aperture, the more flux and the lower magnitude. This curve is called the Curve of Growth.

      The instrumental and reference catalogue magnitudes are then cross-matched. The zero-point for each aperture is derived by evaluating the difference between the catalogue and instrumental magnitudes, we measure the average offset between these magnitudes, including rejection of bad outliers that might affect the photometry. This method of finding the magnitude is known as aperture photometry. Aperture photometry is successful with relatively isolated sources. These tasks are performed seamlessly with python based photometry scripts and modules.

      Another approach, mainly suitable with crowded fields, is Point Spread Function (PSF) Photometry. In PSF photometry, a model for the Point Spread Function 4 of stars in the field is created by fitting large number of stars. The models are then iteratively subtracted from the data and refined to minimize the residuals.

      Identifying the rate at which GRB190530A is fading

      To know the rate at which GRB190530A is fading, the change in flux from the object with time is analysed. The assumption of power-law probability distributions is ubiquitous in astronomy. Scientific interest in power-law relations stems partly from the ease with which certain general classes of mechanisms generate them 5. When one quantity (say yy) depends on another (say xx) raised to some power, we say that y=kxay = kx^ais described by a power law, where aa is the law’s exponent and kkis a constant. Certain variants of power-law such as the broken power law, a piecewise function consisting of two or more power laws combined with a threshold, is also used for fitting the data. A handy way to convert this power law is to take logarithm on both sides of the equation. A plot of log(y)log(y)vs log(x)log(x) gives a straight line with a slope aa.

      A plot of the logarithm of flux from GRB against the logarithm of time elapsed after the GRB( T0T_{0}). A straight line is fitted with the data points both with and without the inclusion of data from GIT. The slopes obtained from both the plots are compared to know whether they agree.

      Robustness Testing of Focus Loops

      Focusing is an important step in imaging. In order to capture the details in an image we have to set the best possible focus before the observation. In GIT this is achieved through a python based script termed as focus loop tests. The focuser value is changed by varying the distance between the primary and secondary mirrors in the telescope. Images are taken with predefined focuser values at regular intervals. The images taken are analysed carefully to sort out the focuser value that gave the best-focused image on a particular date. Further observations are then carried out with this selected focuser set-up for upcoming observations. The seeing conditions on a given night at a location describe how much earth's atmosphere perturbs the images of targets as seen through the telescope. One way to select the best focus for a particular night is to manually evaluate the images taken. One can also identify the best focus by analysing the FWHM of point spread function of sources present in the images taken. The FWHM values obtained is determined by the seeing conditions at the time of the observation. This diameter of the point spread function is a measure of the astronomical seeing conditions. FWHM is an expression of the extent of function given by the difference between the two extreme values of the independent variable at which the dependent variable is equal to half of its maximum value.


        It is therefore clear that lower the value of FWHM obtained from the images, the more focused are the sources present in it.

        Identifying the best focuser value for an observation session

        As mentioned earlier, focus loop testing script evaluates and selects the best focuser value for the upcoming observation session. Analysing how accurately this script decided the best focuser value can be done by selecting certain sources from each image and comparing their FWHM values. For this RA and Dec of sources from images taken as part of focus loop tests are noted down and their FWHM are obtained after processing. Then a plot of FWHM versus focuser value is made for each source and analysed. The sources facing distortion from diffraction and saturation are avoided from being selected to have a better understanding of the variation of FWHM.

        The following section describes the analysis done on the images from focus loop tests on May 29th. Initially, the RA and Dec of selected sources are stored into a CSV file:

        Screenshot from 2019-07-17 16-05-35.png
          Co-ordinates of the selected sources
          1. import astropy.units as u
          2. from astropy.io import fits as af
          3. from astropy.table import Table
          4. from astropy.io import ascii
          5. import glob
          6. import csv
          7. import os
          8. import pandas as pd
          9. from astropy.coordinates import SkyCoord
          10. # Calling the reduced files of images from focus loop tests, FWHM values are stored in these files:
          11. source_img =[]
          12. for filepath in glob.glob("/home/Desktop/reduced0529/*fits.cat"):
          13. img=filepath
          14. source_img.append(img)
          15. # These are the fits files of the corresponding images from source_img:
          16. fitsFiles=[]
          17. for filepath in glob.glob("/home/Desktop/reduced0529/*fits"):
          18. fits=filepath
          19. fitsFiles.append(fits)
          20. #The coordinates of selected sources from the images are read:
          21. refList=ascii.read("/home/Desktop/radecList0529.csv")
          22. imgex=af.open(fitsFiles[0])
          23. date=imgex[0].header['DATE']
          24. # The RA and Dec values from refList are cross matched with each images from fitsFiles and corrresponding sources are identified:
          25. for j in range(len(refList)):
          26. refCatCoords = SkyCoord(ra=[refList[j]['ra (deg)']], dec=[refList[j]['dec (deg)']], frame='icrs', unit='degree')
          27. focusLoop=[]
          28. for i in range(len(ab17)):
          29. img1= af.open(fitsFiles[i]+'.cat')
          30. data=Table.read(img1[2])
          31. fwhmTab=data['ALPHAWIN_J2000','DELTAWIN_J2000','FWHM_WORLD','X_IMAGE','Y_IMAGE']
          32. sourceCatCoords = SkyCoord(ra=fwhmTab['ALPHAWIN_J2000'], dec=fwhmTab['DELTAWIN_J2000'], frame='icrs', unit='degree')
          33. photoDistThresh =10
          34. idx_image, idx_ref, d2d, d3d = refCatCoords.search_around_sky(sourceCatCoords, photoDistThresh*u.arcsec)
          35. #idx_image are indexes into sourceCatCoords for the matched sources, while idx_ref are indexes into refCatCoords for the matched sources
          36. idx_image
          37. #print('Found %d good cross-matches'%len(idx_image))
          38. t=fwhmTab[idx_image]
          39. FinalList=t['X_IMAGE','Y_IMAGE','FWHM_WORLD','ALPHAWIN_J2000','DELTAWIN_J2000']
          40. focusLoop.append(FinalList)
          41. #print(FinalList)
          42. focusList=[]
          43. fwhmWorld=[]
          44. for k in range(len(focusLoop)):
          45. img= af.open(fitsFiles[k])
          46. focus=img[0].header['FOCUSER']
          47. fwhm=focusLoop[k][0]['FWHM_WORLD']
          48. focusList.append(focus)
          49. fwhmWorld.append(fwhm)
          50. img.close()
          51. Data=[focusList,fwhmWorld]
          52. #Now we write the FWHM of each sources from into a csv file:
          53. ascii.write(Data,'%s.csv'%refList[j]['id'],names=['Focuser','Fwhm'],format='csv',fast_writer=False)
          54. img1.close()
          55. #Ploting
          56. #Data from the csv files written earlier are used here. For each source in the refList, a plot of FWHM vs Focuser Value is stored as a pdf file:
          57. from matplotlib.backends.backend_pdf import PdfPages
          58. pp = PdfPages('FocVFwhm%s'%date+'.pdf')
          59. def function_plot(X,Y, pp):
          60. plt.figure()
          61. plt.clf()
          62. plt.plot(X,Y,marker='o')
          63. graph = plt.title('Focuser vs Fwhm_STARID='+starIndex[l])
          64. plt.xlabel('FocuserValue', fontsize = 8)
          65. plt.ylabel('Fwhm (in deg)', fontsize = 8)
          66. plt.savefig(pp, format='pdf')
          67. starIndex=[]
          68. for f in range(len(refList)):
          69. starIndex.append(refList[f]['id'])
          70. import matplotlib.pyplot as plt
          71. for l in range(len(starIndex)):
          72. sort=pd.read_csv(starIndex[l]+'.csv')
          73. sort.sort_values("Focuser", axis = 0, ascending = True,
          74. inplace = True, na_position ='last')
          75. function_plot(sort['Focuser'],sort['Fwhm'], pp)
          76. pp.close()
          Creating FWHM vs Focuser value Plots

          After executing the above-written code, a plot of FWHM vs Focuser value is obtained for targets stored in the CSV file mentioned earlier.

          Evaluating the focusing in an image

          The camera installed in GIT is an Andor iKon-XL, 230 model. It is a 4096 × 4108 resolution back-illuminated, thermoelectrically cooled CCD. For an image, it can happen that the focusing is not the same throughout. Whenever the primary and secondary mirror in a two-mirror system is not optimally positioned, it induces a certain amount of axial and off-axis aberrations. To evaluate this, individual images from focus loop tests are considered and the variation of FWHM throughout the image is studied. The Analysis is done to identify patterns followed in these variations if any. For this, scatter plots with the 4096 × 4108 resolution image on xy-plane and FWHM on a colour axis are created. This helps to visually understand the patterns of focusing in an image. The code written below does this for images taken as part of focus loop tests on May 29th.

          1. import glob
          2. from astropy.io import fits as af
          3. import os
          4. # The tables with x_image , y_image and fwhm are loaded:
          5. fwhm_list=[]
          6. for filepath in sorted(glob.glob("/home/Desktop/FWHM_Tables proc0529/*csv")):
          7. fwhm=filepath
          8. fwhm_list.append(fwhm)
          9. fitsFiles=[]
          10. for filepath in glob.glob("/home/ab17/Desktop/reduced0529/*fits"):
          11. fits=filepath
          12. fitsFiles.append(fits)
          13. imgex=af.open(fitsFiles[0])
          14. date=imgex[0].header['DATE']
          15. # Scatter plots are created and saved as a pdf
          16. from matplotlib.backends.backend_pdf import PdfPages
          17. pp = PdfPages('FocusTestSct(Sig)%s'%date+'.pdf')
          18. def function_plot(xi,yi,zi,title,pp):
          19. plt.figure()
          20. plt.clf()
          21. zmin = 0
          22. zmax = 10
          23. zi[(zi<zmin) | (zi>zmax)] = None
          24. plt.scatter(xi,yi,8,c=zi,cmap=plt.cm.get_cmap('viridis',12),vmax=zmax, vmin=zmin)
          25. graph = plt.title('FocuserValue='+title)
          26. plt.ylabel('Y_IMAGE', fontsize = 8)
          27. cbar=plt.colorbar()
          28. cbar.set_label('Fwhm in arcsec',rotation=90)
          29. plt.savefig(pp, format='pdf')
          30. import numpy as np
          31. import matplotlib.pyplot as plt
          32. from scipy.interpolate import griddata
          33. import pandas as pd
          34. from astropy.stats import sigma_clip
          35. for i in range(len(fwhmlist)):
          36. dat=pd.read_csv(fwhm_list[i])
          37. dat['FWHM_WORLD']*=3600
          38. PlotHead=[]
          39. PlotHead.append(os.path.splitext(os.path.basename(fwhm_list[i]))[0])
          40. X_dat = dat['X_IMAGE']
          41. Y_dat = dat['Y_IMAGE']
          42. Z_dat = dat['FWHM_WORLD']
          43. #for outlier rejection:
          44. filt_data = sigma_clip(Z_dat, sigma=5,maxiters=10)
          45. function_plot(X_dat,Y_dat,filt_data,PlotHead[0],pp)
          46. pp.close()
          Creating scatter-plots of FWHM in an image

          Following a similar approach, contour plots were created to have a better understanding of how the value of FWHM varies in an image taken using GIT. It is achieved as follows:

          1. import glob
          2. from astropy.io import fits as af
          3. import os
          4. # The tables with x_image , y_image and fwhm are loaded:
          5. fwhm_list=[]
          6. for filepath in sorted(glob.glob("/home/Desktop/FWHM_Tables proc0529/*csv")):
          7. fwhm=filepath
          8. fwhm_list.append(fwhm)
          9. fitsFiles=[]
          10. for filepath in glob.glob("/home/ab17/Desktop/reduced0529/*fits"):
          11. fits=filepath
          12. fitsFiles.append(fits)
          13. imgex=af.open(fitsFiles[0])
          14. date=imgex[0].header['DATE']
          15. # Contour plots are created and saved as a pdf:
          16. from matplotlib.backends.backend_pdf import PdfPages
          17. pp = PdfPages('FocusTestCont(Sig)%s'%date+'.pdf')
          18. def function_plot(xi,yi,zi,title,pp):
          19. plt.figure()
          20. plt.clf()
          21. zmin = 0
          22. zmax = 10
          23. zi[(zi<zmin) | (zi>zmax)] = None
          24. plt.contourf(xi, yi, zi.T, 15, cmap=plt.cm.get_cmap('viridis',12),vmax=zmax, vmin=zmin)
          25. graph = plt.title('FocuserValue='+title)
          26. plt.xlabel('X_IMAGE', fontsize = 8)
          27. plt.ylabel('Y_IMAGE', fontsize = 8)
          28. cbar=plt.colorbar(boundaries=np.linspace(0,10,10))
          29. cbar.set_label('Fwhm in arcsec',rotation=90)
          30. plt.savefig(pp, format='pdf')
          31. import numpy as np
          32. import matplotlib.pyplot as plt
          33. from scipy.interpolate import griddata
          34. import pandas as pd
          35. for i in range(len(fwhm_list)):
          36. dat=pd.read_csv(fwhm_list[i])
          37. #dat.sort_values("FWHM_WORLD", axis = 0, ascending = True,
          38. # inplace = True, na_position ='last')
          39. dat['FWHM_WORLD']*=3600
          40. PlotHead=[]
          41. PlotHead.append(os.path.splitext(os.path.basename(fwhm_list[i]))[0])
          42. X_dat = dat['X_IMAGE']
          43. Y_dat = dat['Y_IMAGE']
          44. Z_dat = dat['FWHM_WORLD']
          45. # for outlier rejection
          46. filtered_data = sigma_clip(Z_dat, sigma=5, maxiters=10)
          47. # Convert from pandas dataframes to numpy arrays
          48. X, Y, Z, = np.array([]), np.array([]), np.array([])
          49. for j in range(len(X_dat)):
          50. X = np.append(X, X_dat[j])
          51. Y = np.append(Y, Y_dat[j])
          52. Z = np.append(Z, filtered_data[j])
          53. # create x-y points to be used
          54. xi = np.linspace(X.min(), X.max(), 1000)
          55. yi = np.linspace(Y.min(), Y.max(), 1000)
          56. # Z is a matrix of x-y values
          57. zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')
          58. function_plot(xi,yi,zi,PlotHead[0],pp)
          59. pp.close()
          Creating contour plots showing the variation of FWHM in an image



          A very faint source at position RA: 08h 02m 07.73s, Dec: +35d 28m 47.7s was detected using GIT. The results of photometric follow-up on GRB190530A are noted below.

          Screenshot from 2019-07-18 13-21-26.png
            Photometric results from the observation of GRB190530A

            Magnitudes are calibrated with panstars in the same field.

            The plot of log(flux)  log(flux)   versus log(T0)log( T_{0})without fitting with GIT data points is obtained as

              Change of flux with time for GRB190530A fitted without GIT data

              The plot of log(flux)  log(flux)   against log(T0)log( T_{0}) fitted with GIT data points is obtained as

                Change of flux with time for GRB190530A fitted with GIT data

                Photometric results are found to be in agreement with (Lipunov et al., GCN 24680; Kann et al., GCN 24684; Heintz et al., GCN 24686; Izzo et al., GCN 24687; Xin et al., GCN 24688; Watson et al., GCN 24690; Lipunov et al., GCN 24693; Xin et al., GCN 24697; Belkin et al., GCN 24698; Kann et al., GCN 24700;Vinko et al., GCN 24709; Siegel, GCN 24703; Moskvitin and Uklein, GCN 24708; Belkin et al., GCN 24712; Brajesh et al., GCN 24729). Using data of above-mentioned GCNs along with GIT data, it is identified that the source is fading with a power-law index of 1.52. The above results were published in the Gamma-ray Coordinates Network (GCN) circulars archive 24745.

                Robustness testing of focus loops

                Plots of FWHM vs Focuser value of selected sources with their respective id as plot title is shown below.

                                        FWHM vs Focuser value plots of selected sources

                                        The scatter plots created for evaluating the focusing in an image are shown below with their corresponding focuser value as plot title.

                                                                                  Scatter plots showing the variations of FWHM in an image

                                                                                  The contour plots that were created with corresponding focuser value as plot title are as follows:

                                                                                                                            Contour plots showing the variations of FWHM in an image

                                                                                                                            FWHM can be seen varying in larger scales for higher focuser values. The least and uniform FWHM, and thereby accurately focused images can be identified in the focuser value range of 5200 - 5300.


                                                                                                                            The project was successful in identifying and understanding the basics of teransient observations and corresponding analysis. Robestness testing of the focus loop has helped to uderstand the procedures involved in the process. Further analysis of data from focus loop tests on more sessions can be used to derive information regarding the focusing in an image and thereby identifying any misalignments in the detectors of GIT. Accurately focused images can be useful in better analysis and deriving significant details. These information can be effective in the complete automation of GIT.


                                                                                                                            I would like to express my sincere gratitude to my advisor Dr Varun Balachandra Bhalerao for the continuous support of this project and related research, for his patience, motivation, and immense knowledge. Besides my advisor, I would like to thank the Indian Academy of Sciences for providing me with an opportunity as a Summer Research Fellow. My sincere thanks also goes to IIT Bombay for the accommodation and research facilities provided during the period of this project. I shall thank all my friends at IIT Bombay for their support throughout this project.


                                                                                                                            • Bob King.  February 26, 2019. Celestial Coordinates for Beginners. Retrieved from https://www.skyandtelescope.com/astronomy-resources/right-ascension-declination-celestial-coordinates/

                                                                                                                            • Pulcherrima Productions.Astronomy for everyone-The use of filters. Retrieved from https://web.archive.org/web/20101111183607/http://sciastro.net/members/portia.php/2009/01/31/g-the-use-of-filters

                                                                                                                            • Dr. Benne W Holwerda, Space telescope science Institute. Source Extractor for beginners. Retrieved from astro.physics.metu.edu.tr/MANUALS/sextractor/Guide2source_extractor.pdf

                                                                                                                            • ASTR 511/O’Connell. POINT SPREAD FUNCTIONS. Retrieved from web.ipac.caltech.edu/staff/fmasci/home/astro_refs/PSFtheory.pdf

                                                                                                                            • Marc L. Kutner. Astronomy: A Physical Perspective, 2nd ed. New York, USA: Cambridge University Press, 2003.

                                                                                                                            Written, reviewed, revised, proofed and published with