vasprocar 1.1.19.116__tar.gz → 1.1.19.118__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.

Potentially problematic release.


This version of vasprocar might be problematic. Click here for more details.

Files changed (119) hide show
  1. {vasprocar-1.1.19.116/vasprocar.egg-info → vasprocar-1.1.19.118}/PKG-INFO +1 -1
  2. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/setup.py +1 -1
  3. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/__main__.py +1 -1
  4. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/_info.py +11 -11
  5. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.spin_video +2 -2
  6. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_spin_texture_contour.py +68 -25
  7. vasprocar-1.1.19.118/vasprocar/src/plot/plot_spin_texture_contour_video.py +408 -0
  8. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/spin_texture_contour.py +33 -23
  9. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/spin_texture_contour_video.py +65 -20
  10. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118/vasprocar.egg-info}/PKG-INFO +1 -1
  11. vasprocar-1.1.19.116/vasprocar/src/plot/plot_spin_texture_contour_video.py +0 -413
  12. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/LICENSE.txt +0 -0
  13. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/README.md +0 -0
  14. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/setup.cfg +0 -0
  15. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/__init__.py +0 -0
  16. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/_info.py +0 -0
  17. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/_info_b.py +0 -0
  18. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/_label.py +0 -0
  19. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/_nscf.py +0 -0
  20. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/_var_kpoints.py +0 -0
  21. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/angular_momentum_plot/plot_projecao_angular_momentum.py +0 -0
  22. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/angular_momentum_plot/plot_projecao_angular_momentum_grace.py +0 -0
  23. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/contribuicao.py +0 -0
  24. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_pdos_ldos.py +0 -0
  25. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_plot/Grace/plot_dos_pdos_ldos.py +0 -0
  26. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_plot/Grace/plot_dos_pdos_ldos_[polarizado].py +0 -0
  27. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_plot/Grace/plot_dos_pdos_ldos_[polarizado_delta].py +0 -0
  28. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_plot/plot_dos_pdos_ldos.py +0 -0
  29. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/dos_plot/plot_dos_pdos_ldos_[polarizado].py +0 -0
  30. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/kpoints_2D_3D.py +0 -0
  31. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_QE/projecao_angular_momentum.py +0 -0
  32. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/_info_b.py +0 -0
  33. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/_label.py +0 -0
  34. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/_nscf.py +0 -0
  35. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/_var_kpoints.py +0 -0
  36. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/chgcar.py +0 -0
  37. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/contcar_info.py +0 -0
  38. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/contribuicao.py +0 -0
  39. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/dielectric_function.py +0 -0
  40. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/dos_pdos_ldos.py +0 -0
  41. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/dos_pdos_ldos_[polarizado].py +0 -0
  42. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/kpoints_2D_3D.py +0 -0
  43. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/parchg.py +0 -0
  44. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/poscar_replace.py +0 -0
  45. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/postar_combination.py +0 -0
  46. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/potencial.py +0 -0
  47. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_VASP/wave_function.py +0 -0
  48. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_dft.py +0 -0
  49. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_dft2kp.py +0 -0
  50. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_loop.py +0 -0
  51. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_settings.py +0 -0
  52. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/_update.py +0 -0
  53. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/bandas_2D.py +0 -0
  54. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/bandas_3D.py +0 -0
  55. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/bandas_4D.py +0 -0
  56. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/correction_file.py +0 -0
  57. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/etc/BibTeX.dat +0 -0
  58. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/etc/DOI.png +0 -0
  59. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/etc/Greek_alphabet.jpg +0 -0
  60. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/fermi_surface.py +0 -0
  61. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.bands +0 -0
  62. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.chgcar +0 -0
  63. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.dos +0 -0
  64. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.location +0 -0
  65. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.locpot +0 -0
  66. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.orbitals +0 -0
  67. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/input.vasprocar.spin +0 -0
  68. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/inputs.py +0 -0
  69. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/inputs/inputs_files.py +0 -0
  70. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/level_countour.py +0 -0
  71. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/orbital_texture.py +0 -0
  72. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/orbital_texture_vector.py +0 -0
  73. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_bandas_2D.py +0 -0
  74. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_chgcar.py +0 -0
  75. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_dielectric_function.py +0 -0
  76. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_dos_pdos_ldos.py +0 -0
  77. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_dos_pdos_ldos_[polarizado].py +0 -0
  78. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_dos_pdos_ldos_[polarizado_delta].py +0 -0
  79. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_parchg.py +0 -0
  80. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_potencial.py +0 -0
  81. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_projecao_localizacao.py +0 -0
  82. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_projecao_orbitais.py +0 -0
  83. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_projecao_psi.py +0 -0
  84. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_projecao_spin.py +0 -0
  85. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/Grace/plot_wave_function.py +0 -0
  86. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/_plot_settings.py +0 -0
  87. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_bandas_2D.py +0 -0
  88. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_bandas_3D_matplotlib.py +0 -0
  89. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_bandas_3D_plotly.py +0 -0
  90. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_bandas_4D_plotly.py +0 -0
  91. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_chgcar.py +0 -0
  92. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_dielectric_function.py +0 -0
  93. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_dos_pdos_ldos.py +0 -0
  94. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_dos_pdos_ldos_[polarizado].py +0 -0
  95. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_fermi_surface.py +0 -0
  96. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_level_countour.py +0 -0
  97. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_orbital_texture.py +0 -0
  98. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_orbital_texture_vector.py +0 -0
  99. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_parchg.py +0 -0
  100. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_potencial.py +0 -0
  101. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_projecao_localizacao.py +0 -0
  102. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_projecao_orbitais.py +0 -0
  103. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_projecao_psi.py +0 -0
  104. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_projecao_spin.py +0 -0
  105. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_spin_texture_2D.py +0 -0
  106. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_spin_texture_3D.py +0 -0
  107. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_spin_texture_4D.py +0 -0
  108. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_spin_texture_4D_[iso].py +0 -0
  109. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/plot/plot_wave_function.py +0 -0
  110. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/projecao_localizacao.py +0 -0
  111. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/projecao_orbitais.py +0 -0
  112. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/projecao_psi.py +0 -0
  113. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/projecao_spin.py +0 -0
  114. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar/src/spin_texture.py +0 -0
  115. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar.egg-info/SOURCES.txt +0 -0
  116. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar.egg-info/dependency_links.txt +0 -0
  117. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar.egg-info/entry_points.txt +0 -0
  118. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar.egg-info/requires.txt +0 -0
  119. {vasprocar-1.1.19.116 → vasprocar-1.1.19.118}/vasprocar.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vasprocar
3
- Version: 1.1.19.116
3
+ Version: 1.1.19.118
4
4
  Summary: VASProcar is an open-source package written in the Python 3 programming language, which aims to provide an intuitive tool for the post-processing of the output files produced by the DFT VASP/QE codes, through an interactive user interface.
5
5
  Home-page: https://doi.org/10.5281/zenodo.6343960
6
6
  Download-URL: https://doi.org/10.5281/zenodo.6343960
@@ -6,7 +6,7 @@ from typing import Optional
6
6
 
7
7
  setup(
8
8
  name = "vasprocar",
9
- version = "1.1.19.116",
9
+ version = "1.1.19.118",
10
10
  entry_points={'console_scripts': ['vasprocar = vasprocar:main']},
11
11
  description = "VASProcar is an open-source package written in the Python 3 programming language, which aims to provide an intuitive tool for the post-processing of the output files produced by the DFT VASP/QE codes, through an interactive user interface.",
12
12
  author = "Augusto de Lelis Araujo and Renan da Paixao Maciel",
@@ -14,7 +14,7 @@ dir_vasprocar = os.path.dirname(os.path.realpath(__file__))
14
14
  print(f'{dir_vasprocar}')
15
15
  #------------------------
16
16
 
17
- version = '1.1.19.116'
17
+ version = '1.1.19.118'
18
18
  VASProcar_name = 'VASProcar version ' + version
19
19
 
20
20
  url_1 = 'https://pypi.org/project/vasprocar'
@@ -247,16 +247,16 @@ if (ispin == 2):
247
247
 
248
248
  if (nspin == 2):
249
249
  number = 0
250
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
251
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
252
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
250
+ VTemp = outcar.readline()
251
+ VTemp = outcar.readline()
252
+ VTemp = outcar.readline()
253
253
 
254
254
  for i in range(nk):
255
255
  number += 1
256
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
257
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
256
+ VTemp = outcar.readline()
257
+ VTemp = outcar.readline()
258
258
  for j in range(int(nb/2)):
259
- VTemp = outcar.readline().split(); print(f'teste = {VTemp}')
259
+ VTemp = outcar.readline().split()
260
260
  if (nspin == 1): n1 = int(VTemp[0])
261
261
  if (nspin == 2): n1 = int(VTemp[0]) + nb
262
262
  n2 = float(VTemp[1])
@@ -272,13 +272,13 @@ if (ispin == 2):
272
272
  n1_conducao = n1
273
273
  kp2 = number
274
274
  GAP = (maior_n2 - menor_n2)
275
- VTemp = outcar.readline(); print(f'teste = {VTemp}')
275
+ VTemp = outcar.readline()
276
276
 
277
277
  if (n_procar == 1):
278
- if (n1_valencia <= nb): inform.write(f'Last band occuped = {n1_valencia}up \n')
279
- if (n1_valencia > nb): inform.write(f'Last band occuped = {n1_valencia -nb}dw \n')
280
- if (n1_conducao <= nb): inform.write(f'First band empty = {n1_conducao}up \n')
281
- if (n1_conducao > nb): inform.write(f'First band empty = {n1_conducao -nb}dw \n')
278
+ if (n1_valencia <= nb): inform.write(f'Last band occuped = {n1_valencia} up \n')
279
+ if (n1_valencia > nb): inform.write(f'Last band occuped = {n1_valencia -nb} dw \n')
280
+ if (n1_conducao <= nb): inform.write(f'First band empty = {n1_conducao} up \n')
281
+ if (n1_conducao > nb): inform.write(f'First band empty = {n1_conducao -nb} dw \n')
282
282
  #---------------------------------------------------
283
283
  inform.write(f'Valence band maximum (VBM) = {maior_n2} eV - k-point {kp2} \n')
284
284
  inform.write(f'Conduction band minimum (CBM) = {menor_n2} eV - k-point {kp1} \n')
@@ -26,8 +26,8 @@ tipo_spin = 4
26
26
  ##############################################################
27
27
  # Which band do you want to analyze? =========================
28
28
  ##############################################################
29
- n_band = 1
30
-
29
+ band_i = 1
30
+ band_f = 2
31
31
 
32
32
 
33
33
  #######################################################################
@@ -138,6 +138,34 @@ map_red_blue = colors.LinearSegmentedColormap.from_list("", ["red","pink","pink"
138
138
  "cyan","cyan","cyan","blue","magenta","magenta","magenta","red"])
139
139
  map_color = map_red_blue
140
140
 
141
+
142
+ #-------------
143
+ min_energ = []
144
+ max_energ = []
145
+ pulo = (pulo + 1)
146
+ levels = [0]*1
147
+ #-----------------------------------
148
+ for b in range(band_i, (band_f +1)):
149
+ colum = (3 -1) + (b -1)*4 +2
150
+ energia = spin[:,colum-1] + dE_fermi + Delta_E
151
+ #-----------------------------
152
+ min_energ.append(min(energia))
153
+ max_energ.append(max(energia))
154
+ #---------------------------------
155
+ # energ_i = min(min_energ)
156
+ # energ_f = max(max_energ)
157
+ #----------------------
158
+ if (tipo_contour == 0):
159
+ for i in range(n_contour + 2):
160
+ if (i != 0 and i != (n_contour + 1)):
161
+ levels_n[i-1] = energ_i + ((energ_f - energ_i)/(n_contour + 1))*(i-1)
162
+ #----------------------
163
+ if (tipo_contour == 1):
164
+ for i in range(n_contour):
165
+ levels_n[i] = energ_i + ((energ_f - energ_i)/(n_contour - 1))*(i)
166
+ #-----------------------------------------------------------------------
167
+
168
+
141
169
  #=========================================================================
142
170
  # 2D Plot of Spin Projection on Level Contours: ==========================
143
171
  #=========================================================================
@@ -210,34 +238,49 @@ for i in range (1,(6+1)):
210
238
 
211
239
  #------------------------------------------
212
240
 
213
- for b in range(n_band_f - n_band_i + 1):
214
-
215
- energia = spin[:,(3 + b*4)] + dE_fermi
216
- Spin_Sx = spin[:,(4 + b*4)]
217
- Spin_Sy = spin[:,(5 + b*4)]
218
- Spin_Sz = spin[:,(6 + b*4)]
219
-
220
- pulo = (pulo + 1)
221
- levels = [0]*1
222
-
223
- #------------------------------------------------------------------------------
224
-
225
- if (tipo_contour == 0):
226
- energ_i = min(energia)
227
- energ_f = max(energia)
228
- for ii in range(n_contour + 2):
229
- if (ii != 0 and ii != (n_contour + 1)):
230
- levels_n[ii-1] = energ_i + ((energ_f - energ_i)/(n_contour + 1))*(ii-1)
231
-
232
- if (tipo_contour == 1):
233
- for ii in range(n_contour):
234
- levels_n[ii] = energ_i + ((energ_f - energ_i)/(n_contour - 1))*(ii)
241
+ # for b in range(nb):
242
+ # energia = spin[:,(3 + b*4)] + dE_fermi
243
+ # Spin_Sx = spin[:,(4 + b*4)]
244
+ # Spin_Sy = spin[:,(5 + b*4)]
245
+ # Spin_Sz = spin[:,(6 + b*4)]
246
+
247
+ for b in range(band_i, (band_f +1)):
248
+ #-------------------------------
249
+ cont = 0
250
+ if (allowed_bands == 'all'): cont = 1
251
+ if (allowed_bands == 'even'):
252
+ if ((int(b/2) -(b/2)) == 0.0): cont = 1
253
+ if (allowed_bands == 'odd'):
254
+ if ((int(b/2) -(b/2)) != 0.0): cont = 1
255
+ #-----------------------------------------
256
+ if (cont == 1):
257
+ #---------------------------
258
+ colum = (3 -1) + (b -1)*4 +2
259
+ #---------------------------
260
+ energia = spin[:,colum-1] + dE_fermi
261
+ Spin_Sx = spin[:,colum+0]
262
+ Spin_Sy = spin[:,colum+1]
263
+ Spin_Sz = spin[:,colum+2]
264
+
265
+
266
+ #------------------------
267
+ # if (tipo_contour == 0):
268
+ # energ_i = min(energia)
269
+ # energ_f = max(energia)
270
+ # for ii in range(n_contour + 2):
271
+ # if (ii != 0 and ii != (n_contour + 1)):
272
+ # levels_n[ii-1] = energ_i + ((energ_f - energ_i)/(n_contour + 1))*(ii-1)
273
+ #----------------------------------------------------------------------------------
274
+ # if (tipo_contour == 1):
275
+ # for ii in range(n_contour):
276
+ # levels_n[ii] = energ_i + ((energ_f - energ_i)/(n_contour - 1))*(ii)
277
+ #---------------------------------------------------------------------------
235
278
 
236
- # Realizando a interpolação de [Kx, Ky, Energia] -------------------------
237
279
 
280
+ #---------------------------------------------------------------------------
281
+ # Realizando a interpolação de [Kx, Ky, Energia] ---------------------------
238
282
  e_grid = griddata((eixo1,eixo2), energia, (x_grid,y_grid), method = 'cubic')
239
-
240
- #------------------------------------------------------------------------------
283
+ #---------------------------------------------------------------------------
241
284
 
242
285
  for j in range(n_contour):
243
286
 
@@ -0,0 +1,408 @@
1
+
2
+ import os
3
+ import numpy as np
4
+ import matplotlib as mpl
5
+ from matplotlib import cm
6
+ from matplotlib import pyplot as plt
7
+ import matplotlib.ticker as ticker
8
+ from mpl_toolkits.mplot3d.axes3d import Axes3D
9
+ from matplotlib.ticker import LinearLocator, FormatStrFormatter
10
+ import matplotlib.colors as colors
11
+ from scipy.interpolate import griddata
12
+
13
+ print(" ")
14
+ print("========== 2D Plot of Spin Projection (Level Contours) ==========")
15
+
16
+ if (tipo_contour < 2):
17
+ levels_n = [0.0]*n_contour
18
+
19
+ #--------------------------------------------------------------------------
20
+ # Variables that define the thickness and length of vectors in the plot ---
21
+ #--------------------------------------------------------------------------
22
+ if ((fator > -1.0 and fator < 1.0) or fator == -1.0):
23
+ fator == 1.0
24
+
25
+ if (fator > 0.0):
26
+ fator = 1/fator
27
+
28
+ if (fator < 0.0):
29
+ fator = (fator**2)**0.5
30
+
31
+ espessura = 0.005 # Use espessura = 100 if you only want to plot the triangular head of the arrow and eliminate the tail,
32
+ comprimento = 2.0*fator # which makes it easier to adjust the size/volume of the vectors by adjusting the comprimento variable.
33
+ #----------------------
34
+
35
+ #------------------------------------------------------------------------
36
+ # Test to know which directories must be correctly informed -------------
37
+ #------------------------------------------------------------------------
38
+ if os.path.isdir('src'):
39
+ 0 == 0
40
+ dir_output = dir_files + '/output/Spin_Texture/'
41
+ else:
42
+ dir_files = ''
43
+ dir_output = ''
44
+ #-----------------
45
+
46
+ #---------------------------------------------------------------------------------------
47
+ # Checking if the "figures" subfolder exists, if it doesn't exist it will be created ---
48
+ #---------------------------------------------------------------------------------------
49
+ if os.path.isdir(dir_output + 'figures'):
50
+ 0 == 0
51
+ else:
52
+ os.mkdir(dir_output + 'figures')
53
+ #----------------------------------
54
+
55
+ #======================================================================
56
+ #======================================================================
57
+ # File Structure for Plot via Matplotlib ==============================
58
+ #======================================================================
59
+ #======================================================================
60
+
61
+ spin = np.loadtxt(dir_output + 'Spin_Texture.dat')
62
+ spin.shape
63
+
64
+ print(" ")
65
+ print(".........................")
66
+ print("..... Wait a moment .....")
67
+ print(".........................")
68
+ print(". It might take a while .")
69
+ print(".........................")
70
+
71
+ #----------------------------------------------------------------------
72
+
73
+ if (esc_fermi == 0): dE_fermi = 0.0
74
+ if (esc_fermi == 1): dE_fermi = (Efermi)*(-1)
75
+
76
+ #----------------------------------------------------------------------
77
+
78
+ if (Plano_k == 1): # Plane (kx,ky) or (k1,k2)
79
+ eixo1 = spin[:,0]
80
+ eixo2 = spin[:,1]
81
+
82
+ if (Plano_k == 2): # Plane (kx,kz) or (k1,k3)
83
+ eixo1 = spin[:,0]
84
+ eixo2 = spin[:,2]
85
+
86
+ if (Plano_k == 3): # Plane (ky,kz) or (k2,k3)
87
+ eixo1 = spin[:,1]
88
+ eixo2 = spin[:,2]
89
+
90
+
91
+ #-------------
92
+ min_energ = []
93
+ max_energ = []
94
+ pulo = (pulo + 1)
95
+ levels = [0]*1
96
+ #-----------------------------------
97
+ for b in range(band_i, (band_f +1)):
98
+ colum = (3 -1) + (b -1)*4 +2
99
+ energia = spin[:,colum-1] + dE_fermi + Delta_E
100
+ #-----------------------------
101
+ min_energ.append(min(energia))
102
+ max_energ.append(max(energia))
103
+ #---------------------------------
104
+ # energ_i = min(min_energ)
105
+ # energ_f = max(max_energ)
106
+ #----------------------
107
+ if (tipo_contour == 0):
108
+ for i in range(n_contour + 2):
109
+ if (i != 0 and i != (n_contour + 1)):
110
+ levels_n[i-1] = energ_i + ((energ_f - energ_i)/(n_contour + 1))*(i-1)
111
+ #----------------------
112
+ if (tipo_contour == 1):
113
+ for i in range(n_contour):
114
+ levels_n[i] = energ_i + ((energ_f - energ_i)/(n_contour - 1))*(i)
115
+ #-----------------------------------------------------------------------
116
+
117
+
118
+ if (Plano_k == 1):
119
+ s1 = 'Sx'; s2 = 'Sy'; s3 = 'Sz'
120
+ sa = r'${S}_{x}$'; sb = r'${S}_{y}$'; sc = r'${S}_{z}$'
121
+ if (Plano_k == 2):
122
+ s1 = 'Sx'; s2 = 'Sz'; s3 = 'Sy'
123
+ sa = r'${S}_{x}$'; sb = r'${S}_{z}$'; sc = r'${S}_{y}$'
124
+ if (Plano_k == 3):
125
+ s1 = 'Sy'; s2 = 'Sz'; s3 = 'Sx'
126
+ sa = r'${S}_{y}$'; sb = r'${S}_{z}$'; sc = r'${S}_{x}$'
127
+
128
+
129
+ #----------------------------------
130
+ if (Dimensao < 4 and Plano_k == 1):
131
+ ca = r'${k}_{x}$'; cb = r'${k}_{y}$'
132
+ if (Dimensao < 4 and Plano_k == 2):
133
+ ca = r'${k}_{x}$'; cb = r'${k}_{z}$'
134
+ if (Dimensao < 4 and Plano_k == 3):
135
+ ca = r'${k}_{y}$'; cb = r'${k}_{z}$'
136
+ #--------------------------------------
137
+ if (Dimensao == 4 and Plano_k == 1):
138
+ ca = r'${k}_{1}$'; cb = r'${k}_{2}$'
139
+ if (Dimensao == 4 and Plano_k == 2):
140
+ ca = r'${k}_{1}$'; cb = r'${k}_{3}$'
141
+ if (Dimensao == 4 and Plano_k == 3):
142
+ ca = r'${k}_{2}$'; cb = r'${k}_{3}$'
143
+ #-----------------------------------------
144
+ if (Dimensao == 1): cc = r' $(2{\pi}/{a})$'
145
+ if (Dimensao == 2): cc = r' $({\AA}^{-1})$'
146
+ if (Dimensao == 3): cc = r' $({nm}^{-1})$'
147
+ if (Dimensao == 4): cc = ' '
148
+
149
+
150
+ # Create meshgrid for x,y ------------------------------------------------
151
+ xi = np.linspace(min(eixo1), max(eixo1), n_d)
152
+ yi = np.linspace(min(eixo2), max(eixo2), n_d)
153
+ x_grid, y_grid = np.meshgrid(xi,yi)
154
+ e_grid = griddata((eixo1,eixo2), energia, (x_grid,y_grid), method = 'cubic')
155
+
156
+
157
+ # Color Maps -------------------------------------------------------------
158
+ # map_red_blue = colors.LinearSegmentedColormap.from_list("", ["red","white","red","white","blue","white","blue","white","red"])
159
+ # map_red_blue = colors.LinearSegmentedColormap.from_list("", ["red","magenta","red","magenta","blue","magenta","blue","magenta","red"])
160
+ # map_red_blue = colors.LinearSegmentedColormap.from_list("", ["red","pink","red","magenta","blue","cyan","blue","magenta","red"])
161
+ map_red_blue = colors.LinearSegmentedColormap.from_list("", ["red","pink","pink","pink","red","magenta","magenta","magenta","blue",
162
+ "cyan","cyan","cyan","blue","magenta","magenta","magenta","red"])
163
+ map_gray = (mpl.colors.ListedColormap(['darkgray', 'darkgray']))
164
+ norma = colors.Normalize(0, 360)
165
+
166
+
167
+ #=========================================================================
168
+ # 2D Plot of Spin Projection on Level Contours: ==========================
169
+ #=========================================================================
170
+
171
+ for i in range (n_contour):
172
+ #----------------------
173
+ fig = plt.figure()
174
+ ax = fig.add_subplot(111)
175
+ #------------------------
176
+
177
+ if (tipo_spin == 1):
178
+ c1 = sa + ' | ' + ca + cc
179
+ c2 = cb + cc
180
+ L1 = sa + r'${\uparrow}$'
181
+ L2 = sa + r'${\downarrow}$'
182
+ rotulo = s1
183
+
184
+ if (tipo_spin == 2):
185
+ c1 = ca + cc
186
+ c2 = sb + ' | ' + cb + cc
187
+ L1 = sb + r'${\uparrow}$'
188
+ L2 = sb + r'${\downarrow}$'
189
+ rotulo = s2
190
+
191
+ if (tipo_spin == 3):
192
+ c1 = sc + ' | ' + ca + cc
193
+ c2 = cb + cc
194
+ L1 = sc + r'${\uparrow}$'
195
+ L2 = sc + r'${\downarrow}$'
196
+ rotulo = s3
197
+
198
+ if (tipo_spin == 4):
199
+ c1 = sa + ' | ' + ca + cc
200
+ c2 = sb + ' | ' + cb + cc
201
+ rotulo = s1 + s2
202
+
203
+ if (tipo_spin == 5):
204
+ rotulo = s1 + s3
205
+ c1 = sa + ' | ' + ca + cc
206
+ c2 = sc + ' | ' + cb + cc
207
+
208
+ if (tipo_spin == 6):
209
+ rotulo = s2 + s3
210
+ c1 = sc + ' | ' + ca + cc
211
+ c2 = sb + ' | ' + cb + cc
212
+
213
+ if ((Plano_k == 1 and tipo_spin == 4) or (Plano_k == 2 and tipo_spin == 5) or (Plano_k == 3 and tipo_spin == 5)):
214
+ L1 = r'${S}_{x}{\uparrow} + {S}_{y}{\uparrow}$'
215
+ L2 = r'${S}_{x|y}{\uparrow}$'
216
+ L3 = r'${S}_{x|y}{\uparrow} + {S}_{y|x}{\downarrow}$'
217
+ L4 = r'${S}_{x|y}{\downarrow}$'
218
+ L5 = r'${S}_{x}{\downarrow} + {S}_{y}{\downarrow}$'
219
+
220
+ if ((Plano_k == 1 and tipo_spin == 5) or (Plano_k == 2 and tipo_spin == 4) or (Plano_k == 3 and tipo_spin == 6)):
221
+ L1 = r'${S}_{x}{\uparrow} + {S}_{z}{\uparrow}$'
222
+ L2 = r'${S}_{x|z}{\uparrow}$'
223
+ L3 = r'${S}_{x|z}{\uparrow} + {S}_{z|x}{\downarrow}$'
224
+ L4 = r'${S}_{x|z}{\downarrow}$'
225
+ L5 = r'${S}_{x}{\downarrow} + {S}_{z}{\downarrow}$'
226
+
227
+ if ((Plano_k == 1 and tipo_spin == 6) or (Plano_k == 2 and tipo_spin == 6) or (Plano_k == 3 and tipo_spin == 4)):
228
+ L1 = r'${S}_{y}{\uparrow} + {S}_{z}{\uparrow}$'
229
+ L2 = r'${S}_{y|z}{\uparrow}$'
230
+ L3 = r'${S}_{y|z}{\uparrow} + {S}_{z|y}{\downarrow}$'
231
+ L4 = r'${S}_{y|z}{\downarrow}$'
232
+ L5 = r'${S}_{y}{\downarrow} + {S}_{z}{\downarrow}$'
233
+
234
+ for b in range(band_i, (band_f +1)):
235
+ #-------------------------------
236
+ cont = 0; points = []
237
+ if (allowed_bands == 'all'): cont = 1
238
+ if (allowed_bands == 'even'):
239
+ if ((int(b/2) -(b/2)) == 0.0): cont = 1
240
+ if (allowed_bands == 'odd'):
241
+ if ((int(b/2) -(b/2)) != 0.0): cont = 1
242
+ #-----------------------------------------
243
+
244
+ if (cont == 1):
245
+ #---------------------------
246
+ colum = (3 -1) + (b -1)*4 +2
247
+ #---------------------------
248
+ energia = spin[:,colum-1] + dE_fermi + Delta_E
249
+ Spin_Sx = spin[:,colum+0]
250
+ Spin_Sy = spin[:,colum+1]
251
+ Spin_Sz = spin[:,colum+2]
252
+
253
+ #-----------------------------------------------------------------------------------------------
254
+ # plt.contourf(x_grid, y_grid, e_grid, levels_n, cmap = "bwr", alpha = 0.05, antialiased = True)
255
+ #-----------------------------------------------------------------------------------------------
256
+ levels[0] = levels_n[i]
257
+ cs = plt.contour(x_grid, y_grid, e_grid, levels, linestyles = '-', cmap = map_gray, linewidths = 0.5, alpha = 1.0, antialiased = True)
258
+ #---------------------------------------------------------------------------------------------------------------------------------------
259
+ points = []
260
+ paths = cs.collections[0].get_paths()
261
+ verts = [xx.vertices for xx in paths]
262
+ try:
263
+ points = np.concatenate(verts)
264
+ ...
265
+ except Exception as e:
266
+ print(f"error detected: {e}")
267
+
268
+ if (len(points) > 0 and cont == 1):
269
+ #------------------------------------------------------------------------------
270
+ new_Sx = griddata((eixo1,eixo2), Spin_Sx, (points[::pulo,0], points[::pulo,1]))
271
+ new_Sy = griddata((eixo1,eixo2), Spin_Sy, (points[::pulo,0], points[::pulo,1]))
272
+ new_Sz = griddata((eixo1,eixo2), Spin_Sz, (points[::pulo,0], points[::pulo,1]))
273
+ #------------------------------------------------------------------------------
274
+
275
+ if (Plano_k == 1): # Plane (kx,ky) or (k1,k2)
276
+ Spin_S1 = new_Sx
277
+ Spin_S2 = new_Sy
278
+ Spin_S3 = new_Sz
279
+
280
+ if (Plano_k == 2): # Plane (kx,kz) or (k1,k3)
281
+ Spin_S1 = new_Sx
282
+ Spin_S2 = new_Sz
283
+ Spin_S3 = new_Sy
284
+
285
+ if (Plano_k == 3): # Plane (ky,kz) or (k2,k3)
286
+ Spin_S1 = new_Sy
287
+ Spin_S2 = new_Sz
288
+ Spin_S3 = new_Sx
289
+
290
+ #------------------
291
+ passo = len(new_Sx)
292
+ nulo = [0.0]*passo
293
+ angle = [0]*passo
294
+ #----------------
295
+
296
+ for k in range(passo):
297
+ if (tipo_spin == 1): v_spin = [Spin_S1[k], 0.0]
298
+ if (tipo_spin == 2): v_spin = [0.0, Spin_S2[k]]
299
+ if (tipo_spin == 3): v_spin = [Spin_S3[k], 0.0]
300
+ if (tipo_spin == 4): v_spin = [Spin_S1[k], Spin_S2[k]]
301
+ if (tipo_spin == 5): v_spin = [Spin_S1[k], Spin_S3[k]]
302
+ if (tipo_spin == 6): v_spin = [Spin_S3[k], Spin_S2[k]]
303
+
304
+ #---------------------------------------------------------------------------------------------------
305
+ # Obtaining the rotation angle (counter clockwise) of the Spin vector with respect to the x-axis ---
306
+ #---------------------------------------------------------------------------------------------------
307
+ u = v_spin / np.linalg.norm(v_spin)
308
+ v = [1.0, 0.0] # Reference vector for the angle. Must be kept fixed.
309
+ dot_product = np.dot(u, v)
310
+ angle[k] = np.arccos(dot_product) / np.pi * 180
311
+ if (u[1] < 0.0): angle[k] = 360 - angle[k]
312
+
313
+ if (tipo_spin == 1): cp = ax.quiver(points[::pulo,0], points[::pulo,1], Spin_S1, nulo, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
314
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
315
+
316
+ if (tipo_spin == 2): cp = ax.quiver(points[::pulo,0], points[::pulo,1], nulo, Spin_S2, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
317
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
318
+
319
+ if (tipo_spin == 3): cp = ax.quiver(points[::pulo,0], points[::pulo,1], Spin_S3, nulo, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
320
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
321
+
322
+ if (tipo_spin == 4): cp = ax.quiver(points[::pulo,0], points[::pulo,1], Spin_S1, Spin_S2, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
323
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
324
+
325
+ if (tipo_spin == 5): cp = ax.quiver(points[::pulo,0], points[::pulo,1], Spin_S1, Spin_S3, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
326
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
327
+
328
+ if (tipo_spin == 6): cp = ax.quiver(points[::pulo,0], points[::pulo,1], Spin_S3, Spin_S2, angle, cmap = map_red_blue, norm = norma, linewidths = 0.25, edgecolor = 'black',
329
+ alpha = transp, width = espessura, scale = comprimento, scale_units = 'inches', pivot = 'tail', minlength = 0.0)
330
+
331
+ #------------------------------------------------------------------------
332
+ # plt.quiver(points[::pulo,0], points[::pulo,1], Spin_S1, Spin_S2, angle,
333
+ # scale_units = "xy", angles = "xy", pivot = 'tail', cmap = map_red_blue, norm = norma, linewidths = 0.5, edgecolor = 'black', alpha = transp)
334
+ #--------------------------------------------------------------------------------------------------------------------------------------------------------
335
+
336
+ if (tipo_spin < 4):
337
+ cbar = fig.colorbar(cp, orientation = 'vertical', shrink = 1.0, boundaries = [0, 180, 360], ticks = [90, 270])
338
+ cbar.ax.set_yticklabels([L1, L2])
339
+
340
+ if (tipo_spin > 3):
341
+ cbar = fig.colorbar(cp, orientation = 'vertical', shrink = 1.0, values = [45, 90, 135, 180, 225], ticks = [45, 90, 135, 180, 225])
342
+ cbar.ax.set_yticklabels([L1, L2, L3, L4, L5])
343
+
344
+ # ax.clabel(cs, inline = False, colors = 'black', fontsize = 8)
345
+
346
+ temp_level = f'{levels_n[i]:_.4f}'
347
+
348
+ if (levels_n[i] <= 0.0): c_energ = temp_level
349
+ if (levels_n[i] > 0.0): c_energ = '+' + temp_level
350
+
351
+ c_band = str(Banda)
352
+
353
+ if (esc_fermi == 0): plt.title('Band ' + str(Banda) + ': $E$ = ' + c_energ + ' eV')
354
+ if (esc_fermi == 1): plt.title('Band ' + str(Banda) + ': $E-E_{f}$ = ' + c_energ + ' eV')
355
+
356
+ #----------------
357
+ ax.set_xlabel(c1)
358
+ ax.set_ylabel(c2)
359
+ ax.set_box_aspect(1.0/1)
360
+ #-----------------------
361
+
362
+ m = (i + 1)
363
+ if (m < 10): number = '[000' + str(m) + ']'
364
+ if (m >= 10 and m < 100): number = '[00' + str(m) + ']'
365
+ if (m >= 100 and m < 1000): number = '[0' + str(m) + ']'
366
+ if (m >= 1000): number = '[' + str(m) + ']'
367
+
368
+ if (save_png == 1): plt.savefig(dir_output + 'figures/Spin_Texture_video_' + number + '_[' + c_energ + '].png', dpi = 300, bbox_inches='tight', pad_inches=0)
369
+ if (save_pdf == 1): plt.savefig(dir_output + 'Spin_Texture_video_' + number + '_[' + c_energ + '].pdf', dpi = 600, bbox_inches='tight', pad_inches=0)
370
+ if (save_svg == 1): plt.savefig(dir_output + 'Spin_Texture_video_' + number + '_[' + c_energ + '].svg', dpi = 600, bbox_inches='tight', pad_inches=0)
371
+ if (save_eps == 1): plt.savefig(dir_output + 'Spin_Texture_video_' + number + '_[' + c_energ + '].eps', dpi = 600, bbox_inches='tight', pad_inches=0)
372
+
373
+ fig = plt.gcf()
374
+ fig.set_size_inches(8,6)
375
+ # plt.show()
376
+ plt.close()
377
+
378
+ print(" ")
379
+ print("=== Creating a video (.mp4) of the 2D Spin Texture (Level Contours) ===")
380
+ print(" ")
381
+
382
+ #======================================================================
383
+ # Creating a video with the generated images (moviepy): ===============
384
+ #======================================================================
385
+
386
+ import moviepy.video.io.ImageSequenceClip
387
+
388
+ if (dir_output != ''):
389
+ image_output = dir_output + 'figures'
390
+ if (dir_output == ''):
391
+ image_output = os.getcwd() + '/figures'
392
+
393
+ image_files = [os.path.join(image_output,img)
394
+ for img in os.listdir(image_output)
395
+ if img.endswith('.png')]
396
+
397
+ clip = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps = n_fig)
398
+
399
+ clip.write_videofile(dir_output + 'STexture_video.mp4')
400
+
401
+ #---------------------------------------------------------------------------
402
+ if (dir_output == ''):
403
+ print(" ")
404
+ print("========================== Concluded! ==========================")
405
+ #---------------------------------------------------------------------------
406
+
407
+ # VASProcar Copyright (C) 2023
408
+ # GNU GPL-3.0 license