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
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 # dc_fields = np.linspace(140, 185, steps) # V / m # dc_fields = np.linspace(185, 140, steps) # V / m # dc_fields = np.linspace(100, 350, steps) # V / m dc_fields = np.linspace(350, 100, steps) # V / m # dc_fields = np.linspace(250, 200, steps) # V / m
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) mat_2 = transform_basis(mat_2, transform_1) mat_2_combination = transform_basis(mat_2_combination, transform_1) with timer("Applying transformation to n1n2mlms"): mat_1 = transform_basis(mat_1, transform_2) mat_2 = transform_basis(mat_2, transform_2) mat_2_combination = transform_basis(mat_2_combination, transform_2) with timer("Applying state filters"): indices_to_keep = [] for i, (n1, n2, _ml, _ms) in enumerate(states):