# Observables

`AtomicStructure.Observable`

— Type`Observable`

Represents a physical quantity that can be observed, which is calculated as the matrix element of an operator between two configurations. All physical observables are real.

Missing docstring for `Observable(operator::QuantumOperator, atom::A, overlaps::Vector{<:OrbitalOverlap}, integrals::Vector{OrbitalIntegral}, integral_map::Dict{Any,Int}, symmetries::Dict, selector::Function; double_counted::Bool) where {T,A<:Atom{T}}`

. Check Documenter's build log for details.

`AtomicStructure.observe!`

— Function`observe!(A::M, o::Observable)`

Compute the observable `o`

between all configurations and store the results as matrix elements of `A`

.

`observe!(A::M, atom::Atom, o::Observable)`

Compute the observable `o`

between all configurations and store the results as matrix elements of `A`

. The right-hand side vectors are taken from the equations, whereas the lefth-hand side vectors are taken from `atom`

.

`observe!(A::M, o::Observable, atom::Atom)`

Compute the observable `o`

between all configurations, store the results as matrix elements of `A`

, and finally contract with respect to the mixing coefficients of `atom`

and return the result as a scalar. `o`

is *not* `update!`

d with respect to `atom`

.

`observe!(A::M, o::Observable, a::Atom, b::Atom)`

Compute the observable `o`

between all configurations, store the results as matrix elements of `A`

, and finally contract with respect to the mixing coefficients of atoms `a`

& `b`

and return the result as a scalar, which corresponds to a transition between the states of the respective atoms. `o`

will be `update!`

d with respect to `b`

.