diff --git a/LCS/PyCommon/CMakeLists.txt b/LCS/PyCommon/CMakeLists.txt index db356cd03c24a773594a81c96223f06f6d4f6b1f..74e17082cad5ac51ff7a2b0260b2adb03ae34209 100644 --- a/LCS/PyCommon/CMakeLists.txt +++ b/LCS/PyCommon/CMakeLists.txt @@ -38,7 +38,8 @@ set(_py_files test_utils.py typing.py toposort.py - ring_coordinates.py) + ring_coordinates.py + station_coordinates.py) python_install(${_py_files} DESTINATION lofar/common) diff --git a/LCS/PyCommon/station_coordinates.py b/LCS/PyCommon/station_coordinates.py new file mode 100644 index 0000000000000000000000000000000000000000..2f07848a647521bbe4bd7d35a675a0d9721d2c75 --- /dev/null +++ b/LCS/PyCommon/station_coordinates.py @@ -0,0 +1,24 @@ +from ast import literal_eval +import os +import functools + +DEFAULT_STATION_POSITIONS_PARSET_FILEPATH = os.path.expandvars("$LOFARROOT/etc/StaticMetaData/StationPositions.parset") + +@functools.lru_cache() +def parse_station_coordinates() -> dict: + """ + :return: a dict mapping station field name, e.g. "CS002_LBA", to a dict containing geocentric coordinates + """ + station_coordinates = {} + with open(DEFAULT_STATION_POSITIONS_PARSET_FILEPATH, 'r') as f: + for line in f.readlines(): + print(line) + line = line.strip() + if line and line.startswith('PIC.Core.'): + key, value = line.split('=') + key = key.replace('PIC.Core.', '').replace('.phaseCenter', '').strip() + eval_value = literal_eval(value) + field_coords = {'coordinate_system': 'ITRF2005', 'epoch': '2017.5' if 'DE605' in key else '2015.5', 'x': eval_value[0], 'y': eval_value[1], 'z': eval_value[2]} # 'coordinate_system': 'ITRF2005' ?! + station_coordinates[key] = field_coords + return station_coordinates + diff --git a/LTA/sip/lib/siplib.py b/LTA/sip/lib/siplib.py index aab5409b98b7ba3afd17597336b36cf0dfd13d05..ff3bba92ba1e7c3f9a1292f07cd59cc603c56815 100644 --- a/LTA/sip/lib/siplib.py +++ b/LTA/sip/lib/siplib.py @@ -28,7 +28,7 @@ from . import ltasip import pyxb from . import constants -from . import station_coordinates +from lofar.common import station_coordinates import os import uuid import xml.dom.minidom @@ -153,8 +153,8 @@ class Station(): __afield2=None station_coords = station_coordinates.parse_station_coordinates() for atype in antennafieldtypes: - if name+"_"+atype in station_coords.keys(): - field_coords = station_coords[name+"_"+atype] + if name+atype in station_coords.keys(): + field_coords = station_coords[name+atype] __afield=AntennafieldXYZ( type=atype, coordinate_system=field_coords["coordinate_system"], diff --git a/MAC/Deployment/data/StaticMetaData/CMakeLists.txt b/MAC/Deployment/data/StaticMetaData/CMakeLists.txt index 71266e4b37742f126b5199dc2a608deb0495e90d..cbcea42258c0def795e02a60ce13d7b725aab067 100644 --- a/MAC/Deployment/data/StaticMetaData/CMakeLists.txt +++ b/MAC/Deployment/data/StaticMetaData/CMakeLists.txt @@ -24,5 +24,6 @@ file(GLOB staticmeta_data RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" CableDelays/*.conf* iHBADeltas/*.conf* AntennaFields/*.conf* - Attenuation/*.conf*) + Attenuation/*.conf* + StationPositions.parset) lofar_add_sysconf_files(${staticmeta_data} DESTINATION StaticMetaData) diff --git a/SAS/TMSS/backend/services/scheduling/lib/constraints.py b/SAS/TMSS/backend/services/scheduling/lib/constraints.py index 9676a0f0929b478aec1a56867da0337315814e3a..42bdd43b185fbfa8d265dfebde644b50b3359d6a 100644 --- a/SAS/TMSS/backend/services/scheduling/lib/constraints.py +++ b/SAS/TMSS/backend/services/scheduling/lib/constraints.py @@ -218,10 +218,10 @@ def get_boundary_stations_from_list(stations: Tuple[str]) -> Tuple[str]: if not stations: return tuple() - from lofar.lta.sip import station_coordinates + from lofar.common import station_coordinates min_lat, max_lat, min_lon, max_lon = None, None, None, None for station in stations: - coords = station_coordinates.parse_station_coordinates()["%s_LBA" % station.upper()] + coords = station_coordinates.parse_station_coordinates()["%sLBA" % station.upper()] loc = EarthLocation.from_geocentric(x=coords['x'], y=coords['y'], z=coords['z'], unit=astropy.units.m) if not min_lat or loc.lat < min_lat: min_lat = loc.lat @@ -247,10 +247,10 @@ def get_unique_sorted_boundary_stations_or_cs002(stations: Tuple[str], min_dista boundary_stations = set(get_boundary_stations_from_list(tuple(stations))) if min_distance is not None: # find EarthLocation for each boundary_station - from lofar.lta.sip import station_coordinates + from lofar.common import station_coordinates locations = {} for station in boundary_stations: - coords = station_coordinates.parse_station_coordinates()["%s_LBA" % station.upper()] + coords = station_coordinates.parse_station_coordinates()["%sLBA" % station.upper()] locations[station] = EarthLocation.from_geocentric(x=coords['x'], y=coords['y'], z=coords['z'], unit=astropy.units.m) # loop over all station combinations, except (self,self), and compute great-circle-distance in meters between the two diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py b/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py index 8164012de5806a52ee347b68f808ab21712bd82f..7669919ac34783972e132ab68e5069c50eb911e7 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/conversions.py @@ -75,8 +75,8 @@ def create_location_for_station(station: str) -> EarthLocation: :param station: a station name, e.g. "CS002" :return: astropy.coordinates.earth.EarthLocation ''' - from lofar.lta.sip import station_coordinates - coords = station_coordinates.parse_station_coordinates()["%s_LBA" % station.upper()] + from lofar.common import station_coordinates + coords = station_coordinates.parse_station_coordinates()["%sLBA" % station.upper()] location = EarthLocation.from_geocentric(x=coords['x'], y=coords['y'], z=coords['z'], unit=astropy.units.m) return location