10. Egyéb, máshova nem sorolható funkciók

10.1 Config

A programban lehetőség van konfigurálni (egyelőre még kevés) beállítást. Ilyen pl. a precision. Ez azt szabja meg, hogy a megjelenő számok hány tizedesjegyig legyenek kiírva. Ennek bemutatására gyorsan létrehozok egy interferogramot, majd koszinusz-függvény illesztésével kiértékelem.

[1]:
import pysprint as ps

g = ps.Generator(1, 4, 3, delay=500, GD=0, GDD=540, normalize=True)
g.generate()

ifg = ps.CosFitMethod(*g.data)
print(ifg)
CosFitMethod
----------
Parameters
----------
Datapoints: 14129
Predicted domain: frequency
Range: from 0.99997 to 4.00000 PHz
Normalized: True
Delay value: Not given
SPP position(s): Not given
----------------------------
Metadata extracted from file
----------------------------
{}
[2]:
ifg.GD_lookup(3, engine="normal")
The predicted GD is ± 505.74801 fs based on reference point of 3.00000.

A konfigurációt egy különleges with contextmanagerrel tudjuk módosítani a következőképpen:

with ps.config.setting("beallitas_neve", beallitas_erteke):
    ...

Az eredményeket most 8 tizedesjegyig szeretném megkapni, így a futtatni kívánt kódot a with blokk belsejébe írom.

[3]:
with ps.config.setting("precision", 8):
    ifg.optimizer(reference_point=3, order=2, initial_region_ratio=0.01, extend_by=0.01);
Working... -
c:\program files\python37\lib\site-packages\scipy\optimize\minpack.py:829: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Working... \
_images/hu_misc_5_3.png
$\displaystyle GD = 500.00000000 \ fs^1$
$\displaystyle GDD = 540.00000000 \ fs^2$
$\displaystyle with \ R^2 = 1.00000000.$

Futtatva ugyan ezt a with contextmanageren kívül már az alapértelmezett 5 tizedesjegyet használja a program:

[4]:
ifg.optimizer(reference_point=3, order=2, initial_region_ratio=0.01, extend_by=0.01);
Working... /
c:\program files\python37\lib\site-packages\scipy\optimize\minpack.py:829: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Working... /
_images/hu_misc_7_3.png
$\displaystyle GD = 500.00000 \ fs^1$
$\displaystyle GDD = 540.00000 \ fs^2$
$\displaystyle with \ R^2 = 1.00000.$

Ez a konfigurációs beállítás (majdnem) az összes kiírt szám - beleérve a fájlba írt logokat is - tizedesjegyeinek számát szabályozza.

10.2 Mérési eredmény megadása

A programba beépített függvénnyel lehetőség van az

\(X = \overline{x}_n \, \pm \, \frac{t_{N-1}}{\sqrt{N}}\sigma_{N-1}\)

képlettel adott mérési eredmény kiszámolására a következő módon:

[5]:
import numpy as np
from pysprint.utils import measurement

# a mérési eredményeink
x = np.array([1.00, 1.10, 1.05, 0.79, 1.12])

# a függvény hívása 95%-os szignifikancia szint mellett
measurement(x, confidence=0.95);
$\displaystyle 1.01200 ± 0.16458$

10.3 CLI, sablonok

A program telepítésével egy CLI, azaz Command Line Interface is telepítésre kerül. Ez a terminál/parancssor/Anaconda Prompt segítségével elérhető. A fő funkciója az, hogy sablonokat tud generálni az adott kiértékelési módszerhez, és ezt nem kell mindig újból beírni. Itt a munkafüzetben a !-lel érhető el a terminál. Generáljunk egy WFT kiértékeléshez tartozó sablont:

[6]:
!python -m pysprint --template wft
Created template wft-2020-11-06-12-33.py at C:\pyt\PySprint\doc

Attól függően, hogy hogyan települt a program a python -m előtag elhagyható. Ez a következő fájlt generálta:

[7]:
!type wft-2020-11-06-12-33.py
## PySprint generated template file
## Created at : 2020-11-06 12:33:15.495056
## Method used here : WFTMethod

import numpy as np
import matplotlib.pyplot as plt
import pysprint as ps

# -----------------------------LOADING DATA-----------------------------------

ifg = ps.WFTMethod.parse_raw(
    "ifg_file.txt",
    skiprows=0,
    decimal=".",
    sep=None,
    delimiter=None,
    comment=None,
    usecols=None,
    names=None,
    swapaxes=False,
    na_values=None,
    skip_blank_lines=True,
    keep_default_na=False,
    meta_len=1
)

# -----------------------------PREPROCESSING-----------------------------------

## change range if needed
# ifg.chrange(current_unit, target_unit)

## change to frequency domain if needed
# ifg.chdomain()

## slice domain if needed
# ifg.slice(start, stop)

## Optionally plot the interferogram
# ifg.plot()
# ifg.show()

# ------------------------------CALCULATION------------------------------------
## safely remove everything to ensure proper windows
# ifg.remove_all_windows()

## Add a window sequence
# ifg.add_window_linspace(start, stop, number, fwhm=None, std=None, order=2)

# OR

# ifg.add_window_arange(start, stop, step, fwhm=None, std=None, order=2)

# OR

# ifg.add_window_geomspace(start, stop, number, fwhm=None, std=None, order=2)

# OR

# ifg.add_window(center, fwhm=None, std=None, order=2)

## Optionally remove windows

# ifg.remove_window_at(center)
# ifg.remove_window_interval(start, stop)

## Calculate immediately
# ifg.calculate(reference_point, order, fastmath=False, parallel=False)

## Plot the heatmap
# ifg.heatmap()

# OR

# Build only the GD
# GD_curve = ifg.build_GD(fastmath=False, parallel=False)

## Preprocess the GD optionally
# GD_curve.slice(start, stop)

## Fit the GD
# GD_curve.fit(reference_point, order)

## Plot the fitting and errors optionally
# GD_curve.plot()
# GD_curve.errorplot()

A wft mellett a cff, spp, mm, és fft kulcsszavakkal generálható a megfelelő sablon fájl.