diff --git a/docker/ellips/example/Ellipsometry workflow example.ipynb b/docker/ellips/example/Ellipsometry workflow example.ipynb index cccbe97c089c6b356d6057e0ce12fb543a747528..d77096b20cabd2fc7c116d5b261154f84db3bc52 100644 --- a/docker/ellips/example/Ellipsometry workflow example.ipynb +++ b/docker/ellips/example/Ellipsometry workflow example.ipynb @@ -6,7 +6,7 @@ "source": [ "# Ellipsometry workflow example\n", "\n", - "In this notebook, an ellipsometry data set is analysed using the analysis tool [pyElli](https://pyelli.readthedocs.io/en/latest/api/elli.dispersions.html)" + "In this notebook, an ellipsometry data set is analysed using the analysis tool [pyElli](https://pyelli.readthedocs.io/en/latest/)" ] }, { @@ -122,7 +122,7 @@ "metadata": {}, "source": [ "### 3.2. Set model parameters\n", - "As an example we analyse an oxidation layer of SiO2 on Si. Prior to defining our model, we have to set the parameters we want to use. We're going to use a [Cauchy model](https://pyelli.readthedocs.io/en/latest/api/elli.dispersions.html#elli.dispersions.dispersions.Cauchy) for SiO2 and load the Si values from [literature values](https://refractiveindex.info/?shelf=main&book=Si&page=Aspnes). The parameter names can be choosen freely, but you have to use the exact same name in the model definition in section 3.3.\n", + "As an example we analyse an oxidation layer of SiO2 on Si. Prior to defining our model, we have to set the parameters we want to use. We're going to use a [Cauchy model](https://pyelli.readthedocs.io/en/latest/dispersions.html#cauchy) for SiO2 and load the Si values from [literature values](https://refractiveindex.info/?shelf=main&book=Si&page=Aspnes). The parameter names can be choosen freely, but you have to use the exact same name in the model definition in section 3.3.\n", "\n", "The package uses lmfit as fitting tool and you may refer to their [documentation](https://lmfit.github.io/lmfit-py/parameters.html#lmfit.parameter.Parameters.add) for details on parameter definition." ] @@ -152,12 +152,12 @@ "\n", "The fitting decorator takes a pandas dataframe containing the psi/delta measurement data (**psi_delta**) and the model parameters (**params**) as an input. It then passes the wavelength from measurement dataframe (**lbda**) and the parameters to the actual model function.\n", "\n", - "Inside the model function the optical model is built, i.e. the Si literature values are loaded and the fitting parameters are filled into the Cauchy dispersion. For details on how to insert data into the [Cauchy model](https://pyelli.readthedocs.io/en/latest/api/elli.dispersions.html#elli.dispersions.dispersions.Cauchy) or other optical dispersion models, you may refer to the [documentation of pyElli](https://pyelli.readthedocs.io/en/latest/api/elli.dispersions.html). Please keep in mind that the parameters you use here have to be defined in the parameter object **param** (see cell above in section 3.2).\n", - "From the dispersion model isotropic materials are generated (could also be an anisotropic material, refer to the [docs](https://pyelli.readthedocs.io/en/latest/api/elli.html#module-elli.materials) for an overview). This is done by calling the `elli.IsotropicMaterial(...)` function with a dispersion model as a parameter or simply calling `.get_mat()` on a dispersion model. These two approaches are equivalent.\n", + "Inside the model function the optical model is built, i.e. the Si literature values are loaded and the fitting parameters are filled into the Cauchy dispersion. For details on how to insert data into the [Cauchy model](https://pyelli.readthedocs.io/en/latest/dispersions.html#cauchy) or other optical dispersion models, you may refer to the [documentation of pyElli](https://pyelli.readthedocs.io/en/latest/dispersions.html). Please keep in mind that the parameters you use here have to be defined in the parameter object **param** (see cell above in section 3.2).\n", + "From the dispersion model isotropic materials are generated (could also be an anisotropic material, refer to the [docs](https://pyelli.readthedocs.io/en/latest/materials.html#isotropic-and-non-isotropic-materials) for an overview). This is done by calling the `elli.IsotropicMaterial(...)` function with a dispersion model as a parameter or simply calling `.get_mat()` on a dispersion model. These two approaches are equivalent.\n", "\n", "From these materials the layer is build, which only conists of the SiO2 layer in this example. The final structure consists of an incoming half-space, the layers and an outgoing half space. Specifically, typically the light is coming from air and finally gets absorbed by the bulk material, in our example this is Si, i.e. we call `elli.Structure(elli.AIR, Layer, Si)`.\n", "\n", - "To provide simulated data, we have to evaluate the structure by calling the `evaluate(...)` function, which takes the experimental wavelength array **lbda**, **ANGLE** under which the experiment was performed and the solver to be used to solve the transfer-matrix problem. Here, we use a simple 2x2 matrix approach, which splits the interaction in s and p-parts and therefore cannot account for anisotropy. There exist 4x4 matrix solvers based on the formulation by [D. W. Berremann](https://opg.optica.org/josa/abstract.cfm?uri=josa-62-4-502) as well. You may refer to the [documentation](https://pyelli.readthedocs.io/en/latest/api/elli.html#module-elli.solver) or a [mueller matrix example](https://github.com/PyEllips/pyElli/blob/master/examples/SiO2_Si%20Mueller%20Matrix/SiO2_Si%20Mueller%20Matrix.ipynb) on how to use these solvers.\n", + "To provide simulated data, we have to evaluate the structure by calling the `evaluate(...)` function, which takes the experimental wavelength array **lbda**, **ANGLE** under which the experiment was performed and the solver to be used to solve the transfer-matrix problem. Here, we use a simple 2x2 matrix approach, which splits the interaction in s and p-parts and therefore cannot account for anisotropy. There exist 4x4 matrix solvers based on the formulation by [D. W. Berremann](https://opg.optica.org/josa/abstract.cfm?uri=josa-62-4-502) as well. You may refer to the [documentation](https://pyelli.readthedocs.io/en/latest/solvers.html) or a [mueller matrix example](https://pyelli.readthedocs.io/en/latest/auto_examples/plot_SiO2_Si_MM.html) on how to use these solvers.\n", "\n", "Executing the cell below compares the simulated $\\Psi$ / $\\Delta$ values at the current parameter values with their measured counterparts. Additionally, input fields for each model parameter are shown. You may change the parameters and the calcualted data will change accordingly. For clarification the modeled data is shown with *_calc* postfix in the legend." ] @@ -226,7 +226,7 @@ "Since we want to extract the dispersion relation of a layer in our measured stack, we can use our fitted parameters.\n", "The fit parameters are contained in the fits output `params` attribute, i.e. `fit_stats.params` for our example.\n", "We can use it to call our dispersion relation we used in our model (here it is a Cauchy dispersion relation) and fill in our fitted value.\n", - "By calling `get_dielectric_df()` we can get the dielectric function of the material, which is plotted here as an example. `get_dielectric_df` uses a default wavelength range which can also be changed by inputting a wavelength array as a parameter, refer to its [documentation](https://pyelli.readthedocs.io/en/latest/api/elli.dispersions.html#elli.dispersions.base_dispersion.Dispersion) for further details." + "By calling `get_dielectric_df()` we can get the dielectric function of the material, which is plotted here as an example. `get_dielectric_df` uses a default wavelength range which can also be changed by inputting a wavelength array as a parameter, refer to its [documentation](https://pyelli.readthedocs.io/en/latest/dispersions.html#elli.dispersions.base_dispersion.Dispersion.get_dielectric_df) for further details." ] }, { @@ -371,7 +371,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.4" + "version": "3.9.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": {