Warsztaty z Metod Terapeutycznych: Różnice pomiędzy wersjami
Linia 106: | Linia 106: | ||
Ustawienie symulowanych zjawisk fizycznych może być dokonane w osobnym pliku (np. fizyka.mac) | Ustawienie symulowanych zjawisk fizycznych może być dokonane w osobnym pliku (np. fizyka.mac) | ||
Propozycję jego zawartości można znaleźć na stronie [http://www.opengatecollaboration.org/sites/default/files/Physics_List_for_Radiation_Therapy_applications.pdf] | Propozycję jego zawartości można znaleźć na stronie [http://www.opengatecollaboration.org/sites/default/files/Physics_List_for_Radiation_Therapy_applications.pdf] | ||
− | Na tej samej stronie widnieje propozycja ustawienia odcięć w ciele pacjenta ("cuts", czyli cząstek | + | Na tej samej stronie widnieje propozycja ustawienia odcięć w ciele pacjenta ("cuts", czyli zasięg cząstek poniżej którego przestajemy śledzić cząstkę, bo ma zbyt małą energię, by była dla nas interesująca). |
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. | 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. |
Wersja z 13:43, 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 zasięg cząstek poniżej którego przestajemy śledzić cząstkę, bo ma zbyt małą energię, by była dla nas interesująca).
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