Skip to content

Commit 06ca38b

Browse files
authored
Merge pull request #91 from jkuusk/dev
Merge dev into main
2 parents a768092 + fc56d4f commit 06ca38b

File tree

108 files changed

+4615
-7279
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+4615
-7279
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ __pycache__/
22
DATA/
33
LOGS/
44
OTHER/
5+
ARCHIVE/
56
config_hypernets.ini
67
config_dynamic.ini
78
config_static.ini

NOTES.md

Lines changed: 0 additions & 33 deletions
This file was deleted.

hypernets/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
__version__ = "1.0b"
1+
__version__ = "2.3.0"
22

33
import sys
44
MIN_PYTHON = (3, 9)
55
if sys.version_info < MIN_PYTHON:
66
sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON)
7-
7+

hypernets/abstract/create_metadata.py

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,18 @@
11

22
from hypernets import __version__
3-
from datetime import datetime
3+
from datetime import datetime, timezone
44
from configparser import ConfigParser, ExtendedInterpolation
55
from configparser import MissingSectionHeaderError
6+
from re import split
67

7-
from logging import warning
8-
9-
# TODO : Dump data from pickle for lat:lon
10-
11-
12-
def special_value(value):
13-
if value == "{datetime}":
14-
return datetime.utcnow().strftime("%Y%m%dT%H%M%S")
15-
elif value == "{v_hypernets_tools}":
16-
return __version__
17-
else:
18-
return "N/A"
8+
from logging import debug, info, warning # noqa
199

2010

2111
def metadata_header_base(protocol_file="placeholder.csv", now=None,
2212
PI="Hypernets Virtual",
2313
site_name="Virtual Site"):
2414
if now is None:
25-
from datetime import datetime
26-
now = datetime.utcnow()
15+
now = datetime.now(timezone.utc)
2716

2817
return ("[Metadata]\n"
2918
f"datetime = {now.strftime('%Y%m%dT%H%M%S')}\n"
@@ -32,7 +21,11 @@ def metadata_header_base(protocol_file="placeholder.csv", now=None,
3221
f"protocol_filename = {protocol_file}\n")
3322

3423

35-
def parse_config_metadata(config_file="config_dynamic.ini"):
24+
def parse_config_metadata(sequence_file, config_file="config_dynamic.ini",
25+
instrument_sn=0, vm_sn=0):
26+
globals()["instrument_sn"] = instrument_sn
27+
globals()["vm_sn"] = vm_sn
28+
globals()["sequence_file"] = sequence_file
3629

3730
config = ConfigParser(interpolation=ExtendedInterpolation())
3831

@@ -45,19 +38,51 @@ def parse_config_metadata(config_file="config_dynamic.ini"):
4538
str_metadata = metadata_header_base()
4639
return str_metadata
4740

41+
# copy user-defined metadata from config file
4842
str_metadata = "[Metadata]\n"
4943
for field in metadata_section.keys():
50-
if '{' and '}' in metadata_section[field]:
51-
special = special_value(metadata_section[field])
52-
str_metadata += f"{field} = {special}\n"
44+
if field in ["hypernets_tools_version", "datetime", "hypstar_sn", "led_sn",
45+
"protocol_file_name", "latitude", "longitude", "offset_pan",
46+
"offset_tilt", "azimuth_switch"]:
47+
warning(f"metadata:{field} is auto-generated and should be removed "
48+
"from the [metadata] section of config_dynamic.ini")
5349
else:
5450
str_metadata += f"{field} = {metadata_section[field]}\n"
55-
return str_metadata
5651

52+
# populate auto-generated metadata
53+
str_metadata += f"hypernets_tools_version = {__version__}\n"
54+
now = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S")
55+
str_metadata += f"datetime = {now}\n"
56+
str_metadata += f"hypstar_sn = {instrument_sn}\n"
57+
str_metadata += f"led_sn = {vm_sn}\n"
58+
str_metadata += f"protocol_file_name = {sequence_file}\n"
59+
60+
# populate metadata from other config file sections
61+
meta_fields = {"latitude": "GPS:latitude", "longitude": "GPS:longitude",
62+
"offset_pan": "pantilt:offset_pan", "offset_tilt": "pantilt:offset_tilt",
63+
"azimuth_switch": "pantilt:azimuth_switch"}
64+
65+
for key in meta_fields:
66+
try:
67+
conf_sec, conf_parm = split(":", meta_fields[key])
68+
str_metadata += f"{key} = {config[conf_sec][conf_parm]}\n"
69+
70+
except (KeyError) as e:
71+
warning(f"{e} not found in '{config_file}' while parsing '{meta_fields[key]}'")
72+
73+
return str_metadata
5774

58-
def create_metadata():
59-
pass
6075

6176

6277
if __name__ == '__main__':
63-
print(parse_config_metadata())
78+
from argparse import ArgumentParser
79+
parser = ArgumentParser()
80+
parser.add_argument("-f", "--filename", type=str, required=True,
81+
help="Select a protocol file (txt, csv)")
82+
83+
from logging import basicConfig, DEBUG
84+
log_fmt = '[%(levelname)-7s %(asctime)s] (%(module)s) %(message)s'
85+
dt_fmt = '%H:%M:%S'
86+
basicConfig(level=DEBUG, format=log_fmt, datefmt=dt_fmt)
87+
args = parser.parse_args()
88+
info("\n" + parse_config_metadata(args.filename))

hypernets/abstract/geometry.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def __init__(self, reference: int, pan=0.0, tilt=0.0, flags=[]):
4949
def __str__(self):
5050
ref_pan, ref_tilt = Geometry.int_to_reference(self.reference)
5151
str_output = f"{self.pan:.2f} ({ref_pan}) ; {self.tilt:.2f} ({ref_tilt})" # noqa
52-
str_output += f" --> [{self.pan_abs:.2f} ; {self.tilt_abs:.2f}]"
52+
str_output += f" --> [{self.pan_abs:.2f} ; {self.tilt_abs:.2f}] (abs)"
5353
str_output += f" -- {self.flags}"
5454
return str_output
5555

@@ -106,31 +106,29 @@ def get_absolute_pan_tilt(self, now=None):
106106
config_file = "config_dynamic.ini"
107107
config = ConfigParser()
108108
config.read(config_file)
109-
offset_pan = int(config["pantilt"]["offset_pan"])
110-
offset_tilt = int(config["pantilt"]["offset_tilt"])
111-
reverse_tilt = config["pantilt"]["reverse_tilt"] == "yes"
112-
azimuth_switch = int(config["pantilt"]["azimuth_switch"])
109+
offset_pan = float(config["pantilt"]["offset_pan"])
110+
offset_tilt = float(config["pantilt"]["offset_tilt"])
111+
azimuth_switch = float(config["pantilt"]["azimuth_switch"])
113112

114113
except KeyError as key:
115114
warning(f" {key} default values loaded")
116115
# Default values :
117116
# offset_tilt = 0
118-
offset_pan, reverse_tilt = 0, False
117+
offset_pan = 0
119118
azimuth_switch = 360
120119

121120
except Exception as e:
122121
error(f"Config Error : {e}")
123122

124123
from operator import neg, pos
125-
reverse_tilt = {True: neg, False: pos}[reverse_tilt]
126124

127125
self.pan_abs, self.tilt_abs = self.pan, self.tilt
128126
pan_ref, tilt_ref = Geometry.int_to_reference(self.reference)
129127

130128

131129
# Get sun position
132130
if 'sun' in [pan_ref, tilt_ref]: # pickle me :
133-
from hypernets.geometry.spa.spa_hypernets import spa_from_datetime
131+
from hypernets.geometry.spa_hypernets import spa_from_datetime
134132
azimuth_sun, zenith_sun = spa_from_datetime(now=now)
135133
zenith_sun = 180 - zenith_sun
136134

@@ -168,15 +166,10 @@ def get_absolute_pan_tilt(self, now=None):
168166
if 'sun' in [pan_ref, tilt_ref] or 'hyp' in [pan_ref, tilt_ref]:
169167
# Orientation
170168
if pan_ref in ['sun', 'hyp']:
171-
self.pan_abs -= reverse_tilt(offset_pan)
172-
# self.pan_abs -= offset_pan
169+
self.pan_abs -= offset_pan
173170

174171
if tilt_ref in ['sun', 'hyp']:
175-
self.tilt_abs -= reverse_tilt(offset_tilt)
176-
177-
self.tilt_abs = reverse_tilt(self.tilt_abs)
178-
if reverse_tilt is neg:
179-
self.pan_abs = self.pan_abs + 180
172+
self.tilt_abs -= offset_tilt
180173

181174
# force to [0...360] range
182175
self.pan_abs = self.pan_abs % 360

hypernets/abstract/geometry_plot.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def make_pan_tilt_list(geometries, dates):
3333
pan, tilt = list(), list()
3434
for now in dates:
3535
info(f"--> {str(now)}")
36+
now.replace(tzinfo=timezone.utc)
3637
geometry.get_absolute_pan_tilt(now)
3738
pan.append(geometry.pan_abs)
3839
tilt.append(geometry.tilt_abs)

0 commit comments

Comments
 (0)