;+ ; ; Unit tests for mms_load_fpi ; ; To run: ; IDL> mgunit, 'mms_load_fpi_ut' ; ; warning: ACR tests in test_integration_time_get_dist require special, non-public CDFs ; to work / expect this test to fail if you don't have those files ; ; ; $LastChangedBy: egrimes $ ; $LastChangedDate: 2017-11-28 14:50:45 -0800 (Tue, 28 Nov 2017) $ ; $LastChangedRevision: 24355 $ ; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_00/projects/mms/common/tests/mms_load_fpi_ut__define.pro $ ;- ;; the following are tests for moka_mms_pad_fpi function mms_load_fpi_ut::test_moka_mms_pad_fpi_df_suberr mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1 dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(dist, time='2015-10-16/13:06:30', samples=1, units='df', mag_data='mms1_fgm_b_dmpa_srvy_l2_bvec') return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_eflux_suberr mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1 dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') eflux = moka_mms_pad_fpi(dist, time='2015-10-16/13:06:30', samples=1, units='eflux', mag_data='mms1_fgm_b_dmpa_srvy_l2_bvec') return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_time_window mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(dist, time='2015-10-16/13:06:30', window=6, units='df', mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, array_equal(time_string(df.trange), ['2015-10-16/13:06:30', '2015-10-16/13:06:36']), 'Regression with time/windw in PAD code' return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_trange mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(dist, trange=['2015-10-16/13:06:30', '2015-10-16/13:06:38'], mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, array_equal(time_string(df.trange), ['2015-10-16/13:06:30', '2015-10-16/13:06:38']), 'Regression with trange in PAD code' return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_time_samples mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(dist, time='2015-10-16/13:06:30', samples=14, units='df', mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, array_equal(time_string(df.trange, tformat='YYYY-MM-DD/hh:mm:ss.fff'), ['2015-10-16/13:06:29.775', '2015-10-16/13:06:30.195']), 'Regression with time/samples in PAD code' return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_window_centered mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(/center_time, dist, time='2015-10-16/13:06:30', window=9, units='df', mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, array_equal(time_string(df.trange, tformat='YYYY-MM-DD/hh:mm:ss.fff'), ['2015-10-16/13:06:25.500', '2015-10-16/13:06:34.500']), 'Regression with time/window (centered) in PAD code' return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_nbin mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(nbin=33, dist, trange=['2015-10-16/13:06:30', '2015-10-16/13:06:38'], mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, n_elements(df.pa) eq 35, 'Regression with nbins in PAD code' return, 1 end function mms_load_fpi_ut::test_moka_mms_pad_fpi_norm mms_load_fpi, data_rate='brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], datatype='des-dist', probe=1 mms_load_fgm, trange=['2015-10-16/13:06', '2015-10-16/13:07'], probe=1, data_rate='brst' dist = mms_get_dist('mms1_des_dist_brst', trange=['2015-10-16/13:06', '2015-10-16/13:07'], /subtract_err, error='mms1_des_disterr_brst') df = moka_mms_pad_fpi(/norm, dist, trange=['2015-10-16/13:06:30', '2015-10-16/13:06:38'], mag_data='mms1_fgm_b_dmpa_brst_l2_bvec') assert, array_equal(minmax(df.data), [0.0, 1.0]), 'Regression with /norm keyword in PAD code' return, 1 end ;; end moka_mms_pad_fpi tests function mms_load_fpi_ut::test_subtract_disterr mms_load_fpi, trange=['2015-10-16/13:06', '2015-10-16/13:07'], data_rate='brst', datatype='des-dist', probe=1, /time_clip dist = mms_get_fpi_dist('mms1_des_dist_brst') dist_data = *dist disterr = mms_get_fpi_dist('mms1_des_disterr_brst') disterr_data = *disterr distSub = mms_get_fpi_dist('mms1_des_dist_brst', error='mms1_des_disterr_brst', /subtract_error) distsub_data = *distSub assert, array_equal(dist_data.data-disterr_data.data, distsub_data.data), 'Problem with disterr subtraction in mms_get_fpi_dist' return, 1 end ; regression tests ----------> ; problem / crash with compressionloss variable for fast survey data function mms_load_fpi_ut::test_fast_compressionloss tr_load = time_double('2017-07-17/'+['14:05:00','16:00:00']) mms_load_fpi,trange=tr_load,probe='3',data_rate='fast',level='l2', datatype=['des-dist'] get_data, 'mms3_des_compressionloss_fast_dist', data=d assert, n_elements(d.X) eq n_elements(d.Y), 'Problem with FPI fast survey compressionloss variable' return, 1 end ; FPI distribution error data function mms_load_fpi_ut::test_get_fpi_dist_err mms_load_fpi, datatype='des-dist', trange=['2015-12-15', '2015-12-16'], probe=1 fpi_err_dist = mms_get_dist('mms1_des_disterr_fast') assert, is_struct(*fpi_err_dist), 'Problem with FPI distribution error regression in mms_get_dist' return, 1 end ; same as below, except using mms_get_dist function mms_load_fpi_ut::test_integration_time_get_dist mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype=['dis-dist', 'des-dist'], data_rate='brst' mms_load_fpi, trange=['2016-12-09', '2016-12-10'], datatype=['dis-dist', 'des-dist'], data_rate='brst', level='acr', suffix='acr', probe=1 mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype=['dis-dist', 'des-dist'], data_rate='fast' fpi_dist = mms_get_dist('mms1_dis_dist_brstacr',trange=time_double(['2016-12-09', '2016-12-10']), probe = 1, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.0375)/0.0375d lt 0.001, 'Problem with integration time returned by mms_get_dist (ions, brst, ACR)' fpi_dist = mms_get_dist('mms1_des_dist_brstacr',trange=time_double(['2016-12-09', '2016-12-10']), probe = 1, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.0075)/0.0075d lt 0.001, 'Problem with integration time returned by mms_get_dist (electrons, brst, ACR)' ; with the level keyword fpi_dist = mms_get_dist('mms1_dis_dist_brstacr',trange=time_double(['2016-12-09', '2016-12-10']), probe = 1, species = 'i', level='acr', data_rate='brst') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.0375)/0.0375d lt 0.001, 'Problem with integration time returned by mms_get_dist (ions, brst, level=ACR)' fpi_dist = mms_get_dist('mms1_des_dist_brstacr',trange=time_double(['2016-12-09', '2016-12-10']), probe = 1, species = 'e', level='acr', data_rate='brst') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.0075)/0.0075d lt 0.001, 'Problem with integration time returned by mms_get_dist (electrons, brst, level=ACR)' fpi_dist = mms_get_dist('mms3_dis_dist_brst',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.15)/0.15d lt 0.001, 'Problem with integration time returned by mms_get_dist (ions, brst)' fpi_dist = mms_get_dist('mms3_des_dist_brst',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.03)/0.03d lt 0.001, 'Problem with integration time returned by mms_get_dist (electrons, brst)' fpi_dist = mms_get_dist('mms3_dis_dist_fast',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-4.5)/4.5d lt 0.001, 'Problem with integration time returned by mms_get_dist (ions, fast)' fpi_dist = mms_get_dist('mms3_des_dist_fast',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-4.5)/4.5d lt 0.001, 'Problem with integration time returned by mms_get_dist (electrons, fast)' return, 1 end function mms_load_fpi_ut::test_integration_time_get_i_dist_slow mms_load_fpi, trange=['2015-10-16', '2015-10-17'], datatype='dis-dist', data_rate='slow', level='l1b', probe=4 fpi_dist = mms_get_fpi_dist('mms4_dis_dist_slow',trange=time_double(['2015-10-16', '2015-10-17']), probe = 4, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-59)/59d lt 0.02, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end function mms_load_fpi_ut::test_integration_time_get_e_dist_slow mms_load_fpi, trange=['2015-10-16', '2015-10-17'], datatype='des-dist', data_rate='slow', level='l1b', probe=4 fpi_dist = mms_get_fpi_dist('mms4_des_dist_slow',trange=time_double(['2015-10-16', '2015-10-17']), probe = 4, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-59)/59d lt 0.02, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end function mms_load_fpi_ut::test_integration_time_get_i_dist_brst mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype='dis-dist', data_rate='brst' fpi_dist = mms_get_fpi_dist('mms3_dis_dist_brst',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.15)/0.15d lt 0.001, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end function mms_load_fpi_ut::test_integration_time_get_e_dist_brst mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype='des-dist', data_rate='brst' fpi_dist = mms_get_fpi_dist('mms3_des_dist_brst',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-0.03)/0.03d lt 0.001, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end function mms_load_fpi_ut::test_integration_time_get_i_dist_fast mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype='dis-dist', data_rate='fast' fpi_dist = mms_get_fpi_dist('mms3_dis_dist_fast',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'i') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-4.5)/4.5d lt 0.001, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end function mms_load_fpi_ut::test_integration_time_get_e_dist_fast mms_load_fpi, trange=['2015-10-16/13:00', '2015-10-16/13:10'], datatype='des-dist', data_rate='fast' fpi_dist = mms_get_fpi_dist('mms3_des_dist_fast',trange=time_double(['2015-10-16/13:00', '2015-10-16/13:10']), probe = 3, species = 'e') assert, abs(((*fpi_dist)[0].end_time-(*fpi_dist)[0].time)-4.5)/4.5d lt 0.001, 'Problem with integration time returned by mms_get_fpi_dist' return, 1 end ; tplotnames regressions function mms_load_fpi_ut::test_loading_tplotnames_desmoms mms_load_fpi, trange=['2015-10-15', '2015-10-16'], datatype='des-moms', tplotnames = tplotnames assert, n_elements(tplotnames) eq 39, '(potential) Problem with number of tplotnames returned from mms_load_fpi' return, 1 end function mms_load_fpi_ut::test_loading_tplotnames_desdist mms_load_fpi, trange=['2015-10-15', '2015-10-16'], datatype='des-dist', tplotnames = tplotnames assert, n_elements(tplotnames) eq 12, '(potential) Problem with number of tplotnames returned from mms_load_fpi' return, 1 end function mms_load_fpi_ut::test_loading_tplotnames_des mms_load_fpi, trange=['2015-10-15', '2015-10-16'], datatype=['des-moms', 'des-dist'], tplotnames = tplotnames assert, n_elements(tplotnames) eq 49, '(potential) Problem with number of tplotnames returned from mms_load_fpi' return, 1 end ; user requests a few seconds after file start time function mms_load_fpi_ut::test_seconds_after_file_start_spdf mms_load_fpi, trange=['2015-10-15/6:45:21', '2015-10-15/6:51:21'], data_rate='brst', level='l2', /spdf assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:54:59'), $ 'Error! Not grabbing the correct data from the SPDF??? (1)' return, 1 end ; user requests a few seconds after file end time function mms_load_fpi_ut::test_seconds_after_file_end_spdf mms_load_fpi, trange=['2015-10-15/6:49:21', '2015-10-15/6:54:01'], data_rate='brst', level='l2', /spdf assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:54:59'), $ 'Error! Not grabbing the correct data from the SPDF??? (2)' return, 1 end ; user requests a time interval without any CDF files inside function mms_load_fpi_ut::test_empty_interval_spdf mms_load_fpi, trange=['2015-10-15/6:46:21', '2015-10-15/6:49:01'], data_rate='brst', level='l2', /spdf assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:49:59'), $ 'Error! Not grabbing the correct data from the SPDF??? (3)' return, 1 end ; user requests a time interval just beyond start time (but inside the interval) ; of last burst-mode file for the day function mms_load_fpi_ut::test_weird_fpi_case_spdf mms_load_fpi, trange=['2015-10-16/13:07', '2015-10-16/13:09'], data_rate='brst', level='l2', /spdf assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-16/13:07','2015-10-16/13:09'), $ 'Error! Not grabbing the correct data from the SPDF??? (4)' return, 1 end ; user downloads data, then tries to load the data using /no_update function mms_load_fpi_ut::test_noupdate_actually_works_spdf ; load the data from the web mms_load_fpi, trange=['2015-10-15', '2015-10-18'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_sdc, /spdf del_data, '*' ; load the data locally mms_load_fpi, trange=['2015-10-15', '2015-10-18'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_local, /no_update, /spdf assert, spd_data_exists('mms1_dis_energyspectr_omni_fast', '2015-10-15', '2015-10-18'), $ 'Problem loading data from local drive' assert, array_equal(fn_sdc, fn_local), $ 'Problem loading data from local drive (different CDF filenames)' return, 1 end ; check that loading from local data doesn't load all data for the day function mms_load_fpi_ut::test_noupdate_mem_spdf ; load the data from the web mms_load_fpi, trange=['2015-10-16/13:06:00', '2015-10-16/13:08:00'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_sdc, /spdf del_data, '*' ; load the data locally mms_load_fpi, trange=['2015-10-16/13:06:00', '2015-10-16/13:08:00'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_local, /no_update, /spdf assert, array_equal(fn_sdc, fn_local), $ 'Problem loading data from local drive (different CDF filenames)' return, 1 end ; user requests a few seconds after file start time function mms_load_fpi_ut::test_seconds_after_file_start mms_load_fpi, trange=['2015-10-15/6:45:21', '2015-10-15/6:51:21'], data_rate='brst', level='l2' assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:54:59'), $ 'Error! Not grabbing the correct data from the SDC???' return, 1 end ; user requests a few seconds after file end time function mms_load_fpi_ut::test_seconds_after_file_end mms_load_fpi, trange=['2015-10-15/6:49:21', '2015-10-15/6:54:01'], data_rate='brst', level='l2' assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:54:59'), $ 'Error! Not grabbing the correct data from the SDC???' return, 1 end ; user requests a time interval without any CDF files inside function mms_load_fpi_ut::test_empty_interval mms_load_fpi, trange=['2015-10-15/6:46:21', '2015-10-15/6:49:01'], data_rate='brst', level='l2' assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-15/06:47:23','2015-10-15/06:49:59'), $ 'Error! Not grabbing the correct data from the SDC???' return, 1 end ; user requests a time interval just beyond start time (but inside the interval) ; of last burst-mode file for the day function mms_load_fpi_ut::test_weird_fpi_case mms_load_fpi, trange=['2015-10-16/13:07', '2015-10-16/13:09'], data_rate='brst', level='l2' assert, spd_data_exists('mms3_dis_bulkv_dbcs_brst','2015-10-16/13:07','2015-10-16/13:09'), $ 'Error! Not grabbing the correct data from the SDC???' return, 1 end ; user downloads data, then tries to load the data using /no_update function mms_load_fpi_ut::test_noupdate_actually_works ; load the data from the web mms_load_fpi, trange=['2015-10-15', '2015-10-18'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_sdc del_data, '*' ; load the data locally mms_load_fpi, trange=['2015-10-15', '2015-10-18'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_local, /no_update assert, spd_data_exists('mms1_dis_energyspectr_omni_fast', '2015-10-15', '2015-10-18'), $ 'Problem loading data from local drive' assert, array_equal(strlowcase(fn_sdc), strlowcase(fn_local)), $ 'Problem loading data from local drive (different CDF filenames)' return, 1 end ; check that loading from local data doesn't load all data for the day function mms_load_fpi_ut::test_noupdate_mem ; load the data from the web mms_load_fpi, trange=['2015-10-16/13:06:00', '2015-10-16/13:08:00'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_sdc del_data, '*' ; load the data locally mms_load_fpi, trange=['2015-10-16/13:06:00', '2015-10-16/13:08:00'], level='l2', probe=1, datatype='dis-moms', cdf_filenames=fn_local, /no_update assert, array_equal(strlowcase(fn_sdc), strlowcase(fn_local)), $ 'Problem loading data from local drive (different CDF filenames)' return, 1 end ; check that the errorflags variable can be loaded without being overwritten ; when the user requests datatype=['d?s-dist', 'd?s-moms'] function mms_load_fpi_ut::test_load_errorflags_moms_and_dist mms_load_fpi, datatype=['dis-moms', 'dis-dist'], data_rate='fast', trange=['2015-12-15', '2015-12-16'], probe=3 assert, spd_data_exists('mms3_dis_errorflags_fast_moms mms3_dis_errorflags_fast_dist', '2015-12-15', '2015-12-16'), 'Problem loading errorflags variables' get_data, 'mms3_dis_errorflags_fast_moms', data=a get_data, 'mms3_dis_errorflags_fast_dist', data=b assert, ~array_equal(a.Y, b.Y), 'Problem loading errorflags variables' mms_load_fpi, datatype=['des-moms', 'des-dist'], data_rate='fast', trange=['2015-12-15', '2015-12-16'], probe=3 assert, spd_data_exists('mms3_des_errorflags_fast_moms mms3_des_errorflags_fast_dist', '2015-12-15', '2015-12-16'), 'Problem loading errorflags variables' get_data, 'mms3_des_errorflags_fast_moms', data=a get_data, 'mms3_des_errorflags_fast_dist', data=b assert, ~array_equal(a.Y, b.Y), 'Problem loading errorflags variables' return, 1 end ; check that the above works with the suffix keyword function mms_load_fpi_ut::test_load_errorflags_moms_and_dist_suffix mms_load_fpi, datatype=['dis-moms', 'dis-dist'], data_rate='fast', trange=['2015-12-15', '2015-12-16'], probe=3, suffix='TESTSUFFIX' assert, spd_data_exists('mms3_dis_errorflags_fastTESTSUFFIX_moms mms3_dis_errorflags_fastTESTSUFFIX_dist', '2015-12-15', '2015-12-16'), 'Problem loading errorflags variables' get_data, 'mms3_dis_errorflags_fastTESTSUFFIX_moms', data=a get_data, 'mms3_dis_errorflags_fastTESTSUFFIX_dist', data=b assert, ~array_equal(a.Y, b.Y), 'Problem loading errorflags variables' mms_load_fpi, datatype=['des-moms', 'des-dist'], data_rate='fast', trange=['2015-12-15', '2015-12-16'], probe=3, suffix='TESTSUFFIX2' assert, spd_data_exists('mms3_des_errorflags_fastTESTSUFFIX2_moms mms3_des_errorflags_fastTESTSUFFIX2_dist', '2015-12-15', '2015-12-16'), 'Problem loading errorflags variables' get_data, 'mms3_des_errorflags_fastTESTSUFFIX2_moms', data=a get_data, 'mms3_des_errorflags_fastTESTSUFFIX2_dist', data=b assert, ~array_equal(a.Y, b.Y), 'Problem loading errorflags variables' return, 1 end ; check that we don't crash when the version # isn't valid function mms_load_fpi_ut::test_load_local_file_badversion mms_load_fpi, datatype='des-moms', trange=['2015-12-5', '2015-12-6'], cdf_version='2.32.0', /no_update return, 1 end ; the following tests loading the ACR burst mode data (that doesn't exist at the SDC yet) ; and tests /center_measurement functionality; these data files will need to be saved ; on your local machine before running these tests function mms_load_fpi_ut::test_acr_brst_data mms_load_fpi, level='acr', trange=['2016-12-09', '2016-12-10'], probe=1, data_rate='brst' mms_load_fpi, level='acr', trange=['2016-12-09', '2016-12-10'], probe=1, data_rate='brst', suffix='centered', /center_measurement get_data, 'mms1_des_bulkv_dbcs_brst', data=d get_data, 'mms1_dis_bulkv_dbcs_brstcentered', data=c assert, spd_data_exists('mms1_des_bulkv_dbcs_brst mms1_dis_bulkv_dbcs_brstcentered', '2016-12-09', '2016-12-10'), 'Problem checking /center_measurement with ACR brst files' assert, time_string(c.X[0], tformat='YYYY-MM-DD/hh:mm:ss.fff') eq '2016-12-09/08:58:54.110', 'Problem checking /center_measurement with ACR brst files' assert, time_string(d.X[0], tformat='YYYY-MM-DD/hh:mm:ss.fff') eq '2016-12-09/08:58:54.005', 'Problem checking /center_measurement with ACR brst files' return, 1 end ; the following tests for a regression when the user runs ; mms_get_fpi_dist on a burst interval with gaps function mms_load_fpi_ut::test_dist_burst_with_gaps mms_load_fpi, trange=['2015-12-15/11:18', '2015-12-15/11:36'], data_rate='brst', /time_clip, datatype='des-dist' return, 1 end ; load data from v3.3 and v3.2 CDF files function mms_load_fpi_ut::test_moms_errorflags_updates mms_load_fpi, level='l1b', trange=['2015-10-16', '2015-10-17'], data_rate='brst', cdf_version='3.3', datatype='dis-moms', suffix='_new' mms_load_fpi, level='l1b', trange=['2015-10-16', '2015-10-17'], data_rate='brst', cdf_version='3.2', datatype='dis-moms', suffix='_old' get_data, 'mms3_dis_errorflags_brst_new_moms_flagbars_full', data=newdata get_data, 'mms3_dis_errorflags_brst_old_moms_flagbars_full', data=olddata assert, round(total(olddata.Y[0, *]*10, /nan)) eq 15, 'Problem with v3.2 -> v3.3 regression' assert, round(total(newdata.Y[0, *]*10, /nan)) eq 13, 'Problem with v3.2 -> v3.3 regression' return, 1 end ; end of regression tests <------ ; check multiple data rates ;function mms_load_fpi_ut::test_load_datarate_array ; mms_load_fpi, probe=3, data_rate=['fast', 'brst'], level='l2' ; assert, spd_data_exists('', '2015-12-15', '2015-12-16'), $ ; 'Problem loading FPI data with multiple data rates specified' ; return, 1 ;end function mms_load_fpi_ut::test_ang_ang_elec @error_is_pass mms_fpi_ang_ang, '2015-10-15/13:06:30', species='elec' return, 1 end function mms_load_fpi_ut::test_ang_ang_e mms_fpi_ang_ang, '2015-10-15/13:06:30', species='e' return, 1 end function mms_load_fpi_ut::test_load mms_load_fpi, probe=4, level='l2', datatype='des-moms' assert, spd_data_exists('mms4_des_energyspectr_omni_fast mms4_des_pitchangdist_avg mms4_des_energyspectr_px_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data' return, 1 end function mms_load_fpi_ut::test_load_multi_probes mms_load_fpi, probe=['1', '4'], level='l2', datatype='des-moms' assert, spd_data_exists('mms1_des_energyspectr_omni_fast mms4_des_pitchangdist_avg mms1_des_energyspectr_pz_fast', '2015-12-15', '2015-12-16'), 'Problem loading multiple probe fpi data' return, 1 end function mms_load_fpi_ut::test_load_mixed_probe_type mms_load_fpi, probes=['1', 4], level='l2', datatype='des-moms' assert, spd_data_exists('mms1_des_energyspectr_omni_fast mms4_des_pitchangdist_avg mms1_des_energyspectr_pz_fast', '2015-12-15', '2015-12-16'), 'Problem loading mixed probe type fpi data' return, 1 end function mms_load_fpi_ut::test_load_level_ql mms_load_fpi, probe=1, level='ql', min_version='3.0.0' assert, spd_data_exists('mms1_des_energyspectr_omni_fast mms1_des_energyspectr_py_fast','2015-12-15', '2015-12-16'), 'Problem loading quicklook fpi data' assert, ~spd_data_exists('mms2_dis_TempYY_err','2015-12-15', '2015-12-16'), 'Problem loading quicklook fpi data' return, 1 end function mms_load_fpi_ut::test_load_level_sitl mms_load_fpi, probes=[4], level='sitl' assert, spd_data_exists('mms4_fpi_ePitchAngDist_avg', '2015-12-15', '2015-12-16'), 'Problem loading fpi data of type sitl' return, 1 end function mms_load_fpi_ut::test_load_data_rate mms_load_fpi, probes=1, data_rate='fast', datatype='des-moms' assert, spd_data_exists('mms1_des_energyspectr_mz_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data rate' return, 1 end function mms_load_fpi_ut::test_load_data_rate_caps mms_load_fpi, probes='1', data_rate='FAST', datatype='des-moms' assert, spd_data_exists('mms1_des_energyspectr_mz_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data rate with CAPS' return, 1 end function mms_load_fpi_ut::test_load_data_rate_invalid mms_load_fpi, probes=['1'], datatype=1234 assert, ~spd_data_exists('mms1_des_energyspectr_mz_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with invalid data rate' return, 1 end function mms_load_fpi_ut::test_load_dtypes mms_load_fpi, probe=1, datatype=['des-moms'] assert, spd_data_exists('mms1_des_energyspectr_anti_fast mms1_des_pitchangdist_lowen_fast mms1_des_prestensor_gse_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data using data type' return, 1 end function mms_load_fpi_ut::test_load_dtypes_multi mms_load_fpi, probe=1, datatype=['des-moms', 'dis-dist'] assert, spd_data_exists('mms1_des_energyspectr_mx_fast mms1_des_pitchangdist_miden_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data type using multiple data types' return, 1 end function mms_load_fpi_ut::test_load_dtypes_caps mms_load_fpi, probe=1, datatype='DIS', level='ql', min_version='3.0.0' assert, spd_data_exists('mms1_dis_startdelphi_angle_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data types in CAPS (1)' assert, ~spd_data_exists('mms1_DIS_startdelphi_angle_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data types in CAPS (2)' return, 1 end function mms_load_fpi_ut::test_load_dtypes_star mms_load_fpi, probe=1, datatype='*' assert, spd_data_exists('mms1_des_pitchangdist_avg', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data types with star (1)' assert, ~spd_data_exists('mms3_des_pitchangdist_avg', '2015-12-15', '2015-12-16'), 'Problem loading fpi data with data types with star (2)' return, 1 end function mms_load_fpi_ut::test_load_suffix mms_load_fpi, probe=4, level=['sitl'], suffix='_test' assert, spd_data_exists('mms4_fpi_startDelPhi_count_test mms4_fpi_eEnergySpectr_pY_test', '2015-12-15', '2015-12-16'), 'Problem loading fpi data using suffix keyword' assert, ~spd_data_exists('mms4_fpi_eEnergySpectr_pY', '2015-12-15', '2015-12-16'), 'Problem loading fpi data using suffix keyword' return, 1 end function mms_load_fpi_ut::test_load_time_clip mms_load_fpi, probe=1, datatype='DIS', level='ql', trange=['2015-12-15 00:04:00', '2015-12-15 00:12:00'], /time_clip assert, spd_data_exists('mms1_dis_startdelphi_angle_fast', '2015-12-15/00:04:00', '2015-12-15/00:12:00'), 'Problem loading fpi data with time_clip' assert, ~spd_data_exists('mms1_dis_startdelphi_angle_fast', '2015-12-15/00:00:00', '2015-12-15/00:4:00'), 'Problem loading fpi data with time_clip' assert, ~spd_data_exists('mms1_dis_startdelphi_angle_fast', '2015-12-15/00:12:00', '2015-12-15/00:14:00'), 'Problem loading fpi data with time_clip' return, 1 end function mms_load_fpi_ut::test_load_spdf mms_load_fpi, probe=1, datatype=['des-moms'], /spdf assert, spd_data_exists('mms1_des_energyspectr_mx_fast mms1_des_pitchangdist_miden_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data type using spdf' assert, ~spd_data_exists('mms2_des_energyspectr_mx_fast mms3_des_pitchangdist_miden_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data type using spdf' return, 1 end function mms_load_fpi_ut::test_load_trange trange=timerange() mms_load_fpi, trange=trange, probe=1, datatype=['des-moms'], /spdf assert, spd_data_exists('mms1_des_energyspectr_mx_fast mms1_des_pitchangdist_miden_fast', '2015-12-15', '2015-12-16'), 'Problem loading fpi data type using trange' return, 1 end function mms_load_fpi_ut::test_load_future_time start_date = systime(/seconds) + 86400.*10. stop_date = start_date + 86400. mms_load_fpi, trange=[start_date, stop_date], probe=1, datatype=['des-moms'] assert, ~spd_data_exists('mms1_*', '2040-07-30', '2040-07-31'), 'Problem loading fpi data for date in future' return, 1 end ; regression test for bug fixed by updated CDFs (v3) function mms_load_fpi_ut::test_load_energies_no_support mms_load_fpi, datatype='des-moms', varformat='*energys*', probe=1 get_data, 'mms1_des_energyspectr_mx_fast', data=d assert, n_elements(d.V[0, *]) eq 32 and d.V[0, 31] ne 31, 'Problem with energy table in FPI energy spectra variables' return, 1 end pro mms_load_fpi_ut::setup del_data, '*' timespan, '2015-12-15', 1, /day ; create a connection to the SDC (as a team member); ignore the 'FGM' part mms_load_data, login_info='test_auth_info_team.sav', instrument='fgm' end function mms_load_fpi_ut::init, _extra=e if (~self->MGutTestCase::init(_extra=e)) then return, 0 ; the following adds code coverage % to the output self->addTestingRoutine, ['mms_load_fpi', 'mms_load_fpi_fix_spectra', 'mms_load_fpi_fix_dist', 'mms_load_fpi_fix_angles', $ 'mms_load_fpi_calc_omni', 'mms_load_fpi_calc_pad', 'mms_fpi_fix_metadata'] return, 1 end pro mms_load_fpi_ut__define define = { mms_load_fpi_ut, inherits MGutTestCase } end