Generalize unitcell
and supercell
to use generic SiteSelector
machinery
#98
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This was one tricky refactor, as it touches some of the oldest parts of Quantica. It generalizes the
supercell
routines to take arbitrary SiteSelectors. Before,supercell
just took aregion
kwarg that was used to constrain any non-periodic direction of a superlattice (this then extended tounitcell
too). With this PR we can specify other constraints, such asindices
orsublats
when building a new supercell or unitcell.As an example application, we can combine this with the
not
wrapper from #97 to create vacancies by index (i.e. instead of by position). First create a Hamiltonian without vacancies, and plot it to locate the indices for the desired vacanciesNow, just rebuild the unitcell of
h
excluding the desired site withindices