Ćwiczenie 1
-
Proszę zaimplementować geometrię obszaru "matki" z powyższego
opisu. Obszar "matka" niech będzie połową cieńkiej powłoki
sferycznej o promieniu wewnętrznym innerRadius=40 cm i promieniu zewnętrznym outerRadius=40.01 cm
wypełnioną powietrzem umieszczoną w środku obszaru logicznego
"world". Obszar ten nazwiemy np "sphere" i wizualizujemy go
półprzeźroczystym kolorem białym ale domyślnie niech nie będzie
widoczny.
Wskazówki:
- Należy utworzyć (w funkcji MyDetectorConstruction::SetupGeometry) :
Bryłę klasy
G4Sphere
Obszar logiczny klasy G4LogicalVolume
Obszar fizyczny klasy G4PVPlacement
Atrybuty wizualizacji G4VisAttributes
- Proszę sprawdzić czy program się kompiluje i czy podczas
wizualizacji widać wszystkie obiekty jak na rysunku poniżej :
Ćwiczenie 2
-
Obszar "sphere" wypełnimy całkowicie nRings=15 pierścieniowymi wycinkami powłoki
sferycznej.
- Każdy pierścień odpowiada przedziałowi kąta polarnego o
szerokości 90.0*deg/nRings
a jego środek oraz promienie są takie same jak obszaru
"sphere".
- Pierścienie rozmieszczamy jako obiekty klasy G4PVParameterised
(nazwijmy je np. "score").
- Ten sposób powielania wymaga od użytkownika wyprowadzenia
klasy np. MyScoreParameterisation
z klasy bazowej G4VPVParameterisation
Wskazówki:
- Pierwszym krokiem powinno być wyprowadzenie klasy MyScoreParameterisation z
klasy G4VPVParameterisation
- Będziemy parametryzować numerem kopii jedynie rozmiary obszaru
"score" zatem deklaracji i implementacji wymagają jedynie:
konstruktor, destruktor, wymagana
czysto wirtualna funkcja ComputeTransformation oraz funkcja ComputeDimensions.
- Aby sparametryzować rozmiary
kopii w funkcji ComputeDimensions
musimy mieć dostępne wartości trzech zmiennych innerRadius,
outerRadius oraz nRings.
- Ponieważ parametry funkcji ComputeDimensions są
ustalone, zmienne innerRadius,
outerRadius i nRings powinny być zadeklarowane
jako prywatne zmienne składowe klasy MyScoreParameterisation.
- Proszę trzymać się umowy, że
zmienne składowe klas tworzonych przez użytkownika były
poprzedzone literą f (czyli finnerRadius, fouterRadius, fnRings).
- Wartości zmiennym finnerRadius,
fouterRadius i fnRings nadajemy w konstruktorze
klasy MyScoreParameterisation.
Podsumowując:
1) Należy utworzyć plik MyScoreParameterisation.hh który ma zawierać:
deklaracje klasy, deklaracje konstruktora (3 parametry),
deklaracje destruktora, deklaracje funkcji ComputeTransformation(2 parametry
wymienione w opisie klasy), deklaracje funkcji ComputeDimensions(3
parametry wymienione w opisie klasy) oraz deklaracje trzech
prywatnych zmiennych składowych: finnerRadius, fouterRadius, fnRings.
Proszę dopisać polecenie #include
"MyScoreParameterisation.hh" w pliku MyDetectorConstruction.cc. Następnie
proszę skompilować program
w celu sprawdzenia poprawności deklaracji nowej klasy.
Proszę poprawić wszystkie błędy i nie przejmować się
warningami.
Przykładowy plik MyScoreParameterisation.hh znajduje się tutaj . W tym
przykładzie funkcję ComputeTransformation
od razu się
implementuje ponieważ nie ma
ani przesunięcia ani obrotu kolejnych kopii, zmianie ulega
tylko rozmiar, można tam również dowiedzieć się jak pozbyć się
uciążliwych warningów.
2) Należy utworzyć plik MyScoreParameterisation.cc który ma zawierać
implementacje konstruktora (nadanie wartości zmiennym finnerRadius, fouterRadius i
fnRings), destruktora i funkcji ComputeDimensions (nadaje rozmiary
obiektowi G4Sphere,
adres tego obiektu jest parametrem funkcji, do modyfikacji
rozmiarów istniejącego obiektu używamy funkcji składowych
G4Sphere::Setxxxxxx.
- Proszę skopilować program w celu sprawdzenia formalnej
poprawności implementacji klasy MyScoreParameterisation.
Przykładowy plik
MyScoreParameterisation.cc znajduje się tutaj .
3) Proszę w funkcji MyDetectorConstruction::SetupGeometry
utworzyć obiekt klasy MyScoreParameterisation
np. po utworzeniu opiektu sphere
G4int nRings = 15;
new
MyScoreParameterisation(innerRadius,outerRadius,nRings);
Proszę sprawdzić czy program się kompiluje i działa.
4) Ostatnim krokiem jest utworzenie obiektu
"score". Jest to bryła klasy G4Sphere, wypełniona powietrzem (obszar
logiczny).
-Obszar logiczny umieszczamy nRings razy w obszarze
logicznym "sphere" jako obiekty klasy G4PVParameterised
korzystając z parametryzacji MyScoreParameterisation.
-Obiekty "score" powinny być wizualizowane
jako zielone z parametrem przeźroczystości = 0.5.
-Proszę sprawdzić czy
program się kompiluje i czy podczas wizualizacji widać
wszystkie obiekty jak na rysunku poniżej