MAJIS ITL reader#

from majis import read_itl
from majis.itl import save_csv, save_itl, save_xlsm

Load absolute time ITL as EventsDict#

itl_abs = read_itl('absolute_time.itl')

itl_abs
event#t_startt_stop
0MAJ_JUP_DISK_SCAN22032-09-232032-09-23

Load relative time ITL as EventsList (as a flat list)#

itl_rel = read_itl('relative_time.itl', refs='events.evf', flat=True)

itl_rel
t_startt_endINSTRUMENTSCENARIOOBS_NAMETARGETCU_TREPCU_FRAMEBINNINGPPESTART_ROW_VISSTART_ANGLESTOP_ANGLESYNCHRONOUSSTART_SCAN_SPEEDSTOP_SCAN_SPEEDPRIMECOMMENTSITL
02032-09-23T02:58:11.0002032-09-23T03:01:59.900MAJISS007_01MAJ_JUP_DISK_SCAN_101JUPITER100ms109164436-0.27937+0.23385+3+0.0022421078+0.0022421078Falserelative_time.itl
12032-09-23T03:04:34.0002032-09-23T03:08:22.900MAJISS007_01MAJ_JUP_DISK_SCAN_102JUPITER200ms109464802-0.37981+0.13341+3+0.0022421078+0.0022421078Falserelative_time.itl

Concatenate ITL files into a single file#

save_itl('output.itl', itl_abs, itl_rel)
# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_101 TARGET=JUPITER CU_TREP=100ms CU_FRAME=109 BINNING=1 PPE=64 START_ROW_VIS=436
# MAJIS - START_ANGLE=-0.27937 STOP_ANGLE=+0.23385 SYNCHRONOUS=+3 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
2032-09-23T02:58:11.000Z  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN
2032-09-23T03:01:59.900Z  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_102 TARGET=JUPITER CU_TREP=200ms CU_FRAME=109 BINNING=4 PPE=64 START_ROW_VIS=802
# MAJIS - START_ANGLE=-0.37981 STOP_ANGLE=+0.13341 SYNCHRONOUS=+3 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
2032-09-23T03:04:34.000Z  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN
2032-09-23T03:08:22.900Z  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_001 TARGET=JUPITER CU_TREP=500ms CU_FRAME=300 BINNING=1 PPE=400 START_ROW_VIS=100
# MAJIS - START_ANGLE=-1.31051 STOP_ANGLE=+0.10202 SYNCHRONOUS=0 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
# MAJIS - COMMENTS : MULTI WORDS COMMENT with , and ;
# MAJIS - COMMENTS : MULTI LINES COMMENT
2032-09-23T05:15:45.000Z  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN (PRIME=TRUE)
2032-09-23T05:26:15.000Z  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_002 TARGET=JUPITER CU_TREP=2100ms CU_FRAME=300 BINNING=2 PPE=400 START_ROW_VIS=372
# MAJIS - START_ANGLE=+1.32935 STOP_ANGLE=-0.08318 SYNCHRONOUS=+3 START_SCAN_SPEED=-0.0022421078 STOP_SCAN_SPEED=-0.0022421078
2032-09-23T06:09:45.000Z  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN (PRIME=TRUE)
2032-09-23T06:20:15.000Z  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

Note

  • When multiple ITL are provided, they will be concatenate and ordered by increasing time.

  • Absolute and relative ITL are compatible.

  • Observation block must not overlap (can be by-pass with overlap=True)

  • If no relative reference is provided, the output will be in absolute time (see below for relative time).

Export ITL with repesct to a relative time reference:#

save_itl('output.itl', itl_abs, itl_rel, ref='01-SEP-2032_00:00:02 EVENT_NAME (COUNT = 1)')
# Relative time reference:
# 2032-09-01T00:00:02  EVENT_NAME (COUNT = 1)

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_101 TARGET=JUPITER CU_TREP=100ms CU_FRAME=109 BINNING=1 PPE=64 START_ROW_VIS=436
# MAJIS - START_ANGLE=-0.27937 STOP_ANGLE=+0.23385 SYNCHRONOUS=+3 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
EVENT_NAME (COUNT = 1)  +022.02:58:09.000  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN
EVENT_NAME (COUNT = 1)  +022.03:01:57.900  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_102 TARGET=JUPITER CU_TREP=200ms CU_FRAME=109 BINNING=4 PPE=64 START_ROW_VIS=802
# MAJIS - START_ANGLE=-0.37981 STOP_ANGLE=+0.13341 SYNCHRONOUS=+3 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
EVENT_NAME (COUNT = 1)  +022.03:04:32.000  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN
EVENT_NAME (COUNT = 1)  +022.03:08:20.900  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_001 TARGET=JUPITER CU_TREP=500ms CU_FRAME=300 BINNING=1 PPE=400 START_ROW_VIS=100
# MAJIS - START_ANGLE=-1.31051 STOP_ANGLE=+0.10202 SYNCHRONOUS=0 START_SCAN_SPEED=+0.0022421078 STOP_SCAN_SPEED=+0.0022421078
# MAJIS - COMMENTS : MULTI WORDS COMMENT with , and ;
# MAJIS - COMMENTS : MULTI LINES COMMENT
EVENT_NAME (COUNT = 1)  +022.05:15:43.000  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN (PRIME=TRUE)
EVENT_NAME (COUNT = 1)  +022.05:26:13.000  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

# MAJIS - SCENARIO=S007_01 OBS_NAME=MAJ_JUP_DISK_SCAN_002 TARGET=JUPITER CU_TREP=2100ms CU_FRAME=300 BINNING=2 PPE=400 START_ROW_VIS=372
# MAJIS - START_ANGLE=+1.32935 STOP_ANGLE=-0.08318 SYNCHRONOUS=+3 START_SCAN_SPEED=-0.0022421078 STOP_SCAN_SPEED=-0.0022421078
EVENT_NAME (COUNT = 1)  +022.06:09:43.000  MAJIS  OBS_START  MAJ_JUP_DISK_SCAN (PRIME=TRUE)
EVENT_NAME (COUNT = 1)  +022.06:20:13.000  MAJIS  OBS_END    MAJ_JUP_DISK_SCAN

Export ITL to CSV#

save_csv('output.csv', itl_abs)
#OBS_NAME;OBS_START;OBS_END;INSTRUMENT;SCENARIO;TARGET;CU_TREP;CU_FRAME;BINNING;PPE;START_ROW_VIS;START_ANGLE;STOP_ANGLE;SYNCHRONOUS;START_SCAN_SPEED;STOP_SCAN_SPEED;PRIME;ITL;COMMENTS
MAJ_JUP_DISK_SCAN_001;2032-09-23T05:15:45.000Z;2032-09-23T05:26:15.000Z;MAJIS;S007_01;JUPITER;500ms;300;1;400;100;-1.31051;+0.10202;0;+0.0022421078;+0.0022421078;True;absolute_time.itl;"MULTI WORDS COMMENT with , and ; / MULTI LINES COMMENT"
MAJ_JUP_DISK_SCAN_002;2032-09-23T06:09:45.000Z;2032-09-23T06:20:15.000Z;MAJIS;S007_01;JUPITER;2100ms;300;2;400;372;+1.32935;-0.08318;+3;-0.0022421078;-0.0022421078;True;absolute_time.itl;"None"

Export ITL to XLSM timeline#

save_xlsm('output.xlsm', itl_abs, ca_ref='01-SEP-2032_00:00:02 CA_REF (COUNT = 1)')
Event NamePhaseblockCommentsOBS_NAMEstart_time_relative_castop_time_relative_castart_time_utcstop_time_utcpointing descMAJIS resolprimeMAJIS ODF nameITL nameMirror Flagstart_anglestart_scan_speedstop_scan_speedScanner step per framestop_anglescanner_timetot (ms)First CU_frame start wrt C/ALast CU_frame stop wrt C/AFirst CU_frame start (UTC)Last CU_frame stop (UTC)cu_trep_msspatial_binningobs durat (sec) (w/o borders)nb_cu_frames_totnb_cu_frames_tot (computed)ppeSpectral MappingNumber of spectels after spectral binningNb of bits per spectel after compressiondatarate (bits/s)DV (Mbits)Browse ParametersNumber of browse spectelsNb of bits per browse spectel after compressionbrowse datarate (bits/s)browse DV (Mbits)Image ModeDark StrategyDark SubtractionVI flagIR flagVI ReadoutIR ReadoutStart Row VIStart Row IRVI Despiking NVI Despiking MVI Despiking KVI TintVI GainVI OffsetVI NPEIR Despiking NIR Despiking MIR Despiking KIR TintIR GainIR OffsetIR NPEPower (W)Science mode (for power estimation)
MULTI WORDS COMMENT with , and ; / MULTI LINES COMMENTMAJ_JUP_DISK_SCAN_001MAJISabsolute_time.itlENABLE-1.310510.00224210780.002242107800.10202=IF(AND(Mirror_Flag="ENABLE",ABS(Scanner_step_per_frame)<>3), IF(start_scan_speed=stop_scan_speed, ABS( (stop_angle - start_angle) / start_scan_speed ) *1000, ABS( (stop_angle - start_angle) / (stop_scan_speed - start_scan_speed) * LN( stop_scan_speed / start_scan_speed ) ) *1000 ), "N/A")+022.05:15:43.000+022.05:26:13.0002032-09-23T05:15:45.000Z2032-09-23T05:26:15.000Z500No Binning300=IF(AND(Mirror_Flag="ENABLE",ABS(Scanner_step_per_frame)<>3), INT( (scanner_timetot__ms / cu_trep_ms) + 0.5), "N/A")400=(VI_flag="ON") * VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,2,FALSE) + (IR_flag="ON") * VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,4,FALSE)=((VI_flag="ON") * (VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,3,FALSE)*VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,2,FALSE)) + (IR_flag="ON") * (VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,5,FALSE)*VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,4,FALSE)) ) / Number_of_spectels_after_spectral_binning=DV__Mbits/cu_trep_ms/ IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A, Last_CU_frame_stop_wrt_C_A)/cu_trep_ms,nb_cu_frames_tot)*(1024*1024)=IF(AND(nb_cu_frames_tot__computed<>"N/A",nb_cu_frames_tot<>nb_cu_frames_tot__computed), "ERROR: nb_cu_frames_tot and nb_cu_frames_tot (computed) are not equal", IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A,Last_CU_frame_stop_wrt_C_A)/cu_trep_ms, nb_cu_frames_tot) * ( ppe / 2^(IF(spatial_binning="No Binning",0,IF(spatial_binning="Binning x2",1,IF(spatial_binning="Binning x4",2,"N/A")))) ) * Number_of_spectels_after_spectral_binning * Nb_of_bits_per_spectel_after_compression / (1024*1024) )=(VI_flag="ON") * VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,2,FALSE) + (IR_flag="ON") * VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,4,FALSE)=IF(Number_of_browse_spectels=0,0, ((VI_flag="ON") * (VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,3,FALSE)*VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,2,FALSE)) + (IR_flag="ON") * (VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,5,FALSE)*VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,4,FALSE)) ) / Number_of_browse_spectels )=browse_DV__Mbits / cu_trep_ms / nb_cu_frames_tot * (1024*1024)=IF(AND(nb_cu_frames_tot__computed<>"N/A",nb_cu_frames_tot<>nb_cu_frames_tot__computed), "ERROR: nb_cu_frames_tot and nb_cu_frames_tot (computed) are not equal", IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A,Last_CU_frame_stop_wrt_C_A)/cu_trep_ms, nb_cu_frames_tot) * ( ppe / 2^(IF(spatial_binning="No Binning",0,IF(spatial_binning="Binning x2",1,IF(spatial_binning="Binning x4",2,"N/A")))) ) * Number_of_browse_spectels * Nb_of_bits_per_browse_spectel_after_compression / (1024*1024) )100=IF(AND(VI_flag="ON",IR_flag="ON"), IF( Mirror_Flag = "ENABLE", power_2ch_science_scanning, power_2ch_science_pointing), IF( Mirror_Flag = "ENABLE", power_1ch_science_scanning, power_1ch_science_pointing))=IF(AND(VI_flag="ON",IR_flag="ON"), IF( Mirror_Flag = "ENABLE", power_2ch_science_scanning_description, power_2ch_science_pointing_description), IF( Mirror_Flag = "ENABLE", power_1ch_science_scanning_description, power_1ch_science_pointing_description))
MAJ_JUP_DISK_SCAN_002MAJISabsolute_time.itlENABLE1.32935-0.0022421078-0.00224210783-0.08318=IF(AND(Mirror_Flag="ENABLE",ABS(Scanner_step_per_frame)<>3), IF(start_scan_speed=stop_scan_speed, ABS( (stop_angle - start_angle) / start_scan_speed ) *1000, ABS( (stop_angle - start_angle) / (stop_scan_speed - start_scan_speed) * LN( stop_scan_speed / start_scan_speed ) ) * 1000), "N/A")+022.06:09:43.000+022.06:20:13.0002032-09-23T06:09:45.000Z2032-09-23T06:20:15.000Z2100Binning x2300=IF(AND(Mirror_Flag="ENABLE",ABS(Scanner_step_per_frame)<>3), INT( (scanner_timetot__ms / cu_trep_ms) + 0.5), "N/A")400=(VI_flag="ON") * VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,2,FALSE) + (IR_flag="ON") * VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,4,FALSE)=((VI_flag="ON") * (VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,3,FALSE)*VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,2,FALSE)) + (IR_flag="ON") * (VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,5,FALSE)*VLOOKUP(SPECTRAL_MASK,list_of_spectral_masks,4,FALSE)) ) / Number_of_spectels_after_spectral_binning=DV__Mbits/cu_trep_ms/ IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A, Last_CU_frame_stop_wrt_C_A)/cu_trep_ms,nb_cu_frames_tot)*(1024*1024)=IF(AND(nb_cu_frames_tot__computed<>"N/A",nb_cu_frames_tot<>nb_cu_frames_tot__computed), "ERROR: nb_cu_frames_tot and nb_cu_frames_tot (computed) are not equal", IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A,Last_CU_frame_stop_wrt_C_A)/cu_trep_ms, nb_cu_frames_tot) * ( ppe / 2^(IF(spatial_binning="No Binning",0,IF(spatial_binning="Binning x2",1,IF(spatial_binning="Binning x4",2,"N/A")))) ) * Number_of_spectels_after_spectral_binning * Nb_of_bits_per_spectel_after_compression / (1024*1024) )=(VI_flag="ON") * VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,2,FALSE) + (IR_flag="ON") * VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,4,FALSE)=IF(Number_of_browse_spectels=0,0, ((VI_flag="ON") * (VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,3,FALSE)*VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,2,FALSE)) + (IR_flag="ON") * (VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,5,FALSE)*VLOOKUP(BROWSE_PARAMETERS,list_of_browse_parameters,4,FALSE)) ) / Number_of_browse_spectels)=browse_DV__Mbits / cu_trep_ms / nb_cu_frames_tot * (1024*1024)=IF(AND(nb_cu_frames_tot__computed<>"N/A",nb_cu_frames_tot<>nb_cu_frames_tot__computed), "ERROR: nb_cu_frames_tot and nb_cu_frames_tot (computed) are not equal", IF(nb_cu_frames_tot=65535, DIFF_TIME_CA_ms(First_CU_frame_start_wrt_C_A,Last_CU_frame_stop_wrt_C_A)/cu_trep_ms, nb_cu_frames_tot) * ( ppe / 2^(IF(spatial_binning="No Binning",0,IF(spatial_binning="Binning x2",1,IF(spatial_binning="Binning x4",2,"N/A")))) ) * Number_of_browse_spectels * Nb_of_bits_per_browse_spectel_after_compression / (1024*1024) )372=IF(AND(VI_flag="ON",IR_flag="ON"), IF( Mirror_Flag = "ENABLE", power_2ch_science_scanning, power_2ch_science_pointing), IF( Mirror_Flag = "ENABLE", power_1ch_science_scanning, power_1ch_science_pointing))=IF(AND(VI_flag="ON",IR_flag="ON"), IF( Mirror_Flag = "ENABLE", power_2ch_science_scanning_description, power_2ch_science_pointing_description), IF( Mirror_Flag = "ENABLE", power_1ch_science_scanning_description, power_1ch_science_pointing_description))