AggregateExcitonAnalysis

Class adding exciton analysis on molecular aggregates

Most of the present methods are available after the aggregate is diagonalized by calling the diagonalize method.

This class should not be used directly. Use Aggregate class, which inherits all the methods from here, instead.

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("homodimer-2")
>>> agg.set_coupling_by_dipole_dipole()
>>> agg.build()
>>> # create information about eigenstates of the aggregate (to call `diagonalize()` is crucial)
>>> agg.diagonalize()
>>> #
>>> # Create a report on expantions of state with index `1`
>>> agg.report_on_expansion(state=1)
+-------+-------------+--------------+------------------+
| index | squares     | coefficients | state signatures |
+-------+-------------+--------------+------------------+
| 1     | 0.50000000  | -0.70710678  | ((1, 0), ())     |
| 2     | 0.50000000  | 0.70710678   | ((0, 1), ())     |
| 0     | 0.00000000  | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
+-------+-------------+--------------+------------------+

Class Details

class quantarhei.builders.aggregate_excitonanalysis.AggregateExcitonAnalysis(molecules=None, name='')[source]

Class adding exciton analysis on molecular aggregates

Methods

add_Mode_by_name(name, mode)
add_Molecule(mono) Adds monomer to the aggregate
allstates([mult, mode, all_vibronic, …]) Generator of all aggregate states
build([mult, sbi_for_higher_ex, …]) Builds aggregate properties
calculate_resonance_coupling([method, params]) Sets resonance coupling calculated by a given method
cast_to_vibronic(KK) Casts an electronic operator to a vibronic basis
clean() Cleans the aggregate object of anything built
convert_to_DensityMatrix(psi[, …]) Converts StateVector into DensityMatrix (possibly reduced one)
copy() Returns a shallow copy of the self
coupling(state1, state2[, full]) Coupling between two aggregate states
deepcopy() Returns a deep copy of the self
diagonalize() Transforms some internal quantities into diagonal basis
dipole_dipole_coupling(kk, ll[, epsr, delta]) Calculates dipole-dipole coupling
elsignatures([mult, mode, emax]) Generator of electronic signatures
elstates([mult, mode, save_indices]) Generator of electronic states
exciton_report([file, start, stop, Nrep, …]) Prints a report on excitonic properties of the aggregate
fc_factor(state1, state2) Franck-Condon factors between two vibrational states
get_DensityMatrix([condition_type, …]) Returns density matrix according to specified condition
get_ElectronicState(sig[, index]) Returns electronic state corresponding to this aggregate
get_FoersterRateMatrix() Returns Förster rate matrix for the open system
get_Hamiltonian() Returns the aggregate Hamiltonian
get_KTHierarchy([depth]) Returns the Kubo-Tanimura hierarchy of an open system
get_KTHierarchyPropagator([depth]) Returns a propagator based on the Kubo-Tanimura hierarchy
get_RWA_suggestion() Returns average transition energy
get_RedfieldRateMatrix() Returns Redfield rate matrix
get_ReducedDensityMatrixPropagator(timeaxis) Returns propagator of the density matrix
get_RelaxationTensor(timeaxis[, …]) Returns a relaxation tensor corresponding to the system
get_SystemBathInteraction() Returns the aggregate SystemBathInteraction object
get_TransitionDipoleMoment() Returns the aggregate transition dipole moment operator
get_VibronicState(esig, vsig) Returns vibronic state corresponding to the two specified signatures
get_dipole_by_name(name, N, M)
get_electronic_Hamiltonian([full]) Returns the aggregate electronic Hamiltonian
get_electronic_groundstate() Indices of states in electronic ground state
get_energy_by_name(name, N) Electronic energy
get_excited_density_matrix([condition, …]) Returns the density matrix corresponding to excitation condition
get_excitonic_band([band]) Indices of states in a given excitonic band.
get_expansion_squares([state]) Returns the squares of expansion coefficients of an excitonic state.
get_intersite_mixing([state1, state2]) Returns inter site mixing ration
get_lindich_axes()
get_max_excitations() Returns a list of maximum number of excitations on each monomer
get_nearest_Molecule(molecule) Returns a molecule nearest in the aggregate to a given molecule
get_resonance_coupling(i, j) Returns resonance coupling value between two sites
get_state_energy([state]) Return the energy of a state with a given index
get_state_signature_by_index(N) Return aggregate vibronic state signature by its index
get_temperature() Returns temperature associated with this aggregate
get_thermal_ReducedDensityMatrix() Returns equilibrium density matrix for a give temparature
get_transition(Nf, Ni) Returns relevant info about the energetic transition
get_transition_dephasing(state1[, state2]) Returns phenomenological dephasing of a given transition
get_transition_dipole([state1, state2]) Returns transition dipole moment between two state.
get_transition_width(state1[, state2]) Returns phenomenological width of a given transition
get_width(n, N, M)
has_SystemBathInteraction() Returns True if the Aggregate is embedded in a defined environment
init_coupling_matrix() Nullifies coupling matrix
liouville_pathways_1([eUt, ham, dtol, ptol, …]) Generator of the first order Liouville pathways
liouville_pathways_3([ptype, dtol, ptol, …]) Generator of Liouville pathways
liouville_pathways_3T([ptype, eUt, ham, t2, …]) Generator of Liouville pathways with energy transfer
load(filename[, test]) Loads an object from a file and returns it
loaddir(dirname) Returns a directory of objects saved into a directory
number_of_electronic_states_in_band([band]) Number of states in a given excitonic band
number_of_states_in_band([band, …]) Number of states in a given excitonic band
rebuild([mult, sbi_for_higher_ex, …]) Cleans the object and rebuilds it
report_on_expansion([file, state, N]) Prints a short report on the composition of an exciton state
save(filename[, comment, test]) Saves the object with all its content into a file
savedir(dirname[, tag, comment, test]) Saves an object into directory containing a file with unique name
scopy() Creates a copy of the object by saving and loading it
set_SystemBathInteraction(sbi) Sets the SystemBathInteraction operator for this aggregate
set_coupling_by_dipole_dipole([epsr, delta]) Sets resonance coupling by dipole-dipole interaction
set_egcf_matrix(cm) Sets a matrix describing system bath interaction
set_lindich_axes(axis_orthog_membrane) Creates a coordinate system with one axis supplied by the user (typically an axis orthogonal to the membrane), and two other axes, all of which are orthonormal.
set_resonance_coupling(i, j, coupling[, …]) Sets resonance coupling value between two sites
set_resonance_coupling_matrix(coupmat) Sets resonance coupling values from a matrix
total_number_of_electronic_states([mult]) Total number of electronic states in the aggregate
total_number_of_states([mult, …]) Total number of states in the aggregate
trace_over_vibrations(operator[, Nt]) Average an operator over vibrational degrees of freedom
transition_dipole(state1, state2) Transition dipole moment between two states
vibsignatures(elsignature[, approx]) Generator of vibrational signatures
wipe_out() Removes everything except of name attribute
convert_energy_2_current_u  
convert_energy_2_internal_u  
convert_length_2_current_u  
convert_length_2_internal_u  
get_Mode_by_name  
get_Molecule_by_name  
get_Molecule_index  
get_dipole  
remove_Molecule  
unit_repr  
unit_repr_latex  
exciton_report(file=None, start=1, stop=None, Nrep=5, criterium=None)[source]

Prints a report on excitonic properties of the aggregate

Parameters:
  • start (int (default = 1)) – First state to report on. Because 0 is often the ground state, it is skipped. For systems with molecular vibrations, first mixed states start with an index different from 1.
  • stop (int (default = None)) – Where to stop the report. if None, all states are reported
  • Nrep (int (default = 5)) – How many sites of the exciton decomposition we should list

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
...
>>> agg.exciton_report()
Report on excitonic properties
------------------------------
<BLANKLINE>
Exciton 1
=========
<BLANKLINE>
Transition energy        : 11967.06803045 1/cm
Transition dipole moment : 2.48026499 D
+-------+-------------+--------------+------------------+
| index | squares     | coefficients | state signatures |
+-------+-------------+--------------+------------------+
| 1     | 0.90998848  | -0.95393316  | ((1, 0), ())     |
| 2     | 0.09001152  | 0.30001920   | ((0, 1), ())     |
| 0     | 0.00000000  | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
+-------+-------------+--------------+------------------+
<BLANKLINE>
Exciton 2
=========
<BLANKLINE>
Transition energy        : 12332.93196955 1/cm
Transition dipole moment : 5.16973501 D
+-------+-------------+--------------+------------------+
| index | squares     | coefficients | state signatures |
+-------+-------------+--------------+------------------+
| 2     | 0.90998848  | 0.95393316   | ((0, 1), ())     |
| 1     | 0.09001152  | 0.30001920   | ((1, 0), ())     |
| 0     | 0.00000000  | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
+-------+-------------+--------------+------------------+
<BLANKLINE>
get_expansion_squares(state=0)[source]

Returns the squares of expansion coefficients of an excitonic state.

The Aggregate must be built and diagonalized. This output is used by the report_on_expansion() method.

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("homodimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
...
... # expansion coefficients
>>> (indx, coefs, sqrs) = agg.get_expansion_squares(1)
>>> print(indx)
[0, 1, 2]
>>> print(coefs)
[ 0.         -0.70710678  0.70710678]
>>> print(sqrs)
[ 0.   0.5  0.5]
get_intersite_mixing(state1=0, state2=0)[source]

Returns inter site mixing ration

Inter site mixing ratio gives the probability that states state1 and state2 are localized on different pigments. This measure can be used to distinguish different types of coherence, e.g. vibrational from purely electronic.

Literature:

Pavel Maly, Oscar J. G. Somsen, Vladimir I. Novoderezhkin, Tomas Mancal, and Rienk van Grondelle, The Role of Resonant Vibrations in Electronic Energy Transfer, ChemPhysChem 2016, 17,1356–1368 available at DOI:10.1002/cphc.201500965

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
>>> print("{0:.4f}".format(agg.get_intersite_mixing(1,2)))
0.8362
get_state_energy(state=0)[source]

Return the energy of a state with a given index

Parameters:state (int) – Index of the state whose energy we ask for

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
...
>>> print("{0:.4f}".format(agg.get_state_energy(2)))
2.3231
>>> with qr.energy_units("1/cm"):
...     print("{0:.4f}".format(agg.get_state_energy(2)))
12332.9320
get_state_signature_by_index(N)[source]

Return aggregate vibronic state signature by its index

Parameters:N (int) – Index of state (or site). Signatures make sense only for localized states

Example

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
>>> agg.get_state_signature_by_index(2)
((0, 1), ())
get_transition_dipole(state1=0, state2=0)[source]

Returns transition dipole moment between two state.

If the second state is not specified, we get transition to the first state from the ground state.

Parameters:
  • state1 (int) – Starting state of the transition
  • state2 (int) – Final states of the transition

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
...
>>> a = agg.get_transition_dipole(0,1)
>>> print("{0:.6f}".format(a))
2.480265
report_on_expansion(file=None, state=0, N=5)[source]

Prints a short report on the composition of an exciton state

Parameters:
  • state (int) – Excitonic state of the aggregate
  • N (int) – Number of states in expansion to report

Examples

>>> import quantarhei as qr
>>> agg = qr.TestAggregate("dimer-2")
>>> agg.set_coupling_by_dipole_dipole()
...
... # build and diagonalize
>>> agg.build()
>>> agg.diagonalize()
...
>>> agg.report_on_expansion(state=1)
+-------+-------------+--------------+------------------+
| index | squares     | coefficients | state signatures |
+-------+-------------+--------------+------------------+
| 1     | 0.90998848  | -0.95393316  | ((1, 0), ())     |
| 2     | 0.09001152  | 0.30001920   | ((0, 1), ())     |
| 0     | 0.00000000  | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
| 0     | -1.00000000 | 0.00000000   | ((0, 0), ())     |
+-------+-------------+--------------+------------------+