---
format:markdown
---
# **Michal Odložilík - Osobní stránka projektu PRPL12**
Stránka o progesu projektu PRPL12 Michala Odložilíka na téma Tomografie pomocí vysokorychlostních kamer na tokamaku GOLEM, ve spolupráci s Jakubem Chlumem.
## **Motivace a cíle**
Tomografie je metoda diagnostiky plazmatu, kde získáváme informace ve formě jeho poloidálních řezů emissivity v tokamaku.
Cílem projektu je zprovoznění tomografie pomocí vysokorychlostních kamer operujících ve viditelném spektru na tokamaku GOLEM, ve spolupráci s Jakubem Chlumem.
Já se konkrétně budu v první části projektu zabývat alternativami k metodě MFR, kde vyzkouším různé metody inverze a případně optimalizuji MFR metodu. S tímto tématem jsem navázal kontakt s Ing. Jakubem Svobodou, který mi poskytl možnost konzultací, za což mu velice děkuji. Ale hlavním společným cílem pořád bude automatizovat tomografii pomocí ryhclých kamer.
## **Teorie**
### Tomografie [1,2]
Tomografie je typ zobrazování v řezech. Samotný název pochází ze dvou řeckých slov "tomos" a "graphos", v překladu "řez" a "kresba". Využívá projekcí pozorovaného objektu k následné rekonstrukci jeho příčného řezu.
V praxi, na tokamacích, se většinou měří projekce elektromagnetckého záření z plazmatu na detektorech (fotodiody, bolometry, kamery,...). Data naměřená těmito detektory lze aproximovat jako:
\begin{equation}\label{eq:tomo1}
f_i=\int T_i(\mathbf{r}) S(\mathbf{r}) \mathrm{d}\mathbf{r}
\end{equation}
kde $S(\mathbf{r})$ je emissivita plazmatu, $f_i$ je signál měřený $i$-tým prvkem detektoru, $\mathbf{r}$ je polohový vektor a $T_i(\mathbf{r})$ je člen popisující geometrii měření. Cílem tomografie je pak najít emissivitu $S(\mathbf{r})$ v řezu.
Pokud budeme uvažovat, že pozorované plazma je toroidálně symetrické, můžeme naměřený signál po diskretizaci psát jako:
\begin{equation}\label{eq:tomo2}
\mathbf{f}=\mathbf{T}\cdot \mathbf{S}
\end{equation}
kde $\mathbf{f}$ jsou hodnoty získané všemi prvky detektoru, $\mathbf{T}$ je geometrická matice obsahující informace o geometrii a $\mathbf{S}$ je diskretizovaná funkce emissivity. Zavedení geometrické matice $\mathbf{T}$ je popsáno např. v [2].
Nyní budeme uvažovat data $\mathbf{I}$ naměřené kamerami. Rovnice \ref{eq:tomo2} pak bude mít tvar:
\begin{equation}\label{eq:tomo3}
\begin{pmatrix} I_{1} \\ \vdots \\ I_{n} \end{pmatrix}=\begin{pmatrix}
t_{11} & \dots & t_{1k}\\
\vdots & \ddots & \vdots\\
t_{n1} & \dots & t_{nk}
\end{pmatrix}\cdot\
\begin{pmatrix} S_{1} \\ \vdots \\ S_{k} \end{pmatrix}
\end{equation}
kde se pracuje s geometrickou maticí o velikosti (# pixelů $\times$ # buněk mřížky $S$).
Pro vyřešení problému tomografie je nutné tuto matici invertvat, ale tato úloha je špatně podmíněná a je třeba použít speiální algorithmy. V tomto projektu budeme k tomuto účelu používat Python balíček Tomotok [3], konkrétně metody Minimum Fisher Regularization (MFR), BiOrtogonal basis decomposition (BoB) a Metody lineární algebry (SVD, GED).
## **Logbook**
## Rešerše (~1-6. týden)
První týdny jsem řešil možnosti a plány tohoto projektu, společně s J. Chlumem. O konzultaci jsem kontaktoval Ing. Jakuba Svobodu, který mi poskytl námět na možnosti projekt.
Plánem je nejdříve zkusit různé metody a zjistit jak se chovají. Je pravděpodobné, že metoda BoB a metody lineární algebry nebudou produkovat příznivé výsledky, nebo nepůjdou vůbec implementovat. Ale J.Svoboda navrhl, že bych případně mohl zkusit pomocí těchto metod optimalizovat metodu MFR, pro lepší a rychlejší zisk výsledků. Tato optimalizace bude složitější z pohledu programování, tedy úplná implementace se nemusí povést.
## Říjen
### 1.Polovina
J.Chlum již udělal první skript s metodou MFR. Tento skript mi poskytl, i s daty z kamer, tedy jsem jej mohl zkusit na svém PC. První porblém se vyskytl s verzemi balíčku tomotoku. J.Chlum používá již zastaralaou verzi, tedy bychom měli skript upgradovat na nejnovější verzi.
Skript jsem poté upravil, abych mohl porovnat výsledky z různých metod (MFR, BoB, SVD, GEV). První výsledky lze vidět na Obr. pod textem. MFR metoda zatím produkuje nelepší výsledky. Zkusím ještě měnit různé parametry pro BoB a SVD, jako jsou např. vstupní data nebo regularizační parametr. GEV metoda bohužel nešla použít, zřejmě jelikož tato metoda není stavěná na tolik vstupních dat se kterými pracujeme.

Pozn.: Je vhodné pracovat s menším DPI u obrázků, jelikož to zrychlí vykreslování.
### 2.Polovina
Shůzka s J.Chlumem ohledně úvodní prezentace PRPL a diskuze ohledně plánů.
Usoudil jsem, že místo několika metod bych se měl soustředit společně s J.Chlumem na metodu MFR a tu dotáhnout do konce, kde bychom měli funkční a spolehlivou diagnostiku. Navíc J.Svoboda byl na měsíc mimo ČR a nechtělo se mi ho vyrušovat. Tedy jsem opustil nápad implementací lineární metody a BoB metody, jelikož by se jednalo hlavně o teoretickou práci, která by nemusela skončit úspěchem. Navíc po schůzce jsem zjistil, že bude dost práce i s jednou metodou, kterou chceme dotáhnout do funkčního stavu.
## Listopad
### 1.Polovina
Prezentování u druhého PRPL meetingu - [Prezentace](/TrainingCourses/Universities/CTU.cz/PRPL/2023-2024/JakChlum/initial_presentation.pdf)
Bližší seznámení s fungováním diagnostik na tokamaku GOLEM.
Úprava kódu v Jupyter notebook pro lepší čitelnost a mazání zbytečných částí kódů.
### 2.Polovina
Shůzka s V.Svobodou u tokamaku GOLEM pro lepší porozumění Dirigent sytému a stylu finálního notebooku - notebook by měl být co nejsrozumitelnější s hodně "viditelnými" kroky.
V návaznosti na tuto schůku jsem vytvořil 2 notebooky z jednoho původního - jeden který je třeba spustit pro vytvoření geometrické matice a rekonstrukční mřížky a druhý, kde jsem znova upravil notebook, který bude už přímo počítat tomografii. Notebokoy jsou doplněny buňkami kde se uživatel může podívat jak přibližně vypadají obejkty s kterými pracujeme, nebo zkontrolovat jestli vše funguje jak má (Příklady jsou na obrážcích pod textem). Vytvoření separátního notebooku pro geometrickou matici také samozřejmě zrychlilo celý proces tomografie.



## Prosinec
### 1.Polovina
Snažil jsem se vylepšit načítání dat z kamer. Předchozí způsob zabíral zbytečně moc paměti tím, že ukládal všechny obrázky do složky a poté je načítal. Implementovaný způsob načte vždy jeden obrázek do mezipaměti a poté po jeho tomografické rekonstrukci se načte na stejné místo další obrázek. Vyskytuje se zde někde možný bug, jelikož občas se zobrazí chyba, že načítaný obrázek je prázdný, i když není. Jedná se o maličkost, kterou doladíme později, až nalezneme nejoptimálnější způsob. Tím zřejmě bude načtení všech obrázků do nějakého jednoho datové typu.
Dále připravujeme program na "on site" test na tokamaku GOLEM s J.Chlumem, který implementuje metodu MFR s fixovaným parametrem, který urychlí počítání. Já jsem upravil notebook tak, aby algoritmus pracoval se snímky pouze kdy se vyskytovalo plazma v komoře. Jádro této části kódu jsem převzal od D.Kropáčkové.
### 2.Polovina
20.12 - První "on site" měření na tokamaku GOLEM. Zatím jsme notebook pouštěli z osobního PC, jelikož nahrání na server a spuštění bylo ještě složité a je to třeba diskutovat s J.Máchou. Algoritmus jsme zkusili pro více snímků na jednom výboji - #43385 (výsledek je dole, jedná se poze o začátek výboje, počítání snímek --> čas u tohoto pokusu nefungovalo, u pozdějších výbojů by to mělo být opraveno - ZKONTROLOVAT). U dalších výbojů jsme zksuili rekonstruovat pár snímků - úspěšně. Dále by chtělo upravit okolí obrázků a přidat více informací. Dále bychom se měli podívat na odhad parametrů a zkusit najít nějaký lepší způsob. V budoucnosti bychom měli zkusit zvíšit snímkovací frekvenci, jelikož z animace to vypadá, že časové kroky jsou příliš velké (animace se nemění plynule).

## Leden
### Mariánská – zimní workshop FPTF/FTTF (22.1-26.1)
O.Kudláček měl návrh, že bychom mohli porovnat polohu středu proudového vlákna, zjištěnou z magnetických diagnostik, se středem odhadnutým pomocí naší tomografie. Pokud už existuje funkční diagnostika, která by tento úkol dokázala zjsitit, pak bychom mohli zřejmě zjistit jak moc se liší rekonstrukce od skutečného přídadu. Ale "validace" tomografické rekonstrukce by mohlo být téma i na další PRPL projekt na příští roky.
## Únor
### 2.polovina
22.2 - schůzka s J.Chlumem. Diksutovali jsme možná vylepšení a co budeme dělat v 2. kolečku. Vytvořili jsme průběžnou prezentaci kde je sepsán aktuální stav a další plány (Viz. prezentace dále).
## Léto
### Úprava vykreslení LOS
D. Kropáčková požila a vylepšila vizalizaci LOS v notebooku gmat.ipynb v [programu pro kamery] (https://gitlab.com/golem-tokamak/dirigent/-/blob/master/Diagnostics/FastCameras/Default-DK/Camera_Position.ipynb?ref_type=heads). Toto vylepšení jsem zakomponoval do notebooku gmat.ipynb jak je vidět na Obr. dole.

### Číslo kvality výboje z pohledu tomografie
Vymysleli jsem parametr, který charkterizuje kvalitu výboje z tomografie - bereme maximální hodnoty v radiálním, horizontálním a diagonálním směru ze středu, uděláme průměr a poté vydělíme hodnotou v centru. Dostaneme pak číslo, které alespoň trochu charakterizuje "dutost" dané rekonstrukce. Symetrie pak lze spočíst jako rozdíl maximálních hodnot v protějších směrech vydělená větší hodnotou. Viz notebook minfisher_golem.ipynb. Příklad spočtených parametrů:

## 2.Podzim
Upravil jsem výpočet parametrů kvality, jelikož byly problémy s atypickými tvary plazmatu, halvně na počátku a na konci výbojů. Dále jsem se snažil zapracovat na stránce/lepší vizualizaci výsledků tomografie, zobrazeno na Obr. dole.

Ale hlavní ideou bylo ukázat výsledky tomografie, jejich parametry a hlavní parametry plazmatu v jedné animaci. Tento přístup jsem ale nezahrnul do halvního kódu, jelikož vytváření obrázků zabralo příliš času (14 min jen pro zpracování animace, bez výpočtu inverzí).
Všechny kódy jsou nahrány na [GOLEM Gitlabu](https://gitlab.com/golem-tokamak/dirigent/-/tree/647eb3a31309262a275afeb886c4fac2ff122f33/Diagnostics/FastCameras/Default-Tomo). Jádro tvoří dva notebooky. Notebook geometry_matrix.ipynb připravuje nezbytná geometrická data pro tomografickou rekonstrukci z kamer tokamaku GOLEM, zatímco minfisher_golem_Abacus.ipynb tato data využívá k provedení samotné tomografické inverzi. Tutoriál se nacházi ve vytvořeném [pdf](/TrainingCourses/Universities/CTU.cz/PRPL/2023-2024/MichOdl/Tomo_tutorial-2.pdf), ale doporučil bych se spíše podívat přímo do notebooků, které jsou napsány co nejvíce informativně a názorně. I přes to zde uvedu rychlý popis obou notebooků.
# Popis pomocného tomografického kódu `geometry_matrix.ipynb`
## Úvod
Notebook `geometry_matrix.ipynb` slouží k výpočtu mřížky a geometrické matice pro tomografii využívající dvě rychlé viditelné kamery na tokamaku GOLEM a jeho výsledek je nezbytný pro další notebook.
## Struktura notebooku a hlavní funkce
Notebook začíná importem nezbytných knihoven, definicemi parametrů a poté definuje klíčové funkce před hlavním spouštěcím blokem.
### Požadované knihovny
Notebook uvádí následující požadované knihovny Pythonu: `numpy`, `calcam`, `tomotok`. Pro volitelné vykreslování jsou zmíněny `matplotlib`, `mpl_toolkits` a `ipympl`. Tyto knihovny pokrývají numerické operace, kalibraci kamer, tomografické algoritmy a vykreslování.
### Importy knihoven
Potřebné knihovny jsou `numpy` pro numerické operace, `matplotlib.pyplot` a `mpl_toolkits.mplot3d` pro vykreslování. Pro práci s kalibracemi kamer je importována knihovna `calcam`. Pro generování geometrické matice a mřížky jsou z `tomotok.core.geometry` importovány `sparse_line_3d` a `RegularGrid`, a z `tomotok.core.geometry.io` funkce `save_sparse_gmat`.
### Tvorba rekonstrukční mřížky
#### Funkce `create_grid(gridrn, gridzn, plasmaradius, padding)`
Tato funkce je definována pro výpočet rekonstrukční mřížky na základě zadaných parametrů.
* `gridrn`: Počet voxelů/uzlů mřížky ve směru r.
* `gridzn`: Počet voxelů/uzlů mřížky ve směru z.
* `plasmaradius`: Poloměr plazmatu (a rekonstrukční domény), pro limiter je 0.085.
* `padding`: Přidání okraje pro práci s mírně větší mřížkou pro lepší vizualizaci.
Funkce definuje `plasmacentre = 0.40` (malý poloměr tokamaku) a na základě vstupních parametrů vypočítá minimální a maximální souřadnice pro R a Z osy mřížky (`gridrmin`, `gridrmax`, `gridzmin`, `gridzmax`). Poté generuje `RegularGrid` s daným počtem uzlů a rozsahem. Výsledná mřížka slouží jako diskretizovaná poloidální rovina, kde se bude provádět rekonstrukce.
#### Definice parametrů mřížky
Před voláním funkce `create_grid` jsou definovány konkrétní hodnoty pro `plasmaradius` (0.085 m), `padding` (0.015 m), `chamberradius` (0.1 m) a `plasmacentre` (0.40 m), které jsou specifické pro tokamak GOLEM. Tyto parametry určují rozsah rekonstrukční roviny.
#### Volání funkce `create_grid`
Funkce `create_grid` je volána s `gridrn=50` a `gridzn=50`, čímž se vytvoří mřížka s rozlišením 50x50 bodů.
### Tvorba geometrické matice
#### Načtení kalibrací kamer
Pro výpočet geometrické matice se načítají kalibrační soubory kamer `13rad.ccc` (radiální kamera) a `12ver.ccc` (vertikální kamera) pomocí knihovny `calcam`.
#### Definice rotačních a translačních matic
Jsou definovány rotační (`Rver`, `Rrad`) a translační (`Tver`, `Trad`) matice pro kalibraci geometrie. Tyto matice provádějí transformaci z 3D souřadnicového systému skenu na standardní souřadnicový systém tokamaku.
#### Výběr řádků detektorů a výpočet linií pohledu (LOS)
Uživatel si pak vybírá, které řádky detektorů kamery budou použity pro rekonstrukci (`rowrad = 511`, `rowver = 511`). Poté se z kalibračních souborů `calcam` získají LOS (`ogdirrad`, `ogdirver`) pro vybrané řádky. Tyto směry jsou následně rotovány na základě poloh a orientací kamer pomocí předdefinovaných rotačních matic.
#### Vyloučení zakrytých detektorů
Parametry `leftstoprad`, `rightstoprad`, `leftstopver`, `rightstopver` umožňují vyloučit detektory, jejichž zorné pole je překryto (např. komponentami tokamaku). V tomto notebooku jsou všechny detektory (0-1280) zahrnuty pro obě kamery, což znamená, že nejsou žádné zakryté detektory.
#### Generování a spojování souřadnic LOS (chords)
Kód generuje 3D souřadnice LOS (`xchords`, `ychords`, `zchords`) pro každou kameru. Tyto souřadnice jsou odvozeny z kalibračních dat a směrů LOS. Poté jsou souřadnice z radiální a vertikální kamery spojeny do jedné sady pro další zpracování.
#### Výpočet a uložení geometrické matice
Hlavním krokem je volání funkce `sparse_line_3d()` z knihovny `tomotok` pro výpočet geometrické matice (`gmat`). Tato funkce efektivně mapuje LOS každého detektoru na mřížku rekonstrukce. Výpočet je poměrně rychlý (např. 3.67 sekundy pro 50x50 mřížku). Nakonec je geometrická matice a mřížka uložena do souboru s názvem `gmat/gmat_50x50` (nebo odpovídající rozlišení) pomocí funkce `save_sparse_gmat()`.
### (Volitelné) Vykreslení vektorů linií pohledu (LOS)
Notebook obsahuje volitelnou sekci pro vizualizaci LOS v 3D prostoru. To pomáhá ověřit správnou orientaci a pokrytí kamer. Graf zobrazuje kamery, tokamak (znázorněný kruhem představujícím hlavní poloměr a obrysy komory) a jednotlivé linie pohledu vycházející z detektorů.
# Popis hlavního tomografického kódu `minfisher_golem_Abacus.ipynb`
## Úvod
Notebook je navržen k provedení tomografické inverze pomocí algoritmu Minimum Fischer Regularization (MFR) na datech z rychlých kamer na tokamaku GOLEM. Kód zahrnuje načítání dat z kamer, načtení geometrické matice, definování rekonstrukční mřížky a masky a využití ploch magnetického toku pro anizotropní vyhlazování.
## Struktura notebooku a hlavní funkce
Notebook začíná nezbytnými importy, definicemi parametrů a poté definuje klíčové funkce před hlavní spouštěcí částí.
### Požadované knihovny
Notebook požaduje knihovny Pythonu: `numpy`, `matplotlib`, `opencv`, `tomotok`, `IPython.display` a `scipy.ndimage`. Tyto knihovny pokrývají numerické operace, vykreslování, zpracování obrazu, tomografické algoritmy a funkce zobrazení.
### Počáteční nastavení a struktura složek
Počáteční blok kódu nastavuje různé parametry, jako je `shot_no` (číslo výboje tokamaku) a `channel` (barevný kanál pro zpracování obrazu). Dynamicky také vytváří adresářovou strukturu pro ukládání výsledků, včetně podsložek pro `data`, `graphs` a `stats`, a také `frames` pro obrázky z vertikálních a radiálních kamer.
### Definované funkce
#### `create_mask(grid, limiter_mask, plasmaradius)`
Tato funkce generuje boolean masku pro data poloidální roviny. Maska definuje oblast, kde se bude provádět tomografická rekonstrukce, buď až k limiteru, nebo k LCFS. Používá předdefinované hodnoty `plasmacentre` a `chamberradius` specifické pro tokamak GOLEM.
#### `imagesfromvideo(minrange, maxrange)`
Tato funkce je zodpovědná za extrakci jednotlivých snímků z vertikálních a radiálních kamer. Načítá video data přímo z webových stránek GOLEM. Extrahované snímky jsou poté uloženy jako soubory `.png` do určených podsložek `vertical` a `radial` ve `frames_folder`.
#### `datafromimage(framenumber, channel)`
Tato funkce zpracovává uložené snímky k extrakci signálu pro tomografickou rekonstrukci. Načítá zadaný snímek z obou kamer, vybírá konkrétní řádek detektoru (např. řady pixelů `rowrad = 511`, `rowver = 511`) a vylučuje zakryté detektory na základě parametrů `leftstop` a `rightstop`. Nakonec zřetězí signály z vertikálních a radiálních kamer do jednoho pole `sig`.
#### `datasolve(framenumber, sig, grid, gmat, magflux, mask, fixed, alpha, initial_guess)`
Toto je hlavní funkce, kde se provádí tomografická inverze pomocí algoritmu MFR.
* Přetvoří vstupní data `sig` do tvaru `(#timeslices, #channels/pixels)`.
* Provede odhad chyb pro data, u něhož je uznáno, že má významný dopad na výsledky a vyžaduje další studium.
* Derivační matice (`dmats`) jsou vypočítány pomocí `standard_anisotropic_derivative_matrices` z `tomotok.core.derivative`, zahrnující magnetický tok (`magflux`) pro anizotropní vyhlazování. Parametr `aniso` určuje anizotropii vyhlazování kolmo a rovnoběžně s plochami magnetického toku.
* Geometrická matice (`gmat`) je maskována tak, aby zahrnovala pouze relevantní rekonstrukční oblast pro zmenšení doby výpočtu.
* Funkce podporuje dva typy solverů:
* **Solver s pevným regularizačním parametrem (`Fixt` nebo `CholmodFixt`)**: Tato možnost je rychlejší a používá se, když je `fixed` nastaveno na `True`. Používá předdefinovaný parametr `alpha`.
* **Plná Minimum Fischer Regularization (`Mfr` nebo `CholmodMfr`)**: Toto je pomalejší, ale „lepší“ řešitel, který určuje regularizační parametr iterativně.
* Vrátí výsledek rekonstrukce (`res`) a statistiku chi-squared (`chi`). Rekonstruovaná rovina je uložena jako soubor `.npy` ve složce `results/data` a statistiky jsou uloženy ve složce `results/stats`.
### Hlavní část kódu
Hlavní část notebooku spouští celý proces tomografické rekonstrukce.
#### Definice parametrů a geometrie
Jsou poté definovány klíčové parametry jako `plasmaradius`, `padding`, `chamberradius` a `plasmacentre`, které jsou specifické pro geometrii tokamaku GOLEM. Ty se používají k definování hranic plazmatu a komory pro účely vykreslování a maskování. Jsou také nastaveny minimální a maximální souřadnice mřížky pro vykreslování.
#### Načtení geometrické matice a mřížky
Geometrická matice (`gmat`) a rekonstrukční `grid` jsou načteny z předgenerovaného souboru (např. `gmat_50x50`). Geometrická matice je klíčová, protože popisuje mapování z emisivity v rekonstrukčních oblastech na signál u detektorů kamery. Tato matice je specifická pro použité kamery a velikost mřížky, což vyžaduje její opětovné generování, pokud se některá z nich změní.
#### Volitelná vizualizace geometrické matice a masky
Notebook obsahuje volitelný kód pro vizualizaci součtu prvků geometrické matice, což poskytuje náhled na zorné pole kamer v poloidální rovině tokamaku. Maska je vytvořena pomocí funkce `create_mask` k omezení rekonstrukční oblasti pouze na vnitřek komory tokamaku, a existuje možnost tuto masku vykreslit pro ověření.
#### Generování ploch magnetického toku (Psi)
Plochy magnetického toku, označené jako Psi, jsou generovány pro anizotropní vyhlazování výsledků rekonstrukce. Současná implementace používá zjednodušené Solovjevovo řešení Grad-Shafranovovy rovnice k aproximaci těchto ploch, čímž poskytuje fyzikálnější reprezentaci než jednoduché soustředné kruhy. Existuje také volitelná možnost vykreslit tyto plochy Psi pro vizuální kontrolu.
#### Smyčka tomografické rekonstrukce
Jádrem analýzy je smyčka, která iteruje přes definovaný rozsah snímků (od `plasma_start` do `plasma_end`, získaných z databáze detekce plazmatu).
* Pro první snímek (`minrange`) je volána funkce `datasolve` s `fixed=False`, aby řešitel mohl určit optimální regularizační parametry (`alpha`).
* Pro následující snímky je použito `fixed=True` a parametry `alpha` určené z prvního snímku jsou znovu použity, což výrazně urychluje rekonstrukci.
* Počáteční odhad (`initial_guess`) pro rekonstrukci aktuálního snímku je poskytnut výsledkem předchozího snímku, což pomáhá solveru nrychleji konvergovat.
* Je zahrnuta kontrola hodnoty chi-kvadrát: pokud `abs(chi - 1) > 0.1`, znamená to, že pevná `alpha` nemusí být optimální, a řešitel je znovu spuštěn s `fixed=False` pro opětovné vyhodnocení regularizačních parametrů. Tento adaptivní přístup zajišťuje kvalitu rekonstrukce.
* Každý rekonstruovaný snímek je poté vykreslen, překryt obrysy limiteru a komory a uložen jako obrázek PNG.
#### Znovu vykreslení s konzistentní barevnou škálou
Po počátečních rekonstrukcích notebook obsahuje sekci pro opětovné vykreslení všech výsledků se stacionárním colorbarem. Toho je dosaženo nejprve nalezením maximální intenzity napříč všemi rekonstruovanými snímky (po Gaussově filtru pro vyhlazení maximálních hodnot v čase) a poté použitím této `vmax` pro konzistentní vizualizaci.
#### Generování animace
Všechny vygenerované obrázky PNG rekonstruovaných snímků jsou zkombinovány do video souboru AVI s názvem `TomographyResult.avi`. Navíc je screenshot ze středu výboje uložen jako `tomo_iconfig.png` a `tomo_ScreenShotAll.png` pro potenciální použití jako ikona nebo náhled.
#### Výpočet parametru dutosti
Je definována funkce `quality_parameters(data)` pro výpočet parametru "dutosti", což je metrika pro kvantifikaci symetrie a koncentrace emisivity rekonstruovaného plazmatu ve středu.
* Vypočítává maximální hodnoty v různých kvadrantech (nad, pod, vlevo, vpravo, vlevo nahoře, vpravo dole, vpravo nahoře, vlevo dole) vzhledem k definovanému středovému bodu (21, 20) pole `data`.
* Míry symetrie (vertikální, horizontální, diagonální) jsou vypočítány jako `1 - abs(max1 - max2) / max(max1, max2, 1)`, což penalizuje asymetrii.
* Celkové skóre symetrie (`total_symmetry`) je průměrem těchto jednotlivých měr symetrie.
* `total_hollowness` se vypočítá jako průměr maxim dělený `center_value`.
* Konečný `parameter` (parametr kvality) je součin `total_hollowness` a `total_symmetry`.
* Výsledky (snímky, parametry, symetrie, dutosti) jsou uloženy do textového souboru (`quality_parameters.txt`), spolu s průměrnými hodnotami a celkovým počtem snímků.
## Co dál (pro následovatele)
Vytvořili jsme "jádro" pro tomografii na tokamaku GOLEM. K dispozici existují další metody pro inverzi jako např. Rozklad do BiOrtogonální Báze (nejlépe kontaktovat Dr. J. Cavalier, J. Svoboda z IPP), SVD metody nebo aplikace neuronové sítě (Sara Abbasi). Tedy rekonstrukce by se mohla tímto směrem znatelně zrychlit.
Velkou nevýhodou viditelné tomografie jsou různé odrazy, které výsledky hodně zkreslují. Zde také existují modely a metody které toto řeší.
Dále je prostor pro fyzikální interpretaci výsledků. Zde např. nápad O. Kudláčka porovnat polohu středu plazmatu z rekonstrukce s výsledky magnetické diagnostiky.
## Reference
[1] Odložilík, M. "Tomografická inverze viditelného záření detekovaného kamerami s vysokou snímkovací frekvencí pro studium detachmentu v tokamaku COMPASS". [Bakalářská práce (2023)](http://hdl.handle.net/10467/111617)
[2] Svoboda, J., et al. "Tomotok: python package for tomography of tokamak plasma radiation." Journal of Instrumentation 16.12 (2021): C12015.
[3] Odstrčil, T., et al. "Optimized tomography methods for plasma emissivity reconstruction at the ASDEX Upgrade tokamak." Review of Scientific Instruments 87.12 (2016).