openvlbi

OpenVLBI provides a library and an application suite for astronomical interferometry

https://github.com/iliaplatone/openvlbi

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: springer.com, zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.0%) to scientific vocabulary

Keywords

astronomy fourier-transform interferometry multiplatform radioastronomy telescope
Last synced: 6 months ago · JSON representation ·

Repository

OpenVLBI provides a library and an application suite for astronomical interferometry

Basic Info
  • Host: GitHub
  • Owner: iliaplatone
  • License: gpl-2.0
  • Language: C
  • Default Branch: master
  • Homepage: https://openvlbi.com
  • Size: 11.5 MB
Statistics
  • Stars: 3
  • Watchers: 2
  • Forks: 2
  • Open Issues: 2
  • Releases: 16
Topics
astronomy fourier-transform interferometry multiplatform radioastronomy telescope
Created about 5 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog Funding License Citation Authors

README.md

CircleCi Linux License: GPL v2 DOI

OpenVLBI is an open source library and application suite for astronomical interferometry.

Interferometry is a discipline that studies the beam or stream interference and the possibility to obtain a coherence degree between more of them. A 2d interference plot of a single object observed from different locations (space domain Fourier plane dependent to the location of the observers) shows the fourier transform magnitude (and the phase possibly) of the radiation detected from the object observed.

libopenvlbi offers a set of functions that aim to make interferometry simpler and faster.

There is an application suite that offers a server application that uses a simple set/get scripting language, an OpenVLBI server containing an INDI client application using the same scripting format and a json server application for who's familiar with JSON/REST APIs.

This repository contains the sources for building the library and the server applications

Build OpenVLBI

Ubuntu/Debian

You can build OpenVLBI by running the following command: sh scripts/build.sh This will install all the dependencies, including latest INDI developement libraries. If everything will be successful three .deb packages will be built and installed

Other OSes

You'll need CMake to build OpenVLBI, and some developement packages: + libopenvlbi:libfftw3 libcfitsio libjpeg libpng + vlbiserverindi: libindi libnova + tests and scripts: jq

Using OpenVLBI

You can write an application using libopenvlbi by linking against libopenvlbi.so in your gcc command line: gcc yourapp.c -lopenvlbi -o yourapp Each instance of vlbi is initiated by vlbiinit(): ``` vlbicontext context = vlbi_init();

...

// you must be familiar with the dspstreamp type, see "DSP API Documentation" dspstreamp stream1 = dspstreamnew(); dspstreamadddim(stream1, elementsn); dspstreamalloc_buffer(stream1);

//dspbuffercopy converts numeric types into dspt (aka double) dspbuffercopy(inputarr, stream1->in, stream1->len);

//Latitude and longitude in degrees, elevation in meters OSL stream1->location.geographic.lat = Latitude; stream1->location.geographic.lon = Longitude; stream1->location.geographic.el = Elevation;

stream1->starttimeutc = vlbitimestringtotimespec("2018-06-22T02:12.000154874");

//assign to this node a friendly, unique name and add it to the context, tell to OpenVLBI to use geographic conversion vlbiaddnode(context, stream1, "location1_capture", 1);

dspstreamp stream2 = dspstreamnew();

...

vlbiaddnode(context, stream2, "location2_capture", 1);

dspstreamp stream3 = dspstreamnew(); ...

vlbiaddstream(context, stream3); ...

double* target = calloc(sizeof(double), 3); //RA must be in 24H format target[0] = RightAscension * 360.0 / 24.0; target[1] = Declination;

double frequency = 60.0e+6; double samplerate = 100.0e+6;

//since we're using geographic coordinates we'd calculate the delay of each baseline int nodelaycalculation = 0;

//telescopes do not change their location during capture, so no location companion stream int moving_baseline = 0;

//obtain the UV plot of the observation and save it as model, vlbigetuvplot(context, "obs1plotmodel", 1024, 1024, target, frequency, samplerate, nodelaycalculation, movingbaseline, vlbidefaultdelegate);

//the default delegate just multiplies each element of the stream by indexing them according to their delay from the farest node to the target //after this operation a new model with size 1024x1024 containing the plot of the correlation degrees of all baselines will be added into the context

//you should add a model with an estimation of the phase to get an inverse fourier transform vlbiaddmodelfrompng(context, "myphaseestimation.png", "myphaseestimation");

//Create a new model containing the inverse Fourier transform of your observation as magnitude component and your estimation of the phase vlbigetifft(context, "ifftestimation", "obs1plotmodel", "myphase_estimation");

dspstreamp imageestimation = vlbigetmodel(context, "ifftestimation");

...

dspstreamfreebuffer(imageestimation); dspstreamfree(imageestimation); vlbiexit(context);

```

You can read the API documentation at https://iliaplatone.github.io/OpenVLBI/

OpenVLBI servers

OpenVLBI server sample

OpenVLBI can be tested using the built vlbiserverdummy application, which creates a subshell or takes arguments from the standard input. the source files of the sample application make use of the vlbi_server.h source header, which contains a base class to be inherited in case that you want to build your own server or implementation.

OpenVLBI server using INDI libraries

OpenVLBI comes with vlbiserverindi, a server that connects to an INDI server whose drivers will be treated by OpenVLBI as nodes. OpenVLBI nodes must contain informations about location, aperture, focal length, samplerate and observed frequency preferably, and should permit to slew their telescopes or antennas to the same celestial coordinates. tracking must be supported by the mounts and each node should capture and run at the same bit depth, frequency and possibly bandwidth and gain. After each capture is done, a new node will be added to the OpenVLBI context by parsing the received FITS.

The needed INDI interfaces are so: - INDI::BaseDevice::TELESCOPEINTERFACE - INDI::BaseDevice::GPSINTERFACE - INDI::BaseDevice::DETECTORINTERFACE - INDI::BaseDevice::RECEIVERINTERFACE

and optionally, also for autoguiding: - INDI::BaseDevice::CCDINTERFACE - INDI::BaseDevice::GUIDERINTERFACE

The properties used by this server are: - "EQUATORIALEODCOORDS" RA and DEC from telescope for gotos and slews - "TELESCOPETRACKSTATE" from telescope for tracking - "GEOGRAPHICCOORDS" LATITUDE, LONGITUDE and ELEVATION to fill the UV plane and plot the frequency response - "DETECTORCAPTURE" to start capture - "DETECTOR_SETTINGS" set up frequency, bandwidth, sampling rate and depth, and gain of the detectors

OpenVLBI servers usage

The vlbi server applications open a command shell and read from stdin. Format of commands is: cmd arg value:type where type can be string or numeric.

Here is the current command list:

add context name:string - add an OpenVLBI context to the internal list set context name:string - set current OpenVLBI context selecting it by name from the internal list set mask name,model,mask:string,string,sting - mask the model with mask, and save the masked model into name set shifted name:string - shift the model by its dimensions add node name,geo|xyz,latitude|x,longitude|y,elevation|z,datafile,observationdate:string - add a node to the internal list add plot name,projection,synch,type:string,string,string,string - add a model with the plot of the perspective projection of all nodes during the observation in format ([synthesis|movingbase],[delay|nodelay],[raw|coverage]) synthesis for aperture synthesis observation or to plot the UV coverage. delay to automatically calculate delays between nodes, nodelay means that they are already synchronized, raw will fill the perspective path with the correlation degree of the respective baseline, coverage will create a mask to apply to a phase model or a simulated magnitude. add idft idft,magnitude,phase:string,string,string add a model named idft from the magnitude and phase models passed add dft idft,magnitude,phase:string,string,string add the phase and magnitude models obtained from the model passed as idft add model name,format,data:string,string,string add a new model from the base64 encoded string containing the picture file buffer, and format as [jpeg|png|fits] set frequency value:numeric - set detectors frequency set bitspersample value:numeric - set detectors sample bit depth set samplerate value:numeric - set detectors sampling rate set target ra,dec:numeric,numeric - set telescopes celestial target set resolution WxH:numeric,numeric - set the resolution of the output picture of the Fourier plane set location latitude,longitude,elevation:numeric,numeric - set the reference station coordinates for xyz node locations relative to this get models - get the models list with names and dimensions get nodes - get the nodes list with their data get baselines - get the baselines list with their data get model name,format:string,string get the model with name in ([png|jpeg|fits]) format, base64 encoded del model name:string - remove a model from the current context del node name:string - remove a node from the current context del context name:string - remove a context from the internal list

INDI server specific commands

set gain value:numeric - set detectors gain set bandwidth value:numeric - set detectors bandwidth set parking state:string - set telescopes parking state (on, off) set tracking state:string - set telescopes tracking state (on, off) set capture value:numeric - set detectors capture time in seconds set exposure value:numeric - set ccd cameras exposure time in seconds set connection state:string - set nodes connection state (on, off)

References

[1]Optical long baseline intensity interferometry: prospects for stellar physics (Jean-Pierre Rivet, Farrokh Vakili, Olivier Lai, David Vernet, Mathilde Fouché, William Guerin, Guillaume Labeyrie, Robin Kaiser)

[2]Interferometry and synthesis in radio astronomy (AR Thompson, JM Moran, GW Swenson)

Owner

  • Name: Ilia Platone
  • Login: iliaplatone
  • Kind: user
  • Location: Italy.
  • Company: Ilia Platone

Software consultant, developer. Passioned in Astronomy, Physics and science in general.

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Platone"
  given-names: "Ilia"
  orcid: "https://orcid.org/0000-0002-8527-4611"
title: "OpenVLBI"
version: 3.0.3
doi: 10.5281/zenodo.5775142
date-released: 2021-12-24
url: "https://github.com/iliaplatone/OpenVLBI"

GitHub Events

Total
  • Watch event: 1
  • Delete event: 9
  • Push event: 62
  • Pull request event: 9
  • Create event: 9
Last Year
  • Watch event: 1
  • Delete event: 9
  • Push event: 62
  • Pull request event: 9
  • Create event: 9

Dependencies

.github/workflows/default.yml actions
  • actions/checkout v2 composite
  • actions/upload-artifact v2 composite
.github/workflows/docker.yml actions
  • docker/build-push-action v2 composite
  • docker/login-action v1 composite