#processed sweep_plotting.py
#
# This file is part of scqubits.
#
# Copyright (c) 2019, Jens Koch and Peter Groszkowski
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
############################################################################
import numpy as np
import scqubits.core.sweep_generators as sweep_gen
import scqubits.utils.plot_defaults as defaults
import scqubits.utils.plotting as plot
[docs]def bare_spectrum(sweep, subsys, which=-1, **kwargs):
"""
Plots energy spectrum of bare system `subsys` for given ParameterSweep `sweep`.
Parameters
----------
sweep: ParameterSweep
subsys: QuantumSystem
which: int or list(int), optional
default: -1, signals to plot all wavefunctions within the truncated Hilbert space;
int>0: plot wavefunctions 0..int-1; list(int) plot specific wavefunctions
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
fig, axes
"""
subsys_index = sweep.get_subsys_index(subsys)
specdata = sweep.bare_specdata_list[subsys_index]
if which is None:
which = subsys.truncated_dim
return specdata.plot_evals_vs_paramvals(which=which, **kwargs)
[docs]def dressed_spectrum(sweep, **kwargs):
"""
Plots energy spectrum of dressed system
Parameters
----------
sweep: ParameterSweep
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
fig, axes
"""
return sweep.dressed_specdata.plot_evals_vs_paramvals(subtract_ground=True,
**defaults.dressed_spectrum(sweep, **kwargs))
[docs]def difference_spectrum(sweep, initial_state_ind=0, **kwargs):
"""
Plots a transition energy spectrum with reference to the given initial_state_ind, obtained by taking energy
differences of the eigenenergy spectrum.
Parameters
----------
sweep: ParameterSweep
initial_state_ind: int
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
Figure, Axes
"""
return sweep_gen.generate_diffspec_sweep(sweep, initial_state_ind).plot_evals_vs_paramvals(**kwargs)
[docs]def n_photon_qubit_spectrum(sweep, photonnumber, initial_state_labels, **kwargs):
"""
Plots the n-photon qubit transition spectrum.
Parameters
----------
sweep: ParameterSweep
photonnumber: int
number of photons used in the transition
initial_state_labels: tuple(int1, int2, ...)
bare state index of the initial state for the transitions
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
Figure, Axes
"""
label_list, specdata = sweep_gen.generate_qubit_transitions_sweep(sweep, photonnumber, initial_state_labels)
return specdata.plot_evals_vs_paramvals(label_list=label_list, **kwargs)
[docs]def bare_wavefunction(sweep, param_val, subsys, which=-1, phi_grid=None, **kwargs):
"""
Plot bare wavefunctions for given parameter value and subsystem.
Parameters
----------
sweep: ParameterSweep
param_val: float
value of the external parameter
subsys: QuantumSystem
which: int or list(int), optional
default: -1, signals to plot all wavefunctions; int>0: plot wavefunctions 0..int-1; list(int) plot specific
wavefunctions
phi_grid: Grid1d, optional
used for setting a custom grid for phi; if None use self._default_grid
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
fig, axes
"""
subsys_index = sweep.get_subsys_index(subsys)
sweep.update_hilbertspace(param_val)
param_index = np.searchsorted(sweep.param_vals, param_val)
evals = sweep.bare_specdata_list[subsys_index].energy_table[param_index]
evecs = sweep.bare_specdata_list[subsys_index].state_table[param_index]
return subsys.plot_wavefunction(esys=(evals, evecs), which=which, mode='real', phi_grid=phi_grid, **kwargs)
[docs]def chi(datastore, **kwargs):
"""
Plot dispersive shifts chi_j for a given pair of qubit and oscillator.
Parameters
----------
datastore: DataStore
contains sweep data for the dispersive shift, stored as datastore.chi
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
Figure, Axes
"""
ydata = datastore.chi
xdata = datastore.param_vals
state_count = ydata.shape[1]
label_list = list(range(state_count))
return plot.data_vs_paramvals(xdata, ydata, label_list=label_list, **defaults.chi(datastore.param_name, **kwargs))
[docs]def chi_01(datastore, param_index=0, **kwargs):
"""
Plot the dispersive shift chi01 for a given pair of qubit and oscillator.
Parameters
----------
datastore: DataStore
param_index: int, optional
index of the external parameter to be used
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
Figure, Axes
"""
ydata = datastore.chi
xdata = datastore.param_vals
yval = ydata[param_index]
return plot.data_vs_paramvals(xdata, ydata, label_list=None, **defaults.chi01(datastore.param_name, yval, **kwargs))
[docs]def charge_matrixelem(datastore, qbt_index_subsys, initial_state_idx=0, **kwargs):
"""
Parameters
----------
datastore: DataStore
qbt_index_subsys: tuple(int, QuantumSystem)
index of the qubit system within the underlying HilbertSpace, and qubit object
initial_state_idx: int
index of initial state
**kwargs: dict
standard plotting option (see separate documentation)
Returns
-------
Figure, Axes
"""
(qbt_index, qbt_subsys) = qbt_index_subsys
label_list = [(initial_state_idx, final_idx) for final_idx in range(qbt_subsys.truncated_dim)]
return plot.matelem_vs_paramvals(datastore, select_elems=label_list, mode='abs',
**defaults.charge_matrixelem(datastore.param_name, **kwargs))