3
$\begingroup$

I have downloaded NetCDF data file EVE_L3_merged_1nm_2015323_005.ncdf from http://lasp.colorado.edu/eve/data_access/evewebdata/products/merged/ and read it by Mathematica 10.0.2 on my windows 7.

Import["D:\\...\\EVE_L3_merged_1nm_2015323_005.ncdf", "Elements"]

gives {"Annotations", "Data", "DataFormat", "Datasets", "Dimensions", "Metadata"}. the "Annotations", "DataFormat",names of "Datasets", "Dimensions", "Metadata" are all Imported correctly and

datsets =Import["D:\\...\\EVE_L3_merged_1nm_2015323_005.ncdf", "Datasets"];
Transpose@{Range@Length@datsets, datsets}

returns

{{1, "PRIMARY"}, {2, "PRIMARY_HEAD"}, {3, "LINESMETA_HEADER"}, {4, 
  "BANDSMETA_HEADER"}, {5, "DIODEMETA_HEADER"}, {6, 
  "SPECTRUMMETA_HEADER"}, {7, "MERGEDDATA_HEADER"}, {8, 
  "LINESMETA.WAVE_CENTER"}, {9, "LINESMETA.WAVE_MIN"}, {10, 
  "LINESMETA.WAVE_MAX"}, {11, "LINESMETA.LOGT"}, {12, 
  "LINESMETA.NAME"}, {13, "LINESMETA.TYPE"}, {14, 
  "LINESMETA.BLENDS"}, {15, "BANDSMETA.NAME"}, {16, 
  "BANDSMETA.TYPE"}, {17, "DIODEMETA.NAME"}, {18, 
  "DIODEMETA.TYPE"}, {19, "SPECTRUMMETA.WAVELENGTH"}, {20, 
  "SPECTRUMMETA.IRRADIANCE_UNITS"}, {21, "MERGEDDATA.YYYYDOY"}, {22, 
  "MERGEDDATA.CAPTURE"}, {23, "MERGEDDATA.SP_IRRADIANCE"}, {24, 
  "MERGEDDATA.SP_STDEV"}, {25, "MERGEDDATA.SP_PRECISION"}, {26, 
  "MERGEDDATA.SP_ACCURACY"}, {27, "MERGEDDATA.BAND_IRRADIANCE"}, {28, 
  "MERGEDDATA.BAND_STDEV"}, {29, "MERGEDDATA.BAND_PRECISION"}, {30, 
  "MERGEDDATA.BAND_ACCURACY"}, {31, 
  "MERGEDDATA.DIODE_IRRADIANCE"}, {32, "MERGEDDATA.DIODE_STDEV"}, {33,
   "MERGEDDATA.DIODE_PRECISION"}, {34, 
  "MERGEDDATA.DIODE_ACCURACY"}, {35, 
  "MERGEDDATA.LINE_IRRADIANCE"}, {36, "MERGEDDATA.LINE_STDEV"}, {37, 
  "MERGEDDATA.LINE_PRECISION"}, {38, "MERGEDDATA.LINE_ACCURACY"}, {39,
   "MERGEDDATA.AU_FACTOR"}}

notice that since 8th quantity the name of dataset contains "." by form "*.*"

If I Import the dataset whose name contains no "." by, for example,

Import["D:\\...\\EVE_L3_merged_1nm_2015323_005.ncdf", {"Datasets", "BANDSMETA_HEADER"}]

Import works well. However if I import dataset whose name contains "." by

Import["D:\\...\\EVE_L3_merged_1nm_2015323_005.ncdf",   {"Datasets", "MERGEDDATA.YYYYDOY"}]

Import broke and suggested

File does not contain a dataset "MERGEDDATA.YYYYDOY"

This problem is not confined to this particular file but occurs every time I Import NetCDF file with Datasets name including ".".

How could I Import data correctly?

$\endgroup$
  • $\begingroup$ this file is only 5MB in all. Mma can Import netcdf without "." in datasets name correctly as large as several hundred MB @JasonB $\endgroup$ – Harry Nov 20 '15 at 9:27
5
$\begingroup$

So, as we can see here

enter image description here

So if the dataset name contains one of those characters, it needs to be escaped. Try this, replacing "~/Downloads/" with "D:\...\" for the file

elementlist = 
 StringReplace[#, "." -> "\\."] & /@ 
  Import["~/Downloads/EVE_L3_merged_1nm_2015323_005.nc", "Datasets"]
(* {"PRIMARY", "PRIMARY_HEAD", "LINESMETA_HEADER", \
"BANDSMETA_HEADER", "DIODEMETA_HEADER", "SPECTRUMMETA_HEADER", \
"MERGEDDATA_HEADER", "LINESMETA\\.WAVE_CENTER", \
"LINESMETA\\.WAVE_MIN", "LINESMETA\\.WAVE_MAX", "LINESMETA\\.LOGT", \
"LINESMETA\\.NAME", "LINESMETA\\.TYPE", "LINESMETA\\.BLENDS", \
"BANDSMETA\\.NAME", "BANDSMETA\\.TYPE", "DIODEMETA\\.NAME", \
"DIODEMETA\\.TYPE", "SPECTRUMMETA\\.WAVELENGTH", \
"SPECTRUMMETA\\.IRRADIANCE_UNITS", "MERGEDDATA\\.YYYYDOY", \
"MERGEDDATA\\.CAPTURE", "MERGEDDATA\\.SP_IRRADIANCE", \
"MERGEDDATA\\.SP_STDEV", "MERGEDDATA\\.SP_PRECISION", \
"MERGEDDATA\\.SP_ACCURACY", "MERGEDDATA\\.BAND_IRRADIANCE", \
"MERGEDDATA\\.BAND_STDEV", "MERGEDDATA\\.BAND_PRECISION", "MERGEDDATA\
\\.BAND_ACCURACY", "MERGEDDATA\\.DIODE_IRRADIANCE", \
"MERGEDDATA\\.DIODE_STDEV", "MERGEDDATA\\.DIODE_PRECISION", \
"MERGEDDATA\\.DIODE_ACCURACY", "MERGEDDATA\\.LINE_IRRADIANCE", \
"MERGEDDATA\\.LINE_STDEV", "MERGEDDATA\\.LINE_PRECISION", "MERGEDDATA\
\\.LINE_ACCURACY", "MERGEDDATA\\.AU_FACTOR"} *)

data = Import[
     "~/Downloads/EVE_L3_merged_1nm_2015323_005.nc", {"Datasets", #}]& /@ elementlist;

and you can check that everything imported fine by

Dimensions /@ data
(* {{1}, {1, 5}, {1, 53}, {1, 28}, {1, 27}, {1, 47}, {1, 
  90}, {1, 39}, {1, 39}, {1, 39}, {1, 39}, {1, 39}, {1, 39}, {1, 
  39}, {1, 20}, {1, 20}, {1, 6}, {1, 6}, {1, 100}, {1}, {1, 2029}, {1,
   2029}, {1, 2029, 100}, {1, 2029, 100}, {1, 2029, 100}, {1, 2029, 
  100}, {1, 2029, 20}, {1, 2029, 20}, {1, 2029, 20}, {1, 2029, 
  20}, {1, 2029, 6}, {1, 2029, 6}, {1, 2029, 6}, {1, 2029, 6}, {1, 
  2029, 39}, {1, 2029, 39}, {1, 2029, 39}, {1, 2029, 39}, {1, 2029}} *)

This only works with periods, I wish there were a more robust way of treating the strings literally without escape characters, or a way of replacing them automatically. Like when you past some text into a string, it asks you if you want to escape the characters.

Anyway, this is a usable workaround for your problem.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.