Skip to content
Snippets Groups Projects
Commit 00d9ee56 authored by Jörn Künsemöller's avatar Jörn Künsemöller
Browse files

Task #9091 - Added a constant generator that extracts value restrictions from...

Task #9091 - Added a constant generator that extracts value restrictions from enumerations from the pyxb stuff and writes them in a module. Can be run from cmake to update constants on XSD schema changes (manual action required in some special cases that lead to anonymous types). Still needs checking for possibly missing optional types, proper cmake tests
parent 30c0a51e
No related branches found
No related tags found
No related merge requests found
ANGLEUNIT_ARCSEC="arcsec"
ANGLEUNIT_DEGREES="degrees"
ANGLEUNIT_RADIANS="radians"
ANTENNAFIELDTYPE_HBA="HBA"
ANTENNAFIELDTYPE_HBA0="HBA0"
ANTENNAFIELDTYPE_HBA1="HBA1"
ANTENNAFIELDTYPE_LBA="LBA"
ANTENNASETTYPE_HBA_DUAL="HBA Dual"
ANTENNASETTYPE_HBA_DUAL_INNER="HBA Dual Inner"
ANTENNASETTYPE_HBA_JOINED="HBA Joined"
ANTENNASETTYPE_HBA_JOINED_INNER="HBA Joined Inner"
ANTENNASETTYPE_HBA_ONE="HBA One"
ANTENNASETTYPE_HBA_ONE_INNER="HBA One Inner"
ANTENNASETTYPE_HBA_ZERO="HBA Zero"
ANTENNASETTYPE_HBA_ZERO_INNER="HBA Zero Inner"
ANTENNASETTYPE_LBA_INNER="LBA Inner"
ANTENNASETTYPE_LBA_OUTER="LBA Outer"
ANTENNASETTYPE_LBA_SPARSE_EVEN="LBA Sparse Even"
ANTENNASETTYPE_LBA_SPARSE_ODD="LBA Sparse Odd"
ANTENNASETTYPE_LBA_X="LBA X"
ANTENNASETTYPE_LBA_Y="LBA Y"
CHECKSUMALGORITHM_ADLER32="Adler32"
CHECKSUMALGORITHM_MD5="MD5"
COORDINATESYSTEM_ITRF2000="ITRF2000"
COORDINATESYSTEM_ITRF2005="ITRF2005"
COORDINATESYSTEM_WGS84="WGS84"
DATAPRODUCTTYPE_BEAM_FORMED_DATA="Beam Formed data"
DATAPRODUCTTYPE_CORRELATOR_DATA="Correlator data"
DATAPRODUCTTYPE_DIRECT_DATA_STORAGE_DATA="Direct Data Storage data"
DATAPRODUCTTYPE_DYNAMIC_SPECTRA_DATA="Dynamic Spectra data"
DATAPRODUCTTYPE_INSTRUMENT_MODEL="Instrument Model"
DATAPRODUCTTYPE_NON_STANDARD="Non Standard"
DATAPRODUCTTYPE_PIXEL_MAP="Pixel Map"
DATAPRODUCTTYPE_PULSAR_PIPELINE_OUTPUT="Pulsar pipeline output"
DATAPRODUCTTYPE_PULSAR_PIPELINE_SUMMARY_OUTPUT="Pulsar pipeline summary output"
DATAPRODUCTTYPE_SKY_IMAGE="Sky Image"
DATAPRODUCTTYPE_SKY_MODEL="Sky Model"
DATAPRODUCTTYPE_TRANSIENT_BUFFER_BOARD_DATA="Transient Buffer Board data"
DATAPRODUCTTYPE_UNKNOWN="Unknown"
EQUINOXTYPE_B1950="B1950"
EQUINOXTYPE_J2000="J2000"
EQUINOXTYPE_JUPITER="JUPITER"
EQUINOXTYPE_SUN="SUN"
FILEFORMATTYPE_AIPS___CASA="AIPS++/CASA"
FILEFORMATTYPE_FITS="FITS"
FILEFORMATTYPE_HDF5="HDF5"
FILEFORMATTYPE_PULP="PULP"
FILTERSELECTIONTYPE_10_70_MHZ="10-70 MHz"
FILTERSELECTIONTYPE_10_90_MHZ="10-90 MHz"
FILTERSELECTIONTYPE_110_190_MHZ="110-190 MHz"
FILTERSELECTIONTYPE_170_230_MHZ="170-230 MHz"
FILTERSELECTIONTYPE_210_250_MHZ="210-250 MHz"
FILTERSELECTIONTYPE_30_70_MHZ="30-70 MHz"
FILTERSELECTIONTYPE_30_90_MHZ="30-90 MHz"
FREQUENCYUNIT_GHZ="GHz"
FREQUENCYUNIT_HZ="Hz"
FREQUENCYUNIT_KHZ="kHz"
FREQUENCYUNIT_MHZ="MHz"
FREQUENCY_160_0=160.0
FREQUENCY_200_0=200.0
LENGTHUNIT_KM="km"
LENGTHUNIT_M="m"
LOCATIONFRAME_BARYCENTER="BARYCENTER"
LOCATIONFRAME_GALACTIC="GALACTIC"
LOCATIONFRAME_GEOCENTER="GEOCENTER"
LOCATIONFRAME_HELIOCENTER="HELIOCENTER"
LOCATIONFRAME_LOCAL_GROUP="LOCAL_GROUP"
LOCATIONFRAME_LSRD="LSRD"
LOCATIONFRAME_LSRK="LSRK"
LOCATIONFRAME_RELOCATABLE="RELOCATABLE"
LOCATIONFRAME_TOPOCENTER="TOPOCENTER"
MEASUREMENTTYPE_ALL_SKY="All Sky"
MEASUREMENTTYPE_CALIBRATION="Calibration"
MEASUREMENTTYPE_MISCELLANEOUS="Miscellaneous"
MEASUREMENTTYPE_TARGET="Target"
MEASUREMENTTYPE_TEST="Test"
MEASUREMENTTYPE_TUNE_UP="Tune Up"
OBSERVINGMODETYPE_BEAM_OBSERVATION="Beam Observation"
OBSERVINGMODETYPE_DIRECT_DATA_STORAGE="Direct Data Storage"
OBSERVINGMODETYPE_INTERFEROMETER="Interferometer"
OBSERVINGMODETYPE_NON_STANDARD="Non Standard"
OBSERVINGMODETYPE_TBB__PIGGYBACK_="TBB (piggyback)"
OBSERVINGMODETYPE_TBB__STANDALONE_="TBB (standalone)"
OBSERVINGMODETYPE_UNKNOWN="Unknown"
PIXELUNIT_JY_BEAM="Jy/beam"
POLARIZATIONTYPE_I="I"
POLARIZATIONTYPE_LL="LL"
POLARIZATIONTYPE_LR="LR"
POLARIZATIONTYPE_NONE="None"
POLARIZATIONTYPE_Q="Q"
POLARIZATIONTYPE_RL="RL"
POLARIZATIONTYPE_RR="RR"
POLARIZATIONTYPE_U="U"
POLARIZATIONTYPE_V="V"
POLARIZATIONTYPE_XIM="Xim"
POLARIZATIONTYPE_XRE="Xre"
POLARIZATIONTYPE_XX="XX"
POLARIZATIONTYPE_XY="XY"
POLARIZATIONTYPE_YIM="Yim"
POLARIZATIONTYPE_YRE="Yre"
POLARIZATIONTYPE_YX="YX"
POLARIZATIONTYPE_YY="YY"
PROCESSINGTYPE_COHERENT_STOKES="Coherent Stokes"
PROCESSINGTYPE_CORRELATOR="Correlator"
PROCESSINGTYPE_FLY_S_EYE="Fly's Eye"
PROCESSINGTYPE_INCOHERENT_STOKES="Incoherent Stokes"
PROCESSINGTYPE_NON_STANDARD="Non Standard"
PROCESSRELATIONTYPE_GROUPID="GroupID"
PULSARPIPELINEDATATYPE_COHERENTSTOKES="CoherentStokes"
PULSARPIPELINEDATATYPE_COMPLEXVOLTAGES="ComplexVoltages"
PULSARPIPELINEDATATYPE_INCOHERENTSTOKES="IncoherentStokes"
PULSARPIPELINEDATATYPE_SUMMARYCOHERENTSTOKES="SummaryCoherentStokes"
PULSARPIPELINEDATATYPE_SUMMARYCOMPLEXVOLTAGES="SummaryComplexVoltages"
PULSARPIPELINEDATATYPE_SUMMARYINCOHERENTSTOKES="SummaryIncoherentStokes"
PULSARSELECTIONTYPE_BRIGHTEST_KNOWN_PULSAR_IN_SAP="Brightest known pulsar in SAP"
PULSARSELECTIONTYPE_BRIGHTEST_KNOWN_PULSAR_IN_TAB="Brightest known pulsar in TAB"
PULSARSELECTIONTYPE_PULSARS_IN_OBSERVATION_SPECS="Pulsars in observation specs"
PULSARSELECTIONTYPE_PULSARS_IN_OBSERVATION_SPECS__FILE_AND_BRIGHTEST_IN_SAP_AND_TAB="Pulsars in observation specs, file and brightest in SAP and TAB"
PULSARSELECTIONTYPE_PULSARS_IN_OBSERVATION_SPECS__FILE_OR_SAP="Pulsars in observation specs, file or SAP"
PULSARSELECTIONTYPE_PULSAR_SPECIFIED_IN_DATAPRODUCT="Pulsar specified in dataproduct"
PULSARSELECTIONTYPE_SPECIFIED_PULSAR_LIST="Specified pulsar list"
PULSARSELECTIONTYPE_THREE_BRIGHTEST_KNOWN_PULSARS_IN_SAP="Three brightest known pulsars in SAP"
RADECSYSTEM_FK4="FK4"
RADECSYSTEM_FK4_NO_E="FK4-NO-E"
RADECSYSTEM_FK5="FK5"
RADECSYSTEM_GAPPT="GAPPT"
RADECSYSTEM_ICRS="ICRS"
SPECTRALQUANTITYTYPE_BETAFACTOR="BetaFactor"
SPECTRALQUANTITYTYPE_ENERGY="Energy"
SPECTRALQUANTITYTYPE_FREQUENCY="Frequency"
SPECTRALQUANTITYTYPE_REDSHIFT="Redshift"
SPECTRALQUANTITYTYPE_VELOCITYAPPRADIAL="VelocityAppRadial"
SPECTRALQUANTITYTYPE_VELOCITYOPTICAL="VelocityOptical"
SPECTRALQUANTITYTYPE_VELOCITYRADIO="VelocityRadio"
SPECTRALQUANTITYTYPE_WAVELENGTHAIR="WaveLengthAir"
SPECTRALQUANTITYTYPE_WAVELENGTHVACUUM="WaveLengthVacuum"
SPECTRALQUANTITYTYPE_WAVENUMBER="Wavenumber"
STATIONSELECTIONTYPE_CORE="Core"
STATIONSELECTIONTYPE_CUSTOM="Custom"
STATIONSELECTIONTYPE_DUTCH="Dutch"
STATIONSELECTIONTYPE_INTERNATIONAL="International"
STATIONSELECTIONTYPE_SINGLE="Single"
STATIONTYPETYPE_CORE="Core"
STATIONTYPETYPE_INTERNATIONAL="International"
STATIONTYPETYPE_REMOTE="Remote"
TELESCOPE_LOFAR="LOFAR"
TIMESYSTEMTYPE_LST="LST"
TIMESYSTEMTYPE_UTC="UTC"
TIMEUNIT_MS="ms"
TIMEUNIT_NS="ns"
TIMEUNIT_S="s"
TIMEUNIT_US="us"
#!/usr/bin/python
import ltasip
import inspect
import pyxb
#from collections import namedtuple
# This module will
def __safeupper(name):
name = name.replace (" ", "_")
name = name.replace ("+", "_")
name = name.replace ("/", "_")
name = name.replace ("-", "_")
name = name.replace ("(", "_")
name = name.replace (")", "_")
name = name.replace (",", "_")
name = name.replace (".", "_")
name = name.replace ("'", "_")
name = name.upper()
return name
def get_constants_for_resctrictedtypes():
enumtypes=[]
for name, obj in inspect.getmembers(ltasip):
if inspect.isclass(obj) and issubclass(obj,pyxb.binding.basis.enumeration_mixin) and not "STD_ANON" in str(obj):
enumtypes.append(obj)
# Excluded here:
# ltasip.STD_ANON_ # clock frequencies, see below
# ltasip.STD_ANON # coordinateSystem, see below
__constants = dict()
for type in enumtypes:
for value in type.values():
name = str(type.__name__).upper()+"_"+__safeupper(str(value))
__constants[name] = value
# These anonymous ones need a proper name:
for value in ltasip.STD_ANON_.values():
__constants["FREQUENCY_"+__safeupper(str(value))]=value
for value in ltasip.STD_ANON.values():
__constants["COORDINATESYSTEM_"+__safeupper(str(value))]=value
# to convert to named tuple for object-like access (dot-notation):
# constants = namedtuple('Constants', __constants)._make(__constants[key] for key in __constants.keys())
# e.g. allows: print constants.OBSERVINGMODETYPE_DIRECT_DATA_STORAGE
# (It does not allow discovery by IDEs and such, but may be useful some time, maybe in interactive shells.)
return __constants
def main(path):
constants = get_constants_for_resctrictedtypes()
with open(path, 'w+') as f:
for key in sorted(constants.keys()):
#type = type(constants.get(key))
value = constants.get(key)
if isinstance(value, basestring):
value = "\""+value+"\""
else:
value = str(value)
line = key+"="+value+"\n"
print line,
f.write(line)
if __name__ == '__main__':
path="constants.py"
main(path)
......@@ -27,14 +27,11 @@
import ltasip
import pyxb
import os.path
import constants
#import os.path
VERSION = "SIPlib 0.1"
# todo: Find a nice way how to access permitted types by the XSD restrictions
# To get list of permitted values, e.g. do: print ltasip.StationTypeType.values()
# But maybe we want to define these as constants in here?
# todo: find a nice way to define the different stations
# -> how to define a full set of existing stations and their different antennafield options without redundancy?
......@@ -426,7 +423,7 @@ class SkyImageDataProduct():
observationPointing=observationpointing.get_pyxb_pointing(),
restoringBeamMajor=ltasip.Angle(restoringbeammajor_angle, units=restoringbeammajor_angleunit),
restoringBeamMinor=ltasip.Angle(restoringbeamminor_angle, units=restoringbeamminor_angleunit),
rmsNoise=rmsnoise,
rmsNoise=ltasip.Pixel(rmsnoise, units="Jy/beam"),
**dataproduct_map.get_dict())
def get_pyxb_dataproduct(self):
......@@ -1091,7 +1088,6 @@ class Sip():
print VERSION
print "################\n"
print "===\nCreating base document...\n"
sip = ltasip.ltaSip()
#-----------
......@@ -1102,7 +1098,7 @@ class Sip():
project_code,
project_primaryinvestigator,
project_contactauthor,
project_telescope,
#project_telescope,
project_description,
dataproduct,
project_coinvestigators=None,
......@@ -1114,7 +1110,7 @@ class Sip():
projectCode=project_code,
primaryInvestigator=project_primaryinvestigator,
contactAuthor=project_contactauthor,
telescope=project_telescope,
telescope="LOFAR",#project_telescope,
projectDescription=project_description,
coInvestigator=project_coinvestigators,
)
......@@ -1273,12 +1269,12 @@ class Sip():
def main():
# todo: This should be moved to testing, but makes it easier for me now.
print "===\nCreating base document...\n"
# create example doc with mandatory attributes
mysip = Sip(project_code="code",
project_primaryinvestigator="pi",
project_contactauthor="coauthor",
project_telescope="LOFAR",
#project_telescope="LOFAR",
project_description="awesome project",
project_coinvestigators=["sidekick1", "sidekick2"],
dataproduct=SimpleDataProduct(
......@@ -1507,7 +1503,7 @@ def main():
restoringbeammajor_angleunit="degrees",
restoringbeamminor_angle=2.0,
restoringbeamminor_angleunit="degrees",
rmsnoise=ltasip.Pixel("1.0", units="Jy/beam")
rmsnoise=1.0
)
)
......@@ -1976,13 +1972,95 @@ def main():
)
)
# add optional dataproduct item
print "===\nAdding related sky image dataproduct using predefined constants:\n"
print mysip.add_related_dataproduct(
SkyImageDataProduct(
DataProductMap(
type=constants.DATAPRODUCTTYPE_BEAM_FORMED_DATA,
source="space",
identifier="fourtytwo",
size=2048,
filename="/home/paulus/test.h5",
fileformat=constants.FILEFORMATTYPE_AIPS___CASA,
processsource="someone gave it to me",
processid="SIPlib 0.1"
),
numberofaxes=2,
coordinates=[
SpectralCoordinate(
quantity_type=constants.SPECTRALQUANTITYTYPE_VELOCITYAPPRADIAL,
quantity_value=20.0,
axis=LinearAxis(
number=5,
name="bla",
units="unit",
length=5,
increment=5,
referencepixel=7.5,
referencevalue=7.4)),
DirectionCoordinate(
linearaxis_a=LinearAxis(
number=5,
name="bla",
units="unit",
length=5,
increment=5,
referencepixel=7.5,
referencevalue=7.4),
linearaxis_b=LinearAxis(
number=5,
name="blb",
units="unit",
length=5,
increment=5,
referencepixel=7.5,
referencevalue=7.4),
pc0_0=0.0,
pc0_1=0.1,
pc1_0=1.0,
pc1_1=1.1,
equinox=constants.EQUINOXTYPE_JUPITER,
radecsystem=constants.RADECSYSTEM_FK4_NO_E,
projection="rear",
projectionparameters=[1.0,1.0,1.0],
longitudepole_angle=1.0,
longitudepole_angleunit=constants.ANGLEUNIT_RADIANS,
latitudepole_angle=2.0,
latitudepole_angleunit=constants.ANGLEUNIT_ARCSEC,
),
PolarizationCoordinate(
tabularaxis=TabularAxis(
number=5,
name="bla",
units="someunit",
length=5,
),
polarizations=[constants.POLARIZATIONTYPE_LR,constants.POLARIZATIONTYPE_XRE]
),
],
locationframe=constants.LOCATIONFRAME_LOCAL_GROUP,
timeframe="timeframe",
observationpointing=PointingRaDec(
ra_angle=1.0,
ra_angleunit=constants.ANGLEUNIT_DEGREES,
dec_angle=42.0,
dec_angleunit=constants.ANGLEUNIT_DEGREES,
equinox=constants.EQUINOXTYPE_B1950
),
restoringbeammajor_angle=1.0,
restoringbeammajor_angleunit=constants.ANGLEUNIT_DEGREES,
restoringbeamminor_angle=2.0,
restoringbeamminor_angleunit=constants.ANGLEUNIT_DEGREES,
rmsnoise=1.0
)
)
#path = os.path.expanduser("~/sip9091.xml")
#with open(path, 'w+') as f:
# f.write(mysip.get_prettyxml())
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment