def setup(self):
        """Sets up matrices for Hamiltonian construction."""
        with timer("Generating states"):
            if self.hamiltonian.endswith("relevant"):
                self.states = States(self.n, basis=Basis.N_L_ML_MS_RELEVANT)
                print("Loaded relevant N L ML MS states.")
            else:
                self.states = States(self.n, basis=Basis.N_L_ML_MS)
                print("Loaded N L ML MS states.")

        with timer("Loading Hamiltonian"):
            mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(
                self.hamiltonian)
            mat_2_combination = mat_2_plus + mat_2_minus

        with timer("Loading transformations"):
            transform_1 = load_transformation(self.n, Basis.N_L_J_MJ_RELEVANT,
                                              Basis.N_L_ML_MS_RELEVANT)

        with timer("Applying transformation to nlmlms"):
            mat_1 = transform_basis(mat_1, transform_1)
            mat_1_zeeman = transform_basis(mat_1_zeeman, transform_1)
            mat_2 = transform_basis(mat_2, transform_1)
            # mat_2_plus = transform_basis(mat_2_plus, transform_1)
            # mat_2_minus = transform_basis(mat_2_minus, transform_1)
            mat_2_combination = transform_basis(mat_2_combination, transform_1)

        self.mat_1 = mat_1
        self.mat_1_zeeman = mat_1_zeeman
        self.mat_2 = mat_2
        # self.mat_2_plus = mat_2_plus
        # self.mat_2_minus = mat_2_minus
        self.mat_2_combination = mat_2_combination
from system.hamiltonians.utils import plot_matrices, diagonalise_by_ml, diagonalise_for_n1n2
from system.states import States, Basis
from system.transformations.utils import load_transformation, transform_basis
from timer import timer

plot_fig17a = False
plot_fig17b = True

n = 51

with timer("Generating states"):
    states = States(n, basis=Basis.N_L_ML_MS_RELEVANT)
    # states = States(n, basis=Basis.N_L_ML_MS)

with timer("Loading Hamiltonian"):
    mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(
        f"{n}_rubidium87_relevant")
    # mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(f"{n}_rubidium87")

with timer("Loading transformations"):
    transform_1 = load_transformation(n, Basis.N_L_J_MJ_RELEVANT,
                                      Basis.N_L_ML_MS_RELEVANT)
    # transform_1 = load_transformation(n, Basis.N_L_J_MJ, Basis.N_L_ML_MS)

with timer("Applying transformation to nlmlms"):
    mat_1 = transform_basis(mat_1, transform_1)
    mat_2 = transform_basis(mat_2, transform_1)
    mat_2_plus = transform_basis(mat_2_plus, transform_1)
    mat_2_minus = transform_basis(mat_2_minus, transform_1)

steps = 50
steps = 100
Example #3
0
from system.hamiltonians.hamiltonians import load_hamiltonian
from system.hamiltonians.utils import plot_matrices
from system.states import States, Basis
from system.transformations.utils import load_transformation, transform_basis
from timer import timer

n = 56

with timer("Generating states"):
    states_n_l_ml_ms = States(n, basis=Basis.N_L_ML_MS).states
    states = States(n, basis=Basis.N1_N2_ML_MS).states

with timer("Loading Hamiltonian"):
    # mat_1, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(f"{n}_rubidium")
    mat_1, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(f"{n}_rubidium87")
    # mat_1, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(f"{n}_hydrogen")
    mat_2_combination = mat_2_plus + mat_2_minus  # Units of a0 e
    # mat_2_combination = mat_2_plus  # Units of a0 e
    mat_2_combination *= C_e * physical_constants["Bohr radius"][0] / C_hbar
    # Conversion from atomic units for dipole matrix elements to a Rabi freq in Hz
    mat_2_combination *= 1e-9  # Convert Hz to GHz

    # plot_matrices([mat_1, mat_2])

with timer("Loading transformations"):
    transform_1 = load_transformation(n, Basis.N_L_J_MJ, Basis.N_L_ML_MS)
    transform_2 = load_transformation(n, Basis.N_L_ML_MS, Basis.N1_N2_ML_MS)

with timer("Applying transformation to nlmlms"):
    mat_1 = transform_basis(mat_1, transform_1)
from system.hamiltonians.hamiltonians import load_hamiltonian
from system.hamiltonians.utils import diagonalise_by_ml
from system.states import States, Basis
from system.transformations.utils import load_transformation, transform_basis
from timer import timer

n = 51

with timer("Generating states"):
    # states = States(n, basis=Basis.N_L_ML_MS)
    states = States(n, basis=Basis.N_L_ML_MS_RELEVANT)

with timer("Loading Hamiltonian"):
    # mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian("51_rubidium87")
    # test = load_hamiltonian("51_rubidium87_relevant")
    mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(
        "51_rubidium87_relevant")

    mat_1_h, mat_1_zeeman_h, mat_2_h, mat_2_minus_h, mat_2_plus_h = load_hamiltonian(
        "51_hydrogen")

with timer("Loading transformations"):
    # transform = load_transformation(n, Basis.N_L_J_MJ, Basis.N_L_ML_MS)
    transform = load_transformation(n, Basis.N_L_J_MJ_RELEVANT,
                                    Basis.N_L_ML_MS_RELEVANT)

with timer("Applying transformations"):
    mat_1 = transform_basis(mat_1, transform)
    mat_2 = transform_basis(mat_2, transform)
    mat_1_h = transform_basis(mat_1_h, transform)
    mat_2_h = transform_basis(mat_2_h, transform)
Example #5
0
from tqdm import tqdm

from system.hamiltonians.hamiltonians import load_hamiltonian
from system.states import States, Basis
from system.transformations.utils import load_transformation, transform_basis
from timer import timer

n = 51

with timer("Generating states"):
    states_n_l_ml_ms = States(n, basis=Basis.N_L_ML_MS).states
    states = States(n, basis=Basis.N1_N2_ML_MS).states

with timer("Loading Hamiltonian"):
    # mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian("51_rubidium87")
    mat_1, mat_1_zeeman, mat_2, mat_2_minus, mat_2_plus = load_hamiltonian(
        "_51_rubidium87")

with timer("Loading transformations"):
    transform_1 = load_transformation(n, Basis.N_L_J_MJ, Basis.N_L_ML_MS)
    transform_2 = load_transformation(n, Basis.N_L_ML_MS, Basis.N1_N2_ML_MS)

with timer("Applying transformations"):
    mat_2 = transform_basis(mat_2, transform_1)
    mat_2 = transform_basis(mat_2, transform_2)

with timer("Applying state filters"):
    indices_to_keep = []
    for i, (n1, n2, _ml, _ms) in enumerate(states):
        if _ms > 0 and _ml >= 0:
            indices_to_keep.append(i)