;+ ;mvn_lpw_load_l2 ; ;Routine to load L2 LPW and EUV data into IDL tplot variables. This routine requires access to the SSL SVN library (tplot, MAVEN software, etc). You can set a time range using the SSL routine timespan outside of this routine. Or, ;you can give the routine a timespan using the trange keyword. The timespan can span multiple days, this routine grabs necessary L2 files and merges them into tplot variables. ; ; ;INPUTS: ; - vars: variable(s) that you wish to load. Entered as a string, or string array if you want multiple variables loaded. Entries can be upper or lower case. ; The default (if not set) is to load ['lpnt', 'wspecact', 'wspecpas']. There are twelve products LPW produces: ; wspecact - waves active spectra ; wspecpas - waves passive spectra ; we12burstlf - electric field burst, low frequency *** Burst mode data can take a long time to load and should be avoided if you don't want to use it. ; we12burstmf - electric field burst, mid frequency *** Burst mode data can take a long time to load and should be avoided if you don't want to use it. ; we12bursthf - electric field burst, high frequency *** Burst mode data can take a long time to load and should be avoided if you don't want to use it. ; wn - density derived from waves ; lpiv - IV curves from Langmuir Probe mode ; lpnt - Density, Temperature, Vsc dervied from lpiv ; mrgexb - Pointing flux (as of 2015-11-19 not yet available) ; mrgscpot - Vsc (spacecraft potential) ; euv - EUV data *** NOTE that due to directory formats EUV must be loaded in a separate call; it cannot be loaded with other LPW variables. See examples below. ; we12 - 1D electric field ; ; ;OUTPUTS: ;Tplot variables as listed below. The left column is the var input here, the right column is the tplot variable name produced. ;'wspecact': tvar = 'mvn_lpw_w_spec_act_l2' ;'wspecpas': tvar = 'mvn_lpw_w_spec_pas_l2' ;'we12burstlf': tvar = 'mvn_lpw_w_e12_burst_lf_l2' ;'we12burstmf': tvar = 'mvn_lpw_w_e12_burst_mf_l2' ;'we12bursthf': tvar = 'mvn_lpw_w_e12_burst_hf_l2' ;'wn': tvar = 'mvn_lpw_w_n_l2' ;'lpiv': tvar = 'mvn_lpw_lp_iv_l2' ;'lpnt_n': tvar = 'mvn_lpw_lp_ne_l2' ;'lpnt_t': tvar = 'mvn_lpw_lp_te_l2' ;'lpnt_v': tvar = 'mvn_lpw_lp_vsc_l2' ;'mrgexb': tvar = 'NA2' ;THIS IS NOT AVAILABLE YET. ;'mrgscpot': tvar = 'mvn_lpw_mrg_sc_pot_l2' ;'euv': tvar = 'mvn_euv_calib_bands' ;'we12': tvar = 'mvn_lpw_w_e12_l2' ; ; ;success: a float, set this to a variable to return upon exiting. Success will be an array, the same length as the number of variables requested in vars. Each element in success ; refers to the corresponding element in vars. For example, if vars=['wn', 'lpnt'], and success = [0., 1.], this means 'wn' failed to load, but 'lpnt' loaded successfully. ; Note that if you request multiple dates, and data for, say, 'wn', is found for some of those dates, success will be 1., despite failing for some dates where data was available. ; ; +1: routine successfully loaded requested variables. Note that currenty mrgexb is not available, and euv must be called separately from other LPW variables and will not be loaded ; if other LPW variables are requested. ; 0: no data were found ; -1: one or more input variables were not recognized. Check terminal output for which ones. ; -2: no timespan has been set. Set using timespan routine, or the trange keyword here. ; -3: trange was not entered as a string or float. ; ;tplotvars: set this to a variable to return a string array of the tplot variables loaded into tplot memory. ; ;KEYWORDS: ;trange: a double precision array of UNIX times, or string array of UTC times in the format 'yyyy-mm-dd/hr:mm:ss.ssss'. This routine will load data spanning the min and max values of trange. If trange is only one element long, this ; routine assumes a timespan of 1 day, ie trange : trange+1day. If this keyword is not set then the user must run timespan before hand to set the time range. If trange is set as a keyword, then timespan is used within this ; routine to set the time range. Be careful - this will overwrite any previous uses of timespan! ; ;set /noTPLOT to NOT tplot loaded data producets. If not set, default is to tplot loaded data. ; ;NOTES: ;I'm still working on this, so some dlimit fields will not be complete, such as time start and stop in various time frames. You will have to look at individual L2 CDF files one day at a time to get that information. For now I'm just getting the ;correct timespan of data to load. ; ;HSBM burst data and we12 data contains a lot of points. If you load in several days of data and try to tplot it, your machine may crash! ; ;If this routine encounters a problem, it will return (hopefully), not retall. Make sure your wrapper routine does not depend on any tplot variables produced by this routine. ; ;Due to folder locations, you will need to call for EUV data in a separate call with this routine if you also want LPW data. See examples below. ; ;This routine assumes you have the folder directory mirrored at SSL, with the environment variable 'ROOT_DATA_DIR' set. It will probably crash if you don't! ; ; ; ; ;EXAMPLES: ;timespan, '2015-04-01/02:33', 2.3 ;set timespan to be 2.3 days from set date. ;mvn_lpw_load_l2, ['lpnt', 'wspecact', 'wspecpas'], success=sc1, tplotvars=tvs ;load in Ne, Te, Vsc, and active and passive spectra. Upon return, sc1 is a float array, 3 elements long, and tvs is a string array. See above for details. ; ; ;mvn_lpw_load_l2, ['lpnt', 'wn'], trange=['2015-03-01/13:43', '2015-03-06/12:00'] ;load in data and give routine a time range, which is then fed into the timespan routine here. ;mvn_lpw_load_l2, ['lpnt', 'wn'], trange=time_double(['2015-03-01/13:43', '2015-03-06/12:00']) ;use UNIX times instead. ; ; ;timespan, '2015-04-01/02:33', 2.3 ;mvn_lpw_load_l2, ['lpnt', 'wspecact', 'wspecpas', 'euv'] ;Because you request EUV as well as LPW data, routine will only get LPW data. You must get EUV separately, as below ;mvn_lpw_load_l2, ['euv'] ;When you only request EUV data, routine will get EUV data. ; ; ;Created by: Chris Fowler (christopher.fowler@lasp.colorado.edu) ;Creation Date: 2015-11-19. ; ;EDITS: ;2015-11-30: CMF: made all produced tplot variables lower case. ;2016-06-09: CMF: bug fixed where, if multiple vars were requested, and one was not found, code would exit before trying to find the remaining requested vars. Success keyword is now a float ; array the same length as input vars, with a value for each requested variable. ;2016-12-20: CMF: added lines to bring through data.info field in the data structure. ;- pro mvn_lpw_load_l2, vars, trange=trange, noTPLOT=noTPLOT, success=success, tplotvars=tplotvars proname = 'mvn_lpw_load_l2' if size(trange,/type) ne 0. then trange2=trange ;copy trange, as will convert it to a dbl. Don't want to edit the input as the output will change as it's a keyword. if size(vars,/type) eq 0. then vars=['lpnt', 'wspecact', 'wspecpas'] ;default variables if non set. NaN = !values.f_nan ; for convenience varsCOPY = vars ;make a copy for later ;Acceptable vars: varsALL=['wspecact', 'wspecpas', 'we12burstlf', 'we12burstmf', 'we12bursthf', 'wn', 'lpiv', 'lpnt', 'mrgexb', 'mrgscpot', 'we12', 'euv'] ;Make a list of any input variables that are not recognized; tell user available options: neleIn = n_elements(Vars) success = fltarr(neleIN) ;default notValid = [''] for tt = 0, neleIn-1 do begin if total(strmatch(varsALL, vars[tt])) ne 1 then begin notValid = [notValid, vars[tt]] endif endfor if n_elements(notValid) gt 1 then begin print, "" print, proname, " : ### WARNING ### : The following variables are not recognized as inputs: ", notValid print,"" print, "The following are acceptable inputs: ", varsALL print, "Please correct and re-run. Returning." success = fltarr(neleIN)-1. return endif ;Make sure user has not requested EUV along with LPW data. I'm not sure if this will crash later on, so make user set a separate call. euvPRT = 0. exbPRT = 0. ;mrgexb if neleIN gt 1 and total(strmatch(vars, 'euv') eq 1) then begin ;make sure user is requesting euv and LPW. If just euv, this is ok. iKP = where(strmatch(vars, 'euv') eq 0, niKP) if niKP gt 0 then vars = vars[iKP] euvPRT = 1. ;print message at end as well. endif neleIN = n_elements(vars) ;this may change by -1 above. if total(strmatch(vars, 'mrgexb')) eq 1 then begin if neleIN gt 1. then begin ;if user requested mrgexb and other variables, remove exb and carry on. iKP = where(strmatch(vars, 'mrgexb') eq 0.) vars = vars[iKP] exbPRT = 1. ;print message at end. endif else begin ;if user requested only mrgexb, need to bail. print, "" print, "### WARNING ### : ", proname, ": LPW variable mrgexb is not yet available. Please remove this from your call. Exiting" success = fltarr(neleIN)-1. return endelse endif ;=========== ;TIME RANGE: ;=========== ;Work out days that need to be loaded to cover timespan: if keyword_set(trange) then begin trTYPE = size(trange2,/type) ;string or double precision? if (trTYPE ne 5) and (trTYPE ne 7) then begin ;bail if trange2 is not a string or double precision array print, "" print, "### WARNING ### : ", proname, ": trange must be either a string array of UTC times or a double precision array of UNIX times. Exiting." success = fltarr(neleIN)-3. return endif neleTR = n_elements(trange2) ;UNIX TIMES: if size(trange2,/type) eq 5 then begin if neleTR eq 1. then trange2 = [trange2[0], trange2[0] + 86400.d] ;if only one time entered, add on 1 day. minTR = min(trange2,/nan) maxTR = max(trange2,/nan) lengthTR = (maxTR-minTR) / (24.*60.*60.) ;the length of trange2, in days. timespan, minTR, lengthTR ;set timerange endif ;UTC TIMES: if size(trange2,/type) eq 7 then begin trange2= time_double(trange2) ;convert string to double if neleTR eq 1. then trange2 = [trange2[0], trange2[0] + 86400.d] ;if only one time entered, add on 1 day. minTR = min(trange2,/nan) maxTR = max(trange2,/nan) lengthTR = (maxTR-minTR) / (24.*60.*60.) ;the length of trange2, in days. timespan, minTR, lengthTR ;set timerange endif endif ;Timespan is now set, either above, or by user prior to this routine. ;This code gets timerange from timespan command: tplot_options, get_opt=topt tspan_exists = (max(topt.trange_full) gt time_double('2013-11-18')) if ((size(trange,/type) eq 0) and tspan_exists) then trange2 = topt.trange_full if size(trange2,/type) eq 0. then begin print, "" print, "### WARNING ### : ", proname, " Please set a timespan to look at, using either timespan, or the trange keyword. Returning." success = fltarr(neleIN)-2. return endif ;How many days does timespan cover? The LPW software requires dates in format yyyy-mm-dd, generate these here: ;Create an array of dates to load based on trange2. Format must be 'yyyy-mm-dd' for LPW read routine: tmin = min(trange2, max=tmax, /nan) tmin = time_double(time_string(tmin, prec=-3)) tmax = time_double(time_string(tmax+86400D, prec=-3)) neleD = (tmax - tmin)/86400D dates = time_string(tmin + 86400D*dindgen(neleD), prec=-3) ; dates = time_String([min(trange2,/nan):max(trange2,/nan)+86400.d:86400.d] , precision=-3) ; neleD = n_elements(dates) ;number of dates to load ;=========== ;========== ;VARIABLES: ;========== ;lpnt contains three variables, Ne, Te, Vsc. Must unpack each separately, do part of that here. Insert them where 'lpnt' was, so that order of success is the same as user input vars. if total(strmatch(vars, 'lpnt')) eq 1 then begin ;did user ask for lpnt? varsNEW = [''] ;new string array ;Go over each variable. Replace 'lpnt' with names for Ne, Te and Vsc: for abc = 0., neleIN-1. do if vars[abc] ne 'lpnt' then varsNEW = [varsNEW, vars[abc]] else varsNEW = [varsNEW, ['lpnt_n', 'lpnt_t', 'lpnt_v']] ;Remove first dummy element of array: neleTMP = n_elements(varsNEW) vars = varsNEW[1:neleTMP-1] ;remove first point endif neleV = n_elements(vars) ;number of user requested variables vars = strlowcase(vars) ;make lowercase ;Load one variable, then loop over all dates. Combine into one tplot variable, and then move onto the next variable. scsCNT = 0. ;counter for indexing success or not for vv = 0., neleV-1. do begin ;go over each requested variable. varTMP = vars[vv] ;current variable to load varTMP2 = varTMP ;need a copy for later in the loop ;What is the corresponding tplot variable to look for: case varTMP of 'wspecact': tvar = 'mvn_lpw_w_spec_act_l2' 'wspecpas': tvar = 'mvn_lpw_w_spec_pas_l2' 'we12burstlf': tvar = 'mvn_lpw_w_e12_burst_lf_l2' 'we12burstmf': tvar = 'mvn_lpw_w_e12_burst_mf_l2' 'we12bursthf': tvar = 'mvn_lpw_w_e12_burst_hf_l2' 'wn': tvar = 'mvn_lpw_w_n_l2' 'lpiv': tvar = 'mvn_lpw_lp_iv_l2' 'lpnt_n': tvar = 'mvn_lpw_lp_ne_l2' 'lpnt_t': tvar = 'mvn_lpw_lp_te_l2' 'lpnt_v': tvar = 'mvn_lpw_lp_vsc_l2' 'mrgexb': tvar = 'NA2' ;this variable should be removed above if present 'mrgscpot': tvar = 'mvn_lpw_mrg_sc_pot_l2' 'euv': tvar = 'mvn_euv_calib_bands' 'we12': tvar = 'mvn_lpw_w_e12_l2' else: tvar = 'NA' endcase tvarSTORE = tvar ;name to use when storing in tplot. if tvar eq 'NA' then begin print, "" print, "### WARNING ### : ", proname, ": Please check LPW variables you wish to load. I don't recognize at least one of them." success = fltarr(neleIN)-1. return endif if vv eq 0. then tplotvars = tvar else tplotvars = [tplotvars, tvar] ;save TPLOT var names if (varTMP eq 'lpnt_n') or (varTMP eq 'lpnt_t') or (varTMP eq 'lpnt_v') then begin varTMP = 'lpnt' ;need to reset this here to get correct CDF file. tvarSTORE = tvar+'_TMP' ;need this to stop Ne,Te,Vsc being overwritten each time. At very end of code, remove the TMP tplot vars. endif ;===== ;LOOP: ;===== first = 1 x = NaN y = NaN dy = NaN flag = NaN v = NaN dv = NaN ReadSuccessTot = 0. ;the total read success for this variable. Some dates may be loaded, others not, so if this is > 0, at least one date was loaded, which we deem as success. ;This is reset every variable, before looping over dates requested next. for tt = 0., neleD-1. do begin ;go over requested dates dateTMP = dates[tt] ;current date to load. mvn_lpw_cdf_read, dateTMP, vars=varTMP, level='l2', success=ReadSuccess ;this routine will check if varTMP is applicable. If incorrect terms are entered this routine will retall. I could probably make this ignore incorrect terms, I'll edit at a later date, maybe... ReadSuccessTot += ReadSuccess if ReadSuccess eq '1' then begin ; '0' means failure get_data, tvar, data=data1, dlimit=dl1, limit=ll1, index=i if (i gt 0) then begin if (first) then begin ;First time around, initialize output arrays. If any parts of the structure are ;missing, then create filler values to maintain correct dimensions. Array ;concatenation works for 1D and 2D data arrays. The second dimension must be ;the same for all data files -- otherwise, concatentation does not make sense. str_element, data1, 'x', x, success=ok if (ok) then begin Nx = n_elements(x) str_element, data1, 'y', y, success=ok ; where there's a X, there's a Y ydims = size(y) if (ydims[0] eq 2) then Ny = ydims[2] else Ny = 1L ; 1D or 2D data str_element, data1, 'dy', dy, success=ok if (not ok) then dy = replicate(NaN, Nx, Ny) ; filler values str_element, data1, 'flag', flag, success=ok if (not ok) then flag = replicate(NaN, Nx) ; filler values str_element, data1, 'info', info, success=ok if (not ok) then info = replicate(NaN, Nx) ; filler values str_element, data1, 'v', v, success=ok if (not ok) then v = replicate(NaN, Nx, Ny) ; filler values str_element, data1, 'dv', dv, success=ok if (not ok) then dv = replicate(NaN, Nx, Ny) ; filler values loaded_filenames = dl1.L0_datafile ;save cdf filename loaded, append to this below for each day loaded. first = 0 endif endif else begin ;Second time through and up, append data to tmp arrays. Check which fields are present ;Fields that should always be present are .x, .y, .dy, .flag. Fields that may be present ;are .v, .dv. Size if y, v, dy and dv can be 1D or 2D arrays - must check. ;NOTE: here, I check data1 for each field. If it is present, I assume that that field ;already has a tmp array. This should always be true, unless a CDF file is bust and does ;not have all data in it. str_element, data1, 'x', xNEW, success=ok if (ok) then begin Mx = n_elements(xNEW) x = [temporary(x), temporary(xNEW)] str_element, data1, 'y', yNEW, success=ok ; where there's an X, there's a Y yOLD = temporary(y) y = fltarr(Nx+Mx, Ny) y[0L:(Nx-1L),*] = temporary(yOLD) y[Nx:(Nx+Mx-1L),*] = temporary(yNEW) str_element, data1, 'dy', dyNEW, success=ok dyOLD = temporary(dy) dy = fltarr(Nx+Mx, Ny) dy[0L:(Nx-1L),*] = temporary(dyOLD) if (ok) then dy[Nx:(Nx+Mx-1L),*] = temporary(dyNEW) $ else dy[Nx:(Nx+Mx-1L),*] = replicate(NaN, Mx, Ny) str_element, data1, 'flag', flagNEW, success=ok if (ok) then flag = [temporary(flag), temporary(flagNEW)] $ else flag = [temporary(flag), replicate(NaN, Mx)] str_element, data1, 'info', infoNEW, success=ok if (ok) then info = [temporary(info), temporary(infoNEW)] $ else info = [temporary(info), replicate(NaN, Mx)] str_element, data1, 'v', vNEW, success=ok vOLD = temporary(v) v = fltarr(Nx+Mx, Ny) v[0L:(Nx-1L),*] = temporary(vOLD) if (ok) then v[Nx:(Nx+Mx-1L),*] = temporary(vNEW) $ else v[Nx:(Nx+Mx-1L),*] = replicate(NaN, Mx, Ny) str_element, data1, 'dv', dvNEW, success=ok dvOLD = temporary(dv) dv = fltarr(Nx+Mx, Ny) dv[0L:(Nx-1L),*] = temporary(dvOLD) if (ok) then dv[Nx:(Nx+Mx-1L),*] = temporary(dvNEW) $ else dv[Nx:(Nx+Mx-1L),*] = replicate(NaN, Mx, Ny) loaded_filenames = loaded_filenames + dl1.L0_datafile ;append next loaded cdf file to this string. Nx += Mx endif endelse endif endif ;ReadSuccess = '1' endfor ;tt, dates ;Update Success value now that we have looked at all dates requested. if varTMP2 ne 'lpnt_t' and varTMP2 ne 'lpnt_v' then begin ;Don't update success for Te or Vsc, as they share the same success as Ne. if ReadSuccessTot gt 0. then success[scsCNT] = 1. ;if at least one date was loaded, deem it success for this variable. scsCNT += 1. ;update variable counter endif ;Note that here we have looked at one variable, for (possible) multiple dates. We may have no data, or we may have data for just a few requested dates. If no data, move on to ;next vv. data1 = 0 indx = where(finite(x), xcount) indx = where(finite(y), ycount) if size(x,/type) eq 0. then xcount = 0. ;if x does not exist, xcount seems to retain the value from the last variable iteration. if size(y,/type) eq 0. then ycount = 0. ;Make sure data is not all NaNs (can sometimes happen): if size(x,/type) ne 0. then begin if total(finite(x,/nan)) eq n_elements(x) then xcount = 0l if total(finite(y,/nan)) eq n_elements(y) then ycount = 0l endif if ((xcount eq 0L) or (ycount eq 0L)) then begin ; if no time or no data, then no point undefine, x undefine, y undefine, dy undefine, flag undefine, v undefine, dv undefine, info xcount = 0l ;make sure both are zero so we jump out below ycount = 0l endif else begin indx = where(finite(v), count) if (count eq 0L) then undefine, v indx = where(finite(dv), count) if (count eq 0L) then undefine, dv endelse ;If xcount = 0 above, we have no data, so skip these last steps. if xcount gt 0. then begin ;Store tmp arrays into TPLOT variable. Variable must have same name as per L2 CDF files, ie varTMP. Need to check which tags exist in the structure before storing. ;Structure format code: ;x,y,dy,flag 1. This should always be the minimum set of tags we have. ;x,y,dy,flag,dv: 2. Sometimes dy and dv hold upper and lower limits separately ;x,y,dy,flag,dv,v: 3. This is spectrogram data. scode = 0. ;default code if (size(x,/type) eq 0) then begin ;this loop might cause problems, but it shouldn't happen if we get this far... print,"### WARNING ### : ", proname, " - No data found!" tplotvars = '' success = 0. return endif if (size(x,/type) ne 0.) and (size(y,/type) ne 0.) and (size(dy,/type) ne 0.) and (size(flag,/type) ne 0.) and (size(v,/type) eq 0.) and (size(dv,/type) eq 0.) then scode = 1. if (size(x,/type) ne 0.) and (size(y,/type) ne 0.) and (size(dy,/type) ne 0.) and (size(flag,/type) ne 0.) and (size(v,/type) eq 0.) and (size(dv,/type) ne 0.) then scode = 2. if (size(x,/type) ne 0.) and (size(y,/type) ne 0.) and (size(dy,/type) ne 0.) and (size(flag,/type) ne 0.) and (size(v,/type) ne 0.) and (size(dv,/type) ne 0.) then scode = 3. ;Trim data based on timespan: indsKP = where(x ge trange2[0] and x le trange2[1], nindsKP) ;indsKP are the indices to keep that lie within timespan. These are the same for each tag field. Apply below. ;Store data: if (size(x,/type) ne 0) then begin dataSTR = {x:x[indsKP], y:y[indsKP,*], dy:dy[indsKP,*], flag:flag[indsKP], info:info[indsKP]} if (size(v,/type) ne 0) then str_element, dataSTR, 'v', v[indsKP,*], /add if (size(dv,/type) ne 0) then str_element, dataSTR, 'dv', dv[indsKP,*], /add endif if scode eq 0. then begin ;If data tags don't match print, "" print, "### WARNING ### : ", proname, " CDF data structures do not match for multiple dates. You will need to combine LPW L2 CDF data manually over the time range you selected for the following variable: ", varTMP endif else begin ;create tplot variable dl1.L0_datafile = loaded_filenames ;these are all of the CDF files loaded (which include the L0 file names as well). store_data, tvarSTORE, data=dataSTR, dlimit=dl1, limit=ll1 ;CMF : I need to clean up dlimit here, as for now it only uses information from the last loaded day. if tvarSTORE eq 'mvn_lpw_w_spec_act_l2' then options, 'mvn_lpw_w_spec_act_l2', ylog=1 if tvarSTORE eq 'mvn_lpw_w_spec_pas_l2' then options, 'mvn_lpw_w_spec_pas_l2', ylog=1 endelse ;Undefine variables before moving on to the next variable: undefine, x undefine, y undefine, dy undefine, flag undefine, v undefine, dv undefine, info endif ;xcount gt 0 endfor ;vv, variables ;If lpnt was called, copy TMP variables and then remove them. This is required to prevent variables being overwritten when a new date is called (due to how the data are stored). ;2016-09-13: CMF: bug fix, if we request ['lpnt', 'wn'], and lpnt works but there is no data for 'wn', then the dat reads in ok, but because ReadSuccessTot is 0 after failing ;to find wn data, the following loop does not execute, and the lpnt TMP variables are left in memory, which screws up the plotting range. Timespan itself is not changed, ;but I think because these are the last variables loaded in to tplot, it affects the next plotting, unless they are removed. if total(strmatch(varsCOPY, 'lpnt')) eq 1. then begin ;did user ask for lpnt? iFIND = where(varsCOPY eq 'lpnt') ;find which variable was lpnt if success[iFIND] gt 0. then begin ;if the matching success variable is > 0, we loaded some data, so remove the tmp files below get_data, 'mvn_lpw_lp_ne_l2_TMP', data=dd1, dlimit=dl1, limit=ll1 get_data, 'mvn_lpw_lp_te_l2_TMP', data=dd2, dlimit=dl2, limit=ll2 get_data, 'mvn_lpw_lp_vsc_l2_TMP', data=dd3, dlimit=dl3, limit=ll3 store_data, 'mvn_lpw_lp_ne_l2', data=dd1, dlimit=dl1, limit=ll1 store_data, 'mvn_lpw_lp_te_l2', data=dd2, dlimit=dl2, limit=ll2 store_data, 'mvn_lpw_lp_vsc_l2', data=dd3, dlimit=dl3, limit=ll3 store_data, 'mvn_lpw_lp_ne_l2_TMP', /delete ;remove temp variables store_data, 'mvn_lpw_lp_te_l2_TMP', /delete store_data, 'mvn_lpw_lp_vsc_l2_TMP', /delete store_data, 'mvn_lpw_lp_n_t_l2', /delete endif endif iTMP = where(success gt 0., niTMP) ;number of variables successfully loaded if not keyword_set(noTPLOT) and niTMP gt 0. then tplot, tplotvars ;tplot loaded vars if euvPRT eq 1. then begin ;if user requested EUV and LPW, LPW has been retrieved, user must call EUV separately. print, "" print, "### WARNING ### : ", proname, " Please request EUV date separately from any LPW data. I have loaded the requested LPW data. Please run mvn_lpw_load_l2, 'euv' after this." print, "" endif if exbPRT eq 1. then begin ;if user requested mrgexb print, "" print, "### WARNING ### : ", proname, " mrgexb is not currently available. I have loaded the other requested data." print, "" endif ;success=1. ;CMF: old version, we now have success for each variable requested. end