SpiralMap 0.0.22__tar.gz → 0.19__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. {spiralmap-0.0.22 → spiralmap-0.19}/PKG-INFO +15 -6
  2. {spiralmap-0.0.22 → spiralmap-0.19}/README.md +7 -5
  3. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/citation.rst +1 -1
  4. spiralmap-0.0.22/docs/build/html/_sources/index.rst.txt → spiralmap-0.19/docs/source/index.rst +1 -1
  5. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/models_available.rst +11 -1
  6. spiralmap-0.19/paper/figures/residuals_polar_0.png +0 -0
  7. spiralmap-0.19/paper/figures/residuals_polar_3.png +0 -0
  8. {spiralmap-0.0.22 → spiralmap-0.19}/paper/paper.bib +16 -0
  9. {spiralmap-0.0.22 → spiralmap-0.19}/paper/paper.md +33 -0
  10. {spiralmap-0.0.22 → spiralmap-0.19}/pyproject.toml +13 -2
  11. spiralmap-0.19/src/SpiralMap/datafiles/flim.pkl +0 -0
  12. spiralmap-0.19/src/SpiralMap/datafiles/flim_all.pkl +0 -0
  13. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/spiral.bib +16 -0
  14. spiralmap-0.19/src/SpiralMap/figdir_primer/map_0png.png +0 -0
  15. spiralmap-0.19/src/SpiralMap/figdir_primer/map_1png.png +0 -0
  16. spiralmap-0.19/src/SpiralMap/figdir_primer/map_2png.png +0 -0
  17. spiralmap-0.19/src/SpiralMap/figdir_primer/map_3png.png +0 -0
  18. spiralmap-0.19/src/SpiralMap/figdir_primer/map_4png.png +0 -0
  19. spiralmap-0.19/src/SpiralMap/figdir_primer/map_5png.png +0 -0
  20. spiralmap-0.19/src/SpiralMap/figdir_primer/map_6png.png +0 -0
  21. spiralmap-0.19/src/SpiralMap/figdir_primer/map_9png.png +0 -0
  22. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/models_.py +232 -33
  23. spiralmap-0.19/src/SpiralMap/movie_.gif +0 -0
  24. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/mytools.py +4 -1
  25. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/test.py +86 -8
  26. spiralmap-0.0.22/docs/build/doctrees/api.doctree +0 -0
  27. spiralmap-0.0.22/docs/build/doctrees/environment.pickle +0 -0
  28. spiralmap-0.0.22/docs/build/doctrees/index.doctree +0 -0
  29. spiralmap-0.0.22/docs/build/doctrees/install.doctree +0 -0
  30. spiralmap-0.0.22/docs/build/html/.buildinfo +0 -4
  31. spiralmap-0.0.22/docs/build/html/_images/movie_.gif +0 -0
  32. spiralmap-0.0.22/docs/build/html/_modules/SpiralMap/models_.html +0 -1448
  33. spiralmap-0.0.22/docs/build/html/_modules/index.html +0 -112
  34. spiralmap-0.0.22/docs/build/html/_sources/api.rst.txt +0 -8
  35. spiralmap-0.0.22/docs/build/html/_sources/install.rst.txt +0 -25
  36. spiralmap-0.0.22/docs/build/html/_static/documentation_options.js +0 -13
  37. spiralmap-0.0.22/docs/build/html/api.html +0 -701
  38. spiralmap-0.0.22/docs/build/html/citation.html +0 -256
  39. spiralmap-0.0.22/docs/build/html/genindex.html +0 -287
  40. spiralmap-0.0.22/docs/build/html/index.html +0 -170
  41. spiralmap-0.0.22/docs/build/html/install.html +0 -129
  42. spiralmap-0.0.22/docs/build/html/models_available.html +0 -240
  43. spiralmap-0.0.22/docs/build/html/objects.inv +0 -0
  44. spiralmap-0.0.22/docs/build/html/py-modindex.html +0 -136
  45. spiralmap-0.0.22/docs/build/html/search.html +0 -131
  46. spiralmap-0.0.22/docs/build/html/searchindex.js +0 -1
  47. spiralmap-0.0.22/docs/doctrees/citation.doctree +0 -0
  48. spiralmap-0.0.22/docs/doctrees/models_available.doctree +0 -0
  49. spiralmap-0.0.22/docs/html/_sources/citation.rst.txt +0 -154
  50. spiralmap-0.0.22/docs/html/_sources/models_available.rst.txt +0 -81
  51. spiralmap-0.0.22/docs/html/_static/_sphinx_javascript_frameworks_compat.js +0 -123
  52. spiralmap-0.0.22/docs/html/_static/basic.css +0 -925
  53. spiralmap-0.0.22/docs/html/_static/css/badge_only.css +0 -1
  54. spiralmap-0.0.22/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  55. spiralmap-0.0.22/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  56. spiralmap-0.0.22/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  57. spiralmap-0.0.22/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  58. spiralmap-0.0.22/docs/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  59. spiralmap-0.0.22/docs/html/_static/css/fonts/fontawesome-webfont.svg +0 -2671
  60. spiralmap-0.0.22/docs/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  61. spiralmap-0.0.22/docs/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  62. spiralmap-0.0.22/docs/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  63. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  64. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  65. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-bold.woff +0 -0
  66. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-bold.woff2 +0 -0
  67. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  68. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  69. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-normal.woff +0 -0
  70. spiralmap-0.0.22/docs/html/_static/css/fonts/lato-normal.woff2 +0 -0
  71. spiralmap-0.0.22/docs/html/_static/css/theme.css +0 -4
  72. spiralmap-0.0.22/docs/html/_static/doctools.js +0 -156
  73. spiralmap-0.0.22/docs/html/_static/file.png +0 -0
  74. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bold.eot +0 -0
  75. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  76. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bold.woff +0 -0
  77. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  78. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  79. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  80. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  81. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  82. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-italic.eot +0 -0
  83. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  84. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-italic.woff +0 -0
  85. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  86. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-regular.eot +0 -0
  87. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  88. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-regular.woff +0 -0
  89. spiralmap-0.0.22/docs/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  90. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  91. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  92. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  93. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  94. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  95. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  96. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  97. spiralmap-0.0.22/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  98. spiralmap-0.0.22/docs/html/_static/jquery.js +0 -2
  99. spiralmap-0.0.22/docs/html/_static/js/badge_only.js +0 -1
  100. spiralmap-0.0.22/docs/html/_static/js/theme.js +0 -1
  101. spiralmap-0.0.22/docs/html/_static/js/versions.js +0 -228
  102. spiralmap-0.0.22/docs/html/_static/language_data.js +0 -199
  103. spiralmap-0.0.22/docs/html/_static/minus.png +0 -0
  104. spiralmap-0.0.22/docs/html/_static/plus.png +0 -0
  105. spiralmap-0.0.22/docs/html/_static/pygments.css +0 -74
  106. spiralmap-0.0.22/docs/html/_static/searchtools.js +0 -619
  107. spiralmap-0.0.22/docs/html/_static/sphinx_highlight.js +0 -154
  108. spiralmap-0.0.22/docs/source/index.rst +0 -40
  109. spiralmap-0.0.22/src/SpiralMap/datafiles/flim.pkl +0 -0
  110. spiralmap-0.0.22/src/SpiralMap/datafiles/flim_all.pkl +0 -0
  111. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_0png.png +0 -0
  112. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_1png.png +0 -0
  113. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_2png.png +0 -0
  114. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_3png.png +0 -0
  115. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_4png.png +0 -0
  116. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_5png.png +0 -0
  117. spiralmap-0.0.22/src/SpiralMap/figdir_primer/map_8png.png +0 -0
  118. spiralmap-0.0.22/src/SpiralMap/movie_.gif +0 -0
  119. {spiralmap-0.0.22 → spiralmap-0.19}/.README.md.swp +0 -0
  120. {spiralmap-0.0.22 → spiralmap-0.19}/.github/workflows/JOSS_paper.yml +0 -0
  121. {spiralmap-0.0.22 → spiralmap-0.19}/.gitignore +0 -0
  122. {spiralmap-0.0.22 → spiralmap-0.19}/.ipynb_checkpoints/demo-checkpoint.ipynb +0 -0
  123. {spiralmap-0.0.22 → spiralmap-0.19}/.ipynb_checkpoints/demo_spiralmap-checkpoint.ipynb +0 -0
  124. {spiralmap-0.0.22 → spiralmap-0.19}/.ipynb_checkpoints/dtools-checkpoint.py +0 -0
  125. {spiralmap-0.0.22 → spiralmap-0.19}/.ipynb_checkpoints/plotspirals_demo-checkpoint.ipynb +0 -0
  126. {spiralmap-0.0.22 → spiralmap-0.19}/.ipynb_checkpoints/test-checkpoint.py +0 -0
  127. {spiralmap-0.0.22 → spiralmap-0.19}/.readthedocs.yaml +0 -0
  128. {spiralmap-0.0.22 → spiralmap-0.19}/LICENSE.md +0 -0
  129. {spiralmap-0.0.22 → spiralmap-0.19}/Makefile +0 -0
  130. {spiralmap-0.0.22 → spiralmap-0.19}/demo_spiralmap.ipynb +0 -0
  131. {spiralmap-0.0.22 → spiralmap-0.19}/docs/Makefile +0 -0
  132. {spiralmap-0.0.22 → spiralmap-0.19}/docs/doctrees/api.doctree +0 -0
  133. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/doctrees/citation.doctree +0 -0
  134. {spiralmap-0.0.22 → spiralmap-0.19}/docs/doctrees/environment.pickle +0 -0
  135. {spiralmap-0.0.22 → spiralmap-0.19}/docs/doctrees/index.doctree +0 -0
  136. {spiralmap-0.0.22 → spiralmap-0.19}/docs/doctrees/install.doctree +0 -0
  137. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/doctrees/models_available.doctree +0 -0
  138. {spiralmap-0.0.22 → spiralmap-0.19}/docs/doctrees/modules.doctree +0 -0
  139. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/.buildinfo +0 -0
  140. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_images/movie_.gif +0 -0
  141. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_sources/api.rst.txt +0 -0
  142. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_sources/citation.rst.txt +0 -0
  143. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_sources/index.rst.txt +0 -0
  144. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_sources/install.rst.txt +0 -0
  145. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_sources/models_available.rst.txt +0 -0
  146. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_sources/modules.rst.txt +0 -0
  147. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  148. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/basic.css +0 -0
  149. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/badge_only.css +0 -0
  150. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  151. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  152. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  153. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  154. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  155. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  156. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  157. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  158. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  159. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  160. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  161. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-bold.woff +0 -0
  162. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-bold.woff2 +0 -0
  163. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  164. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  165. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-normal.woff +0 -0
  166. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/fonts/lato-normal.woff2 +0 -0
  167. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/css/theme.css +0 -0
  168. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/doctools.js +0 -0
  169. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/_static/documentation_options.js +0 -0
  170. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/file.png +0 -0
  171. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bold.eot +0 -0
  172. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  173. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bold.woff +0 -0
  174. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  175. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  176. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  177. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  178. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  179. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-italic.eot +0 -0
  180. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  181. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-italic.woff +0 -0
  182. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  183. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-regular.eot +0 -0
  184. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  185. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-regular.woff +0 -0
  186. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  187. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  188. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  189. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  190. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  191. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  192. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  193. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  194. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  195. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/jquery.js +0 -0
  196. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/js/badge_only.js +0 -0
  197. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/js/theme.js +0 -0
  198. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/js/versions.js +0 -0
  199. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/language_data.js +0 -0
  200. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/minus.png +0 -0
  201. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/plus.png +0 -0
  202. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/pygments.css +0 -0
  203. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/searchtools.js +0 -0
  204. {spiralmap-0.0.22/docs/build → spiralmap-0.19/docs}/html/_static/sphinx_highlight.js +0 -0
  205. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/api.html +0 -0
  206. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/citation.html +0 -0
  207. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/genindex.html +0 -0
  208. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/index.html +0 -0
  209. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/install.html +0 -0
  210. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/models_available.html +0 -0
  211. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/modules.html +0 -0
  212. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/objects.inv +0 -0
  213. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/search.html +0 -0
  214. {spiralmap-0.0.22 → spiralmap-0.19}/docs/html/searchindex.js +0 -0
  215. {spiralmap-0.0.22 → spiralmap-0.19}/docs/make.bat +0 -0
  216. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/api.rst +0 -0
  217. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/conf.py +0 -0
  218. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/install.rst +0 -0
  219. {spiralmap-0.0.22 → spiralmap-0.19}/docs/source/requirements.txt +0 -0
  220. {spiralmap-0.0.22 → spiralmap-0.19}/make.bat +0 -0
  221. {spiralmap-0.0.22 → spiralmap-0.19}/paper/figures/all_arms_single_model.png +0 -0
  222. {spiralmap-0.0.22 → spiralmap-0.19}/paper/figures/multiple_models_cartesian.png +0 -0
  223. {spiralmap-0.0.22 → spiralmap-0.19}/paper/figures/multiple_models_polar.png +0 -0
  224. {spiralmap-0.0.22 → spiralmap-0.19}/paper/figures/single_arm_single_model.png +0 -0
  225. {spiralmap-0.0.22 → spiralmap-0.19}/paper/figures/single_model_polar.png +0 -0
  226. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/__init__.py +0 -0
  227. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel2024_cepheids/ArmAttributes_dyoungW1_bw025.pkl +0 -0
  228. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/Drimmel2armspiral.fits +0 -0
  229. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/Readme_spiral_m2_147.txt +0 -0
  230. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm1_X_hel.npy +0 -0
  231. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm1_Y_hel.npy +0 -0
  232. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm2_X_hel.npy +0 -0
  233. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm2_Y_hel.npy +0 -0
  234. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm3_X_hel.npy +0 -0
  235. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm3_Y_hel.npy +0 -0
  236. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm4_X_hel.npy +0 -0
  237. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/phase_shifted/Arm4_Y_hel.npy +0 -0
  238. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Drimmel_NIR/spiral_m2_147.dat +0 -0
  239. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/GaiaPVP_cont_2022/GaiaPVP_cont_2022_pproj_contours.pkl +0 -0
  240. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/GaiaPVP_cont_2022/over_dens_grid_threshold_0_003_dens.npy +0 -0
  241. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/GaiaPVP_cont_2022/xvalues_dens.npy +0 -0
  242. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/GaiaPVP_cont_2022/yvalues_dens.npy +0 -0
  243. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Poggio_cont_2021/Poggio_cont_2021_pproj_contours.pkl +0 -0
  244. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Poggio_cont_2021/overdens_grid_locscale03.npy +0 -0
  245. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Poggio_cont_2021/xvalues.npy +0 -0
  246. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/datafiles/Poggio_cont_2021/yvalues.npy +0 -0
  247. {spiralmap-0.0.22 → spiralmap-0.19}/src/SpiralMap/version.py +0 -0
  248. {spiralmap-0.0.22 → spiralmap-0.19}/tempfig/all_arms_single_model.pdf +0 -0
  249. {spiralmap-0.0.22 → spiralmap-0.19}/tempfig/multiple_models_cartesian.pdf +0 -0
  250. {spiralmap-0.0.22 → spiralmap-0.19}/tempfig/multiple_models_polar.pdf +0 -0
  251. {spiralmap-0.0.22 → spiralmap-0.19}/tempfig/single_arm_single_model.pdf +0 -0
  252. {spiralmap-0.0.22 → spiralmap-0.19}/tempfig/single_model_polar.pdf +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: SpiralMap
3
- Version: 0.0.22
3
+ Version: 0.19
4
4
  Summary: Python Library of Milky Way's Spiral Arms
5
5
  Project-URL: Homepage, https://github.com/Abhaypru/SpiralMap
6
6
  Project-URL: Issues, https://github.com/Abhaypru/SpiralMap/issues
@@ -10,6 +10,13 @@ License-File: LICENSE.md
10
10
  Classifier: Operating System :: OS Independent
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.9
13
+ Requires-Dist: astropy
14
+ Requires-Dist: matplotlib
15
+ Requires-Dist: numpy
16
+ Requires-Dist: pandas
17
+ Requires-Dist: scipy
18
+ Requires-Dist: tabulate
19
+ Requires-Dist: update-checker
13
20
  Provides-Extra: docs
14
21
  Requires-Dist: sphinx; extra == 'docs'
15
22
  Requires-Dist: sphinx-rtd-theme; extra == 'docs'
@@ -24,16 +31,18 @@ A Python library of the Milky Way's spiral arms.
24
31
 
25
32
  The detailed documentation is hosted on [Read the docs](https://spiralmap.readthedocs.io/en/latest/#api-docs).
26
33
 
27
- For a quickstart please refer to the accompanying [Jupyter notebook](https://github.com/Abhaypru/SpiralMap/blob/main/demo_spiralmap.ipynb)
34
+ For a quickstart please refer to the accompanying [Jupyter notebook](https://github.com/Abhaypru/SpiralMap/blob/main/demo_spiralmap.ipynb).
28
35
 
36
+ Read the preprint at [arxiv](https://www.arxiv.org/abs/2506.11383).
29
37
  ## Features
30
- + Access 8 independent spiral arm models from literature. We are open to requests for including other spiral arm models.
38
+ + Access 9 independent spiral arm models from literature. We are open to requests for including other spiral arm models.
31
39
  + Extract the 2D trace of individual or all spiral arms from a particular model.
32
40
  + Directly overplot spiral arms with choice of Cartesian or Polar coordinates, and in Heliocentric or Galactocentric frames.
33
41
 
34
- ![image info](src/SpiralMap/movie_.gif).
35
-
36
- Shown above is a gallery of the spiral models & maps included in the current version.
42
+ ## Updates
43
+ + Missing Local arm (logarithmic) added to Hou-Han 2014 model.
44
+ + Vallee 1995 model included.
45
+ + Dependencies included
37
46
 
38
47
  Installation
39
48
  -------------
@@ -6,16 +6,18 @@ A Python library of the Milky Way's spiral arms.
6
6
 
7
7
  The detailed documentation is hosted on [Read the docs](https://spiralmap.readthedocs.io/en/latest/#api-docs).
8
8
 
9
- For a quickstart please refer to the accompanying [Jupyter notebook](https://github.com/Abhaypru/SpiralMap/blob/main/demo_spiralmap.ipynb)
9
+ For a quickstart please refer to the accompanying [Jupyter notebook](https://github.com/Abhaypru/SpiralMap/blob/main/demo_spiralmap.ipynb).
10
10
 
11
+ Read the preprint at [arxiv](https://www.arxiv.org/abs/2506.11383).
11
12
  ## Features
12
- + Access 8 independent spiral arm models from literature. We are open to requests for including other spiral arm models.
13
+ + Access 9 independent spiral arm models from literature. We are open to requests for including other spiral arm models.
13
14
  + Extract the 2D trace of individual or all spiral arms from a particular model.
14
15
  + Directly overplot spiral arms with choice of Cartesian or Polar coordinates, and in Heliocentric or Galactocentric frames.
15
16
 
16
- ![image info](src/SpiralMap/movie_.gif).
17
-
18
- Shown above is a gallery of the spiral models & maps included in the current version.
17
+ ## Updates
18
+ + Missing Local arm (logarithmic) added to Hou-Han 2014 model.
19
+ + Vallee 1995 model included.
20
+ + Dependencies included
19
21
 
20
22
  Installation
21
23
  -------------
@@ -1,7 +1,7 @@
1
1
  How to Cite
2
2
  ===========
3
3
 
4
- If you use **SpiralMap**, please cite the accompanying paper (link).
4
+ If you use **SpiralMap**, please cite the accompanying paper `Prusty & Khanna <https://arxiv.org/abs/2506.11383>`_.
5
5
 
6
6
  Pleae also cite the particular models used, we provide below the references in BibTeX format.
7
7
 
@@ -12,7 +12,7 @@ We present a Python library of the Milky Way's major spiral arm models and maps.
12
12
  Most users are interested in simply extracting the trace or overplotting the spiral arms on another plot of interest, for example while comparing substructure in the velocity field to the location of spiral arms.
13
13
  To this end, with `SpiralMap` one can:
14
14
 
15
- + Access 8 independent spiral arm models from literature. List of the available models is :doc:`here </models_available>`.
15
+ + Access 9 independent spiral arm models from literature. List of the available models is :doc:`here </models_available>`.
16
16
  + Extract the trace of individual or all spiral arms from a particular model.
17
17
  + Directly overplot spiral arms with choice of Cartesian or Polar coordinates, and in Heliocentric or Galactocentric frames.
18
18
 
@@ -9,6 +9,8 @@ The following table provides a summary of the spiral arm models included in **Sp
9
9
  +========================+==============================================+
10
10
  | Taylor_Cordes_1992 | Model based on HII regions |
11
11
  +------------------------+----------------------------------------------+
12
+ | Vallee_1995 | Based on Galactic magnetic field/Dust/stars |
13
+ +------------------------+----------------------------------------------+
12
14
  | Drimmel_NIR_2000 | Based on Galactic plane emission in N |
13
15
  +------------------------+----------------------------------------------+
14
16
  | Levine_2006 | Based on HI (21 cm) data |
@@ -33,6 +35,13 @@ The following table provides a summary of the spiral arm models included in **Sp
33
35
  * We use the model parameters presented in their Table 1.
34
36
  * There are four arms in this model (Arm1, Arm2, Arm3, Arm4).
35
37
 
38
+ `Vallee_1995`
39
+ -----------------
40
+ * Class implementing the model from `Vallee 1995 <https://ui.adsabs.harvard.edu/abs/1995ApJ...454..119V/abstract>`_
41
+ which is based on Galactic magnetic field data, HI, HII, CO, and Dust.
42
+ * We use their best model as depicted in their figure 3.
43
+ * There are four arms in this model (Sagittarius, Scutum, Norma, Perseus).
44
+
36
45
  `Drimmel_NIR_2000`
37
46
  -----------------
38
47
  * Class implementing the model from `Drimmel 2000 <https://iopscience.iop.org/article/10.1086/321556>`_, which is based on Galactic plane emission profiles in the K band using COBE data.
@@ -50,7 +59,8 @@ The following table provides a summary of the spiral arm models included in **Sp
50
59
  * Class built upon the polynomial-logarithmic formulation introduced by `Hou et al. 2014 <https://ui.adsabs.harvard.edu/abs/2014A%26A...569A.125H/abstract>`_, based on a combination of
51
60
  H II, giant molecular clouds, and methanol MASER catalogs.
52
61
  * Model publicly available.
53
- * There are six arms in this model (Norma, Scutum-Centaurus, Sagittarius-Carina, Perseus, Local, Outer).
62
+ * There are six arms in this model (Arm1, Arm2, Arm3, Arm4, Arm5, Arm6).
63
+ * Additionally their local arm is included as a regular logarithmic spiral.
54
64
 
55
65
  `Reid_2019`
56
66
  ---------
@@ -246,3 +246,19 @@ archivePrefix = {arXiv},
246
246
  adsnote = {Provided by the SAO/NASA Astrophysics Data System}
247
247
  }
248
248
 
249
+ @ARTICLE{khanna2024,
250
+ author = {{Khanna}, Shourya and {Yu}, Jie and {Drimmel}, Ronald and {Poggio}, Eloisa and {Cantat-Gaudin}, Tristan and {Castro-Ginard}, Alfred and {Kurbatov}, Evgeny and {Belokurov}, Vasily and {Brown}, Anthony and {Fouesneau}, Morgan and {Casey}, Andrew and {Rix}, Hans-Walter},
251
+ title = "{GaiaUnlimited: The old stellar disc of the Milky Way as traced by the Red Clump}",
252
+ journal = {arXiv e-prints},
253
+ keywords = {Astrophysics - Astrophysics of Galaxies},
254
+ year = 2024,
255
+ month = oct,
256
+ eid = {arXiv:2410.22036},
257
+ pages = {arXiv:2410.22036},
258
+ doi = {10.48550/arXiv.2410.22036},
259
+ archivePrefix = {arXiv},
260
+ eprint = {2410.22036},
261
+ primaryClass = {astro-ph.GA},
262
+ adsurl = {https://ui.adsabs.harvard.edu/abs/2024arXiv241022036K},
263
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
264
+ }
@@ -55,6 +55,39 @@ a) Documentation: [`readthedocs`](https://spiralmap.readthedocs.io/en/latest/),
55
55
  ![Polar projections of multiple models plotted together. We show the `Taylor_Cordes_1992` & `Poggio_2021` models in HC (a) and GC (b) frames, and similarly the tiple models plotted together with a polar grid in the background and similarly, the `Drimmel_NIR_2000` & `Poggio_2021` models in HC (c) and GC (d) frames.\label{multiple_models_polar}](figures/multiple_models_polar.png)
56
56
 
57
57
 
58
+ # Example Scientific application
59
+ As an example of a science case, we reproduce figures from @khanna2024 (hereafter K24) where `SpiralMap` was used.
60
+ In particular, K24 constructed a model for the stellar density distribution in Red Clump stars in the Milky Way, and then compared the residuals of their best-fit models
61
+ with the locations of non-axisymmetric structures such as spiral arms. The figures below show two of their residual plots overlaid with spiral models
62
+ ( `Drimmel_NIR_2000`, `Drimmel_Ceph_2024`, & `Reid_2019`) using `SpiralMap`.
63
+
64
+
65
+ ![An example science case where `SpiralMap` can be useful. Here we show two figures reproduced from K24 (with permission), comparing the residuals between a best-fit model and data, and the locations of spiral arm models in the Milky Way. This figure shows the `Drimmel_NIR_2000`, `Drimmel_Ceph_2024`, & `Reid_2019` overplotted together, shown in polar projection.\label{example_science_a}](figures/residuals_polar_3.png)
66
+
67
+
68
+ ![Same as above, but showing only the `Drimmel_NIR_2000` model.\label{example_science_b}](figures/residuals_polar_0.png)
69
+
70
+
71
+ A very basic example of using `SpiralMap` is shown below, where we access all information about one particular arm ( `Sag-Car`) in one particular model `Drimmel_Ceph_2024`,
72
+
73
+
74
+ ##################################################
75
+ ##### Readout a single arm from a single model ###
76
+ ##################################################
77
+ import SpiralMap as sp
78
+ from SpiralMap import polar_style
79
+
80
+ Rsun=8.277
81
+ spirals = sp.main_(Rsun=Rsun)
82
+ use_model = `Drimmel_Ceph_2024'
83
+ spirals.getinfo(model=use_model)
84
+ plotattrs = {`plot':False}
85
+ spirals.readout(plotattrs,model=use_model,arm=`Sag-Car')
86
+
87
+ ##################################################
88
+
89
+ More common examples are shown in the accompanying [`Jupyter notebook`](https://github.com/Abhaypru/SpiralMap/blob/main/demo_spiralmap.ipynb).
90
+
58
91
 
59
92
  # Availability
60
93
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "SpiralMap"
7
- version = "0.0.22"
7
+ version = "0.19"
8
8
  authors = [
9
9
  { name="Prusty & Khanna", email="shourya.khanna@inaf.it" },
10
10
  ]
@@ -18,9 +18,20 @@ classifiers = [
18
18
  license = "MIT"
19
19
  license-files = ["LICEN[CS]E*"]
20
20
 
21
+ # This MUST be inside the [project] section
22
+ dependencies = [
23
+ "astropy",
24
+ "matplotlib",
25
+ "numpy",
26
+ "scipy",
27
+ "tabulate",
28
+ "update-checker",
29
+ "pandas",
30
+ ]
31
+
21
32
  [project.optional-dependencies]
22
33
  docs = ["sphinx","sphinx_rtd_theme", "sphinxcontrib-bibtex"]
23
34
 
24
35
  [project.urls]
25
36
  Homepage = "https://github.com/Abhaypru/SpiralMap"
26
- Issues = "https://github.com/Abhaypru/SpiralMap/issues"
37
+ Issues = "https://github.com/Abhaypru/SpiralMap/issues"
@@ -12,6 +12,22 @@
12
12
  adsnote = {Provided by the SAO/NASA Astrophysics Data System}
13
13
  }
14
14
 
15
+ @ARTICLE{1995ApJ...454..119V,
16
+ author = {{Vallee}, J.~P.},
17
+ title = "{The Milky Way's Spiral Arms Traced by Magnetic Fields, Dust, Gas, and Stars}",
18
+ journal = {\apj},
19
+ keywords = {GALAXY: STRUCTURE, GALAXIES: SPIRAL, ISM: MAGNETIC FIELDS},
20
+ year = 1995,
21
+ month = nov,
22
+ volume = {454},
23
+ pages = {119},
24
+ doi = {10.1086/176470},
25
+ adsurl = {https://ui.adsabs.harvard.edu/abs/1995ApJ...454..119V},
26
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
27
+ }
28
+
29
+
30
+
15
31
  @ARTICLE{Drimmel_NIR_2000,
16
32
  author = {{Drimmel}, R.},
17
33
  title = "{Evidence for a two-armed spiral in the Milky Way}",
@@ -2,6 +2,10 @@
2
2
  # SpiralMap: a library of the Milky Way's spiral arms
3
3
  # History:
4
4
  # May 2025: Prusty (IISER Kolkata) & Shourya Khanna (INAF Torino)
5
+ # Feb 2026: Following updates:
6
+ # 1) Missing Local arm (logarithmic) added to Hou-Han 2014 model.
7
+ # 2) Vallee 1995 model included.
8
+ # 3) added dependencies to .toml
5
9
  #######################################################################
6
10
 
7
11
 
@@ -9,6 +13,7 @@
9
13
  # import utilities package / set root
10
14
  import os
11
15
  from os.path import dirname
16
+
12
17
  root_ = dirname(__file__)
13
18
  dataloc = root_+'/datafiles'
14
19
  exec(open(root_+"/mytools.py").read())
@@ -59,6 +64,7 @@ class spiral_poggio_maps(object):
59
64
  func_ = lambda s: 'yval' in s
60
65
  yval_file = list(filter(func_,flist1))[0]
61
66
 
67
+
62
68
  # # read overdensity contours
63
69
  xvalues_overdens=np.load(self.loc+'/'+xval_file)
64
70
  yvalues_overdens=np.load(self.loc+'/'+yval_file)
@@ -67,6 +73,8 @@ class spiral_poggio_maps(object):
67
73
  Rvalues_dens=sqrtsum(ds=[xvalues_overdens, yvalues_overdens])
68
74
  Rgcvalues_dens=sqrtsum(ds=[xvalues_overdens+xsun, yvalues_overdens])
69
75
 
76
+ self.over_dens_grid = over_dens_grid
77
+
70
78
  fl = pickleread(self.loc+'/'+self.model_+'_pproj_contours.pkl')
71
79
  self.dout = {'xhc':xvalues_overdens,'yhc':yvalues_overdens,'xgc':xvalues_overdens+xsun,'ygc':yvalues_overdens}
72
80
  self.dout['phi4'] =fl['phi4'].copy()
@@ -105,6 +113,177 @@ class spiral_poggio_maps(object):
105
113
  plotattrs['linestyle'] = '.'
106
114
  _polarproj(self,plotattrs)
107
115
 
116
+
117
+ class spiral_vallee(object):
118
+ """
119
+ Vallee et al (1995) logarithmic spiral arm model for the Milky Way.
120
+ Based on multi-tracer analysis including magnetic fields, dust, gas, and stars.
121
+ """
122
+
123
+ def __init__(self):
124
+ self.getarmlist()
125
+
126
+ def getarmlist(self):
127
+ """Set arm names """
128
+ self.arms = np.array(['Sagittarius', 'Scutum', '3-kpc', 'Perseus'])
129
+ self.armcolour = {
130
+ 'Sagittarius': 'red', # red
131
+ 'Perseus': 'orange', # orange
132
+ 'Scutum': 'purple', #
133
+ '3-kpc': 'green' # brown
134
+ }
135
+
136
+ self.getparams()
137
+ self.armcolours = [self.armcolour[ky] for ky in self.arms]
138
+
139
+ def info(self):
140
+ d = {'Arm list': self.arms, 'Colour': self.armcolours}
141
+ dfmodlist = pd.DataFrame(d)
142
+ print(tabulate(dfmodlist, headers='keys', tablefmt='psql'))
143
+
144
+ def getparams(self):
145
+ """
146
+ Return parameters for each arm.
147
+
148
+ Parameters from Vallee 1995:
149
+ - Pitch angle: 12° ± 1° (inward, absolute value used here)
150
+ - Number of arms: 4
151
+ - Arm start radius: 2.5 kpc
152
+ - Solar position: 8 kpc from Galactic center
153
+ - Arm separation: ~3 kpc near Sun
154
+
155
+ Note: phi0 is set to produce 4 equally spaced arms starting at 2.5 kpc
156
+ """
157
+
158
+ self.arms_model = {
159
+ 'Scutum': {'pitch': 12.5, 'phi0': 0, 'r0': 2.5},
160
+ '3-kpc': {'pitch': 12.5, 'phi0': 90, 'r0': 2.5},
161
+ 'Perseus': {'pitch': 12.5, 'phi0': 180, 'r0': 2.5},
162
+ 'Sagittarius': {'pitch': 12.5, 'phi0': 270, 'r0': 2.5}
163
+ }
164
+
165
+ def model_(self, arm_name, R_max=13, n_points=1000):
166
+ """Generate logarithmic spiral coordinates for specified arm.
167
+
168
+ Parameters
169
+ ----------
170
+ arm_name : str
171
+ Name of arm to model
172
+ R_max : float, optional
173
+ Maximum galactocentric radius to model (kpc), default=13
174
+ (Vallee 1995 limits to r_gal < 13 kpc)
175
+ n_points : int, optional
176
+ Number of points to sample along the spiral, default=1000
177
+
178
+ Returns
179
+ -------
180
+ tuple
181
+ (x_hc, y_hc, x_gc, y_gc) coordinate arrays where:
182
+ - x_hc, y_hc: Heliocentric coordinates (kpc)
183
+ - x_gc, y_gc: Galactocentric coordinates (kpc)
184
+
185
+ Model limited to 3 kpc < r_gal < 13 kpc per Vallee 1995 constraints
186
+ """
187
+ self.R0 = -self.xsun # 8.0 kpc
188
+ params = self.arms_model[arm_name]
189
+ pitch_rad = np.radians(params['pitch'])
190
+ phi0_rad = np.radians(params['phi0'])
191
+ r0 = params['r0']
192
+
193
+ # Calculate maximum phi to reach R_max, starting from r0
194
+ phi_max = phi0_rad + (np.log(R_max/r0) / np.tan(pitch_rad))
195
+
196
+ # Generate angular range starting from phi0
197
+ phi = np.linspace(phi0_rad, phi_max, n_points)
198
+
199
+ # Logarithmic spiral equation (Vallee 1995 eq. 5a)
200
+ R = r0 * np.exp((phi - phi0_rad) * np.tan(pitch_rad))
201
+
202
+ # Apply Vallee 1995 constraints: exclude r_gal < 3 kpc
203
+ mask = R >= 3.0
204
+ R = R[mask]
205
+ phi = phi[mask]
206
+
207
+ # Convert to Cartesian coordinates (Galactocentric)
208
+ x_gc = R * np.cos(phi)
209
+ y_gc = R * np.sin(phi)
210
+
211
+ # Convert to Heliocentric coordinates (Sun at x=8, y=0 in galactocentric)
212
+ # In heliocentric: x_hc = x_gc - (-8) = x_gc + 8, y_hc = y_gc - 0 = y_gc
213
+ x_hc = x_gc + self.R0
214
+ y_hc = y_gc # Sun at y=0 in galactocentric, so y_hc = y_gc
215
+
216
+ return x_hc, y_hc, x_gc, y_gc
217
+
218
+ def output_(self, arm):
219
+ """Get arm coordinates
220
+
221
+ Parameters
222
+ ----------
223
+ arm : str
224
+ Arm identifier (e.g., 'Sagittarius')
225
+
226
+ Returns
227
+ -------
228
+ dict
229
+ Dictionary with keys:
230
+ - 'xhc': Heliocentric x coordinates
231
+ - 'yhc': Heliocentric y coordinates
232
+ - 'xgc': Galactocentric x coordinates
233
+ - 'ygc': Galactocentric y coordinates
234
+ """
235
+
236
+ xhc, yhc, xgc, ygc = self.model_(arm)
237
+ self.dout = {
238
+ 'xhc': xhc,
239
+ 'yhc': yhc,
240
+ 'xgc': xgc,
241
+ 'ygc': ygc
242
+
243
+ }
244
+ return self.dout
245
+
246
+ def df_plot(self, coord='GC', R_max=13):
247
+ rows = []
248
+
249
+ for arm in self.arms:
250
+ x_hc, y_hc, x_gc, y_gc = self.model_(arm, R_max)
251
+
252
+ if coord.upper() == 'GC':
253
+ x, y = x_gc, y_gc
254
+ else:
255
+ x, y = x_hc, y_hc
256
+
257
+ for xi, yi in zip(x, y):
258
+ rows.append([arm, xi, yi])
259
+
260
+ return pd.DataFrame(rows, columns=['arm', 'x', 'y'])
261
+
262
+ def plot(self, coord='GC', R_max=13):
263
+ df = self.df_plot(coord, R_max)
264
+
265
+ plt.figure(figsize=(6, 6))
266
+
267
+ for arm in self.arms:
268
+ d = df[df['arm'] == arm]
269
+ plt.plot(d['x'], d['y'], color=self.armcolour[arm], label=arm)
270
+
271
+ if coord.upper() == 'GC':
272
+ plt.plot(0, 0, 'r*', ms=12, label='GC')
273
+ plt.plot(-self.R0, 0, 'o', color='orange', label='Sun')
274
+ plt.xlabel('X_gc [kpc]')
275
+ plt.ylabel('Y_gc [kpc]')
276
+ else:
277
+ plt.plot(0, 0, 'o', color='orange', label='Sun')
278
+ plt.xlabel('X_hc [kpc]')
279
+ plt.ylabel('Y_hc [kpc]')
280
+
281
+ plt.axhline(0, ls='--', lw=0.5)
282
+ plt.axvline(0, ls='--', lw=0.5)
283
+ plt.axis('equal')
284
+ plt.legend()
285
+ plt.tight_layout()
286
+ plt.show()
108
287
 
109
288
  class TaylorCordesSpiral(object):
110
289
  """
@@ -203,13 +382,15 @@ class spiral_houhan(object):
203
382
  Implements the Milky Way spiral structure model from:
204
383
  "The spiral structure of the Milky Way from classical Cepheids" (Hou & Han 2014)
205
384
  using polynomial-logarithmic spiral functions. Provides 6 major arm segments.
385
+ Additionally, the local arm is implemented as a logarithmic spiral.
206
386
  """
207
387
  def __init__(self):
208
388
  self.getarmlist()
209
389
  def getarmlist(self):
210
- """Set arm names and colours"""
211
- self.arms = np.array(['Norma','Scutum-Centaurus','Sagittarius-Carina','Perseus','Local','Outer'])
212
- self.armcolour = {'Norma':'black','Scutum-Centaurus':'red','Sagittarius-Carina':'green','Perseus':'blue','Local':'purple','Outer':'gold'}
390
+ """Set arm names and colours"""
391
+ self.arms = np.array(['Arm1','Arm2','Arm3','Arm4','Arm5','Arm6','local'])
392
+ self.armcolour = {'Arm1':'black','Arm2':'red','Arm3':'green','Arm4':'blue','Arm5':'purple','Arm6':'gold','local':'cyan'}
393
+
213
394
  self.armcolours= [self.armcolour[ky] for ky in self.arms ]
214
395
  def info(self):
215
396
  d = {'Arm list': self.arms, 'Colour': self.armcolours}
@@ -218,25 +399,30 @@ class spiral_houhan(object):
218
399
 
219
400
  def getparams(self):
220
401
  """
221
- Load spiral parameters from Hou & Han (2014) Table 4 (vcirc=239, Z =0.16), all tracers.
222
-
402
+ Load spiral parameters from Hou & Han (2014) Table 4 (vcirc=239, Z =0.17), all tracers.
403
+
223
404
  :return: params ( Nested dictionary containing for each arm).
224
405
 
225
406
  a, b, c, d: Polynomial coefficients.
226
407
 
227
408
  θ_start: Start angle in degrees (Galactic longitude).
228
409
 
229
- θ_end: End angle in degrees.
410
+ θ_end: End angle in degrees.
411
+
412
+ ri,thetai,psi,ymin,ymax: logarithmic spiral (local arm only)
230
413
  :rtype: dict
231
414
  """
232
415
  params = {
233
- 'Norma': {'a': 1.1320, 'b': 0.1233, 'c': 0.003488, 'd': 0.0, 'θ_start': 40, 'θ_end': 250},
234
- 'Scutum-Centaurus': {'a': 5.8243, 'b': -1.8196, 'c': 0.2350, 'd': -0.009011, 'θ_start': 275, 'θ_end': 620},
235
- 'Sagittarius-Carina': {'a': 4.2767, 'b': -1.1507, 'c': 0.1570, 'd': -0.006078, 'θ_start': 275, 'θ_end': 575},
236
- 'Perseus': {'a': 1.1280, 'b': 0.1282, 'c': 0.002617, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
237
- 'Local': {'a': 1.7978, 'b': -0.04738, 'c': 0.01684, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
238
- 'Outer': {'a': 2.4225, 'b': -0.1636, 'c': 0.02494, 'd': 0.0, 'θ_start': 280, 'θ_end': 405}
416
+ 'Arm1': {'a': 1.1320, 'b': 0.1233, 'c': 0.003488, 'd': 0.0, 'θ_start': 40, 'θ_end': 250},
417
+ 'Arm2': {'a': 5.8243, 'b': -1.8196, 'c': 0.2350, 'd': -0.009011, 'θ_start': 275, 'θ_end': 620},
418
+ 'Arm3': {'a': 4.2767, 'b': -1.1507, 'c': 0.1570, 'd': -0.006078, 'θ_start': 275, 'θ_end': 575},
419
+ 'Arm4': {'a': 1.1280, 'b': 0.1282, 'c': 0.002617, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
420
+ 'Arm5': {'a': 1.7978, 'b': -0.04738, 'c': 0.01684, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
421
+ 'Arm6': {'a': 2.4225, 'b': -0.1636, 'c': 0.02494, 'd': 0.0, 'θ_start': 280, 'θ_end': 405},
422
+ 'local': {'ri': 8.17, 'thetai': 57.8, 'psi':2.84,'ymin':-4.,'ymax':7.5}
239
423
  }
424
+
425
+
240
426
  return params
241
427
  def polynomial_log_spiral(self, θ, a, b, c, d):
242
428
  """Calculate radius using polynomial-logarithmic spiral equation.
@@ -264,19 +450,31 @@ class spiral_houhan(object):
264
450
  def model_(self, arm_name, n_points=500):
265
451
 
266
452
  params_ = self.getparams()
267
- params = params_[arm_name]
268
-
269
-
270
- θ = np.linspace(params['θ_start'], params['θ_end'], n_points)
271
- R = self.polynomial_log_spiral(θ, params['a'], params['b'], params['c'], params['d'])
272
-
453
+ params = params_[arm_name]
454
+
455
+ if arm_name == 'local':
456
+ θ = np.linspace(0., 180., n_points)
457
+ tmp1 = np.radians(θ - params['thetai'])
458
+ tmp2 = np.tan(np.radians(params['psi']))
459
+ R = params['ri']*np.exp( tmp1*tmp2 )
460
+ else:
461
+ θ = np.linspace(params['θ_start'], params['θ_end'], n_points)
462
+ R = self.polynomial_log_spiral(θ, params['a'], params['b'], params['c'], params['d'])
463
+
273
464
  # Convert to Cartesian coordinates (Galactocentric)
274
465
  y_gc = R*np.cos(np.radians(θ))
275
466
  x_gc = -R * np.sin(np.radians(θ))
276
467
 
277
468
  # Convert to Heliocentric coordinates
278
469
  x_hc = (x_gc + self.R0)
279
-
470
+
471
+ if arm_name == 'local':
472
+ ind_mask = np.where((y_gc < params['ymin'])|(y_gc > params['ymax']))[0]
473
+ y_gc[ind_mask] = np.nan
474
+ x_gc[ind_mask] = np.nan
475
+ x_hc[ind_mask] = np.nan
476
+
477
+
280
478
  return x_hc, y_gc, x_gc, y_gc
281
479
 
282
480
  def output_(self, arm):
@@ -311,9 +509,9 @@ class spiral_houhan_HII(object):
311
509
  def __init__(self):
312
510
  self.getarmlist()
313
511
  def getarmlist(self):
314
- """Set arm names and colours"""
315
- self.arms = np.array(['Norma','Scutum-Centaurus','Sagittarius-Carina','Perseus','Local','Outer'])
316
- self.armcolour = {'Norma':'black','Scutum-Centaurus':'red','Sagittarius-Carina':'green','Perseus':'blue','Local':'purple','Outer':'gold'}
512
+ """Set arm names and colours"""
513
+ self.arms = np.array(['Arm1','Arm2','Arm3','Arm4','Arm5','Arm6'])
514
+ self.armcolour = {'Arm1':'black','Arm2':'red','Arm3':'green','Arm4':'blue','Arm5':'purple','Arm6':'gold'}
317
515
  self.armcolours= [self.armcolour[ky] for ky in self.arms ]
318
516
  def info(self):
319
517
  d = {'Arm list': self.arms, 'Colour': self.armcolours}
@@ -335,12 +533,12 @@ class spiral_houhan_HII(object):
335
533
  """
336
534
 
337
535
  params = {
338
- 'Norma': {'a': 1.1668, 'b': 0.1198, 'c': 0.002557, 'd': 0.0, 'θ_start': 40, 'θ_end': 250},
339
- 'Scutum-Centaurus': {'a': 5.8002, 'b': -1.8188, 'c': 0.2352, 'd': -0.008999, 'θ_start': 275, 'θ_end': 620},
340
- 'Sagittarius-Carina': {'a': 4.2300, 'b': -1.1505, 'c': 0.1561, 'd': -0.005898, 'θ_start': 275, 'θ_end': 570},
341
- 'Perseus': {'a': 0.9744, 'b': 0.1405, 'c': 0.003995, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
342
- 'Local': {'a': 0.9887, 'b': 0.1714, 'c': 0.004358, 'd': 0.0, 'θ_start': 280, 'θ_end': 475},
343
- 'Outer': {'a': 3.3846, 'b': -0.6554, 'c': 0.08170, 'd': 0.0, 'θ_start': 280, 'θ_end': 355}
536
+ 'Arm1': {'a': 1.1668, 'b': 0.1198, 'c': 0.002557, 'd': 0.0, 'θ_start': 40, 'θ_end': 250},
537
+ 'Arm2': {'a': 5.8002, 'b': -1.8188, 'c': 0.2352, 'd': -0.008999, 'θ_start': 275, 'θ_end': 620},
538
+ 'Arm3': {'a': 4.2300, 'b': -1.1505, 'c': 0.1561, 'd': -0.005898, 'θ_start': 275, 'θ_end': 570},
539
+ 'Arm4': {'a': 0.9744, 'b': 0.1405, 'c': 0.003995, 'd': 0.0, 'θ_start': 280, 'θ_end': 500},
540
+ 'Arm5': {'a': 0.9887, 'b': 0.1714, 'c': 0.004358, 'd': 0.0, 'θ_start': 280, 'θ_end': 475},
541
+ 'Arm6': {'a': 3.3846, 'b': -0.6554, 'c': 0.08170, 'd': 0.0, 'θ_start': 280, 'θ_end': 355}
344
542
  }
345
543
 
346
544
  return params
@@ -925,7 +1123,7 @@ class main_(object):
925
1123
  Constructs dictionaries to initialise individual model classes
926
1124
  """
927
1125
 
928
- self.models = ['Taylor_Cordes_1992','Drimmel_NIR_2000',
1126
+ self.models = ['Taylor_Cordes_1992','Vallee_1995','Drimmel_NIR_2000',
929
1127
  'Levine_2006','Hou_Han_2014','Hou_Han_HII_2014','Reid_2019',
930
1128
  'Poggio_cont_2021','GaiaPVP_cont_2022','Drimmel_Ceph_2024']
931
1129
  self.models_class = {'Reid_2019':reid_spiral(),
@@ -936,9 +1134,10 @@ class main_(object):
936
1134
  'Taylor_Cordes_1992':TaylorCordesSpiral(),
937
1135
  'Hou_Han_2014':spiral_houhan(),
938
1136
  'Hou_Han_HII_2014':spiral_houhan_HII(),
1137
+ 'Vallee_1995':spiral_vallee(),
939
1138
  'Drimmel_Ceph_2024':spiral_drimmel_cepheids()}
940
1139
 
941
- self.models_desc = ['HII','NIR emission',
1140
+ self.models_desc = ['HII','Bfield/Dust/gas','NIR emission',
942
1141
  'HI','HII/GMC/Masers','HII','MASER parallax',
943
1142
  'Upper main sequence (map)','OB stars (map)','Cepheids']
944
1143
  def getinfo(self,model='',print_=True):
@@ -997,11 +1196,11 @@ class main_(object):
997
1196
  if plotattrs_['plot'] and plotattrs_['polarproj']==False :
998
1197
  plt.plot(spimod.dout['x'+plotattrs_['coordsys'].lower()],
999
1198
  spimod.dout['y'+plotattrs_['coordsys'].lower()],
1000
- plotattrs_['linestyle'],color=plotattrs_['armcolour'])
1199
+ plotattrs_['linestyle'],linewidth=plotattrs_['linewidth'],color=plotattrs_['armcolour'])
1001
1200
  if 'xhc_ex' in spimod.dout.keys():
1002
1201
  plt.plot(spimod.dout['x'+plotattrs_['coordsys'].lower()+'_ex'],
1003
1202
  spimod.dout['y'+plotattrs_['coordsys'].lower()+'_ex'],
1004
- '--',color=plotattrs_['armcolour'])
1203
+ '--',linewidth=plotattrs_['linewidth'],color=plotattrs_['armcolour'])
1005
1204
 
1006
1205
  plt.xlabel('X$_{'+plotattrs_['coordsys']+'}$ [Kpc]')
1007
1206
  plt.ylabel('Y$_{'+plotattrs_['coordsys']+'}$ [Kpc]')
@@ -1234,4 +1433,4 @@ class _make_supportfiles(object):
1234
1433
 
1235
1434
 
1236
1435
 
1237
- # # _make_supportfiles()
1436
+ # _make_supportfiles()
Binary file