doc
This commit is contained in:
commit
82eff06057
141 changed files with 10910 additions and 0 deletions
258
_modules/optifik/minmax.html
Normal file
258
_modules/optifik/minmax.html
Normal file
|
@ -0,0 +1,258 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en" data-content_root="../../">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>optifik.minmax — optifik documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=5ecbeea2" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/basic.css?v=b08954a9" />
|
||||
<link rel="stylesheet" type="text/css" href="../../_static/alabaster.css?v=27fed22d" />
|
||||
<script src="../../_static/documentation_options.js?v=5929fcd5"></script>
|
||||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||
<link rel="index" title="Index" href="../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../search.html" />
|
||||
|
||||
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head><body>
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
|
||||
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for optifik.minmax</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">scipy</span><span class="w"> </span><span class="kn">import</span> <span class="n">stats</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">skimage.measure</span><span class="w"> </span><span class="kn">import</span> <span class="n">ransac</span><span class="p">,</span> <span class="n">LineModelND</span>
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">scipy.signal</span><span class="w"> </span><span class="kn">import</span> <span class="n">find_peaks</span>
|
||||
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||||
|
||||
<span class="kn">from</span><span class="w"> </span><span class="nn">.utils</span><span class="w"> </span><span class="kn">import</span> <span class="n">OptimizeResult</span><span class="p">,</span> <span class="n">setup_matplotlib</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="thickness_from_minmax">
|
||||
<a class="viewcode-back" href="../../api_reference.html#optifik.minmax.thickness_from_minmax">[docs]</a>
|
||||
<span class="k">def</span><span class="w"> </span><span class="nf">thickness_from_minmax</span><span class="p">(</span><span class="n">wavelengths</span><span class="p">,</span>
|
||||
<span class="n">intensities</span><span class="p">,</span>
|
||||
<span class="n">refractive_index</span><span class="p">,</span>
|
||||
<span class="n">min_peak_prominence</span><span class="p">,</span>
|
||||
<span class="n">min_peak_distance</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
|
||||
<span class="n">method</span><span class="o">=</span><span class="s1">'linreg'</span><span class="p">,</span>
|
||||
<span class="n">plot</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Return the thickness from a min-max detection.</span>
|
||||
|
||||
<span class="sd"> Parameters</span>
|
||||
<span class="sd"> ----------</span>
|
||||
<span class="sd"> wavelengths : array</span>
|
||||
<span class="sd"> Wavelength values in nm.</span>
|
||||
<span class="sd"> intensities : array</span>
|
||||
<span class="sd"> Intensity values.</span>
|
||||
<span class="sd"> refractive_index : scalar, optional</span>
|
||||
<span class="sd"> Value of the refractive index of the medium.</span>
|
||||
<span class="sd"> min_peak_prominence : scalar, optional</span>
|
||||
<span class="sd"> Required prominence of peaks.</span>
|
||||
<span class="sd"> min_peak_distance : scalar, optional</span>
|
||||
<span class="sd"> Minimum distance between peaks.</span>
|
||||
<span class="sd"> method : string, optional</span>
|
||||
<span class="sd"> Either 'linreg' for linear regression or 'ransac'</span>
|
||||
<span class="sd"> for Randon Sampling Consensus.</span>
|
||||
<span class="sd"> plot : boolean, optional</span>
|
||||
<span class="sd"> Show plots of peak detection and lin regression.</span>
|
||||
|
||||
<span class="sd"> Returns</span>
|
||||
<span class="sd"> -------</span>
|
||||
<span class="sd"> results : Instance of `OptimizeResult` class.</span>
|
||||
<span class="sd"> The attribute `thickness` gives the thickness value in nm.</span>
|
||||
|
||||
<span class="sd"> Notes</span>
|
||||
<span class="sd"> -----</span>
|
||||
<span class="sd"> For more details about `min_peak_prominence` and `min_peak_distance`,</span>
|
||||
<span class="sd"> see the documentation of `scipy.signal.find_peaks`. This function</span>
|
||||
<span class="sd"> is used to find extrema.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">plot</span><span class="p">:</span>
|
||||
<span class="n">setup_matplotlib</span><span class="p">()</span>
|
||||
|
||||
<span class="n">peaks_max</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">find_peaks</span><span class="p">(</span><span class="n">intensities</span><span class="p">,</span> <span class="n">prominence</span><span class="o">=</span><span class="n">min_peak_prominence</span><span class="p">,</span> <span class="n">distance</span><span class="o">=</span><span class="n">min_peak_distance</span><span class="p">)</span>
|
||||
<span class="n">peaks_min</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">find_peaks</span><span class="p">(</span><span class="o">-</span><span class="n">intensities</span><span class="p">,</span> <span class="n">prominence</span><span class="o">=</span><span class="n">min_peak_prominence</span><span class="p">,</span> <span class="n">distance</span><span class="o">=</span><span class="n">min_peak_distance</span><span class="p">)</span>
|
||||
<span class="n">peaks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">peaks_min</span><span class="p">,</span> <span class="n">peaks_max</span><span class="p">))</span>
|
||||
<span class="n">peaks</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
|
||||
|
||||
<span class="n">k_values</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">peaks</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">k_values</span><span class="o">.</span><span class="n">size</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="c1"># Can't fit if less than two points.</span>
|
||||
<span class="k">return</span> <span class="n">OptimizeResult</span><span class="p">(</span><span class="n">thickness</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">refractive_index</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span>
|
||||
<span class="c1">#refractive_index = refractive_index[peaks][::-1]</span>
|
||||
<span class="n">n_over_lambda</span> <span class="o">=</span> <span class="n">refractive_index</span><span class="p">[</span><span class="n">peaks</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">/</span> <span class="n">wavelengths</span><span class="p">[</span><span class="n">peaks</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">n_over_lambda</span> <span class="o">=</span> <span class="n">refractive_index</span> <span class="o">/</span> <span class="n">wavelengths</span><span class="p">[</span><span class="n">peaks</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">method</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'ransac'</span><span class="p">:</span>
|
||||
<span class="n">residual_threshold</span> <span class="o">=</span> <span class="mf">4e-5</span>
|
||||
<span class="n">min_samples</span> <span class="o">=</span> <span class="mi">2</span>
|
||||
<span class="c1"># Scikit-image</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">column_stack</span><span class="p">([</span><span class="n">k_values</span><span class="p">,</span> <span class="n">n_over_lambda</span><span class="p">])</span>
|
||||
<span class="n">model_robust</span><span class="p">,</span> <span class="n">inliers</span> <span class="o">=</span> <span class="n">ransac</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">LineModelND</span><span class="p">,</span>
|
||||
<span class="n">min_samples</span><span class="o">=</span><span class="n">min_samples</span><span class="p">,</span>
|
||||
<span class="n">residual_threshold</span><span class="o">=</span><span class="n">residual_threshold</span><span class="p">,</span>
|
||||
<span class="n">max_trials</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
||||
<span class="n">slope</span> <span class="o">=</span> <span class="n">model_robust</span><span class="o">.</span><span class="n">params</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">thickness_minmax</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">slope</span> <span class="o">/</span> <span class="mi">4</span>
|
||||
|
||||
<span class="c1"># Scikit-learn</span>
|
||||
<span class="c1">#X, y = k_values.reshape(-1, 1), 1/wavelengths[peaks][::-1]</span>
|
||||
|
||||
<span class="c1">## Fit line using all data</span>
|
||||
<span class="c1">#lr = linear_model.LinearRegression()</span>
|
||||
<span class="c1">#lr.fit(X, y)</span>
|
||||
|
||||
<span class="c1">#slransac = linear_model.RANSACRegressor(min_samples=min_samples,</span>
|
||||
<span class="c1"># residual_threshold=residual_threshold)</span>
|
||||
<span class="c1">#slransac.fit(X, y)</span>
|
||||
<span class="c1">#inlier_mask = slransac.inlier_mask_</span>
|
||||
<span class="c1">#outlier_mask = np.logical_not(inlier_mask)</span>
|
||||
|
||||
<span class="c1">## Predict data of estimated models</span>
|
||||
<span class="c1">#line_X = np.arange(X.min(), X.max())[:, np.newaxis]</span>
|
||||
<span class="c1">#line_y = lr.predict(line_X)</span>
|
||||
<span class="c1">#line_y_ransac = slransac.predict(line_X)</span>
|
||||
|
||||
<span class="c1">#slope = slransac.estimator_.coef_[0]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">plot</span><span class="p">:</span>
|
||||
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
|
||||
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'extremum n°'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'$n$($\lambda$) / $\lambda$'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">inliers</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="n">inliers</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="s1">'xb'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Inliers'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="o">~</span><span class="n">inliers</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="o">~</span><span class="n">inliers</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="s1">'+r'</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.6</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Outliers'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">k_values</span><span class="p">,</span> <span class="n">model_robust</span><span class="o">.</span><span class="n">predict_y</span><span class="p">(</span><span class="n">k_values</span><span class="p">),</span> <span class="s1">'-g'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Thickness = </span><span class="si">{</span><span class="n">thickness_minmax</span><span class="si">:</span><span class="s1">.2f</span><span class="si">}</span><span class="s1"> nm'</span><span class="p">)</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">inspect</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">()</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span><span class="p">)</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">OptimizeResult</span><span class="p">(</span><span class="n">thickness</span><span class="o">=</span><span class="n">thickness_minmax</span><span class="p">,</span>
|
||||
<span class="n">num_inliers</span><span class="o">=</span><span class="n">inliers</span><span class="o">.</span><span class="n">sum</span><span class="p">(),</span>
|
||||
<span class="n">num_outliers</span><span class="o">=</span><span class="p">(</span><span class="o">~</span><span class="n">inliers</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">(),</span>
|
||||
<span class="n">peaks_max</span><span class="o">=</span><span class="n">peaks_max</span><span class="p">,</span>
|
||||
<span class="n">peaks_min</span><span class="o">=</span><span class="n">peaks_min</span><span class="p">)</span>
|
||||
|
||||
<span class="k">elif</span> <span class="n">method</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'linreg'</span><span class="p">:</span>
|
||||
<span class="n">slope</span><span class="p">,</span> <span class="n">intercept</span><span class="p">,</span> <span class="n">r_value</span><span class="p">,</span> <span class="n">p_value</span><span class="p">,</span> <span class="n">std_err</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">linregress</span><span class="p">(</span><span class="n">k_values</span><span class="p">,</span> <span class="n">n_over_lambda</span><span class="p">)</span>
|
||||
<span class="c1">#mean_n = np.mean(refractive_index)</span>
|
||||
<span class="n">thickness_minmax</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">slope</span> <span class="o">/</span> <span class="mi">4</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">plot</span><span class="p">:</span>
|
||||
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
|
||||
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'extremum n°'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'$n$($\lambda$) / $\lambda$'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">k_values</span><span class="p">,</span> <span class="n">n_over_lambda</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Extrema'</span><span class="p">)</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">k_values</span><span class="p">,</span> <span class="n">intercept</span> <span class="o">+</span> <span class="n">k_values</span> <span class="o">*</span> <span class="n">slope</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Fit'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
|
||||
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Thickness = </span><span class="si">{</span><span class="n">thickness_minmax</span><span class="si">:</span><span class="s1">.2f</span><span class="si">}</span><span class="s1"> nm'</span><span class="p">)</span>
|
||||
<span class="kn">import</span><span class="w"> </span><span class="nn">inspect</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">currentframe</span><span class="p">()</span><span class="o">.</span><span class="n">f_code</span><span class="o">.</span><span class="n">co_name</span><span class="p">)</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
|
||||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">OptimizeResult</span><span class="p">(</span><span class="n">thickness</span><span class="o">=</span><span class="n">thickness_minmax</span><span class="p">,</span>
|
||||
<span class="n">peaks_max</span><span class="o">=</span><span class="n">peaks_max</span><span class="p">,</span>
|
||||
<span class="n">peaks_min</span><span class="o">=</span><span class="n">peaks_min</span><span class="p">,</span>
|
||||
<span class="n">stderr</span><span class="o">=</span><span class="n">std_err</span><span class="p">)</span>
|
||||
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'Wrong method'</span><span class="p">)</span></div>
|
||||
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h1 class="logo"><a href="../../index.html">optifik</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<search id="searchbox" style="display: none" role="search">
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Search"/>
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</search>
|
||||
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Navigation</h3>
|
||||
<p class="caption" role="heading"><span class="caption-text">Documentation</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../api_reference.html">API Reference</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../examples.html">Examples</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="relations">
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li><a href="../../index.html">Documentation overview</a><ul>
|
||||
<li><a href="../index.html">Module code</a><ul>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
©2025, F. Boulogne et al..
|
||||
|
||||
|
|
||||
Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.2.3</a>
|
||||
& <a href="https://alabaster.readthedocs.io">Alabaster 1.0.0</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue