geospacelab 0.9.4__tar.gz → 0.10.0__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 (338) hide show
  1. {geospacelab-0.9.4/geospacelab.egg-info → geospacelab-0.10.0}/PKG-INFO +2 -2
  2. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/__init__.py +1 -1
  3. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/downloader.py +1 -0
  4. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/downloader.py +33 -8
  5. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/__init__.py +133 -45
  6. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/downloader.py +235 -9
  7. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/variable_config.py +10 -11
  8. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/downloader.py +13 -4
  9. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/__init__.py +100 -51
  10. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/downloader.py +3 -1
  11. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/variable_config.py +10 -11
  12. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/__init__.py +95 -52
  13. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/downloader.py +1 -1
  14. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/variable_config.py +3 -1
  15. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/supermag_api.py +2 -1
  16. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/panels.py +4 -4
  17. {geospacelab-0.9.4 → geospacelab-0.10.0/geospacelab.egg-info}/PKG-INFO +2 -2
  18. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab.egg-info/requires.txt +1 -1
  19. {geospacelab-0.9.4 → geospacelab-0.10.0}/setup.py +1 -1
  20. {geospacelab-0.9.4 → geospacelab-0.10.0}/LICENSE +0 -0
  21. {geospacelab-0.9.4 → geospacelab-0.10.0}/MANIFEST.in +0 -0
  22. {geospacelab-0.9.4 → geospacelab-0.10.0}/README.md +0 -0
  23. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/config/__init__.py +0 -0
  24. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/config/_preferences.py +0 -0
  25. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/__init__.py +0 -0
  26. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/_aacgm.py +0 -0
  27. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/_apex.py +0 -0
  28. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/_cs_base.py +0 -0
  29. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/_geo.py +0 -0
  30. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/cs/geo_utilities.py +0 -0
  31. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/__dataset_base__.py +0 -0
  32. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/__init__.py +0 -0
  33. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/__metadata_base__.py +0 -0
  34. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/__variable_base__.py +0 -0
  35. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/__init__.py +0 -0
  36. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/__init__.py +0 -0
  37. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/__init__.py +0 -0
  38. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/__init__.py +0 -0
  39. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/__init__.py +0 -0
  40. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/downloader.py +0 -0
  41. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/loader.py +0 -0
  42. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/variable_config.py +0 -0
  43. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/omni/__init__.py +0 -0
  44. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/omni/downloader.py +0 -0
  45. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/omni/loader.py +0 -0
  46. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/cdaweb/omni/variable_config.py +0 -0
  47. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/__init__.py +0 -0
  48. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/__init__.py +0 -0
  49. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/__init__.py +0 -0
  50. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_fp/__init__.py +0 -0
  51. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/__init__.py +0 -0
  52. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/downloader.py +0 -0
  53. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/loader.py +0 -0
  54. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/variable_config.py +0 -0
  55. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/__init__.py +0 -0
  56. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/downloader.py +0 -0
  57. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/loader.py +0 -0
  58. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/variable_config.py +0 -0
  59. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct16/__init__.py +0 -0
  60. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/downloader.py +0 -0
  61. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/__init__.py +0 -0
  62. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/__init__.py +0 -0
  63. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/downloader.py +0 -0
  64. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/loader.py +0 -0
  65. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/variable_config.py +0 -0
  66. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/__init__.py +0 -0
  67. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/downloader.py +0 -0
  68. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/loader.py +0 -0
  69. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/variable_config.py +0 -0
  70. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2d/__init__.py +0 -0
  71. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/__init__.py +0 -0
  72. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/__init__.py +0 -0
  73. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/downloader.py +0 -0
  74. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/loader.py +0 -0
  75. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/variable_config.py +0 -0
  76. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/__init__.py +0 -0
  77. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/downloader.py +0 -0
  78. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/loader.py +0 -0
  79. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/variable_config.py +0 -0
  80. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/__init__.py +0 -0
  81. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/downloader.py +0 -0
  82. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/loader.py +0 -0
  83. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/variable_config.py +0 -0
  84. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/__init__.py +0 -0
  85. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/downloader.py +0 -0
  86. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/loader.py +0 -0
  87. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/variable_config.py +0 -0
  88. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/l2l/__init__.py +0 -0
  89. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/loader.py +0 -0
  90. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/esa_eo/swarm/multimission/__init__.py +0 -0
  91. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/__init__.py +0 -0
  92. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/image/__init__.py +0 -0
  93. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/image/ie/__init__.py +0 -0
  94. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/image/ie/downloader.py +0 -0
  95. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/image/ie/loader.py +0 -0
  96. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/image/ie/variable_config.py +0 -0
  97. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/miracle/__init__.py +0 -0
  98. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/miracle/abk/__init__.py +0 -0
  99. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/miracle/kev/__init__.py +0 -0
  100. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/fmi/miracle/muo/__init__.py +0 -0
  101. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/__init__.py +0 -0
  102. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/downloader.py +0 -0
  103. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/__init__.py +0 -0
  104. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/downloader.py +0 -0
  105. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/loader.py +0 -0
  106. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/nowcast/__init__.py +0 -0
  107. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/nowcast/downloader.py +0 -0
  108. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/hpo/variable_config.py +0 -0
  109. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/__init__.py +0 -0
  110. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/downloader.py +0 -0
  111. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/loader.py +0 -0
  112. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/nowcast/__init__.py +0 -0
  113. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/nowcast/downloader.py +0 -0
  114. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/nowcast/loader.py +0 -0
  115. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/nowcast/variable_config.py +0 -0
  116. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/kpap/variable_config.py +0 -0
  117. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/snf107/__init__.py +0 -0
  118. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/snf107/loader.py +0 -0
  119. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/gfz/snf107/variable_config.py +0 -0
  120. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/__init__.py +0 -0
  121. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/gnss/__init__.py +0 -0
  122. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/gnss/tecmap/__init__.py +0 -0
  123. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/gnss/tecmap/downloader.py +0 -0
  124. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/gnss/tecmap/loader.py +0 -0
  125. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/isee/gnss/tecmap/variable_config.py +0 -0
  126. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/__init__.py +0 -0
  127. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/__init__.py +0 -0
  128. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/downloader.py +0 -0
  129. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/fitted/__init__.py +0 -0
  130. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/fitted/loader.py +0 -0
  131. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/fitted/variable_config.py +0 -0
  132. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/grd/__init__.py +0 -0
  133. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/grd/downloader.py +0 -0
  134. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/grd/loader.py +0 -0
  135. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/ampere/grd/variable_config.py +0 -0
  136. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/__init__.py +0 -0
  137. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/__init__.py +0 -0
  138. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/downloader.py +0 -0
  139. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/__init__.py +0 -0
  140. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/loader.py +0 -0
  141. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/variable_config.py +0 -0
  142. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/__init__.py +0 -0
  143. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/loader.py +0 -0
  144. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/variable_config.py +0 -0
  145. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/__init__.py +0 -0
  146. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/gnss/__init__.py +0 -0
  147. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/gnss/tecmap/__init__.py +0 -0
  148. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/gnss/tecmap/downloader.py +0 -0
  149. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/gnss/tecmap/loader.py +0 -0
  150. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/gnss/tecmap/variable_config.py +0 -0
  151. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/__init__.py +0 -0
  152. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/__init__.py +0 -0
  153. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/eiscat_hdf5_info.py +0 -0
  154. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/loader.py +0 -0
  155. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/utilities.py +0 -0
  156. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/eiscat/variable_config.py +0 -0
  157. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/__init__.py +0 -0
  158. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/__init__.py +0 -0
  159. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/loader.py +0 -0
  160. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/downloader.py +0 -0
  161. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/__init__.py +0 -0
  162. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/loader.py +0 -0
  163. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/variable_config.py +0 -0
  164. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/__init__.py +0 -0
  165. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/loader.py +0 -0
  166. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/variable_config.py +0 -0
  167. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/__init__.py +0 -0
  168. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/loader.py +0 -0
  169. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/loader.py +0 -0
  170. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/__init__.py +0 -0
  171. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/__init__.py +0 -0
  172. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/downloader.py +0 -0
  173. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/__init__.py +0 -0
  174. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/loader.py +0 -0
  175. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/variable_config.py +0 -0
  176. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/__init__.py +0 -0
  177. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/loader.py +0 -0
  178. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/variable_config.py +0 -0
  179. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/__init__.py +0 -0
  180. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/loader.py +0 -0
  181. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/variable_config.py +0 -0
  182. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/madrigal/utilities.py +0 -0
  183. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/__init__.py +0 -0
  184. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/__init__.py +0 -0
  185. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/downloader.py +0 -0
  186. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/__init__.py +0 -0
  187. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/downloader.py +0 -0
  188. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/loader.py +0 -0
  189. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/variable_config.py +0 -0
  190. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/nipr/__init__.py +0 -0
  191. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/nipr/asc/__init__.py +0 -0
  192. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/nipr/asc/tro_wmi/__init__.py +0 -0
  193. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/nipr/asc/tro_wmi/loader.py +0 -0
  194. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/nipr/asc/tro_wmi/variable_config.py +0 -0
  195. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/noaa/__init__.py +0 -0
  196. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/noaa/swpc/__init__.py +0 -0
  197. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/noaa/swpc/goesxray/__init__.py +0 -0
  198. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/noaa/swpc/solarwind/__init__.py +0 -0
  199. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/superdarn/__init__.py +0 -0
  200. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/superdarn/potmap/__init__.py +0 -0
  201. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/superdarn/potmap/downloader.py +0 -0
  202. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/superdarn/potmap/loader.py +0 -0
  203. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/superdarn/potmap/variable_config.py +0 -0
  204. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/__init__.py +0 -0
  205. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/indices/__init__.py +0 -0
  206. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/indices/downloader.py +0 -0
  207. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/indices/loader.py +0 -0
  208. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/indices/variable_config.py +0 -0
  209. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/magnetometer/__init__.py +0 -0
  210. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/magnetometer/downloader.py +0 -0
  211. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/magnetometer/loader.py +0 -0
  212. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/magnetometer/variable_config.py +0 -0
  213. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/supermag/utilities.py +0 -0
  214. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/__init__.py +0 -0
  215. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/__init__.py +0 -0
  216. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/dns_acc/__init__.py +0 -0
  217. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/dns_acc/downloader.py +0 -0
  218. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/dns_acc/loader.py +0 -0
  219. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/dns_acc/variable_config.py +0 -0
  220. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/wnd_acc/__init__.py +0 -0
  221. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/wnd_acc/downloader.py +0 -0
  222. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/wnd_acc/loader.py +0 -0
  223. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/champ/wnd_acc/variable_config.py +0 -0
  224. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/downloader.py +0 -0
  225. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/goce/__init__.py +0 -0
  226. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/__init__.py +0 -0
  227. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/downloader.py +0 -0
  228. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/loader.py +0 -0
  229. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/variable_config.py +0 -0
  230. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/__init__.py +0 -0
  231. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/dns_acc/__init__.py +0 -0
  232. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/dns_acc/downloader.py +0 -0
  233. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/dns_acc/loader.py +0 -0
  234. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/dns_acc/variable_config.py +0 -0
  235. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/wnd_acc/__init__.py +0 -0
  236. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/wnd_acc/downloader.py +0 -0
  237. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/wnd_acc/loader.py +0 -0
  238. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace/wnd_acc/variable_config.py +0 -0
  239. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/__init__.py +0 -0
  240. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/__init__.py +0 -0
  241. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/downloader.py +0 -0
  242. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/loader.py +0 -0
  243. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/variable_config.py +0 -0
  244. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/__init__.py +0 -0
  245. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/downloader.py +0 -0
  246. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/loader.py +0 -0
  247. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/variable_config.py +0 -0
  248. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/__init__.py +0 -0
  249. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_acc/__init__.py +0 -0
  250. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_acc/downloader.py +0 -0
  251. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_acc/loader.py +0 -0
  252. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_acc/variable_config.py +0 -0
  253. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_pod/__init__.py +0 -0
  254. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_pod/downloader.py +0 -0
  255. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_pod/loader.py +0 -0
  256. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/tud/swarm/dns_pod/variable_config.py +0 -0
  257. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/__init__.py +0 -0
  258. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/ae/__init__.py +0 -0
  259. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/ae/downloader.py +0 -0
  260. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/ae/loader.py +0 -0
  261. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/ae/variable_config.py +0 -0
  262. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/asysym/__init__.py +0 -0
  263. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/asysym/downloader.py +0 -0
  264. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/asysym/loader.py +0 -0
  265. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/asysym/variable_config.py +0 -0
  266. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/dst/__init__.py +0 -0
  267. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/dst/downloader.py +0 -0
  268. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/dst/loader.py +0 -0
  269. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/datahub/sources/wdc/dst/variable_config.py +0 -0
  270. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/express/__init__.py +0 -0
  271. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/express/dmsp_dashboard.py +0 -0
  272. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/express/eiscat_dashboard.py +0 -0
  273. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/express/millstonehill_dashboard.py +0 -0
  274. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/express/omni_dashboard.py +0 -0
  275. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/__init__.py +0 -0
  276. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/empiricalmodels/__init__.py +0 -0
  277. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/empiricalmodels/ovationprime2010/__init__.py +0 -0
  278. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/empiricalmodels/ovationprime2010/ovationprime.py +0 -0
  279. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/satllites/__init__.py +0 -0
  280. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/satllites/orbit_analyzer.py +0 -0
  281. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/future/test_sscws.py +0 -0
  282. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/__init__.py +0 -0
  283. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/constants.py +0 -0
  284. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/earth/__init__.py +0 -0
  285. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/earth/_func.py +0 -0
  286. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/earth/constants.py +0 -0
  287. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/earth/geodesy.py +0 -0
  288. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/earth/sun_position.py +0 -0
  289. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/orbit/__init__.py +0 -0
  290. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/orbit/sc_orbit.py +0 -0
  291. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/orbit/utilities.py +0 -0
  292. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/site/__init__.py +0 -0
  293. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/observatory/site/mixins.py +0 -0
  294. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/quantity/__init__.py +0 -0
  295. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/__init__.py +0 -0
  296. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/io/__init__.py +0 -0
  297. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/io/dialog.py +0 -0
  298. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/unit/__init__.py +0 -0
  299. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/__init__.py +0 -0
  300. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/numpyarray.py +0 -0
  301. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/numpymath.py +0 -0
  302. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/pybasic.py +0 -0
  303. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/pyclass.py +0 -0
  304. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/pydatetime.py +0 -0
  305. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/pylogging.py +0 -0
  306. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/toolbox/utilities/pyos.py +0 -0
  307. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/__init__.py +0 -0
  308. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/__base__.py +0 -0
  309. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/__init__.py +0 -0
  310. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/_helpers.py +0 -0
  311. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/axes.py +0 -0
  312. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/axis_ticks.py +0 -0
  313. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/colormaps.py +0 -0
  314. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/dashboards.py +0 -0
  315. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/figure.py +0 -0
  316. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/geomap/__base__.py +0 -0
  317. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/geomap/__init__.py +0 -0
  318. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/geomap/geodashboards.py +0 -0
  319. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/mpl/geomap/geopanels.py +0 -0
  320. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/plotly/__init__.py +0 -0
  321. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/visualization/plotly/ipanel.py +0 -0
  322. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/__init__.py +0 -0
  323. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/LICENSE +0 -0
  324. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/README.md +0 -0
  325. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/__init__.py +0 -0
  326. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/__init__.py +0 -0
  327. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/geopack.py +0 -0
  328. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/igrf13coeffs.txt +0 -0
  329. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/t01.py +0 -0
  330. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/t04.py +0 -0
  331. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/t89.py +0 -0
  332. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/t96.py +0 -0
  333. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/test_geopack1.md +0 -0
  334. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab/wrapper/geopack/geopack/test_geopack1.py +0 -0
  335. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab.egg-info/SOURCES.txt +0 -0
  336. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab.egg-info/dependency_links.txt +0 -0
  337. {geospacelab-0.9.4 → geospacelab-0.10.0}/geospacelab.egg-info/top_level.txt +0 -0
  338. {geospacelab-0.9.4 → geospacelab-0.10.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geospacelab
3
- Version: 0.9.4
3
+ Version: 0.10.0
4
4
  Summary: Collect, manage, and visualize geospace data.
5
5
  Home-page: https://github.com/JouleCai/geospacelab
6
6
  Author: Lei Cai
@@ -31,7 +31,7 @@ Requires-Dist: scipy>=1.6.0
31
31
  Requires-Dist: h5py>=3.2.1
32
32
  Requires-Dist: netcdf4>=1.5.7
33
33
  Requires-Dist: matplotlib>=3.5
34
- Requires-Dist: madrigalweb>=3.2
34
+ Requires-Dist: madrigalweb>=3.3
35
35
  Requires-Dist: aacgmv2>=2.6.2
36
36
  Requires-Dist: cdflib>=1.2.3
37
37
  Requires-Dist: geopack>=1.0.10
@@ -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.4"
9
+ __version__ = "0.10.0"
10
10
  __maintainer__ = "Lei Cai"
11
11
  __email__ = "lei.cai@oulu.fi"
12
12
  __status__ = "Developing"
@@ -43,6 +43,7 @@ class Downloader(object):
43
43
  self.dt_fr = dt_fr
44
44
  self.dt_to = dt_to
45
45
  self.source_file_paths = []
46
+ self.done = False
46
47
 
47
48
  if data_file_root_dir is None:
48
49
  self.data_file_root_dir = prf.datahub_data_root_dir
@@ -116,6 +116,7 @@ class Downloader(object):
116
116
  if file_path_local.is_file():
117
117
  mylog.simpleinfo.info("The file {} has been downloaded.".format(file_path_local.name))
118
118
  if not self.force_download:
119
+ self.done = True
119
120
  return
120
121
  files_error = []
121
122
  mylog.simpleinfo.info("Downloading {} ...".format(file_path_remote))
@@ -192,8 +193,12 @@ class Downloader(object):
192
193
  for file in files:
193
194
  matching = 0
194
195
  for fnp in include_file_name_patterns:
196
+ if isinstance(fnp, str):
197
+ fnp = [fnp]
195
198
  if isinstance(fnp, list):
196
- fnp = '.*' + '.*'.join(fnp) + '.*'
199
+ fnp = r'.*' + '.*'.join(fnp) + '.*'
200
+ else:
201
+ raise AttributeError
197
202
  rc = re.compile(fnp)
198
203
  file_name = pathlib.Path(file.name).name
199
204
  rm = rc.match(file_name.lower())
@@ -212,8 +217,12 @@ class Downloader(object):
212
217
  for file in files:
213
218
  matching = 1
214
219
  for fnp in exclude_file_name_patterns:
220
+ if isinstance(fnp, str):
221
+ fnp = [fnp]
215
222
  if isinstance(fnp, list):
216
- fnp = '.*' + '.*'.join(fnp) + '.*'
223
+ fnp = r'.*' + '.*'.join(fnp) + '.*'
224
+ else:
225
+ raise AttributeError
217
226
  rc = re.compile(fnp)
218
227
  file_name = pathlib.Path(file.name).name
219
228
  rm = rc.match(file_name.lower())
@@ -232,8 +241,12 @@ class Downloader(object):
232
241
  for file in files:
233
242
  matching = 0
234
243
  for fnp in include_file_type_patterns:
244
+ if isinstance(fnp, str):
245
+ fnp = [fnp]
235
246
  if isinstance(fnp, list):
236
- fnp = '.*' + '.*'.join(fnp) + '.*'
247
+ fnp = r'.*' + '.*'.join(fnp) + '.*'
248
+ else:
249
+ raise AttributeError
237
250
  rc = re.compile(fnp)
238
251
  rm = rc.match(file.kindatdesc.lower())
239
252
  if rm is not None:
@@ -251,8 +264,12 @@ class Downloader(object):
251
264
  for file in files:
252
265
  matching = 1
253
266
  for fnp in exclude_file_type_patterns:
267
+ if isinstance(fnp, str):
268
+ fnp = [fnp]
254
269
  if isinstance(fnp, list):
255
- fnp = '.*' + '.*'.join(fnp) + '.*'
270
+ fnp = r'.*' + '.*'.join(fnp) + '.*'
271
+ else:
272
+ raise AttributeError
256
273
  rc = re.compile(fnp)
257
274
  rm = rc.match(file.kindatdesc.lower())
258
275
  if rm is not None:
@@ -281,7 +298,7 @@ class Downloader(object):
281
298
  if display:
282
299
  mylog.simpleinfo.info("Listing matched experiments and files ...")
283
300
  exp_info = Downloader.get_exp_info(exps, include_file_info=True)
284
- mylog.simpleinfo.info("{:>10s}\t{:<24s}\t{:<24s}\t{:<16s}\t{:<15s}\t{:<40.40s}\t{:<30.30s}\t{:<80.80s}".format(
301
+ mylog.simpleinfo.info("{:>10s}\t{:<24s}\t{:<24s}\t{:<16s}\t{:<15s}\t{:<40.40s}\t{:<50.50s}\t{:<80.80s}".format(
285
302
  'EXP NUM', 'START TIME', 'END TIME', 'DURATION (hour)', 'EXP ID', 'EXP Name', 'File Name', 'File Type'
286
303
  )
287
304
  )
@@ -293,7 +310,7 @@ class Downloader(object):
293
310
  ):
294
311
 
295
312
  for file in exp_info['FILES'][ind]:
296
- line_str = "{:>10d}\t{:<24s}\t{:<24s}\t{:<16.1f}\t{:<15d}\t{:<40.40s}\t{:<30.30s}\t{:<80.80s}".format(
313
+ line_str = "{:>10d}\t{:<24s}\t{:<24s}\t{:<16.1f}\t{:<15d}\t{:<40.40s}\t{:<50.50s}\t{:<80.80s}".format(
297
314
  ind + 1,
298
315
  dt_fr.strftime("%Y-%m-%d %H:%M:%S"),
299
316
  dt_to.strftime("%Y-%m-%d %H:%M:%S"),
@@ -437,8 +454,12 @@ class Downloader(object):
437
454
  for exp in exps:
438
455
  matching = 0
439
456
  for enp in include_exp_name_patterns:
457
+ if isinstance(enp, str):
458
+ enp = [enp]
440
459
  if isinstance(enp, list):
441
- enp = '.*' + '.*'.join(enp) + '.*'
460
+ enp = r'.*' + '.*'.join(enp) + '.*'
461
+ else:
462
+ raise AttributeError
442
463
  rc = re.compile(enp)
443
464
  rm = rc.match(exp.name.lower())
444
465
  if rm is not None:
@@ -456,8 +477,12 @@ class Downloader(object):
456
477
  for exp in exps:
457
478
  matching = 1
458
479
  for enp in exclude_exp_name_patterns:
480
+ if isinstance(enp, str):
481
+ enp = [enp]
459
482
  if isinstance(enp, list):
460
- enp = '.*' + '.*'.join(enp) + '.*'
483
+ enp = r'.*' + '.*'.join(enp) + '.*'
484
+ else:
485
+ raise AttributeError
461
486
  rc = re.compile(enp)
462
487
  rm = rc.match(exp.name.lower())
463
488
  if rm is not None:
@@ -10,6 +10,8 @@ __docformat__ = "reStructureText"
10
10
 
11
11
 
12
12
  import datetime
13
+ import re
14
+
13
15
  import numpy as np
14
16
 
15
17
  import geospacelab.datahub as datahub
@@ -27,9 +29,9 @@ default_dataset_attrs = {
27
29
  'kind': 'sourced',
28
30
  'database': madrigal_database,
29
31
  'facility': 'EISCAT',
30
- 'data_file_type': 'eiscat-hdf5',
32
+ 'data_file_type': 'madrigal-hdf5',
31
33
  'data_file_ext': 'hdf5',
32
- 'data_root_dir': prf.datahub_data_root_dir / 'Madrigal' / 'EISCAT' / 'analyzed',
34
+ 'data_root_dir': prf.datahub_data_root_dir / 'Madrigal' / 'EISCAT' / 'Analyzed',
33
35
  'allow_download': True,
34
36
  'status_control': False,
35
37
  'rasidual_contorl': False,
@@ -49,7 +51,7 @@ default_variable_names = [
49
51
 
50
52
  # default_data_search_recursive = True
51
53
 
52
- default_attrs_required = ['site', 'antenna', 'modulation']
54
+ default_attrs_required = ['site', 'antenna',]
53
55
 
54
56
 
55
57
  class Dataset(datahub.DatasetSourced):
@@ -63,6 +65,7 @@ class Dataset(datahub.DatasetSourced):
63
65
  self.site = kwargs.pop('site', '')
64
66
  self.antenna = kwargs.pop('antenna', '')
65
67
  self.experiment = kwargs.pop('experiment', '')
68
+ self.experiment_ids = kwargs.pop('exp_ids', [])
66
69
  self.pulse_code = kwargs.pop('pulse_code', '')
67
70
  self.scan_mode = kwargs.pop('scan_mode', '')
68
71
  self.modulation = kwargs.pop('modulation', '')
@@ -102,6 +105,8 @@ class Dataset(datahub.DatasetSourced):
102
105
 
103
106
  if str(self.data_file_type):
104
107
  self.data_file_ext = self.data_file_type.split('-')[1]
108
+ if (self.load_mode == 'AUTO') and (self.data_file_type=='eiscat-mat'):
109
+ raise AttributeError
105
110
 
106
111
  def label(self, **kwargs):
107
112
  label = super().label()
@@ -253,57 +258,140 @@ class Dataset(datahub.DatasetSourced):
253
258
  def search_data_files(self, **kwargs):
254
259
  dt_fr = self.dt_fr
255
260
  dt_to = self.dt_to
256
- diff_days = dttool.get_diff_days(dt_fr, dt_to)
257
- day0 = dttool.get_start_of_the_day(dt_fr)
258
- for i in range(diff_days + 1):
259
- thisday = day0 + datetime.timedelta(days=i)
260
- initial_file_dir = self.data_root_dir / self.site / thisday.strftime('%Y')
261
-
262
- file_patterns = []
263
- if self.data_file_type == 'eiscat-hdf5':
264
- file_patterns.append('EISCAT')
265
- elif self.data_file_type == 'madrigal-hdf5':
266
- file_patterns.append('MAD6400')
267
- elif self.data_file_type == 'eiscat-mat':
268
- pass
269
- file_patterns.append(thisday.strftime('%Y-%m-%d'))
270
- file_patterns.append(self.modulation)
271
- file_patterns.append(self.antenna.lower())
272
-
273
- # remove empty str
274
- file_patterns = [pattern for pattern in file_patterns if str(pattern)]
275
-
276
- search_pattern = '*' + '*'.join(file_patterns) + '*'
277
- if self.data_file_type == 'eiscat-mat':
278
- search_pattern = search_pattern + '/'
279
- done = super().search_data_files(
280
- initial_file_dir=initial_file_dir, search_pattern=search_pattern)
281
-
282
- # Validate file paths
283
-
284
- if not done and self.allow_download:
285
- done = self.download_data()
286
- if done:
287
- done = super().search_data_files(
288
- initial_file_dir=initial_file_dir, search_pattern=search_pattern)
261
+ done = False
262
+ if not list(self.experiment_ids):
263
+ diff_days = dttool.get_diff_days(dt_fr, dt_to)
264
+ day0 = dttool.get_start_of_the_day(dt_fr)
265
+ for i in range(diff_days + 1):
266
+ thisday = day0 + datetime.timedelta(days=i)
267
+ initial_file_dir = self.data_root_dir / self.site / thisday.strftime('%Y')
268
+
269
+ file_patterns = []
270
+ if self.data_file_type == 'eiscat-hdf5':
271
+ file_patterns.append('EISCAT')
272
+ elif self.data_file_type == 'madrigal-hdf5':
273
+ file_patterns.append('MAD6400')
274
+ else:
275
+ raise NotImplementedError
276
+ file_patterns.append(thisday.strftime('%Y-%m-%d'))
277
+ if str(self.pulse_code):
278
+ file_patterns.append(self.pulse_code)
279
+ if str(self.modulation):
280
+ file_patterns.append(self.modulation)
281
+ file_patterns.append(self.antenna.lower())
282
+
283
+ # remove empty str
284
+ file_patterns = [pattern for pattern in file_patterns if str(pattern)]
285
+
286
+ search_pattern = '*' + '*'.join(file_patterns) + '*'
287
+ done = super().search_data_files(
288
+ initial_file_dir=initial_file_dir,
289
+ search_pattern=search_pattern, allow_multiple_files=True)
290
+
291
+ # Validate file paths
292
+ if not done and self.allow_download:
293
+ done = self.download_data()
294
+ if done:
295
+ done = super().search_data_files(
296
+ initial_file_dir=initial_file_dir,
297
+ search_pattern=search_pattern,
298
+ allow_multiple_files=True
299
+ )
300
+ else:
301
+ print('Cannot find files from the online database!')
302
+ else:
303
+ initial_file_dir = self.data_root_dir
304
+ for exp_id in self.experiment_ids:
305
+ file_patterns = []
306
+ if self.data_file_type == 'eiscat-hdf5':
307
+ file_patterns.append('EISCAT')
308
+ elif self.data_file_type == 'madrigal-hdf5':
309
+ file_patterns.append('MAD')
289
310
  else:
290
- print('Cannot find files from the online database!')
311
+ raise NotImplementedError
312
+ file_patterns.append(thisday.strftime('%Y-%m-%d'))
313
+ if str(self.pulse_code):
314
+ file_patterns.append(self.pulse_code)
315
+ if str(self.modulation):
316
+ file_patterns.append(self.modulation)
317
+ file_patterns.append(self.antenna.lower())
318
+ # remove empty str
319
+ file_patterns = [pattern for pattern in file_patterns if str(pattern)]
320
+ search_pattern = f"*EID-{exp_id}*/*{'*'.join(file_patterns)}*"
321
+ done = super().search_data_files(
322
+ initial_file_dir=initial_file_dir,
323
+ search_pattern=search_pattern, recursive=True, allow_multiple_files=True
324
+ )
325
+
326
+ if not done and self.allow_download:
327
+ done = self.download_data()
328
+ if done:
329
+ done = super().search_data_files(
330
+ initial_file_dir=initial_file_dir,
331
+ search_pattern=search_pattern, recursive=True, allow_multiple_files=True
332
+ )
333
+ else:
334
+ print('The requested experiment (ID: {}) does not exist in the online database!'.format(exp_id))
335
+ if len(done) > 1:
336
+ mylog.StreamLogger.warning(
337
+ "Multiple data files detected! " +
338
+ "Specify the experiment pulse code and modulation may constrain the searching condition.")
339
+ for fp in done:
340
+ mylog.simpleinfo.info(str(fp))
341
+ self._check_multiple_files()
291
342
 
292
343
  return done
293
344
 
345
+ def _check_multiple_files(self):
346
+ file_paths = self.data_file_paths
347
+ exp_ids = []
348
+ for fp in file_paths:
349
+ rc = re.compile(r"EID\-([\d]+)")
350
+ res = rc.search(str(fp))
351
+ exp_ids.append(res.groups()[0])
352
+ exp_ids_unique = [eid for eid in np.unique(exp_ids)]
353
+
354
+ file_paths_new = []
355
+ for eid in exp_ids_unique:
356
+ inds_id = np.where(np.array(exp_ids)==eid)[0]
357
+ fps_sub = []
358
+ for ii in inds_id:
359
+ fp = file_paths[ii]
360
+ rc = re.compile(r".*_([\d]{8}T[\d]{6}).*_([\d]{8}T[\d]{6}).*[\d]{4}\-[\d]{2}\-[\d]{2}_([\w]+)@.*")
361
+ res = rc.search(str(fp))
362
+ dt_0 = datetime.datetime.strptime(res.groups()[0], '%Y%m%dT%H%M%S')
363
+ dt_1 = datetime.datetime.strptime(res.groups()[1], '%Y%m%dT%H%M%S')
364
+ if (dt_0 >= self.dt_to) or (dt_1<=self.dt_fr):
365
+ continue
366
+ if str(self.pulse_code):
367
+ if self.pulse_code not in res.groups()[2]:
368
+ continue
369
+ if str(self.modulation):
370
+ if self.modulation not in res.groups()[2]:
371
+ continue
372
+ fps_sub.extend([fp])
373
+ if len(fps_sub) > 1:
374
+ mylog.StreamLogger.warning("Multiple data files for a single experiment detected! Only the first one is selected.")
375
+ # for fp in fps_sub:
376
+ # mylog.simpleinfo.info(str(fp))
377
+ # fps_sub = fps_sub[0]
378
+ file_paths_new.extend(fps_sub)
379
+ self.data_file_paths = file_paths_new
380
+
381
+
294
382
  def download_data(self):
295
383
  if self.data_file_type == 'eiscat-hdf5':
296
384
  download_obj = self.downloader(dt_fr=self.dt_fr, dt_to=self.dt_to,
297
- sites=[self.site], kind_data='eiscat',
298
- data_file_root_dir=self.data_root_dir)
385
+ antennas=[self.antenna], kind_data='eiscat',
386
+ data_file_root_dir=self.data_root_dir,
387
+ exclude_file_type_patterns=['pp']
388
+ )
299
389
  elif self.data_file_type == 'madrigal-hdf5':
300
390
  download_obj = self.downloader(dt_fr=self.dt_fr, dt_to=self.dt_to,
301
- sites=[self.site], kind_data='madrigal',
302
- data_file_root_dir=self.data_root_dir)
303
- elif self.data_file_type == 'eiscat-mat':
304
- download_obj = self.downloader(dt_fr=self.dt_fr, dt_to=self.dt_to,
305
- sites=[self.site], kind_data='eiscat',
306
- data_file_root_dir=self.data_root_dir)
391
+ antennas=[self.antenna], kind_data='madrigal',
392
+ data_file_root_dir=self.data_root_dir,
393
+ exclude_file_type_patterns=['pp']
394
+ )
307
395
  else:
308
396
  raise TypeError
309
397
  return download_obj.done
@@ -28,17 +28,242 @@ import geospacelab.datahub.sources.madrigal as madrigal
28
28
  import geospacelab.toolbox.utilities.pylogging as mylog
29
29
  import geospacelab.toolbox.utilities.pydatetime as dttool
30
30
 
31
+ from geospacelab.datahub.sources.madrigal.downloader import Downloader as DownloaderBase
32
+
33
+
34
+ class Downloader(DownloaderBase):
35
+
36
+ def __init__(
37
+ self,
38
+ dt_fr: datetime.datetime, dt_to: datetime,
39
+ antennas=None,
40
+ data_file_root_dir=None,
41
+ kind_data="madrigal",
42
+ user_fullname=madrigal.default_user_fullname,
43
+ user_email=madrigal.default_user_email,
44
+ user_affiliation=madrigal.default_user_affiliation,
45
+ include_exp_name_patterns: list=None,
46
+ exclude_exp_name_patterns: list=None,
47
+ include_exp_ids: list=None,
48
+ exclude_exp_ids: list=None,
49
+ include_file_name_patterns: list = None,
50
+ exclude_file_name_patterns: list = None,
51
+ include_file_type_patterns=None,
52
+ exclude_file_type_patterns=None,
53
+ direct_download = True,
54
+ force_download = False,
55
+ dry_run: bool=False,
56
+ madrigal_url: str = "http://madrigal.eiscat.se/",
57
+ ):
58
+
59
+ # dt_fr = dttool.get_start_of_the_day(dt_fr)
60
+ # dt_to = dttool.get_end_of_the_day(dt_to)
61
+
62
+ icodes = []
63
+ for a in antennas:
64
+ icodes.extend(instrument_codes[a])
65
+ icodes = [int(i) for i in np.unique(icodes)]
66
+
67
+ self.kind_data=kind_data
31
68
 
32
- def test():
33
- sites = ['UHF']
34
- dt_fr = datetime.datetime(2014, 1, 1,)
35
- dt_to = datetime.datetime(2014, 12, 31)
36
- # download_obj = Downloader(dt_fr, dt_to, sites=sites, kind_data="madrigal")
37
- # schedule = EISCATSchedule(dt_fr=dt_fr, dt_to=dt_to)
38
- # schedule.to_txt()
69
+ if data_file_root_dir is None:
70
+ self.data_file_root_dir = pfr.datahub_data_root_dir / 'Madrigal' / 'EISCAT' / 'Analyzed'
71
+ else:
72
+ self.data_file_root_dir = data_file_root_dir
39
73
 
74
+ super().__init__(
75
+ dt_fr=dt_fr, dt_to=dt_to, icodes=icodes,
76
+ include_exp_name_patterns=include_exp_name_patterns,
77
+ exclude_exp_name_patterns=exclude_exp_name_patterns,
78
+ include_exp_ids=include_exp_ids,
79
+ exclude_exp_ids=exclude_exp_ids,
80
+ include_file_name_patterns=include_file_name_patterns,
81
+ exclude_file_name_patterns=exclude_file_name_patterns,
82
+ include_file_type_patterns=include_file_type_patterns,
83
+ exclude_file_type_patterns=exclude_file_type_patterns,
84
+ data_file_root_dir=data_file_root_dir,
85
+ force_download=force_download, direct_download=direct_download, dry_run=dry_run,
86
+ madrigal_url=madrigal_url,
87
+ user_fullname=user_fullname, user_email=user_email, user_affiliation=user_affiliation)
88
+
89
+ def download(self, **kwargs):
90
+ if self.kind_data.lower() == 'eiscat':
91
+ self.download_EISCAT()
92
+ elif self.kind_data.lower() == 'madrigal':
93
+ self.download_MAD()
94
+ else:
95
+ raise NotImplementedError
96
+ return
97
+
98
+ def download_EISCAT(self):
99
+ exps, database = self.get_exp_list(
100
+ dt_fr=dttool.get_start_of_the_day(self.dt_fr),
101
+ dt_to=dttool.get_end_of_the_day(self.dt_to),
102
+ include_exp_name_patterns=self.include_exp_name_patterns,
103
+ exclude_exp_name_patterns=self.exclude_exp_name_patterns,
104
+ include_exp_ids=self.include_exp_ids,
105
+ exclude_exp_ids=self.exclude_exp_ids,
106
+ icodes=self.icodes,
107
+ madrigal_url=self.madrigal_url,
108
+ display=True)
109
+ self.exp_list = list(exps)
110
+ self.database = database
111
+
112
+ cookies = {
113
+ 'user_email': self.user_email,
114
+ 'user_fullname': self.user_fullname,
115
+ 'user_affiliation': self.user_affiliation
116
+ }
117
+ for exp in exps:
118
+ dt_fr_exp = datetime.datetime(
119
+ exp.startyear, exp.startmonth, exp.startday, exp.starthour, exp.startmin, exp.startsec
120
+ )
121
+ dt_to_exp = datetime.datetime(
122
+ exp.endyear, exp.endmonth, exp.endday, exp.endhour, exp.endmin, exp.endsec
123
+ )
124
+ if (dt_fr_exp >= self.dt_to) or (dt_to_exp <= self.dt_fr):
125
+ continue
126
+ try:
127
+ res = re.search(r'([\d]{4}\-[\d]{2}\-[\d]{2})_(\w+)@(\w+)', exp.name)
128
+ thisday = datetime.datetime.strptime(res.groups()[0], "%Y-%m-%d")
129
+ pulse_code = res.groups()[1]
130
+ antenna_ = res.groups()[2]
131
+ if 'uhf' in antenna_.lower():
132
+ antenna = 'UHF'
133
+ elif 'vhf' in antenna_.lower():
134
+ antenna = 'VHF'
135
+ elif any([a in antenna_.lower() for a in ['32m', '42m', 'esr']]):
136
+ antenna = 'ESR'
137
+ elif 'sod' in antenna_.lower():
138
+ antenna = 'SOD'
139
+ elif 'kir' in antenna_.lower():
140
+ antenna = 'KIR'
141
+ else:
142
+ raise NotImplementedError
143
+ except Exception as e:
144
+ print(e)
145
+ mylog.StreamLogger.warning("Parsing the experiment name was failed! EXP: {}".format(exp.name))
146
+
147
+ url = "https://madrigal.eiscat.se/madrigal/showExperiment?experiment_list=" + str(exp.id) + "&show_plots="
148
+
149
+ r = requests.get(url, cookies=cookies)
150
+ soup = bs4.BeautifulSoup(r.text, 'html.parser')
151
+ links = soup.find_all('a', href=True)
152
+ for link in links:
153
+ href = link['href']
154
+ if any(href.endswith(s) for s in ['.png', '.tar.gz', '.hdf5']):
155
+ filename = href.split('/')[-1]
156
+ file_dir_local = self.data_file_root_dir / antenna / thisday.strftime("%Y") / \
157
+ (exp.name + '_EID-' + str(exp.id) + '_'
158
+ + dt_fr_exp.strftime("%Y%m%dT%H%M%S") + '_'
159
+ + dt_to_exp.strftime("%Y%m%dT%H%M%S"))
160
+ file_dir_local.mkdir(parents=True, exist_ok=True)
161
+
162
+ remote_file = requests.get(href)
163
+ file_path = file_dir_local / filename
164
+ if file_path.is_file() and not self.force_download:
165
+ print("The file {} has been downloaded.".format(filename))
166
+ self.done=True
167
+ continue
168
+ mylog.simpleinfo.info(
169
+ 'Downloading "{} ..."'.format(filename)
170
+ )
171
+ with open(file_path, "wb") as eiscat:
172
+ eiscat.write(remote_file.content)
173
+ mylog.simpleinfo.info('Saved to {}.'.format(file_dir_local))
174
+ self.done = True
175
+ return
176
+
177
+ def download_MAD(self, **kwargs):
178
+
179
+ exps, database = self.get_exp_list(
180
+ dt_fr=dttool.get_start_of_the_day(self.dt_fr),
181
+ dt_to=dttool.get_end_of_the_day(self.dt_to),
182
+ include_exp_name_patterns=self.include_exp_name_patterns,
183
+ exclude_exp_name_patterns=self.exclude_exp_name_patterns,
184
+ include_exp_ids=self.include_exp_ids,
185
+ exclude_exp_ids=self.exclude_exp_ids,
186
+ icodes=self.icodes,
187
+ madrigal_url=self.madrigal_url,
188
+ display=True)
189
+ self.exp_list = list(exps)
190
+ self.database = database
191
+
192
+ exps, exps_error = self.get_online_file_list(
193
+ exp_list=self.exp_list, database=database,
194
+ include_file_name_patterns=self.include_file_name_patterns,
195
+ exclude_file_name_patterns=self.exclude_file_name_patterns,
196
+ include_file_type_patterns=self.include_file_type_patterns,
197
+ exclude_file_type_patterns=self.exclude_file_type_patterns,
198
+ display=True
199
+ )
200
+ self.exp_list_error = list(exps_error)
201
+
202
+ file_paths = []
203
+ for exp in exps:
204
+ dt_fr_exp = datetime.datetime(
205
+ exp.startyear, exp.startmonth, exp.startday, exp.starthour, exp.startmin, exp.startsec
206
+ )
207
+ dt_to_exp = datetime.datetime(
208
+ exp.endyear, exp.endmonth, exp.endday, exp.endhour, exp.endmin, exp.endsec
209
+ )
210
+ if (dt_fr_exp >= self.dt_to) or (dt_to_exp <= self.dt_fr):
211
+ continue
212
+ for file in list(exp.files):
213
+
214
+ file_path_remote = pathlib.Path(file.name)
215
+ file_name_remote = file_path_remote.name
216
+
217
+ try:
218
+ res = re.search(r'([\d]{4}\-[\d]{2}\-[\d]{2})_(\w+)@(\w+)', exp.name)
219
+ thisday = datetime.datetime.strptime(res.groups()[0], "%Y-%m-%d")
220
+ pulse_code = res.groups()[1]
221
+ antenna_ = res.groups()[2]
222
+ if 'uhf' in antenna_.lower():
223
+ antenna = 'UHF'
224
+ elif 'vhf' in antenna_.lower():
225
+ antenna = 'VHF'
226
+ elif any([a in antenna_.lower() for a in ['32m', '42m', 'esr']]):
227
+ antenna = 'ESR'
228
+ elif 'sod' in antenna_.lower():
229
+ antenna = 'SOD'
230
+ elif 'kir' in antenna_.lower():
231
+ antenna = 'KIR'
232
+ else:
233
+ raise NotImplementedError
234
+ except Exception as e:
235
+ print(e)
236
+ mylog.StreamLogger.warning("Parsing the experiment name was failed! EXP: {}".format(exp.name))
237
+
238
+ file_dir_local = self.data_file_root_dir / antenna / thisday.strftime("%Y") / \
239
+ (exp.name + '_EID-' + str(exp.id) + '_'
240
+ + dt_fr_exp.strftime("%Y%m%dT%H%M%S") + '_'
241
+ + dt_to_exp.strftime("%Y%m%dT%H%M%S"))
242
+ file_dir_local.mkdir(parents=True, exist_ok=True)
40
243
 
41
- class Downloader(object):
244
+ file_name_local = file_name_remote
245
+ file_path_local = file_dir_local / file_name_local
246
+
247
+ super().download(
248
+ file_path_remote=file.name, file_path_local=file_path_local,
249
+ file_format='hdf5')
250
+ file_paths.append(file_path_local)
251
+ return file_paths
252
+
253
+
254
+ def test():
255
+ dt_0 = datetime.datetime(2016, 3, 9, 19)
256
+ dt_1 = datetime.datetime(2016, 3, 9, 23, 59)
257
+ downloader = DownloaderNew(
258
+ dt_fr=dt_0, dt_to=dt_1,
259
+ kind_data='EISCAT',
260
+ antennas=['UHF', 'VHF'],
261
+ force_download=True,
262
+ exclude_file_type_patterns=['pp']
263
+ )
264
+ pass
265
+
266
+ class DownloaderOld(object):
42
267
  """Download the quickplots and archieved analyzed results from EISCAT schedule webpage
43
268
  """
44
269
 
@@ -220,7 +445,8 @@ class Downloader(object):
220
445
  instrument_codes = {
221
446
  'UHF': [72],
222
447
  'VHF': [74],
223
- 'ESR': [95],
448
+ '42m': [95],
449
+ '32m': [95],
224
450
  'SOD': [73, 76],
225
451
  'KIR': [71, 75]
226
452
  }
@@ -41,7 +41,7 @@ default_axis_dict_2d = {
41
41
  2: {
42
42
  'data': '@v.value',
43
43
  'label': '@v.label',
44
- 'unit': '@v.unit',
44
+ 'unit': '@v.unit_label',
45
45
  }
46
46
  }
47
47
 
@@ -82,16 +82,15 @@ var.visual.axis[1].config(**default_axis_dict_2d[1])
82
82
  var.visual.axis[2].config(**default_axis_dict_2d[2])
83
83
  var.visual.axis[2].scale = 'log'
84
84
  var.visual.axis[2].lim = [8e9, 9e11]
85
- # axis = var.visual.axis
86
- # axis[1].data = "@d.height.value"
87
- # axis[2].data = "@v.value"
88
- # axis[1].lim = [90, 350]
89
- # axis[1].label = 'h'
90
- # axis[1].unit = 'km'
91
- # axis[2].lim = [8e9, 9e11]
92
- # axis[2].scale = 'log'
93
- # axis[2].label = '@v.label'
94
- # axis[2].unit = '@v.unit_label'
85
+ axis = var.visual.axis
86
+ axis[1].data = "@d.HEIGHT.value"
87
+ axis[2].data = "@v.value"
88
+ axis[1].label = 'h'
89
+ axis[1].unit = 'km'
90
+ axis[2].lim = [8e9, 9e11]
91
+ axis[2].scale = 'log'
92
+ axis[2].label = '@v.label'
93
+ axis[2].unit = '@v.unit_label'
95
94
 
96
95
  configured_variables[var_name] = var
97
96