Skip to content

Commit 93afc6f

Browse files
committed
Add writer in L0
1 parent a915570 commit 93afc6f

File tree

1 file changed

+58
-69
lines changed

1 file changed

+58
-69
lines changed

hypernets_processor/data_io/hypernets_reader.py

Lines changed: 58 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from hypernets_processor.data_io.hypernets_ds_builder import HypernetsDSBuilder
1818
from hypernets_processor.version import __version__
1919
from hypernets_processor.data_io.dataset_util import DatasetUtil as du
20+
2021
'''___Authorship___'''
2122
__author__ = "Clémence Goyens"
2223
__created__ = "12/2/2020"
@@ -57,15 +58,14 @@ def read_header(self, f, headerDef):
5758
data = f.read(headLen)
5859
print(data)
5960
if len(data) != headLen:
60-
print("Data length not silimar to headlength")
61+
self.context.logger.error("Spectra length not similar to header length")
6162
break
6263
continue
63-
if version_info > (3, 0):
64-
print("%02X " * headLen % (tuple([b for b in data])))
65-
else:
66-
print("%02X " * headLen % (tuple([ord(b) for b in data])))
64+
# if version_info > (3, 0):
65+
# print("%02X " * headLen % (tuple([b for b in data])))
66+
# else:
67+
# print("%02X " * headLen % (tuple([ord(b) for b in data])))
6768
var, = unpack(headFormat, data)
68-
print(var)
6969
if headName == "Pixel Count": pixel_count = var
7070
if headName == "Spectrum Type Information":
7171
specInfo = format(ord(data), '#010b')
@@ -76,9 +76,6 @@ def read_header(self, f, headerDef):
7676
# bit 4 for radiance,
7777
# bit 3 for irradiance,
7878
# bits 4 and 3 for dark;
79-
80-
print(specInfo)
81-
8279
strInfo = ""
8380

8481
if specInfo[7]: strInfo += "VIS " # noqa
@@ -89,22 +86,21 @@ def read_header(self, f, headerDef):
8986
if specInfo[4] and not specInfo[3]: strInfo += "Rad" # noqa
9087
if specInfo[3] and specInfo[4]: strInfo += "Error" # noqa
9188

92-
print("Spectrum Type Info : %s " % strInfo)
89+
self.context.logger.info("Spectrum Type Info : %s " % strInfo)
9390

9491
header[headName] = var
9592
return header
9693

9794
def read_data(self, f, data_len):
98-
# print(f)
9995
prev = 0
100-
print("Reading Data spectra ...")
96+
self.context.logger.info("Reading Data spectra ...")
10197
dataSpectra = []
10298
print(data_len)
10399
for i in range(int(data_len)): # Last read data is count
104100
# print(i)
105101
data = f.read(2)
106102
if len(data) != 2:
107-
print("Warning : impossible to read 2 bytes")
103+
self.context.logger.error("Warning : impossible to read 2 bytes")
108104
break
109105
continue
110106

@@ -117,28 +113,27 @@ def read_data(self, f, data_len):
117113

118114
def read_footer(self, f, datalength):
119115
# print(f)
120-
print("Reading CRC32 ...")
116+
self.context.logger.info("Reading CRC32 ...")
121117
data = f.read(datalength)
122118
unpackData, = unpack('<I', data)
123-
print(unpackData)
124119

125120
def read_wavelength(self, pixcount):
126121

127122
import numpy as np
128123
print(pixcount)
129124
pix = np.linspace(0, pixcount, pixcount)
130125
if pixcount == 2048:
131-
print("Visible spectra, pixel count {}".format(pix))
126+
self.context.logger.info("Visible spectra, pixel count {}".format(pix))
132127
cc = self.cc_vis
133128
# or rather have it estimated only once for vis and swir?
134129
wvl = float(cc['mapping_vis_a']) + pix * float(cc['mapping_vis_b']) + pix ** 2 * float(cc['mapping_vis_c'])
135130
+pix ** 3 * float(cc['mapping_vis_d']) + pix ** 4 * float(cc['mapping_vis_e'])
136131
+pix ** 5 * float(cc['mapping_vis_f'])
137-
print("Wavelength range:", min(wvl), "-", max(wvl))
132+
self.context.logger.info("Wavelength range:", min(wvl), "-", max(wvl))
138133

139134
elif pixcount == 256:
140135
file = '/home/cgoyens/OneDrive/BackUpThinkpadClem/Projects/HYPERNETS/NetworkDesign_D52/DataProcChain/hypernets_processor/hypernets_processor/data_io/tests/reader/SWIR_wvl'
141-
print("SWIR spectra, pixel count {}".format(pix))
136+
self.context.logger.info("SWIR spectra, pixel count {}".format(pix))
142137
# or rather have it estimated only once for vis and swir?
143138
wvl = np.loadtxt(file, delimiter="\t")
144139

@@ -148,7 +143,6 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
148143

149144
model_name = self.model
150145

151-
152146
# 1. Read header to create template dataset (including wvl and scan dimensions + end of file!!)
153147
# ----------------------------------------
154148

@@ -188,9 +182,9 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
188182
# Header definition with length, description and decoding format
189183

190184
header = self.read_header(f, HEADER_DEF)
191-
print(header)
185+
self.context.logger.debugger(header)
192186

193-
pixCount= header['Pixel Count']
187+
pixCount = header['Pixel Count']
194188

195189
# if bool(header) == False:
196190
# print("Data corrupt go to next line")
@@ -207,7 +201,6 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
207201
# -----------------------------------
208202
dim_sizes_dict = {"wavelength": len(wvl), "scan": scanDim}
209203

210-
print("Wvl and Scan Dimensions:", len(wvl), scanDim)
211204
# use template from variables and metadata in format
212205
ds = HypernetsDSBuilder().create_ds_template(dim_sizes_dict=dim_sizes_dict, ds_format=fileformat)
213206

@@ -220,11 +213,9 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
220213

221214
# read all spectra (== spe files with concanated files) in a series
222215
for spectra in series:
223-
print(spectra)
224216
model = dict(zip(model_name, spectra.split('_')[:-1]))
225217
specBlock = model['series_rep'] + '_' + model['series_id'] + '_' + model['vaa'] + '_' + model[
226218
'azimuth_ref'] + '_' + model['vza']
227-
print(specBlock)
228219
# spectra attributes from metadata file
229220
specattr = dict(metadata[specBlock])
230221

@@ -253,17 +244,16 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
253244
while nextLine:
254245
# if no header comment those lines
255246
header = self.read_header(f, HEADER_DEF)
256-
print(header)
257247
if bool(header) == False:
258-
print("Data corrupt go to next line")
248+
self.context.logger.error("Data corrupt go to next line")
259249
break
260250
continue
261-
pixCount= header['Pixel Count']
251+
pixCount = header['Pixel Count']
262252
scan = self.read_data(f, pixCount)
263253
# should include this back again when crc32 is in the headers!
264-
#crc32 = self.read_footer(f, 4)
254+
# crc32 = self.read_footer(f, 4)
265255

266-
#HypernetsReader(self.context).plot_spectra(spectra, scan)
256+
# HypernetsReader(self.context).plot_spectra(spectra, scan)
267257

268258
# fill in dataset
269259
# maybe xarray has a better way to do - check merge, concat, ...
@@ -320,10 +310,6 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
320310
ds['acceleration_y_std'][scan_number] = header['acceleration_y_std'] * a / b
321311
ds['acceleration_z_mean'][scan_number] = header['acceleration_z_mean'] * a / b
322312
ds['acceleration_z_std'][scan_number] = header['acceleration_z_std'] * a / b
323-
324-
print(header['Pixel Count'])
325-
print(pixCount)
326-
print(len(scan))
327313
ds['digital_number'][0:pixCount, scan_number] = scan
328314

329315
scan_number += 1
@@ -335,8 +321,8 @@ def read_series(self, seq_dir, series, lat, lon, metadata, flag, fileformat):
335321

336322
def read_metadata(self, seq_dir):
337323

338-
model_name=self.model
339-
flag=0
324+
model_name = self.model
325+
flag = 0
340326
# Spectra name : AA_BBB_CCCC_D_EEEE_FFF_GG_HHHH_II_JJJJ.spe
341327

342328
# A : iterator over "the sequence repeat time"
@@ -372,8 +358,6 @@ def read_metadata(self, seq_dir):
372358

373359
metadata = ConfigParser()
374360

375-
print(os.path.join(seq_dir, "metadata.txt"))
376-
377361
if os.path.exists(os.path.join(seq_dir, "metadata.txt")):
378362
metadata.read(os.path.join(seq_dir, "metadata.txt"))
379363
# ------------------------------
@@ -389,18 +373,18 @@ def read_metadata(self, seq_dir):
389373
elif 'lat' in (globalattr.keys()):
390374
lat = float(globalattr['lat'])
391375
else:
392-
print("Latitude is not given, use default")
376+
# self.context.logger.error("Latitude is not given, use default")
393377
lat = self.context.get_config_value("lat")
394-
flag = flag + 2 ** self.context.get_config_value("lat_default") #du.set_flag(flag, "lat_default") #
378+
flag = flag + 2 ** self.context.get_config_value("lat_default") # du.set_flag(flag, "lat_default") #
395379

396380
if 'longitude' in (globalattr.keys()):
397381
lon = float(globalattr['longitude'])
398382
elif 'lon' in (globalattr.keys()):
399383
lon = float(globalattr['lon'])
400384
else:
401-
print("Longitude is not given, use default")
385+
# self.context.logger.error("Longitude is not given, use default")
402386
lon = self.context.get_config_value("lon")
403-
flag = flag + 2 ** self.context.get_config_value("lon_default") #du.set_flag(flag, "lon_default") #
387+
flag = flag + 2 ** self.context.get_config_value("lon_default") # du.set_flag(flag, "lon_default") #
404388

405389
# 2. Estimate wavelengths - NEED TO CHANGE HERE!!!!!!
406390
# ----------------------
@@ -441,7 +425,7 @@ def read_metadata(self, seq_dir):
441425
# ACTION_NONE : 0x03 (03)
442426
index_action = model_name.index("action")
443427
action = [re.split('_|\.', i)[index_action] for i in seriesName]
444-
print(action)
428+
# self.context.logger.info(action)
445429

446430
# this is slow????
447431
seriesIrr = [x for x, y in zip(seriesName, action) if int(y) == 8]
@@ -450,10 +434,10 @@ def read_metadata(self, seq_dir):
450434

451435

452436
else:
453-
print("Missing metadata file in sequence directory - check sequence directory")
437+
self.context.logger.error("Missing metadata file in sequence directory - check sequence directory")
454438
exit()
455439

456-
return seq, lat, lon, cc, metadata, seriesIrr, seriesRad, seriesBlack, seriesPict,flag
440+
return seq, lat, lon, cc, metadata, seriesIrr, seriesRad, seriesBlack, seriesPict, flag
457441

458442
def read_sequence(self, seq_dir, setfile=None):
459443

@@ -462,55 +446,60 @@ def read_sequence(self, seq_dir, setfile=None):
462446
settings_file = setfile
463447

464448
# define data to return none at end of method if does not exist
465-
L0_IRR = None
466-
L0_RAD = None
467-
L0_BLA = None
449+
l0_irr = None
450+
l0_rad = None
451+
l0_bla = None
468452

469453
seq, lat, lon, cc, metadata, seriesIrr, seriesRad, seriesBlack, seriesPict, flag = self.read_metadata(
470454
seq_dir)
471455

472456
if seriesIrr:
473-
L0_IRR = self.read_series(seq_dir, seriesIrr, lat, lon, metadata, flag, "L0_IRR")
474-
457+
l0_irr = self.read_series(seq_dir, seriesIrr, lat, lon, metadata, flag, "l0_irr")
458+
if self.context.get_config_value("write_l0"):
459+
self.writer.write(l0_irr, overwrite=True)
475460
# can't use this when non concatanted spectra
476461
# if all([os.path.isfile(os.path.join(seq_dir,"RADIOMETER/",f)) for f in seriesIrr]):
477-
# L0_IRR=read_series(seriesIrr,cc, lat, lon, metadata, "L0_IRR")
462+
# l0_irr=read_series(seriesIrr,cc, lat, lon, metadata, "l0_irr")
478463
# else:
479464
# print("Irradiance files listed but don't exist")
480465
else:
481-
print("No irradiance data for this sequence")
466+
self.context.logger.error("No irradiance data for this sequence")
482467

483468
if seriesRad:
484-
L0_RAD = self.read_series(seq_dir, seriesRad, lat, lon, metadata,flag, "L0_RAD")
469+
l0_rad = self.read_series(seq_dir, seriesRad, lat, lon, metadata, flag, "l0_rad")
470+
if self.context.get_config_value("write_l0"):
471+
self.writer.write(l0_rad, overwrite=True)
485472
# if all([os.path.isfile(os.path.join(seq_dir,"RADIOMETER/",f)) for f in seriesRad]):
486-
# L0_RAD=read_series(seriesRad,cc, lat, lon, metadata, "L0_RAD")
473+
# l0_rad=read_series(seriesRad,cc, lat, lon, metadata, "l0_rad")
487474
# else:
488475
# print("Radiance files listed but don't exist")
489476
else:
490-
print("No radiance data for this sequence")
477+
self.context.logger.error("No radiance data for this sequence")
491478

492479
if seriesBlack:
493-
L0_BLA = self.read_series(seq_dir, seriesBlack, lat, lon, metadata,flag, "L0_BLA")
480+
l0_bla = self.read_series(seq_dir, seriesBlack, lat, lon, metadata, flag, "l0_bla")
481+
if self.context.get_config_value("write_l0"):
482+
self.writer.write(l0_bla, overwrite=True)
494483
# if all([os.path.isfile(os.path.join(seq_dir, "RADIOMETER/", f)) for f in seriesBlack]):
495-
# L0_BLA = self.read_series(seq_dir, seriesBlack, cc, lat, lon, metadata, "L0_BLA")
484+
# l0_bla = self.read_series(seq_dir, seriesBlack, cc, lat, lon, metadata, "l0_bla")
496485
else:
497-
print("No black data for this sequence")
486+
self.context.logger.error("No black data for this sequence")
498487

499488
if seriesPict:
500489
print("Here we should move the pictures to some place???")
501490
else:
502-
print("No pictures for this sequence")
503-
504-
return L0_IRR, L0_RAD, L0_BLA
505-
506-
def read_flag(self, flagint):
507-
flagarray = 2 ** (np.linspace(0, 31, 32))
508-
flags = []
509-
while flagint:
510-
r = 2 ** round(math.log2(flagint), 0)
511-
flags.append(int(np.where(flagarray == r)[0]))
512-
flagint -= r
513-
return(flags)
491+
self.context.logger.error("No pictures for this sequence")
492+
493+
return l0_irr, l0_rad, l0_bla
494+
495+
# def read_flag(self, flagint):
496+
# flagarray = 2 ** (np.linspace(0, 31, 32))
497+
# flags = []
498+
# while flagint:
499+
# r = 2 ** round(math.log2(flagint), 0)
500+
# flags.append(int(np.where(flagarray == r)[0]))
501+
# flagint -= r
502+
# return(flags)
514503

515504

516505
if __name__ == '__main__':

0 commit comments

Comments
 (0)