Date from the TICRA's General Reflector Antenna Software Package (GRASP) can be stored in the following formats:
GRASP field data in cuts:
.cutGRASP field data in grids:
.grd/.h5
To correctly interpret the numerical data, additional information is needed.
This information can be retrieved from the .tor file associated with the project, or can be provided by the user via dictionary {userinfo}.
Such missing information may include frequency information, class of cut/grid, type of cut/grid.
How does the data look in pycra-tools?¶
Pycra-tools gathers the data and writes into a Xarray labeled multi-dimensional array. Say “da” is the name of the resulting dataframe. It is composed of three parts:
da.name: filename incl. filepathda.data: 4-dim data array (read from.cut/.grd/.h5)da.coords: coordinates (read from.cut/.grd/.h5and.tor/{userinfo})da.attrs: auxiliary information (read from.cut/.grd/.h5and.tor/{userinfo})
For example, the dataframe might look as follows:
# print(da_grid_efield)
<xarray.DataArray '/home/phjschmid/phdphysics/simulation/projects/pycra_tools/fields_example/Job_01/spherical_grid_uv_near_E.grd' (
Y: 31,
X: 61,
comp: 3,
freq: 5)> Size: 454kB
array([[[[ 5.15861528e-05-4.46895748e-05j,
2.80121366e-05-4.58763053e-06j,
1.97908968e-05-1.28813911e-05j,
2.01978300e-05-1.41671314e-06j,
9.43783472e-06-7.26531742e-07j],
[-4.03735515e-04+1.56113416e-03j,
-3.25065879e-04-5.13820470e-05j,
1.52882140e-04+2.38164472e-04j,
-2.49587274e-04+9.49856158e-05j,
4.55253419e-05-7.49902910e-05j],
[-1.14083086e-06-2.05554903e-05j,
1.74641513e-05-1.32081820e-05j,
1.42019231e-05-3.93982770e-06j,
1.10262921e-05-4.17702324e-06j,
8.97920006e-06-1.36825675e-06j]],
[[ 4.27598870e-05-5.62610151e-05j,
2.49717299e-05-7.92351158e-06j,
1.51696125e-05-1.66674332e-05j,
2.02591508e-05-5.56884386e-06j,
...
-9.09998444e-06+2.32794695e-05j,
-1.51901649e-05+5.38423199e-06j,
-8.21757535e-06+5.77032655e-06j,
-1.01859792e-05+4.34384376e-06j]],
[[ 5.15861528e-05-4.46895748e-05j,
2.80121366e-05-4.58763053e-06j,
1.97908968e-05-1.28813911e-05j,
2.01978300e-05-1.41671314e-06j,
9.43783472e-06-7.26531742e-07j],
[-4.03735515e-04+1.56113416e-03j,
-3.25065879e-04-5.13820470e-05j,
1.52882140e-04+2.38164472e-04j,
-2.49587274e-04+9.49856158e-05j,
4.55253419e-05-7.49902910e-05j],
[ 1.14083086e-06+2.05554903e-05j,
-1.74641513e-05+1.32081820e-05j,
-1.42019231e-05+3.93982770e-06j,
-1.10262921e-05+4.17702324e-06j,
-8.97920006e-06+1.36825675e-06j]]]], shape=(31, 61, 3, 5))
Coordinates:
* Y (Y) float64 248B 0.7 0.6533 0.6067 0.56 ... -0.6067 -0.6533 -0.7
* X (X) float64 488B -0.7 -0.6767 -0.6533 -0.63 ... 0.6533 0.6767 0.7
* comp (comp) <U1 12B 'a' 'b' 'c'
* freq (freq) float64 40B 3.5e+09 4.375e+09 5.25e+09 6.125e+09 7e+09
Attributes:
class_name: spherical_grid
coordinate_system: uv
coordinate_system_name: rectangular_horn_tx_coor_sys
field_region_distance_m: 1.0
# print(da_grid_efield.name)
/home/phjschmid/phdphysics/simulation/projects/pycra_tools/fields_example/Job_01/spherical_grid_uv_near_E.grd
# print(da_grid_efield.X)
<xarray.DataArray 'X' (X: 61)> Size: 488B
array([-0.7 , -0.676667, -0.653333, -0.63 , -0.606667, -0.583333,
-0.56 , -0.536667, -0.513333, -0.49 , -0.466667, -0.443333,
-0.42 , -0.396667, -0.373333, -0.35 , -0.326667, -0.303333,
-0.28 , -0.256667, -0.233333, -0.21 , -0.186667, -0.163333,
-0.14 , -0.116667, -0.093333, -0.07 , -0.046667, -0.023333,
0. , 0.023333, 0.046667, 0.07 , 0.093333, 0.116667,
0.14 , 0.163333, 0.186667, 0.21 , 0.233333, 0.256667,
0.28 , 0.303333, 0.326667, 0.35 , 0.373333, 0.396667,
0.42 , 0.443333, 0.466667, 0.49 , 0.513333, 0.536667,
0.56 , 0.583333, 0.606667, 0.63 , 0.653333, 0.676667,
0.7 ])
Coordinates:
* X (X) float64 488B -0.7 -0.6767 -0.6533 -0.63 ... 0.6533 0.6767 0.7
Attributes:
long_name: co-polar
texname: u
units:
# print(da_grid_efield.Y)
<xarray.DataArray 'Y' (Y: 31)> Size: 248B
array([ 0.7 , 0.653333, 0.606667, 0.56 , 0.513333, 0.466667,
0.42 , 0.373333, 0.326667, 0.28 , 0.233333, 0.186667,
0.14 , 0.093333, 0.046667, 0. , -0.046667, -0.093333,
-0.14 , -0.186667, -0.233333, -0.28 , -0.326667, -0.373333,
-0.42 , -0.466667, -0.513333, -0.56 , -0.606667, -0.653333,
-0.7 ])
Coordinates:
* Y (Y) float64 248B 0.7 0.6533 0.6067 0.56 ... -0.6067 -0.6533 -0.7
Attributes:
long_name: cross-polar
texname: v
units:
# print(da_grid_efield.comp)
<xarray.DataArray 'comp' (comp: 3)> Size: 12B
array(['a', 'b', 'c'], dtype='<U1')
Coordinates:
* comp (comp) <U1 12B 'a' 'b' 'c'
Attributes:
long_name: field comopnents
field_type: e_field
polarisation: linear
names_math: ['E_{co}', 'E_{cx}', 'E_r']
units_math: ['W$^{0.5}$', 'W$^{0.5}$', 'W$^{0.5}$']
unitsystem: TICRA
# print(da_grid_efield.freq)
<xarray.DataArray 'freq' (freq: 5)> Size: 40B
array([3.500e+09, 4.375e+09, 5.250e+09, 6.125e+09, 7.000e+09])
Coordinates:
* freq (freq) float64 40B 3.5e+09 4.375e+09 5.25e+09 6.125e+09 7e+09
Attributes:
long_name: frequency
units: HzClassification and naming convensions¶
We distinguish the following classifications:
Fundamentally, different classes of cuts/grids are distinguished, describing the geometrical shape that comprises the coordinates where the numerical simulation shall be evaluated, e.g.
sphericalcuts/grids.The classes of geometrical shapes can be parameterized in different types of coordinate systems, such as the
uvmapping forsphericalgrids.Simulations are evaluated on the coordinates of the selected coordinate system. Depending on the class, different types of fields can be simulated. For
surfacecuts/grids, for example, there is the optionincident_h_fieldand others.Depending on the class, the evaluated fields can be represented in several ways. This is described by GRASP's polarizations parameter.
Finally, depending on the class, the simulation may be performed at finite (GRASP “nearfield” definition) of infinite distance from the antenna (GRASP “farfield” definition).
(1) Classes¶
The class of cuts/grids is stored in da.attrs['class_name']. The options are the following:
sphericalcylindricalplanarsurfaceRCS(not implemented)
(2) Types of coordinate systems¶
Information about the type of coordinate system is stored in da.attrs['coordinate_system'] (TICRA (2024) manual: cut_type, grid_type).
The options differ for cuts and grids.
As regards cuts, the available options are the following:
spherical: polar, conicalcylindrical: axial, circularplanar: radial, circularsurface: radial, circularRCS(not implemented)
For grids, the following options are available:
spherical: uv, elevation_over_azimuth, elevation_and_azimuth, azimuth_over_elevation, theta_phi, azimuth_over_elevation_edx, elevation_over_azimuth_edxcylindrical: phi_zplanar: rho_phi, xysurface: xyRCS(not implemented)
(3) Types of fields¶
Given the ensemble of coordinates, different quantities can be simulated (e.g. electric field, magnetic field, currents), depending on the cut/grid class considered.
This is stored in da.comp.attrs['field_type'] (TICRA (2024) manual: e_h, field_type). The options per class are the following:
spherical: e_field, h_fieldcylindrical: e_field, h_fieldplanar: e_field, h_fieldsurface: incident_e_field, incident_h_field, reflected_e_field, reflected_h_field, currentsRCS(not implemented)
(4) Types of “polarizations”¶
Depending on the class of cut/grid, the evaluated fields may be represented in different ways (e.g. superposition of linear vs. circular polarization components).
This information is stored in da.comp.attrs['polarisation']. The options inlude:
spherical: theta_phi, circular, linear, major_minor, theta_phi_xpd, circular_xpd, linear_xpd, major_minor_xpd, powercylindrical: circular, linear, major_minor, circular_xpd, major_minor_xpd, powerplanar: rho_phi, circular, linear, major_minor, rho_phi_xpd, circular_xpd, linear_xpd, major_minor_xpd, power, poyntingsurface: rho_phi, circular, linear, major_minor, rho_phi_xpd, circular_xpd, linear_xpd, major_minor_xpd, powerRCS(not implemented)
(5) Field region and distance¶
Depending on the class, the fields can be evaluated in the near-field (all classes), or in the far-field (only for spherical cuts and grids).
By definition in GRASP, the farfield is taken as the range limit towards infinity, whereas the nearfield refers to any finite distance.
The distance information is stored in da.attrs['field_region_distance_m'] (TICRA (2024) manual: near_dist), which can be either infinity or a finite number.
- TICRA Tools User’s Manual (24.1). (2024). TICRA.