openvlbi
OpenVLBI provides a library and an application suite for astronomical interferometry
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
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
Metadata Files
README.md
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
- Website: https://www.iliaplatone.com
- Repositories: 3
- Profile: https://github.com/iliaplatone
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
- actions/checkout v2 composite
- actions/upload-artifact v2 composite
- docker/build-push-action v2 composite
- docker/login-action v1 composite