Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shallow defect analysis #50

Merged
merged 102 commits into from
Mar 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
2eca6e6
added phs identification
adair-nicolson Feb 1, 2024
e0584a8
Merge remote-tracking branch 'origin/develop' into develop
adair-nicolson Feb 1, 2024
7a6c2c0
added to tips and tricks
adair-nicolson Feb 1, 2024
10d6679
added test
adair-nicolson Feb 1, 2024
611c246
uncommented warning
adair-nicolson Feb 1, 2024
f6da270
fix circular import
adair-nicolson Feb 1, 2024
189c741
fix invalid escape sequence
adair-nicolson Feb 1, 2024
058b0b7
fix typo
adair-nicolson Feb 2, 2024
51d553d
add reference to pydefect and vise
adair-nicolson Feb 2, 2024
a6af4d2
Merge branch 'shallow_defects' into develop
kavanase Feb 15, 2024
13712e8
Merge pull request #47 from adair-nicolson/develop
kavanase Feb 15, 2024
c502e3b
Merge branch 'main' into shallow_defects
adair-nicolson Mar 1, 2024
4316232
Updated plotting, fixed p-ratio bug, updated vise check
adair-nicolson Mar 1, 2024
7d2c69e
New load data with additional warnings
adair-nicolson Mar 1, 2024
799c5d0
Add load_phs_data to DefectsParser
adair-nicolson Mar 1, 2024
02c9819
Improved efficiency load data
adair-nicolson Mar 1, 2024
7f68f49
Fix bes test
adair-nicolson Mar 1, 2024
00ac201
Fix missing Gamma glyph when plotting
adair-nicolson Mar 1, 2024
48a5e38
Supress warning missing Gamma glyph when plotting
adair-nicolson Mar 1, 2024
0b00716
Update to tips and tricks
adair-nicolson Mar 2, 2024
3783299
Added new tests for wrong vise version and test for no projected orbi…
adair-nicolson Mar 2, 2024
0e5a2c7
Forgot to commit cu2sise3_phs plot for test
adair-nicolson Mar 3, 2024
7b82e59
Update Tips.rst
aronwalsh Mar 3, 2024
2b24f98
Fix legend in plots
adair-nicolson Mar 4, 2024
1b8a50b
Merge remote-tracking branch 'origin/shallow_defects' into shallow_de…
adair-nicolson Mar 4, 2024
2031aad
Merge with `develop`
kavanase Mar 10, 2024
b50ed9b
Update and merge `shallow_defects`
kavanase Mar 10, 2024
95c9e74
Update shallow defects tips page and link in warning message
kavanase Mar 11, 2024
6870b2b
Update `pydefect` and `vise` requirements
kavanase Mar 11, 2024
0106ddc
Update PHS parsing/handling & tests
kavanase Mar 11, 2024
321d226
Refactor Cu2SiSe3 data to example data, and some minor updates
kavanase Mar 11, 2024
7a61500
Add `plot` and `style_file` options, efficiency/formatting updates, a…
kavanase Mar 12, 2024
a40a2d7
Add monkey patch to ensure defect site always included in neighbour l…
adair-nicolson Mar 13, 2024
89a8e7a
Update test to include interstitial
adair-nicolson Mar 13, 2024
89f6ed4
Update tips
adair-nicolson Mar 13, 2024
ca7a2ff
Update advanced_tutorials
adair-nicolson Mar 13, 2024
8534ad9
Supress vise info
adair-nicolson Mar 13, 2024
4a37b4c
Merge branch 'develop' into shallow_defects
kavanase Mar 13, 2024
74ec7b2
Missing test files
adair-nicolson Mar 13, 2024
b164276
Merge remote-tracking branch 'origin/shallow_defects' into shallow_de…
kavanase Mar 13, 2024
15cd98f
Update parsing code so that bulk vasprun only loaded once
kavanase Mar 14, 2024
a6d0277
Make vasprun data parsing more efficient and reduce memory load
kavanase Mar 14, 2024
ec621d3
Add monkey-patched `Vasprun._parse_projected_eigen()` to make parsing…
kavanase Mar 14, 2024
b353acb
Merge branch 'develop' into shallow_defects
kavanase Mar 16, 2024
c9d4062
Merge `develop` updates – CdTe example defects parsing with PHS state…
kavanase Mar 16, 2024
f3d4495
Add PROCAR parsing as default behaviour
adair-nicolson Mar 21, 2024
a4e5a42
Fix phs parsing in cases where Elements replaced with Species due to …
adair-nicolson Mar 21, 2024
0b647f0
Update doc string, fix parsing cases, update tests
adair-nicolson Mar 22, 2024
fc70d05
Refactor PHS parsing, update tests to avoid floating-point error
adair-nicolson Mar 22, 2024
f63cc54
Refactors ``get_band_edge_info``
adair-nicolson Mar 22, 2024
e09e974
pymatgen.io.vasp.outputs.Procar can't parse non-collinear, so have to…
adair-nicolson Mar 22, 2024
3dd403f
Use easyunfold PROCAR parser instead of pymatgen, so can parse non-co…
adair-nicolson Mar 22, 2024
6d919ef
Can't use gzip Procar
adair-nicolson Mar 22, 2024
61054ad
Test files
adair-nicolson Mar 22, 2024
c5020ae
Fix vise check for parsing PROCAR with SOC
adair-nicolson Mar 25, 2024
ca0eb16
Merge branch 'develop' into shallow_defects
kavanase Mar 25, 2024
a35ba99
Cleanup tutorial & tips page (output cleared from some cells when mer…
kavanase Mar 25, 2024
04ea5f0
Suggested refactoring ("phs" -> "eigenvalues" etc) and some formatting
kavanase Mar 26, 2024
30469f1
Futher formatting
kavanase Mar 26, 2024
4f28cab
Update file permissions
kavanase Mar 26, 2024
bac6083
Add `get_procar` to handle `PROCAR` loading
kavanase Mar 26, 2024
e508eb9
Add `_parse_procar`, expand docstrings, avoid unnecessary `pydefect` …
kavanase Mar 26, 2024
464253a
Add `_load_and_parse_eigenvalue_data` to `DefectEntry` to efficiently…
kavanase Mar 26, 2024
5c44260
Update eigenvalue data parsing in `analysis.py` accordingly
kavanase Mar 26, 2024
2b331d5
Pre-commit and formatting updates
kavanase Mar 26, 2024
c894eb6
Update `vise` requirement following release
kavanase Mar 27, 2024
63f97aa
Remove vise version checking test, updated new tests
adair-nicolson Mar 27, 2024
972ca21
non-collinear test eigenvalue parsing
adair-nicolson Mar 27, 2024
a578cee
Update test name to reflect file name change
adair-nicolson Mar 27, 2024
62b4783
Set `DefectEntry` name during initialisation to avoid unnecessary gue…
kavanase Mar 27, 2024
d88f4e4
Add `lru_cache` for getting potcar stats for neutral nelect guessing,…
kavanase Mar 27, 2024
d3ea935
Add `get_magnetization_from_vasprun` and `get_nelect_from_vasprun` fu…
kavanase Mar 27, 2024
4da45ac
Add `band_edge_properties_from_vasprun` and `make_perfect_band_edge_s…
kavanase Mar 27, 2024
3da0cc4
Redefine `_add_eigenvalues` to make plotting with many kpoints and ba…
kavanase Mar 28, 2024
cad2ee5
Expand eigenvalue tests
kavanase Mar 28, 2024
724971b
Update tests and add data
kavanase Mar 28, 2024
975e4a8
Update tests and add data pt. 2
kavanase Mar 28, 2024
cc25c28
Update `easyunfold` requirement following release
kavanase Mar 28, 2024
caa6e5e
Update y-limits and legend behaviour, and add `ylims` and `legend_kwa…
kavanase Mar 28, 2024
7267d7d
Update and expand tests
kavanase Mar 28, 2024
0ac71aa
Fix minor issue in `displacements.py` (wasn't accounting for disp dic…
kavanase Mar 28, 2024
a55f924
Add `from_dict` method for `DefectEntry` to avoid unnecessary `pydefe…
kavanase Mar 28, 2024
026d371
`gzip` `PROCAR`s and update tests now new `easyunfold` released
kavanase Mar 28, 2024
c0c68ca
Update default `orb` and `energy` similarity criteria from testing, w…
kavanase Mar 28, 2024
90979e2
Minor docstrings updates, and use absolute paths in `bulk_path`/`defe…
kavanase Mar 28, 2024
707b837
Add orb/energy criterion customisation tests
kavanase Mar 28, 2024
53ca0fe
Update tips page
kavanase Mar 28, 2024
97adc43
Update advanced tutorial
kavanase Mar 28, 2024
484235b
Update plotting customisation tutorial
kavanase Mar 28, 2024
a55859b
Update changelog and version number prior to release
kavanase Mar 28, 2024
b3feb76
Minor paper updates
kavanase Mar 28, 2024
1d4e725
Minor updates
kavanase Mar 29, 2024
5b94405
Analysis tests cleanup
kavanase Mar 29, 2024
0572c09
Make vasprun projected eigenvalue parsing marginally more efficient, …
kavanase Mar 30, 2024
b531125
Update default parsing behaviour; parse from vaspruns preferentially …
kavanase Mar 30, 2024
fff7eaf
Update tests (mostly there...)
kavanase Mar 30, 2024
eaa8478
Updated test for some file combinations.
adair-nicolson Mar 30, 2024
9ab2b03
Revert "Updated test for some file combinations."
kavanase Mar 30, 2024
54c3da4
Make vasprun parsing a bit more efficient, avoiding unnecessary parsi…
kavanase Mar 30, 2024
9ffb1bc
Update eigenvalue tests, use same `vasprun.xml`/`PROCAR` JSONs but ac…
kavanase Mar 30, 2024
561779e
Reduce testing redundancy
kavanase Mar 30, 2024
8b78fde
Minor `TODO` and `CHANGELOG` updates
kavanase Mar 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/pip_install_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,12 @@ jobs:

- name: Test
run: |
pytest -vv tests # test everything
pytest -vv -m "not mpl_image_compare" tests # all non-plotting tests

- name: Plotting Tests
id: plotting_tests # Add an ID to this step for reference
run: |
pytest --mpl -m "mpl_image_compare" tests # test everything
pytest --mpl -m "mpl_image_compare" tests # all plotting tests

- name: Generate GH Actions test plots
if: failure() && steps.plotting_tests.outcome == 'failure' # Run only if plotting tests fail
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ jobs:

- name: Test
run: |
pytest -vv tests # test everything
pytest -vv -m "not mpl_image_compare" tests # all non-plotting tests

- name: Plotting Tests
id: plotting_tests # Add an ID to this step for reference
run: |
pytest --mpl -m "mpl_image_compare" tests # test everything
pytest --mpl -m "mpl_image_compare" tests # all plotting tests

- name: Generate GH Actions test plots
if: failure() && steps.plotting_tests.outcome == 'failure' # Run only if plotting tests fail
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test_mac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ jobs:

- name: Test
run: |
pytest -vv tests # test everything
pytest -vv -m "not mpl_image_compare" tests # all non-plotting tests

- name: Plotting Tests
id: plotting_tests # Add an ID to this step for reference
run: |
pytest --mpl -m "mpl_image_compare" tests # test everything
pytest --mpl -m "mpl_image_compare" tests # all plotting tests

- name: Generate GH Actions test plots
if: failure() && steps.plotting_tests.outcome == 'failure' # Run only if plotting tests fail
Expand Down
17 changes: 17 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
Change Log
==========

v.2.4.0
----------
- Electronic structure analysis by @adair-nicolson & @kavanase:
- Adds ``DefectEntry.get_eigenvalue_analysis()`` method to plot single-particle eigenvalues and
analyse orbital character and localisation; usage and examples shown on the
`docs Tips <https://doped.readthedocs.io/en/latest/Tips.html#eigenvalue-electronic-structure-analysis>`__
page and the `advanced analysis tutorial <https://doped.readthedocs.io/en/latest/advanced_analysis_tutorial.html#eigenvalue-electronic-structure-analysis>`__.
- Projected eigenvalues can be parsed from ``vasprun.xml(.gz)`` files (preferred, as more accurate
with 4 decimal places; c.f. 3 in ``PROCAR(.gz)``; more convenient and only ~5% slower) or ``PROCAR(.gz)``
files in calculation directories (both with significantly expedited parsing compared to ``pymatgen`` methods).
Compatible with spin-polarised, unpolarised and SOC calculations. Comes with update by @kavanase to ``easyunfold``
``PROCAR.gz`` parsing.
- More efficient defect calculation parsing
- Add ``get_magnetization_from_vasprun`` and ``get_nelect_from_vasprun`` functions to ``doped.utils.parsing``,
as these attributes are not available from ``pymatgen.io.vasp.outputs.Vasprun``.
- Improve testing efficiency

v.2.3.3
----------
- General robustness updates:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<a href="https://doped.readthedocs.io/en/latest/"><img align="right" width="150" src="https://raw.githubusercontent.com/SMTG-Bham/doped/main/docs/doped_v2_logo.png" alt="Schematic of a doped (defect-containing) crystal, inspired by the biological analogy to (semiconductor) doping." title="Schematic of a doped (defect-containing) crystal, inspired by the biological analogy to (semiconductor) doping."></a>`doped` is a Python software for the generation, pre-/post-processing and analysis of defect supercell calculations, implementing the defect simulation workflow in an efficient, reproducible, user-friendly yet powerful and fully-customisable manner.

Tutorials showing the code functionality and usage are provided on the [docs](https://doped.readthedocs.io/en/latest/) site, and an overview of the key advances of the package is given in the [JOSS paper](https://github.com/openjournals/joss-reviews/issues/6433).
Tutorials showing the code functionality and usage are provided on the [docs](https://doped.readthedocs.io/en/latest/) site, and an overview of the key advances of the package is given in the [JOSS paper](https://arxiv.org/abs/2403.08012).
<!-- Update this link!! -->

<a href="https://doi.org/10.21105/joss.06433"><img class="center" width="800" src="https://raw.githubusercontent.com/SMTG-Bham/doped/main/docs/JOSS/doped_JOSS_workflow_figure.png"></a>
Expand Down
Binary file added docs/Cu2SiSe3_TLD.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/Cu2SiSe3_v_Cu_0_eigenvalue_plot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/Dev_ToDo.md
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# `doped` Development To-Do List
## Chemical potential
- Check through chemical potential TO-DOs. Need to recheck validity of approximations used for extrinsic competing phases (and code for this).
- Efficient generation of competing phases for which there are many polymorphs?
- Efficient generation of competing phases for which there are many polymorphs? See SK notes from CdTe competing phases.
- Update chemical potential tools to work with new Materials Project API. Currently, supplying an API key for the new Materials Project API returns entries which do not have `e_above_hull` as a property, and so crashes. Ideally would be good to be compatible with both the legacy and new API, which should be fairly straightforward (try importing MPRester from mp_api client except ImportError import from pmg then will need to make a whole separate query/search because `band_gap` and `total_magnetisation` no longer accessible from `get_entries`). See https://docs.materialsproject.org/downloading-data/using-the-api
- Publication ready chemical potential diagram plotting tool as in Adam Jackson's `plot-cplap-ternary` (3D) and Sungyhun's `cplapy` (4D) (see `doped_chempot_plotting_example.ipynb`; code there, just needs to be implemented in module functions). `ChemicalPotentialGrid` in `py-sc-fermi` interface could be quite useful for this? (Worth moving that part of code out of `interface` subpackage?)
- Also see `Cs2SnTiI6` notebooks for template code for this.
Expand Down
11 changes: 10 additions & 1 deletion docs/JOSS/JOSS_plots.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -10510,12 +10510,21 @@
"cell_type": "markdown",
"source": [
"# Other Sub-Figures\n",
"The functions used to generate all other sub figures in the `doped` JOSS figure are shown in the parsing & thermodynamics tutorials on the docs, with the necessary data provided in the `examples` folder of the GitHub repository. "
"The functions used to generate all other sub figures in the `doped` JOSS figure are shown in the parsing, thermodynamics & advanced analysis tutorials on the docs, with the necessary data provided in the `examples` folder of the GitHub repository. "
],
"metadata": {
"collapsed": false
},
"id": "b3c59bcc0fe24b9"
},
{
"cell_type": "code",
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
},
"id": "e0ac1958e7d3133d"
}
],
"metadata": {
Expand Down
Binary file modified docs/JOSS/doped_JOSS_figure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/JOSS/doped_JOSS_workflow_figure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions docs/JOSS/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ While each of these codes have their strengths, they do not include the full sui
The design philosophy of `doped` has been to implement the defect simulation workflow in an efficient, reproducible, user-friendly yet powerful and fully-customisable manner, combining reasonable defaults with full user control for each parameter in the workflow.
As depicted in \autoref{fig_workflow}, the core functionality of `doped` is the generation of defect supercells and competing phases, writing calculation input files, parsing calculation outputs and analysing/plotting defect-related properties. This functionality and recommended usage of `doped` is demonstrated in the [tutorials](https://doped.readthedocs.io/en/latest/Tutorials.html) on the [documentation website](https://doped.readthedocs.io/en/latest/).

![**a.** Average minimum periodic image distance, normalised by the ideal image distance at that volume (i.e. for a perfect close-packed face-centred cubic (FCC) cell), versus the number of primitive unit cells, for the supercell generation algorithms of `doped`, `ASE` and `pymatgen`. "SC" = simple cubic and "HCP" = hexagonal close-packed. **b.** Average performance of charge state estimation routines from `doped` compared to alternative approaches, in terms of false positives and false negatives. "ICSD probabilities" refers to a model using the probabilities of oxidation states, as given by their occurrence in the ICSD database, as the input on which to estimate likely charge states. Asterisk indicates that the `pyCDT` false _negatives_ are underestimated as the majority of this test set used the estimated charge state ranges from `pyCDT`. "Ox. state" = oxidation state. Example **(c)** Kumagai-Oba (extended Freysoldt-Neugebauer-Van-de-Walle; "eFNV") finite-size correction plot, **(d)** defect formation energy diagram, **(e)** chemical potential / stability region, **(f)** Fermi level vs. annealing temperature, **(g)** defect/carrier concentrations vs. annealing temperature and **(h)** Fermi level / carrier concentration heatmap plots from `doped`. Data and code to reproduce these plots is provided in the [`docs/JOSS`](https://github.com/SMTG-Bham/doped/blob/main/docs/JOSS) subfolder of the `doped` GitHub repository. \label{fig1}](doped_JOSS_figure.png)
![**a.** Average minimum periodic image distance, normalised by the ideal image distance at that volume (i.e. for a perfect close-packed face-centred cubic (FCC) cell), versus the number of primitive unit cells, for the supercell generation algorithms of `doped`, `ASE` and `pymatgen`. "SC" = simple cubic and "HCP" = hexagonal close-packed. **b.** Average performance of various charge state estimation routines, in terms of false positives/negatives. "ICSD probabilities" refers to a model based on the probabilities of oxidation states, as given by their occurrence in the ICSD database. Asterisk indicates that `pyCDT` "false _negatives_" are underestimated as the majority of this test set used the estimated charge state ranges from `pyCDT`. "Ox. state" = oxidation state. Example **(c)** Kumagai-Oba (extended Freysoldt-Neugebauer-Van-de-Walle; "eFNV") finite-size correction plot, **(d)** defect formation energy diagram, **(e)** chemical potential / stability region, **(f)** Fermi level vs. annealing temperature, **(g)** defect/carrier concentrations vs. annealing temperature and **(h)** Fermi level / carrier concentration heatmap plots from `doped`. Automated plots of single-particle eigenvalues from DFT supercell calculations for **(i)** $V_{Cu}^{0}$ in $Cu_2SiSe_3$ and **(j)** $V_{Cd}^{-1}$ in CdTe. **(k)** Automated site displacement analysis, plotting atomic displacements with respect to the defect site against distance to the defect site, for $V_{Cd}^{-1}$ in CdTe. Data and code to reproduce these plots is provided in the [`docs/JOSS`](https://github.com/SMTG-Bham/doped/blob/main/docs/JOSS) subfolder of the `doped` GitHub repository. \label{fig1}](doped_JOSS_figure.png)

Some key advances of `doped` include:

Expand Down Expand Up @@ -131,7 +131,7 @@ Some key advances of `doped` include:

- **Automated Compatibility Checking:** When parsing defect calculations, `doped` automatically checks that calculation parameters which could affect the defect formation energy (e.g. _k_-point grid, energy cutoff, pseudopotential choice, exchange fraction, Hubbard U etc.) are consistent between the defect and reference calculations. This is a common source of accidental error in defect calculations, and `doped` provides informative warnings if any inconsistencies are detected.

- **Thermodynamic Analysis:** `doped` provides a suite of flexible tools for the analysis of defect thermodynamics, including formation energy diagrams (\autoref{fig1}d), equilibrium & non-equilibrium Fermi level solving (\autoref{fig1}f), doping analysis (\autoref{fig1}g,h), Brouwer-type diagrams etc. These include physically-motivated (but tunable) grouping of defect sites, full inclusion of metastable states, support for complex system constraints, optimisation over high-dimensional chemical & temperature space and highly-customisable plotting.
- **Thermodynamic Analysis:** `doped` provides a suite of flexible tools for the analysis of defect thermodynamics, including formation energy diagrams (\autoref{fig1}d), equilibrium & non-equilibrium Fermi level solving (\autoref{fig1}f), doping analysis (\autoref{fig1}g,h), Brouwer-type diagrams etc. These include physically-motivated (but tunable) grouping of defect sites, full inclusion of metastable states, support for complex system constraints, optimisation over high-dimensional chemical & temperature space and highly-customisable plotting. In-depth examples are provided in the [tutorials](https://doped.readthedocs.io/en/latest/Tutorials.html).

- **Finite-Size Corrections:** Both the isotropic Freysoldt (FNV) [@Freysoldt2009] and anisotropic Kumagai (eFNV) [@kumagai_electrostatics-based_2014] image charge corrections are implemented automatically in `doped`, with tunable sampling radii / sites (which may be desirable for e.g. layered materials), automated correction plotting (to visualise/analyse convergence; \autoref{fig1}c) and automatic sampling error estimation.

Expand Down
Binary file modified docs/Sb2Si2Te6_v_Sb_-3_eFNV_plot_no_intralayer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/Sb2Si2Te6_v_Sb_-3_eFNV_plot_region_radius.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading