dip_path_plot.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from matplotlib import gridspec
  4. from charged_shells.rotational_path import PairRotationalPath, PathEnergyPlot
  5. from charged_shells import expansion, interactions
  6. from charged_shells.parameters import ModelParams
  7. from pathlib import Path
  8. import json
  9. from plot_settings import *
  10. Array = np.ndarray
  11. zero_to_pi_half = np.linspace(0, np.pi/2, 100, endpoint=True)
  12. pi_half_to_pi = np.linspace(np.pi/2, np.pi, 100, endpoint=True)
  13. pi_to_three_halves_pi = np.linspace(np.pi, 3 * np.pi / 2, 100, endpoint=True)
  14. DipolePath = PairRotationalPath()
  15. DipolePath.set_default_x_axis(zero_to_pi_half)
  16. DipolePath.add_euler(beta2=pi_half_to_pi[::-1])
  17. DipolePath.add_euler(beta2=zero_to_pi_half[::-1])
  18. DipolePath.add_euler(beta2=zero_to_pi_half, beta1=zero_to_pi_half)
  19. DipolePath.add_euler(beta2=np.pi/2, beta1=np.pi/2, alpha2=zero_to_pi_half)
  20. DipolePath.add_euler(beta2=np.pi/2, alpha2=np.pi/2, beta1=pi_half_to_pi)
  21. DipolePath.add_euler(beta2=np.pi/2, beta1=pi_half_to_pi[::-1], alpha1=np.pi)
  22. DipolePath.add_euler(beta2=zero_to_pi_half[::-1], beta1=pi_half_to_pi, alpha1=np.pi)
  23. DipolePath.add_euler(beta2=zero_to_pi_half, beta1=pi_half_to_pi[::-1], alpha1=np.pi)
  24. DipolePath.add_euler(beta2=pi_half_to_pi, beta1=zero_to_pi_half[::-1], alpha1=np.pi)
  25. DipolePath2 = PairRotationalPath()
  26. DipolePath2.set_default_x_axis(zero_to_pi_half)
  27. DipolePath2.add_euler(beta2=pi_half_to_pi[::-1])
  28. DipolePath2.add_euler(beta2=zero_to_pi_half[::-1])
  29. DipolePath2.add_euler(beta2=zero_to_pi_half, beta1=zero_to_pi_half)
  30. DipolePath2.add_euler(beta2=np.pi/2, beta1=np.pi/2, alpha2=zero_to_pi_half)
  31. DipolePath2.add_euler(beta2=np.pi/2, alpha2=np.pi/2, beta1=pi_half_to_pi)
  32. DipolePath2.add_euler(beta2=zero_to_pi_half[::-1], beta1=pi_half_to_pi[::-1])
  33. DipolePath2.add_euler(beta2=zero_to_pi_half[::-1], beta1=np.pi)
  34. DipolePath2.add_euler(beta2=zero_to_pi_half, beta1=pi_half_to_pi[::-1], alpha1=np.pi)
  35. DipolePath2.add_euler(beta2=pi_half_to_pi, beta1=zero_to_pi_half[::-1], alpha1=np.pi)
  36. DipolePath3 = PairRotationalPath()
  37. DipolePath3.set_default_x_axis(zero_to_pi_half)
  38. DipolePath3.add_euler(beta2=np.pi/2, beta1=zero_to_pi_half, start_name="EP", end_name="EE")
  39. DipolePath3.add_euler(beta2=pi_half_to_pi, beta1=pi_half_to_pi, end_name="PP")
  40. DipolePath3.add_euler(beta2=pi_half_to_pi[::-1], beta1=np.pi, end_name="EP")
  41. DipolePath3.add_euler(beta2=pi_half_to_pi, beta1=pi_to_three_halves_pi, end_name="EP")
  42. DipolePath3.add_euler(beta1=3 * np.pi/2, beta2=pi_half_to_pi[::-1], alpha2=np.pi/2, end_name="tEE")
  43. DipolePath3.add_euler(beta1=3 * np.pi/2, beta2=np.pi/2, alpha1=zero_to_pi_half[::-1], end_name="EE")
  44. DipolePath3.add_euler(beta1=3 * np.pi/2, beta2=pi_half_to_pi, end_name="EP")
  45. def sections_plot(kappaR: float = 3, abar: float = 0.5, sigma_tilde=0.001, save_as=None):
  46. params = ModelParams(R=150, kappaR=kappaR)
  47. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30)
  48. ex2 = ex1.clone()
  49. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  50. path_plot.plot_sections(save_as=save_as)
  51. def kappaR_dependence(kappaR: Array, abar: float, sigma_tilde=0.001, save_as=None):
  52. params = ModelParams(R=150, kappaR=kappaR)
  53. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30)
  54. ex2 = ex1.clone()
  55. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=0)
  56. path_plot.plot(labels=[rf'$\kappa R$={kR}' for kR in kappaR],
  57. # norm_euler_angles={'beta2': np.pi},
  58. save_as=save_as)
  59. def abar_dependence(abar: Array, kappaR: float, sigma_tilde=0.001, save_as=None):
  60. params = ModelParams(R=150, kappaR=kappaR)
  61. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30)
  62. ex2 = ex1.clone()
  63. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  64. path_plot.plot(labels=[rf'$\bar a$={a}' for a in abar],
  65. # norm_euler_angles={'beta2': np.pi},
  66. save_as=save_as)
  67. def sigma0_dependence(sigma0: Array, kappaR: float, abar: float, sigma_tilde=0.001, save_as=None):
  68. params = ModelParams(R=150, kappaR=kappaR)
  69. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30, sigma0=sigma0)
  70. ex2 = ex1.clone()
  71. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  72. path_plot.plot(labels=[rf'$\eta={s0 / sigma_tilde}$' for s0 in sigma0],
  73. # norm_euler_angles={'beta2': np.pi},
  74. save_as=save_as)
  75. def model_comparison(config_data: dict, save_as=None, save_data=False):
  76. kappaR = 3
  77. params = ModelParams(R=150, kappaR=kappaR)
  78. a_bar = 0.5
  79. sigma_tilde = 0.001
  80. ex1 = expansion.MappedExpansionDipole(a_bar, params.kappaR, sigma_tilde, l_max=30)
  81. ex2 = ex1.clone()
  82. ex3 = ex1.clone().inverse_sign()
  83. # matching other models to the mapped CSp model based on equal patch size in potential
  84. # ex_gauss = quadrupole_model_mappings.ic_to_gauss(sigma_tilde, a_bar, params, l_max=30, sigma0=0)
  85. # ex_gauss2 = ex_gauss.clone()
  86. # ex_cap = quadrupole_model_mappings.ic_to_cap(sigma_tilde, a_bar, params, l_max=30, sigma0=0)
  87. # ex_cap2 = ex_cap.clone()
  88. # path plots for all models
  89. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params)
  90. energy = path_plot.evaluate_path()
  91. x_axis = path_plot.rot_path.stack_x_axes()
  92. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params)
  93. energy_inv = path_plot_inv.evaluate_path()
  94. # path_plot_gauss = PathEnergyPlot(ex_gauss, ex_gauss2, DipolePath3, dist=2., params=params)
  95. # energy_gauss = path_plot_gauss.evaluate_path()
  96. #
  97. # path_plot_cap = PathEnergyPlot(ex_cap, ex_cap2, DipolePath3, dist=2., params=params)
  98. # energy_cap = path_plot_cap.evaluate_path()
  99. # peak_energy_sanity_check
  100. # ex1new = expansion.MappedExpansionQuad(abar, params.kappaR, sigma_tilde, l_max=30)
  101. # ex2new = ex1new.clone()
  102. # pp_energy = interactions.charged_shell_energy(ex1new, ex2new, params)
  103. # print(f'PP energy: {pp_energy}')
  104. # Emanuele data
  105. em_data = np.load(Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_A").joinpath("pathway.npz"))['arr_0']
  106. # em_data = np.load(Path(config_data["emanuele_data"]).joinpath("FIG_7").joinpath("pathway.npz"))['arr_0']
  107. # em_data_path = (Path(config_data["emanuele_data"]).joinpath("FIG_8").joinpath("FIXEDCHARGE")
  108. # .joinpath("FIX_A").joinpath("ECC_0.25"))
  109. # em_data = np.load(em_data_path.joinpath(f"EMME_{kappaR}.").joinpath("pathway.npz"))['arr_0']
  110. em_data, em_data_inv = em_data[:int(len(em_data) / 2)], em_data[int(len(em_data) / 2):]
  111. # if save_data:
  112. # np.savez(Path(config_data["figure_data"]).joinpath(f"fig_5_janus_kR{kappaR}.npz"),
  113. # ICi=em_data,
  114. # CSp=np.stack((x_axis, np.squeeze(energy))).T,
  115. # CSp_gauss=np.stack((x_axis, np.squeeze(energy_gauss))).T,
  116. # CSp_cap=np.stack((x_axis, np.squeeze(energy_cap))).T)
  117. fig, ax = plt.subplots(figsize=0.5 * np.array([8.25, 4.125]))
  118. ax.plot(em_data[:, 0], em_data[:, 1], label='ICi', c='tab:blue')
  119. ax.plot(em_data_inv[:, 0], em_data_inv[:, 1], ls='--', c='tab:blue')
  120. ax.plot(x_axis, np.squeeze(energy), label='CSp', c='tab:orange')
  121. ax.plot(x_axis, np.squeeze(energy_inv), ls='--', c='tab:orange')
  122. # ax.plot(x_axis, np.squeeze(energy_gauss), label='CSp - Gauss')
  123. # ax.plot(x_axis, np.squeeze(energy_cap), label='CSp - cap')
  124. # ax.plot(x_axis, em_data[:, 1] / np.squeeze(energy), label='CSp')
  125. path_plot.plot_style(fig, ax)
  126. if save_as is not None:
  127. plt.savefig(save_as, dpi=300)
  128. plt.show()
  129. def combined_kappaR_dependence(config_data: dict, kappaR: list[int], abar: float, sigma_tilde=0.001, save_as=None):
  130. em_data_path = (Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_C")
  131. .joinpath("FIX_A").joinpath(f"ECC_{np.round(abar/2, 4)}"))
  132. ic_data = []
  133. ic_data_inv = []
  134. for kR in kappaR:
  135. em_data = np.load(em_data_path.joinpath(f"EMME_{kR}.").joinpath("pathway.npz"))['arr_0']
  136. em_data, em_data_inv = em_data[:int(len(em_data) / 2)], em_data[int(len(em_data) / 2):]
  137. ic_data.append(em_data)
  138. ic_data_inv.append(em_data_inv)
  139. params = ModelParams(R=150, kappaR=np.asarray(kappaR))
  140. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30)
  141. ex2 = ex1.clone()
  142. ex3 = ex1.clone().inverse_sign()
  143. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=0)
  144. energy = path_plot.evaluate_path()
  145. x_axis = path_plot.rot_path.stack_x_axes()
  146. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=0)
  147. energy_inv = path_plot_inv.evaluate_path()
  148. labels = [rf'$\kappa R = {kR}$' for kR in [1, 3, 10]]
  149. fig, ax = plt.subplots()
  150. for d, d_inv, en, en_inv, label, c in zip(ic_data, ic_data_inv, energy.T, energy_inv.T, labels, COLORS):
  151. ax.plot(d[:, 0], d[:, 1], label=label, c=c)
  152. ax.plot(d_inv[:, 0], d_inv[:, 1], c=c)
  153. ax.plot(x_axis, en, ls='--', c=c)
  154. ax.plot(x_axis, en_inv, ls='--', c=c)
  155. DipolePath3.plot_style(fig, ax)
  156. if save_as is not None:
  157. plt.savefig(save_as, dpi=300)
  158. plt.show()
  159. def combined_abar_dependence(config_data: dict, kappaR: int, abar: list[float], sigma_tilde=0.001, save_as=None):
  160. em_data_path = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_B").joinpath("FIX_M")
  161. ic_data = []
  162. ic_data_inv = []
  163. for ab in abar:
  164. em_data = np.load(em_data_path.joinpath(f"ECC_{np.round(ab/2, 4)}").joinpath(f"EMME_{kappaR}.").joinpath("pathway.npz"))['arr_0']
  165. em_data, em_data_inv = em_data[:int(len(em_data) / 2)], em_data[int(len(em_data) / 2):]
  166. ic_data.append(em_data)
  167. ic_data_inv.append(em_data_inv)
  168. params = ModelParams(R=150, kappaR=kappaR)
  169. ex1 = expansion.MappedExpansionDipole(np.asarray(abar), params.kappaR, sigma_tilde, l_max=30)
  170. ex2 = ex1.clone()
  171. ex3 = ex1.clone().inverse_sign()
  172. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  173. energy = path_plot.evaluate_path()
  174. x_axis = path_plot.rot_path.stack_x_axes()
  175. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  176. energy_inv = path_plot_inv.evaluate_path()
  177. labels = [rf'$\bar a={a}$' for a in [0.3, 0.4, 0.5]]
  178. fig, ax = plt.subplots()
  179. for d, d_inv, en, en_inv, label, c in zip(ic_data, ic_data_inv, energy.T, energy_inv.T, labels, COLORS):
  180. ax.plot(d[:, 0], d[:, 1], label=label, c=c)
  181. ax.plot(d_inv[:, 0], d_inv[:, 1], c=c)
  182. ax.plot(x_axis, en, ls='--', c=c)
  183. ax.plot(x_axis, en_inv, ls='--', c=c)
  184. DipolePath3.plot_style(fig, ax)
  185. if save_as is not None:
  186. plt.savefig(save_as, dpi=300)
  187. plt.show()
  188. def combined_sigma0_dependence(config_data: dict, kappaR=3., abar=0.5, sigma0=(-0.0002, 0.00, 0.0002), sigma_tilde=0.001, save_as=None):
  189. em_data_path = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_D").joinpath("CHANGE_ZC")
  190. undercharged = np.load(em_data_path.joinpath("ZC_-56").joinpath("pathway.npz"))['arr_0']
  191. overcharged = np.load(em_data_path.joinpath("ZC_56").joinpath("pathway.npz"))['arr_0']
  192. neutral_path = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_B").joinpath("FIX_M")
  193. neutral = np.load(neutral_path.joinpath(f"ECC_{np.round(abar/2, 4)}").joinpath(f"EMME_{int(kappaR)}.").joinpath("pathway.npz"))['arr_0']
  194. undercharged, undercharged_inv = undercharged[:int(len(undercharged) / 2)], undercharged[int(len(undercharged) / 2):]
  195. overcharged, overcharged_inv = overcharged[:int(len(overcharged) / 2)], overcharged[int(len(overcharged) / 2):]
  196. neutral, neutral_inv = neutral[:int(len(neutral) / 2)], neutral[int(len(neutral) / 2):]
  197. ic_data = [undercharged, neutral, overcharged]
  198. ic_data_inv = [undercharged_inv, neutral_inv, overcharged_inv]
  199. params = ModelParams(R=150, kappaR=kappaR)
  200. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30, sigma0=np.asarray(sigma0))
  201. ex2 = ex1.clone()
  202. ex3 = ex1.clone().inverse_sign(exclude_00=True)
  203. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  204. energy = path_plot.evaluate_path()
  205. x_axis = path_plot.rot_path.stack_x_axes()
  206. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  207. energy_inv = path_plot_inv.evaluate_path()
  208. labels = [rf'$\eta={s0/sigma_tilde}$' for s0 in sigma0]
  209. fig, ax = plt.subplots()
  210. for d, d_inv, en, en_inv, label, c in zip(ic_data, ic_data_inv, energy.T, energy_inv.T, labels, COLORS):
  211. ax.plot(d[:, 0], d[:, 1], label=label, c=c)
  212. ax.plot(d_inv[:, 0], d_inv[:, 1], c=c)
  213. ax.plot(x_axis, en, ls='--', c=c)
  214. ax.plot(x_axis, en_inv, ls='--', c=c)
  215. DipolePath3.plot_style(fig, ax)
  216. if save_as is not None:
  217. plt.savefig(save_as, dpi=300)
  218. plt.show()
  219. def combined_all(config_data: dict, save_as=None):
  220. sigma_tilde = 0.00099
  221. kappaR_list = [1, 3, 10]
  222. abar_list = [0.5, 0.4, 0.3]
  223. sigma0_list = [-0.000198, 0.00, 0.000198]
  224. kappaR = 3
  225. abar = 0.5
  226. em_data_kappaR = (Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_C")
  227. .joinpath("FIX_A").joinpath(f"ECC_{np.round(abar / 2, 4)}"))
  228. ic_data_kappaR = []
  229. ic_data_kappaR_inv = []
  230. for kR in kappaR_list:
  231. em_data = np.load(em_data_kappaR.joinpath(f"EMME_{kR}.").joinpath("pathway.npz"))['arr_0']
  232. em_data, em_data_inv = em_data[:int(len(em_data) / 2)], em_data[int(len(em_data) / 2):]
  233. ic_data_kappaR.append(em_data)
  234. ic_data_kappaR_inv.append(em_data_inv)
  235. params = ModelParams(R=150, kappaR=np.asarray(kappaR_list))
  236. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30)
  237. ex2 = ex1.clone()
  238. ex3 = ex1.clone().inverse_sign(exclude_00=True)
  239. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=0)
  240. energy_kappaR = path_plot.evaluate_path()
  241. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=0)
  242. energy_kappaR_inv = path_plot_inv.evaluate_path()
  243. x_axis_kappaR = path_plot.rot_path.stack_x_axes()
  244. labels_kappaR = [rf'$\kappa R={kR}$' for kR in [1, 3, 10]]
  245. em_data_abar = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_B").joinpath("FIX_M")
  246. ic_data_abar = []
  247. ic_data_abar_inv = []
  248. for ab in abar_list:
  249. em_data = np.load(
  250. em_data_abar.joinpath(f"ECC_{np.round(ab / 2, 4)}").joinpath(f"EMME_{kappaR}.").joinpath("pathway.npz"))[
  251. 'arr_0']
  252. em_data, em_data_inv = em_data[:int(len(em_data) / 2)], em_data[int(len(em_data) / 2):]
  253. ic_data_abar.append(em_data)
  254. ic_data_abar_inv.append(em_data_inv)
  255. params = ModelParams(R=150, kappaR=kappaR)
  256. ex1 = expansion.MappedExpansionDipole(np.asarray(abar_list), params.kappaR, sigma_tilde, l_max=30)
  257. ex2 = ex1.clone()
  258. ex3 = ex1.clone().inverse_sign(exclude_00=True)
  259. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  260. energy_abar = path_plot.evaluate_path()
  261. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  262. energy_abar_inv = path_plot_inv.evaluate_path()
  263. x_axis_abar = path_plot.rot_path.stack_x_axes()
  264. labels_abar = [rf'$\bar a={a}$' for a in abar_list]
  265. em_data_charge = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_D").joinpath("CHANGE_ZC")
  266. undercharged = np.load(em_data_charge.joinpath("ZC_-56").joinpath("pathway.npz"))['arr_0']
  267. overcharged = np.load(em_data_charge.joinpath("ZC_56").joinpath("pathway.npz"))['arr_0']
  268. neutral_path = Path(config_data["emanuele_data"]).joinpath("FIG_5_JANUS").joinpath("FIG_5_JANUS_B").joinpath("FIX_M")
  269. neutral = np.load(
  270. neutral_path.joinpath(f"ECC_{np.round(abar / 2, 4)}").joinpath(f"EMME_{int(kappaR)}.").joinpath("pathway.npz"))[
  271. 'arr_0']
  272. undercharged, undercharged_inv = undercharged[:int(len(undercharged) / 2)], undercharged[
  273. int(len(undercharged) / 2):]
  274. overcharged, overcharged_inv = overcharged[:int(len(overcharged) / 2)], overcharged[int(len(overcharged) / 2):]
  275. neutral, neutral_inv = neutral[:int(len(neutral) / 2)], neutral[int(len(neutral) / 2):]
  276. ic_data_sigma0 = [undercharged, neutral, overcharged]
  277. ic_data_sigma0_inv = [undercharged_inv, neutral_inv, overcharged_inv]
  278. params = ModelParams(R=150, kappaR=kappaR)
  279. ex1 = expansion.MappedExpansionDipole(abar, params.kappaR, sigma_tilde, l_max=30, sigma0=np.asarray(sigma0_list))
  280. ex2 = ex1.clone()
  281. ex3 = ex1.clone().inverse_sign(exclude_00=True)
  282. path_plot = PathEnergyPlot(ex1, ex2, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  283. energy_sigma0 = path_plot.evaluate_path()
  284. path_plot_inv = PathEnergyPlot(ex1, ex3, DipolePath3, dist=2., params=params, match_expansion_axis_to_params=None)
  285. energy_sigma0_inv = path_plot_inv.evaluate_path()
  286. x_axis_sigma0 = path_plot.rot_path.stack_x_axes()
  287. labels_sigma0 = [rf'$\eta={s0/sigma_tilde:.1f}$' for s0 in sigma0_list]
  288. # fig, axs = plt.subplots(3, 1, figsize=(6, 7.8))
  289. fig = plt.figure(figsize=(4, 3.6))
  290. gs = gridspec.GridSpec(2, 1, figure=fig)
  291. # gs.update(left=0.12, right=0.975, top=0.96, bottom=0.04, hspace=0.3)
  292. gs.update(left=0.12, right=0.975, top=0.94, bottom=0.06, hspace=0.3)
  293. # axs = [fig.add_subplot(gs[0, 0]), fig.add_subplot(gs[1, 0]), fig.add_subplot(gs[2, 0])]
  294. axs = [fig.add_subplot(gs[0, 0]), fig.add_subplot(gs[1, 0])]
  295. for d, d_inv, en, en_inv, label, c in zip(ic_data_kappaR, ic_data_kappaR_inv, energy_kappaR.T, energy_kappaR_inv.T, labels_kappaR, COLOR_LIST):
  296. axs[0].set_title('Screening', fontsize=11, y=0.98)
  297. axs[0].plot(d[:, 0], d[:, 1], label=label, c=c)
  298. axs[0].plot(x_axis_kappaR, en, ls='--', c=c)
  299. axs[0].plot(d_inv[:, 0], d_inv[:, 1], c=c)
  300. axs[0].plot(x_axis_kappaR, en_inv, ls='--', c=c)
  301. DipolePath3.plot_style(fig, axs[0], size=None)
  302. axs[0].get_legend().set_bbox_to_anchor((0.65, 1.03))
  303. # for d, d_inv, en, en_inv, label, c in zip(ic_data_abar, ic_data_abar_inv, energy_abar.T, energy_abar_inv.T, labels_abar, COLOR_LIST):
  304. # axs[1].set_title('Eccentricity', fontsize=11, y=0.98)
  305. # axs[1].plot(d[:, 0], d[:, 1], label=label, c=c)
  306. # axs[1].plot(x_axis_abar, en, ls='--', c=c)
  307. # axs[1].plot(d_inv[:, 0], d_inv[:, 1], c=c)
  308. # axs[1].plot(x_axis_abar, en_inv, ls='--', c=c)
  309. # DipolePath3.plot_style(fig, axs[1], size=None)
  310. # axs[1].get_legend().set_bbox_to_anchor((0.65, 1.02))
  311. for d, d_inv, en, en_inv, label, c in reversed(list(zip(ic_data_sigma0, ic_data_sigma0_inv, energy_sigma0.T,
  312. energy_sigma0_inv.T, labels_sigma0, COLOR_LIST[:3][::-1]))):
  313. axs[1].set_title('Net charge', fontsize=11, y=0.98)
  314. axs[1].plot(d[:, 0], d[:, 1], label=label, c=c)
  315. axs[1].plot(x_axis_sigma0, en, ls='--', c=c)
  316. axs[1].plot(d_inv[:, 0], d_inv[:, 1], c=c)
  317. axs[1].plot(x_axis_sigma0, en_inv, ls='--', c=c)
  318. DipolePath3.plot_style(fig, axs[1], size=None)
  319. axs[1].get_legend().set_bbox_to_anchor((0.65, 1.02))
  320. for ax in axs:
  321. ax.yaxis.set_label_coords(-0.08, 0.5)
  322. # axs[-1].set_xlabel('rotational path', fontsize=15)
  323. plt.tight_layout()
  324. if save_as is not None:
  325. plt.savefig(save_as, dpi=300)
  326. plt.show()
  327. if __name__ == '__main__':
  328. with open(Path("/home/andraz/ChargedShells/charged-shells/config.json")) as config_file:
  329. config_data = json.load(config_file)
  330. # sections_plot(save_as=Path("/home/andraz/ChargedShells/Figures/dipole_test_path.png"))
  331. # kappaR_dependence(np.array([3, 5]), 0.5,
  332. # # save_as=Path("/home/andraz/ChargedShells/Figures/quadrupole_kappaR_dep.png")
  333. # )
  334. # abar_dependence(np.array([0.3, 0.4, 0.5]), 3,
  335. # save_as=Path("/home/andraz/ChargedShells/Figures/quadrupole_abar_dep.png")
  336. # )
  337. # sigma0_dependence(np.array([-0.0002, 0.00, 0.0002]), 3, 0.5,
  338. # save_as=Path("/home/andraz/ChargedShells/Figures/quadrupole_charge_dep_abar05_kappaR3.png")
  339. # )
  340. # model_comparison(config_data,
  341. # # save_as=Path(config_data["figures"]).joinpath("Emanuele_data").joinpath('IC_CS_janus_path.pdf')
  342. # )
  343. # combined_kappaR_dependence(config_data, kappaR=[1, 3, 10], abar=0.5,
  344. # # save_as=Path(config_data["figures"]).joinpath("final_figures").joinpath('janus_kappaR_dep.png')
  345. # )
  346. #
  347. # combined_abar_dependence(config_data, kappaR=3, abar=[0.3, 0.4, 0.5],
  348. # # save_as=Path(config_data["figures"]).joinpath("final_figures").joinpath('janus_abar_dep.png')
  349. # )
  350. #
  351. # combined_sigma0_dependence(config_data,
  352. # # save_as=Path(config_data["figures"]).joinpath("final_figures").joinpath('janus_charge_dep.png')
  353. # )
  354. #
  355. combined_all(config_data,
  356. save_as=Path(config_data["figures"]).joinpath("final_figures").joinpath('janus_combined_dep.png')
  357. )