pmagpy 4.2.116__py3-none-any.whl → 4.2.121__py3-none-any.whl

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 (969) hide show
  1. pmag_env/set_env.py +1 -1
  2. pmagpy/ipmag.py +43 -34
  3. pmagpy/svei.py +2654 -0
  4. pmagpy/version.py +2 -2
  5. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy_MagIC.ipynb +6 -19
  6. pmagpy-4.2.121.data/data/data_files/SVEI_demo.ipynb +519 -0
  7. {pmagpy-4.2.116.dist-info → pmagpy-4.2.121.dist-info}/METADATA +1 -1
  8. {pmagpy-4.2.116.dist-info → pmagpy-4.2.121.dist-info}/RECORD +969 -967
  9. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/ages.txt +0 -0
  10. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_ages.txt +0 -0
  11. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_citations.txt +0 -0
  12. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_images.txt +0 -0
  13. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_locations.txt +0 -0
  14. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_mailinglist.txt +0 -0
  15. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_samples.txt +0 -0
  16. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_sites.txt +0 -0
  17. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/er_specimens.txt +0 -0
  18. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/magic_measurements.txt +0 -0
  19. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/magic_methods.txt +0 -0
  20. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/pmag_criteria.txt +0 -0
  21. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/pmag_results.txt +0 -0
  22. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/pmag_sites.txt +0 -0
  23. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/pmag_specimens.txt +0 -0
  24. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/rmag_anisotropy.txt +0 -0
  25. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/rmag_hysteresis.txt +0 -0
  26. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/rmag_results.txt +0 -0
  27. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/2_5/McMurdo/zmab0100049tmp03.txt +0 -0
  28. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/.ipynb_checkpoints/Parsing_data_model-checkpoint.ipynb +0 -0
  29. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/ages.txt +0 -0
  30. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/contribution.txt +0 -0
  31. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/criteria.txt +0 -0
  32. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/extra_specimens.txt +0 -0
  33. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/images.txt +0 -0
  34. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/locations.txt +0 -0
  35. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/measurements.txt +0 -0
  36. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/new_locations.txt +0 -0
  37. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/samples.txt +0 -0
  38. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/sites.txt +0 -0
  39. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/McMurdo/specimens.txt +0 -0
  40. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/.ipynb_checkpoints/ages_from_samples_to_sites-checkpoint.ipynb +0 -0
  41. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/ages.txt +0 -0
  42. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/locations.txt +0 -0
  43. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/measurements.txt +0 -0
  44. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/samples.txt +0 -0
  45. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/sites.txt +0 -0
  46. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_1/specimens.txt +0 -0
  47. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/ages.txt +0 -0
  48. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/locations.txt +0 -0
  49. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/measurements.txt +0 -0
  50. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/samples.txt +0 -0
  51. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/sites.txt +0 -0
  52. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/Location_2/specimens.txt +0 -0
  53. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/ages.txt +0 -0
  54. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/ages_from_samples_to_sites.ipynb +0 -0
  55. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/contribution.txt +0 -0
  56. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/criteria.txt +0 -0
  57. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/locations.txt +0 -0
  58. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/magic_contribution.txt +0 -0
  59. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/measurements.txt +0 -0
  60. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/samples.txt +0 -0
  61. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/sites.txt +0 -0
  62. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/specimens.txt +0 -0
  63. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Megiddo/test_spec.txt +0 -0
  64. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/contribution.txt +0 -0
  65. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/contribution_11087_v2.5.txt +0 -0
  66. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/contribution_11087_v3.0.txt +0 -0
  67. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/er_citations.txt +0 -0
  68. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/er_locations.txt +0 -0
  69. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/er_sites.txt +0 -0
  70. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/locations.txt +0 -0
  71. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/pmag_results.txt +0 -0
  72. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/pmag_sites.txt +0 -0
  73. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/sites.txt +0 -0
  74. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/3_0/Osler/stored.json +0 -0
  75. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/Cont_rot.svg +0 -0
  76. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/aus_saf.frp +0 -0
  77. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/col_saf.frp +0 -0
  78. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/eant_saf.frp +0 -0
  79. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/eur_saf.frp +0 -0
  80. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/grn_saf.frp +0 -0
  81. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/ind_saf.frp +0 -0
  82. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/mad_saf.frp +0 -0
  83. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/nam_saf.frp +0 -0
  84. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/neaf_saf.frp +0 -0
  85. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/nwaf_saf.frp +0 -0
  86. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/par_saf.frp +0 -0
  87. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/FRPTMP/sac_saf.frp +0 -0
  88. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/af.asc +0 -0
  89. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ages.tmp +0 -0
  90. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ant.asc +0 -0
  91. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/aus.asc +0 -0
  92. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/aus_saf.frp +0 -0
  93. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/balt.asc +0 -0
  94. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/col_saf.frp +0 -0
  95. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/congo.asc +0 -0
  96. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/continents.py +0 -0
  97. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/eant_saf.frp +0 -0
  98. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/eur.asc +0 -0
  99. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/eur_saf.frp +0 -0
  100. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/finrot_saf.txt +0 -0
  101. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/globalapwps.txt +0 -0
  102. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/gond.asc +0 -0
  103. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/grn.asc +0 -0
  104. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/grn_saf.frp +0 -0
  105. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ib_eur.frp +0 -0
  106. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ind.asc +0 -0
  107. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ind.bak +0 -0
  108. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/ind_saf.frp +0 -0
  109. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/kala.asc +0 -0
  110. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/lau.asc +0 -0
  111. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/mad_saf.frp +0 -0
  112. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/mkcont.py +0 -0
  113. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/mkfrp.py +0 -0
  114. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/nam.asc +0 -0
  115. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/nam_saf.frp +0 -0
  116. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/neaf_saf.frp +0 -0
  117. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/nwaf_saf.frp +0 -0
  118. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/par_saf.frp +0 -0
  119. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/plates.asc +0 -0
  120. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/sac_saf.frp +0 -0
  121. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/saf.frp +0 -0
  122. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/sam.asc +0 -0
  123. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Continents/waf.asc +0 -0
  124. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/Z35.sam.magic +0 -0
  125. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/Z35_er_samples.txt +0 -0
  126. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/Z35_er_sites.txt +0 -0
  127. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/Z35_er_specimens.txt +0 -0
  128. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/er_ages.txt +0 -0
  129. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/er_locations.txt +0 -0
  130. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/er_samples.txt +0 -0
  131. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/er_sites.txt +0 -0
  132. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/er_specimens.txt +0 -0
  133. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ErMagicBuilder/magic_measurements.txt +0 -0
  134. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Figures/atrm_meas.png +0 -0
  135. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Figures/chartmaker.png +0 -0
  136. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Figures/meas15.png +0 -0
  137. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Figures/samples.png +0 -0
  138. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy-cli.ipynb +0 -0
  139. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy_calculations.ipynb +0 -0
  140. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy_introduction.ipynb +0 -0
  141. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy_online.ipynb +0 -0
  142. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/PmagPy_plots_analysis.ipynb +0 -0
  143. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/Tel-Hazor_Tel-Megiddo_25.Aug.2016.txt +0 -0
  144. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/ages.txt +0 -0
  145. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/ages_from_samples_to_sites.ipynb +0 -0
  146. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/contribution.txt +0 -0
  147. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/criteria.txt +0 -0
  148. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/demag_orient.txt +0 -0
  149. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/locations.txt +0 -0
  150. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/measurements.txt +0 -0
  151. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/new_samples.txt +0 -0
  152. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/new_sites.txt +0 -0
  153. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/new_specimens.txt +0 -0
  154. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/samples.bak +0 -0
  155. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/samples.txt +0 -0
  156. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/sites.bak +0 -0
  157. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/sites.txt +0 -0
  158. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/specimens.bak +0 -0
  159. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/specimens.txt +0 -0
  160. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/3_0/thellier_GUI.log +0 -0
  161. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/SIOfiles/na_sw.atrm +0 -0
  162. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/SIOfiles/na_sw.cool +0 -0
  163. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/SIOfiles/na_sw.thel +0 -0
  164. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/SIOfiles.zip +0 -0
  165. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/ThisProject/SrExample_AF.txt +0 -0
  166. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/ThisProject/SrExample_orient.txt +0 -0
  167. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/ThisProject/SrExample_thellier.txt +0 -0
  168. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/ThisProject/SrExample_thermal.txt +0 -0
  169. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/Pmag_GUI/zmab0083201tmp03.txt +0 -0
  170. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/.ipynb_checkpoints/Editing-checkpoint.ipynb +0 -0
  171. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/.ipynb_checkpoints/U1456A-checkpoint.ipynb +0 -0
  172. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/.ipynb_checkpoints/discretes-checkpoint.ipynb +0 -0
  173. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/Core_depthplot.py +0 -0
  174. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/JR6_data/UTESTA.jr6 +0 -0
  175. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/JR6_data/UTESTA_fixed.jr6 +0 -0
  176. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/KLY4S_data/UTESTA.kly4s +0 -0
  177. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/SRM_data/srmdiscrete-XXX-UTEST-A.csv +0 -0
  178. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/SRM_data/srmsection-XXX-UTEST-A.csv +0 -0
  179. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/CoreSummary_XXX_UTESTA.csv +0 -0
  180. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/UTESTA.kly4s.magic +0 -0
  181. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/UTESTA_er_specimens.txt +0 -0
  182. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/UTESTA_fixed.jr6.magic +0 -0
  183. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/UTESTA_rmag_anisotropy.txt +0 -0
  184. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/er_samples.txt +0 -0
  185. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/er_sites.txt +0 -0
  186. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/er_specimens.txt +0 -0
  187. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/magic_measurements.txt +0 -0
  188. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/pmag_specimens.txt +0 -0
  189. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/rmag_anisotropy.txt +0 -0
  190. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/samples-XXX-UTEST-A_er_samples.txt +0 -0
  191. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/srmdiscrete-XXX-UTEST-A.csv.magic +0 -0
  192. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/srmsection-XXX-UTEST-A.csv.magic +0 -0
  193. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/srmsection-XXX-UTEST-A_er_samples.txt +0 -0
  194. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/srmsection-XXX-UTEST-A_er_sites.txt +0 -0
  195. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC/srmsection-XXX-UTEST-A_er_specimens.txt +0 -0
  196. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC3/CoreSummary_XXX_UTESTA.csv +0 -0
  197. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC3/measurements.txt +0 -0
  198. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC3/samples.txt +0 -0
  199. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC3/sites.txt +0 -0
  200. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/UTESTA_MagIC3/specimens.txt +0 -0
  201. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/UTESTA/samples-XXX-UTEST-A.csv +0 -0
  202. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/aarm_measurements.txt +0 -0
  203. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/arm_magic_example.dat +0 -0
  204. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/locations.txt +0 -0
  205. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/samples.txt +0 -0
  206. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/sites.txt +0 -0
  207. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aarm_magic/specimens.txt +0 -0
  208. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/angle/angle.dat +0 -0
  209. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/angle/tmp.out +0 -0
  210. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/ages.txt +0 -0
  211. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/er_ages.txt +0 -0
  212. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/er_locations.txt +0 -0
  213. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/er_samples.txt +0 -0
  214. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/er_sites.txt +0 -0
  215. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/er_specimens.txt +0 -0
  216. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/magic_contribution_12152.txt +0 -0
  217. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/magic_measurements.txt +0 -0
  218. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/magic_methods.txt +0 -0
  219. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/measurements.txt +0 -0
  220. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/pmag_specimens.txt +0 -0
  221. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/rmag_anisotropy.txt +0 -0
  222. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/samples.txt +0 -0
  223. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/sites.txt +0 -0
  224. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/ani_depthplot/specimens.txt +0 -0
  225. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aniso_magic/dike_anisotropy.txt +0 -0
  226. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aniso_magic/dike_specimens.txt +0 -0
  227. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aniso_magic/sed_anisotropy.txt +0 -0
  228. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/aniso_magic/sed_specimens.txt +0 -0
  229. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/apwp/apwp_example.dat +0 -0
  230. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/atrm_magic_example.dat +0 -0
  231. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/atrm_measurements.txt +0 -0
  232. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/atrm_measurements3.txt +0 -0
  233. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/atrm_results.txt +0 -0
  234. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/measurements.txt +0 -0
  235. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/atrm_magic/orig_specimens.txt +0 -0
  236. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/azdip_magic/azdip_magic_example.dat +0 -0
  237. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/b_vdm/b_vdm_example.dat +0 -0
  238. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/basemap_magic/basemap_example.txt +0 -0
  239. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/biplot_magic_example.dat +0 -0
  240. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/contribution.txt +0 -0
  241. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/locations.txt +0 -0
  242. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/measurements.txt +0 -0
  243. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/samples.txt +0 -0
  244. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/sites.txt +0 -0
  245. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/biplot_magic/specimens.txt +0 -0
  246. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/bootams/bootams_example.dat +0 -0
  247. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/cart_dir/cart_dir_example.dat +0 -0
  248. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/chi_magic_example.dat +0 -0
  249. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/chi_magic_example.txt +0 -0
  250. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/contribution.txt +0 -0
  251. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/locations.txt +0 -0
  252. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/measurements.txt +0 -0
  253. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/samples.txt +0 -0
  254. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/sites.txt +0 -0
  255. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/chi_magic/specimens.txt +0 -0
  256. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/combine_magic/af_measurements.txt +0 -0
  257. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/combine_magic/measurements.txt +0 -0
  258. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/combine_magic/ns_a.mag +0 -0
  259. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/combine_magic/ns_t.mag +0 -0
  260. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/combine_magic/therm_measurements.txt +0 -0
  261. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/common_mean/common_mean_ex_file1.dat +0 -0
  262. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/common_mean/common_mean_ex_file2.dat +0 -0
  263. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_asc_magic/README +0 -0
  264. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_asc_magic/_2g_asc/DR3B.asc +0 -0
  265. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_asc_magic/_2g_asc/OK3_15af.asc +0 -0
  266. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_asc_magic/_2g_asc/README +0 -0
  267. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/165A.dat +0 -0
  268. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/165B.dat +0 -0
  269. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/165C.dat +0 -0
  270. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/60A.dat +0 -0
  271. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/60B.dat +0 -0
  272. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/60C.dat +0 -0
  273. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/70A.dat +0 -0
  274. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/70C.dat +0 -0
  275. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/KodamaFiles/70D.dat +0 -0
  276. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1ab.dat +0 -0
  277. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1bb.dat +0 -0
  278. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1c.dat +0 -0
  279. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1db.dat +0 -0
  280. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1e.dat +0 -0
  281. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1f.dat +0 -0
  282. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1ga.dat +0 -0
  283. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1ha.dat +0 -0
  284. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1ib.dat +0 -0
  285. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1jb.dat +0 -0
  286. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1kb.dat +0 -0
  287. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1la.dat +0 -0
  288. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton1ma.dat +0 -0
  289. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29ab.dat +0 -0
  290. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29bb.dat +0 -0
  291. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29cb.dat +0 -0
  292. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29da.dat +0 -0
  293. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29db.dat +0 -0
  294. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29e.dat +0 -0
  295. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29eb.dat +0 -0
  296. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29f.dat +0 -0
  297. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29ga.dat +0 -0
  298. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29gc.dat +0 -0
  299. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29h.dat +0 -0
  300. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29ib.dat +0 -0
  301. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton29j.dat +0 -0
  302. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2a.dat +0 -0
  303. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2b.dat +0 -0
  304. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2c.dat +0 -0
  305. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2d.dat +0 -0
  306. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2e.dat +0 -0
  307. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2f.dat +0 -0
  308. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2g.dat +0 -0
  309. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2h.dat +0 -0
  310. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton2i.dat +0 -0
  311. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3aa.dat +0 -0
  312. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3ba.dat +0 -0
  313. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3ca.dat +0 -0
  314. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3da.dat +0 -0
  315. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3ea.dat +0 -0
  316. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3fb.dat +0 -0
  317. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3ga.dat +0 -0
  318. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton3ha.dat +0 -0
  319. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4ab.dat +0 -0
  320. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4bb.dat +0 -0
  321. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4c.dat +0 -0
  322. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4d.dat +0 -0
  323. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4eb.dat +0 -0
  324. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4fb.dat +0 -0
  325. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4gb.dat +0 -0
  326. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4ha.dat +0 -0
  327. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/MolinaFiles/ton4ia.dat +0 -0
  328. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/README +0 -0
  329. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/MN1.CSV +0 -0
  330. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/MN_chr_dir.xls +0 -0
  331. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn001-1a.dat +0 -0
  332. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn004-2b.dat +0 -0
  333. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn008-2b.dat +0 -0
  334. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn010-1a.dat +0 -0
  335. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn014-1b.dat +0 -0
  336. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn017-1b.dat +0 -0
  337. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn022-1b.dat +0 -0
  338. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn026-1b.dat +0 -0
  339. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn031-1a.dat +0 -0
  340. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn033-1b.dat +0 -0
  341. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn034-2a.dat +0 -0
  342. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn038-1b.dat +0 -0
  343. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn041-1a.dat +0 -0
  344. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn042-1b.dat +0 -0
  345. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn046-1a.dat +0 -0
  346. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn049-2a.dat +0 -0
  347. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn056-2a.dat +0 -0
  348. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn061-1a.dat +0 -0
  349. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn065-1b.dat +0 -0
  350. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn067-1a.dat +0 -0
  351. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn071-1a.dat +0 -0
  352. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn075-1b.dat +0 -0
  353. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn078-1a.dat +0 -0
  354. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn081-1b.dat +0 -0
  355. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn084-1b.dat +0 -0
  356. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn087-2a.dat +0 -0
  357. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn091-1a.dat +0 -0
  358. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn093-1b.dat +0 -0
  359. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn096-1b.dat +0 -0
  360. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn1.saf +0 -0
  361. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn1.txt +0 -0
  362. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn100-1a.dat +0 -0
  363. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn103-1b.dat +0 -0
  364. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn105-1a.dat +0 -0
  365. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn106-1a.dat +0 -0
  366. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn107-1b.dat +0 -0
  367. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn109-2a.dat +0 -0
  368. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/2g_bin_magic/mn1/mn110-1b.dat +0 -0
  369. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01a-1.agm +0 -0
  370. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01a-1.irm +0 -0
  371. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01a-2.agm +0 -0
  372. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01a-2.irm +0 -0
  373. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01b-1.agm +0 -0
  374. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01b-1.irm +0 -0
  375. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01c-1.agm +0 -0
  376. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01c-1.irm +0 -0
  377. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01d-1.agm +0 -0
  378. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01d-1.irm +0 -0
  379. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01e-1.agm +0 -0
  380. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01e-1.irm +0 -0
  381. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01f-1.agm +0 -0
  382. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01f-1.irm +0 -0
  383. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01f-2.agm +0 -0
  384. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS01f-2.irm +0 -0
  385. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02a-1.agm +0 -0
  386. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02a-1.irm +0 -0
  387. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02a-2.agm +0 -0
  388. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02a-3.irm +0 -0
  389. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02b-1.agm +0 -0
  390. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02b-1.irm +0 -0
  391. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02b-2.agm +0 -0
  392. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02b-2.irm +0 -0
  393. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_directory/IS02c-1.agm +0 -0
  394. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_magic_example.agm +0 -0
  395. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/agm_magic/agm_magic_example.irm +0 -0
  396. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/15HHA1-2A +0 -0
  397. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/15JC4-1A +0 -0
  398. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/96MT.05.01 +0 -0
  399. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/96MT.05.01.txt +0 -0
  400. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/BC0-3A +0 -0
  401. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/BC0-3A.txt +0 -0
  402. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/bgc_magic/CA14-TA02.05'a +0 -0
  403. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source.html +0 -0
  404. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source_files/PaleoMag.gif +0 -0
  405. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source_files/PaleoMag_002.gif +0 -0
  406. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source_files/a-95.gif +0 -0
  407. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source_files/kappa.gif +0 -0
  408. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/Craig_Jones_webpage_of_PMag_file_formats_CIT_file_format_source_files/phi.gif +0 -0
  409. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B.LSQ +0 -0
  410. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B.sam +0 -0
  411. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B71 +0 -0
  412. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B72 +0 -0
  413. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B73 +0 -0
  414. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B74 +0 -0
  415. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B75 +0 -0
  416. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B76 +0 -0
  417. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B77 +0 -0
  418. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B78 +0 -0
  419. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/MIT/7325B/7325B79 +0 -0
  420. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-.sam +0 -0
  421. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-1a +0 -0
  422. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-2a +0 -0
  423. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-3a +0 -0
  424. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-4a +0 -0
  425. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-5a +0 -0
  426. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-6a +0 -0
  427. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-7a +0 -0
  428. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-8a +0 -0
  429. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/PI47-9a +0 -0
  430. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/locations.txt +0 -0
  431. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/measurements.txt +0 -0
  432. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/samples.txt +0 -0
  433. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/sites.txt +0 -0
  434. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/PI47/specimens.txt +0 -0
  435. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/README +0 -0
  436. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9001-1 +0 -0
  437. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9001-1.rmg +0 -0
  438. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9002-1 +0 -0
  439. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9002-1.rmg +0 -0
  440. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9003-1 +0 -0
  441. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9003-1.rmg +0 -0
  442. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9004-1 +0 -0
  443. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9004-1.rmg +0 -0
  444. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9005-1 +0 -0
  445. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9005-1.rmg +0 -0
  446. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9006-1 +0 -0
  447. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9006-1.rmg +0 -0
  448. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9007-1 +0 -0
  449. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9007-1.rmg +0 -0
  450. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9008-1 +0 -0
  451. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9008-1.rmg +0 -0
  452. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9009-1 +0 -0
  453. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/BL9009-1.rmg +0 -0
  454. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/bl9-1.sam +0 -0
  455. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/bl9001.dir +0 -0
  456. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/USGS/bl9-1/command +0 -0
  457. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/cit_magic/sample_formats.pdf +0 -0
  458. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/fla_magic/README +0 -0
  459. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/fla_magic/mejia04.pdf +0 -0
  460. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/fla_magic/pa_thermal.fla +0 -0
  461. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/fla_magic/pt_af.fla +0 -0
  462. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/generic_magic/generic_magic_example.txt +0 -0
  463. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/huji_magic/Massada_AF_HUJI_new_format.txt +0 -0
  464. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/huji_magic/Massada_AF_all_old_format.txt +0 -0
  465. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/huji_magic/README +0 -0
  466. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/huji_magic/magdelkrum.txt +0 -0
  467. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/huji_magic/magdelkrum_datafile.txt +0 -0
  468. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_jr6_magic/er_samples.txt +0 -0
  469. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_jr6_magic/test.jr6 +0 -0
  470. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/GCR_U1359_B_coresummary.csv +0 -0
  471. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/IODP_Janus_312_U1256.csv +0 -0
  472. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/IODP_LIMS_SRMdiscrete_344_1414A.csv +0 -0
  473. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/IODP_LIMS_SRMsection_344_1414A.csv +0 -0
  474. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/SRM_318_U1359_B_A.csv +0 -0
  475. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/iodp_srm_magic/samples_318_U1359_B.csv +0 -0
  476. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AF.jr6 +0 -0
  477. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AF.txt +0 -0
  478. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AF_samples.txt +0 -0
  479. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AF_sites.txt +0 -0
  480. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AF_specimens.txt +0 -0
  481. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AP12.jr6 +0 -0
  482. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AP12.tmp +0 -0
  483. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/AP12.txt +0 -0
  484. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/README +0 -0
  485. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML01.JR6 +0 -0
  486. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML02.JR6 +0 -0
  487. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML03.JR6 +0 -0
  488. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML04.JR6 +0 -0
  489. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML05.JR6 +0 -0
  490. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML06.JR6 +0 -0
  491. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/SML07.JR6 +0 -0
  492. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/TRM.jr6 +0 -0
  493. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/TRM.txt +0 -0
  494. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/TRM_samples.txt +0 -0
  495. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/TRM_sites.txt +0 -0
  496. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/TRM_specimens.txt +0 -0
  497. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/locations.txt +0 -0
  498. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/measurements.txt +0 -0
  499. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/samples.txt +0 -0
  500. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/sites.txt +0 -0
  501. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/jr6_magic/specimens.txt +0 -0
  502. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/k15_magic/k15_example.dat +0 -0
  503. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/kly4s_magic/KLY4S_magic_example.dat +0 -0
  504. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/ldeo_magic/ldeo_magic_example.dat +0 -0
  505. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/CHEV.livdb +0 -0
  506. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/CHEV.livdb_different_delimiters +0 -0
  507. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/measurements.txt +0 -0
  508. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/samples.txt +0 -0
  509. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/sites.txt +0 -0
  510. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_C+/specimens.txt +0 -0
  511. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/NVPA.livdb +0 -0
  512. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/NVPA.livdb_fifferent_delimiter +0 -0
  513. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/measurements.txt +0 -0
  514. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/samples.txt +0 -0
  515. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/sites.txt +0 -0
  516. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_IZZI+andC++/specimens.txt +0 -0
  517. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/016-01.livdb_old_delimiters +0 -0
  518. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/017-03.livdb_old_delimiters +0 -0
  519. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/16-1.livdb +0 -0
  520. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/measurements.txt +0 -0
  521. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/samples.txt +0 -0
  522. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/sites.txt +0 -0
  523. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_OT+/specimens.txt +0 -0
  524. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_P/measurements.txt +0 -0
  525. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_P/perp.csv +0 -0
  526. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_P/samples.txt +0 -0
  527. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_P/sites.txt +0 -0
  528. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/MW_P/specimens.txt +0 -0
  529. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/TH_IZZI+/ATPI_Thellier.livdb +0 -0
  530. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/TH_IZZI+/measurements.txt +0 -0
  531. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/TH_IZZI+/samples.txt +0 -0
  532. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/TH_IZZI+/sites.txt +0 -0
  533. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/livdb_magic/TH_IZZI+/specimens.txt +0 -0
  534. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/mini_magic/Peru_rev1.txt +0 -0
  535. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/mini_magic/Peru_rev1_description.rtf +0 -0
  536. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/mst_magic/curie_example.dat +0 -0
  537. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/IPGP/0110C.PMD +0 -0
  538. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/IPGP/0210C.pmd +0 -0
  539. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/README +0 -0
  540. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0101a.pmd +0 -0
  541. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0102a.pmd +0 -0
  542. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0103a.pmd +0 -0
  543. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0104a.pmd +0 -0
  544. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0105a.pmd +0 -0
  545. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0106a.pmd +0 -0
  546. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0107a.pmd +0 -0
  547. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0108a.pmd +0 -0
  548. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0201a.pmd +0 -0
  549. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0202a.pmd +0 -0
  550. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0203a.pmd +0 -0
  551. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0204a.pmd +0 -0
  552. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0205a.pmd +0 -0
  553. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0206a.pmd +0 -0
  554. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0207a.pmd +0 -0
  555. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/PMD/ss0208c.pmd +0 -0
  556. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/pmd_magic/UCSC/ssDirAll.pmm +0 -0
  557. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/s_magic/s_magic_example.dat +0 -0
  558. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/SantaRosa2006.scz +0 -0
  559. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy01.pmm +0 -0
  560. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy02.pmm +0 -0
  561. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy03.pmm +0 -0
  562. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy04.pmm +0 -0
  563. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy05.pmm +0 -0
  564. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy06.pmm +0 -0
  565. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy07.pmm +0 -0
  566. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy08.pmm +0 -0
  567. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy09.pmm +0 -0
  568. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy10.pmm +0 -0
  569. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy11.pmm +0 -0
  570. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy12.pmm +0 -0
  571. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy13.pmm +0 -0
  572. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy13A.pmm +0 -0
  573. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy13B.pmm +0 -0
  574. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy14.pmm +0 -0
  575. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/cy15.pmm +0 -0
  576. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/scz_magic/CanyonCreek/santaRosa.pmm +0 -0
  577. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/locations.txt +0 -0
  578. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/samples.txt +0 -0
  579. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/sio_af_example.dat +0 -0
  580. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/sio_thermal_example.dat +0 -0
  581. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/sites.txt +0 -0
  582. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sio_magic/specimens.txt +0 -0
  583. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sufar_asc_magic/measurements.txt +0 -0
  584. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sufar_asc_magic/samples.txt +0 -0
  585. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sufar_asc_magic/sites.txt +0 -0
  586. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sufar_asc_magic/specimens.txt +0 -0
  587. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/sufar_asc_magic/sufar4-asc_magic_example.txt +0 -0
  588. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/tdt_magic/Krasa_MGH1.tdt +0 -0
  589. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/tdt_magic/Krasa_MGH1_noAC.tdt +0 -0
  590. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/Utrecht_Example.af +0 -0
  591. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/locations.txt +0 -0
  592. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/measurements.txt +0 -0
  593. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/samples.txt +0 -0
  594. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/sites.txt +0 -0
  595. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_2_magic/utrecht_magic/specimens.txt +0 -0
  596. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_ages/magic_downloaded_rows.txt +0 -0
  597. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_samples/Iceland_orient.txt_Northern_Iceland.txt +0 -0
  598. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_samples/README +0 -0
  599. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_samples/convert_samples_example.dat +0 -0
  600. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/convert_samples/orient_Northern_Iceland.txt +0 -0
  601. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/Z35.sam.magic +0 -0
  602. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/Z35_er_samples.txt +0 -0
  603. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/Z35_er_sites.txt +0 -0
  604. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/Z35_er_specimens.txt +0 -0
  605. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/copy_er_ages.txt +0 -0
  606. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/er_ages.txt +0 -0
  607. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/er_locations.txt +0 -0
  608. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/er_samples.txt +0 -0
  609. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/er_sites.txt +0 -0
  610. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/er_specimens.txt +0 -0
  611. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/magic_measurements.txt +0 -0
  612. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/pmag_samples.txt +0 -0
  613. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/pmag_sites.txt +0 -0
  614. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/pmag_specimens.txt +0 -0
  615. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/copy_ErMagicBuilder/weird_er_ages.txt +0 -0
  616. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/ages.txt +0 -0
  617. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/core_depthplot_fixed.txt +0 -0
  618. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_ages.txt +0 -0
  619. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_citations.txt +0 -0
  620. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_locations.txt +0 -0
  621. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_samples.txt +0 -0
  622. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_sites.txt +0 -0
  623. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/er_specimens.txt +0 -0
  624. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/locations.txt +0 -0
  625. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/magic_measurements.txt +0 -0
  626. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/measurements.txt +0 -0
  627. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/pmag_results.txt +0 -0
  628. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/pmag_specimens.txt +0 -0
  629. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/samples.txt +0 -0
  630. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/sites.txt +0 -0
  631. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/core_depthplot/specimens.txt +0 -0
  632. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/curie/curie_example.dat +0 -0
  633. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dayplot_magic/dayplot_magic_example.dat +0 -0
  634. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dayplot_magic/specimens.txt +0 -0
  635. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_eq/di_eq_example.dat +0 -0
  636. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_eq/tmp +0 -0
  637. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_eq/tmp1 +0 -0
  638. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_geo/di_geo.out +0 -0
  639. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_geo/di_geo_example.dat +0 -0
  640. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_rot/di_rot.out +0 -0
  641. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_rot/di_rot_example.txt +0 -0
  642. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_rot/fishrot.out +0 -0
  643. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_tilt/di_tilt.out +0 -0
  644. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_tilt/di_tilt_example.dat +0 -0
  645. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/di_vgp/di_vgp_example.dat +0 -0
  646. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dipole_pinc/dipole_pinc_example.dat +0 -0
  647. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dipole_plat/dipole_plat_example.dat +0 -0
  648. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dir_cart/dir_cart_example.dat +0 -0
  649. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/contribution.txt +0 -0
  650. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/dmag_magic_example.dat +0 -0
  651. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/locations.txt +0 -0
  652. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/magic_contribution_16338.txt +0 -0
  653. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/measurements.txt +0 -0
  654. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/samples.txt +0 -0
  655. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/sites.txt +0 -0
  656. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/dmag_magic/specimens.txt +0 -0
  657. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eigs_s/eigs_s_example.dat +0 -0
  658. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eq_di/eq_di_example.dat +0 -0
  659. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eq_di/tmp +0 -0
  660. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea/fishrot.out +0 -0
  661. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_ell/eqarea_ell_example.txt +0 -0
  662. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_ell/tk03.out +0 -0
  663. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/measurements.txt +0 -0
  664. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/pmag_results.txt +0 -0
  665. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/samples.txt +0 -0
  666. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/site_results.txt +0 -0
  667. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/sites.txt +0 -0
  668. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/eqarea_magic/specimens.txt +0 -0
  669. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/etopo20/etopo20data.gz +0 -0
  670. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/etopo20/etopo20lats.gz +0 -0
  671. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/etopo20/etopo20lons.gz +0 -0
  672. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/find_EI/find_EI_example.dat +0 -0
  673. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/find_EI/tmp +0 -0
  674. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/fishqq/fishqq_example.txt +0 -0
  675. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/fishrot/fishrot.out +0 -0
  676. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest/foldtest_example.dat +0 -0
  677. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/er_citations.txt +0 -0
  678. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/er_locations.txt +0 -0
  679. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/er_sites.txt +0 -0
  680. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/magic_contribution_11087.txt +0 -0
  681. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/magic_methods.txt +0 -0
  682. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/pmag_results.txt +0 -0
  683. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/pmag_sites.txt +0 -0
  684. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/foldtest_magic/sites.txt +0 -0
  685. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/forc_diagram/.ipynb_checkpoints/forc_diagram-checkpoint.ipynb +0 -0
  686. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/forc_diagram/conventional_example.forc +0 -0
  687. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/forc_diagram/irforc_exmaple.irforc +0 -0
  688. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/gaussian/gauss.out +0 -0
  689. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/ATRM/README +0 -0
  690. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/ATRM/generic_ATRM.txt +0 -0
  691. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/ATRM/generic_ATRM.txt.magic +0 -0
  692. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/CR/README +0 -0
  693. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/CR/generic_CR.magic +0 -0
  694. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/CR/generic_CR.txt +0 -0
  695. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/Demag/README.txt +0 -0
  696. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/Demag/generic_demag.txt +0 -0
  697. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/PI/README +0 -0
  698. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/generic_magic/PI/generic_izzi.txt +0 -0
  699. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/geomagia/geomagia_sel.txt +0 -0
  700. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/gobing/gobing_example.txt +0 -0
  701. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/gofish/fishrot.out +0 -0
  702. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/gokent/gokent_example.txt +0 -0
  703. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/gokent/tk03.out +0 -0
  704. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/goprinc/goprinc_example.txt +0 -0
  705. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/goprinc/tk03.out +0 -0
  706. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/grab_magic_key/lats +0 -0
  707. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/hysteresis_magic/hysteresis_magic_example.dat +0 -0
  708. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/hysteresis_magic/measurements.txt +0 -0
  709. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/igrf/igrf.out +0 -0
  710. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/igrf/igrf_example.dat +0 -0
  711. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/incfish/incfish_example_di.dat +0 -0
  712. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/incfish/incfish_example_inc.dat +0 -0
  713. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/.ipynb_checkpoints/PmagPy_iodp_HOLE_template-checkpoint.ipynb +0 -0
  714. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/.ipynb_checkpoints/U999A-checkpoint.ipynb +0 -0
  715. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/Figures/U999A_1.pdf +0 -0
  716. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/Figures/U999A_anisotropy_xmastree.pdf +0 -0
  717. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/ProcessingPmagData.docx +0 -0
  718. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/Core Summary_18_5_2019.csv +0 -0
  719. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/JR6_data/spinner_17_5_2019.csv +0 -0
  720. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/KLY4S_data/ex-kappa_17_5_2019.csv +0 -0
  721. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/SRM_archive_data/srmsection_17_5_2019.csv +0 -0
  722. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/SRM_discrete_data/srmdiscrete_17_5_2019.csv +0 -0
  723. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/Section Summary_17_5_2019.csv +0 -0
  724. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U1999A_xray_disturbance.xlsx +0 -0
  725. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/Core Summary_17_5_2019.csv +0 -0
  726. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/dscr_measurements.txt +0 -0
  727. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/jr6_measurements.txt +0 -0
  728. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/kly4s_measurements.txt +0 -0
  729. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/kly4s_specimens.txt +0 -0
  730. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/lims_samples.txt +0 -0
  731. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/lims_sites.txt +0 -0
  732. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/lims_specimens.txt +0 -0
  733. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/locations.txt +0 -0
  734. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/samples.txt +0 -0
  735. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/sites.txt +0 -0
  736. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/specimens.txt +0 -0
  737. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/srm_arch_measurements.txt +0 -0
  738. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/srm_arch_samples.txt +0 -0
  739. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/srm_arch_sites.txt +0 -0
  740. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/srm_arch_specimens.txt +0 -0
  741. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_MagIC/srm_dscr_measurements.txt +0 -0
  742. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/U999A_disturbances.xlsx +0 -0
  743. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A/samples_17_5_2019.csv +0 -0
  744. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/iodp_magic/U999A.ipynb +0 -0
  745. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/irm_unmix/irm_unmix_example.dat +0 -0
  746. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/irm_unmix/irm_unmix_example_fit.csv +0 -0
  747. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/irmaq_magic/U1359A_IRM_coil2.txt +0 -0
  748. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/irmaq_magic/U1359A_IRM_coil3.txt +0 -0
  749. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/irmaq_magic/measurements.txt +0 -0
  750. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/k15_magic/k15_example.dat +0 -0
  751. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/k15_s/k15_example.dat +0 -0
  752. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/kly4s_magic/KLY4S_magic_example.dat +0 -0
  753. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/ages.txt +0 -0
  754. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/criteria.txt +0 -0
  755. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/locations.txt +0 -0
  756. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/measurements.txt +0 -0
  757. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/samples.txt +0 -0
  758. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/sites.txt +0 -0
  759. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/specimens.txt +0 -0
  760. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lnp_magic/zmab0001193tmp02.txt +0 -0
  761. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lowrie/lowrie_example.dat +0 -0
  762. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lowrie/lowrie_magic_example.dat +0 -0
  763. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lowrie_magic/lowrie_example.dat +0 -0
  764. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lowrie_magic/lowrie_magic_example.dat +0 -0
  765. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/lowrie_magic/measurements.txt +0 -0
  766. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_AF.txt.magic +0 -0
  767. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_AF_er_samples.txt +0 -0
  768. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_thellier.txt.magic +0 -0
  769. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_thellier_er_samples.txt +0 -0
  770. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_thermal.txt.magic +0 -0
  771. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/SrExample_thermal_er_samples.txt +0 -0
  772. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/er_samples.txt +0 -0
  773. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/magic_measurements.txt +0 -0
  774. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/measurements.txt +0 -0
  775. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/samples.txt +0 -0
  776. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_gui/3_0/specimens.txt +0 -0
  777. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_select/AF_BFL_specimens.txt +0 -0
  778. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_select/AF_specimens.txt +0 -0
  779. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_select/pmag_specimens.txt +0 -0
  780. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/magic_select/specimens.txt +0 -0
  781. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/measurements_normalize/irm_measurements.txt +0 -0
  782. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/measurements_normalize/specimens_weight.txt +0 -0
  783. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/misc_files/er_specimens.txt +0 -0
  784. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/misc_files/pmag_specimens.txt +0 -0
  785. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_ages.txt +0 -0
  786. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_citations.txt +0 -0
  787. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_locations.txt +0 -0
  788. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_samples.txt +0 -0
  789. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_sites.txt +0 -0
  790. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/er_specimens.txt +0 -0
  791. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/magic_measurements.txt +0 -0
  792. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/magic_methods.txt +0 -0
  793. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/pmag_criteria.txt +0 -0
  794. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/pmag_results.txt +0 -0
  795. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/pmag_samples.txt +0 -0
  796. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/pmag_sites.txt +0 -0
  797. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/pmag_specimens.txt +0 -0
  798. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/specimens.txt +0 -0
  799. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/mk_redo/zmab0083201tmp03.txt +0 -0
  800. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Importing and using the 3.0 data model.ipynb +0 -0
  801. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Intro to MagIC Contributions.ipynb +0 -0
  802. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Intro to MagicDataFrames.ipynb +0 -0
  803. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Py2toPy3.ipynb +0 -0
  804. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Uploading contributions (with validations).ipynb +0 -0
  805. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/Validate Quoted Strings.ipynb +0 -0
  806. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/data_model_conversion.ipynb +0 -0
  807. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/notebooks/thellier_gui3_0_tester.ipynb +0 -0
  808. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/nrm_specimens_magic/magic_contribution_15143.txt +0 -0
  809. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/nrm_specimens_magic/nrm_specimens.txt +0 -0
  810. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/orientation_magic/orient_example.txt +0 -0
  811. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/parse_measurements/magic_measurements.txt +0 -0
  812. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pca/pca_example.txt +0 -0
  813. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pca/zeq_example.dat +0 -0
  814. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plotXY/plotXY.png +0 -0
  815. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plotXY/plotXY.svg +0 -0
  816. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plotXY/plotxy_example.txt +0 -0
  817. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plotXY/tmp +0 -0
  818. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plot_cdf/gaussian.out +0 -0
  819. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plot_map_pts/Map_PTS.png +0 -0
  820. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plot_map_pts/uniform.out +0 -0
  821. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/plotdi_a/plotdi_a_example.dat +0 -0
  822. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/Directions.tex +0 -0
  823. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/Directions.txt +0 -0
  824. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/Intensities.tex +0 -0
  825. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/Intensities.txt +0 -0
  826. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/SiteNfo.tex +0 -0
  827. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/SiteNfo.txt +0 -0
  828. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/pmag_results.txt +0 -0
  829. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pmag_results_extract/pmag_specimens.txt +0 -0
  830. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/polemap_magic/locations.txt +0 -0
  831. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/Map_PTS.pdf +0 -0
  832. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/lon_lat +0 -0
  833. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/nam_180-200.txt +0 -0
  834. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/nam_panA.frp +0 -0
  835. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/panA.out +0 -0
  836. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/pt_rot.input +0 -0
  837. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/pt_rot.out +0 -0
  838. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/pt_rot_example.dat +0 -0
  839. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/pt_rot/pt_rot_panA.out +0 -0
  840. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/qqplot/gauss.out +0 -0
  841. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/quick_hyst/hysteresis_magic_example3.dat +0 -0
  842. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/quick_hyst2/hysteresis_magic_example.dat +0 -0
  843. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/remanence_anisotropy_magic/README +0 -0
  844. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/revtest/revtest_example.txt +0 -0
  845. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/revtest_magic/criteria.txt +0 -0
  846. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/revtest_magic/revtest_magic_example.txt +0 -0
  847. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/revtest_magic/sites.txt +0 -0
  848. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_eigs/s_eigs_example.dat +0 -0
  849. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_geo/s_geo_example.dat +0 -0
  850. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_hext/s_geo_example.dat +0 -0
  851. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_magic/s_magic_example.dat +0 -0
  852. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_magic/specimens.txt +0 -0
  853. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/s_tilt/s_tilt_example.dat +0 -0
  854. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/scalc/scalc_example.txt +0 -0
  855. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/scalc_magic/pmag_results.txt +0 -0
  856. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/scalc_magic/sites.txt +0 -0
  857. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/scalc_magic/vgp_lat +0 -0
  858. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/site_edit_magic/thellier_redo +0 -0
  859. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/site_edit_magic/zeq_redo +0 -0
  860. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/site_edit_magic/zmab0083201tmp03.txt +0 -0
  861. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/squish/squish_example.dat +0 -0
  862. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/stats/gaussian.out +0 -0
  863. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/strip_magic/pmag_results.txt +0 -0
  864. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/strip_magic/sites.txt +0 -0
  865. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/strip_magic/sites_with_vgps.txt +0 -0
  866. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/sundec/sundec_example.dat +0 -0
  867. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/__init__.py +0 -0
  868. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/empty_dir/blank.txt +0 -0
  869. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/er_ages.txt +0 -0
  870. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/er_locations.txt +0 -0
  871. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/er_samples.txt +0 -0
  872. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/er_sites.txt +0 -0
  873. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/er_specimens.txt +0 -0
  874. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/location_09.Oct.2015.txt +0 -0
  875. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/location_14.Oct.2015.txt +0 -0
  876. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/location_16.Aug.2015.txt +0 -0
  877. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/location_16.Aug.2015_1.txt +0 -0
  878. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/methods/pmag_specimens.txt +0 -0
  879. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/__init__.py +0 -0
  880. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_ages.txt +0 -0
  881. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_locations.txt +0 -0
  882. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_samples.txt +0 -0
  883. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_samples_orient.txt +0 -0
  884. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_sites.txt +0 -0
  885. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_sites_orient.txt +0 -0
  886. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/er_specimens.txt +0 -0
  887. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/magic_measurements.txt +0 -0
  888. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_GUI.log +0 -0
  889. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter.log +0 -0
  890. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter_STDEV-OPT_redo +0 -0
  891. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter_STDEV-OPT_samples.txt +0 -0
  892. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter_STDEV-OPT_specimens.txt +0 -0
  893. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter_all.txt +0 -0
  894. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project/thellier_interpreter/thellier_interpreter_specimens_bounds.txt +0 -0
  895. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/__init__.py +0 -0
  896. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_ages.txt +0 -0
  897. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_locations.txt +0 -0
  898. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_samples.txt +0 -0
  899. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_samples_orient.txt +0 -0
  900. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_sites.txt +0 -0
  901. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_sites_orient.txt +0 -0
  902. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/er_specimens.txt +0 -0
  903. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/magic_measurements.txt +0 -0
  904. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/my_project_with_errors/something.py +0 -0
  905. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/odp_magic/odp_magic_er_samples.txt +0 -0
  906. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/Jack-Hills_19.Apr.2020_4.txt +0 -0
  907. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/Jack-Hills_19.Apr.2020_5.txt +0 -0
  908. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/er_locations.txt +0 -0
  909. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/er_sites.txt +0 -0
  910. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/location1_30.Dec.2015.txt +0 -0
  911. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/testing/validation/location1_30.Dec.2015_1.txt +0 -0
  912. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Megiddo_unpublished_example/er_ages.txt +0 -0
  913. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Megiddo_unpublished_example/er_locations.txt +0 -0
  914. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/SU1_example/er_ages.txt +0 -0
  915. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/SU1_example/er_locations.txt +0 -0
  916. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/SU1_example/optimizer_test_groups.txt +0 -0
  917. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/er_ages.txt +0 -0
  918. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/er_citations.txt +0 -0
  919. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/er_expeditions.txt +0 -0
  920. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/er_locations.txt +0 -0
  921. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/er_test_groups.txt +0 -0
  922. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/magic_methods.txt +0 -0
  923. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/pmag_results.txt +0 -0
  924. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/pmag_samples.txt +0 -0
  925. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/pmag_sites.txt +0 -0
  926. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/pmag_specimens.txt +0 -0
  927. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_interpreter/thellier_interpreter_STDEV-OPT_redo +0 -0
  928. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_interpreter/thellier_interpreter_STDEV-OPT_samples.txt +0 -0
  929. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_interpreter/thellier_interpreter_STDEV-OPT_specimens.txt +0 -0
  930. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_interpreter/thellier_interpreter_all.txt +0 -0
  931. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_interpreter/thellier_interpreter_specimens_bounds.txt +0 -0
  932. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_redo +0 -0
  933. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/thellier_specimens.txt +0 -0
  934. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/Tauxe_2006_example/zmab0094380tmp01.txt +0 -0
  935. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_GUI/thellier_GUI_full_manual_1_0.pdf +0 -0
  936. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_magic/measurements.txt +0 -0
  937. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/thellier_magic/zmab0100159tmp01.txt +0 -0
  938. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/tk03/tk03.out +0 -0
  939. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/tsunakawa_shaw/raw_data/mc120c-SA4.d +0 -0
  940. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/uniform/uniform.out +0 -0
  941. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/unsquish/unsquish_example.dat +0 -0
  942. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/er_ages.txt +0 -0
  943. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/er_citations.txt +0 -0
  944. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/er_locations.txt +0 -0
  945. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/magic_methods.txt +0 -0
  946. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/pmag_results.txt +0 -0
  947. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/pmag_samples.txt +0 -0
  948. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/pmag_sites.txt +0 -0
  949. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/pmag_specimens.txt +0 -0
  950. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/thellier_specimens.txt +0 -0
  951. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/upload.txt +0 -0
  952. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/upload_dos.txt +0 -0
  953. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/upload_magic/zeq_specimens.txt +0 -0
  954. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/vdm_b/vdm_b_example.dat +0 -0
  955. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/vector_mean/vector_mean_example.dat +0 -0
  956. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/vgp_di/vgp_di_example.dat +0 -0
  957. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/vgpmap_magic/pmag_results.txt +0 -0
  958. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/vgpmap_magic/sites.txt +0 -0
  959. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/watsons_f/watsons_f_example_file1.dat +0 -0
  960. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/watsons_f/watsons_f_example_file2.dat +0 -0
  961. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/xpeem_magic/Bryson2019_PVA01-r1.txt +0 -0
  962. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/xpeem_magic/Maurel2020_TeA01Comma-r1onL.txt +0 -0
  963. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/xpeem_magic/Maurel2020_TeA01TwoSpace-r1onL.txt +0 -0
  964. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/zeq/zeq_example.dat +0 -0
  965. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/zeq_magic/measurements.txt +0 -0
  966. {pmagpy-4.2.116.data → pmagpy-4.2.121.data}/data/data_files/zeq_magic/zmab0083201tmp03.txt +0 -0
  967. {pmagpy-4.2.116.dist-info → pmagpy-4.2.121.dist-info}/WHEEL +0 -0
  968. {pmagpy-4.2.116.dist-info → pmagpy-4.2.121.dist-info}/entry_points.txt +0 -0
  969. {pmagpy-4.2.116.dist-info → pmagpy-4.2.121.dist-info}/top_level.txt +0 -0
pmagpy/svei.py ADDED
@@ -0,0 +1,2654 @@
1
+ import numpy as np
2
+ import math
3
+ import scipy as sp
4
+ from scipy import special
5
+ import matplotlib.pyplot as plt
6
+ import pmagpy.pmag as pmag
7
+ import pmagpy.ipmag as ipmag
8
+ from scipy.interpolate import PchipInterpolator
9
+ from scipy.integrate import cumtrapz
10
+ from scipy import interpolate
11
+ from scipy.stats.distributions import chi2
12
+ import pandas as pd
13
+
14
+ def P_lm(l,m,theta):
15
+ """
16
+ This function calculates the Associated Legendre Functions.
17
+
18
+ Parameters:
19
+ l (int): The degree of the associated Legendre function.
20
+ m (int): The order of the associated Legendre function.
21
+ theta (float): The co-latitude in radians.
22
+
23
+ Returns:
24
+ float: The calculated value of the associated Legendre function.
25
+
26
+ References:
27
+ 3M - page: 441, equation B. 3. 2
28
+
29
+ Notes:
30
+ - theta represents the co-latitude, which is the complement of the latitude.
31
+ - The function uses the numpy and math modules.
32
+ """
33
+ A = np.sin(theta)**m/2**l
34
+ sum_p_lm = 0.
35
+ for t in range(0,int((l-m)/2)+1):
36
+ #t vai de zero ate o ultimo inteiro menor que l-m /2
37
+
38
+ B = (-1)**t*math.factorial(2*l-2*t)
39
+ C = math.factorial(t)*math.factorial(l-t)*math.factorial(l-m-2*t)
40
+ D = l - m - 2*t
41
+ sum_p_lm += (B/C)*np.cos(theta)**D
42
+ return A*sum_p_lm
43
+
44
+
45
+ def dP_lm_dt(l,m,theta):
46
+ """
47
+ This function calculates the derivative of Associated Legendre Functions with respect to theta.
48
+
49
+ Parameters:
50
+ l (int): The degree of the associated Legendre function.
51
+ m (int): The order of the associated Legendre function.
52
+ theta (float): The co-latitude in radians.
53
+
54
+ Returns:
55
+ float: The calculated value of the derivative of the associated Legendre function.
56
+
57
+ Notes:
58
+ - theta represents the co-latitude, which is the complement of the latitude.
59
+ - The function uses the numpy and math modules.
60
+ """
61
+ A = (np.sin(theta)**m)/(2.**l)
62
+
63
+ if m == 0:
64
+ A2 = 0.
65
+ else:
66
+ A2 = m*(np.sin(theta)**(m-1))*np.cos(theta)/2**l
67
+ sum_p_lm = 0.
68
+ sum_p_lm2 = 0.
69
+
70
+ for t in range(0,int((l-m)/2)+1):
71
+ #t vai de zero ate o ultimo inteiro menor que l-m /2
72
+ B = ((-1)**t)*math.factorial(2*l-2*t)
73
+ C = math.factorial(t)*math.factorial(l-t)*math.factorial(l-m-2*t)
74
+ D = l - m - 2*t
75
+
76
+ sum_p_lm += (B/C)*(np.cos(theta)**D)
77
+
78
+ for t in range(0,int((l-m)/2)+1):
79
+ #t vai de zero ate o ultimo inteiro menor que l-m /2
80
+
81
+ B = ((-1)**t)*math.factorial(2*l-2*t)
82
+ C = math.factorial(t)*math.factorial(l-t)*math.factorial(l-m-2*t)
83
+ D = l - m - 2*t
84
+
85
+ sum_p_lm2 += np.sin(theta)*(B*D/C)*((np.cos(theta))**(D-1))
86
+
87
+ return (A2*sum_p_lm - A*sum_p_lm2)
88
+
89
+ def s_lm2(l,m,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
90
+ """
91
+ Calculate the variance for each Gauss coefficient.
92
+
93
+ Parameters:
94
+ l (int): The degree of the Gauss coefficient.
95
+ m (int): The order of the Gauss coefficient.
96
+ alpha (float): The alpha factor since CP88.
97
+ beta (float): The factor from TK03 (can be used as a generic one).
98
+ sig10_2 (float): The squared standard deviation for g10. If sig10_2 is zero, it will be calculated
99
+ using the same equation as non-dipolar coefficients.
100
+ sig11_2 (float): The squared standard deviation for g11.
101
+ sig20_2 (float): The squared standard deviation for g20.
102
+ sig21_2 (float): The squared standard deviation for g21.
103
+ sig22_2 (float): The squared standard deviation for g22.
104
+
105
+ Returns:
106
+ float: The calculated variance for the Gauss coefficient.
107
+
108
+ Notes:
109
+ - l and m are the degree and order of the Gauss coefficient, respectively.
110
+ - alpha is the alpha factor since CP88.
111
+ - beta is a factor from TK03 (can be used as a generic one).
112
+ - If the squared standard deviation for a specific Gauss coefficient is provided, it will be used.
113
+ - The function uses the numpy module.
114
+ """
115
+ c_a = 0.547
116
+ if ((l-m)/2. - int((l-m)/2)) == 0:
117
+
118
+ s_lm2 = ((c_a**(2*l))*(alpha**2))/((l+1)*(2*l+1))
119
+
120
+ else:
121
+
122
+ s_lm2 = (c_a**(2*l))*((alpha*beta)**2)/((l+1)*(2*l+1))
123
+ if (l==1 and m==0):
124
+ if (sig10_2>0):
125
+ #print('sig10=%.2f' % np.sqrt(sig10_2))
126
+ s_lm2 = sig10_2
127
+ if (l==1 and m==1):
128
+ if (sig11_2>0):
129
+ #print('sig11=%.2f' % np.sqrt(sig11_2))
130
+ s_lm2 = sig11_2
131
+ if (l==2 and m==0):
132
+ if (sig20_2>0):
133
+ #print('sig20=%.2f' % np.sqrt(sig20_2))
134
+ s_lm2 = sig20_2
135
+ if (l==2 and m==1):
136
+ if (sig21_2>0):
137
+ #print('sig21=%.2f' % np.sqrt(sig21_2))
138
+ s_lm2 = sig21_2
139
+ if (l==2 and m==2):
140
+ if (sig22_2>0):
141
+ #print('sig22=%.2f' % np.sqrt(sig22_2))
142
+ s_lm2 = sig22_2
143
+
144
+ return s_lm2
145
+
146
+
147
+ def sig_br2(l,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
148
+
149
+ """
150
+ Calculate the variance in the r-direction for the magnetic field components.
151
+
152
+ Parameters:
153
+ l (int): The maximum degree for calculating.
154
+ alpha (float): The alpha factor since CP88.
155
+ beta (float): The factor from TK03 (can be used as a generic one).
156
+ theta (float): The co-latitude in radians.
157
+ sig10_2 (float): The squared standard deviation for g10.
158
+ sig11_2 (float): The squared standard deviation for g11.
159
+ sig20_2 (float): The squared standard deviation for g20.
160
+ sig21_2 (float): The squared standard deviation for g21.
161
+ sig22_2 (float): The squared standard deviation for g22.
162
+
163
+ Returns:
164
+ float: The calculated variance in the r-direction.
165
+
166
+ Notes:
167
+ - l is the maximum degree for calculating.
168
+ - theta represents the co-latitude, which is the complement of the latitude.
169
+ - The function utilizes the s_lm2() and P_lm() functions.
170
+ """
171
+ sum_l=0
172
+ #print(l,alpha,beta,theta)
173
+ for i in range(1,l+1):
174
+ #print(i)
175
+ A = ((i+1)**2)*s_lm2(i,0,alpha,beta, sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*(P_lm(i,0,theta)**2)
176
+
177
+ #print(A)
178
+ sum_m=0.
179
+ for j in range(1,i+1):
180
+ #print (j)
181
+ B = ((math.factorial(i-j))/(math.factorial(i+j)))*s_lm2(i,j,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*P_lm(i,j,theta)**2
182
+ sum_m = sum_m + B
183
+ #print(((i+1)**2)*2*sum_m)
184
+ sum_l = sum_l + A + ((i+1)**2)*2*sum_m
185
+ return sum_l
186
+
187
+ def sig_bt2(l,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
188
+ """
189
+ Calculate the variance in the Theta-direction (North-South direction) for the magnetic field components.
190
+
191
+ Parameters:
192
+ l (int): The maximum degree for calculating.
193
+ alpha (float): The alpha factor since CP88.
194
+ beta (float): The factor from TK03 (can be used as a generic one).
195
+ theta (float): The co-latitude in radians.
196
+ sig10_2 (float): The squared standard deviation for g10.
197
+ sig11_2 (float): The squared standard deviation for g11.
198
+ sig20_2 (float): The squared standard deviation for g20.
199
+ sig21_2 (float): The squared standard deviation for g21.
200
+ sig22_2 (float): The squared standard deviation for g22.
201
+
202
+ Returns:
203
+ float: The calculated variance in the Theta-direction.
204
+
205
+ Notes:
206
+ - l is the maximum degree for calculating.
207
+ - theta represents the co-latitude, which is the complement of the latitude.
208
+ - The function utilizes the s_lm2() and dP_lm_dt() functions.
209
+ """
210
+ sum_l = 0
211
+
212
+ #print(l,alpha,beta,theta)
213
+ for i in range(1,l+1):
214
+ #print(i)
215
+ A = s_lm2(i,0,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*(dP_lm_dt(i,0,theta)**2)
216
+
217
+ #print(A)
218
+ sum_m=0.
219
+ for j in range(1,i+1):
220
+ #print (j)
221
+ B = ((math.factorial(i-j))/(math.factorial(i+j)))*s_lm2(i,j,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*dP_lm_dt(i,j,theta)**2
222
+ sum_m = sum_m + B
223
+ #print(((i+1)**2)*2*sum_m)
224
+ sum_l = sum_l + A + 2*sum_m
225
+ return sum_l
226
+
227
+ def sig_bph2(l,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
228
+ """
229
+ Calculate the variance in the Phi direction (East-West direction) for the magnetic field components.
230
+
231
+ Parameters:
232
+ l (int): The maximum degree for calculating.
233
+ alpha (float): The alpha factor since CP88.
234
+ beta (float): The factor from TK03 (can be used as a generic one).
235
+ theta (float): The co-latitude in radians.
236
+ sig10_2 (float): The squared standard deviation for g10.
237
+ sig11_2 (float): The squared standard deviation for g11.
238
+ sig20_2 (float): The squared standard deviation for g20.
239
+ sig21_2 (float): The squared standard deviation for g21.
240
+ sig22_2 (float): The squared standard deviation for g22.
241
+
242
+ Returns:
243
+ float: The calculated variance in the Phi direction.
244
+
245
+ Notes:
246
+ - l is the maximum degree for calculating.
247
+ - theta represents the co-latitude, which is the complement of the latitude.
248
+ - The function utilizes the s_lm2() and P_lm() functions.
249
+ - If theta is 0, it will be approximated to 89.999999 degrees.
250
+ """
251
+ sum_l = 0
252
+ if theta == 0:
253
+ print('lat=90 will be aproximated to 89.999999')
254
+ theta = np.deg2rad(90-89.999999)
255
+ for i in range(1,l+1):
256
+ sum_m=0.
257
+ for j in range(1,i+1):
258
+ B = (j**2)*((math.factorial(i-j))/(math.factorial(i+j)))*s_lm2(i,j,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*(P_lm(i,j,theta)**2)
259
+ sum_m = sum_m + B
260
+ #print(((i+1)**2)*2*sum_m)
261
+ sum_l = sum_l + 2*sum_m/(np.sin(theta)**2)
262
+ return sum_l
263
+
264
+
265
+
266
+ def cov_br_bt(l,alpha, beta, theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
267
+ """
268
+ Calculate the covariance between Br and Btheta for a given maximum degree and co-latitude.
269
+
270
+ Parameters:
271
+ l (int): The maximum degree for calculating.
272
+ alpha (float): The alpha factor since CP88.
273
+ beta (float): The factor from TK03 (can be used as a generic one).
274
+ theta (float): The co-latitude in radians.
275
+ sig10_2 (float): The squared standard deviation for g10.
276
+ sig11_2 (float): The squared standard deviation for g11.
277
+ sig20_2 (float): The squared standard deviation for g20.
278
+ sig21_2 (float): The squared standard deviation for g21.
279
+ sig22_2 (float): The squared standard deviation for g22.
280
+
281
+ Returns:
282
+ float: The calculated covariance between Br and Btheta.
283
+
284
+ Notes:
285
+ - l is the maximum degree for calculating.
286
+ - theta represents the co-latitude, which is the complement of the latitude.
287
+ - The function utilizes the s_lm2(), P_lm(), and dP_lm_dt() functions.
288
+ """
289
+ sum_l = 0.
290
+ for i in range(1,l+1):
291
+ A = s_lm2(i,0,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*P_lm(i,0,theta)*dP_lm_dt(i,0,theta)
292
+ sum_m = 0.
293
+ for j in range(1,i+1):
294
+ B = (math.factorial(i-j)/math.factorial(i+j))*s_lm2(i,j,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)*P_lm(i,j,theta)*dP_lm_dt(i,j,theta)
295
+ sum_m += B
296
+ sum_l = sum_l -(i+1)*(A+2*sum_m)
297
+ return sum_l
298
+
299
+ def Cov(alpha,beta,lat, degree,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
300
+ """
301
+ Calculate the covariance matrix for a given GGP model at a specified latitude.
302
+
303
+ Parameters:
304
+ alpha (float): The alpha factor since CP88.
305
+ beta (float): The factor from TK03 (can be used as a generic one).
306
+ lat (float): The latitude in degrees.
307
+ degree (int): The maximum degree of Gaussian coefficients.
308
+ sig10_2 (float): The squared standard deviation for g10.
309
+ sig11_2 (float): The squared standard deviation for g11.
310
+ sig20_2 (float): The squared standard deviation for g20.
311
+ sig21_2 (float): The squared standard deviation for g21.
312
+ sig22_2 (float): The squared standard deviation for g22.
313
+
314
+ Returns:
315
+ numpy.ndarray: The covariance matrix.
316
+
317
+ Notes:
318
+ - The latitude is specified in degrees.
319
+ - The function utilizes the sig_bt2(), cov_br_bt(), sig_bph2(), and sig_br2() functions.
320
+ """
321
+
322
+ theta = np.deg2rad(90-lat)
323
+ Cov = np.zeros([3,3])
324
+ Cov[0,0] = sig_bt2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
325
+ Cov[0,2] = cov_br_bt(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
326
+ Cov[1,1] = sig_bph2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
327
+ Cov[2,0] = cov_br_bt(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
328
+ Cov[2,2] = sig_br2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
329
+
330
+ return Cov
331
+
332
+ def Cov_modelo(GGPmodel,lat, degree):
333
+ """
334
+ Calculate the covariance matrix using the provided GGP model and latitude.
335
+
336
+ Parameters:
337
+ GGPmodel (dict): The GGP model dictionary containing the model coefficients and standard deviations.
338
+ lat (float): The latitude in degrees.
339
+ degree (int): The maximum degree of Gaussian coefficients.
340
+
341
+ Returns:
342
+ numpy.ndarray: The covariance matrix.
343
+
344
+ Notes:
345
+ - The latitude is specified in degrees.
346
+ - The GGPmodel dictionary should contain the following keys: 'g10', 'g20', 'g30', 'sig10', 'sig11', 'sig20', 'sig21', 'sig22', 'alpha', and 'beta'.
347
+ - The function utilizes the sig_bt2(), cov_br_bt(), sig_bph2(), and sig_br2() functions.
348
+ """
349
+ g10 = GGPmodel['g10']
350
+ g20 = GGPmodel['g20']
351
+
352
+ g10 = GGPmodel['g10']
353
+ g20 = GGPmodel['g20']
354
+ g30 = GGPmodel['g30']
355
+ sig10_2 = GGPmodel['sig10']**2
356
+ sig11_2 = GGPmodel['sig11']**2
357
+ sig20_2 = GGPmodel['sig20']**2
358
+ sig21_2 = GGPmodel['sig21']**2
359
+ sig22_2 = GGPmodel['sig22']**2
360
+
361
+ alpha = GGPmodel['alpha']
362
+ beta = GGPmodel['beta']
363
+
364
+ theta = np.deg2rad(90-lat)
365
+ Cov = np.zeros([3,3])
366
+ Cov[0,0] = sig_bt2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
367
+ Cov[0,2] = cov_br_bt(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
368
+ Cov[1,1] = sig_bph2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
369
+ Cov[2,0] = cov_br_bt(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
370
+ Cov[2,2] = sig_br2(degree,alpha,beta,theta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2)
371
+ return Cov
372
+
373
+ def xy_eq2u_3D(x,y,hem=1):
374
+ """
375
+ Convert a given x, y pair from an equal area plot to the u vector in a 3D coordinate system.
376
+
377
+ Parameters:
378
+ x (float): The x-coordinate.
379
+ y (float): The y-coordinate.
380
+ hem (int): The hemisphere indicator. Default is 1.
381
+
382
+ Returns:
383
+ numpy.ndarray: The u vector of length 3.
384
+
385
+ Notes:
386
+ - The function assumes the vector u = (u1, u2, u3) is unitary (size 1) and points to the Z vertical.
387
+ - The function returns an array of length 3 representing the u vector.
388
+ - The x, y pair is assumed to come from an equal area plot.
389
+ - The hem parameter determines the hemisphere of the u vector (1 for northern hemisphere, -1 for southern hemisphere).
390
+ """
391
+ if x==0 and y==0:
392
+ u[0] = 0.
393
+ u[1] = 0.
394
+ else:
395
+ u[0]=y*np.sqrt(1 - (1 - x**2 - y**2)**2)/np.sqrt(x**2 + y**2)
396
+ u[1]=x*np.sqrt(1 - (1 - x**2 - y**2)**2)/np.sqrt(x**2 + y**2)
397
+ if hem==1:
398
+ u[2] = 1 - x**2 - y**2
399
+ if hem == -1:
400
+ u[2] = -(1 - x**2 - y**2)
401
+ return u
402
+
403
+ def u3D_2_xyeq(v):
404
+ """
405
+ Convert a given vector in 3D (u = (u0, u1, u2)) to the x and y coordinates of an equal area projection.
406
+
407
+ Parameters:
408
+ v (numpy.ndarray): The vector in 3D represented as an array of length 3.
409
+
410
+ Returns:
411
+ tuple: A tuple containing the x and y coordinates of the equal area projection.
412
+
413
+ Notes:
414
+ - The function assumes the vector u = (u0, u1, u2) is a 3D vector.
415
+ - The function returns a tuple of length 2 representing the x and y coordinates of the equal area projection.
416
+ - The equal area projection is derived from the given 3D vector.
417
+ """
418
+ u = v/np.sqrt(v[0]**2+v[1]**2+v[2]**2)
419
+ x = u[1]*np.sqrt(1 - np.abs(u[2]))/np.sqrt(u[0]**2 + u[1]**2)
420
+ y = u[0]*np.sqrt(1 - np.abs(u[2]))/np.sqrt(u[0]**2 + u[1]**2)
421
+
422
+ return x,y
423
+
424
+ def su(x,y,hem,Lamb,m_norm,m):
425
+ """
426
+ Calculate the density function su based on the Khokhlov et al. 2006 model for a given x and y.
427
+
428
+ Parameters:
429
+ x (float): The x-coordinate.
430
+ y (float): The y-coordinate.
431
+ hem (int): Hemisphere side indicator. 1 represents the positive hemisphere, -1 represents the negative hemisphere.
432
+ Lamb (numpy.ndarray): The Lamb matrix.
433
+ m_norm (float): The normalized m value.
434
+ m (numpy.ndarray): The m vector.
435
+
436
+ Returns:
437
+ float: The value of the density function su.
438
+
439
+ Notes:
440
+ - The function calculates the density function su using the Khokhlov et al. 2006 model.
441
+ - The GGPmodel is not used in this function. It's mentioned in the docstring but not used in the code.
442
+ - The degree, dx, and dy variables mentioned in the docstring are not used in this function.
443
+ - The function returns the calculated value of the density function su based on the given inputs.
444
+ """
445
+ u = np.zeros(3)
446
+ if x==0 and y==0:
447
+ u[0] = 0.
448
+ u[1] = 0.
449
+ else:
450
+ u[0] = y*np.sqrt(1 - (1-x**2 - y**2)**2) / np.sqrt(x**2 + y**2)
451
+ u[1] = x*np.sqrt(1 - (1-x**2 - y**2)**2) / np.sqrt(x**2 + y**2)
452
+ if hem==1:
453
+ u[2] = 1 - x**2 - y**2
454
+ if hem == -1:
455
+ u[2] = -(1 - x**2 - y**2)
456
+
457
+ u_norm = np.sqrt(np.dot(np.matmul(Lamb,u),u))
458
+
459
+ z = (np.dot(np.matmul(Lamb,m),u))/u_norm
460
+
461
+ s_u1=np.exp(-0.5*m_norm**2)*np.sqrt(np.linalg.det(Lamb))/(4*np.pi*u_norm**3)
462
+
463
+ s_u2=z*np.sqrt(2/np.pi) + np.exp(0.5*z**2)*(1+z**2)*(1+sp.special.erf(z/np.sqrt(2)))
464
+
465
+ su = s_u1*s_u2
466
+
467
+ return su
468
+
469
+
470
+ def su_GGPmodel(GGPmodel,lat,degree,dx,dy,hem):
471
+ """
472
+ Calculate the map of the density function su based on the Khokhlov et al. 2013 model.
473
+
474
+ Parameters:
475
+ GGPmodel (dict): A dictionary with the parameters of a zonal GGP.
476
+ lat (float): The latitude.
477
+ degree (int): The degree in which the covariance is calculated.
478
+ dx (float): The space in the X-axis of the equal area projection.
479
+ dy (float): The space in the Y-axis of the equal area projection.
480
+ hem (int): Hemisphere side indicator. 1 represents the positive hemisphere, -1 represents the negative hemisphere.
481
+
482
+ Returns:
483
+ tuple: A tuple containing the calculated values:
484
+ - m (numpy.ndarray): The m vector.
485
+ - X (numpy.ndarray): The X-coordinates.
486
+ - Y (numpy.ndarray): The Y-coordinates.
487
+ - XX (numpy.ndarray): The meshgrid of X-coordinates.
488
+ - YY (numpy.ndarray): The meshgrid of Y-coordinates.
489
+ - s (numpy.ndarray): The map of the density function su.
490
+
491
+ Notes:
492
+ - The function calculates the density function su based on the Khokhlov et al. 2013 model.
493
+ - The GGPmodel dictionary contains the parameters of a zonal GGP.
494
+ - The degree parameter specifies the degree in which the covariance is calculated.
495
+ - The dx and dy parameters determine the spacing in the X and Y axes of the equal area projection.
496
+ - The hem parameter is used to indicate the hemisphere side (positive or negative).
497
+ - The function returns multiple arrays representing different calculated values.
498
+ """
499
+ m = m_TAF(GGPmodel, lat)
500
+ Cov = Cov_modelo(GGPmodel,lat,degree)
501
+ Lamb = np.linalg.inv(Cov)
502
+
503
+ m_norm = np.sqrt(np.dot(np.matmul(Lamb,m),m))
504
+
505
+ n = np.int(1/dx)
506
+ X = np.arange(-n*dx,n*dx+dx,dx)
507
+
508
+ n = np.int(1/dy)
509
+ Y = np.arange(-n*dy,n*dy+dy,dy)
510
+
511
+ XX,YY = np.meshgrid(X,Y)
512
+ s = np.zeros(np.shape(XX))
513
+
514
+ for i in range(np.shape(XX)[0]):
515
+ for j in range(np.shape(XX)[1]):
516
+ if (XX[i,j]**2 + YY[i,j]**2)<=1 :
517
+ s[i,j] = su(XX[i,j],YY[i,j],hem,Lamb,m_norm,m)
518
+
519
+ return m,X,Y,XX,YY,s
520
+
521
+ def GGP_LL(GGPmodel,lat,degree,di_block):
522
+ """
523
+ Calculate the log-likelihood of a zonal GGP based on the density function su from Khokhlov et al. 2013.
524
+
525
+ Parameters:
526
+ GGPmodel (dict): A dictionary with the parameters of a zonal GGP.
527
+ lat (float): The latitude.
528
+ degree (int): The degree in which the covariance is calculated.
529
+ di_block (list or array-like): The di_block values as a 2D array-like structure with columns [D, I].
530
+
531
+ Returns:
532
+ float: The log-likelihood of the zonal GGP.
533
+
534
+ Notes:
535
+ - The function calculates the log-likelihood of a zonal GGP based on the density function su from Khokhlov et al. 2013.
536
+ - The GGPmodel dictionary contains the parameters of a zonal GGP.
537
+ - The degree parameter specifies the degree in which the covariance is calculated.
538
+ - The di_block parameter is an array-like structure with columns [D, I] representing direction blocks.
539
+ - The function calculates the Cartesian coordinates (XX, YY) from the given direction blocks.
540
+ - The function calculates the density function su based on the calculated coordinates and other parameters.
541
+ - The log-likelihood is computed by summing the logarithm of the density function values.
542
+ """
543
+ di_block = np.asarray(di_block)
544
+ D = di_block[:,0]
545
+ I = di_block[:,1]
546
+
547
+ m = m_TAF(GGPmodel, lat)
548
+ Cov = Cov_modelo(GGPmodel,lat,degree)
549
+ Lamb = np.linalg.inv(Cov)
550
+ m_norm = np.sqrt(np.dot(np.matmul(Lamb,m),m))
551
+
552
+ hem = np.sign(I)
553
+ n = np.size(D)
554
+ XX = np.zeros(n)
555
+ YY = np.zeros(n)
556
+ for i in range(n):
557
+ u = dir2cart((D[i],I[i]))
558
+ XX[i],YY[i] = u3D_2_xyeq(np.squeeze(u))
559
+
560
+ s = np.zeros(np.shape(XX))
561
+
562
+ for i in range(np.shape(XX)[0]):
563
+ if (XX[i]**2 + YY[i]**2)<=1 :
564
+ s[i] = su(XX[i],YY[i],hem[i],Lamb,m_norm,m)
565
+
566
+ return np.sum(np.log(s))
567
+
568
+ def GGP_pdf(GGPmodel,lat,degree,xyz):
569
+ """
570
+ Calculate the density function values for a zonal GGP based on the su function from Khokhlov et al. 2013.
571
+
572
+ Parameters:
573
+ GGPmodel (dict): A dictionary with the parameters of a zonal GGP.
574
+ lat (float): The latitude.
575
+ degree (int): The degree in which the covariance is calculated.
576
+ xyz (array-like): The input vectors in 3D coordinates.
577
+
578
+ Returns:
579
+ array-like: The density function values for the zonal GGP.
580
+
581
+ Notes:
582
+ - The function calculates the density function values for a zonal GGP based on the su function from Khokhlov et al. 2013.
583
+ - The GGPmodel dictionary contains the parameters of a zonal GGP.
584
+ - The degree parameter specifies the degree in which the covariance is calculated.
585
+ - The xyz parameter is an array-like structure with shape (3, n) representing n input vectors in 3D coordinates.
586
+ - The function calculates the Cartesian coordinates (XX, YY) from the given 3D vectors.
587
+ - The function calculates the density function su based on the calculated coordinates and other parameters.
588
+ - The density function values are returned as an array-like structure.
589
+ """
590
+ m = m_TAF(GGPmodel, lat)
591
+ Cov = Cov_modelo(GGPmodel,lat,degree)
592
+ Lamb = np.linalg.inv(Cov)
593
+ m_norm = np.sqrt(np.dot(np.matmul(Lamb,m),m))
594
+
595
+ n = np.size(xyz,axis=1)
596
+ hem = np.zeros(n)
597
+ XX = np.zeros(n)
598
+ YY = np.zeros(n)
599
+
600
+ for i in range(n):
601
+ #u = dir2cart(xyz[:,i])
602
+ u = xyz[:,i]
603
+ hem[i] = np.sign(u[2])
604
+ XX[i],YY[i] = u3D_2_xyeq(np.squeeze(u))
605
+
606
+ s = np.zeros(np.shape(XX))
607
+
608
+ for i in range(np.shape(XX)[0]):
609
+ if (XX[i]**2 + YY[i]**2)<=1 :
610
+ s[i] = su(XX[i],YY[i],hem[i],Lamb,m_norm,m)
611
+
612
+ return s
613
+
614
+ def Rt(theta):
615
+ """
616
+ Calculate the rotation matrix for a given angle theta, only along the plane of north and vertical.
617
+
618
+ Parameters:
619
+ theta (float): The angle of rotation in degrees.
620
+
621
+ Returns:
622
+ array-like: The 3x3 rotation matrix.
623
+
624
+ Notes:
625
+ - The function calculates a rotation matrix for the given angle theta.
626
+ - The rotation is performed only along the plane of north and vertical.
627
+ - The theta parameter specifies the angle of rotation in degrees.
628
+ - The function constructs a 3x3 rotation matrix R based on the calculated values.
629
+ - The rotation matrix is returned as an array-like structure.
630
+ """
631
+ R = np.zeros([3,3])
632
+ R[0,0] = np.cos(np.deg2rad(theta))
633
+ R[0,2] = np.sin(np.deg2rad(theta))
634
+ R[1,1] = 1.0
635
+ R[2,0] = -np.sin(np.deg2rad(theta))
636
+ R[2,2] = np.cos(np.deg2rad(theta))
637
+
638
+ return R
639
+
640
+ def su_GGPmodel_r(GGPmodel,lat,degree,XX,YY,hem):
641
+ """
642
+ Returns a map of the density function su from Khokhlov et al 2013, rotated to the center of the projection.
643
+
644
+ Parameters:
645
+ GGPmodel (dict): Dictionary with the parameters of a zonal GGP.
646
+ lat (float): Latitude value.
647
+ degree (int): The degree in which the covariance is calculated.
648
+ XX (array-like): X-coordinates of the equal area projection.
649
+ YY (array-like): Y-coordinates of the equal area projection.
650
+ hem (int): Hemisphere side (1 means positive, -1 means negative).
651
+
652
+ Returns:
653
+ tuple: A tuple containing the magnetic field values (m) and the density function values (s).
654
+
655
+ Notes:
656
+ - The function calculates the density function su from Khokhlov et al 2013, rotated to the center of the projection.
657
+ - The GGPmodel parameter is a dictionary containing the parameters of a zonal GGP.
658
+ - The lat parameter specifies the latitude value.
659
+ - The degree parameter determines the degree in which the covariance is calculated.
660
+ - The XX and YY parameters represent the X and Y coordinates of the equal area projection, respectively.
661
+ - The hem parameter indicates the hemisphere side (1 for positive, -1 for negative).
662
+ - The function performs necessary calculations to rotate the density function to the center of the projection.
663
+ - It calculates the rotated magnetic field values (m_r), covariance matrix (Cov_r), and the inverse of Cov_r (Lamb).
664
+ - The m_norm parameter is the magnitude of the rotated magnetic field.
665
+ - The function iterates over the XX and YY arrays and calculates the density function values (s) using the su function.
666
+ - The resulting magnetic field values (m) and density function values (s) are returned as a tuple.
667
+ """
668
+ m = m_TAF(GGPmodel, lat)
669
+ Cov = Cov_modelo(GGPmodel,lat,degree)
670
+ pol=-GGPmodel['g10']/abs(GGPmodel['g10'])
671
+ #print(pol)
672
+ #print(m[0]/abs(m[0]))
673
+ B = np.sqrt(m[0]**2+m[1]**2+m[2]**2)
674
+ m_r = np.zeros(3)
675
+ m_r[2] = B #The total field in the vertical axis - because we want the rotated distribution
676
+ Binc = np.rad2deg(np.arctan(m[2]/np.sqrt(m[0]**2+m[1]**2)))
677
+
678
+ Cov_r = np.matmul(np.matmul(Rt(-pol*(90-Binc)),Cov),np.transpose(Rt(-pol*(90-Binc))))
679
+ Lamb = np.linalg.inv(Cov_r)
680
+
681
+ m_norm = np.sqrt(np.dot(np.matmul(Lamb,m_r),m_r))
682
+
683
+ s = np.zeros(np.shape(XX))
684
+
685
+ for i in range(np.shape(XX)[0]):
686
+ for j in range(np.shape(XX)[1]):
687
+ if (XX[i,j]**2 + YY[i,j]**2)<=1 :
688
+ s[i,j] = su(XX[i,j],YY[i,j],hem,Lamb,m_norm,m_r)
689
+
690
+ return m,s
691
+
692
+ def s_lm(l,m,alpha,beta,sig10_2,sig11_2,sig20_2,sig21_2,sig22_2):
693
+ """
694
+ Calculates the standard deviation for each Gauss coefficient.
695
+
696
+ Parameters:
697
+ l (int): The degree.
698
+ m (int): The order.
699
+ alpha (float): The alpha factor since CP88.
700
+ beta (float): The factor from TK03.
701
+ sig10_2 (float): The squared standard deviation for g10. For CP88, if sig10 is 3, sig10_2 should be 9.
702
+ sig11_2 (float): The squared standard deviation for g11.
703
+ sig20_2 (float): The squared standard deviation for g20.
704
+ sig21_2 (float): The squared standard deviation for g21.
705
+ sig22_2 (float): The squared standard deviation for g22.
706
+
707
+ Returns:
708
+ float: The calculated standard deviation for the Gauss coefficient.
709
+
710
+ Notes:
711
+ - The function calculates the standard deviation for each Gauss coefficient based on the provided inputs.
712
+ - The l and m parameters represent the degree and order, respectively.
713
+ - The alpha parameter is the alpha factor since CP88.
714
+ - The beta parameter is the factor from TK03.
715
+ - The sig10_2, sig11_2, sig20_2, sig21_2, and sig22_2 parameters are squared standard deviations for specific Gauss coefficients.
716
+ - If sig10_2 is zero, the function calculates it using the same equation as non-dipolar coefficients.
717
+ - The function uses conditional statements to check if specific coefficients have non-zero squared standard deviations,
718
+ and if so, it updates the s_lm2 value accordingly.
719
+ - The calculated standard deviation (s_lm2) is returned as the square root of s_lm2.
720
+ """
721
+
722
+ c_a = 0.547
723
+ if ((l-m)/2. - int((l-m)/2)) == 0:
724
+
725
+ s_lm2 = ((c_a**(2*l))*(alpha**2))/((l+1)*(2*l+1))
726
+
727
+ else:
728
+
729
+ s_lm2 = (c_a**(2*l))*((alpha*beta)**2)/((l+1)*(2*l+1))
730
+ if (l==1 and m==0):
731
+ if (sig10_2>0):
732
+ s_lm2 = sig10_2
733
+ if (l==1 and m==1):
734
+ if (sig11_2>0):
735
+ s_lm2 = sig11_2
736
+ if (l==2 and m==0):
737
+ if (sig20_2>0):
738
+ s_lm2 = sig20_2
739
+ if (l==2 and m==1):
740
+ if (sig21_2>0):
741
+ s_lm2 = sig21_2
742
+ if (l==2 and m==2):
743
+ if (sig22_2>0):
744
+ s_lm2 = sig22_2
745
+
746
+ return np.sqrt(s_lm2)
747
+
748
+ def s_lmGGP(terms,GGPmodel):
749
+ """
750
+ Generates a list of sigma l m drawn from a given GGP model.
751
+
752
+ Parameters:
753
+ terms (int): The number of terms.
754
+ GGPmodel (dict): A dictionary containing the GGP model parameters.
755
+
756
+ Returns:
757
+ tuple: A tuple containing two lists: all_s (list of standard deviations) and degrees (list of degree and order arrays).
758
+
759
+ Notes:
760
+ - The function is modified from pmagpy (mktk03(terms, seed, G2, G3)).
761
+ - The GGPmodel dictionary should contain the following keys:
762
+ - 'g10': g10 value
763
+ - 'g20': g20 value
764
+ - 'g30': g30 value
765
+ - 'sig10': sig10 value
766
+ - 'sig11': sig11 value
767
+ - 'sig20': sig20 value
768
+ - 'sig21': sig21 value
769
+ - 'sig22': sig22 value
770
+ - 'alpha': alpha value
771
+ - 'beta': beta value
772
+ - The function initializes empty lists to store standard deviations (all_s) and degree and order arrays (degrees).
773
+ - It calculates the standard deviation (s) for the l=1, m=0 coefficient and appends it to all_s along with the degree [1, 0].
774
+ - It calculates the standard deviation (s) for the l=1, m=1 coefficient and appends it to all_s along with the degree [1, 1].
775
+ - It appends the same degree [1, 1] and standard deviation (s) to all_s and degrees again.
776
+ - It then iterates over l from 2 to terms and over m from 0 to l.
777
+ - For each combination of l and m, it calculates the standard deviation (s) using the s_lm function and appends it to all_s along with the degree [l, m].
778
+ - If m is non-zero, it appends the same degree [l, m] and standard deviation (s) to all_s and degrees again.
779
+ - Finally, it returns a tuple containing the all_s and degrees lists.
780
+ """
781
+
782
+ g10 = GGPmodel['g10']
783
+ g20 = GGPmodel['g20']
784
+ g30 = GGPmodel['g30']
785
+ sig10 = GGPmodel['sig10']
786
+ sig11 = GGPmodel['sig11']
787
+ sig20 = GGPmodel['sig20']
788
+ sig21 = GGPmodel['sig21']
789
+ sig22 = GGPmodel['sig22']
790
+
791
+ alpha = GGPmodel['alpha']
792
+ beta = GGPmodel['beta']
793
+
794
+ all_s = []
795
+ degrees = []
796
+
797
+ s = s_lm(1,0,alpha,beta,sig10**2,sig11**2,sig20**2,sig21**2,sig22**2)
798
+ deg = np.array([1,0])
799
+
800
+ all_s.append(s)
801
+ degrees.append(deg)
802
+
803
+ s = s_lm(1,1,alpha,beta,sig10**2,sig11**2,sig20**2,sig21**2,sig22**2)
804
+ deg = np.array([1,1])
805
+
806
+ all_s.append(s)
807
+ degrees.append(deg)
808
+
809
+ deg = np.array([1,1])
810
+ all_s.append(s)
811
+ degrees.append(deg)
812
+
813
+ for l in range(2,terms+1):
814
+ for m in range(l+1):
815
+ s = s_lm(l,m,alpha,beta,sig10**2,sig11**2,sig20**2,sig21**2,sig22**2)
816
+ deg = np.array([l,m])
817
+ all_s.append(s)
818
+ degrees.append(deg)
819
+ if m!=0:
820
+ deg = np.array([l,m])
821
+ all_s.append(s)
822
+ degrees.append(deg)
823
+ return all_s,degrees
824
+
825
+ def intxy(M,Integ):
826
+ """
827
+ Calculates the integral in the X-Y plane.
828
+
829
+ Parameters:
830
+ M (ndarray): The M matrix representing the function.
831
+ Integ (ndarray): The integration matrix with zeros and dx*dy values.
832
+
833
+ Returns:
834
+ float: The calculated integral.
835
+
836
+ Notes:
837
+ - The function calculates the integral by multiplying the M matrix with the Integ matrix element-wise and then summing the resulting values.
838
+ - The integration is performed only within the circle of radius 1 in the equal area projection.
839
+ """
840
+
841
+ integ = 0.
842
+ integ = np.sum(M*Integ)
843
+
844
+ return integ
845
+
846
+ def Med_desvxy_mod(sp,sn,XX,YY,Integ):
847
+ """
848
+ Calculates the mean and standard deviation of x and y using a GGP model.
849
+ Considers directional distribution function results from the positive and negative equal area projections.
850
+
851
+ Parameters:
852
+ sp (ndarray): Directional distribution function results from the positive equal area projection.
853
+ sn (ndarray): Directional distribution function results from the negative equal area projection.
854
+ XX (ndarray): X coordinates.
855
+ YY (ndarray): Y coordinates.
856
+ Integ (ndarray): Integration matrix.
857
+
858
+ Returns:
859
+ tuple: A tuple containing the following values:
860
+ - normp (float): Normalization factor for the positive equal area projection.
861
+ - normn (float): Normalization factor for the negative equal area projection.
862
+ - xm (float): Mean x-coordinate.
863
+ - ym (float): Mean y-coordinate.
864
+ - xstd (float): Standard deviation of x-coordinate.
865
+ - ystd (float): Standard deviation of y-coordinate.
866
+ """
867
+
868
+ normp = intxy(sp,Integ)
869
+ normn = intxy(sn,Integ)
870
+
871
+ xmp = intxy(XX*sp,Integ)
872
+ xmn = intxy(XX*sn,Integ)
873
+ xm = (xmp+xmn)/(normp+normn)
874
+ ymp = intxy(YY*sp,Integ)
875
+ ymn = intxy(YY*sn,Integ)
876
+ ym = (ymp+ymn)/(normp+normn)
877
+ xstd2p = (intxy((XX-xm)*(XX-xm)*sp,Integ))
878
+ xstd2n = (intxy((XX-xm)*(XX-xm)*sn,Integ))
879
+ xstd = np.sqrt((xstd2p+xstd2n)/(normp+normn))
880
+ ystd2p = (intxy((YY-ym)*(YY-ym)*sp,Integ))
881
+ ystd2n = (intxy((YY-ym)*(YY-ym)*sn,Integ))
882
+ ystd = np.sqrt((ystd2p+ystd2n)/(normp+normn))
883
+
884
+ return normp,normn,xm,ym,xstd,ystd
885
+
886
+ def covxy_mod(sp,sn,XX,YY,Integ):
887
+ """
888
+ Calculates the covariance between x and y (equal area) using a GGP model.
889
+ Considers directional distribution function results from the positive and negative equal area projections.
890
+
891
+ Parameters:
892
+ sp (ndarray): Directional distribution function results from the positive equal area projection.
893
+ sn (ndarray): Directional distribution function results from the negative equal area projection.
894
+ XX (ndarray): X coordinates.
895
+ YY (ndarray): Y coordinates.
896
+ Integ (ndarray): Integration matrix.
897
+
898
+ Returns:
899
+ float: Covariance between x and y.
900
+ """
901
+
902
+ normp = intxy(sp,Integ)
903
+ normn = intxy(sn,Integ)
904
+
905
+ xmp = intxy(XX*sp,Integ)
906
+ xmn = intxy(XX*sn,Integ)
907
+ xm = (xmp+xmn)/(normp+normn)
908
+ ymp = intxy(YY*sp,Integ)
909
+ ymn = intxy(YY*sn,Integ)
910
+ ym = (ymp+ymn)/(normp+normn)
911
+
912
+ covxyp = (intxy((XX-xm)*(YY-ym)*sp,Integ))
913
+ covxyn = (intxy((XX-xm)*(YY-ym)*sn,Integ))
914
+ covxy = (covxyp+covxyn)/(normp+normn)
915
+
916
+
917
+
918
+
919
+ return covxy
920
+
921
+ def Med_desvxy_covxy_mod(sp,sn,XX,YY,Integ):
922
+ """
923
+ Calculates the mean (x, y), standard deviation of x and y, and covariance of x and y using a GGP model.
924
+ The calculations are based on the directional distribution function results from the positive and negative equal area projections (sp and sn).
925
+
926
+ Parameters:
927
+ sp (numpy.ndarray): Positive equal area projection directional distribution function.
928
+ sn (numpy.ndarray): Negative equal area projection directional distribution function.
929
+ XX (numpy.ndarray): Array of x-values.
930
+ YY (numpy.ndarray): Array of y-values.
931
+ Integ (float): Integration value.
932
+
933
+ Returns:
934
+ tuple: A tuple containing the following values:
935
+ - normp (float): Normalization factor for the positive equal area projection.
936
+ - normn (float): Normalization factor for the negative equal area projection.
937
+ - xm (float): Mean of x.
938
+ - ym (float): Mean of y.
939
+ - xstd (float): Standard deviation of x.
940
+ - ystd (float): Standard deviation of y.
941
+ - covxy (float): Covariance of x and y.
942
+ """
943
+ normp = intxy(sp,Integ)
944
+ normn = intxy(sn,Integ)
945
+
946
+ xmp = intxy(XX*sp,Integ)
947
+ xmn = intxy(XX*sn,Integ)
948
+ xm = (xmp+xmn)/(normp+normn)
949
+ ymp = intxy(YY*sp,Integ)
950
+ ymn = intxy(YY*sn,Integ)
951
+ ym = (ymp+ymn)/(normp+normn)
952
+ xstd2p = (intxy((XX-xm)*(XX-xm)*sp,Integ))
953
+ xstd2n = (intxy((XX-xm)*(XX-xm)*sn,Integ))
954
+ xstd = np.sqrt((xstd2p+xstd2n)/(normp+normn))
955
+ ystd2p = (intxy((YY-ym)*(YY-ym)*sp,Integ))
956
+ ystd2n = (intxy((YY-ym)*(YY-ym)*sn,Integ))
957
+ ystd = np.sqrt((ystd2p+ystd2n)/(normp+normn))
958
+
959
+ covxyp = (intxy((XX-xm)*(YY-ym)*sp,Integ))
960
+ covxyn = (intxy((XX-xm)*(YY-ym)*sn,Integ))
961
+ covxy = (covxyp+covxyn)/(normp+normn)
962
+
963
+ return normp,normn,xm,ym,xstd,ystd,covxy
964
+
965
+ def Med_desvxy_sim(lista_xy):
966
+ """
967
+ Calculates the mean x and y and the standard deviation of x and y using a list of results
968
+ in x, y coordinates (equal area coordinates).
969
+
970
+ Parameters:
971
+ lista_xy (ndarray): List of results in x, y coordinates.
972
+
973
+ Returns:
974
+ tuple: Tuple containing the mean x-coordinate, mean y-coordinate, standard deviation of x,
975
+ and standard deviation of y.
976
+ """
977
+ xm = np.average(lista_xy[:,0])
978
+ ym = np.average(lista_xy[:,1])
979
+
980
+ xstd = np.std(lista_xy[:,0],ddof=1)
981
+ ystd = np.std(lista_xy[:,1],ddof=1)
982
+
983
+ return xm,ym,xstd,ystd
984
+
985
+ def covvxy_sim(lista_xy):
986
+ """
987
+ Calculates the covariance between x and y using a list of results in x, y coordinates (equal area coordinates).
988
+
989
+ Parameters:
990
+ lista_xy (ndarray): List of results in x, y coordinates.
991
+
992
+ Returns:
993
+ float: Covariance between x and y.
994
+
995
+ """
996
+
997
+ xm = np.average(lista_xy[:,0])
998
+ ym = np.average(lista_xy[:,1])
999
+ cov_xys = (sum((lista_xy[:,0]-xm)*(lista_xy[:,1]-ym))/len(lista_xy))
1000
+
1001
+ return cov_xys
1002
+
1003
+ def det_cov_xy_sim(lista_xy):
1004
+ """
1005
+ Calculates the determinant of the covariance matrix between x and y using a list of results in x, y coordinates (equal area coordinates).
1006
+
1007
+ Parameters:
1008
+ lista_xy (ndarray): List of results in x, y coordinates.
1009
+
1010
+ Returns:
1011
+ float: Determinant of the covariance matrix between x and y.
1012
+
1013
+ """
1014
+ xm = np.average(lista_xy[:,0])
1015
+ ym = np.average(lista_xy[:,1])
1016
+
1017
+ xstd = np.std(lista_xy[:,0],ddof=1)
1018
+ ystd = np.std(lista_xy[:,1],ddof=1)
1019
+
1020
+ cov_xys = (sum((lista_xy[:,0]-xm)*(lista_xy[:,1]-ym))/len(lista_xy))
1021
+
1022
+ det = (xstd**2)*(ystd**2) - cov_xys**2
1023
+
1024
+ return det
1025
+
1026
+ def integ(dx,dy):
1027
+ """
1028
+ Calculates the numerical integral of one * dx * dy inside the circle of equal area.
1029
+
1030
+ Parameters:
1031
+ dx (float): Step size in the x-direction.
1032
+ dy (float): Step size in the y-direction.
1033
+
1034
+ Returns:
1035
+ tuple: Tuple containing the following elements:
1036
+ - Integ (ndarray): Matrix representing the numerical integral values.
1037
+ - XX (ndarray): Meshgrid of X values.
1038
+ - YY (ndarray): Meshgrid of Y values.
1039
+ - X (ndarray): Array of X values.
1040
+ - Y (ndarray): Array of Y values.
1041
+
1042
+ """
1043
+
1044
+ n = np.int(1/dx)
1045
+ X = np.arange(-n*dx,n*dx+dx,dx)
1046
+
1047
+ n = np.int(1/dy)
1048
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1049
+
1050
+
1051
+ XX,YY = np.meshgrid(X,Y)
1052
+ Integ = np.zeros(np.shape(XX)) #matrix that will be used every integration
1053
+ for i in range(np.shape(XX)[0]):
1054
+ for j in range(np.shape(YY)[1]):
1055
+ if np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1056
+ if np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1057
+ #it will consider only squares inside the equal area circle
1058
+ Integ[i,j] = dx*dy
1059
+ return Integ/np.sum(Integ), XX, YY, X, Y
1060
+
1061
+ def integ_x(dx,dy):
1062
+ """
1063
+ Calculates the numerical integral of one * dx inside the circle of equal area.
1064
+
1065
+ Parameters:
1066
+ dx (float): Step size in the x-direction.
1067
+ dy (float): Step size in the y-direction.
1068
+
1069
+ Returns:
1070
+ tuple: Tuple containing the following elements:
1071
+ - Integ (ndarray): Matrix representing the numerical integral values.
1072
+ - XX (ndarray): Meshgrid of X values.
1073
+ - YY (ndarray): Meshgrid of Y values.
1074
+ - X (ndarray): Array of X values.
1075
+ - Y (ndarray): Array of Y values.
1076
+
1077
+ """
1078
+ n = np.int(1/dx)
1079
+ X = np.arange(-n*dx,n*dx+dx,dx)
1080
+
1081
+ n = np.int(1/dy)
1082
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1083
+
1084
+
1085
+ XX,YY = np.meshgrid(X,Y)
1086
+ Integ = np.zeros(np.shape(XX)) #matrix that will be used every integration
1087
+ for i in range(np.shape(XX)[0]):
1088
+ for j in range(np.shape(YY)[1]):
1089
+ if np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1090
+ if np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1091
+ #it will consider only squares inside the equal area circle
1092
+ Integ[i,j] = dx
1093
+ return Integ/np.sum(Integ), XX, YY, X, Y
1094
+
1095
+ def integ_y(dx,dy):
1096
+ """
1097
+ Calculates the numerical integral of one * dy inside the circle of equal area.
1098
+
1099
+ Parameters:
1100
+ dx (float): Step size in the x-direction.
1101
+ dy (float): Step size in the y-direction.
1102
+
1103
+ Returns:
1104
+ tuple: Tuple containing the following elements:
1105
+ - Integ (ndarray): Matrix representing the numerical integral values.
1106
+ - XX (ndarray): Meshgrid of X values.
1107
+ - YY (ndarray): Meshgrid of Y values.
1108
+ - X (ndarray): Array of X values.
1109
+ - Y (ndarray): Array of Y values.
1110
+
1111
+ """
1112
+
1113
+ n = np.int(1/dx)
1114
+ X = np.arange(-n*dx,n*dx+dx,dx)
1115
+
1116
+ n = np.int(1/dy)
1117
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1118
+
1119
+
1120
+ XX,YY = np.meshgrid(X,Y)
1121
+ Integ = np.zeros(np.shape(XX)) #matrix that will be used every integration
1122
+ for i in range(np.shape(XX)[0]):
1123
+ for j in range(np.shape(YY)[1]):
1124
+ if np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1125
+ if np.sqrt((XX[i,j]-0.5*dx)**2+(YY[i,j]+0.5*dy)**2)<=1 and np.sqrt((XX[i,j]+0.5*dx)**2+(YY[i,j]-0.5*dy)**2)<=1:
1126
+ #it will consider only squares inside the equal area circle
1127
+ Integ[i,j] = dy
1128
+ return Integ/np.sum(Integ), XX, YY, X, Y
1129
+
1130
+
1131
+ def zonal(lat,g10=-18,G2=0.0,G3=0.0,G4=0.0,a_r=1.0):
1132
+ """
1133
+ Calculates the zonal field for a given latitude and returns the horizontal and vertical components Btetha, Br.
1134
+
1135
+ Parameters:
1136
+ lat (float): Latitude in degrees.
1137
+ g10 (float): Gauss coefficient g10 (default: -18).
1138
+ G2 (float): Gauss coefficient G2 (default: 0.0).
1139
+ G3 (float): Gauss coefficient G3 (default: 0.0).
1140
+ G4 (float): Gauss coefficient G4 (default: 0.0).
1141
+ a_r (float): Earth radius divided by the distance from the center of the Earth (default: 1.0).
1142
+
1143
+ Returns:
1144
+ tuple: Tuple containing the following elements:
1145
+ - Bttot (float): Total horizontal component Btetha.
1146
+ - Brtot (float): Total vertical component Br.
1147
+
1148
+ """
1149
+
1150
+ Theta = 90-lat
1151
+ g20 = G2*g10
1152
+ g30 = G3*g10
1153
+ g40 = G4*g10
1154
+
1155
+ costheta = np.cos(np.deg2rad(Theta))
1156
+ sintheta = np.sin(np.deg2rad(Theta))
1157
+
1158
+ Br1 = 2*(a_r**3)*g10*costheta
1159
+ Br2 = (3*g20/2)*(a_r**4)*(3*(costheta**2) - 1)
1160
+ Br3 = (a_r**5)*(2*g30)*(5*(costheta**3) - 3*costheta)
1161
+ Br4 = (a_r**6)*(5*g40/8)*(35*(costheta**4) - 30*(costheta**2)+3)
1162
+
1163
+
1164
+ Bt1 = (a_r**3)*g10*sintheta
1165
+ Bt2 = (a_r**4)*(3*g20)*sintheta*costheta
1166
+ Bt3 = (a_r**5)*(g30/2)*(15*sintheta*(costheta**2) - 3*sintheta)
1167
+ Bt4 = (a_r**6)*(g40/2)*(35*sintheta*(costheta**3) - 15*sintheta*costheta)
1168
+
1169
+
1170
+ Brtot = Br1+Br2+Br3+Br4
1171
+ Bttot = Bt1+Bt2+Bt3+Bt4
1172
+
1173
+ Bx = -Bttot #bx eh bteta negativo
1174
+ By = 0
1175
+ Bz = -Brtot #bz eh br negativo
1176
+ H = np.sqrt(Bx**2 + By**2 )
1177
+
1178
+ Inc = np.rad2deg(np.arctan(Bz/H))
1179
+
1180
+ return Bttot, Brtot
1181
+
1182
+ def m_TAF(GGPmodel, lat):
1183
+ """
1184
+ Calculates the Time Average Field (TAF) for a given GGP model dictionary.
1185
+
1186
+ Parameters:
1187
+ GGPmodel (dict): GGP model dictionary containing the following keys:
1188
+ - 'g10' (float): Gauss coefficient g10.
1189
+ - 'g20' (float): Gauss coefficient g20.
1190
+ - 'g30' (float): Gauss coefficient g30.
1191
+
1192
+ lat (float): Latitude in degrees.
1193
+
1194
+ Returns:
1195
+ ndarray: Array `m` representing the time average field with shape (3,).
1196
+ - m[0] (float): Bx component (negative Btetha).
1197
+ - m[1] (float): By component (always 0).
1198
+ - m[2] (float): Bz component (negative Br).
1199
+
1200
+ """
1201
+
1202
+ m = np.zeros(3)
1203
+ Bteta,Br = zonal(lat,GGPmodel['g10'],GGPmodel['g20']/GGPmodel['g10'],GGPmodel['g30']/GGPmodel['g10'])
1204
+ m[0] = -Bteta
1205
+ m[1] = 0.
1206
+ m[2] = -Br
1207
+ return m
1208
+
1209
+
1210
+ def prediction_map_GGP_su_r(lat,GGPmodel,degree=8,dx=0.01,dy=0.01):
1211
+ """
1212
+ Predicts the map of 'su' rotated to the vertical in an equal-area projection (x, y or x_E and x_N) from a GGP model and a latitude.
1213
+
1214
+ Parameters:
1215
+ lat (float): Latitude.
1216
+ GGPmodel (dict): A dictionary with information about the GGP model.
1217
+ degree (int, optional): Maximum degree for calculating the covariance matrix of the field B. Default is 8.
1218
+ dx (float, optional): Spacing for mapping in the x direction. Default is 0.01.
1219
+ dy (float, optional): Spacing for mapping in the y direction. Default is 0.01.
1220
+
1221
+ Returns:
1222
+ tuple: A tuple containing two arrays, sp and sn.
1223
+ - sp: Positive inclination hemisphere 'su' map in the equal-area projection. A 3-column array with x, y, and su.
1224
+ - sn: Negative inclination hemisphere 'su' map in the equal-area projection. A 3-column array with x, y, and su.
1225
+ """
1226
+ n = np.int(1/dx)
1227
+ X = np.arange(-n*dx,n*dx+dx,dx)
1228
+
1229
+ n = np.int(1/dy)
1230
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1231
+
1232
+
1233
+ XX,YY = np.meshgrid(X,Y)
1234
+
1235
+
1236
+ hem=1
1237
+ m,sp = su_GGPmodel_r(GGPmodel, lat, degree, XX, YY, hem)
1238
+ m,sn = su_GGPmodel_r(GGPmodel, lat, degree, XX, YY, -hem)
1239
+
1240
+ return sp, sn
1241
+
1242
+
1243
+ def prediction_map_GGP_su(lat,GGPmodel,degree=8,dx=0.01,dy=0.01):
1244
+ """
1245
+ Predicts the map of 'su' in an equal-area projection (x, y or x_E and x_N) from a GGP model and a latitude.
1246
+
1247
+ Parameters:
1248
+ lat (float): Latitude.
1249
+ GGPmodel (dict): A dictionary with information about the GGP model.
1250
+ degree (int, optional): Maximum degree for calculating the covariance matrix of the field B. Default is 8.
1251
+ dx (float, optional): Spacing for mapping in the x direction. Default is 0.01.
1252
+ dy (float, optional): Spacing for mapping in the y direction. Default is 0.01.
1253
+
1254
+ Returns:
1255
+ tuple: A tuple containing four elements.
1256
+ - sp: Positive inclination hemisphere 'su' map in the equal-area projection. A 3-column array with x, y, and su.
1257
+ - sn: Negative inclination hemisphere 'su' map in the equal-area projection. A 3-column array with x, y, and su.
1258
+ - XX: Meshgrid of x values.
1259
+ - YY: Meshgrid of y values.
1260
+ """
1261
+ n = np.int(1/dx)
1262
+ X = np.arange(-n*dx,n*dx+dx,dx)
1263
+
1264
+ n = np.int(1/dy)
1265
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1266
+
1267
+
1268
+ XX,YY = np.meshgrid(X,Y)
1269
+
1270
+
1271
+ hem=1
1272
+ m,X,Y,XX,YY,sp = su_GGPmodel(GGPmodel, lat, degree, dx, dy, hem)
1273
+ m,X,Y,XX,YY,sn = su_GGPmodel(GGPmodel, lat, degree, dx, dy, -hem)
1274
+
1275
+ return sp, sn, XX, YY # modified 4/2/23 per Gilder's suggestions
1276
+
1277
+ def prediction_x_y_std_E_A_GGP(lats,GGPmodel,imprima=False, degree=8,dx=0.01,dy=0.01,hem=1):
1278
+ """
1279
+ Predicts the x mean, y mean, standard deviation, covariance from a GGP model and a set of latitudes or a single latitude as an array with len=1 -> [lat].
1280
+ It returns an array with 7 columns: lat, x, y, sigmax, sigmay, E, Adir.
1281
+ If imprima=True, it will print the latitude at each calculation.
1282
+
1283
+ Parameters:
1284
+ lats (float or list): Latitude(s).
1285
+ GGPmodel (dict): A dictionary with information about the GGP model.
1286
+ imprima (bool, optional): Flag to print the latitude at each calculation. Default is False.
1287
+ degree (int, optional): Maximum degree for calculating the covariance matrix of the field B. Default is 8.
1288
+ dx (float, optional): Spacing for mapping in the x direction. Default is 0.01.
1289
+ dy (float, optional): Spacing for mapping in the y direction. Default is 0.01.
1290
+ hem (int, optional): Hemisphere (1 for positive inclination, -1 for negative inclination). Default is 1.
1291
+
1292
+ Returns:
1293
+ np.ndarray: Array with 7 columns: lat, x, y, sigmax, sigmay, E, Adir.
1294
+ """
1295
+ n = np.int(1/dx)
1296
+ X = np.arange(-n*dx,n*dx+dx,dx)
1297
+
1298
+ n = np.int(1/dy)
1299
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1300
+
1301
+
1302
+ XX,YY = np.meshgrid(X,Y)
1303
+
1304
+ Mod = np.zeros([len(lats),7])
1305
+ Mod[:,0] = lats
1306
+ for i in range(len(lats)):
1307
+ if imprima==True:
1308
+ print('Calculating for the latitude:')
1309
+ print(lats[i])
1310
+ m,sp = su_GGPmodel_r(GGPmodel, lats[i], degree, XX, YY, hem)
1311
+ m,sn = su_GGPmodel_r(GGPmodel, lats[i], degree, XX, YY, -hem)
1312
+
1313
+ Integ, XX, YY, X, Y = integ(dx,dy)
1314
+
1315
+ normp,normn, xmm, ymm, xstdm, ystdm, covxym = Med_desvxy_covxy_mod(sp,sn,XX, YY, Integ)
1316
+
1317
+ Mod[i,1] = xmm
1318
+ Mod[i,2] = ymm
1319
+ Mod[i,3] = xstdm
1320
+ Mod[i,4] = ystdm
1321
+ Mod[i,5] = (ystdm**2)/(xstdm**2)
1322
+ Mod[i,6] = np.sqrt((ystdm*xstdm)**2 - covxym**2)
1323
+
1324
+ return Mod
1325
+
1326
+ def plotmap(sp, sn,GGP,lat,dx,dy):
1327
+ name = GGP['name']
1328
+ n = np.int(1/dx)
1329
+ X = np.arange(-n*dx,n*dx+dx,dx)
1330
+
1331
+ n = np.int(1/dy)
1332
+ Y = np.arange(-n*dy,n*dy+dy,dy)
1333
+
1334
+
1335
+ XX,YY = np.meshgrid(X,Y)
1336
+ minp = np.min(sp)
1337
+ minn = np.min(sn)
1338
+ if minp<minn:
1339
+ minimo = minp
1340
+ else:
1341
+ minimo = minn
1342
+ maxp = np.max(sp)
1343
+ maxn = np.max(sn)
1344
+ if maxp>maxn:
1345
+ maximo = maxp
1346
+ else:
1347
+ maximo = maxn
1348
+ fig = plt.figure(figsize=[13,6], dpi=80)
1349
+
1350
+ plt.subplot(121)
1351
+ xb=np.arange(-1,1.01,0.01)
1352
+ ybn=-np.sqrt(abs(1-xb**2))
1353
+ ybp=np.sqrt(abs(1-xb**2))
1354
+ plt.plot(xb,ybn, '--',c='0.5')
1355
+ plt.plot(xb,ybp,'--',c='0.5')
1356
+ plt.plot(0,0,'+',c='k')
1357
+ plt.axis('off', aspect='equal')
1358
+ plt.contour(X,Y,sp,levels=np.linspace(minimo,maximo,8), zorder = 5020)
1359
+ plt.text(0.0,0.92,'Lat=%i$^\circ$'%lat,horizontalalignment='center')
1360
+ plt.text(0.0,0.85,name,horizontalalignment='center')
1361
+ plt.text(0.0,0.78,'Positive inclination', horizontalalignment='center')
1362
+
1363
+
1364
+ plt.subplot(122)
1365
+ plt.plot(xb,ybn, '--',c='0.5')
1366
+ plt.plot(xb,ybp,'--',c='0.5')
1367
+ plt.plot(0,0,'+',c='k')
1368
+ plt.axis('off', aspect='equal')
1369
+ plt.contour(X,Y,sn,levels=np.linspace(minimo,maximo,8),zorder = 5020)
1370
+ plt.text(0.0,0.92,'Lat=%i$^\circ$'%lat,horizontalalignment='center')
1371
+ plt.text(0.0,0.85,name,horizontalalignment='center')
1372
+ plt.text(0.0,0.78,'Negative inclination', horizontalalignment='center')
1373
+
1374
+ plt.show()
1375
+
1376
+ def GGPrand(GGPmodel, lat, n,degree=8):
1377
+ m = m_TAF(GGPmodel, lat)
1378
+ Cov = Cov_modelo(GGPmodel,lat,degree)
1379
+ X = np.random.multivariate_normal(m, Cov,n)*1000
1380
+ DI = pmag.cart2dir(X)
1381
+ return DI
1382
+
1383
+ def GGP_vMF_cdfs(GGPmodel, lat, degree,flat=1,kappa=-1,n=2E6):
1384
+
1385
+ n = int(n) #size of random samples
1386
+ m = m_TAF(GGPmodel, lat) #mean for GGP
1387
+ Cov = Cov_modelo(GGPmodel,lat,degree) #covariance matrix for GGP
1388
+ XYZ = np.random.multivariate_normal(m, Cov,n)*1000 #GGP random vectos
1389
+ XYZ /= np.linalg.norm(XYZ,axis=1)[:,np.newaxis] #normalize to unit length
1390
+
1391
+ if flat<1: #perform flattening is required
1392
+ DI = pmag.cart2dir(XYZ) #convert to D and I
1393
+ DI[:,1] = pmag.squish(DI[:,1],flat) #apply flattening
1394
+ #DI[:,1] = pmag.unsquish(DI[:,1],flat) #apply unflattening
1395
+ XYZ = pmag.dir2cart(DI) #convert to Cartesian
1396
+
1397
+ if kappa>0: #add vMF errors if required
1398
+ C = np.eye(3)/kappa #covariance matrix for vMF deviations
1399
+ XYZ += np.random.multivariate_normal([0,0,0],C,n) #add vMF deviations to vectors
1400
+ XYZ /= np.linalg.norm(XYZ,axis=1)[:,np.newaxis] #normalize to unit length
1401
+
1402
+ DI = pmag.cart2dir(XYZ)
1403
+ DI[DI[:,0]>180,0] -=360
1404
+
1405
+ #Estimate ecdfs for inclination and declination
1406
+ nI = 181
1407
+ nD = 361
1408
+ I0 = np.linspace(-90,90,nI)
1409
+ D0 = np.linspace(-180,180,nD)
1410
+ Ic = []
1411
+ Dc = []
1412
+
1413
+ for I in I0:
1414
+ Ic.append(np.sum(DI[:,1]<=I)/n)
1415
+ Icdf = PchipInterpolator(np.deg2rad(I0),Ic)
1416
+
1417
+ for D in D0:
1418
+ Dc.append(np.sum(DI[:,0]<=D)/n)
1419
+ Dcdf = PchipInterpolator(np.deg2rad(D0),Dc)
1420
+
1421
+ return Icdf, Dcdf
1422
+ def GGP_cdf(GGPmodel, lat, degree):
1423
+ """
1424
+ Calculates the cumulative distribution functions (CDFs) of inclinations and declinations for a given GGP model and latitude.
1425
+
1426
+ Parameters:
1427
+ GGPmodel (dict): Set of coefficients for a specific GGP model.
1428
+ lat (float): Latitude of interest in degrees.
1429
+ degree (int): Maximum degree of the GGP model.
1430
+
1431
+ Returns:
1432
+ tuple: A tuple containing two PchipInterpolator objects representing the CDFs.
1433
+ - Icdf: PchipInterpolator function representing the CDF of inclinations for the given latitude.
1434
+ - Dcdf: PchipInterpolator function representing the CDF of declinations for the given latitude.
1435
+ """
1436
+
1437
+ #set up grid for integration
1438
+ nI = 180
1439
+ nD = 361
1440
+ I0 = np.linspace(-90,90,nI)
1441
+ D0 = np.linspace(-180,180,nD)
1442
+ z0 = np.cos(np.deg2rad(I0))
1443
+
1444
+ #integrate WRT to dec to get marginal distribution as function of inc
1445
+ pI = np.zeros(nI)
1446
+ for j in range(nI):
1447
+ di_block = []
1448
+
1449
+ for i in range(nD):
1450
+ di_block.append([D0[i],I0[j]])
1451
+
1452
+ xyz = np.asarray(pmag.dir2cart(di_block)).T
1453
+ p0 = GGP_pdf(GGPmodel,lat,degree,xyz)
1454
+ pI[j] = np.trapz(p0, x=np.deg2rad(D0)*z0[j])
1455
+
1456
+ cI = cumtrapz(pI, x=np.deg2rad(I0),initial=0)
1457
+ Icdf = PchipInterpolator(np.deg2rad(I0),cI) #inclination marginal distribution
1458
+ Iinv = PchipInterpolator(cI,np.deg2rad(I0))
1459
+
1460
+ #integrate WRT to inc to get marginal distribution as function of dec
1461
+ pD = np.zeros(nD)
1462
+ for j in range(nD):
1463
+ di_block = []
1464
+
1465
+ for i in range(nI):
1466
+ di_block.append([D0[j],I0[i]])
1467
+
1468
+ xyz = np.asarray(pmag.dir2cart(di_block)).T
1469
+ p0 = GGP_pdf(GGPmodel,lat,degree,xyz)
1470
+ pD[j] = np.trapz(p0*np.cos(np.deg2rad(I0)), x=np.deg2rad(I0))
1471
+
1472
+ cD = cumtrapz(pD, x=np.deg2rad(D0),initial=0)
1473
+ Dcdf = PchipInterpolator(np.deg2rad(D0),cD) #declination marginal distribution
1474
+ Dinv = PchipInterpolator(cD,np.deg2rad(D0))
1475
+
1476
+ return Icdf, Dcdf
1477
+
1478
+ def AD_inc(Is,Icdf): #AD test for distribution of inclinations
1479
+ """
1480
+ Performs the Anderson-Darling test for the distribution of inclinations.
1481
+
1482
+ Parameters:
1483
+ Is (array-like): Array of observed inclinations in degrees.
1484
+ Icdf (PchipInterpolator): PchipInterpolator function representing the CDF of inclinations.
1485
+
1486
+ Returns:
1487
+ float: Test statistic for inclinations (A2).
1488
+ """
1489
+ C = Icdf(Is)
1490
+ S = np.sum((2*np.arange(1,ns+1)-1)/ns*(np.log(C)+np.log(1-np.flip(C))))
1491
+ A2 = -ns-S
1492
+
1493
+ return A2
1494
+
1495
+ def AD_dec(Ds,Dcdf): #AD test for distribution of declinations
1496
+ """
1497
+ Performs the Anderson-Darling test for the distribution of declinations.
1498
+
1499
+ Parameters:
1500
+ Ds (array-like): Array of observed declinations in degrees.
1501
+ Dcdf (PchipInterpolator): PchipInterpolator function representing the CDF of declinations.
1502
+
1503
+ Returns:
1504
+ float: Test statistic for declinations (A2).
1505
+ """
1506
+
1507
+ Ds[Ds>180] -=360
1508
+ Ds = np.deg2rad(np.sort(Ds))
1509
+ ns = np.size(Ds)
1510
+ #S = 0
1511
+ #for i in range(1,ns+1):
1512
+ # S += (2*i-1)/ns*(np.log(Dcdf(Ds[i-1]))+np.log(1-Dcdf(Ds[ns-i])))
1513
+
1514
+ C = Dcdf(Ds)
1515
+ S = np.sum((2*np.arange(1,ns+1)-1)/ns*(np.log(C)+np.log(1-np.flip(C))))
1516
+
1517
+ A2 = -ns-S
1518
+
1519
+ return A2
1520
+
1521
+
1522
+ def GGP_cdf(GGPmodel, lat, degree):
1523
+ """
1524
+ Calculates the cumulative distribution functions (CDF) of inclinations and declinations for a given GGP model and latitude.
1525
+
1526
+ Parameters:
1527
+ GGPmodel (dict): Set of coefficients for a specific GGP model.
1528
+ lat (float): Latitude of interest in degrees.
1529
+ degree (int): Maximum degree of the GGP model.
1530
+
1531
+ Returns:
1532
+ tuple: A tuple of two PchipInterpolator objects representing the CDF of inclinations (Icdf) and declinations (Dcdf) for the given latitude.
1533
+ """
1534
+
1535
+
1536
+ #set up grid for integration
1537
+ nI = 180
1538
+ nD = 361
1539
+ I0 = np.linspace(-90,90,nI)
1540
+ D0 = np.linspace(-180,180,nD)
1541
+ z0 = np.cos(np.deg2rad(I0))
1542
+
1543
+ #integrate WRT to dec to get marginal distribution as function of inc
1544
+ pI = np.zeros(nI)
1545
+ for j in range(nI):
1546
+ di_block = []
1547
+
1548
+ for i in range(nD):
1549
+ di_block.append([D0[i],I0[j]])
1550
+
1551
+ xyz = np.asarray(pmag.dir2cart(di_block)).T
1552
+ p0 = GGP_pdf(GGPmodel,lat,degree,xyz)
1553
+ pI[j] = np.trapz(p0, x=np.deg2rad(D0)*z0[j])
1554
+
1555
+ cI = cumtrapz(pI, x=np.deg2rad(I0),initial=0)
1556
+ Icdf = PchipInterpolator(np.deg2rad(I0),cI) #inclination marginal distribution
1557
+ Iinv = PchipInterpolator(cI,np.deg2rad(I0))
1558
+
1559
+ #integrate WRT to inc to get marginal distribution as function of dec
1560
+ pD = np.zeros(nD)
1561
+ for j in range(nD):
1562
+ di_block = []
1563
+
1564
+ for i in range(nI):
1565
+ di_block.append([D0[j],I0[i]])
1566
+
1567
+ xyz = np.asarray(pmag.dir2cart(di_block)).T
1568
+ p0 = GGP_pdf(GGPmodel,lat,degree,xyz)
1569
+ pD[j] = np.trapz(p0*np.cos(np.deg2rad(I0)), x=np.deg2rad(I0))
1570
+
1571
+ cD = cumtrapz(pD, x=np.deg2rad(D0),initial=0)
1572
+ Dcdf = PchipInterpolator(np.deg2rad(D0),cD) #declination marginal distribution
1573
+ Dinv = PchipInterpolator(cD,np.deg2rad(D0))
1574
+
1575
+ return Icdf, Dcdf
1576
+
1577
+ def AD_inc(Is,Icdf): #AD test for distribution of inclinations
1578
+ """
1579
+ Anderson-Darling test for the distribution of inclinations.
1580
+
1581
+ Parameters:
1582
+ Is (array-like): Array of observed inclinations in degrees.
1583
+ Icdf (callable): Pchip function representing the cumulative distribution function (CDF) of inclinations for a given latitude.
1584
+
1585
+ Returns:
1586
+ float: Test statistic (A2) for inclinations.
1587
+
1588
+ Notes:
1589
+ The Anderson-Darling (AD) test is a statistical test used to assess whether a sample of data comes from a specific probability distribution. This function calculates the AD test statistic for the distribution of inclinations based on the observed inclinations and the CDF of inclinations.
1590
+
1591
+ The AD test statistic measures the discrepancy between the observed data and the expected distribution. A larger AD test statistic indicates a greater discrepancy, suggesting that the observed data may not follow the expected distribution.
1592
+
1593
+ It is important to note that this function assumes the input inclinations are in degrees and converts them to radians internally for consistency with the CDF function.
1594
+ """
1595
+
1596
+
1597
+ Is = np.deg2rad(np.sort(Is))
1598
+ ns = np.size(Is)
1599
+
1600
+ #S = 0
1601
+ #for i in range(1,ns+1):
1602
+ # S += (2*i-1)/ns*(np.log(Icdf(Is[i-1]))+np.log(1-Icdf(Is[ns-i])))
1603
+
1604
+ #A2 = -ns-S
1605
+
1606
+ C = Icdf(Is)
1607
+ S = np.sum((2*np.arange(1,ns+1)-1)/ns*(np.log(C)+np.log(1-np.flip(C))))
1608
+ A2 = -ns-S
1609
+
1610
+ return A2
1611
+
1612
+ def AD_dec(Ds,Dcdf): #AD test for distribution of declinations
1613
+ """
1614
+ Anderson-Darling test for the distribution of declinations.
1615
+
1616
+ Parameters:
1617
+ Ds (array-like): Array of observed declinations in degrees.
1618
+ Dcdf (callable): Pchip function representing the cumulative distribution function (CDF) of declinations for a given latitude.
1619
+
1620
+ Returns:
1621
+ float: Test statistic (A2) for declinations.
1622
+
1623
+ Notes:
1624
+ The Anderson-Darling (AD) test is a statistical test used to assess whether a sample of data comes from a specific probability distribution. This function calculates the AD test statistic for the distribution of declinations based on the observed declinations and the CDF of declinations.
1625
+
1626
+ The AD test statistic measures the discrepancy between the observed data and the expected distribution. A larger AD test statistic indicates a greater discrepancy, suggesting that the observed data may not follow the expected distribution.
1627
+
1628
+ It is important to note that this function assumes the input declinations are in degrees and converts them to radians internally for consistency with the CDF function. Additionally, if any declinations are greater than 180 degrees, they are adjusted to the range -180 to 180 degrees before performing the test.
1629
+ """
1630
+
1631
+ Ds[Ds>180] -=360
1632
+ Ds = np.deg2rad(np.sort(Ds))
1633
+ ns = np.size(Ds)
1634
+ #S = 0
1635
+ #for i in range(1,ns+1):
1636
+ # S += (2*i-1)/ns*(np.log(Dcdf(Ds[i-1]))+np.log(1-Dcdf(Ds[ns-i])))
1637
+
1638
+ C = Dcdf(Ds)
1639
+ S = np.sum((2*np.arange(1,ns+1)-1)/ns*(np.log(C)+np.log(1-np.flip(C))))
1640
+
1641
+ A2 = -ns-S
1642
+
1643
+ return A2
1644
+
1645
+ def AD_test(Ds,Is,GGPmodel,lat,degree,plot=False,cite="",saveto=False): #perform the AD test on observed incs and decs
1646
+ """
1647
+ Perform the Anderson-Darling (AD) test on observed inclinations and declinations.
1648
+
1649
+ Parameters:
1650
+ Ds (array-like): Array of observed declinations in degrees.
1651
+ Is (array-like): Array of observed inclinations in degrees.
1652
+ GGPmodel (dict): GGP model definition.
1653
+ lat (float): Assumed latitude of the site.
1654
+ degree (int): Maximum degree of the GGP model.
1655
+ plot (bool, optional): Whether to plot the empirical cumulative distribution functions (ECDFs) and stereonet. Defaults to False.
1656
+ cite (str, optional): Reference or citation information. Defaults to an empty string.
1657
+ saveto (bool or str, optional): Whether to save the plot to a file. If True, saves as 'AD_test_plot.png'. If a string is provided, saves with the given filename. Defaults to False.
1658
+
1659
+ Returns:
1660
+ tuple: A tuple containing the following elements:
1661
+ H (int): 0 or 1 indicating whether the null hypothesis cannot (0) or can (1) be rejected.
1662
+ A2I (float): Test statistic (A2) for inclinations.
1663
+ A2D (float): Test statistic (A2) for declinations.
1664
+ pID (float): Representation of combined p-values (can be used for minimization to optimize latitude).
1665
+
1666
+ Notes:
1667
+ The Anderson-Darling (AD) test is a statistical test used to assess whether a sample of data comes from a specific probability distribution. This function performs the AD test on the observed inclinations and declinations based on the provided GGP model, latitude, and maximum degree.
1668
+
1669
+ The function calculates the AD test statistics (A2) for inclinations and declinations using the `AD_inc` and `AD_dec` functions, respectively. It also calculates the combined p-value (pID) based on the A2 values and reference data.
1670
+
1671
+ The null hypothesis is that the observations are drawn from the GGP at the specified latitude. The null hypothesis cannot be rejected if both A2I and A2D are less than 3.07.
1672
+
1673
+ If `plot` is set to True, the function generates a plot showing the empirical cumulative distribution functions (ECDFs) for inclinations and declinations, as well as a stereonet plot with contours of the GGP model's probability density function. The plot can be saved to a file by setting `saveto` to True or providing a filename.
1674
+ """
1675
+
1676
+ ###INPUTS###
1677
+ #Ds = array of observed declinations (degrees)
1678
+ #Is = array of observed inclinations (degrees)
1679
+ #GGPmodel = GGP model definition
1680
+ #lat = assumed latitude of site
1681
+ #degree = maximum degree of the GGP model
1682
+
1683
+ ###OUTPUTS###
1684
+ #H = 0/1 indicates null cannot/can be rejected
1685
+ #A2I = test statistic for inclinations
1686
+ #A2D = test statistic for declinatons
1687
+ #pID = representation of combined p-values (can be used for minimization to optimize latitude)
1688
+
1689
+ A2ref = np.array([0.025,0.050,0.075,0.100,0.125,0.150,0.175,0.200,0.225,0.250,0.275, \
1690
+ 0.300,0.325,0.350,0.375,0.400,0.425,0.450,0.475,0.500,0.525,0.550, \
1691
+ 0.575,0.600,0.625,0.650,0.675,0.700,0.750,0.800,0.850,0.900,0.950, \
1692
+ 1.000,1.050,1.100,1.150,1.200,1.250,1.300,1.350,1.400,1.450,1.500, \
1693
+ 1.550,1.600,1.650,1.700,1.750,1.800,1.850,1.900,1.950,2.000,2.050, \
1694
+ 2.100,2.150,2.200,2.250,2.300,2.350,2.400,2.450,2.500,2.550,2.600, \
1695
+ 2.650,2.700,2.750,2.800,2.850,2.900,2.950,3.000,3.050,3.100,3.150, \
1696
+ 3.200,3.250,3.300,3.350,3.400,3.450,3.500,3.550,3.600,3.650,3.700, \
1697
+ 3.750,3.800,3.850,3.900,3.950,4.000,4.050,4.100,4.150,4.200,4.250, \
1698
+ 4.300,4.350,4.400,4.500,4.600,4.700,4.800,4.900,5.000,5.500,6.000, \
1699
+ 7.000,8.000])
1700
+
1701
+ pref = np.array([1.0000,1.0000,1.0000,1.0000,0.9997,0.9986,0.9958,0.9904,0.9820,0.9704, \
1702
+ 0.9557,0.9382,0.9183,0.8964,0.8731,0.8487,0.8236,0.7981,0.7724,0.7468, \
1703
+ 0.7214,0.6964,0.6719,0.6480,0.6247,0.6070,0.5801,0.5588,0.5185,0.4810, \
1704
+ 0.4463,0.4142,0.3846,0.3573,0.3320,0.3088,0.2873,0.2676,0.2497,0.2323, \
1705
+ 0.2167,0.2027,0.1889,0.1765,0.1650,0.1543,0.1444,0.1352,0.1266,0.1186, \
1706
+ 0.1112,0.1043,0.0979,0.0918,0.0862,0.0810,0.0761,0.0715,0.0672,0.0632, \
1707
+ 0.0595,0.0559,0.0526,0.0496,0.0466,0.0439,0.0414,0.0390,0.0367,0.0346, \
1708
+ 0.0326,0.0308,0.0290,0.0274,0.0258,0.0244,0.0230,0.0217,0.0205,0.0193, \
1709
+ 0.0182,0.0172,0.0163,0.0154,0.0145,0.0137,0.0130,0.0122,0.0116,0.0109, \
1710
+ 0.0103,0.0098,0.0092,0.0087,0.0083,0.0078,0.0078,0.0070,0.0066,0.0062, \
1711
+ 0.0059,0.0056,0.0050,0.0045,0.0040,0.0036,0.0032,0.0029,0.0017,0.0010, \
1712
+ 0.0003,0.0001])
1713
+
1714
+
1715
+
1716
+
1717
+ n = np.size(Is)
1718
+ if n<5:
1719
+ raise ValueError("Insufficient data, N must be 5 or greater")
1720
+
1721
+ Icdf, Dcdf = GGP_cdf(GGPmodel, lat, degree) #find marginal distributions
1722
+
1723
+ A2I = AD_inc(Is,Icdf)
1724
+ pI = np.interp(A2I,A2ref,pref)
1725
+
1726
+
1727
+ A2D = AD_dec(Ds,Dcdf)
1728
+ pD = np.interp(A2D,A2ref,pref)
1729
+
1730
+ #null hypothesis that observations are drawn from the GGP at the specified latitude
1731
+ #cannot be rejected if both pI and pD are <3.07 LT: This is wrong?
1732
+ #cannot be rejected if both A2I and A2D are <3.07 LT: This is right?
1733
+
1734
+ #pID = -2*np.sum(np.log(pI)+np.log(pD)) #metric for minimization to find latitude if unknown.
1735
+ #pID=1-chi2.cdf(pID,df=2) # pIDnew
1736
+ pID=min(pI,pD) #pID per Heslop, 8/7/23
1737
+ if np.logical_and(A2I<3.07, A2D<3.07):
1738
+ H = 0
1739
+ else:
1740
+ H = 1
1741
+ #plot ecdf comparison if desired
1742
+ if plot:
1743
+ I0 = np.linspace(-90,90,180)
1744
+ D0 = np.linspace(-180,180,360)
1745
+
1746
+ Iecdf = np.zeros(np.size(I0))
1747
+ for i in range(np.size(I0)):
1748
+ Iecdf[i] = np.mean(Is<=I0[i])
1749
+
1750
+ Decdf = np.zeros(np.size(D0))
1751
+ for i in range(np.size(D0)):
1752
+ Decdf[i] = np.mean(Ds<=D0[i])
1753
+ fig=plt.figure(figsize=(8,4))
1754
+ ax1=fig.add_subplot(121)
1755
+
1756
+ ax1.plot(D0,Dcdf(np.deg2rad(D0)),'r-',linewidth=2)
1757
+ ax1.plot(D0,Decdf,'k',linestyle='dotted')
1758
+ #ax1.plot(Ds,np.zeros(np.size(Ds))+0.025,'+k')
1759
+ ax1.text(-170,.9,'a)',fontsize=14)
1760
+ if A2D<3.07:
1761
+ ax1.text(-170,.8,'Decs: Pass',color='red',fontsize=14)
1762
+ else:
1763
+ ax1.text(-170,.8,'Decs: Fail',color='red',fontsize=14)
1764
+ ax1.set_xlim([-180,180])
1765
+ ax1.set_ylim([0,1])
1766
+ ax1.minorticks_on()
1767
+ ax1.set_xticks(np.arange(-180, 180+1, 45.0))
1768
+ ax1.set_xlabel('Declination[$^o$]',fontsize=14,color='red')
1769
+ ax1.set_ylabel('Cumulative Probability',fontsize=14)
1770
+ ax2=ax1.twiny()
1771
+
1772
+ ax2.plot(I0,Icdf(np.deg2rad(I0)),'b-',linewidth=2)
1773
+ ax2.plot(I0,Iecdf,'k',linestyle='dotted')
1774
+ #ax2.plot(Is,np.ones(np.size(Is))+0.025,'+k')
1775
+ ax2.set_xlim([-90,90])
1776
+ ax2.set_ylim([0,1])
1777
+ ax2.minorticks_on()
1778
+ ax2.set_xticks(np.arange(-90, 90+1, 30.0))
1779
+ ax2.set_xlabel('Inclination[$^o$]',fontsize=14,color='blue')
1780
+ if A2I<3.07:
1781
+ ax2.text(-85,.7,'Incs: Pass',color='blue',fontsize=14)
1782
+ else:
1783
+ ax2.text(-85,.7,'Incs: Fail',color='blue',fontsize=14)
1784
+ #plt.tight_layout()
1785
+ #plt.show()
1786
+
1787
+ #plot stereonet with contours if desired
1788
+ sp,sn, XX, YY = prediction_map_GGP_su(lat,GGPmodel,degree=degree,dx=0.01,dy=0.01) #map out pdf
1789
+ ax3=fig.add_subplot(122)
1790
+ ax3.text(-1,.9,'b)',fontsize=14)
1791
+ ipmag.plot_net() #create net
1792
+
1793
+ levels = np.linspace(np.min(sp),np.max(sp),24)[1::4] #produce contour levels
1794
+ ipmag.plot_di(dec=Ds,inc=Is,color='green') #plot data
1795
+ plt.contour(XX,YY,sp,levels=levels,colors='grey',linestyle='dotted',linewidth=.1) #plot contours
1796
+ #if H:
1797
+ # plt.title(cite+': '+GGPmodel['name']+' : rejected')
1798
+ #else:
1799
+ # plt.title(cite+': '+GGPmodel['name']+' : not rejected')
1800
+ #plt.tight_layout()
1801
+ if saveto:
1802
+ plt.savefig(saveto)
1803
+ plt.show()
1804
+
1805
+ return H,A2I,A2D,pID
1806
+
1807
+ def AD_test_w_kappa(Ds,Is,GGPmodel,degree=8,lat=False,kappa=-1,plot=False,cite="",saveto=False): #perform the AD test on observed incs and decs
1808
+ """
1809
+ Perform the Anderson-Darling (AD) test on observed inclinations and declinations.
1810
+
1811
+ Parameters:
1812
+ Ds (array): Array of observed declinations (degrees).
1813
+ Is (array): Array of observed inclinations (degrees).
1814
+ GGPmodel: GGP model definition.
1815
+ degree (int): Maximum degree of the GGP model. Default is 8.
1816
+ lat (float): Assumed latitude of the site. If False, use inclinations to calculate the latitude. Default is False.
1817
+ kappa (float): The kappa value for Fisher-distributed uncertainties in directions. Default is -1 (infinity)
1818
+ plot (bool): Whether to plot the ECDF comparison and stereonet. Default is False.
1819
+ cite (str): Citation information for the GGP model. Default is an empty string.
1820
+ saveto (bool or str): If provided, save the plot to the specified file path. Default is False.
1821
+
1822
+ Returns:
1823
+ H (int): 0 if the null hypothesis cannot be rejected, 1 otherwise.
1824
+ A2I (float): Test statistic for inclinations.
1825
+ A2D (float): Test statistic for declinations.
1826
+ pID (float): Representation of combined p-values (can be used for minimization to optimize latitude).
1827
+ lat (float): Latitude of the site.
1828
+ """
1829
+ ###INPUTS###
1830
+ #Ds = array of observed declinations (degrees)
1831
+ #Is = array of observed inclinations (degrees)
1832
+ #GGPmodel = GGP model definition
1833
+ #lat = assumed latitude of site, if False, use inclinations to get lat
1834
+ #degree = maximum degree of the GGP model
1835
+ # kappa = the kappa for Fisher distributed uncertainties in directions
1836
+ ###OUTPUTS###
1837
+ #H = 0/1 indicates null cannot/can be rejected
1838
+ #A2I = test statistic for inclinations
1839
+ #A2D = test statistic for declinatons
1840
+ #pID = representation of ocmbined p-values (can be used for minimization to optimize latitude)
1841
+
1842
+ A2ref = np.array([0.025,0.050,0.075,0.100,0.125,0.150,0.175,0.200,0.225,0.250,0.275, \
1843
+ 0.300,0.325,0.350,0.375,0.400,0.425,0.450,0.475,0.500,0.525,0.550, \
1844
+ 0.575,0.600,0.625,0.650,0.675,0.700,0.750,0.800,0.850,0.900,0.950, \
1845
+ 1.000,1.050,1.100,1.150,1.200,1.250,1.300,1.350,1.400,1.450,1.500, \
1846
+ 1.550,1.600,1.650,1.700,1.750,1.800,1.850,1.900,1.950,2.000,2.050, \
1847
+ 2.100,2.150,2.200,2.250,2.300,2.350,2.400,2.450,2.500,2.550,2.600, \
1848
+ 2.650,2.700,2.750,2.800,2.850,2.900,2.950,3.000,3.050,3.100,3.150, \
1849
+ 3.200,3.250,3.300,3.350,3.400,3.450,3.500,3.550,3.600,3.650,3.700, \
1850
+ 3.750,3.800,3.850,3.900,3.950,4.000,4.050,4.100,4.150,4.200,4.250, \
1851
+ 4.300,4.350,4.400,4.500,4.600,4.700,4.800,4.900,5.000,5.500,6.000, \
1852
+ 7.000,8.000])
1853
+
1854
+ pref = np.array([1.0000,1.0000,1.0000,1.0000,0.9997,0.9986,0.9958,0.9904,0.9820,0.9704, \
1855
+ 0.9557,0.9382,0.9183,0.8964,0.8731,0.8487,0.8236,0.7981,0.7724,0.7468, \
1856
+ 0.7214,0.6964,0.6719,0.6480,0.6247,0.6070,0.5801,0.5588,0.5185,0.4810, \
1857
+ 0.4463,0.4142,0.3846,0.3573,0.3320,0.3088,0.2873,0.2676,0.2497,0.2323, \
1858
+ 0.2167,0.2027,0.1889,0.1765,0.1650,0.1543,0.1444,0.1352,0.1266,0.1186, \
1859
+ 0.1112,0.1043,0.0979,0.0918,0.0862,0.0810,0.0761,0.0715,0.0672,0.0632, \
1860
+ 0.0595,0.0559,0.0526,0.0496,0.0466,0.0439,0.0414,0.0390,0.0367,0.0346, \
1861
+ 0.0326,0.0308,0.0290,0.0274,0.0258,0.0244,0.0230,0.0217,0.0205,0.0193, \
1862
+ 0.0182,0.0172,0.0163,0.0154,0.0145,0.0137,0.0130,0.0122,0.0116,0.0109, \
1863
+ 0.0103,0.0098,0.0092,0.0087,0.0083,0.0078,0.0078,0.0070,0.0066,0.0062, \
1864
+ 0.0059,0.0056,0.0050,0.0045,0.0040,0.0036,0.0032,0.0029,0.0017,0.0010, \
1865
+ 0.0003,0.0001])
1866
+
1867
+
1868
+ di_block=np.column_stack((Ds,Is))
1869
+ if not lat: #use incs from data set to determine (paleo)lat
1870
+ #Is_f=pmag.unsquish(Is,flat)
1871
+ #di_block=np.column_stack((Ds,Is_f))
1872
+ pars=pmag.doprinc(di_block) # calculate principal component parameters
1873
+ lat=np.absolute(pmag.plat(pars['inc']))
1874
+ print ('lat from inc: ',lat)#DEBUG
1875
+
1876
+ n = np.size(Is)
1877
+ if n<5:
1878
+ raise ValueError("Insufficient data, N must be 5 or greater")
1879
+
1880
+ Icdf, Dcdf = GGP_vMF_cdfs(GGPmodel, lat, degree,kappa=kappa) #find marginal distributions
1881
+
1882
+ A2I = AD_inc(Is,Icdf)
1883
+ pI = np.interp(A2I,A2ref,pref)
1884
+
1885
+
1886
+ A2D = AD_dec(Ds,Dcdf)
1887
+ pD = np.interp(A2D,A2ref,pref)
1888
+
1889
+ #null hypothesis that observations are drawn from the GGP at the specified latitude
1890
+ #cannot be rejected if both pI and pD are <3.07
1891
+
1892
+ #pID = -2*np.sum(np.log(pI)+np.log(pD)) #metric for minimization to find latitude if unknown.
1893
+ #pID = 1-chi2.cdf(pID, df=2) #pIDnew
1894
+ pID=min(pI,pD) #pID per Heslop, 8/7/23
1895
+
1896
+ if np.logical_and(A2I<3.07, A2D<3.07):
1897
+ H = 0
1898
+ else:
1899
+ H = 1
1900
+
1901
+ #plot ecdf comparison if desired
1902
+ if plot:
1903
+ #plot stereonet with contours if desired
1904
+ print ('lat: ',lat)#DEBUG
1905
+ fig=plt.figure(figsize=(8,4))
1906
+ ax1=fig.add_subplot(121)
1907
+ sp,sn, XX, YY = prediction_map_GGP_su(lat,GGPmodel,degree=degree,dx=0.01,dy=0.01) #map out pdf
1908
+ ax1.text(-1,.9,'a)',fontsize=14)
1909
+ ipmag.plot_net() #create net
1910
+
1911
+ levels = np.linspace(np.min(sp),np.max(sp),24)[1::4] #produce contour levels
1912
+ ipmag.plot_di(dec=Ds,inc=Is,color='green') #plot data
1913
+ plt.contour(XX,YY,sp,levels=levels,colors='grey',linestyle='dotted',linewidth=.1) #plot contours
1914
+ plt.title('lat='+str(np.round(lat,1))+'; $\kappa$: '+str(kappa))
1915
+ I0 = np.linspace(-90,90,180)
1916
+ D0 = np.linspace(-180,180,360)
1917
+
1918
+ Iecdf = np.zeros(np.size(I0))
1919
+ for i in range(np.size(I0)):
1920
+ Iecdf[i] = np.mean(Is<=I0[i])
1921
+
1922
+ Decdf = np.zeros(np.size(D0))
1923
+ for i in range(np.size(D0)):
1924
+ Decdf[i] = np.mean(Ds<=D0[i])
1925
+ ax2=fig.add_subplot(122)
1926
+
1927
+ ax2.plot(D0,Dcdf(np.deg2rad(D0)),'r-',linewidth=2)
1928
+ ax2.plot(D0,Decdf,'k',linestyle='dotted')
1929
+ #ax1.plot(Ds,np.zeros(np.size(Ds))+0.025,'+k')
1930
+ ax2.text(-170,.9,'b)',fontsize=14)
1931
+ if A2D<3.07:
1932
+ ax2.text(-170,.8,'Decs: Pass',color='red',fontsize=14)
1933
+ else:
1934
+ ax2.text(-170,.8,'Decs: Fail',color='red',fontsize=14)
1935
+ ax2.set_xlim([-180,180])
1936
+ ax2.set_ylim([0,1])
1937
+ ax2.minorticks_on()
1938
+ ax2.set_xticks(np.arange(-180, 180+1, 45.0))
1939
+ ax2.set_xlabel('Declination[$^o$]',fontsize=14,color='red')
1940
+ ax2.set_ylabel('Cumulative Probability',fontsize=14)
1941
+ ax3=ax2.twiny()
1942
+
1943
+ ax3.plot(I0,Icdf(np.deg2rad(I0)),'b-',linewidth=2)
1944
+ ax3.plot(I0,Iecdf,'k',linestyle='dotted')
1945
+ #ax2.plot(Is,np.ones(np.size(Is))+0.025,'+k')
1946
+ ax3.set_xlim([-90,90])
1947
+ ax3.set_ylim([0,1])
1948
+ ax3.minorticks_on()
1949
+ ax3.set_xticks(np.arange(-90, 90+1, 30.0))
1950
+ ax3.set_xlabel('Inclination[$^o$]',fontsize=14,color='blue')
1951
+ if A2I<3.07:
1952
+ ax3.text(-85,.7,'Incs: Pass',color='blue',fontsize=14)
1953
+ else:
1954
+ ax3.text(-85,.7,'Incs: Fail',color='blue',fontsize=14)
1955
+ plt.tight_layout()
1956
+ if saveto:
1957
+ plt.savefig(saveto)
1958
+ plt.show()
1959
+ #plt.show()
1960
+
1961
+
1962
+ return H,A2I,A2D,pID,lat
1963
+
1964
+ def GGPmodels(model='TK03_GAD'):
1965
+ """
1966
+ Returns dictionary of specified Giant Gaussian Model
1967
+
1968
+ Parameters:
1969
+ model (string): name of desired model
1970
+ one of the following GGP models
1971
+ CP88: from Constable and Parker, 1988
1972
+ QC96: Quidelleur and Courtillot
1973
+ CJ98: Constable and Johnson
1974
+ TK03_GAD: Tauxe and Kent, 2004
1975
+ BCE19_GAD: Brandt et al., 2019
1976
+ Returns:
1977
+ dictionary of requested model
1978
+ """
1979
+
1980
+ CP88 = {"g10" : -30, "g20" : -1.8, "g30" : 0.0, "sig10" : 3.0, "sig11": 3.0,
1981
+ "sig20" : 0.0 , "sig21" : 0.0, "sig22" : 0.0, "alpha": 27.7, "beta": 1.0, "name":'CP88'}
1982
+ QC96 = {"g10" : -30, "g20" : -1.2, "g30" : 0.0, "sig10" : 3.0, "sig11": 3.0,
1983
+ "sig20" : 1.3 , "sig21" : 4.3, "sig22" : 1.3, "alpha": 27.7, "beta": 1.0, "name":'QC96'}
1984
+ CJ98 = {"g10" : -30, "g20" : -1.5, "g30" : 0.0, "sig10" : 11.72, "sig11": 1.67,
1985
+ "sig20" : 1.16 , "sig21" : 4.06, "sig22" : 1.16, "alpha": 15.0, "beta": 1.0, "name":'CJ98'}
1986
+ TK03 = {"g10" : -18, "g20" : 0.0, "g30" : 0.0, "sig10" : 0.0, "sig11": 0.0,
1987
+ "sig20" : 0.0, "sig21" : 0.0, "sig22" : 0.0, "alpha": 7.5, "beta": 3.8, "name":'TK03_GAD'}
1988
+ BCE19 = {"g10" : -18, "g20" : 0.0, "g30" : 0.0, "sig10" : 0.0, "sig11": 0.0,
1989
+ "sig20" : 0.0, "sig21" : 0.0, "sig22" : 0.0, "alpha": 6.7, "beta": 4.2, "name":'BCE19_GAD'}
1990
+ THG24 = {"g10" : -18, "g20" : -.1, "g30" : 0.4, "sig10" : 0.0, "sig11": 0.0,
1991
+ "sig20" : 0.0, "sig21" : 0.0, "sig22" : 0.0, "alpha": 7.25, "beta": 3.75, "name":'THG24'}
1992
+ models=[BCE19,TK03,QC96,CJ98,CP88,THG24]
1993
+ for m in models:
1994
+ if m['name']==model:
1995
+ return m
1996
+ print ('no such model name')
1997
+ return False
1998
+
1999
+ def svei_di(di_block,model='TK03_GAD',kappa=-1,lat=False, polarity=False,plot=True,save=False,saveto=""): # tests di_block against model
2000
+ """
2001
+ Makes plots from a di_block and performs an AD, E and V2 tests with a specified GGP model.
2002
+
2003
+ Parameters:
2004
+ di_block (numpy.ndarray): An array of directional data represented as (declination, inclination) pairs.
2005
+ model (str, optional): The name of the GGP model to use. Default is 'TK03_GAD'.
2006
+ options are:
2007
+ CP88: from Constable and Parker, 1988
2008
+ QC96: Quidelleur and Courtillot
2009
+ CJ98: Constable and Johnson
2010
+ TK03_GAD: Tauxe and Kent, 2004
2011
+ BCE19_GAD: Brandt et al., 2019
2012
+
2013
+ kappa (float, optional): The kappa value for Fisher distribution of directions. Default is -1 (infinity)
2014
+ lat (float, optional): The latitude for paleolatitude correction. Default is False., When False, uses the latitude estimated from the dataset inclination
2015
+ polarity (bool or str, optional): Determines the polarity of the directional data. Default is False (use all directions).
2016
+ - False: Combine normal and reverse directions (non-polarized).
2017
+ - 'N': Use normal directions only.
2018
+ - 'R': Use reverse directions only.
2019
+ plot (bool, optional): Whether to plot the data. Default is True.
2020
+ save (bool, optional): Whether to save the plots. Default is False.
2021
+ saveto (str, optional): The path to save the plots (if save is True). Default is an empty string.
2022
+
2023
+ Returns:
2024
+ tuple: A tuple containing the following elements:
2025
+ - H (float): The result of the AD test statistic.
2026
+ - A2I (float): The result of the inclination-only AD test statistic.
2027
+ - A2D (float): The result of the declination-only AD test statistic.
2028
+ - pID (float): The p-value for the inclination and declination AD tests.
2029
+ - lat (float): The corrected paleolatitude.
2030
+ - di_block (numpy.ndarray): The modified di_block array after transformations.
2031
+ """
2032
+ GGPmodel=GGPmodels(model=model) # get model dictionary
2033
+
2034
+ pars=pmag.doprinc(di_block) # calculate principal component parameters
2035
+ # rotate Ds
2036
+ if (pars['dec']>90) & (pars['dec']<270):pars['dec']=(pars['dec']-180)%360
2037
+ decs,incs=(di_block.transpose()[0]-pars['dec'])%360,di_block.transpose()[1]
2038
+ #incs=pmag.unsquish(incs,flat)# do the unflattening requested
2039
+ rot_block=np.array((decs,incs)).transpose()
2040
+ if not polarity: # combine NR
2041
+ flipped=pmag.flip(rot_block,combine=True)
2042
+ ppars=pmag.fisher_mean(flipped)
2043
+ flipped=np.array(flipped).transpose()
2044
+ if (ppars['dec']>90) & (ppars['dec']<270):
2045
+ Ds=(flipped[0]-180)%360
2046
+ else:
2047
+ Ds=(flipped[0])
2048
+ # Ds=flipped[0]-180
2049
+ Is=flipped[1]
2050
+ else:
2051
+ N,R =pmag.flip(rot_block,combine=False)
2052
+ if polarity == 'N':
2053
+ ppars=pmag.fisher_mean(N)
2054
+ flipped=np.array(N).transpose()
2055
+ Ds=(flipped[0])
2056
+ else:
2057
+ flipped=np.array(R).transpose()
2058
+ ppars=pmag.fisher_mean(R)
2059
+ if (ppars['dec']>90) & (ppars['dec']<270):
2060
+ Ds=(flipped[0]-180)%360
2061
+ else:
2062
+ Ds=(flipped[0])
2063
+ # Ds=flipped[0]-180
2064
+ Is=flipped[1]
2065
+ di_block=np.column_stack((Ds,Is))
2066
+ if save:
2067
+ H,A2I,A2D,pID,lat = svei_test(Ds,Is,GGPmodel,lat=lat,kappa=kappa,plot=plot,saveto=saveto)
2068
+ else:
2069
+ H,A2I,A2D,pID,lat = svei_test(Ds,Is,GGPmodel,lat=lat,kappa=kappa,plot=plot)
2070
+ return H,A2I,A2D,pID,lat,di_block
2071
+
2072
+ def find_flat(di_block,save=False,polarity=False,plot=False,study=False,kappa=50,saveto='',model_name='THG24',
2073
+ quick=False,verbose=False,num_sims=1000):
2074
+ """
2075
+ Finds the best unflattening factor for a given di_block and performs analysis.
2076
+
2077
+ Parameters:
2078
+ di_block (numpy.ndarray): An array of directional data represented as (declination, inclination) pairs.
2079
+ save (bool, optional): Whether to save the plots. Default is False.
2080
+ polarity (bool, optional): Determines the polarity of the directional data. Default is False.
2081
+ if polarity =='N', use only normal data
2082
+ if polarity =='R', use only reverse data
2083
+ if polarity ==False, use all data, flipping reverse to antipode
2084
+
2085
+ plot (bool, optional): Whether to plot the data. Default is False.
2086
+ study (bool, optional): Whether the analysis is part of a study. Default is False.
2087
+ saveto (str, optional): The path to save the plots (if save is True). Default is 'find_flat.pdf'.
2088
+ quick (bool, optional): Whether to perform a quick analysis with a larger step size. Default is False as this is just for
2089
+ a quick look and does not provide a statistically robust answer.
2090
+ num_sims (int, optional): Number of simulations to run (higher number gives more reproducible results). Default is 1000
2091
+
2092
+ Returns:
2093
+ pandas.DataFrame: A DataFrame containing the following columns:
2094
+ - flat: Unflattening factor values.
2095
+ - study: Whether the analysis is part of a study.
2096
+ - kappa: The kappa value used.
2097
+ - A2D: A2D values.
2098
+ - A2I: A2I values.
2099
+ - H: AD test statistics.
2100
+ - lat: Corrected paleolatitudes.
2101
+ - inc: Inclinations.
2102
+ - pID: pIDmin values for the inclination and declination AD tests.
2103
+ - V2dec (float): Declination of minor principle component of data set.
2104
+ - V2sim_min, V2sim_max (floats): Bounds on V2dec from Monte Carlo simulation
2105
+ - V2_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2106
+ - E (float): Elongation (tau2/tau3) of data set
2107
+ - Esim_min, Esim_max (floats): Bounds on elongation from Monte Carlo simulation
2108
+ - E_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2109
+ """
2110
+ model=GGPmodels(model=model_name) # set model to the 'best' one
2111
+ print ('using model: ',model_name)
2112
+ degree=8 #
2113
+ N=len(di_block)
2114
+ As_df=pd.DataFrame(columns=['flat'])
2115
+ flat_min=.3
2116
+ flat_incr=.01
2117
+ flats=np.arange(1,flat_min,-flat_incr)
2118
+ if quick:
2119
+ flats=np.arange(1,flat_min,-.05)
2120
+ #flats=np.arange(1,flat_min,-.2) # for really quick
2121
+ #num_sims=10 # this is just for debugging
2122
+ A2Is,A2Ds,Hs,lats,incs,pIDs=[],[],[],[],[],[]
2123
+ V2s,Es=[],[]
2124
+ V2mins,V2maxs,Emins,Emaxs=[],[],[],[]
2125
+ V2_results,E_results,kappas=[],[],[]
2126
+ # rotate Ds
2127
+ pars=pmag.doprinc(di_block) # calculate principal component parameters
2128
+ # rotate Ds
2129
+ if (pars['dec']>90) & (pars['dec']<270):pars['dec']=(pars['dec']-180)%360
2130
+ Ds,Is=(di_block.transpose()[0]-pars['dec'])%360,di_block.transpose()[1]
2131
+ #incs=pmag.unsquish(incs,flat)# do the unflattening requested
2132
+ rot_block=np.array((Ds,Is)).transpose()
2133
+ flipped=pmag.flip(rot_block,combine=True)
2134
+ ppars=pmag.fisher_mean(flipped)
2135
+ flipped=np.array(flipped).transpose()
2136
+ if (ppars['dec']>90) & (ppars['dec']<270):
2137
+ Ds=(flipped[0]-180)%360
2138
+ else:
2139
+ Ds=(flipped[0])
2140
+ Is=flipped[1]
2141
+ rot_block=np.column_stack((Ds,Is))
2142
+ if verbose: print ('Testing distribution against model ',model_name)
2143
+ if saveto:
2144
+ save_svei=saveto.rstrip('.pdf')+'_svei_test.pdf'
2145
+ else:
2146
+ save_svei=False
2147
+ res_dict=svei_test(rot_block,kappa=kappa,num_sims=num_sims,plot=plot,model_name=model_name,saveto=save_svei)
2148
+ if (res_dict['H']==0)&(res_dict['V2_result']==1)&(res_dict['E_result']==1):
2149
+ res_dict['flat']=1
2150
+ res_dict['study']=study
2151
+ res_dict['kappa']=kappa
2152
+ if verbose:
2153
+ print ('distribution is consistent with field model ',model_name)
2154
+ print ('You are done now')
2155
+ return [res_dict] # don't do find_flat if none necessary
2156
+ else:
2157
+ if verbose:
2158
+ print ('distribution is not consistent with field model ',model_name)
2159
+ print ('proceeding with find_flat routine, be patient')
2160
+ for flat in flats:
2161
+ if verbose: print ('flat: ',np.round(flat,2))
2162
+ Is=rot_block.transpose()[1]
2163
+ incs_f=pmag.unsquish(Is,flat)
2164
+ unflat_block=np.column_stack((Ds,incs_f))
2165
+ res_dict=svei_test(unflat_block,kappa=kappa,num_sims=num_sims,plot=False,model_name=model_name,saveto=False)
2166
+ if verbose: print (res_dict)
2167
+ lat=res_dict['lat']
2168
+ V2mins.append(res_dict['V2sim_min'])
2169
+ V2maxs.append(res_dict['V2sim_max'])
2170
+ Emins.append(res_dict['Esim_min'])
2171
+ Emaxs.append(res_dict['Esim_max'])
2172
+ kappas.append(res_dict['kappa'])
2173
+ A2Is.append(res_dict['A2I'])
2174
+ A2Ds.append(res_dict['A2D'])
2175
+ Hs.append(res_dict['H'])
2176
+ lats.append(res_dict['lat'])
2177
+ inc=pmag.pinc(lat)
2178
+ incs.append(inc)
2179
+ pIDs.append(res_dict['pID'])
2180
+ V2_results.append(res_dict['V2_result'])
2181
+ E_results.append(res_dict['E_result'])
2182
+ V2s.append(res_dict['V2dec'])
2183
+ Es.append(res_dict['E'])
2184
+
2185
+ As_df['flat']=flats
2186
+ As_df['study']=study
2187
+ As_df['kappa']=kappas
2188
+ As_df['A2D']=A2Ds
2189
+ As_df['A2I']=A2Is
2190
+ As_df['H']=Hs
2191
+ As_df['lat']=lats
2192
+ As_df['inc']=incs
2193
+ As_df['pID']=pIDs
2194
+ As_df['V2']=V2s
2195
+ As_df['V2min']=V2mins
2196
+ As_df['V2max']=V2mins
2197
+ As_df['E']=Es
2198
+ As_df['Emin']=Emins
2199
+ As_df['Emax']=Emaxs
2200
+
2201
+ As_df['V2_results']=V2_results
2202
+ As_df['E_results']=E_results
2203
+ goodflats=As_df[(As_df['H']==0)&(As_df['V2_results']==1)&(As_df['E_results']==1)]['flat'].values
2204
+ goodlats=As_df[(As_df['H']==0)&(As_df['V2_results']==1)&(As_df['E_results']==1)]['lat'].values
2205
+ goodincs=As_df[(As_df['H']==0)&(As_df['V2_results']==1)&(As_df['E_results']==1)]['inc'].values
2206
+ if len(goodincs)>0:
2207
+ pIDmax=np.array(pIDs).max()
2208
+ #best=As_df[As_df['pID']==pIDmax]
2209
+ #best_flat=np.round(best['flat'].values[0],2)
2210
+ #best_inc=np.round(best['inc'].values[0],1)
2211
+ best_inc=goodincs.min()+(goodincs.max()-goodincs.min())/2
2212
+ best_inc=np.round(best_inc,1)
2213
+ best_flat=goodflats.min()+(goodflats.max()-goodflats.min())/2
2214
+ best_flat=np.round(best_flat,2)
2215
+ if plot:
2216
+ fig=plt.figure(figsize=(8,10))
2217
+ if kappa ==-1:
2218
+ kap='Inf'
2219
+ else:
2220
+ kap=str(kappa)
2221
+
2222
+ #plt.title('$\kappa$ = '+kap)
2223
+
2224
+ ax1=fig.add_subplot(321) #V2dec versus flat
2225
+ ax2=fig.add_subplot(322) # E versus flat
2226
+ ax3=fig.add_subplot(323)# A2I,A2D versus flat
2227
+ ax4=fig.add_subplot(324)# pID versus flat
2228
+ ax1.plot(flats,V2s,'r-',label='V2dec')
2229
+ ax1.plot(flats,V2mins,'r--',label='bounds')
2230
+ ax1.plot(flats,V2maxs,'r--')
2231
+ ax1.set_xlim(1,flat_min)
2232
+ ax1.set_ylabel('V2dec')
2233
+ #ax1.legend(loc='upper right')
2234
+ ax2.plot(flats,Es,'b-',label='Es')
2235
+ ax2.plot(flats,Emins,'b--',label='bounds')
2236
+ ax2.plot(flats,Emaxs,'b--')
2237
+ ax2.set_xlim(1,flat_min)
2238
+ #ax2.legend(loc='upper right')
2239
+ ax2.set_ylabel('E')
2240
+
2241
+ ax3.plot(flats,A2Is,'b-',label='A2I')
2242
+ ax3.plot(flats,A2Ds,'r-',label='A2D')
2243
+ ax3.axhline(3.07,color='black',linestyle='dotted',label='threshold')
2244
+ ax3.set_xlim(1,flat_min)
2245
+ #ax3.legend(loc='upper center')
2246
+ ax3.set_xlabel('Unflattening factor')
2247
+ ax3.set_ylabel('A2I, A2D')
2248
+ lns1=ax4.plot(flats,pIDs,'g',label='pID_min')
2249
+ #ax4.plot([best_flat],[pIDmax],'b*')
2250
+ #ax4.plot([best_flat],[np.array(pIDs).max()],'g*')
2251
+ ax4.axhline(.025,color='blue',linestyle='dotted')
2252
+ ax4.set_xlim(1,flat_min)
2253
+ ax4.set_ylim(0,np.array(pIDs).max()+.1)
2254
+ if np.array(pIDs).max()<.1:
2255
+ ax4.set_ylim(0,.1)
2256
+ ax4.set_ylabel('pID_min',color='green')
2257
+ ax4.set_xlabel('Unflattening factor')
2258
+ ax4a=ax4.twinx()
2259
+
2260
+ lns2=ax4a.plot(flats,incs,color='black',linestyle='dashed',label='Inclination')
2261
+ ax4a.set_ylabel('Inclination',rotation=270,labelpad=10)
2262
+ lns = lns1+lns2
2263
+ labs = [l.get_label() for l in lns]
2264
+ #ax4.legend(lns,labs,loc='upper center')
2265
+
2266
+ if len(goodflats):
2267
+ if verbose:print ('corrected inc: ',best_inc)
2268
+ #ax4a.plot([goodflats[0],goodflats[0]],[0,goodincs[0]],linestyle='dashed',color='black')
2269
+ #ax4a.plot([goodflats[-1],goodflats[-1]],[0,goodincs[-1]],linestyle='dashed',color='black')
2270
+ #ax4.set_title('Unflattening factor: '+str(best_flat)+'; Inc: '+str(best_inc))
2271
+
2272
+ ax5=fig.add_subplot(325) # eqarea of original
2273
+
2274
+ ipmag.plot_net()
2275
+ ipmag.plot_di(di_block=di_block,color='k')
2276
+ ipmag.plot_di(di_block=rot_block,color='b')
2277
+ ax5.set_title('Original/Rotated')
2278
+ ax6=fig.add_subplot(326)
2279
+ if len(goodflats):
2280
+
2281
+ decs=rot_block.transpose()[0]
2282
+ incs=rot_block.transpose()[1]
2283
+ incs_unflat=pmag.unsquish(incs,best_flat)
2284
+ ipmag.plot_net()
2285
+
2286
+ ipmag.plot_di(dec=decs,inc=incs_unflat)
2287
+ #ax6.set_title('fs= '+str(np.round(goodflats[0],2))+'-'+str(np.round(goodflats[-1],2))+
2288
+ # '; incs= '+str(np.round(goodincs[0],1))+'-'+str(np.round(goodincs[-1],1)),fontsize=14)
2289
+ ax6.set_title('fs= '+str(best_flat)+'$_{'+str(np.round(goodflats[0],2))+'}^{'+str(np.round(goodflats[-1],2))+'}$;'
2290
+ +' incs = '+str(best_inc)+'$_{'+str(np.round(goodincs[0],1))+'}^{'+str(np.round(goodincs[-1],1))+'}$')
2291
+ ax1.axvline(goodflats[0],color='black',linestyle='dotted')
2292
+ ax1.axvline(goodflats[-1],color='black',linestyle='dotted')
2293
+ ax2.axvline(goodflats[0],color='black',linestyle='dotted')
2294
+ ax2.axvline(goodflats[-1],color='black',linestyle='dotted')
2295
+ ax3.axvline(goodflats[0],color='black',linestyle='dotted')
2296
+ ax3.axvline(goodflats[-1],color='black',linestyle='dotted')
2297
+ ax4.axvline(goodflats[0],color='black',linestyle='dotted')
2298
+ ax4.axvline(goodflats[-1],color='black',linestyle='dotted')
2299
+ else:
2300
+ ax5.set_title('Original - no passing f')
2301
+ txtstring='$\kappa$: '+kap+'; model:'+model_name
2302
+ ax1.set_title(txtstring)
2303
+ ax1.text(.05, .92,'a)',transform=ax1.transAxes)
2304
+ ax2.text(.05,.92,'b)',transform=ax2.transAxes)
2305
+ ax3.text(.05,.92,'c)',transform=ax3.transAxes)
2306
+ ax4.text(.05,.92,'d)',transform=ax4.transAxes)
2307
+ ax5.text(.25,.92,'e)',transform=ax5.transAxes)
2308
+ ax6.text(.25,.92,'f)',transform=ax6.transAxes)
2309
+
2310
+ plt.tight_layout()
2311
+ if save:
2312
+ plt.savefig(saveto)
2313
+ return(As_df)
2314
+
2315
+ def svei_test(di_block,model_name='TK03_GAD',degree=8,lat=False,kappa=-1,plot=False,cite="",saveto=False,
2316
+ num_sims=1000,verbose=False): #perform the AD test on observed incs and decs
2317
+ """
2318
+ Perform the Anderson-Darling (AD) test on observed inclinations and declinations and Monte Carlo
2319
+ simulation to estimate 95% confidence bounds on V2dec and E
2320
+
2321
+ Parameters:
2322
+ di_block=Array of declinations,inclinations (degrees)
2323
+ model_name: GGP model name.
2324
+ degree (int): Maximum degree of the GGP model. Default is 8.
2325
+ lat (float): Assumed latitude of the site. If False, use inclinations to calculate the latitude. Default is False.
2326
+ kappa (float): The kappa value for Fisher-distributed uncertainties in directions. Default is -1 (infinity)
2327
+ plot (bool): Whether to plot the ECDF comparison, stereonet and CDFs for V2dec and E. Default is False.
2328
+ cite (str): Citation information for the GGP model. Default is an empty string.
2329
+ saveto (bool or str): If provided, save the plot to the specified file path. Default is False.
2330
+ num_sims (int): number of Monte Carlo simulations for V2dec, E bounds calculation
2331
+ verbose (bool): if True, print commentary
2332
+
2333
+ Returns:
2334
+ res_dict (dict): Dictionary with the following parameters:
2335
+ kappa (float): kappa used in simulations
2336
+ H (int): 0 if the null hypothesis cannot be rejected, 1 otherwise.
2337
+ A2I (float): Test statistic for inclinations.
2338
+ A2D (float): Test statistic for declinations.
2339
+ pID (float): Representation of combined p-values (can be used for minimization to optimize latitude).
2340
+ lat (float): Latitude of the site.
2341
+ V2dec (float): Declination of minor principle component of data set.
2342
+ V2sim_min, V2sim_max (floats): Bounds on V2dec from Monte Carlo simulation
2343
+ V2_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2344
+ E (float): Elongation (tau2/tau3) of data set
2345
+ Esim_min, Esim_max (floats): Bounds on elongation from Monte Carlo simulation
2346
+ E_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2347
+ """
2348
+ ###INPUTS###
2349
+ #Ds = array of observed declinations (degrees)
2350
+ #Is = array of observed inclinations (degrees)
2351
+ #model_name = GGP model name
2352
+ #lat = assumed latitude of site, if False, use inclinations to get lat
2353
+ #degree = maximum degree of the GGP model
2354
+ # kappa = the kappa for Fisher distributed uncertainties in directions
2355
+ ###OUTPUTS###
2356
+ #H = 0/1 indicates null cannot/can be rejected
2357
+ #A2I = test statistic for inclinations
2358
+ #A2D = test statistic for declinatons
2359
+ #pID = representation of ocmbined p-values (can be used for minimization to optimize latitude)
2360
+
2361
+ A2ref = np.array([0.025,0.050,0.075,0.100,0.125,0.150,0.175,0.200,0.225,0.250,0.275, \
2362
+ 0.300,0.325,0.350,0.375,0.400,0.425,0.450,0.475,0.500,0.525,0.550, \
2363
+ 0.575,0.600,0.625,0.650,0.675,0.700,0.750,0.800,0.850,0.900,0.950, \
2364
+ 1.000,1.050,1.100,1.150,1.200,1.250,1.300,1.350,1.400,1.450,1.500, \
2365
+ 1.550,1.600,1.650,1.700,1.750,1.800,1.850,1.900,1.950,2.000,2.050, \
2366
+ 2.100,2.150,2.200,2.250,2.300,2.350,2.400,2.450,2.500,2.550,2.600, \
2367
+ 2.650,2.700,2.750,2.800,2.850,2.900,2.950,3.000,3.050,3.100,3.150, \
2368
+ 3.200,3.250,3.300,3.350,3.400,3.450,3.500,3.550,3.600,3.650,3.700, \
2369
+ 3.750,3.800,3.850,3.900,3.950,4.000,4.050,4.100,4.150,4.200,4.250, \
2370
+ 4.300,4.350,4.400,4.500,4.600,4.700,4.800,4.900,5.000,5.500,6.000, \
2371
+ 7.000,8.000])
2372
+
2373
+ pref = np.array([1.0000,1.0000,1.0000,1.0000,0.9997,0.9986,0.9958,0.9904,0.9820,0.9704, \
2374
+ 0.9557,0.9382,0.9183,0.8964,0.8731,0.8487,0.8236,0.7981,0.7724,0.7468, \
2375
+ 0.7214,0.6964,0.6719,0.6480,0.6247,0.6070,0.5801,0.5588,0.5185,0.4810, \
2376
+ 0.4463,0.4142,0.3846,0.3573,0.3320,0.3088,0.2873,0.2676,0.2497,0.2323, \
2377
+ 0.2167,0.2027,0.1889,0.1765,0.1650,0.1543,0.1444,0.1352,0.1266,0.1186, \
2378
+ 0.1112,0.1043,0.0979,0.0918,0.0862,0.0810,0.0761,0.0715,0.0672,0.0632, \
2379
+ 0.0595,0.0559,0.0526,0.0496,0.0466,0.0439,0.0414,0.0390,0.0367,0.0346, \
2380
+ 0.0326,0.0308,0.0290,0.0274,0.0258,0.0244,0.0230,0.0217,0.0205,0.0193, \
2381
+ 0.0182,0.0172,0.0163,0.0154,0.0145,0.0137,0.0130,0.0122,0.0116,0.0109, \
2382
+ 0.0103,0.0098,0.0092,0.0087,0.0083,0.0078,0.0078,0.0070,0.0066,0.0062, \
2383
+ 0.0059,0.0056,0.0050,0.0045,0.0040,0.0036,0.0032,0.0029,0.0017,0.0010, \
2384
+ 0.0003,0.0001])
2385
+ GGPmodel=GGPmodels(model=model_name)
2386
+ Ds=di_block.T[0]
2387
+ Is=di_block.T[1]
2388
+ pars=pmag.doprinc(di_block) # calculate principal component parameters
2389
+ if not lat: lat=np.absolute(pmag.plat(pars['inc']))
2390
+ if (pars['dec']>90) & (pars['dec']<270):pars['dec']=(pars['dec']-180)%360
2391
+ Ds=(Ds-pars['dec'])%360
2392
+ rot_block=np.array((Ds,Is)).transpose()
2393
+ flipped=pmag.flip(rot_block,combine=True)
2394
+ ppars=pmag.fisher_mean(flipped)
2395
+ flipped=np.array(flipped).transpose()
2396
+ if (ppars['dec']>90) & (ppars['dec']<270):
2397
+ Ds=(flipped[0]-180)%360
2398
+ else:
2399
+ Ds=(flipped[0])
2400
+ Is=flipped[1]
2401
+ di_block=np.column_stack((Ds,Is))
2402
+
2403
+ n = np.size(Is)
2404
+ if n<5:
2405
+ raise ValueError("Insufficient data, N must be 5 or greater")
2406
+
2407
+ Icdf, Dcdf = GGP_vMF_cdfs(GGPmodel, lat, degree,kappa=kappa) #find marginal distributions
2408
+
2409
+ A2I = AD_inc(Is,Icdf)
2410
+ pI = np.interp(A2I,A2ref,pref)
2411
+
2412
+
2413
+ A2D = AD_dec(Ds,Dcdf)
2414
+ pD = np.interp(A2D,A2ref,pref)
2415
+
2416
+ #null hypothesis that observations are drawn from the GGP at the specified latitude
2417
+ #cannot be rejected if both pI and pD are <3.07
2418
+
2419
+ #pID = -2*np.sum(np.log(pI)+np.log(pD)) #metric for minimization to find latitude if unknown.
2420
+ #pID = 1-chi2.cdf(pID, df=2) #pIDnew
2421
+ pID=min(pI,pD) #pID per Heslop, 8/7/23
2422
+
2423
+ if np.logical_and(A2I<3.07, A2D<3.07):
2424
+ H = 0
2425
+ else:
2426
+ H = 1
2427
+
2428
+ #plot ecdf comparison if desired
2429
+
2430
+ V2dec,E=pars['V2dec'],pars['tau2']/pars['tau3']
2431
+ if (V2dec<90) or (V2dec>270):V2dec=(V2dec-180)%360 #flip to south
2432
+ N=pars['N']
2433
+ if verbose:
2434
+ print ('V2dec: ',V2dec)
2435
+ print ('E: ',E)
2436
+ print ('n, lat: ',N,lat)
2437
+ print ('getting Monte Carlo simulations from model.... be patient')
2438
+
2439
+ V2decs,Es=[],[]
2440
+
2441
+ # get model simulations, given lat,n
2442
+ for sim in range(num_sims):
2443
+ DI=GGPrand(GGPmodel,lat,N,degree)
2444
+ if kappa>0:
2445
+ fish_DI,decs,incs=[],DI.T[0],DI.T[1]
2446
+ for k in range(N):
2447
+ di_block=ipmag.fishrot(k=kappa,n=4,dec=decs[k],inc=incs[k],di_block=True)
2448
+ pars=pmag.fisher_mean(di_block)
2449
+ #print (decs[k],incs[k],pars['dec'],pars['inc'],kappa)#DEBUG
2450
+ fish_DI.append([pars['dec'],pars['inc']])
2451
+ DI=fish_DI
2452
+ #print (pars) #DEBUG
2453
+ mcpars=pmag.doprinc(DI)
2454
+ V2dec_sim,E_sim=mcpars['V2dec'],mcpars['tau2']/mcpars['tau3']
2455
+ if (V2dec_sim<90) or (V2dec_sim>270):V2dec_sim=(V2dec_sim-180)%360 #flip to south
2456
+ V2decs.append(V2dec_sim)
2457
+ Es.append(E_sim)
2458
+ Es=np.sort(np.array(Es))
2459
+ V2decs=np.sort(np.array(V2decs))
2460
+ Esim_min=Es[int(num_sims*.025)]
2461
+ Esim_max=Es[int(num_sims*.975)]
2462
+ V2sim_min=V2decs[int(num_sims*.025)]
2463
+ V2sim_max=V2decs[int(num_sims*.975)]
2464
+ if verbose:
2465
+ print ('A2D, A2I: ',A2D,A2I)
2466
+ if A2D<=3.07 and A2I<=3.07:
2467
+ print ('Null hyp that directions are consistent with model cannot be rejected')
2468
+ else:
2469
+ print ('Null hyp that directions are consistent with model can be rejected')
2470
+ if (V2dec>=V2sim_min) and (V2dec<=V2sim_max):
2471
+
2472
+ V2_result=1
2473
+ if verbose:
2474
+ print ('Null hyp that V2dec is consistent cannot be rejected (95% confidence)')
2475
+ print ('V2dec,min,max: ',V2dec,V2sim_min,V2sim_max)
2476
+ else:
2477
+ V2_result=0
2478
+ if verbose:
2479
+ print ('Null hyp that V2dec is consistent can be rejected (95% confidence)')
2480
+ print ('V2dec,min,max: ',V2dec,V2sim_min,V2sim_max)
2481
+ if (E>=Esim_min) and (E<=Esim_max):
2482
+
2483
+ E_result=1
2484
+ if verbose:
2485
+ print ('Null hyp that E is consistent cannot be rejected (95% confidence)')
2486
+ print ('E,min,max: ',E,Esim_min,Esim_max)
2487
+ else:
2488
+ if verbose:
2489
+ print ('Null hyp that E is consistent can be rejected (95% confidence)')
2490
+ print ('E,min,max: ',E,Esim_min,Esim_max)
2491
+ E_result=0
2492
+
2493
+
2494
+
2495
+ if plot:
2496
+ #plot stereonet with contours if desired
2497
+ fig=plt.figure(figsize=(12,4))
2498
+ ax1=fig.add_subplot(141)
2499
+ sp,sn, XX, YY = prediction_map_GGP_su(lat,GGPmodel,degree=degree,dx=0.01,dy=0.01) #map out pdf
2500
+ if kappa ==-1:
2501
+ kap='Inf'
2502
+ else:
2503
+ kap=str(kappa)
2504
+ txtstring='a) Lat.: '+str(np.round(lat,1))+'; $\kappa$: '+kap
2505
+ ax1.text(-1,1.1,txtstring,fontsize=14)
2506
+ ax1.text(-.7,-1.2,'model:'+model_name,fontsize=14)
2507
+ ipmag.plot_net() #create net
2508
+
2509
+ levels = np.linspace(np.min(sp),np.max(sp),24)[1::4] #produce contour levels
2510
+ ipmag.plot_di(dec=Ds,inc=Is,color='green') #plot data
2511
+ plt.contour(XX,YY,sp,levels=levels,colors='grey',linestyle='dotted',linewidth=.1) #plot contours
2512
+ #plt.title('lat='+str(np.round(lat,1))+'; $\kappa$: '+kap+'; model:'+model_name ) # replace -1 with inf
2513
+ I0 = np.linspace(-90,90,180)
2514
+ D0 = np.linspace(-180,180,360)
2515
+
2516
+ Iecdf = np.zeros(np.size(I0))
2517
+ for i in range(np.size(I0)):
2518
+ Iecdf[i] = np.mean(Is<=I0[i])
2519
+
2520
+ Decdf = np.zeros(np.size(D0))
2521
+ for i in range(np.size(D0)):
2522
+ Decdf[i] = np.mean(Ds<=D0[i])
2523
+ ax2=fig.add_subplot(142)
2524
+
2525
+ ax2.plot(D0,Dcdf(np.deg2rad(D0)),'r-',linewidth=2)
2526
+ ax2.plot(D0,Decdf,'k',linestyle='dotted')
2527
+ #ax1.plot(Ds,np.zeros(np.size(Ds))+0.025,'+k')
2528
+ ax2.text(-170,1.1,'b)',fontsize=14)
2529
+ if A2D<3.07:
2530
+ ax2.text(-170,.8,'Decs: Pass',color='red',fontsize=14)
2531
+ else:
2532
+ ax2.text(-170,.8,'Decs: Fail',color='red',fontsize=14)
2533
+ ax2.set_xlim([-180,180])
2534
+ ax2.set_ylim([0,1])
2535
+ ax2.minorticks_on()
2536
+ ax2.set_xticks(np.arange(-180, 180+1, 45.0))
2537
+ ax2.set_xlabel('Declination[$^o$]',fontsize=14,color='red')
2538
+ ax2.set_ylabel('Cumulative Probability',fontsize=14)
2539
+ ax3=ax2.twiny()
2540
+
2541
+ ax3.plot(I0,Icdf(np.deg2rad(I0)),'b-',linewidth=2)
2542
+ ax3.plot(I0,Iecdf,'k',linestyle='dotted')
2543
+ #ax2.plot(Is,np.ones(np.size(Is))+0.025,'+k')
2544
+ ax3.set_xlim([-90,90])
2545
+ ax3.set_ylim([0,1])
2546
+ ax3.minorticks_on()
2547
+ ax3.set_xticks(np.arange(-90, 90+1, 30.0))
2548
+ ax3.set_xlabel('Inclination[$^o$]',fontsize=14,color='blue')
2549
+ if A2I<3.07:
2550
+ ax3.text(-85,.7,'Incs: Pass',color='blue',fontsize=14)
2551
+ else:
2552
+ ax3.text(-85,.7,'Incs: Fail',color='blue',fontsize=14)
2553
+ ax4=fig.add_subplot(143)
2554
+ X=V2decs
2555
+ Y=np.arange(1,len(X)+1)/len(X)
2556
+ ax4.plot(X,Y,'r-')
2557
+ ax4.axvline(V2dec,label='V2dec of data')
2558
+ ax4.axvline(V2sim_min,linestyle='dotted',color='black',label='V2dec bounds of model')
2559
+ ax4.axvline(V2sim_max,linestyle='dotted',color='black')
2560
+ plt.xlabel('Simulated $V2_{decs}$',fontsize=14)
2561
+ plt.ylabel('Cumulative Distribution Function',fontsize=14)
2562
+ #plt.legend(loc='lower right')
2563
+ if V2_result==1:
2564
+ ax4.text(0,1.05,'c) V2: Pass',transform=ax4.transAxes,fontsize=14)
2565
+ #plt.text(.2,.9,'V2: Pass', transform=ax4.transAxes,fontsize=14,color='red')
2566
+ else:
2567
+ ax4.text(0,1.05,'c) V2: Fail',transform=ax4.transAxes,fontsize=14)
2568
+ #plt.text(.2,.9,'V2: Fail', transform=ax4.transAxes,fontsize=14,color='red')
2569
+
2570
+ ax5=fig.add_subplot(144)
2571
+ X=Es
2572
+ Y=np.arange(1,len(X)+1)/len(X)
2573
+ ax5.plot(X,Y,'b-')
2574
+
2575
+ ax5.axvline(E,label='E of data')
2576
+ ax5.axvline(Esim_min,linestyle='dotted',color='black',label='E bounds of model')
2577
+ ax5.axvline(Esim_max,linestyle='dotted',color='black')
2578
+ plt.xlabel('Simulated $E$',fontsize=14)
2579
+ if E_result==1:
2580
+ ax5.text(0,1.05,'d) E: Pass',transform=ax5.transAxes,fontsize=14)
2581
+ #plt.text(.2,.9,'E: Pass', transform=ax5.transAxes,fontsize=14,color='blue')
2582
+ else:
2583
+ ax5.text(0,1.05,'d) E: Fail',transform=ax5.transAxes,fontsize=14)
2584
+ #plt.text(.2,.9,'E: Fail', transform=ax5.transAxes,fontsize=14,color='blue')
2585
+ #plt.legend(loc='lower right')
2586
+ plt.tight_layout()
2587
+ if saveto:
2588
+ plt.savefig(saveto)
2589
+ plt.show()
2590
+ res_dict={'kappa':kappa,'lat':round(lat,1),'A2D':round(A2D,4),'A2I':round(A2I,4),'pID':round(pID,4),'H':H,'V2dec':round(V2dec,1)
2591
+ ,'V2sim_min':round(V2sim_min,1),'V2sim_max':round(V2sim_max,1),
2592
+ 'E':round(E,4),'Esim_min':round(Esim_min,4),'Esim_max':round(Esim_max,4),'V2_result':V2_result,'E_result':E_result}
2593
+
2594
+
2595
+ return res_dict
2596
+
2597
+ def svei_test_varkap(di_block,model_name='THG24',degree=8,lat=False,plot=False,cite="",saveto=False,
2598
+ num_sims=1000,verbose=False): #perform the AD test on observed incs and decs
2599
+ """
2600
+ Calls svei_test to perform the Anderson-Darling (AD) test on observed inclinations and declinations and Monte Carlo
2601
+ simulation to estimate 95% confidence bounds on V2dec and E. Uses kappa = inf to start, then 100, then 50
2602
+ to find consistent result.
2603
+
2604
+ Parameters:
2605
+ di_block=Array of declinations,inclinations (degrees)
2606
+ model_name: GGP model name.
2607
+ degree (int): Maximum degree of the GGP model. Default is 8.
2608
+ lat (float): Assumed latitude of the site. If False, use inclinations to calculate the latitude. Default is False.
2609
+ plot (bool): Whether to plot the ECDF comparison, stereonet and CDFs for V2dec and E. Default is False.
2610
+ cite (str): Citation information for the GGP model. Default is an empty string.
2611
+ saveto (bool or str): If provided, save the plot to the specified file path. Default is False.
2612
+ num_sims (int): number of Monte Carlo simulations for V2dec, E bounds calculation
2613
+ verbose (bool): if True, print commentary
2614
+
2615
+ Returns:
2616
+ res_dict (dict): Dictionary with the following parameters:
2617
+ kappa (float): kappa used in final simulation
2618
+ H (int): 0 if the null hypothesis cannot be rejected, 1 otherwise.
2619
+ A2I (float): Test statistic for inclinations.
2620
+ A2D (float): Test statistic for declinations.
2621
+ pID (float): Representation of combined p-values (can be used for minimization to optimize latitude).
2622
+ lat (float): Latitude of the site.
2623
+ V2dec (float): Declination of minor principle component of data set.
2624
+ V2sim_min, V2sim_max (floats): Bounds on V2dec from Monte Carlo simulation
2625
+ V2_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2626
+ E (float): Elongation (tau2/tau3) of data set
2627
+ Esim_min, Esim_max (floats): Bounds on elongation from Monte Carlo simulation
2628
+ E_result (integer): 0 if V2dec not in bounds, 1 if in bounds (consistent)
2629
+ """
2630
+
2631
+ n = len(di_block)
2632
+ if n<5:
2633
+ raise ValueError("Insufficient data, N must be 5 or greater")
2634
+ return {}
2635
+ else:
2636
+ kappa = -1 # infinite kappa
2637
+ res_dict=svei_test(di_block,num_sims=num_sims,plot=plot, kappa=kappa,
2638
+ model_name=model_name,saveto=saveto)
2639
+ res_dict['model']=model_name
2640
+ res_dict['N']=len(di_block)
2641
+ if res_dict['H']==1 or res_dict['V2_result']==0 or res_dict['E_result']==0:
2642
+ kappa=100
2643
+ if verbose:print ('svei_test failed, repeating svei_test with kappa ',kappa)
2644
+ res_dict=svei_test(di_block,num_sims=num_sims,plot=plot, kappa=kappa,
2645
+ model_name=model_name,saveto=saveto)
2646
+ if res_dict['H']==1 or res_dict['V2_result']==0 or res_dict['E_result']==0:
2647
+ kappa=50
2648
+ if verbose:print ('svei_test failed, repeating svei_test with kappa ',kappa)
2649
+ res_dict=svei_test(di_block,num_sims=num_sims,plot=plot, kappa=kappa,
2650
+ model_name=model_name,saveto=saveto)
2651
+ res_dict['kappa']=kappa
2652
+ res_dict['N']=len(di_block)
2653
+ res_dict['model']=model_name
2654
+ return res_dict