geospacelab 0.9.4__tar.gz → 0.10.1__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.1}/PKG-INFO +2 -2
  2. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/__init__.py +1 -1
  3. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/downloader.py +1 -0
  4. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/downloader.py +33 -8
  5. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/__init__.py +146 -47
  6. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/downloader.py +235 -9
  7. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/loader.py +71 -36
  8. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/variable_config.py +10 -11
  9. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/downloader.py +13 -4
  10. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/__init__.py +100 -51
  11. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/downloader.py +3 -1
  12. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/variable_config.py +10 -11
  13. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/__init__.py +95 -52
  14. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/downloader.py +1 -1
  15. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/variable_config.py +3 -1
  16. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/supermag_api.py +2 -1
  17. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/numpyarray.py +137 -1
  18. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/panels.py +20 -4
  19. {geospacelab-0.9.4 → geospacelab-0.10.1/geospacelab.egg-info}/PKG-INFO +2 -2
  20. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab.egg-info/requires.txt +1 -1
  21. {geospacelab-0.9.4 → geospacelab-0.10.1}/setup.py +1 -1
  22. {geospacelab-0.9.4 → geospacelab-0.10.1}/LICENSE +0 -0
  23. {geospacelab-0.9.4 → geospacelab-0.10.1}/MANIFEST.in +0 -0
  24. {geospacelab-0.9.4 → geospacelab-0.10.1}/README.md +0 -0
  25. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/config/__init__.py +0 -0
  26. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/config/_preferences.py +0 -0
  27. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/__init__.py +0 -0
  28. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/_aacgm.py +0 -0
  29. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/_apex.py +0 -0
  30. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/_cs_base.py +0 -0
  31. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/_geo.py +0 -0
  32. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/cs/geo_utilities.py +0 -0
  33. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/__dataset_base__.py +0 -0
  34. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/__init__.py +0 -0
  35. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/__metadata_base__.py +0 -0
  36. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/__variable_base__.py +0 -0
  37. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/__init__.py +0 -0
  38. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/__init__.py +0 -0
  39. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/__init__.py +0 -0
  40. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/__init__.py +0 -0
  41. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/__init__.py +0 -0
  42. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/downloader.py +0 -0
  43. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/loader.py +0 -0
  44. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/dmsp/ssusi/edr_aur/variable_config.py +0 -0
  45. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/omni/__init__.py +0 -0
  46. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/omni/downloader.py +0 -0
  47. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/omni/loader.py +0 -0
  48. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/cdaweb/omni/variable_config.py +0 -0
  49. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/__init__.py +0 -0
  50. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/__init__.py +0 -0
  51. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/__init__.py +0 -0
  52. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_fp/__init__.py +0 -0
  53. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/__init__.py +0 -0
  54. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/downloader.py +0 -0
  55. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/loader.py +0 -0
  56. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_lp_hm/variable_config.py +0 -0
  57. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/__init__.py +0 -0
  58. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/downloader.py +0 -0
  59. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/loader.py +0 -0
  60. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct02/variable_config.py +0 -0
  61. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/advanced/efi_tct16/__init__.py +0 -0
  62. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/downloader.py +0 -0
  63. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/__init__.py +0 -0
  64. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/__init__.py +0 -0
  65. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/downloader.py +0 -0
  66. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/loader.py +0 -0
  67. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_hr/variable_config.py +0 -0
  68. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/__init__.py +0 -0
  69. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/downloader.py +0 -0
  70. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/loader.py +0 -0
  71. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l1b/mag_lr/variable_config.py +0 -0
  72. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2d/__init__.py +0 -0
  73. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/__init__.py +0 -0
  74. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/__init__.py +0 -0
  75. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/downloader.py +0 -0
  76. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/loader.py +0 -0
  77. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/aej_lpl/variable_config.py +0 -0
  78. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/__init__.py +0 -0
  79. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/downloader.py +0 -0
  80. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/loader.py +0 -0
  81. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_acc/variable_config.py +0 -0
  82. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/__init__.py +0 -0
  83. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/downloader.py +0 -0
  84. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/loader.py +0 -0
  85. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/dns_pod/variable_config.py +0 -0
  86. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/__init__.py +0 -0
  87. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/downloader.py +0 -0
  88. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/loader.py +0 -0
  89. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2daily/fac_tms/variable_config.py +0 -0
  90. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/l2l/__init__.py +0 -0
  91. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/loader.py +0 -0
  92. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/esa_eo/swarm/multimission/__init__.py +0 -0
  93. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/__init__.py +0 -0
  94. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/image/__init__.py +0 -0
  95. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/image/ie/__init__.py +0 -0
  96. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/image/ie/downloader.py +0 -0
  97. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/image/ie/loader.py +0 -0
  98. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/image/ie/variable_config.py +0 -0
  99. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/miracle/__init__.py +0 -0
  100. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/miracle/abk/__init__.py +0 -0
  101. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/miracle/kev/__init__.py +0 -0
  102. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/fmi/miracle/muo/__init__.py +0 -0
  103. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/__init__.py +0 -0
  104. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/downloader.py +0 -0
  105. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/__init__.py +0 -0
  106. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/downloader.py +0 -0
  107. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/loader.py +0 -0
  108. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/nowcast/__init__.py +0 -0
  109. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/nowcast/downloader.py +0 -0
  110. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/hpo/variable_config.py +0 -0
  111. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/__init__.py +0 -0
  112. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/downloader.py +0 -0
  113. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/loader.py +0 -0
  114. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/nowcast/__init__.py +0 -0
  115. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/nowcast/downloader.py +0 -0
  116. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/nowcast/loader.py +0 -0
  117. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/nowcast/variable_config.py +0 -0
  118. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/kpap/variable_config.py +0 -0
  119. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/snf107/__init__.py +0 -0
  120. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/snf107/loader.py +0 -0
  121. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/gfz/snf107/variable_config.py +0 -0
  122. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/__init__.py +0 -0
  123. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/gnss/__init__.py +0 -0
  124. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/gnss/tecmap/__init__.py +0 -0
  125. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/gnss/tecmap/downloader.py +0 -0
  126. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/gnss/tecmap/loader.py +0 -0
  127. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/isee/gnss/tecmap/variable_config.py +0 -0
  128. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/__init__.py +0 -0
  129. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/__init__.py +0 -0
  130. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/downloader.py +0 -0
  131. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/fitted/__init__.py +0 -0
  132. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/fitted/loader.py +0 -0
  133. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/fitted/variable_config.py +0 -0
  134. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/grd/__init__.py +0 -0
  135. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/grd/downloader.py +0 -0
  136. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/grd/loader.py +0 -0
  137. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/ampere/grd/variable_config.py +0 -0
  138. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/__init__.py +0 -0
  139. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/__init__.py +0 -0
  140. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/downloader.py +0 -0
  141. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/__init__.py +0 -0
  142. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/loader.py +0 -0
  143. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/edraur/variable_config.py +0 -0
  144. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/__init__.py +0 -0
  145. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/loader.py +0 -0
  146. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/jhuapl/dmsp/ssusi/sdrdisk/variable_config.py +0 -0
  147. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/__init__.py +0 -0
  148. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/gnss/__init__.py +0 -0
  149. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/gnss/tecmap/__init__.py +0 -0
  150. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/gnss/tecmap/downloader.py +0 -0
  151. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/gnss/tecmap/loader.py +0 -0
  152. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/gnss/tecmap/variable_config.py +0 -0
  153. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/__init__.py +0 -0
  154. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/__init__.py +0 -0
  155. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/examples/eiscat_hdf5_info.py +0 -0
  156. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/utilities.py +0 -0
  157. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/eiscat/variable_config.py +0 -0
  158. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/__init__.py +0 -0
  159. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/__init__.py +0 -0
  160. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/basic/loader.py +0 -0
  161. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/downloader.py +0 -0
  162. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/__init__.py +0 -0
  163. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/loader.py +0 -0
  164. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/gridded/variable_config.py +0 -0
  165. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/__init__.py +0 -0
  166. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/loader.py +0 -0
  167. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/millstonehill/vi/variable_config.py +0 -0
  168. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/__init__.py +0 -0
  169. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/fitted/loader.py +0 -0
  170. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/isr/pfisr/vi/loader.py +0 -0
  171. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/__init__.py +0 -0
  172. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/__init__.py +0 -0
  173. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/downloader.py +0 -0
  174. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/__init__.py +0 -0
  175. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/loader.py +0 -0
  176. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/e/variable_config.py +0 -0
  177. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/__init__.py +0 -0
  178. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/loader.py +0 -0
  179. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s1/variable_config.py +0 -0
  180. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/__init__.py +0 -0
  181. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/loader.py +0 -0
  182. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/satellites/dmsp/s4/variable_config.py +0 -0
  183. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/madrigal/utilities.py +0 -0
  184. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/__init__.py +0 -0
  185. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/__init__.py +0 -0
  186. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/downloader.py +0 -0
  187. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/__init__.py +0 -0
  188. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/downloader.py +0 -0
  189. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/loader.py +0 -0
  190. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/ncei/dmsp/ssm_mfr/variable_config.py +0 -0
  191. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/nipr/__init__.py +0 -0
  192. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/nipr/asc/__init__.py +0 -0
  193. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/nipr/asc/tro_wmi/__init__.py +0 -0
  194. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/nipr/asc/tro_wmi/loader.py +0 -0
  195. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/nipr/asc/tro_wmi/variable_config.py +0 -0
  196. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/noaa/__init__.py +0 -0
  197. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/noaa/swpc/__init__.py +0 -0
  198. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/noaa/swpc/goesxray/__init__.py +0 -0
  199. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/noaa/swpc/solarwind/__init__.py +0 -0
  200. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/superdarn/__init__.py +0 -0
  201. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/superdarn/potmap/__init__.py +0 -0
  202. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/superdarn/potmap/downloader.py +0 -0
  203. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/superdarn/potmap/loader.py +0 -0
  204. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/superdarn/potmap/variable_config.py +0 -0
  205. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/__init__.py +0 -0
  206. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/indices/__init__.py +0 -0
  207. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/indices/downloader.py +0 -0
  208. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/indices/loader.py +0 -0
  209. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/indices/variable_config.py +0 -0
  210. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/magnetometer/__init__.py +0 -0
  211. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/magnetometer/downloader.py +0 -0
  212. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/magnetometer/loader.py +0 -0
  213. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/magnetometer/variable_config.py +0 -0
  214. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/supermag/utilities.py +0 -0
  215. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/__init__.py +0 -0
  216. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/__init__.py +0 -0
  217. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/dns_acc/__init__.py +0 -0
  218. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/dns_acc/downloader.py +0 -0
  219. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/dns_acc/loader.py +0 -0
  220. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/dns_acc/variable_config.py +0 -0
  221. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/wnd_acc/__init__.py +0 -0
  222. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/wnd_acc/downloader.py +0 -0
  223. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/wnd_acc/loader.py +0 -0
  224. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/champ/wnd_acc/variable_config.py +0 -0
  225. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/downloader.py +0 -0
  226. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/goce/__init__.py +0 -0
  227. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/__init__.py +0 -0
  228. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/downloader.py +0 -0
  229. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/loader.py +0 -0
  230. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/goce/dns_wnd_acc/variable_config.py +0 -0
  231. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/__init__.py +0 -0
  232. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/dns_acc/__init__.py +0 -0
  233. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/dns_acc/downloader.py +0 -0
  234. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/dns_acc/loader.py +0 -0
  235. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/dns_acc/variable_config.py +0 -0
  236. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/wnd_acc/__init__.py +0 -0
  237. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/wnd_acc/downloader.py +0 -0
  238. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/wnd_acc/loader.py +0 -0
  239. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace/wnd_acc/variable_config.py +0 -0
  240. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/__init__.py +0 -0
  241. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/__init__.py +0 -0
  242. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/downloader.py +0 -0
  243. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/loader.py +0 -0
  244. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/dns_acc/variable_config.py +0 -0
  245. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/__init__.py +0 -0
  246. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/downloader.py +0 -0
  247. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/loader.py +0 -0
  248. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/grace_fo/wnd_acc/variable_config.py +0 -0
  249. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/__init__.py +0 -0
  250. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_acc/__init__.py +0 -0
  251. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_acc/downloader.py +0 -0
  252. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_acc/loader.py +0 -0
  253. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_acc/variable_config.py +0 -0
  254. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_pod/__init__.py +0 -0
  255. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_pod/downloader.py +0 -0
  256. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_pod/loader.py +0 -0
  257. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/tud/swarm/dns_pod/variable_config.py +0 -0
  258. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/__init__.py +0 -0
  259. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/ae/__init__.py +0 -0
  260. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/ae/downloader.py +0 -0
  261. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/ae/loader.py +0 -0
  262. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/ae/variable_config.py +0 -0
  263. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/asysym/__init__.py +0 -0
  264. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/asysym/downloader.py +0 -0
  265. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/asysym/loader.py +0 -0
  266. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/asysym/variable_config.py +0 -0
  267. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/dst/__init__.py +0 -0
  268. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/dst/downloader.py +0 -0
  269. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/dst/loader.py +0 -0
  270. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/datahub/sources/wdc/dst/variable_config.py +0 -0
  271. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/express/__init__.py +0 -0
  272. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/express/dmsp_dashboard.py +0 -0
  273. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/express/eiscat_dashboard.py +0 -0
  274. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/express/millstonehill_dashboard.py +0 -0
  275. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/express/omni_dashboard.py +0 -0
  276. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/__init__.py +0 -0
  277. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/empiricalmodels/__init__.py +0 -0
  278. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/empiricalmodels/ovationprime2010/__init__.py +0 -0
  279. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/empiricalmodels/ovationprime2010/ovationprime.py +0 -0
  280. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/satllites/__init__.py +0 -0
  281. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/satllites/orbit_analyzer.py +0 -0
  282. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/future/test_sscws.py +0 -0
  283. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/__init__.py +0 -0
  284. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/constants.py +0 -0
  285. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/earth/__init__.py +0 -0
  286. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/earth/_func.py +0 -0
  287. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/earth/constants.py +0 -0
  288. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/earth/geodesy.py +0 -0
  289. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/earth/sun_position.py +0 -0
  290. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/orbit/__init__.py +0 -0
  291. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/orbit/sc_orbit.py +0 -0
  292. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/orbit/utilities.py +0 -0
  293. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/site/__init__.py +0 -0
  294. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/observatory/site/mixins.py +0 -0
  295. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/quantity/__init__.py +0 -0
  296. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/__init__.py +0 -0
  297. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/io/__init__.py +0 -0
  298. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/io/dialog.py +0 -0
  299. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/unit/__init__.py +0 -0
  300. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/__init__.py +0 -0
  301. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/numpymath.py +0 -0
  302. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/pybasic.py +0 -0
  303. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/pyclass.py +0 -0
  304. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/pydatetime.py +0 -0
  305. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/pylogging.py +0 -0
  306. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/toolbox/utilities/pyos.py +0 -0
  307. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/__init__.py +0 -0
  308. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/__base__.py +0 -0
  309. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/__init__.py +0 -0
  310. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/_helpers.py +0 -0
  311. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/axes.py +0 -0
  312. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/axis_ticks.py +0 -0
  313. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/colormaps.py +0 -0
  314. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/dashboards.py +0 -0
  315. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/figure.py +0 -0
  316. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/geomap/__base__.py +0 -0
  317. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/geomap/__init__.py +0 -0
  318. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/geomap/geodashboards.py +0 -0
  319. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/mpl/geomap/geopanels.py +0 -0
  320. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/plotly/__init__.py +0 -0
  321. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/visualization/plotly/ipanel.py +0 -0
  322. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/__init__.py +0 -0
  323. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/LICENSE +0 -0
  324. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/README.md +0 -0
  325. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/__init__.py +0 -0
  326. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/__init__.py +0 -0
  327. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/geopack.py +0 -0
  328. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/igrf13coeffs.txt +0 -0
  329. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/t01.py +0 -0
  330. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/t04.py +0 -0
  331. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/t89.py +0 -0
  332. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/t96.py +0 -0
  333. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/test_geopack1.md +0 -0
  334. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab/wrapper/geopack/geopack/test_geopack1.py +0 -0
  335. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab.egg-info/SOURCES.txt +0 -0
  336. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab.egg-info/dependency_links.txt +0 -0
  337. {geospacelab-0.9.4 → geospacelab-0.10.1}/geospacelab.egg-info/top_level.txt +0 -0
  338. {geospacelab-0.9.4 → geospacelab-0.10.1}/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.1
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.1"
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,13 +65,15 @@ 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', '')
69
72
  self.data_file_type = kwargs.pop('data_file_type', '')
70
73
  self.affiliation = kwargs.pop('affiliation', '')
71
74
  self.allow_download = kwargs.pop('allow_download', True)
72
- self.metadata = None
75
+ self.gate_num = kwargs.pop('gate_num', None)
76
+ self.metadata = {}
73
77
  self.add_AACGM = kwargs.pop('add_AACGM', True)
74
78
  self.add_APEX = kwargs.pop('add_APEX', False)
75
79
 
@@ -102,6 +106,8 @@ class Dataset(datahub.DatasetSourced):
102
106
 
103
107
  if str(self.data_file_type):
104
108
  self.data_file_ext = self.data_file_type.split('-')[1]
109
+ if (self.load_mode == 'AUTO') and (self.data_file_type=='eiscat-mat'):
110
+ raise AttributeError
105
111
 
106
112
  def label(self, **kwargs):
107
113
  label = super().label()
@@ -111,7 +117,9 @@ class Dataset(datahub.DatasetSourced):
111
117
  self.check_data_files(**kwargs)
112
118
 
113
119
  for file_path in self.data_file_paths:
114
- load_obj = self.loader(file_path, file_type=self.data_file_type)
120
+ load_obj = self.loader(file_path, file_type=self.data_file_type, gate_num=self.gate_num)
121
+ if self.gate_num is None:
122
+ self.gate_num = load_obj.gate_num
115
123
 
116
124
  for var_name in self._variables.keys():
117
125
  self._variables[var_name].join(load_obj.variables[var_name])
@@ -125,6 +133,12 @@ class Dataset(datahub.DatasetSourced):
125
133
  self.experiment = rawdata_path.split('/')[-1].split('@')[0]
126
134
  self.affiliation = load_obj.metadata['affiliation']
127
135
  self.metadata = load_obj.metadata
136
+
137
+ inds_cmb = np.argsort(self['DATETIME'].flatten())
138
+ if any(np.diff(np.array(inds_cmb))<0):
139
+ for var_name in self.keys():
140
+ self[var_name].value = self[var_name].value[inds_cmb, :]
141
+
128
142
  if self.add_AACGM or self.add_APEX:
129
143
  self.calc_lat_lon()
130
144
  # self.select_beams(field_aligned=True)
@@ -253,57 +267,142 @@ class Dataset(datahub.DatasetSourced):
253
267
  def search_data_files(self, **kwargs):
254
268
  dt_fr = self.dt_fr
255
269
  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)
270
+ done = False
271
+ if not list(self.experiment_ids):
272
+ diff_days = dttool.get_diff_days(dt_fr, dt_to)
273
+ day0 = dttool.get_start_of_the_day(dt_fr)
274
+ for i in range(diff_days + 1):
275
+ thisday = day0 + datetime.timedelta(days=i)
276
+ initial_file_dir = self.data_root_dir / self.site / thisday.strftime('%Y')
277
+
278
+ file_patterns = []
279
+ if self.data_file_type == 'eiscat-hdf5':
280
+ file_patterns.append('EISCAT')
281
+ elif self.data_file_type == 'madrigal-hdf5':
282
+ file_patterns.append('MAD6400')
283
+ else:
284
+ raise NotImplementedError
285
+ file_patterns.append(thisday.strftime('%Y-%m-%d'))
286
+ if str(self.pulse_code):
287
+ file_patterns.append(self.pulse_code)
288
+ if str(self.modulation):
289
+ file_patterns.append(self.modulation)
290
+ file_patterns.append(self.antenna.lower())
291
+
292
+ # remove empty str
293
+ file_patterns = [pattern for pattern in file_patterns if str(pattern)]
294
+
295
+ search_pattern = '*' + '*'.join(file_patterns) + '*'
296
+ done = super().search_data_files(
297
+ initial_file_dir=initial_file_dir,
298
+ search_pattern=search_pattern, allow_multiple_files=True)
299
+
300
+ # Validate file paths
301
+ if not done and self.allow_download:
302
+ done = self.download_data()
303
+ if done:
304
+ done = super().search_data_files(
305
+ initial_file_dir=initial_file_dir,
306
+ search_pattern=search_pattern,
307
+ allow_multiple_files=True
308
+ )
309
+ else:
310
+ print('Cannot find files from the online database!')
311
+ else:
312
+ initial_file_dir = self.data_root_dir
313
+ for exp_id in self.experiment_ids:
314
+ file_patterns = []
315
+ if self.data_file_type == 'eiscat-hdf5':
316
+ file_patterns.append('EISCAT')
317
+ elif self.data_file_type == 'madrigal-hdf5':
318
+ file_patterns.append('MAD')
289
319
  else:
290
- print('Cannot find files from the online database!')
320
+ raise NotImplementedError
321
+ file_patterns.append(thisday.strftime('%Y-%m-%d'))
322
+ if str(self.pulse_code):
323
+ file_patterns.append(self.pulse_code)
324
+ if str(self.modulation):
325
+ file_patterns.append(self.modulation)
326
+ file_patterns.append(self.antenna.lower())
327
+ # remove empty str
328
+ file_patterns = [pattern for pattern in file_patterns if str(pattern)]
329
+ search_pattern = f"*EID-{exp_id}*/*{'*'.join(file_patterns)}*"
330
+ done = super().search_data_files(
331
+ initial_file_dir=initial_file_dir,
332
+ search_pattern=search_pattern, recursive=True, allow_multiple_files=True
333
+ )
334
+
335
+ if not done and self.allow_download:
336
+ done = self.download_data()
337
+ if done:
338
+ done = super().search_data_files(
339
+ initial_file_dir=initial_file_dir,
340
+ search_pattern=search_pattern, recursive=True, allow_multiple_files=True
341
+ )
342
+ else:
343
+ print('The requested experiment (ID: {}) does not exist in the online database!'.format(exp_id))
344
+ if len(done) > 1:
345
+ mylog.StreamLogger.warning(
346
+ "Multiple data files detected! " +
347
+ "Specify the experiment pulse code and modulation may constrain the searching condition.")
348
+ for fp in done:
349
+ mylog.simpleinfo.info(str(fp))
350
+ self._check_multiple_files()
291
351
 
292
352
  return done
293
353
 
354
+ def _check_multiple_files(self):
355
+ file_paths = self.data_file_paths
356
+ exp_ids = []
357
+ for fp in file_paths:
358
+ rc = re.compile(r"EID\-([\d]+)")
359
+ res = rc.search(str(fp))
360
+ exp_ids.append(res.groups()[0])
361
+ exp_ids_unique = [eid for eid in np.unique(exp_ids)]
362
+
363
+ file_paths_new = []
364
+ for eid in exp_ids_unique:
365
+ inds_id = np.where(np.array(exp_ids)==eid)[0]
366
+ fps_sub = []
367
+ for ii in inds_id:
368
+ fp = file_paths[ii]
369
+ rc = re.compile(r".*_([\d]{8}T[\d]{6}).*_([\d]{8}T[\d]{6}).*[\d]{4}\-[\d]{2}\-[\d]{2}_([\w.]+)@.*")
370
+ res = rc.search(str(fp))
371
+ dt_0 = datetime.datetime.strptime(res.groups()[0], '%Y%m%dT%H%M%S')
372
+ dt_1 = datetime.datetime.strptime(res.groups()[1], '%Y%m%dT%H%M%S')
373
+ if (dt_0 >= self.dt_to) or (dt_1<=self.dt_fr):
374
+ continue
375
+ if str(self.pulse_code):
376
+ if self.pulse_code not in res.groups()[2].lower():
377
+ continue
378
+ if str(self.modulation):
379
+ if self.modulation not in res.groups()[2].lower():
380
+ continue
381
+ if '_v' in res.groups()[2].lower():
382
+ continue
383
+ fps_sub.extend([fp])
384
+ if len(fps_sub) > 1:
385
+ mylog.StreamLogger.warning("Multiple data files for a single experiment detected!")
386
+ # for fp in fps_sub:
387
+ # mylog.simpleinfo.info(str(fp))
388
+ # fps_sub = fps_sub[0]
389
+ file_paths_new.extend(fps_sub)
390
+ self.data_file_paths = file_paths_new
391
+
392
+
294
393
  def download_data(self):
295
394
  if self.data_file_type == 'eiscat-hdf5':
296
395
  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)
396
+ antennas=[self.antenna], kind_data='eiscat',
397
+ data_file_root_dir=self.data_root_dir,
398
+ exclude_file_type_patterns=['pp']
399
+ )
299
400
  elif self.data_file_type == 'madrigal-hdf5':
300
401
  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)
402
+ antennas=[self.antenna], kind_data='madrigal',
403
+ data_file_root_dir=self.data_root_dir,
404
+ exclude_file_type_patterns=['pp']
405
+ )
307
406
  else:
308
407
  raise TypeError
309
408
  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
  }