Skip to content

Commit 60a7222

Browse files
committed
Added abs folder to stroe computed absorbance spectra
1 parent 5df3b6c commit 60a7222

File tree

1 file changed

+102
-39
lines changed

1 file changed

+102
-39
lines changed

application.py

Lines changed: 102 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ def get_selected_absorbance(self, scopes):
542542
# referenceChannel, thus we don't do it.
543543

544544
if key != chosen:
545-
abs_spectras["ABSORBANCE-{}".format(key)] = \
545+
abs_spectras["abs-{}".format(key)] = \
546546
spectro.Spectrum.absorbanceSpectrum(
547547
ref_spectrum, scopes[key])
548548

@@ -1379,12 +1379,12 @@ def experiment(self):
13791379
else:
13801380
experiment_logger.info("Experiment finished.")
13811381

1382-
self.treatSpectras(raw_timestamp)
1382+
self.treatSpectras(raw_timestamp, abs_timestamp)
13831383
self.avh.release()
13841384
self.pause_live_display.clear()
13851385
self.processing_text["text"] = "No running experiment..."
13861386

1387-
def treatSpectras(self, folder_id):
1387+
def treatSpectras(self, folder_id, abs_folder_id):
13881388
"""
13891389
This method is used to export spectra contained in folder_id.
13901390
This will proceed by getting all spectra corresponding to each channel
@@ -1398,27 +1398,21 @@ def format_data(filepath, datas):
13981398
"""
13991399
Parameters :
14001400
- filepath -- filepath to file where datas need to be saved
1401-
- datas -- data list organized as follows :
1402-
[lambdas, black, white, spectrum1, spectrum2, ...]
1401+
- datas -- dict as follows :
1402+
{(spect-position-in-file, spec-name):spec, ...}
14031403
"""
14041404
begin = " "
1405-
for i, spect_tup in enumerate(datas):
1406-
if i == 0:
1407-
begin_format_str = "LAMBDA"
1408-
elif i == 1:
1409-
begin_format_str = "BLACK"
1410-
elif i == 2:
1411-
begin_format_str = "REF"
1412-
else:
1413-
begin_format_str = "SP{}"
1414-
begin += "{: ^16s}".format(begin_format_str.format(i-2))
1405+
for i, name in datas.keys():
1406+
begin += "{: ^16s}".format(name)
14151407
format_str = " "\
14161408
+ " ".join(["{:=+012.5F}" for spect in datas])
14171409
with open(filepath, "w") as file:
14181410
file.write(begin+"\n")
1419-
for tup in zip(*datas):
1411+
for tup in zip(*tup(datas.values())):
14201412
file.write(format_str.format(*tup)+"\n")
14211413
file.close()
1414+
1415+
# This is the timestamp as returned at the begining of the experiment
14221416
timeStamp = folder_id[:-3]
14231417

14241418
dir_path = tkFileDialog.\
@@ -1429,6 +1423,8 @@ def format_data(filepath, datas):
14291423
critical("No Dir Path gave, impossible to save spectra.")
14301424
return None
14311425

1426+
# CREATE FOLDERS
1427+
14321428
save_dir = dir_path + os.sep + "saves{}".format(timeStamp)
14331429
os.mkdir(save_dir)
14341430

@@ -1441,6 +1437,11 @@ def format_data(filepath, datas):
14411437
cosmetic_path = save_dir + os.sep + "cosmetic"
14421438
os.mkdir(cosmetic_path)
14431439

1440+
abs_path = save_dir + os.sep + "abs"
1441+
os.mkdir(abs_path)
1442+
1443+
# SAVE RAW SPECTRA
1444+
14441445
channel_ids = [tup[0] for tup in self.avh.devList.values()]
14451446

14461447
for id in channel_ids:
@@ -1455,43 +1456,105 @@ def format_data(filepath, datas):
14551456
float(self.config_dict[self.ENDLAM_ID].get()),
14561457
int(self.config_dict[self.NRPTS_ID].get())))
14571458

1459+
to_save = dict(
1460+
[
1461+
((1, "LAMBDAS"),
1462+
self.spectra_storage.latest_black[id].lambdas),
1463+
((2, "BLACK"),
1464+
self.spectra_storage.latest_black[id].values),
1465+
((3, "WHITE"),
1466+
self.spectra_storage.latest_white[id].values)
1467+
] + [
1468+
((i+4, "SP{}".format(i+1)),
1469+
spectrum.values) for i, spectrum in enumerate(
1470+
to_save.values()
1471+
)
1472+
])
14581473
format_data(
1459-
raw_path + os.sep + "raw{}_chan{}.txt".format(timeStamp, id),
1460-
[
1461-
self.spectra_storage.latest_black[id].lambdas, # LAMBDAS
1462-
self.spectra_storage.latest_black[id].values, # BLACK
1463-
self.spectra_storage.latest_white[id].values # WHITE
1464-
] + [spectrum.values for spectrum in to_save.values()]
1474+
raw_path + os.sep + "raw-{}-{}.txt".format(id, timeStamp),
1475+
to_save
14651476
)
14661477

14671478
# Saving Interpolated datas
14681479

1469-
interpolated = [interp_lam_range]
1470-
for spectrum in to_save.values():
1471-
interpolated.append(spectrum.getInterpolated(
1472-
startingLamb=interp_lam_range[0],
1473-
endingLamb=interp_lam_range[-1],
1474-
nrPoints=len(interp_lam_range)).values)
1480+
interpolated = [((1, "LAMBDAS"), interp_lam_range)]
1481+
for name, spectrum in list(to_save.items())[1:]: # All except 0
1482+
interpolated.append(
1483+
(
1484+
name,
1485+
spectrum.getInterpolated(
1486+
startingLamb=interp_lam_range[0],
1487+
endingLamb=interp_lam_range[-1],
1488+
nrPoints=len(interp_lam_range)
1489+
).values
1490+
)
1491+
)
14751492
format_data(interp_path + os.sep
1476-
+ "interp{}_chan{}.txt".format(timeStamp, id),
1477-
interpolated)
1493+
+ "interp-{}-{}.txt".format(id, timeStamp),
1494+
dict(interpolated))
14781495

14791496
# Saving Cosmetic datas
14801497

1481-
cosmetic = [interp_lam_range]
1482-
for spectrum in to_save.values():
1483-
cosmetic.append(spectrum.getInterpolated(
1484-
startingLamb=interp_lam_range[0],
1485-
endingLamb=interp_lam_range[-1],
1486-
nrPoints=len(interp_lam_range),
1487-
smoothing=True).values)
1498+
cosmetic = [((1, "LAMBDAS"), interp_lam_range)]
1499+
for name, spectrum in list(to_save.items())[1:]: # All except 0
1500+
cosmetic.append(
1501+
(
1502+
name,
1503+
spectrum.getInterpolated(
1504+
startingLamb=interp_lam_range[0],
1505+
endingLamb=interp_lam_range[-1],
1506+
nrPoints=len(interp_lam_range),
1507+
smoothing=True
1508+
).values
1509+
)
1510+
)
14881511
format_data(cosmetic_path + os.sep
1489-
+ "cosm{}_chan{}.txt".format(timeStamp, id), cosmetic)
1512+
+ "cosm-{}-{}.txt".format(id, timeStamp),
1513+
dict(cosmetic))
1514+
1515+
# SAVE ABSORBANCE SPECTRA
1516+
1517+
# Here we correct black from reference spectra.
1518+
tp_reference = dict([])
1519+
for key in self.spectra_storage.latest_white:
1520+
tp_reference[key] = \
1521+
self.spectra_storage.latest_white[key]\
1522+
- self.spectra_storage.latest_black[key]
1523+
1524+
# Check is a reference channel is set, if not, raise a Warning
1525+
# else, compute the machine absorbance for further spectrum correction
1526+
if self.referenceChannel.get() != "":
1527+
correction_spectrum = self.get_selected_absorbance(
1528+
tp_reference
1529+
)
1530+
else:
1531+
1532+
raise UserWarning(
1533+
"No reference channel selected, aborting."
1534+
)
1535+
1536+
for name in correction_spectrum:
1537+
to_save = [
1538+
((1, "LAMBDAS"), correction_spectrum.lambdas),
1539+
((2, "MACH.ABS."), correction_spectrum.values)
1540+
]
1541+
1542+
spectras = self.spectra_storage[abs_folder_id, :, name]
1543+
for i, spectrum in spectras.items():
1544+
to_save.append(
1545+
((i+3, "ABS.SP{}".format(i+1)), spectrum)
1546+
)
1547+
1548+
format_data(
1549+
abs_path + os.sep + "{}-{}.txt".format(name, timeStamp),
1550+
to_save
1551+
)
14901552

1491-
config_dict = self.get_saving_dict()
14921553

14931554
# Here we write all informations about current configuration
14941555

1556+
config_dict = self.get_saving_dict()
1557+
14951558
with open(save_dir + os.sep + "config.txt", "w") as file:
14961559
file.write("BNC parameters :\n")
14971560
for i, pulse_dict in enumerate(config_dict[0]): # bnc

0 commit comments

Comments
 (0)