geospacelab 0.9.1__tar.gz → 0.9.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. {geospacelab-0.9.1/geospacelab.egg-info → geospacelab-0.9.3}/PKG-INFO +14 -6
  2. {geospacelab-0.9.1 → geospacelab-0.9.3}/README.md +13 -5
  3. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/__init__.py +1 -1
  4. geospacelab-0.9.3/geospacelab/datahub/sources/cdaweb/downloader.py +152 -0
  5. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/downloader.py +7 -4
  6. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/__init__.py +63 -7
  7. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/downloader.py +1 -1
  8. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/loader.py +2 -3
  9. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/__init__.py +59 -2
  10. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/downloader.py +2 -0
  11. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/loader.py +3 -0
  12. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/variable_config.py +1 -1
  13. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/express/eiscat_dashboard.py +3 -2
  14. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/orbit/utilities.py +1 -0
  15. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/dashboards.py +1 -1
  16. {geospacelab-0.9.1 → geospacelab-0.9.3/geospacelab.egg-info}/PKG-INFO +14 -6
  17. geospacelab-0.9.1/geospacelab/datahub/sources/cdaweb/downloader.py +0 -76
  18. {geospacelab-0.9.1 → geospacelab-0.9.3}/LICENSE +0 -0
  19. {geospacelab-0.9.1 → geospacelab-0.9.3}/MANIFEST.in +0 -0
  20. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/config/__init__.py +0 -0
  21. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/config/_preferences.py +0 -0
  22. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/__init__.py +0 -0
  23. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/_aacgm.py +0 -0
  24. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/_apex.py +0 -0
  25. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/_cs_base.py +0 -0
  26. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/_geo.py +0 -0
  27. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/cs/geo_utilities.py +0 -0
  28. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/__dataset_base__.py +0 -0
  29. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/__init__.py +0 -0
  30. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/__metadata_base__.py +0 -0
  31. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/__variable_base__.py +0 -0
  32. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/__init__.py +0 -0
  33. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/__init__.py +0 -0
  34. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/dmsp/__init__.py +0 -0
  35. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/omni/__init__.py +0 -0
  36. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/omni/downloader.py +0 -0
  37. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/omni/loader.py +0 -0
  38. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/cdaweb/omni/variable_config.py +0 -0
  39. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/__init__.py +0 -0
  40. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/__init__.py +0 -0
  41. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/__init__.py +0 -0
  42. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_fp/__init__.py +0 -0
  43. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/__init__.py +0 -0
  44. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/downloader.py +0 -0
  45. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/loader.py +0 -0
  46. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/variable_config.py +0 -0
  47. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/__init__.py +0 -0
  48. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/downloader.py +0 -0
  49. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/loader.py +0 -0
  50. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/variable_config.py +0 -0
  51. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct16/__init__.py +0 -0
  52. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/__init__.py +0 -0
  53. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/__init__.py +0 -0
  54. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/downloader.py +0 -0
  55. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/loader.py +0 -0
  56. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/variable_config.py +0 -0
  57. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/__init__.py +0 -0
  58. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/downloader.py +0 -0
  59. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/loader.py +0 -0
  60. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/variable_config.py +0 -0
  61. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2d/__init__.py +0 -0
  62. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/__init__.py +0 -0
  63. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/__init__.py +0 -0
  64. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/downloader.py +0 -0
  65. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/loader.py +0 -0
  66. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/variable_config.py +0 -0
  67. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/variable_config.py +0 -0
  68. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/variable_config.py +0 -0
  69. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/__init__.py +0 -0
  70. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/downloader.py +0 -0
  71. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/loader.py +0 -0
  72. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/variable_config.py +0 -0
  73. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/l2l/__init__.py +0 -0
  74. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/loader.py +0 -0
  75. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/esa_eo/swarm/multimission/__init__.py +0 -0
  76. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/__init__.py +0 -0
  77. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/image/__init__.py +0 -0
  78. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/image/ie/__init__.py +0 -0
  79. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/image/ie/downloader.py +0 -0
  80. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/image/ie/loader.py +0 -0
  81. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/image/ie/variable_config.py +0 -0
  82. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/miracle/__init__.py +0 -0
  83. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/miracle/abk/__init__.py +0 -0
  84. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/miracle/kev/__init__.py +0 -0
  85. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/fmi/miracle/muo/__init__.py +0 -0
  86. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/__init__.py +0 -0
  87. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/downloader.py +0 -0
  88. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/__init__.py +0 -0
  89. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/downloader.py +0 -0
  90. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/loader.py +0 -0
  91. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/nowcast/__init__.py +0 -0
  92. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/nowcast/downloader.py +0 -0
  93. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/hpo/variable_config.py +0 -0
  94. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/__init__.py +0 -0
  95. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/downloader.py +0 -0
  96. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/loader.py +0 -0
  97. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/nowcast/__init__.py +0 -0
  98. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/nowcast/downloader.py +0 -0
  99. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/nowcast/loader.py +0 -0
  100. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/nowcast/variable_config.py +0 -0
  101. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/kpap/variable_config.py +0 -0
  102. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/snf107/__init__.py +0 -0
  103. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/snf107/loader.py +0 -0
  104. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/gfz/snf107/variable_config.py +0 -0
  105. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/__init__.py +0 -0
  106. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/gnss/__init__.py +0 -0
  107. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/gnss/tecmap/__init__.py +0 -0
  108. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/gnss/tecmap/downloader.py +0 -0
  109. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/gnss/tecmap/loader.py +0 -0
  110. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/isee/gnss/tecmap/variable_config.py +0 -0
  111. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/__init__.py +0 -0
  112. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/__init__.py +0 -0
  113. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/downloader.py +0 -0
  114. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/fitted/__init__.py +0 -0
  115. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/fitted/loader.py +0 -0
  116. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/fitted/variable_config.py +0 -0
  117. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/grd/__init__.py +0 -0
  118. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/grd/downloader.py +0 -0
  119. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/grd/loader.py +0 -0
  120. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/ampere/grd/variable_config.py +0 -0
  121. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/__init__.py +0 -0
  122. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/__init__.py +0 -0
  123. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/downloader.py +0 -0
  124. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/__init__.py +0 -0
  125. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/loader.py +0 -0
  126. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/__init__.py +0 -0
  127. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/loader.py +0 -0
  128. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/variable_config.py +0 -0
  129. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/__init__.py +0 -0
  130. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/downloader.py +0 -0
  131. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/gnss/__init__.py +0 -0
  132. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/gnss/tecmap/__init__.py +0 -0
  133. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/gnss/tecmap/downloader.py +0 -0
  134. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/gnss/tecmap/loader.py +0 -0
  135. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/gnss/tecmap/variable_config.py +0 -0
  136. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/__init__.py +0 -0
  137. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/__init__.py +0 -0
  138. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/downloader.py +0 -0
  139. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/__init__.py +0 -0
  140. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/eiscat_hdf5_info.py +0 -0
  141. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/loader.py +0 -0
  142. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/utilities.py +0 -0
  143. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/eiscat/variable_config.py +0 -0
  144. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/__init__.py +0 -0
  145. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/__init__.py +0 -0
  146. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/loader.py +0 -0
  147. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/variable_config.py +0 -0
  148. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/downloader.py +0 -0
  149. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/__init__.py +0 -0
  150. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/loader.py +0 -0
  151. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/variable_config.py +0 -0
  152. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/__init__.py +0 -0
  153. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/loader.py +0 -0
  154. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/variable_config.py +0 -0
  155. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/__init__.py +0 -0
  156. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/downloader.py +0 -0
  157. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/__init__.py +0 -0
  158. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/downloader.py +0 -0
  159. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/loader.py +0 -0
  160. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/variable_config.py +0 -0
  161. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/__init__.py +0 -0
  162. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/downloader.py +0 -0
  163. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/loader.py +0 -0
  164. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/variable_config.py +0 -0
  165. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/__init__.py +0 -0
  166. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/__init__.py +0 -0
  167. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/downloader.py +0 -0
  168. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/__init__.py +0 -0
  169. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/loader.py +0 -0
  170. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/variable_config.py +0 -0
  171. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/__init__.py +0 -0
  172. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/loader.py +0 -0
  173. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/variable_config.py +0 -0
  174. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/__init__.py +0 -0
  175. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/loader.py +0 -0
  176. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/variable_config.py +0 -0
  177. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/madrigal/utilities.py +0 -0
  178. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/__init__.py +0 -0
  179. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/__init__.py +0 -0
  180. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/downloader.py +0 -0
  181. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/__init__.py +0 -0
  182. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/downloader.py +0 -0
  183. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/loader.py +0 -0
  184. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/variable_config.py +0 -0
  185. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/nipr/__init__.py +0 -0
  186. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/nipr/asc/__init__.py +0 -0
  187. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/nipr/asc/tro_wmi/__init__.py +0 -0
  188. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/nipr/asc/tro_wmi/loader.py +0 -0
  189. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/nipr/asc/tro_wmi/variable_config.py +0 -0
  190. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/noaa/__init__.py +0 -0
  191. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/noaa/swpc/__init__.py +0 -0
  192. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/noaa/swpc/goesxray/__init__.py +0 -0
  193. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/noaa/swpc/solarwind/__init__.py +0 -0
  194. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/superdarn/__init__.py +0 -0
  195. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/superdarn/potmap/__init__.py +0 -0
  196. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/superdarn/potmap/downloader.py +0 -0
  197. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/superdarn/potmap/loader.py +0 -0
  198. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/superdarn/potmap/variable_config.py +0 -0
  199. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/__init__.py +0 -0
  200. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/indices/__init__.py +0 -0
  201. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/indices/downloader.py +0 -0
  202. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/indices/loader.py +0 -0
  203. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/indices/variable_config.py +0 -0
  204. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/magnetometer/__init__.py +0 -0
  205. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/magnetometer/downloader.py +0 -0
  206. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/magnetometer/loader.py +0 -0
  207. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/magnetometer/variable_config.py +0 -0
  208. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/supermag_api.py +0 -0
  209. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/supermag/utilities.py +0 -0
  210. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/__init__.py +0 -0
  211. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/__init__.py +0 -0
  212. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/dns_acc/__init__.py +0 -0
  213. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/dns_acc/downloader.py +0 -0
  214. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/dns_acc/loader.py +0 -0
  215. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/dns_acc/variable_config.py +0 -0
  216. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/wnd_acc/__init__.py +0 -0
  217. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/wnd_acc/downloader.py +0 -0
  218. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/wnd_acc/loader.py +0 -0
  219. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/champ/wnd_acc/variable_config.py +0 -0
  220. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/downloader.py +0 -0
  221. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/goce/__init__.py +0 -0
  222. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/__init__.py +0 -0
  223. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/downloader.py +0 -0
  224. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/loader.py +0 -0
  225. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/variable_config.py +0 -0
  226. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/__init__.py +0 -0
  227. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/dns_acc/__init__.py +0 -0
  228. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/dns_acc/downloader.py +0 -0
  229. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/dns_acc/loader.py +0 -0
  230. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/dns_acc/variable_config.py +0 -0
  231. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/wnd_acc/__init__.py +0 -0
  232. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/wnd_acc/downloader.py +0 -0
  233. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/wnd_acc/loader.py +0 -0
  234. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace/wnd_acc/variable_config.py +0 -0
  235. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/__init__.py +0 -0
  236. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/__init__.py +0 -0
  237. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/downloader.py +0 -0
  238. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/loader.py +0 -0
  239. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/variable_config.py +0 -0
  240. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/__init__.py +0 -0
  241. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/downloader.py +0 -0
  242. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/loader.py +0 -0
  243. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/variable_config.py +0 -0
  244. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/__init__.py +0 -0
  245. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_acc/__init__.py +0 -0
  246. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_acc/downloader.py +0 -0
  247. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_acc/loader.py +0 -0
  248. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_acc/variable_config.py +0 -0
  249. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_pod/__init__.py +0 -0
  250. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_pod/downloader.py +0 -0
  251. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_pod/loader.py +0 -0
  252. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/tud/swarm/dns_pod/variable_config.py +0 -0
  253. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/__init__.py +0 -0
  254. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/ae/__init__.py +0 -0
  255. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/ae/downloader.py +0 -0
  256. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/ae/loader.py +0 -0
  257. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/ae/variable_config.py +0 -0
  258. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/asysym/__init__.py +0 -0
  259. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/asysym/downloader.py +0 -0
  260. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/asysym/loader.py +0 -0
  261. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/asysym/variable_config.py +0 -0
  262. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/dst/__init__.py +0 -0
  263. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/dst/downloader.py +0 -0
  264. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/dst/loader.py +0 -0
  265. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/datahub/sources/wdc/dst/variable_config.py +0 -0
  266. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/express/__init__.py +0 -0
  267. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/express/dmsp_dashboard.py +0 -0
  268. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/express/millstonehill_dashboard.py +0 -0
  269. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/express/omni_dashboard.py +0 -0
  270. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/__init__.py +0 -0
  271. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/empiricalmodels/__init__.py +0 -0
  272. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/empiricalmodels/ovationprime2010/__init__.py +0 -0
  273. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/empiricalmodels/ovationprime2010/ovationprime.py +0 -0
  274. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/satllites/__init__.py +0 -0
  275. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/satllites/orbit_analyzer.py +0 -0
  276. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/future/test_sscws.py +0 -0
  277. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/__init__.py +0 -0
  278. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/constants.py +0 -0
  279. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/earth/__init__.py +0 -0
  280. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/earth/_func.py +0 -0
  281. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/earth/constants.py +0 -0
  282. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/earth/geodesy.py +0 -0
  283. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/earth/sun_position.py +0 -0
  284. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/orbit/__init__.py +0 -0
  285. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/orbit/sc_orbit.py +0 -0
  286. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/site/__init__.py +0 -0
  287. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/observatory/site/mixins.py +0 -0
  288. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/quantity/__init__.py +0 -0
  289. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/__init__.py +0 -0
  290. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/io/__init__.py +0 -0
  291. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/io/dialog.py +0 -0
  292. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/unit/__init__.py +0 -0
  293. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/__init__.py +0 -0
  294. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/numpyarray.py +0 -0
  295. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/numpymath.py +0 -0
  296. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/pybasic.py +0 -0
  297. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/pyclass.py +0 -0
  298. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/pydatetime.py +0 -0
  299. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/pylogging.py +0 -0
  300. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/toolbox/utilities/pyos.py +0 -0
  301. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/__init__.py +0 -0
  302. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/__base__.py +0 -0
  303. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/__init__.py +0 -0
  304. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/_helpers.py +0 -0
  305. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/axes.py +0 -0
  306. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/axis_ticks.py +0 -0
  307. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/colormaps.py +0 -0
  308. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/figure.py +0 -0
  309. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/geomap/__base__.py +0 -0
  310. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/geomap/__init__.py +0 -0
  311. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/geomap/geodashboards.py +0 -0
  312. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/geomap/geopanels.py +0 -0
  313. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/mpl/panels.py +0 -0
  314. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/plotly/__init__.py +0 -0
  315. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/visualization/plotly/ipanel.py +0 -0
  316. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/__init__.py +0 -0
  317. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/LICENSE +0 -0
  318. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/README.md +0 -0
  319. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/__init__.py +0 -0
  320. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/__init__.py +0 -0
  321. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/geopack.py +0 -0
  322. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/igrf13coeffs.txt +0 -0
  323. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/t01.py +0 -0
  324. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/t04.py +0 -0
  325. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/t89.py +0 -0
  326. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/t96.py +0 -0
  327. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/test_geopack1.md +0 -0
  328. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab/wrapper/geopack/geopack/test_geopack1.py +0 -0
  329. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab.egg-info/SOURCES.txt +0 -0
  330. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab.egg-info/dependency_links.txt +0 -0
  331. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab.egg-info/requires.txt +0 -0
  332. {geospacelab-0.9.1 → geospacelab-0.9.3}/geospacelab.egg-info/top_level.txt +0 -0
  333. {geospacelab-0.9.1 → geospacelab-0.9.3}/setup.cfg +0 -0
  334. {geospacelab-0.9.1 → geospacelab-0.9.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geospacelab
3
- Version: 0.9.1
3
+ Version: 0.9.3
4
4
  Summary: Collect, manage, and visualize geospace data.
5
5
  Home-page: https://github.com/JouleCai/geospacelab
6
6
  Author: Lei Cai
@@ -104,6 +104,7 @@ on [readthedocs.io](https://geospacelab.readthedocs.io/en/latest/).
104
104
  | Data Source | Variables | File Format | Downloadable | Express | Status |
105
105
  |------------------------------|------------------------------------|-----------------------|---------------|-------------------------------|--------|
106
106
  | CDAWeb/OMNI | Solar wind and IMF |*cdf* | *True* | __OMNIDashboard__ | stable |
107
+ | CDAWeb/DMSP/SSUSI/EDR_AUR | DMSP SSUSI EDR_AUR emission lines | *netcdf* | *True* | __DMSPSSUSIDashboard__ | stable |
107
108
  | Madrigal/EISCAT | Ionospheric Ne, Te, Ti, ... | *EISCAT-hdf5*, *Madrigal-hdf5* | *True* | __EISCATDashboard__ | stable |
108
109
  | Madrigal/GNSS/TECMAP | Ionospheric GPS TEC map | *hdf5* | *True* | - | beta |
109
110
  | Madrigal/DMSP/s1 | DMSP SSM, SSIES, etc | *hdf5* | *True* | __DMSPTSDashboard__ | stable |
@@ -111,7 +112,6 @@ on [readthedocs.io](https://geospacelab.readthedocs.io/en/latest/).
111
112
  | Madrigal/DMSP/e | DMSP SSJ | *hdf5* | *True* | __DMSPTSDashboard__ | stable |
112
113
  | Madrigal/Millstone Hill ISR+ | Millstone Hill ISR | *hdf5* | *True* | __MillstoneHillISRDashboard__ | stable |
113
114
  | Madrigal/Poker Flat ISR | Poker Flat ISR | *hdf5* | *True* | __-_ | stable |
114
- | JHUAPL/DMSP/SSUSI | DMSP SSUSI | *netcdf* | *True* | __DMSPSSUSIDashboard__ | stable |
115
115
  | JHUAPL/AMPERE/fitted | AMPERE FAC | *netcdf* | *False* | __AMPEREDashboard__ | stable |
116
116
  | SuperDARN/POTMAP | SuperDARN potential map | *ascii* | *False* | - | stable |
117
117
  | WDC/Dst | Dst index | *IAGA2002-ASCII* | *True* | - | stable |
@@ -263,7 +263,7 @@ modulation = 'ant'
263
263
  dh = DataHub(dt_fr, dt_to)
264
264
  # dock the first dataset (dataset index starts from 0)
265
265
  ds_isr = dh.dock(datasource_contents=[database_name, 'isr', facility_name],
266
- site=site, antenna=antenna, modulation=modulation, data_file_type='eiscat-hdf5')
266
+ site=site, antenna=antenna, modulation=modulation, data_file_type='madrigal-hdf5')
267
267
  # load data
268
268
  ds_isr.load_data()
269
269
  # assign a variable from its own dataset to the datahub
@@ -304,7 +304,8 @@ antenna = 'UHF'
304
304
  modulation = '60'
305
305
  load_mode = 'AUTO'
306
306
  dashboard = eiscat.EISCATDashboard(
307
- dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO'
307
+ dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO',
308
+ data_file_type="madrigal-hdf5"
308
309
  )
309
310
  dashboard.quicklook()
310
311
 
@@ -373,6 +374,9 @@ Output:
373
374
  > ![alt text](https://github.com/JouleCai/geospacelab/blob/master/examples/OMNI_1min_20160314-060000-20160320-060000.png?raw=true)
374
375
 
375
376
  ### Example 4: Mapping geospatial data in the polar map.
377
+ > **_NOTE_**: JHUAPL stopped supporting DMSP SSUSI on 14 Feb 2025.
378
+ From then on, the data source has been switched from JHUAPL to CDAWeb.
379
+
376
380
  ```python
377
381
  import datetime
378
382
  import matplotlib.pyplot as plt
@@ -392,12 +396,16 @@ dashboard = geomap.GeoDashboard(dt_fr=dt_fr, dt_to=dt_to, figure_config={'figsiz
392
396
  # If the orbit_id is specified, only one file will be downloaded. This option saves the downloading time.
393
397
  # dashboard.dock(datasource_contents=['jhuapl', 'dmsp', 'ssusi', 'edraur'], pole='N', sat_id='f17', orbit_id='46863')
394
398
  # If not specified, the data during the whole day will be downloaded.
395
- dashboard.dock(datasource_contents=['jhuapl', 'dmsp', 'ssusi', 'edraur'], pole=pole, sat_id=sat_id, orbit_id=None)
399
+ dashboard.dock(
400
+ datasource_contents=dashboard.dock(datasource_contents=['cdaweb', 'dmsp', 'ssusi', 'edr_aur'],
401
+ pole=pole, sat_id=sat_id, orbit_id=None
402
+ )
396
403
  ds_s1 = dashboard.dock(
397
404
  datasource_contents=['madrigal', 'satellites', 'dmsp', 's1'],
398
405
  dt_fr=time1 - datetime.timedelta(minutes=45),
399
406
  dt_to=time1 + datetime.timedelta(minutes=45),
400
- sat_id=sat_id)
407
+ sat_id=sat_id
408
+ )
401
409
 
402
410
  dashboard.set_layout(1, 1)
403
411
 
@@ -48,6 +48,7 @@ on [readthedocs.io](https://geospacelab.readthedocs.io/en/latest/).
48
48
  | Data Source | Variables | File Format | Downloadable | Express | Status |
49
49
  |------------------------------|------------------------------------|-----------------------|---------------|-------------------------------|--------|
50
50
  | CDAWeb/OMNI | Solar wind and IMF |*cdf* | *True* | __OMNIDashboard__ | stable |
51
+ | CDAWeb/DMSP/SSUSI/EDR_AUR | DMSP SSUSI EDR_AUR emission lines | *netcdf* | *True* | __DMSPSSUSIDashboard__ | stable |
51
52
  | Madrigal/EISCAT | Ionospheric Ne, Te, Ti, ... | *EISCAT-hdf5*, *Madrigal-hdf5* | *True* | __EISCATDashboard__ | stable |
52
53
  | Madrigal/GNSS/TECMAP | Ionospheric GPS TEC map | *hdf5* | *True* | - | beta |
53
54
  | Madrigal/DMSP/s1 | DMSP SSM, SSIES, etc | *hdf5* | *True* | __DMSPTSDashboard__ | stable |
@@ -55,7 +56,6 @@ on [readthedocs.io](https://geospacelab.readthedocs.io/en/latest/).
55
56
  | Madrigal/DMSP/e | DMSP SSJ | *hdf5* | *True* | __DMSPTSDashboard__ | stable |
56
57
  | Madrigal/Millstone Hill ISR+ | Millstone Hill ISR | *hdf5* | *True* | __MillstoneHillISRDashboard__ | stable |
57
58
  | Madrigal/Poker Flat ISR | Poker Flat ISR | *hdf5* | *True* | __-_ | stable |
58
- | JHUAPL/DMSP/SSUSI | DMSP SSUSI | *netcdf* | *True* | __DMSPSSUSIDashboard__ | stable |
59
59
  | JHUAPL/AMPERE/fitted | AMPERE FAC | *netcdf* | *False* | __AMPEREDashboard__ | stable |
60
60
  | SuperDARN/POTMAP | SuperDARN potential map | *ascii* | *False* | - | stable |
61
61
  | WDC/Dst | Dst index | *IAGA2002-ASCII* | *True* | - | stable |
@@ -207,7 +207,7 @@ modulation = 'ant'
207
207
  dh = DataHub(dt_fr, dt_to)
208
208
  # dock the first dataset (dataset index starts from 0)
209
209
  ds_isr = dh.dock(datasource_contents=[database_name, 'isr', facility_name],
210
- site=site, antenna=antenna, modulation=modulation, data_file_type='eiscat-hdf5')
210
+ site=site, antenna=antenna, modulation=modulation, data_file_type='madrigal-hdf5')
211
211
  # load data
212
212
  ds_isr.load_data()
213
213
  # assign a variable from its own dataset to the datahub
@@ -248,7 +248,8 @@ antenna = 'UHF'
248
248
  modulation = '60'
249
249
  load_mode = 'AUTO'
250
250
  dashboard = eiscat.EISCATDashboard(
251
- dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO'
251
+ dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO',
252
+ data_file_type="madrigal-hdf5"
252
253
  )
253
254
  dashboard.quicklook()
254
255
 
@@ -317,6 +318,9 @@ Output:
317
318
  > ![alt text](https://github.com/JouleCai/geospacelab/blob/master/examples/OMNI_1min_20160314-060000-20160320-060000.png?raw=true)
318
319
 
319
320
  ### Example 4: Mapping geospatial data in the polar map.
321
+ > **_NOTE_**: JHUAPL stopped supporting DMSP SSUSI on 14 Feb 2025.
322
+ From then on, the data source has been switched from JHUAPL to CDAWeb.
323
+
320
324
  ```python
321
325
  import datetime
322
326
  import matplotlib.pyplot as plt
@@ -336,12 +340,16 @@ dashboard = geomap.GeoDashboard(dt_fr=dt_fr, dt_to=dt_to, figure_config={'figsiz
336
340
  # If the orbit_id is specified, only one file will be downloaded. This option saves the downloading time.
337
341
  # dashboard.dock(datasource_contents=['jhuapl', 'dmsp', 'ssusi', 'edraur'], pole='N', sat_id='f17', orbit_id='46863')
338
342
  # If not specified, the data during the whole day will be downloaded.
339
- dashboard.dock(datasource_contents=['jhuapl', 'dmsp', 'ssusi', 'edraur'], pole=pole, sat_id=sat_id, orbit_id=None)
343
+ dashboard.dock(
344
+ datasource_contents=dashboard.dock(datasource_contents=['cdaweb', 'dmsp', 'ssusi', 'edr_aur'],
345
+ pole=pole, sat_id=sat_id, orbit_id=None
346
+ )
340
347
  ds_s1 = dashboard.dock(
341
348
  datasource_contents=['madrigal', 'satellites', 'dmsp', 's1'],
342
349
  dt_fr=time1 - datetime.timedelta(minutes=45),
343
350
  dt_to=time1 + datetime.timedelta(minutes=45),
344
- sat_id=sat_id)
351
+ sat_id=sat_id
352
+ )
345
353
 
346
354
  dashboard.set_layout(1, 1)
347
355
 
@@ -6,7 +6,7 @@ __author__ = "Lei Cai"
6
6
  __copyright__ = "Copyright 2021, GeospaceLAB"
7
7
  __credits__ = ["Lei Cai"]
8
8
  __license__ = "BSD-3-Clause License"
9
- __version__ = "0.9.1"
9
+ __version__ = "0.9.3"
10
10
  __maintainer__ = "Lei Cai"
11
11
  __email__ = "lei.cai@oulu.fi"
12
12
  __status__ = "Developing"
@@ -0,0 +1,152 @@
1
+ # Licensed under the BSD 3-Clause License
2
+ # Copyright (C) 2021 GeospaceLab (geospacelab)
3
+ # Author: Lei Cai, Space Physics and Astronomy, University of Oulu
4
+
5
+ __author__ = "Lei Cai"
6
+ __copyright__ = "Copyright 2021, GeospaceLab"
7
+ __license__ = "BSD-3-Clause License"
8
+ __email__ = "lei.cai@oulu.fi"
9
+ __docformat__ = "reStructureText"
10
+
11
+
12
+ import datetime
13
+ import pathlib
14
+
15
+ import requests
16
+ import bs4
17
+ import re
18
+ import tqdm
19
+
20
+ import geospacelab.toolbox.utilities.pydatetime as dttool
21
+ import geospacelab.toolbox.utilities.pylogging as mylog
22
+ from geospacelab.config import prf
23
+
24
+
25
+ class Downloader(object):
26
+
27
+ def __init__(
28
+ self,
29
+ dt_fr,
30
+ dt_to,
31
+ direct_download=True,
32
+ force_download=False,
33
+ data_file_root_dir=None,
34
+ dry_run=False,
35
+ from_ftp=False,
36
+ ):
37
+
38
+ self.url_base = "https://cdaweb.gsfc.nasa.gov/pub/data/"
39
+ self.force_download = force_download
40
+ self.dry_run=dry_run
41
+ self.from_ftp=from_ftp
42
+
43
+ self.dt_fr = dt_fr
44
+ self.dt_to = dt_to
45
+ self.source_file_paths = []
46
+
47
+ if data_file_root_dir is None:
48
+ self.data_file_root_dir = prf.datahub_data_root_dir
49
+ else:
50
+ self.data_file_root_dir = data_file_root_dir
51
+
52
+ if direct_download:
53
+ self.download()
54
+
55
+ def download(self,):
56
+ if self.from_ftp:
57
+ raise NotImplementedError
58
+ else:
59
+ self.download_from_http()
60
+
61
+ def search_from_http(self, subdirs=None, file_name_patterns=None):
62
+ url = self.url_base + '/'.join(subdirs)
63
+ r = requests.get(url)
64
+
65
+ soup = bs4.BeautifulSoup(r.text, 'html.parser')
66
+ a_tags = soup.find_all('a', href=True)
67
+ hrefs = [a_tag['href'] for a_tag in a_tags]
68
+
69
+ search_pattern = '.*' + '.*'.join(file_name_patterns) + '.*'
70
+ fn_regex = re.compile(search_pattern)
71
+ hrefs = list(filter(fn_regex.match, hrefs))
72
+
73
+ paths = []
74
+ for href in hrefs:
75
+ paths.append(url + '/' + href)
76
+ return paths
77
+
78
+ def download_from_http(self, ):
79
+
80
+ source_file_paths = self.search_from_http()
81
+
82
+ for url in source_file_paths:
83
+ if self.dry_run:
84
+ print(f"Dry run: {url}.")
85
+ else:
86
+ self.save_file_from_http(url=url)
87
+
88
+ def save_file_from_http(self, url, file_dir=None, file_name=None):
89
+ if file_name is None:
90
+ file_name = url.split('/')[-1]
91
+ file_path = file_dir / file_name
92
+ if file_path.is_file():
93
+ mylog.simpleinfo.info(
94
+ "The file {} exists in the directory {}.".format(file_path.name, file_path.parent.resolve()))
95
+ if not self.force_download:
96
+ self.done = True
97
+ return
98
+
99
+ file_path.parent.resolve().mkdir(parents=True, exist_ok=True)
100
+ mylog.simpleinfo.info(f'Downloading {file_name} ...')
101
+ res = self._download_by_requests_get(url, data_file_path=file_path)
102
+ if res:
103
+ mylog.simpleinfo.info(f'Saved in {file_dir}')
104
+ self.done = True
105
+ else:
106
+ mylog.StreamLogger.error(f"Error during downloading. Code: {res}.")
107
+
108
+ return
109
+
110
+ @staticmethod
111
+ def _download_by_requests_get(url, data_file_path=None, params=None, stream=True, allow_redirects=True, **kwargs):
112
+ r = requests.get(url, params=params, stream=stream, allow_redirects=allow_redirects, **kwargs)
113
+ if r.status_code != 200:
114
+ return -2
115
+
116
+ total_size_in_bytes = int(r.headers.get('content-length', 0))
117
+ block_size = 1024 # 1 Kibibyte
118
+ progress_bar = tqdm.tqdm(total=total_size_in_bytes, unit='iB', unit_scale=True)
119
+
120
+ with open(data_file_path, 'wb') as file:
121
+ for data in r.iter_content(block_size):
122
+ progress_bar.update(len(data))
123
+ file.write(data)
124
+ progress_bar.close()
125
+ if total_size_in_bytes != 0 and progress_bar.n != total_size_in_bytes:
126
+ mylog.StreamLogger.error("Something wrong during the download!")
127
+ data_file_path.unlink(missing_ok=True)
128
+ return -1
129
+
130
+ return 1
131
+
132
+ def search_from_ftp(self, ftp, file_name_patterns=None):
133
+ paths = []
134
+
135
+ return paths
136
+
137
+ def save_file(self, file_dir, file_name, r_source_file):
138
+ file_path = file_dir / file_name
139
+
140
+ if file_path.is_file():
141
+ mylog.simpleinfo.info(
142
+ "The file {} exists in the directory {}.".format(file_path.name, file_path.parent.resolve()))
143
+
144
+ if self.force_download:
145
+ file_path.parent.resolve().mkdir(parents=True, exist_ok=True)
146
+ with open(file_path, "wb") as f:
147
+ mylog.simpleinfo.info(
148
+ "Downloading {} to the directory {} ...".format(file_path.name, file_path.parent.resolve())
149
+ )
150
+ f.write(r_source_file.content)
151
+ mylog.simpleinfo.info("Done")
152
+
@@ -71,14 +71,16 @@ class Downloader(DownloaderBase):
71
71
  this_month = dttool.get_next_n_months(self.dt_fr, nm)
72
72
  file_name_patterns = copy.deepcopy(default_file_name_patterns)
73
73
  file_name_patterns.append(this_month.strftime("%Y%m"))
74
+ ftp = ftplib.FTP_TLS()
75
+ ftp.connect(self.ftp_host, self.ftp_port, 30)
74
76
  try:
75
- ftp = ftplib.FTP_TLS()
76
- ftp.connect(self.ftp_host, self.ftp_port, 30) # 30 timeout
77
77
  ftp.login(user=self.username, passwd=self.__password__)
78
78
  ftp.cwd(self.ftp_data_dir)
79
79
  file_list = ftp.nlst()
80
80
 
81
81
  file_names, versions = self.search_files(file_list=file_list, file_name_patterns=file_name_patterns)
82
+ if file_names is None:
83
+ raise FileNotFoundError
82
84
  file_dir_root = self.data_file_root_dir
83
85
  for ind_f, file_name in enumerate(file_names):
84
86
  dt_regex = re.compile(r'(\d{8}T\d{6})_(\d{8}T\d{6})_(\d{4})')
@@ -129,11 +131,11 @@ class Downloader(DownloaderBase):
129
131
  mylog.simpleinfo.info("Done. The zip file has been removed.")
130
132
 
131
133
  done = True
132
- ftp.quit()
133
134
  except Exception as e:
134
135
  print('Error during download from FTP')
135
136
  print(e)
136
137
  done = False
138
+ ftp.quit()
137
139
  return done
138
140
 
139
141
  def search_files(self, file_list=None, file_name_patterns=None):
@@ -166,7 +168,8 @@ class Downloader(DownloaderBase):
166
168
 
167
169
  ind_dt = np.where((self.dt_fr <= stop_dts) & (self.dt_to >= start_dts))[0]
168
170
  if not list(ind_dt):
169
- raise FileExistsError
171
+ mylog.StreamLogger.info("No matching files found on the ftp")
172
+ return None, None
170
173
  file_list = [file_list[ii] for ii in ind_dt]
171
174
  versions = [versions[ii] for ii in ind_dt]
172
175
 
@@ -14,9 +14,9 @@ from geospacelab.config import prf
14
14
  import geospacelab.toolbox.utilities.pybasic as basic
15
15
  import geospacelab.toolbox.utilities.pylogging as mylog
16
16
  import geospacelab.toolbox.utilities.pydatetime as dttool
17
- from geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_pod.loader import Loader as default_Loader
18
- from geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_pod.downloader import Downloader as default_Downloader
19
- import geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_pod.variable_config as var_config
17
+ from geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_acc.loader import Loader as default_Loader
18
+ from geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_acc.downloader import Downloader as default_Downloader
19
+ import geospacelab.datahub.sources.esa_eo.swarm.l2daily.dns_acc.variable_config as var_config
20
20
 
21
21
 
22
22
  default_dataset_attrs = {
@@ -47,8 +47,6 @@ default_variable_names = [
47
47
  'SC_GEO_ALT',
48
48
  'SC_GEO_LST',
49
49
  'rho_n',
50
- 'rho_n_ORBITMEAN',
51
- 'FLAG',
52
50
  ]
53
51
 
54
52
  # default_data_search_recursive = True
@@ -78,7 +76,7 @@ class Dataset(datahub.DatasetSourced):
78
76
 
79
77
  self.sat_id = kwargs.pop('sat_id', 'A')
80
78
 
81
- self.metadata = None
79
+ self.metadata = {}
82
80
 
83
81
  allow_load = kwargs.pop('allow_load', False)
84
82
 
@@ -212,6 +210,63 @@ class Dataset(datahub.DatasetSourced):
212
210
  self['SC_AACGM_LON'].value = cs_aacgm['lon'].reshape(self['SC_DATETIME'].value.shape)
213
211
  self['SC_AACGM_MLT'].value = cs_aacgm['mlt'].reshape(self['SC_DATETIME'].value.shape)
214
212
 
213
+ def interp_evenly(self, time_res=None, data_time_res = 30, dt_fr=None, dt_to=None, masked=False):
214
+ from scipy.interpolate import interp1d
215
+ import geospacelab.toolbox.utilities.numpymath as nm
216
+
217
+ if time_res is None:
218
+ time_res = data_time_res
219
+
220
+ ds_new = datahub.DatasetUser(dt_fr=self.dt_fr, dt_to=self.dt_to, visual=self.visual)
221
+ ds_new.clone_variables(self)
222
+ dts = ds_new['SC_DATETIME'].value.flatten()
223
+ dt0 = dttool.get_start_of_the_day(dts[0])
224
+ x_0 = np.array([(dt - dt0).total_seconds() for dt in dts])
225
+ if dt_fr is None:
226
+ dt_fr = dts[0] - datetime.timedelta(
227
+ seconds=np.floor(((dts[0] - ds_new.dt_fr).total_seconds() / time_res)) * time_res
228
+ )
229
+ if dt_to is None:
230
+ dt_to = dts[-1] + datetime.timedelta(
231
+ seconds=np.floor(((ds_new.dt_to - dts[-1]).total_seconds() / time_res)) * time_res
232
+ )
233
+ sec_fr = (dt_fr - dt0).total_seconds()
234
+ sec_to = (dt_to - dt0).total_seconds()
235
+ x_1 = np.arange(sec_fr, sec_to + time_res / 2, time_res)
236
+
237
+ f = interp1d(x_0, x_0, kind='nearest', bounds_error=False, fill_value=(x_0[0], x_0[-1]))
238
+ pseudo_x = f(x_1)
239
+ mask = np.abs(pseudo_x - x_1) > data_time_res / 1.5
240
+
241
+ dts_new = np.array([dt0 + datetime.timedelta(seconds=sec) for sec in x_1])
242
+ ds_new['SC_DATETIME'].value = dts_new.reshape((dts_new.size, 1))
243
+
244
+ period_var_dict = {'SC_GEO_LON': 360.,
245
+ 'SC_AACGM_LON': 360.,
246
+ 'SC_APEX_LON': 360.,
247
+ 'SC_GEO_LST': 24.,
248
+ 'SC_AACGM_MLT': 24.,
249
+ 'SC_APEX_MLT': 24}
250
+
251
+ for var_name in ds_new.keys():
252
+ if var_name in ['SC_DATETIME']:
253
+ continue
254
+ if var_name in period_var_dict.keys():
255
+ var = ds_new[var_name].value.flatten()
256
+ var_new = nm.interp_period_data(x_0, var, x_1, period=period_var_dict[var_name], method='linear',
257
+ bounds_error=False)
258
+ else:
259
+ method = 'linear' if 'FLAG' not in var_name else 'nearest'
260
+ var = ds_new[var_name].value.flatten()
261
+ f = interp1d(x_0, var, kind=method, bounds_error=False)
262
+ var_new = f(x_1)
263
+ if masked:
264
+ var_new = np.ma.array(var_new, mask=mask, fill_value=np.nan)
265
+ else:
266
+ var_new[mask] = np.nan
267
+ ds_new[var_name].value = var_new.reshape((dts_new.size, 1))
268
+ return ds_new
269
+
215
270
  def time_filter_by_quality(self, quality_lim=None):
216
271
  if quality_lim is None:
217
272
  quality_lim = 0
@@ -253,7 +308,7 @@ class Dataset(datahub.DatasetSourced):
253
308
  sat_id = self.sat_id
254
309
  file_patterns = [
255
310
  'DNS' + sat_id.upper(),
256
- 'POD_2',
311
+ 'ACC_2',
257
312
  this_day.strftime('%Y%m%d') + 'T'
258
313
  ]
259
314
  # remove empty str
@@ -276,6 +331,7 @@ class Dataset(datahub.DatasetSourced):
276
331
  search_pattern=search_pattern,
277
332
  allow_multiple_files=True
278
333
  )
334
+ self.allow_download = False
279
335
 
280
336
  return done
281
337
 
@@ -29,7 +29,7 @@ class Downloader(DownloaderModel):
29
29
 
30
30
  if ftp_data_dir is None:
31
31
  ftp_data_dir = f'Level2daily/Latest_baselines/DNS/ACC/Sat_{sat_id.upper()}'
32
-
32
+ # ftp_data_dir = f'Level2daily/Older_baselines/DNS/ACC/Sat_{sat_id.upper()}'
33
33
  if data_file_root_dir is None:
34
34
  data_file_root_dir = prf.datahub_data_root_dir / "ESA" / "SWARM" / "Level2daily" / "DNS_ACC"
35
35
  file_name_patterns = list(self._default_file_name_patterns)
@@ -14,14 +14,12 @@ from geospacelab.datahub.sources.esa_eo.swarm.loader import LoaderModel
14
14
 
15
15
  # define the default variable name dictionary
16
16
  default_variable_name_dict = {
17
- 'CDF_EPOCH': 'Time',
17
+ 'CDF_EPOCH': 'time',
18
18
  'SC_GEO_LAT': 'latitude',
19
19
  'SC_GEO_LON': 'longitude',
20
20
  'SC_GEO_ALT': 'altitude',
21
21
  'SC_GEO_LST': 'local_solar_time',
22
22
  'rho_n': 'density',
23
- 'rho_n_ORBITMEAN': 'density_orbitmean',
24
- 'FLAG': 'validity_flag',
25
23
  }
26
24
 
27
25
 
@@ -38,4 +36,5 @@ class Loader(LoaderModel):
38
36
 
39
37
  def load_data(self, **kwargs):
40
38
  super(Loader, self).load_data(**kwargs)
39
+ self.variables['rho_n'][self.variables['rho_n']>1] = np.nan
41
40
  self.variables['SC_GEO_ALT'] = self.variables['SC_GEO_ALT'] * 1e-3
@@ -78,7 +78,7 @@ class Dataset(datahub.DatasetSourced):
78
78
 
79
79
  self.sat_id = kwargs.pop('sat_id', 'A')
80
80
 
81
- self.metadata = None
81
+ self.metadata = {}
82
82
 
83
83
  allow_load = kwargs.pop('allow_load', False)
84
84
 
@@ -167,7 +167,7 @@ class Dataset(datahub.DatasetSourced):
167
167
  def add_GEO_LST(self):
168
168
  lons = self['SC_GEO_LON'].flatten()
169
169
  uts = self['SC_DATETIME'].flatten()
170
- lsts = [ut + datetime.timedelta(hours=lon / 15.) for ut, lon in zip(uts, lons)]
170
+ lsts = [ut + datetime.timedelta(hours=int(lon / 15.)) for ut, lon in zip(uts, lons)]
171
171
  lsts = [lst.hour + lst.minute / 60. + lst.second / 3600. for lst in lsts]
172
172
  var = self.add_variable(var_name='SC_GEO_LST')
173
173
  var.value = np.array(lsts)[:, np.newaxis]
@@ -212,6 +212,63 @@ class Dataset(datahub.DatasetSourced):
212
212
  self['SC_AACGM_LON'].value = cs_aacgm['lon'].reshape(self['SC_DATETIME'].value.shape)
213
213
  self['SC_AACGM_MLT'].value = cs_aacgm['mlt'].reshape(self['SC_DATETIME'].value.shape)
214
214
 
215
+ def interp_evenly(self, time_res=None, data_time_res = 30, dt_fr=None, dt_to=None, masked=False):
216
+ from scipy.interpolate import interp1d
217
+ import geospacelab.toolbox.utilities.numpymath as nm
218
+
219
+ if time_res is None:
220
+ time_res = data_time_res
221
+
222
+ ds_new = datahub.DatasetUser(dt_fr=self.dt_fr, dt_to=self.dt_to, visual=self.visual)
223
+ ds_new.clone_variables(self)
224
+ dts = ds_new['SC_DATETIME'].value.flatten()
225
+ dt0 = dttool.get_start_of_the_day(dts[0])
226
+ x_0 = np.array([(dt - dt0).total_seconds() for dt in dts])
227
+ if dt_fr is None:
228
+ dt_fr = dts[0] - datetime.timedelta(
229
+ seconds=np.floor(((dts[0] - ds_new.dt_fr).total_seconds() / time_res)) * time_res
230
+ )
231
+ if dt_to is None:
232
+ dt_to = dts[-1] + datetime.timedelta(
233
+ seconds=np.floor(((ds_new.dt_to - dts[-1]).total_seconds() / time_res)) * time_res
234
+ )
235
+ sec_fr = (dt_fr - dt0).total_seconds()
236
+ sec_to = (dt_to - dt0).total_seconds()
237
+ x_1 = np.arange(sec_fr, sec_to + time_res / 2, time_res)
238
+
239
+ f = interp1d(x_0, x_0, kind='nearest', bounds_error=False, fill_value=(x_0[0], x_0[-1]))
240
+ pseudo_x = f(x_1)
241
+ mask = np.abs(pseudo_x - x_1) > data_time_res / 1.5
242
+
243
+ dts_new = np.array([dt0 + datetime.timedelta(seconds=sec) for sec in x_1])
244
+ ds_new['SC_DATETIME'].value = dts_new.reshape((dts_new.size, 1))
245
+
246
+ period_var_dict = {'SC_GEO_LON': 360.,
247
+ 'SC_AACGM_LON': 360.,
248
+ 'SC_APEX_LON': 360.,
249
+ 'SC_GEO_LST': 24.,
250
+ 'SC_AACGM_MLT': 24.,
251
+ 'SC_APEX_MLT': 24}
252
+
253
+ for var_name in ds_new.keys():
254
+ if var_name in ['SC_DATETIME']:
255
+ continue
256
+ if var_name in period_var_dict.keys():
257
+ var = ds_new[var_name].value.flatten()
258
+ var_new = nm.interp_period_data(x_0, var, x_1, period=period_var_dict[var_name], method='linear',
259
+ bounds_error=False)
260
+ else:
261
+ method = 'linear' if 'FLAG' not in var_name else 'nearest'
262
+ var = ds_new[var_name].value.flatten()
263
+ f = interp1d(x_0, var, kind=method, bounds_error=False)
264
+ var_new = f(x_1)
265
+ if masked:
266
+ var_new = np.ma.array(var_new, mask=mask, fill_value=np.nan)
267
+ else:
268
+ var_new[mask] = np.nan
269
+ ds_new[var_name].value = var_new.reshape((dts_new.size, 1))
270
+ return ds_new
271
+
215
272
  def time_filter_by_quality(self, quality_lim=None):
216
273
  if quality_lim is None:
217
274
  quality_lim = 0
@@ -29,9 +29,11 @@ class Downloader(DownloaderModel):
29
29
 
30
30
  if ftp_data_dir is None:
31
31
  ftp_data_dir = f'Level2daily/Latest_baselines/DNS/POD/Sat_{sat_id.upper()}'
32
+ # ftp_data_dir = f'Level2daily/Older_baselines/DNS/POD/Sat_{sat_id.upper()}'
32
33
 
33
34
  if data_file_root_dir is None:
34
35
  data_file_root_dir = prf.datahub_data_root_dir / "ESA" / "SWARM" / "Level2daily" / "DNS_POD"
36
+
35
37
  file_name_patterns = list(self._default_file_name_patterns)
36
38
 
37
39
  file_name_patterns.extend(['DNS' + sat_id.upper()])
@@ -38,4 +38,7 @@ class Loader(LoaderModel):
38
38
 
39
39
  def load_data(self, **kwargs):
40
40
  super(Loader, self).load_data(**kwargs)
41
+ self.variables['rho_n'][self.variables['rho_n'] > 1] = np.nan
42
+ self.variables['rho_n'][self.variables['rho_n'] <= 0] = np.nan
43
+ self.variables['rho_n'][self.variables['FLAG'] > 0] = np.nan
41
44
  self.variables['SC_GEO_ALT'] = self.variables['SC_GEO_ALT'] * 1e-3
@@ -30,7 +30,7 @@ default_plot_config = {
30
30
  'pcolormesh': {
31
31
  'cmap': default_colormap,
32
32
  'c_scale': 'log',
33
- 'c_lim': [100, 6000],
33
+ 'c_lim': [10, 6000],
34
34
  'alpha': 0.9,
35
35
  }
36
36
  }
@@ -108,7 +108,7 @@ class EISCATDashboard(TSDashboard):
108
108
 
109
109
  def save_figure(self, file_name=None, file_dir=None, append_time=True, **kwargs):
110
110
  if file_name is None:
111
- file_name = kwargs.pop('file_name', self.title.replace(', ', '_'))
111
+ file_name = '_'.join([s.strip() for s in self.title.split(',')])
112
112
  super().save_figure(file_name=file_name, file_dir=file_dir, append_time=append_time, **kwargs)
113
113
 
114
114
  def add_title(self, x=0.5, y=1.06, title=None, append_time=True, **kwargs):
@@ -158,7 +158,8 @@ def example():
158
158
  modulation = '60'
159
159
  load_mode = 'AUTO'
160
160
  dashboard = EISCATDashboard(
161
- dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO'
161
+ dt_fr, dt_to, site=site, antenna=antenna, modulation=modulation, load_mode='AUTO',
162
+ data_file_type="madrigal-hdf5"
162
163
  )
163
164
  dashboard.quicklook()
164
165
 
@@ -421,6 +421,7 @@ class LEOToolbox(DatasetUser):
421
421
 
422
422
  method = 'linear'
423
423
  for var_name in variable_names:
424
+ # print(var_name)
424
425
  vrb = self[var_name].value.flatten()[sector>0]
425
426
  if along_track_binning:
426
427
  sector_1 = sector[sector>0]
@@ -385,7 +385,7 @@ class TSDashboard(Dashboard):
385
385
 
386
386
  return results
387
387
 
388
- def add_shading(self, dt_fr, dt_to, panel_index=0,
388
+ def add_shading(self, dt_fr, dt_to, panel_index=-1,
389
389
  label=None, label_position=None, top_extend=0., bottom_extend=0., **kwargs):
390
390
 
391
391
  if label_position is None: