LSMTool: the LOFAR Local Sky Model Tool¶
LSMTool is a Python package which allows for the manipulation of sky
models in the makesourcedb
format (used by DP3). To initialize
your environment for LSMTool, users on CEP3 should run the following
command:
$ module load lsmtool
To install LSMTool elsewhere, please see the README at https://git.astron.nl/RD/LSMTool for instructions.
Usage¶
The command-line version of LSMTool can be run as follows:
Usage: lsmtool <skymodel> <parset> [<beam MS>]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-q Quiet
-v Verbose
The parset specifies the operations to perform and their parameters. These are described in the next sections.
Operations¶
These are the operations that LSMTool can perform:
- SELECT
: Select sources by source or patch properties
- REMOVE
: Remove sources by source or patch properties
- TRANSFER
: Transfer a patch scheme from one sky model to another
- GROUP
: Group sources into patches
- UNGROUP
: Remove patches
- MOVE
: Move a source or patch position
- MERGE
: Merge two or more patches into one
- CONCATENATE
: Concatenate two sky models
- ADD
: Add a source
- SETPATCHPOSITIONS
: Calculate and set patch positions
- PLOT
: Plot a simple representation of the sky model
- COMPARE
: Compare source fluxes and positions of two sky models
Example parset¶
This is an example parset that filters on the flux, adds a source, and then groups the sources into patches:
LSMTool.Steps = [selectbright, addsrc, grp, setpos]
# Select only sources above 1 mJy
LSMTool.Steps.selectbright.Operation = SELECT
LSMTool.Steps.selectbright.FilterExpression = "I > 1.0 mJy"
# Add a source
LSMTool.Steps.addsrc.Name = new_source
LSMTool.Steps.addsrc.Type = POINT
LSMTool.Steps.addsrc.Ra = 277.4232
LSMTool.Steps.addsrc.Dec = 48.3689
LSMTool.Steps.addsrc.I = 0.69
# Group using tessellation to a target flux of 50 Jy
LSMTool.Steps.grp.Operation = GROUP
LSMTool.Steps.grp.Algorithm = tessellate
LSMTool.Steps.grp.TargetFlux = 50.0 Jy
# Select only sources in 'Patch_1'
LSMTool.Steps.selectbright.Operation = SELECT
LSMTool.Steps.selectbright.FilterExpression = "Patch = Patch_1"
# Set the patch positions to their midpoint and write final skymodel
LSMTool.Steps.setpos.Method = mid
LSMTool.Steps.setpos.OutFile = grouped.sky
In the first line of this parset the step names are defined. In the next sections, the step parameters for every step are defined. Steps are applied sequentially, in the same order defined in the list of steps. A list of step-specific parameters is given in Table [lsmtool:tab:localval].
Var Name |
Format |
Example |
Comment |
---|---|---|---|
Operation |
string |
SELECT |
An operation name (see Operations) |
OutFile |
string |
out.sky |
Name of output file |
SELECT and REMOVE |
|||
FilterExpression |
string |
I > 10.0 Jy |
Filter for selection |
Aggregate |
bool |
False |
Filter by aggregated patch property |
ApplyBeam |
bool |
True |
If true, apparent fluxes will be used |
TRANSFER |
|||
PatchFile |
string |
patches.sky |
File with patches that will be transferred |
GROUP |
|||
Algorithm |
string |
tessellate |
One of tessellate, cluster, single, every, voronoi, or a CASA mask file |
TargetFlux |
string |
10.0 Jy |
Target total flux of patches (tessellate only) |
NumClusters |
int |
100 |
Number of clusters (cluster only) |
ApplyBeam |
bool |
True |
If true, apparent fluxes will be used |
UNGROUP |
|||
MOVE |
|||
Name |
string |
src1 |
Name of source or patch to move |
Position |
list of floats |
[12.3, 23.4] |
RA and Dec in degrees to move to |
Shift |
list of floats |
[0.001, 0.0] |
RA and Dec in degrees to shift by |
MERGE |
|||
Patches |
list of strings |
[bin1, bin2] |
Patch names to merge |
Name |
string |
merged_patch |
Name of new merged patch |
SETPATCHPOSITIONS |
|||
Method |
string |
mid |
Set patch positions to mid, mean, or wmean positions |
CONCATENATE |
|||
Skymodel2 |
string |
in2.sky |
Name of sky model to concatenate |
MatchBy |
string |
position |
Identify duplicates by position or name |
Radius |
string |
30 arcsec |
Radius within which matches are identified |
Keep |
string |
all |
If two sources match, keep: all, from1, or from2 |
InheritPatches |
bool |
False |
Matches inherit patches from parent sky model |
ADD |
|||
Name |
string |
src1 |
Name of source; required |
Type |
string |
POINT |
Type; required |
Patch |
string |
new_patch |
Patch name; required if sky model has patches |
RA |
float or string |
12:45:30.4 |
RA; required |
Dec |
float or string |
+76.45.02.48 |
Dec; required |
I |
float |
0.69 |
Flux in Jy; required |
AnyValidColumnName |
value |
Any valid column name can be specified |
|
PLOT |
|||
LabelBy |
string |
patch |
|
COMPARE |
|||
OutDir |
string |
comp_plots/ |
Output directory for plots |
SkyModel2 |
string |
in2.sky |
Name of second sky model |
Radius |
string |
10 arcsec |
Radius within which matches are identified |
LabelBy |
patch |
string |
Label plot points by source or patch |
ExcludeMultiple |
bool |
True |
Exclude sources with multiple matches |
IgnoreSpec |
float |
-0.7 |
Ignore any source in SkyModel2 with this spectral index |
Interactive use and scripting¶
LSMTool can also be used interactively (in IPython, for example) or in Python scripts without the need for a parset. To use LSMTool in a Python script or interpreter, import it as follows:
>>> import lsmtool
A sky model can then be loaded with, e.g.:
>>> LSM = lsmtool.load('skymodel.sky')
All of the operations described in Section [lsmtool:operations] are available as methods of the resulting sky model object (with the same name as the corresponding operation). For example, the following commands with duplicate the steps done in the example parset given in Section [lsmtool:parset]:
>>> LSM.select('I > 1.0 mJy')
>>> LSM.add({'Name':'new_source', 'Type':'POINT', 'Ra':277.4232, 'Dec':48.3689, 'I':0.69})
>>> LSM.group(algorithm='tesselate', targetFlux='10.0 Jy')
>>> LSM.select("Patch = 'Patch_1'")
>>> LSM.setPatchPositions(method='mid')
In many cases, the methods accept parameters with the same names as those used in a parset (see the full documentation for details). The sky model can then written to a new file with:
>>> LSM.write('grouped.sky')
Additionally, sky models can be written out as ds9 region files and kvis annotation files (as well as all the formats supported by the astropy.table package, such at VOTable, HDF5, and FITS):
>>> LSM.write('outskymodel.reg', format='ds9')
>>> LSM.write('outskymodel.ann', format='kvis')
>>> LSM.write('outskymodel.fits', format='fits')
>>> LSM.write('outskymodel.hdf5', format='hdf5')
>>> LSM.write('outskymodel.vo', format='votable')
In addition to the operations described above, a number of other methods are available:
- LSM.copy()
: Return a copy of the sky model object
- LSM.info()
: Print information about the sky model
- LSM.more()
: Print the sky model to the screen, using more-like controls
- LSM.broadcast()
: Send the sky model to other applications using SAMP
- LSM.getColNames()
: Returns a list of the column names in the sky model
- LSM.getColValues()
: Returns a numpy array of column values
- LSM.getRowIndex()
: Returns the row index or indices for a source or patch
- LSM.getRowValues()
: Returns a table or row for a source or patch
- LSM.getPatchPositions()
: Returns patch RA and Dec values
- LSM.getDefaltValues()
: Returns column default values
- LSM.getPatchSizes()
: Returns an array of patch sizes
- LSM.setColValues()
: Sets column values
- LSM.setRowValues()
: Sets row values
- LSM.setDefaultValues()
: Sets default column values
For details on these methods, please see the full module documentation.