Component Collection¶
Most data will be modelled by a sum of components, which is what a ComponentCollection handles. Here we show how to create a ComponentCollection and add components to it.
In [1]:
Copied!
import matplotlib.pyplot as plt
import numpy as np
from easydynamics.sample_model import ComponentCollection
from easydynamics.sample_model import DampedHarmonicOscillator
from easydynamics.sample_model import Gaussian
from easydynamics.sample_model import Lorentzian
from easydynamics.sample_model import Polynomial
%matplotlib widget
import matplotlib.pyplot as plt
import numpy as np
from easydynamics.sample_model import ComponentCollection
from easydynamics.sample_model import DampedHarmonicOscillator
from easydynamics.sample_model import Gaussian
from easydynamics.sample_model import Lorentzian
from easydynamics.sample_model import Polynomial
%matplotlib widget
In [2]:
Copied!
component_collection = ComponentCollection()
# Creating components
gaussian = Gaussian(display_name='Gaussian', width=0.5, area=1)
dho = DampedHarmonicOscillator(display_name='DHO', center=1.0, width=0.3, area=2.0)
lorentzian = Lorentzian(display_name='Lorentzian', center=-1.0, width=0.2, area=1.0)
polynomial = Polynomial(display_name='Polynomial', coefficients=[0.1, 0, 0.5]) # y=0.1+0.5*x^2
# Adding components to the component collection
component_collection.append_component(gaussian)
component_collection.append_component(dho)
component_collection.append_component(lorentzian)
component_collection.append_component(polynomial)
x = np.linspace(-2, 2, 100)
plt.figure()
y = component_collection.evaluate(x)
plt.plot(x, y, label='Component collection')
for component in component_collection:
y = component.evaluate(x)
plt.plot(x, y, label=component.display_name)
plt.legend()
plt.show()
# Accessing components by name
gaussian_component = component_collection['Gaussian']
print(gaussian_component)
component_collection = ComponentCollection()
# Creating components
gaussian = Gaussian(display_name='Gaussian', width=0.5, area=1)
dho = DampedHarmonicOscillator(display_name='DHO', center=1.0, width=0.3, area=2.0)
lorentzian = Lorentzian(display_name='Lorentzian', center=-1.0, width=0.2, area=1.0)
polynomial = Polynomial(display_name='Polynomial', coefficients=[0.1, 0, 0.5]) # y=0.1+0.5*x^2
# Adding components to the component collection
component_collection.append_component(gaussian)
component_collection.append_component(dho)
component_collection.append_component(lorentzian)
component_collection.append_component(polynomial)
x = np.linspace(-2, 2, 100)
plt.figure()
y = component_collection.evaluate(x)
plt.plot(x, y, label='Component collection')
for component in component_collection:
y = component.evaluate(x)
plt.plot(x, y, label=component.display_name)
plt.legend()
plt.show()
# Accessing components by name
gaussian_component = component_collection['Gaussian']
print(gaussian_component)
Gaussian(name = Gaussian, display_name = Gaussian, unit = meV,
area = <Parameter 'Gaussian area': 1.0000 meV, bounds=[0.0:inf]>,
center = <Parameter 'Gaussian center': 0.0000 meV (fixed), bounds=[-inf:inf]>,
width = <Parameter 'Gaussian width': 0.5000 meV, bounds=[1e-10:inf]>)