@@ -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