Warsztaty z Metod Terapeutycznych: Różnice pomiędzy wersjami
Linia 155: | Linia 155: | ||
/gate/source/zrodlo/gps/radius 2. cm | /gate/source/zrodlo/gps/radius 2. cm | ||
/gate/source/zrodlo/gps/halfz 14.5 cm | /gate/source/zrodlo/gps/halfz 14.5 cm | ||
− | /gate/source/zrodlo/gps/centre 0. 0. | + | /gate/source/zrodlo/gps/centre 0. 0. 30. cm |
/gate/source/zrodlo/gps/particle gamma | /gate/source/zrodlo/gps/particle gamma | ||
− | /gate/source/zrodlo/gps/energy 140. keV | + | /gate/source/zrodlo/gps/energy 140. keV # taka jest energia promieniowania Tc 99 |
/gate/source/zrodlo/setActivity 30000. Bq | /gate/source/zrodlo/setActivity 30000. Bq | ||
/gate/source/zrodlo/gps/angtype iso | /gate/source/zrodlo/gps/angtype iso | ||
+ | </source> | ||
− | + | W niektórych wypadkach może być wygodnie podłączyć do zdefiniowanego wcześniej obiektu, na przykład tak (jeśli wcześniej zdefiniowaliśmy obiekt kolorowa_pastylka): | |
+ | <source lang='c'> | ||
/gate/source/zrodlo/attachTo kolorowa_pastylka | /gate/source/zrodlo/attachTo kolorowa_pastylka | ||
+ | </source> | ||
+ | |||
+ | Jeśli źródełka nie dołączyliśmy do żadnego zewnętrznego obiektu, i tak można je pokazać: | ||
+ | <source lang='c'> | ||
+ | /gate/source/zrodlo/visualize | ||
+ | </source> | ||
+ | |||
+ | Zanim uruchomimy symulację, powinniśmy zdefiniować generator liczb pseudolosowych oraz warunek, po którym zakończy się symulacja. | ||
+ | |||
+ | <source lang='c'> | ||
+ | # R A N D O M | ||
+ | # Definiujemy rodzaj generatora liczb pseudolosowych i ziarno początkowe dla jego algorytmu | ||
+ | # Do wyboru: JamesRandom, Ranlux64 lub MersenneTwister | ||
+ | /gate/random/setEngineName Ranlux64 | ||
+ | /gate/random/setEngineSeed auto | ||
+ | |||
+ | # E X P E R I M E N T | ||
+ | # Definiujemy czas trwania eksperymentu | ||
+ | /gate/application/setTimeSlice 60. s | ||
+ | /gate/application/setTimeStart 0. s | ||
+ | /gate/application/setTimeStop 60. s | ||
+ | # Choć można też zamiast liczyć czasu, liczyć wyprodukowane cząstki: | ||
+ | # /gate/application/setTotalNumberOfPrimaries 350000 | ||
+ | </source> | ||
+ | |||
+ | Jeśli chcemy ograniczyć ilość informacji wyrzucanych na terminal, możemy zmniejszyć do zera gadatliwość programu: | ||
+ | <source lang='c'> | ||
+ | # V E R B O S I T Y czyli gadatliwość | ||
+ | /control/verbose 0 | ||
+ | /run/verbose 0 | ||
+ | /event/verbose 0 | ||
+ | /tracking/verbose 0 | ||
+ | /gate/random/verbose 0 | ||
+ | /gate/application/noGlobalOutput | ||
+ | </source> | ||
+ | |||
+ | Dopiero w tym momencie możemy rozpocząć obliczenia: | ||
+ | <source lang='c'> | ||
+ | # L E T' S R U N T H E S I M U L A T I O N ! | ||
+ | /gate/application/startDAQ | ||
</source> | </source> |
Wersja z 13:40, 12 paź 2016
Warsztaty z Metod Terapeutycznych Rok akademicki 2016/17
Instalowanie i uruchamianie vGate 7.2
- Wejdź do katalogu "Warsztaty z metod terapeutycznych" na pulpicie. Rozpakuj plik "vGATE72.vdi.7z" (jeśli nie jest już rozpakowany).
- Uruchom "Oracle VM VirualBox".
- Dodaj nową wirtualną maszynę (przycisk "Nowa"). Nadaj jej nazwę vgate7. Wybierz typ systemu operacyjnego Linux, wersja Ubuntu (32-bit).
- W kolejnym oknie wybierz rozmiar pamięci przydzielonej dla wirtualnej maszyny 1024 MB.
- W kolejnym oknie wybierz "Użyj istniejącego pliku dysku twardego" i wskaż ścieżkę do rozpakowanego pliku "vGATE72.vdi".
- Uruchamianie wirtualnej maszyny
- Wybierz dodaną ostatnio maszynę (jeśli jest więcej niż jedna) i naciśnij "Uruchom"
- Gdy uruchomi się linux, należy wpisać hasło "virtual"
- Uruchamianie programu "Gate"
- Uruchom terminal.
- Za pomocą komend "cd nazwa_katalogu" wejdź do katalogu, w którym znajdują się Twoje skrypty. Jeśli takiego nie masz, to stwórz go w katalogu ~/Progs/Gate/gate_v7.2/
- Przydatne linki
Zadanie 1
Zdefiniuj geometrię kolimatora: płaskiego pudła ołowianego, w którym zostało wywiercone 25 okrągłych otworów z powietrza w geometrii sześciokątnej. (za 2 punkty)
Skrypty wywołuje się komendą
/control/execute nazwa_skryptu.mac
Poniżej skrypt, który definiuje właściwości świata i umieszcza w nim kostkę Rubika (3x3 pudełka utworzone z powietrza). (Na stronie [4] można znaleźć przykłady i więcej opisów jak budować geometrię)
# na początku trzeba wczytać bazę danych dostępnych materiałów
/gate/geometry/setMaterialDatabase ../GateMaterials.db
# Aby oglądać tworzoną geometrię na etapie jej definiowania;
# podczas dłuższych obliczeń należałoby z tego zrezygnować.
/vis/enable
/control/execute vis.mac
# wymiary świata
/gate/world/geometry/setXLength 100. cm
/gate/world/geometry/setYLength 100. cm
/gate/world/geometry/setZLength 50. cm
# definicja wymiarów, położenia, materiałów z których wykonano pudło
/gate/world/daughters/name pudlo
/gate/world/daughters/insert box
/gate/pudlo/geometry/setXLength 1. cm
/gate/pudlo/geometry/setYLength 1. cm
/gate/pudlo/geometry/setZLength 1. cm
/gate/pudlo/placement/setTranslation 20. 0. 0. cm
/gate/pudlo/setMaterial Air
/gate/pudlo/vis/forceWireframe
# powtórzenie pudła po 3 razy w każdą stronę poprzez dodanie do niego powtarzacza cubicArray
/gate/pudlo/repeaters/insert cubicArray
/gate/pudlo/cubicArray/setRepeatNumberX 3
/gate/pudlo/cubicArray/setRepeatNumberY 3
/gate/pudlo/cubicArray/setRepeatNumberZ 3
/gate/pudlo/cubicArray/setRepeatVector 1.1 1.1 1.1 cm
# przydatne często, gdy wprowadziło się nowe definicje geometrii, które nie zostały jeszcze zwizualizowane
/gate/geometry/rebuild
Odwołuje się przy tym do skryptu vis.mac
# V I S U A L I S A T I O N
/vis/open OGLSX # biblioteka graficzna
/vis/viewer/set/viewpointThetaPhi 60 60 # punkt obserwacji
/vis/viewer/zoom 1.5 # powiększenie
/vis/drawVolume
/vis/viewer/flush
/tracking/verbose 0 # poziom gadatliwości, czyli ile informacji wyświetlać w terminalu podczas obliczeń
/tracking/storeTrajectory 1 # ile trajektorii zapamiętywać
/vis/scene/add/trajectories
/vis/scene/endOfEventAction accumulate
Aby włożyć do pudła cylindryczny otwór
/gate/pudlo/daughters/name dziura # utworzenie otworu
/gate/pudlo/daughters/insert cylinder
/gate/dziura/geometry/setHeight 1. cm
/gate/dziura/geometry/setRmax .15 cm
/gate/dziura/geometry/setRmin 0. cm
/gate/dziura/placement/setRotationAxis 0 1 0 # cylinder można obrócić
/gate/dziura/placement/setRotationAngle 90 deg
/gate/dziura/setMaterial Air
Oczywiście w kolimatorze to nie pudło, a otwór powinien zostac odpowiednią ilość razy powtórzony.
Zadanie 2
Napromieniuj dwoma punktowymi źródełkami Technetu 99 fantom wodny poprzez kolimator i bez kolimatora. Odczytaj wyniki używając programu ImageJ. (za 2 punkty)
Ustawienie symulowanych zjawisk fizycznych może być dokonane w osobnym pliku (np. fizyka.mac) Propozycję jego zawartości można znaleźć na stronie [5] Na tej samej stronie widnieje propozycja ustawienia odcięć w ciele pacjenta ("cuts", czyli cząstek o jakim średnim zasięgu już nie śledzimy).
Do zdefiniowanego wcześniej fantomu można dołączyć "aktora", czyli zdolność interakcji z symulacją - w tym wypadku zapisania zdeponowanej energii w fantomie. Fantom możemy potraktować jako macierz 100x100 elementów.
#=====================================================
# MATRIX FOR DOSE MAP OUTPUT
#=====================================================
/gate/actor/addActor DoseActor doseDistribution
/gate/actor/doseDistribution/save output/plik_wynikowy.hdr
/gate/actor/doseDistribution/attachTo moj_fantom
/gate/actor/doseDistribution/stepHitType random
/gate/actor/doseDistribution/setPosition 0 0 0 cm
# fantom podzielony na macierz, nie interesuje nas pomiar wgłąb (gdyby interesował, należałoby podać też trzecią rozdzielczość)
/gate/actor/doseDistribution/setResolution 100 100 1
/gate/actor/doseDistribution/saveEveryNSeconds 60
/gate/actor/doseDistribution/enableEdep true # będziemy mierzyć zdeponowaną energię
/gate/actor/doseDistribution/enableUncertaintyEdep false # innych możliwych wielkości (niepewności, dawki, ilości zliczeń) na razie nie będziemy mierzyć
/gate/actor/doseDistribution/enableDose false
/gate/actor/doseDistribution/enableUncertaintyDose false
/gate/actor/doseDistribution/enableNumberOfHits false
/gate/actor/addActor SimulationStatisticActor stat
/gate/actor/stat/save output/stat-wynik.txt
/gate/actor/stat/saveEveryNSeconds 60
Po zdefiniowaniu geometrii, zjawisk fizycznych oraz aktora, a przed zdefiniowaniem źródeł i uruchomieniem symulacji należy dokonać inicjalizacji
#=====================================================
# INITIALISATION
#=====================================================
/gate/run/initialize
Teraz zdefiniujemy pojedyncze źródełko.
# D E F I N E T H E S O U R C E
#####
/gate/source/addSource zrodlo
/gate/source/zrodlo/gps/type Volume
/gate/source/zrodlo/gps/shape Cylinder
/gate/source/zrodlo/gps/radius 2. cm
/gate/source/zrodlo/gps/halfz 14.5 cm
/gate/source/zrodlo/gps/centre 0. 0. 30. cm
/gate/source/zrodlo/gps/particle gamma
/gate/source/zrodlo/gps/energy 140. keV # taka jest energia promieniowania Tc 99
/gate/source/zrodlo/setActivity 30000. Bq
/gate/source/zrodlo/gps/angtype iso
W niektórych wypadkach może być wygodnie podłączyć do zdefiniowanego wcześniej obiektu, na przykład tak (jeśli wcześniej zdefiniowaliśmy obiekt kolorowa_pastylka):
/gate/source/zrodlo/attachTo kolorowa_pastylka
Jeśli źródełka nie dołączyliśmy do żadnego zewnętrznego obiektu, i tak można je pokazać:
/gate/source/zrodlo/visualize
Zanim uruchomimy symulację, powinniśmy zdefiniować generator liczb pseudolosowych oraz warunek, po którym zakończy się symulacja.
# R A N D O M
# Definiujemy rodzaj generatora liczb pseudolosowych i ziarno początkowe dla jego algorytmu
# Do wyboru: JamesRandom, Ranlux64 lub MersenneTwister
/gate/random/setEngineName Ranlux64
/gate/random/setEngineSeed auto
# E X P E R I M E N T
# Definiujemy czas trwania eksperymentu
/gate/application/setTimeSlice 60. s
/gate/application/setTimeStart 0. s
/gate/application/setTimeStop 60. s
# Choć można też zamiast liczyć czasu, liczyć wyprodukowane cząstki:
# /gate/application/setTotalNumberOfPrimaries 350000
Jeśli chcemy ograniczyć ilość informacji wyrzucanych na terminal, możemy zmniejszyć do zera gadatliwość programu:
# V E R B O S I T Y czyli gadatliwość
/control/verbose 0
/run/verbose 0
/event/verbose 0
/tracking/verbose 0
/gate/random/verbose 0
/gate/application/noGlobalOutput
Dopiero w tym momencie możemy rozpocząć obliczenia:
# L E T' S R U N T H E S I M U L A T I O N !
/gate/application/startDAQ