77
POLITECHNIKA WARSZAWSKA WYDZIAL FIZYKI ZAKLAD FIZYKI J ˛ ADROWEJ PRACA IN ˙ ZYNIERSKA Oprogramowanie ´ cwiczenia “Badanie efektu Comptona” Software developement for “Compton Effect” excercise Jacek Bzdak nr. albumu: 196909 Promotor: dr in ˙ z. Przemyslaw Duda WARSZAWA 2009

Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

  • Upload
    jbzdak

  • View
    506

  • Download
    9

Embed Size (px)

DESCRIPTION

Praca inżynierska moja

Citation preview

Page 1: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

POLITECHNIKA WARSZAWSKA

WYDZIAŁ FIZYKI

ZAKŁAD FIZYKI JADROWEJ

PRACA INZYNIERSKA

Oprogramowanie cwiczenia“Badanie efektu Comptona”

Software developement for “ComptonEffect” excercise

Jacek Bzdaknr. albumu: 196909

Promotor: dr inz. Przemysław Duda

WARSZAWA 2009

Page 2: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

The first 90% of the code accounts for the first90% of the development time. The remaining10% of the code accounts for the other 90% ofthe development time.

Tom Cargill

On two occasions I have been asked, ’Pray, Mr.Babbage, if you put into the machine wrongfigures, will the right answers come out?’ I amnot able rightly to apprehend the kind ofconfusion of ideas that could provoke such aquestion.

Charles Babbage

Defensive programming? Never! Klingonprograms are always on the offense. Yes,Offensive programming is what we do best

Klingons programmer manualhttp://www.sjbaker.org/humor/klingon_

programmer.html

To know when enough is enoughis enough to know

Lao Tzu Tao te cing, a book about the way, andthe power of the way, tłum Ursula K. Le Guin

ii

Page 3: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Streszczenie

Celem niniejszej pracy jest uruchomienie cwiczenia “Eksperyment

Comptona” w Laboratorium Fizyki i Technik Jadrowych. W ramach

pracy powstała aplikacja pozwalajaca przeprowadzic cwiczenie. Główna

czescia pracy jest opis powstałego oprogramowania, składajacy sie

z opisu samego kodu, technologii i bibliotek z którymi program współ-

pracuje, czy wreszcie opisu procedur budowania i modyfikowania kodu

zródłowego.

Rozdział pierwszy zawiera wstep teoretyczny. Wyprowadzono wzory

opisujace zaleznosci energetyczne oraz podano wzór Kleina–Nishiny

na przekrój czynny w efekcie Comptona. Rozdział zawiera tez rys his-

toryczny zawierajacy opis układu pomiarowego, z którego korzystał

i wyników jakie otrzymał A. Compton w swoim uhonorowanym na-

groda Nobla eksperymencie. Rozdział zawiera tez wyniki modelowania

eksperymentu uzyskane z czesci symulacyjnej programu oraz (dla

porównania) przekroje zawarte w literaturze.

Rozdział drugi zawiera opis urzadzen elektronicznych stanowiacych

tory spektrometryczne. Układ został zestawiony w oparciu o sprzet firmy

Canberra. Zdarzenia jadrowe rejestrowane sa za pomoca detektorów

scyncylacyjnych NaI; sygnały z tych detektorów po wzmocnieniu trafiaja

do podłaczonego do układu koincydencyjnego urzadzenia Multiport, 2

pełniacego role ADC i analizatora wielokanałowego.

Rozdział trzeci zawiera opis stworzonego oprogramowania. Program

składa sie z dwóch czesci: symulacji eksperymentu oraz oprogramowa-

nia rzeczywiscie przeprowadzajacego eksperyment. Symulacja jest zro-

biona w ten sposób, ze moze działac zarówno jako samodzielna ap-

likacja, jak i aplet bedacy czescia strony internetowej. Rozdział ten

zawiera tez podstawowe informacje o systemie Maven, który jest uzy-

wany do zarzadzania zaleznosciami oraz budowy gotowego programu.

Rozdział czwarty zawiera instrukcje budowania programu za pomoca

systemu maven oraz procedure instalacji samego mavena. Instalacja

systemu maven nie jest trudna, jednak szczególnie w systemie Windows,

moze wymagac dodatkowych wyjasnien. W rozdziale tym opisano tez

strukture programu oraz opisano procedury edycji kodu zródłowego

programu w trzech podstawowych srodowiskach programistycznych

(Intelij Idea, Eclipse i NetBeans).

iii

Page 4: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Abstract

The aim of the B.Sc thesis is to initiate the exercise “Compton’s

Experiment” in the Laboratory of Nuclear Physics and techniques.

Within this B.SC thesis an application was created which allows to

carry out the exercise. The main point of the paper itself is a description

of the software created, it comprises the description the code itself,

technology and the libraries with which the software collaborates, and

finally, the procedures of building and modifying the source code.

Chapter One opens with a theoretical introduction. The formulas

describing energetic relations were introduced simultaneously with

a Klein-Nishina formula for cross–section in a Compton effect. This

Chapter comprises also a historical draft containing description of

a measuring set used by A. Compton and the results he had obtained

for which he was awarded a Nobel Price. The Chapter includes also

the results of the experiment’s modelling obtained from a simulation

part of the software, and, in comparison, cross–sections taken from

respective literature.

Chapter Two comprises the description of spectrometric equipement.

Equipement was built from modules provided by Canberra. Nuclear

collisions are registered by scincillation (NaI) detectors. Reinforced

signals, emited from these detectors, meet Multiport 2 device which

acts both as ADC and multi–chanelle analyser.

Chapter Three comprises the description of a software created. The

software consists of two parts: the first part of the software refers to

the simulation of the experiment; the second one refers to the software

actually conducting the experiment. The simulation is created in a way

that it can act independently, or can function as an aplet of a given

website. The Chapter comprises also basic information on the Maven

system used in a dependencies management, and in building of the

software

Chapter Four comprises the instruction how to build a software

with the use of the Maven system, and the procedure of Maven’ s in-

stallation as well. The installation of the Maven system does not appear

to be much complicated, though it may need additional information,

especially in the Windows system. The structure of the software is also

described in this Chapter, as well as the procedures of the edition of the

software source code in three main integrated software environments.

iv

Page 5: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Spis tresci

Spis tresci v

Wstep vii

1 Eksperyment Comptona 11.1 Fizyka doswiadczenia . . . . . . . . . . . . . . . . . . . . . 11.2 Oryginalny układ pomiarowy . . . . . . . . . . . . . . . . . 31.3 Wyniki Comptona . . . . . . . . . . . . . . . . . . . . . . . 4

2 Tor spektrometryczny 82.1 Czesc mechaniczna . . . . . . . . . . . . . . . . . . . . . . 82.2 Opis urzadzen . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Opis programu 123.1 Architektura . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Moduły programu . . . . . . . . . . . . . . . . . . . . . . . 123.3 Opis systemu Maven . . . . . . . . . . . . . . . . . . . . . 133.4 Moduł dies-irae:dies-irae . . . . . . . . . . . . . . . . 153.5 Moduł dies-irae:dies-assembly . . . . . . . . . . . . . 183.6 Moduł dies-irae:dies-config . . . . . . . . . . . . . . 203.7 Moduł dies-irae:encore-silniki . . . . . . . . . . . . 213.8 Moduł genie-connector . . . . . . . . . . . . . . . . . . . 253.9 Moduł encore-symulacja . . . . . . . . . . . . . . . . . . 413.10Moduł dies-gui . . . . . . . . . . . . . . . . . . . . . . . . 423.11Moduł dies-peakfinder . . . . . . . . . . . . . . . . . . . 45

4 Dystrybucja programu 474.1 Struktura projektu . . . . . . . . . . . . . . . . . . . . . . . 474.2 Budowanie projektu . . . . . . . . . . . . . . . . . . . . . . 474.3 Struktura gotowego programu . . . . . . . . . . . . . . . . 484.4 Edycja projektu . . . . . . . . . . . . . . . . . . . . . . . . 484.5 Wymagania projektu . . . . . . . . . . . . . . . . . . . . . 50

5 Eksperyment 525.1 Cele cwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . 525.2 Przykładowe sprawozdanie . . . . . . . . . . . . . . . . . . 525.3 Peryspektywy rozwoju . . . . . . . . . . . . . . . . . . . . . 56

Bibliografia 65

v

Page 6: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Spis rysunków 67

Załaczniki 69Słownik terminów programistycznych . . . . . . . . . . . . . . 69Oznaczenia na diagramach UML . . . . . . . . . . . . . . . . . 69

vi

Page 7: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Wstep

Celem pracy było uruchomienie cwiczenia “Eksperyment Comptona”w Laboratorium Fizyki i Technik Jadrowych. Eksperyment Comptonabył jednym z przełomowych eksperymentów w historii Fizyki — samefekt Comptona był niewytłumaczalny w ramach teorii klasycznej.

W biezacym układzie sprzetowym cwiczenie to zapozna studentówz metoda kalibracji detektorów scyntylacyjnych, technika pomiarówkoincydencyjnych, pokaze zasade zachowania energii ’w działaniu’,czy wreszcie pozwoli jakosciowo zbadac przekroje czynne na efektComptona.

Praca ta jest praca interdyscyplinarna fizyka — informatyka.Aparatura pomiarowa składa sie z detektorów scyntylacyjnych NaI

oraz modłów NIM przetwarzajacych sygnały z detektorów. Wszystkieelementy torów spektrometrycznych zostały dostarczone przez Can-berre. Poniewaz szyna NIM dostarcza tylko napiecie i nie posredniczyw komunikacji, cała komunikacja miedzy nimi jest analogowa. Z kom-puterem komunikuje sie moduł “Multiport 2”, zawierajacy dwa konwert-ery analog–cyfra oraz dwa analizatory wielokanałowe (1024 kanały);komunikacja ta odbywa sie za posrednictwem portu USB.

Całosc oprogramowania została stworzona w Javie. Java jest jednymz najbardziej dojrzałych obecnych na rynku jezyków programowania.Java została wybrana z kilku powodów — po pierwsze czesci tej ap-likacji beda udostepniane przez internet, a tylko Java umozliwia łatweuruchamianie tego samego kodu zarówno w srodowisku aplikacji, jaki w srodowisku webowym, po drugie — autor posiada duze doswiad-czenie w programowaniu w tym jezyku programowania. W tej aplikacjinie korzystamy z głównej zalety Javy — jej przenosnosci, poniewazbiblioteki słuzace do komunikacji z osprzetem Canberry dostarczanesa tylko w wersji dla systemu operacyjnego Windows.

vii

Page 8: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rozdział 1

Eksperyment Comptona

Eksperyment Comptona był jednym z pierwszych eksperymentówwykazujacych kwantowa nature swiatła. Doniosłosc tego eksperymentupotwierdza fakt przyznania za niego nagrody Nobla w 1927 roku.

W ramach teorii falowych uznawano, ze mechanizm rozpraszaniaswiatła jest nastepujacy: fala swietlna pada na elektron pobudzajacgo do drgan, elektron nastepnie drgajac wypromieniowuje fale o tejsamej czestotliwosci. Model ten był zgodny z doswiadczeniem dla falswietlnych – fal o małych czestotliwosciach, natomiast dla promieniX i γ okazywał sie niedostatecznym.

1.1 Fizyka doswiadczenia

Wyjasnieniem efektu Comptona jest uznanie padajacej wiazki pro-mieni za zbiór kwantów o energii E = hν, które podlegaja sprezystemuzderzeniu z elektronami na orbitach walencyjnych1[1].

1Elektrony te maja tak mała energie wiazania, ze mozna je praktycznie uznac zaelektrony swobodne.

Rysunek 1.1: Geometria zderzenia comptonowskiego. Opracowaniewłasne.

1

Page 9: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Zderzenie opisuja nastepujace zasady zachowania pedu i energii:

pγ = pγ‘ + pβ′ (1.1)

Eγ + Eβ = Eγ‘ + Eβ′ (1.2)

gdzie 1.1 jest równaniem wektorowym, γ oznacza padajacy kwantgamma, γ′ oznacza rozproszony kwant gamma, β oznacza elektron,na jakim rozpraszanie sie odbywa2, natomiast β′ to elektron rozpros-zony.

Zaleznosci energetyczne

Energie wyrazaja sie wzorami:

Eγ = hν

Eγ′ = hν′

Eβ = m0c2 (1.3)

Eβ′ =√

(pβc)2 + (m0c2)2

Podstawiajac do równania 1.2 wzory na energie (równanie 1.3) otrzy-mujemy:

hf +m0c2 = hf ′ +

√(pβc)2 + (m0c2)2

Po podniesieniu do kwadratu i uporzadkowaniu:

p2βc

2 = (hf +m0c2 − hf ′)2 −m2

0c4 (1.4)

Z zasady zachowania pedu mamy:

pβ = pγ − pγ′

Wykonajmy iloczyn skalarny p2β

p2β = pβ · pβ

= (pγ − pγ′) · (pγ − pγ′)

= p 2γ + p 2

γ′ − 2pγ pγ′ cos θ.

Po wykorzystaniu równan obowiazujacych dla kwantów gamma: pc = hνoraz pomnozeniu obu stron równania przez c2:

p2βc

2 = (hν)2 + (hν′)2 − 2(hν)(hν′) cos θ. (1.5)

Podstawiajac równanie 1.4 do 1.5 otrzymujemy:

(hν +m0c2 − hν′)2 −m 2

0 c4 = (hν)2 + (hν′)2 − 2h2νν′ cos θ.

2hνmec2 − 2hν′mec

2 = 2h2νν′ (1− cos θ)

2Eβ to energia spoczynkowa elektronu

2

Page 10: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Po podzieleniu obu stron równania przez 2hff ′m:

c

ν′− c

ν=

h

m0c(1− cos θ) .

Po zauwazeniu ze νλ = c, ostatecznie otrzymujemy:

λ′ − λ =h

m0c(1− cos θ). (1.6)

Przekroje czynne

Z diagramów Feynmana w ramach elektrodynamiki kwantowej mo-zna wyprowadzic wzory na przekrój czynny efektu w efekcie Comptona.Wzory te po raz pierwszy wyprowadzili Klein i Nishina.

Wzór Kleina–Nishiny:

dΩ=

12α2r2cP (Eγ ,θ)2(P (Eγ ,θ) + P (Eγ ,θ)−1 − 1 + cos2(θ)) (1.7)

Gdzie: α to stała struktury subtelnej3, θ to kat rozproszenia kwantuγ, natomiast P (Eγ ,θ) to iloczyn energii kwantu padajacego i rozpros-zonego4.

Wzoru 1.7 nie bedziemy wyprowadzac. Pokazemy natomiast prze-kroje czynne dla kwantów γ i elektronów otrzymane za pomoca apletusymulujacego efekt Comptona. Dla porównania na rys 1.5 zamieszczonote same przekroje z opracowan.

Dla niskich energii (które badał Compton) wartosc przekroju czyn-nego na efekt Comptona dla 0 i 180 jest praktycznie taka sama, dlawysokich energii natomiast szansa zajscia efektu jest istotnie wyzszadla niskich katów.

1.2 Oryginalny układ pomiarowy

Zapoznajmy sie z układem pomiarowym z jakiego korzystał A. Comp-ton. Za pomoca lampy RTG emitujacej promieniowanie o długoscifali 0.71A (linia Kα molibdenu) oswietlano blok rozpraszajacy wyko-nany z grafitu. Rozproszone promieniowanie (po przejsciu przez układszczelin) trafiało do detektora. Detektor mozna było ustawic pod katemwzgledem wiazki padajacej. Oryginalnie Compton mierzył natezenieodbitych promieni X w zaleznosci od ich długosci dla róznych katów[2,str 22]. Układ pomiarowy zaprezentowany jest na rys. 1.6.

3Jedna z podstawowych stałych fizycznych, mozna ja wyrazic poprzez inne stałe natrzy sposoby:

α =e2

hc 4πε0=

e2cµ0

2h=kee2

hc

jest jednak mozliwy jej bezposredni pomiar.4Wyraza sie on wzorem:

P (Eγ ,θ) =1

1 +Eγmec2

(1− cos θ)

3

Page 11: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Zaleznosc energii od katarozproszenia dla rozproszonychelektronów

(b) Zaleznosc energii od katarozproszenia dla rozproszonychkwantów γ

(c) Rozkład katowy rozproszonychelektronów

(d) Przekrój czynny dla kwantów γ

Rysunek 1.2: Zaleznosci energetyczne i katowe dla padajacego kwantagamma o energii 0.01MeV . Opracowanie własne.

1.3 Wyniki Comptona

Compton uzyskał zaskakujace, jak na owe czasy, wyniki (rys 1.7).Chociaz wiazka padajaca zawiera tylko jedna długosc fali – wiazkaodbita (dla niezerowych katów) zawierała dwa piki. Efekt ten był niewy-jasniany na gruncie mechaniki klasycznej – w ramach tej teorii falaodbita musi miec długosc fali padajacej.

Pik odpowiadajacy niezmienionej długosci fali pochodzi ze zderzenfotonów z elektronami zwiazanymi z rdzeniami atomów wegla (ich masaefektywna jest na tyle duza, ze przesuniecie Comptonowskie jest dlanich nieobserwowalne)[2, str 23].

4

Page 12: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Zaleznosc energii od katarozproszenia dla rozproszonychelektronów

(b) Zaleznosc energii od katarozproszenia dla rozproszonychkwantów γ

(c) Rozkład katowy rozproszonychelektronów

(d) Przektój czynny dla kwantów γ

Rysunek 1.3: Zaleznosci energetyczne i katowe dla padajacego kwantagamma o energii 0.660MeV . Opracowanie własne.

5

Page 13: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Zaleznosc energii od katarozproszenia dla rozproszonychelektronów

(b) Zaleznosc energii od katarozproszenia dla rozproszonychkwantów γ

(c) Rozkład katowy rozproszonychelektronów

(d) Przektój czynny dla kwantów γ

Rysunek 1.4: Zaleznosci energetyczne i katowe dla padajacego kwantagamma o energii 1,13MeV . Opracowanie własne.

(a) Rozkład katowyrozproszonych elek-tronów w zaleznosciod energii

(b) Przekroje czynne dla kwantów γ w zaleznosci odenergii

Rysunek 1.5: Przekroje czynne i rozkłady katowe za [1, str 65]

6

Page 14: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 1.6: Schemat oryginalnego układu pomiarowego Comptona[2, rys 16]

(a) Wiazka nierozproszona (b) Wiazka rozproszona 45

(c) Wiazka rozproszona 90 (d) Wiazka rozproszona 135

Rysunek 1.7: Wyniki Comptona[2, rys 16]

7

Page 15: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rozdział 2

Tor spektrometryczny

Poszczególne zjawiska jadrowe rejestrowane sa za pomoca spektrom-etrycznych liczników scyntylacyjnych NaI (na rys. 2.1). W detektorze3 zachodzi efekt Comptona, rozproszony kwant gamma opuszcza detek-tor, natomiast elektron zostanie zarejestrowany przez licznik. Detektor2 mozna obracac wokół detektora 3.

Detektory pracuja w układzie koincydencyjnym. Schemat elektron-icznej czesci układu na rys. 2.3.

W toku rozwoju doswiadczenia lepiej byłoby zamienic nieruchomydetektor na urzadzenie oparte na scyntylatorze plastikowym. W tegotypu urzadzeniach praktycznie nie zachodzi efekt fotoelektryczny, copowinno obnizyc ilosc przypadkowych koincydencji.

2.1 Czesc mechaniczna

Mechaniczna czesc ukadu zaprojektowano i wykonano w ramachpoprzedniej wersji cwiczenia, w warsztacie Wydziału Fizyki PolitechnikiWarszawskiej. Zdjecie układu na rys. 2.2.

Rysunek 2.1: Geometria eksperymentu [1]

8

Page 16: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 2.2: Zdjecie mechanicznej czesci układu wraz z detektorami.

2.2 Opis urzadzen

Zródło wysokiego napiecia 3125 Moduł NIM umozliwiajacy zasilaniedwóch urzadzen oddzielnie regulowanym napieciem do 5kV i do 300µA.[3]

Detektor scyntylacyjny model 802 i Przedwzmacniacz 2007PUrzadzenia te sa zaprojektowane do pracy w parze. Detektor scynty-lacyjny jest połaczony z przedwzmacniaczem. Do przedwzmacniaczapodłacza sie wysokie napiecie (pochodzace z modułu 3125) oraz napie-cie przedwzmacniacza pochodzace z modułu 2026 [4, 5]

Wzmacniacz 2026 Zasila przedwzmacniacz modułu 2007P, wzmac-nia i kształtuje sygnał z detektorów.

Wyjscia:

UNI Udostepnia analogowy liniowy przefiltrowany i ukształtowany syg-nał.

ICR Udostepnia logiczny (TTL) sygnał odpowiadajacy przetwarzaniusygnału spektrometrycznego.

Opis z [6].

Analizator koincydencji Analizator koincydencji posiadajacy 4 wejs-cia (z których jedno moze byc zdefiniowane jako antykoincydencyjne).Pozwala na ustawienie okna koincydencji od 10ns do 1µs.

Wejscia i wyjscia:

INPUT Wejscie analizatora, wymaga sygnałów TTL trwajacych min100ns narastajacych przez max 50ns.

OUTPUT Wyjscie analizatora. Wysyła sygnał TTL narastajacy 50nsi trwajacy 1µs.

9

Page 17: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 2.3: Schemat elektronicznej czesci układu. Dla przejrzys-tosci narysowano tylko jeden tor spektrometryczny, w rzeczywistymukładzie elementy zaznaczone na rózowo sa podwojone. W nawiasachprzy nazwach wejsc podano typ koncówki przewodu. Opracowaniewłasne.

Multiport II Analizator widma mogacy analizowac dane z 2 torówspektrometrycznych1 Pełni role ADC.

Kazdym z torów mozna sterowac elektronicznie za pomoca wejsciaIO. Komunikacje z komputerem zapewnia port USB, Multiport mozebyc kontrolowany przez program Genie 2000 oraz za pomoca “S560Programming library”.

IO Port szeregowy (jeden dla kazdego toru), pozwalajacy zarówno kon-trolowac zachowanie Multiportu, jaki i zwracajacy informacjeo jego stanie. W biezacym ustawieniu wykorzystywany jest pin 13tego portu, do którego podłaczony jest detektor koincydencji.

ADC IN wejscie do konwertera ADC.

1Mozna go rozbudowac tak, by był wstanie analizowac do 6 torów.

10

Page 18: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Silniki krokowe Silnikiem krokowym zarzadza sie za pomoca sprze-towego sterownika dostarczonego ze sprzetem (dokładny opis w para-grafie 3.7).

11

Page 19: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rozdział 3

Opis programu

3.1 Architektura

Program podzielono na moduły. Podział ten ma nastepujace cele:

Podział odpowiedzialnosci Kazdy moduł zajmuje sie jednym logi-cznym zestawem zadan.

Zmniejszenie working set-u kodu Podczas pracy z jednym modu-łem programista nie musi myslec o innych modułach, w ten spo-sób zmniejszono ilosc kodu, jaki musi miec w pamieci.

Separacja zaleznosci Niektóre moduły nie powinny zalezec od koduzawartego w innych modułach1

3.2 Moduły programu

Program składa sie z nastepujacych modułów:

dies-irae:dies-irae2 Główny moduł programu. Nie zawiera koduJavy, słuzy do zarzadzania innymi modułami.

dies-irae:dies-assembly Kolejny moduł nie zawierajacy kodu Javy,zawierajacy natomiast pliki słuzace do uruchamiania programu.Słuzy on do tworzenia gotowej dystrybucji programu.

dies-irae:dies-config Moduł konfiguracyjny. Moduł ten ma za za-danie uniezalezniac wszystkie inne moduły od srodowiska uru-chomienia, na przykład pozwala konfigurowac nazwe portu, doktórego podłaczono silniki krokowe (tak by nazwa ta nie musiałabyc wkompilowana w kod programu). Zawiera tez wszystkie staty-czne obiekty.

1Patrz np. 3.10. Moduł dies-gui-shared nie powinien zalezec od klas zgenieConnector i encore-silniki. Przy takim podziale nie ma on tych klas w swoimclasspath’u (czyli inaczej mówiac klasy z tego modułu nie widza klas z genieConnectori encore-silniki).

2Nazwy podane tutaj sa nazwami artefaktów systemu maven2 dostarczanych przezdany moduł. Opis terminologii i działania systemu maven2 znajduje sie w rozdziale 3.3.

12

Page 20: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

dies-irae:encore-silniki Moduł odpowiedzialny za komunikacjepo porcie szeregowym z silnikami krokowymi.

dies-irae:genie-connector Moduł odpowiedzialny za komunikacjez osprzetem Canberry (tory spektrometryczne).

dies-irae:encore-symulacja Moduł wyswietlajacy animowana sy-mulacje eksperymentu.

dies-irae:dies-gui Moduł zawierajacy graficzny interfejs uzytko-wnika.

dies-irae:dies-peakfinder Moduł zawierajacy klase odpowiedzialnaza wyznaczanie pików w zebranych spektrach.

3.3 Opis systemu Maven

Poniewaz projekt jest budowany za pomoca mavena (i budowanie gobez uzycia tego narzedzia byłoby uciazliwe), a zarazem narzedzie to jestsłabo znane, postanowiono opisac jego działanie i zastosowania.

Apache Maven 2, a w skrócie maven (i tej nazwy bedziemy uzy-wac) jest narzedziem do zarzadzania projektami informatycznymi. Przy-toczmy opis celów, jakie system ten chce osiagnac:

“Głównym celem mavena jest umozliwienie programisciezrozumienia całego stanu projektu programistycznego w naj-krótszym mozliwym czasie. By osiagnac ten cel maven stararadzic sobie‘ z nastepujacymi zagadnieniami:

Ułatwienie procesu budowania projektu Mimo, iz uzywaniemavena nie zwalnia programisty ze znajomosci mech-anizmów budowania projektu, to jednak zwalnia go zdogladania detali.

Udostepnienie jednolitego systemu budowy projektówMaven pozwala zbudowac projekt uzywajac tylko mod-elu obiektowego projektu3 oraz zbioru wtyczek4, które sawspólne dla wszystkich projektów mavena, tworzac jed-nolity system budowy aplikacji. Gdy tylko programistazapozna sie z jednym projektem mavena — automaty-cznie wie, w jaki sposób budowane sa inne projektymavena, co oszczedza mu czas poswiecany na przegla-danie wielu projektów[8]5.”

Maven potrafi kontrolowac budowe, testowanie, zarzadzanie zalezno-sciami, dystrybucja, dokumentacja projektu oraz jego wieloma innymiaspektami[9]6.

3Chodzi o plik pom.xml zawierajacy wszystkie informacje potrzebne do budowy mod-elu (przypis autora).

4Wtyczek systemu maven (przypis autora).5Tłumaczenie własne.6Zainteresowanych odsyłam do [10].

13

Page 21: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Dlaczego Maven

Zdecydowano sie na uzywanie mavena w tym projekcie głównie zewzgledu na jego mozliwosci zarzadzania zaleznosciami7. Gdy w katalogulib znajduje sie wiecej niz kilka plików (biezaco projekt ten zalezy od26 bibliotek), zarzadzanie nimi staje sie trudne. Ponadto, gdy zaleznoscimaja własne zaleznosci, cały proces recznego zarzadzania nimi stajesie uciazliwy. Maven rozwiazuje ten problem, gdyz jest w stanie nabiezaco pobierac prawidłowe wersje zaleznosci. Ponadto maven jestuzywany w tym projekcie do tworzenia plików dystrybucji (czyli skom-presowanego pliku zwierajacego wszystkie pliki niezbedne do działaniaprogramu oraz skrypty startowe).

Wreszcie program ten jest tworzony w srodowisku programisty-cznym Intellij Idea8, które w czasie tworzenia projektu było płatne —a uznano, ze powinno sie dostarczyc łatwa metode na prace z pro-jektem w darmowych IDE9 (wszystkie główne IDE Javy sa w staniepracowac uzywajac informacji z plików pom.xml; o tym jak otwieracprojekt w róznych IDE dokładniej w rozdziale 4.4).

Słownik mavena

Artefakt (z ang. artifact) Jest to bardzo ogólne okreslenie na produktkoncowy budowania programu. Moze byc to plik JAR10 zawier-ajacy skompilowany kod zródłowy (i własnie w tym sensie jeston uzywany w tym programie), ale moze to byc plik zawierajacydokumentacje projektu czy jego kod zródłowy. W Mavenie kazdyartefakt ma tak zwane współrzedne, które jednoznacznie go iden-tyfikuja.

Współrzedne artefaktu (z. ang coordinates) Sa to dane, które jed-noznacznie identyfikuja dany artefakt. Maven obsługuje nastepu-jace współrzedne: groupId, artifactId, version oraz kilka innych(których nie uzywam w tym projekcie — zainteresowanych odsy-łam do [11]).

GroupId Ciag znaków unikalny na poziomie organizacji, która danyartefakt stworzyła. Jesli dany artefakt ma byc dostepny publicznie,groupId powinna zaczynac sie od odwróconego adresu domeny,która dana organizacja posiada (tak jak przyjmuje sie przy tworze-niu nazw pakietów Javy).

ArtifactId Ciag odrózniajacy jeden artefakt w grupie od drugiego.

Version Wersja. Pozwala odróznic rózne wersje tego samego artefaktu.

7Dokładniej ten termin zostanie wyjasniony pózniej, ale na razie przez słowo: “za-leznosc” nalezy rozumiec: “biblioteka”.

8Strona domowa http://www.jetbrains.com/idea/9(z ang. Integrated Developer Enviorment — zintegrowane srodowisko programisty-

czne. Dokładnie o tym jakie kroki nalezy podjac by uruchomic projekt w róznych IDE wrozdziale 4.4.

10Java Archive, plik zawierajacy skomplikowane klasy Javy, spakowany algorytmemZIP.

14

Page 22: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Id artefaktu Wszystkie współrzedne artefaktu mozna połaczyc w jedenciag znaków w nastepujacy sposób: groupId:artifactId:ver-sion, np: dies-irae:dies-assembly:1.0.0.

Zaleznosc (z ang. dependency) Artefakt, którego dany projekt wy-maga do poprawnego działania.

Zasieg zaleznosci (z ang. scope) Zaleznosci moga miec rózne zasiegi,tj. byc dostepne w róznych momentach budowy aplikacji. Domysl-nie zaleznosci maja zasieg compile, co znaczy, ze dostepne sazawsze. Zaleznosci o zasiegu test nie sa widoczne w gotowymprogramie, ale dostepne sa w fazie testów.

Repozytorium Zbiór artefaktów udostepniony Mavenowi (na przykładumieszczony jako strona internetowa albo dostepny na dysku).Podczas budowy projektu maven pobiera wszystkie (nie pobraneprzy poprzednich budowach) zaleznosci z repozytoriów zdefiniowa-nych w pliku POM.

Plik POM11 Plik zawierajacy wszystkie dane o projekcie. Podstawowedane, jakie plik POM moze zawierac to: współrzedne artefaktujaki ten plik opisuje, zaleznosci projektu, repozytoria, jakie nalezysprawdzac, programisci i organizacja tworzaca dany projekt, li-cencja projektu i tak dalej. Plik pom znajduje sie w głównymkatalogu projektu i ma nazwe pom.xml12.

Dziedziczenie Maven udostepnia mechanizm dziedziczenia plikówPOM. Tj. jesli moduł B zaznaczy, ze jego rodzicem jest modułA, to wszystkie własnosci modułu A beda własnosciami modułuB.

3.4 Moduł dies-irae:dies-irae

Moduł ten zawiera tylko plik POM zawierajacy wspólne własnosciwszystkich innych modułów. Pełny listing pliku pom.xml:

1 <?xml version="1.0" encoding="UTF-8"?>2 <project >3 <modelVersion>4.0.0</modelVersion>4 <groupId>dies-irae</groupId>5 <artifactId>dies-irae</artifactId>6 <packaging>pom</packaging>7 <version>1.0</version>8 <modules>9 <module>dies-lmarq</module>

10 <module>encore-silniki</module>11 <module>encore-symulacja</module>12 <module>dies-peakfinder</module>13 <module>dies-assembly</module>

11(z ang.) Project Object Model12Dokładny opis pliku pom.xml znajduje sie w [11]

15

Page 23: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

14 <module>dies-config</module>15 <module>web-backend</module>16 <module>dies-gui-shared</module>17 <module>dies-gui-onSite</module>18 </modules>19 <build>20 <pluginManagement>21 <plugins>22 <plugin>23 <groupId> org.apache.maven.plugins

</groupId>24 <artifactId> maven-compiler-plugin

</artifactId>25 <configuration>26 <source>1.6</source>27 <target>1.6</target>28 <encoding>UTF-8</encoding>29 </configuration>30 </plugin>31 </plugins>32 </pluginManagement>33 </build>34 <repositories>35 <repository>36 <id>skimble-public</id>37 <url> http://skimbleshanks.ath.cx/maven2/ </url>38 <!-- Publiczne repozytorium autora -->39 </repository>40 </repositories>41 <dependencies>42 <dependency>43 <groupId>junit</groupId>44 <artifactId>junit</artifactId>45 <version>4.5</version>46 <scope>test</scope>47 </dependency>48 <dependency>49 <groupId>org.slf4j</groupId>50 <artifactId>slf4j-log4j12</artifactId>51 <version>1.5.6</version>52 <scope>test</scope>53 </dependency>54 </dependencies>55 <dependencyManagement>56 <dependencies>57 <dependency>58 <groupId>org.slf4j</groupId>59 <artifactId>slf4j-api</artifactId>60 <version>[1.0,)</version>61 </dependency>

16

Page 24: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

62 <dependency>63 <groupId>junit</groupId>64 <artifactId>junit</artifactId>65 <version>4.5</version>66 <scope>test</scope>67 </dependency>68 <dependency>69 <groupId>edu.umd.cs.findbugs</groupId>70 <artifactId>annotations</artifactId>71 <version>1.3.9</version>72 </dependency>73 <dependency>74 <groupId>commons-collections</groupId>75 <artifactId>commons-collections</artifactId>76 <version>3.2.1</version>77 </dependency>78 <dependency>79 <groupId>net.java.dev.beansbinding</groupId>80 <artifactId>beansbinding</artifactId>81 <version>1.2.1</version>82 </dependency>83 <dependency>84 <groupId>commons-math</groupId>85 <artifactId>commons-math</artifactId>86 <version>1.2</version>87 </dependency>88 <dependency>89 <groupId>commons-primitives</groupId>90 <artifactId>commons-primitives</artifactId>91 <version>1.0</version>92 </dependency>93 <dependency>94 <groupId>commons-lang</groupId>95 <artifactId>commons-lang</artifactId>96 <version>2.4</version>97 </dependency>98 <dependency>99 <groupId>jfree</groupId>

100 <artifactId>jfreechart</artifactId>101 <version>1.0.13</version>102 </dependency>103 <dependency>104 <groupId>com.miglayout</groupId>105 <artifactId>miglayout</artifactId>106 <version>3.7</version>107 </dependency>108 </dependencies>109 </dependencyManagement>110 </project>

17

Page 25: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Poziom jezyka Java Fragment pliku zaczynajacy sie od linii 22 po-woduje, ze maven bedzie kompilował kod uzywajac rozszerzen jezykaz wersji 1.6 Javy, oraz ze maven bedzie zakładac, ze kodowanie plikówto UTF-8.

Moduły W linii 8 zaczyna sie sekcja definiujaca moduły projektudies-irae.

Ustawienie poziomu jezyka Java By ustawic poziom jezyka Javapodczas kompilacji programu za pomoca systemu maven, nalezy odpo-wiednio skonfigurowac wtyczke odpowiadajaca za kompilacje. Konfigu-racja ta zaczyna sie w linii 22.

Konfiguracja repozytoriów W linii 35 definiuje sie repozytoria, któremaven bedzie przeszukiwac w poszukiwaniu zaleznosci. Domyslnym re-pozytorium (którego nie trzeba konfigurowac) jest główne repozytoriumMavena, drugim dodanym jest publiczne repozytorium autora — za-wiera zaleznosci, których brakowało w głównym repozytorium lub byłytam w niepełnej wersji — na przykład nie zawierały kodu zródłowegoczy nie zawierały odpowiednio opisanych zaleznosci.

Zaleznosci W linii 41 rozpoczynana sie konfiguracja zaleznosci. Wszy-stkie zaleznosci tego głównego modułu beda zaleznosciami pozostałychmodułów. Tutaj definiujemy dwie zaleznosci niezbedne do prawidłowegodziałania testów: junit — najpopularniejszy framework do pisaniatestów w Javie — oraz wtyczke do systemu logowania.

Zarzadzanie zaleznosciami W linii 56 rozpoczyna sie zarzadzaniezaleznosciami; jest to funkcjonalnosc mavena upraszczajaca tworzenieprojektów składajacych sie z wielu modułów. W zwykłym schemacieuruchamiania programów w całym programie moze byc tylko jedna wer-sja danej klasy, a co za tym idzie, jedna wersja danej biblioteki. Gdybydefiniowac wersje i zasieg zaleznosci w podmodułach głównego modułumogłoby sie okazac ze jeden ze poszczególne podmoduły wymagajaróznych wersji danych bibliotek13, zmiana wersji biblioteki dla całegoprojektu byłaby tez czasochłonna. Jesli dana zaleznosc jest umieszc-zona w sekcji dependencyManagementw projekcie rodzicu, to w projekcie dziecku starczy przy definiowaniuowej zaleznosci podac tylko artifactId i groupId, natomiast wersjai zasieg zostana odziedziczone od rodzica.

3.5 Moduł dies-irae:dies-assembly

Moduł ten słuzy do budowania gotowej dystrybucji programu.

13Samo w sobie nie jest to złe. Jesli rózne podprojekty beda uruchamiane jako rózneaplikacje jest to poprawne rozwiazanie.

18

Page 26: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Plik pom

Plik pom tego modułu jest bardzo prosty - mówi, iz zaleznos-cia tego modułu jest moduł dies-gui-onSite zawierajacy interfejsgraficzny (wszystkie pozostałe moduły uwzgledniane sa gdyz sa, zalezno-sciami dies-gui-onSite) oraz, ze plik zawierajacy opis dystrybucji toassembly.xml.

1 <?xml version="1.0" encoding="UTF-8"?>2 <project>3 <parent>4 <artifactId>dies-irae</artifactId>5 <groupId>dies-irae</groupId>6 <version>1.0</version>7 </parent>8 <modelVersion>4.0.0</modelVersion>9 <artifactId>dies-assembly</artifactId>

10 <build>11 <plugins>12 <plugin>13 <artifactId> maven-assembly-plugin

</artifactId>14 <configuration>15 <descriptors>16 <descriptor>17 assembly.xml18 </descriptor>19 </descriptors>20 </configuration>21 </plugin>22 </plugins>23 </build>24 <dependencies>25 <dependency>26 <groupId>dies-irae</groupId>27 <artifactId>dies-gui-onSite</artifactId>28 <version>1.0</version>29 </dependency>30 <dependency>31 <groupId>org.slf4j</groupId>32 <artifactId>slf4j-log4j12</artifactId>33 <version>1.5.6</version>34 </dependency>35 </dependencies>36 </project>

Plik assembly

Plik tworzy archiwa dystrybucyjne. Opis dystrybucji programu wpunkcie 4.

19

Page 27: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

1 <assembly>2 <id>dependencies</id>3 <formats>4 <format>zip</format>5 </formats>6 <includeBaseDirectory>false</includeBaseDirectory>7 <fileSets>8 <fileSet>9 <directory>target</directory>

10 <includes><include>*.jar</include></includes>11 <outputDirectory>/lib</outputDirectory>12 </fileSet>13 <fileSet>14 <directory>native/</directory>15 <outputDirectory>lib/native</outputDirectory>16 <includes>17 <include>**</include>18 </includes>19 </fileSet>20 <fileSet>21 <directory>bin</directory>22 <outputDirectory>/</outputDirectory>23 <includes>24 <include>*.sh</include>25 <include>*.bat</include>26 <include>*.exe</include>27 </includes>28 <fileMode>0755</fileMode>29 </fileSet>30 </fileSets>31 <dependencySets>32 <dependencySet>33 <outputDirectory>/lib</outputDirectory>34 <unpack>false</unpack>35 <scope>runtime</scope>36 </dependencySet>37 </dependencySets>38 </assembly>

3.6 Moduł dies-irae:dies-config

Moduł ten zawiera konfiguracje współdzielona przez wszystkie innemoduły. Z poziomu Javy konfiguracja jest enkapsulowana14 w instancjiklasy ConfigurationBean, dostepnej poprzez wywołanie metody Con-figuration.getConfiguration().

Pliki konfiguracyjne ładowane sa przy uzyciu klasy java.util.Properties. Wartosci domyslne konfiguracji sa elementem pliku jar

14Enkapsulacja jest pojeciem oznaczajacym ukrywanie pewnych detali implementacjiprzed klientami danego konstruktu programistycznego.

20

Page 28: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

zawierajacego ten moduł i znajduja sie w pliku o nazwie default.properties, wartosci dostepne dla uzytkownika dla konfiguracji po-szukiwane sa w katalogu .config w katalogu głównym programui maja nazwe dies-irae.properties.

Przykładowy plik konfiguracyjny:

1 # Nazwy detektorow2 gammaDetecorLocator = DET_23 electronDetectorLocator = DET_14 #Ilosci kanalow w analizatorze5 electonChannelCount = 10246 gammaChannelCount = 10247 #Paramery domyslnej prostej kalibracji y[KeV]=a*numer

kanalu +8 #Zbadane empirycznie, orientacyjne9 defaultBetaCalibration.a = 1.5261

10 defaultBetaCalibration.b = -36.133311 defaultGammaCalibration.a = 1.465812 defaultGammaCalibration.b = -24.830613 #Czy uzywac domyslnej kaibracji detektorow14 calibrated = false15 #Port COMM pod ktorym jest silnik16 driverPort = COM917 #Domyslna kalibracjia silnikow - zbadana empirycznie18 defaulrDriverCalibration.a = -0.330719 defaulrDriverCalibration.b = 107

Konfiguracja kalibracji detektorów

Kalibracja detektorów równiez jest konfigurowalna. Mozna wprowa-dzic do programu prekonfigurowane linie które posłuza do kalibracjidetektora. Z poziomu Javy linie te sa enkapsulowane w instancji klasyCalibrationBean dostepnej poprzez wywołanie CalibrationProper-ties.getProperties().

Wartosci domyslne konfiguracji sa elementem pliku jar zawie-rajacego ten moduł i znajduja sie w pliku o nazwie calibration.properties, wartosci dostepne dla uzytkownika dla konfiguracji po-szukiwane sa w katalogu .config w katalogu głównym programui maja nazwe calibration.properties.

Przykładowy plik konfiguracyjny:

line.name=Cs;Co1;Co2;Eu1;Eu2;Eu3;Eu4line.energy=660;1170;1332;122;245;344;791

3.7 Moduł dies-irae:encore-silniki

Moduł ten zajmuje sie komunikacja programu z silnikami kroko-wymi. Komunikacja odbywa sie za posrednictwem sprzetowego ste-rownika. Komunikacja ze sterownikiem odbywa sie za posrednictwemportu RS 232.

21

Page 29: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Sterownik udostepnia trzy polecenia o nastepujacym formacie:

Liczba15 Nakazuje wykonac silnikowi N kroków z biezaca predkoscia

!Liczba Ustawia predkosc obrotu silnika

? Zwraca biezace połozenie jako liczbe od 0 do 1023.

Kazdorazowo przed wykonaniem polecenia wydajacego rozkaz obrotunalezy ustawic predkosc, tj. nalezy zawsze wysyłac sekwencje:

!predkosc\rodleglosc\r

Załozenia modułu

Moduł musi udostepniac nastepujace operacje:

Obrót detektora do ustalonego kata Poniewaz obrót jest operacja,która trwa długo (ponad sekunde), nalezy umozliwic wykonanie tejoperacji na dwa sposoby: blokujac wykonanie biezacego watku doczasu dojechania na miejsce oraz, asynchronicznie — opuszczeniemetody nakazujacej obrót po zadaniu rozkazu obrotu (z udo-stepnieniem mechanizmu notyfikacji o zakonczeniu obrotu i oprzerwaniu go z jakichs przyczyn). Patrz 3.7.

Obrót w okreslonym kierunku i zatrzymanie Uzywane do recznejmanipulacji połozeniem tarczy.

Moduł powinien byc skonstruowany tak, zeby silniki sie wyłaczałyprzy zerwaniu kontaktu z komputerem.

Komunikacja z portem szeregowym

Java SE nie udostepnia narzedzi umozliwiajacych połaczenie sie zapomoca portu szeregowego, do komunikacji z portem szeregowym słuzyrozszerzenie Javy o nazwie Java Communications API16. Niestety Sunnie udostepnia implementacji tego API dla systemu operacyjnego Win-dows. Implementacja jest dostepna dzieki projektowi RXTX17.

Jedyna róznica miedzy RXTX a Java Communications API jest to,ze klasy RXTX znajduja sie w pakiecie gnu.io, podczas gdy SUN swojeklasy umiescił w javax.comm.

15Dokładniej format polecenia to: Liczba\r. Wszystkie polecenia powinny siekonczyc sekwencja \r.

16Strona projektu http://java.sun.com/products/javacomm/ dostep z dnia 21-09-09.

17Strona główna http://rxtx.qbang.org, dostep z dnia 21-09-2009

22

Page 30: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.1: Schemat UML klasy EngineDriver

Wymagania modułu

Moduł ten wymaga, by w katalogu Windows\\System3218 umiescicnatywne biblioteki RXTX19. Z pobranych archiwów nalezy wyodrebnicplik rxtxSerial.dll i umiescic go w wzmiankowanym wyzej katalogu.

Schemat modułu

Moduł ten składa sie z trzech głównych klas, które posiadajanastepujace obszary odpowiedzialnosci:

EngineDriver Klasa ta enkapsuluje port. Kiedy tworzono ten ten frag-ment aplikacji, autor nie był pewien, czy RXTX jest dostateczniestabilna, by obsługiwac ten program. Klasa ta enkapsuluje RXTX— zapewniała ona, ze zmiana tej biblioteki na dowolna inna niespowoduje zmian poza ta klasa. Schemat UML20 tej klasy znajdujesie na rys. 3.1. Klasa ta udostepnia strumienie wejscia portu jakoinstancje InputStream oraz strumien wyjscia portu za posred-nictwem metody writeToOutput(byte[]), która oprócz wysłaniadanych (w zaleznosci od konfiguracji logowania) zapisuje je dologa.

CommandDriver Klasa ta enkapsuluje sprzetowy driver silników i umoz-liwia wysyłanie rozkazów jako obiektów Java, pozwala tez odbieracinformacje zwrotne od drivera.

PositionDriver Klasa pozwalajaca na obrót silnika do okreslonejpozycji.

CalibratedDriver Klasa pozwalajaca na obrót silnika do okreslonegokata.

18Albo w innym katalogu, w którym wywołanie System.loadLibrary bedzie poszuki-wac bibliotek.

19Sa one dostepne ze stronty RXTX pod adresem http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip., oraz na serwerze Autora http://jbzdak.ath.cx/inz/rxtx-2.1-7-bins-r2.zip.

20Unified Moddeling Language — wystandaryzowany jezyk modelowania w dziedzinieinzynierii oprogramowania.

23

Page 31: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.2: Schemat UML klasy CommandDriver

Klasa CommandDriver

Klasa ta enkapsuluje podstawowa komunikacje z driverem silników.Jej główna odpowiedzialnoscia jest:

Wysyłanie rozkazów Metoda executeCommand(CommandObject) wy-konuje rozkaz i odbiera odpowiedz. Metoda ta blokuje wykonaniebiezacego watku na czas wysłania rozkazu i przetworzenia odpo-wiedzi. Uwaga: watek jest blokowany do czasu wysyłania rozkazu— a nie do konca wykonywania rozkazu przez silniki.

Synchronizacja Klasa ta udostepnia synchronizacje danych orazumozliwia dostep do jej instancji z wielu watków.

Schemat klas CommandObject (enkapsulujacej rozkaz) i Command-Driver znajduje sie na rys 3.2.

Klasa PositionDriver

Klasa ta pracuje na współrzednych zwiazanych z pozycja, czyli liczbazwracana przez rozkaz ?. Pozwala wykonac nastepujace operacje:

Obrót do ustalonej pozycji Operacje te mozna wykonac na dwa spo-soby — synchronicznie (watek wykonujacy te operacje jest blo-kowany az do jej zakonczenia) lub asynchronicznie — (metoda

24

Page 32: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

konczy sie natychmiast po wydaniu silnikom rozkazu, opcjonalnyparametr DriverCallback pozwala na otrzymanie notyfikacji pozakonczeniu wykonywania rozkazu.

Algorytm działania tej metody jest nastepujacy:

• Wykonywany jest pomiar połozenia.

• Wyznaczana jest róznica połozen, znajac ja oblicza sie pred-kosc obrotu silników oraz ilosc kroków do wykonania w tensposób, by silniki kreciły sie do nastepnego sprawdzeniapołozenia (ale nie wiele dłuzej). W ten sposób silniki krecasie jednostajnie, a po zerwaniu kontaktu z komputeremsamoczynnie staja.

• Przez 50 ms czekamy do nastepnego pomiaru połozenia.

Obrót w okreslonym kierunku az do otrzymania polecenia zatrzyma-nia sie.

Algorytm działania jest analogiczny jak w przypadku obrotu doustalonej pozycji, z tym ze predkosc i ilosc kroków ustalone sa nasztywno.

Zatrzymanie Zatrzymuje silniki

Pozostałe własnosci i zaleznosci umieszczono na diagramie 3.3.Własnosci oznaczone «bound» sa bound properties w rozumieniu spe-cyfikacji Java Beans — czyli ich zmiana spowoduje notyfikacje zare-jestrowanych w danej instancji PositionDrivera PropertyChange-Listener’ów[12, punkt 74.1]. Opis pozostałych niestandardowych oz-naczen z diagramów UML znajduje sie w punkcie: 5.3.

Klasa CalibratedDriver Dziedziczy po PositionDriver. Pozwalana przeliczanie pozycji na katy. Własnosci tej klasy znajduja sie nadiagramie: 3.4.

3.8 Moduł genie-connector

Moduł ten zawiera klasy łaczace sie z oprogramowaniem Genie 2000v. 3.2 dostarczanym przez Canberre — producenta wszystkich ele-mentów toru spektrometrycznego. Załozeniem projektowym było tutajmaksymalne uproszczenie pracy z biblioteka Canberry — udostepnie-nie tej biblioteki za posrednictwem API21 chroniacego uzytkownikabiblioteki przed jej złozonoscia.

Oprogramowanie Canberry

Najpierw oddajmy głos producentowi.

“Oprogramowanie Genie 2000 jest oparte o paradygmatrozdziału na klient i serwer. Ta architektura pozwala na

21Aplication Interface — interfejs programistyczny.

25

Page 33: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.3: Klasa PositionDriver

Rysunek 3.4: Klasa CalibratedDriver

26

Page 34: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

podzielenie aplikacji na dwa komponenty — klient i serwer,które moga zarówno byc wykonywane na jednym komputerze,jak i byc rozproszonymi miedzy komputerami połaczonymisiecia. Podsystem IPC (InterProcess Communicaton — ko-munikacja miedzy procesami), dostarcza warstwe łaczaca tekomponenty.

Komponent pełniacy role serwera (zwany VDM — VirtualData Manager) udostepnia usługi spektroskopowe. Interfejstych usług, które zawieraja miedzy innymi odczyt danychzapisanych na dysku i dostep do elektronicznych urzadzenpomiarowych jest z punktu widzenia aplikacji klienckichspójnym generycznym API”[13, s. 23]22.

Oprogramowanie Canberry udostepnia interfejs napisany w C zktórego zdecydowałem sie skorzystac.

Słownik terminów Canberry

Krótkie wyjasnienie terminów, zaczerpnietych z dokumentacji Can-berry, którymi bede sie posługiwac:

VDM Virtual Data Manager komponent pełniacy role serwera i udoste-pniajacy dane klientom.

DSC Data Source Context referencja, która przechowuje dane o zródledanych. Zgodnie z dokumentacja programista nie ma dostepu dojej pól, wszystkie operacje na niej nalezy wykonywac za pomocafunkcji dostarczonych przez Canberre.

SAD System Access to Data tak okresla sie wszystkie metody udostep-niajace dane z DSC.

Wymagania biblioteki Do prawidłowego działania jakiejkolwiek fun-kcji wymagane jest uprzednie wywołanie:

void vG2KEnv();

która odczytuje z rejestru dane konfiguracyjne oprogramowania. Fun-kcja ta jest wywoływana w statycznym bloku inicjalizacji klasy Ge-nieConnectorStaticData (patrz punkt 3.8, linia 11).

Parametry

Jedna z zasadniczych funkcjonalnosci biblioteki Canberry jest umoz-liwienie zapisu i odczytu parametrów. Do odczytu i zapisu parametrówsłuza odpowiednio funkcje SadGetParam i SadPutParam, funkcje temaja taka sama sygnature:

SADENTRY SadGetParam(HMEM hDSC, ULONG ulParam,USHORT usRecord, USHORT usEntry, void *pvData, USHORT usExpect );

22Tłumaczenie własne

27

Page 35: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Wyjasnienie znaczenia parametrów:

hDSC DSC, z którego pobieramy parametr

ulParam Numer parametru

usRecord Numer rekordu w parametrze.

usEntry Numer entry w parametrze23.

pvData Zaalokowany obszar, w którym znajduje sie wartosc parametrudo zapisania (podczas zapisu) lub który bedzie zawierac wartosczapisana (podczas odczytu).

usExpect Długosc pvData w bajtach.

Łaczenie Javy i C

Standardowo do komunikacji z kodem C korzysta sie z mechanizmuJNI24 bedacego elementem standardowej dystrybucji Javy. Rozwazmyjednak najpierw, jak działa JNI. Przykładowo by stworzyc natywnametode o nastepujacej sygnaturze:

package pkg;

class Cls native double f(int i, String s);

nalezy stworzyc nastepujacy kod w C25:

1 jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (2 JNIEnv *env, /* interface pointer */3 jobject obj, /* "this" pointer */4 jint i, /* argument #1 */5 jstring s /* argument #2 */ )6 /* Obtain a C-copy of the Java string */7 const char *str = ( *env)->GetStringUTFChars(env,

s, 0);8 /* process the string */9 ...

10 /* Now we are done with str */11 ( *env)->ReleaseStringUTFChars(env, s, str);12 return ...13

Jak widzimy JNI jest mechanizmem skomplikowanym, zdecydowanosie wiec na uzycie biblioteki JNA (Java Native Access)26. Oddajmy głosautorom:

23Dokumentacja biblioteki jest bardzo enigmatyczna jesli chodzi o znaczenieparametrów usEntry i usRecord. Patrz [13] strony: 41 — 43. Domyslnie jest to albo0 albo 1. Dokumentacja wskazuje ze powinno byc to 1 ([13] str 42), poza tak zwanymiCommon parameters dla których jest to 0 ([13] str. 71)

24Java Native Interface25Przykłady pochodza z [14]26Główna strona projektu https://jna.dev.java.net/

28

Page 36: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

“JNA udostepnia programom Javy łatwy dostep do naty-wnych współdzielonych bibliotek (dla Windows bibliotekDLL27) piszac tylko kod Javy”[15].

JNA ma dwie zasadnicze wady:

Wymaga dostepu do bibliotek DLL JNA wymaga, by kod, do któregołaczy sie program, był dostepny jako biblioteka DLL28. Canberranie dostarczyła biblioteki DLL, implementacja API Canberry jestdostepna poprzez statyczna biblioteke. Autorowi nie udało sieznalezc bezpłatnych narzedzi konwertujacych biblioteki statycznena biblioteki DLL. Stworzono wiec program który wygenerował zplików nagłówkowych nagłówek biblioteki DLL (patrz rozdział 5.3).

JNA jest powolna29 Celem projektowym JNA nie jest szybkosc wyko-nania kodu, lecz łatwosc jego tworzenia. Jednak problem tego, zeJNA jest wolniejsze, nie jest istotny w tej aplikacji — kod natywnyjest wywoływany na tyle rzadko ze wszelkie narzuty generowaneprzez JNA sa nieistotne.

Drugim rozwiazaniem problemu predkosci mogłoby byc uzycie tzw.direct mapping. Jest to specjalna metoda mapowania korzystajacaz JNA, która jednak ma wydajnosc porównywalna z JNI[15]. Byłbyon uzywany od poczatku, został dodany do JNA juz gdy projektgenieConnetcor był znacznie zaawansowany.

Opis biblioteki JNA

Filozofia działania JNA jest nastepujaca: programista tworzy spe-cjalny interfejs, który zawiera deklaracje funkcji odpowiadajacych fun-kcjom w danej bibliotece DLL, nastepnie JNA dostarcza implementacjetego interfejsu wywołania, która wykonuje odpowienie wywołania fun-kcji DLL. By pozyskac implementacje iterfejsu, nalezy wywołac metodecom.sun.jna.Native.loadLibrary. Posłuzmy sie przykładem z mo-dułu:

1 class GenieConnectorStaticData 23 static final String DLL_FILENAME =

"cxAthJbzdakGenieConnector";45 static final String FUNCTION_PREFIX = "DLL_WRAPPER_";67 static final GenieLibrary GENIE_LIBRARY;8 static 9 GENIE_LIBRARY = (GenieLibrary)

10 Native.loadLibrary( DLL_FILENAME,GenieLibrary.class,createLibOptions());

27(z ang.) Dynamic-link library28Dokładniej jako bibliotek dzielna (z ang. shared library)29Dokumentacja biblioteki mówi, ze narzut zwiazany z wywołaniem funkcji jest o rzad

wielkosci wiekszy, niz w przypadku JNI.

29

Page 37: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

11 Native.setProtected(true);12 GENIE_LIBRARY.vG2KEnv();13 1415 private static Map<String, Object>

createLibOptions() 16 Map<String, Object> result = new HashMap<String,

Object>();17 result.put( Library.OPTION_FUNCTION_MAPPER, new

GenieFunctionMapper());18 return result;19 20

W linii 10 otrzymujemy implementacje interfejsu GenieLibrary,parametry funkcji loadLibrary to: nazwa pliku dll30, który ładu-jemy, klasa, której implementacje otrzymujemy oraz dodatkowe opcjemapowania (o tym ostatnim pózniej).

Mapowanie funkcji bezargumentowych

By odwzorowac funkcje C:

void vG2KEnv( void );

nalezy po stronie Javy napisac:

public void vG2KEnv();

Kiedy funkcja nie ma argumentów nalezy poprawnie odwzorowactylko jej nazwe. Zazwyczaj nie jest to trywialne, poniewaz nowoczesnekompilatory (szczególnie kompilatory C++) uzywaja tak zwanego deko-rowania nazw31 i jesli dostarczona biblioteka jest skompilowana z włac-zona opcja dekorowania nazw, nalezy skonfigurowac JNA by ta wyszuki-wała udekorowane nazwy w pliku dll. Normalnie do tego celu słuzyprzekazana jako parametr wywołania loadLibrary instancja Func-tionMapper.

W przypadku modułu genie-connector, poniewaz wyłaczono wszel-kie dekorowanie nazw, stworzony w linii 17 FunctionMapper słuzy doomijania prefiksów do funkcji. W stworzonym na potrzeby programupliku DLL, wszystkie funkcjie otrzymały prefix DLL_WRAPPER_. Takzdefiniowany function mapper bedzie automatycznie ów prefix dodawac.

Odwzorowywanie typów prymitywnych

Typy prymitywne (i ich obiektowe odopowiedniki) mapowane saautomatycznie32:

30JNA bedzie poszukiwało biblioteki dokładnie w ten sam sposób co, znane z JNI,wywołanie System.loadLibrary. Mozna tez konfigurowac metode poszukiwania bib-liotek.

31z ang. name mangling. Wiecej o dekorowaniu nazw w rozdziale o generowaniuplików dll ze statycznych bibliotek — patrz punkt 5.3

32Dokładna lista odwzorowan automatycznch, na stronie https://jna.dev.java.net/javadoc/overview-summary.html#marshalling, dostep 21-09-2009

30

Page 38: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

short SadControlDSC(unsigned short, unsignedshort);

nalezy stworzyc funkcje o nastepujacej sygnaturze:

public short SadControlDSC(short usDevice, shortusOpCode);

Odwzorowywanie wskazników

Odwzorowywanie wskazników jest skomplikowane, poniewaz praw-idłowe ich odwzorowanie zalezy od intencji autora biblioteki. Przykła-dowo funkcja:

void doStuff(int* param);

moze oczekiwac ze param bedzie:

• Zainicjowanym wskaznikiem na int, tak by wynik jej działaniamógł byc zwrócony przez ten wskaznik. Wtedy poprawnym jejodwzorowaniem jest:

void doStuff(IntByReference param);

• Zainicjalizowana tablica intów, wtedy poprawnym odwzorowaniembedzie:

void doStuff(int[] param);

Co wiecej, przy przenoszeniu tablic miedzy kodem Javy a kodemnatywnym nalezy zwracac uwage na problem własnosci pamieci —cała pamiec automatycznie allokowana przez JNA jest zwalniana pozakonczeniu wywołania funkcji, tj. pamiec wskazywana przez wartoscparam bedzie zwolniona zaraz po wyjsciu z funkcji.

Jesli kod natywny zachowuje referencje do pamieci przekazanej jakoparametr, nalezy uzywac w odwzorowaniu klasy Memory33.

void doStuff(Memory param);

Wielokrotne odwzorowywanie funkcji

JNA zezwala na przeładowywanie nazw funkcji odwzorowujacyhdana metode C, tj. mozna w rózny sposób odwzorowywac te samametode. Posłuzmy sie przykładem funkcji pobierajacej parametr z DSC34:

SADENTRY SadGetParam(ULONG ulParam, void *pvData);

znaczenie parametrów wyjasnione w sekcji 3.8.Funkcje te mozna odwzorowac nastepujaco:

33Zaznaczam. W module genie-connector ta funkcjonalnosc nie była potrzebna.34Dla czytelnosci usunałem nieistotne argumenty funkcji

31

Page 39: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

public short SadGetParam(NativeLong ulParam,byte[] result);

albo nastepujaco:

public short SadGetParam(NativeLong ulParam,NativeLongByReference result);

W pierwszym przypadku bezposrednio odwzorowujemy void* nabyte[]. Podejscie to ma jedna zasadnicza wade — nalezy potem recznieprzetworzyc byte[] na docelowy typ, co po pierwsze jest jednak kodemktóry trzeba napisac (a nalezy unikac pisania zbednego kodu), po drugieczesto jest nie trywialne (a pewno nieprzenosne)35. W drugim wypadkuodwzorowujemy void* na typ NativeLongByReference, który jestpo prostu wskaznikiem na NativeLong. W tym wypadku mapowaniapamieci do typu Javy long wykonuje JNA, które bierze poprawke narózne architektury.

Mozna umiescic te dwa mapowania w jednym interfejsie opisujacymbiblioteke (i tak zreszta postapiono w bibliotece genie-connector).

Odwzorowanie DSC

Wreszcie, jesli po stronie Javy nie zamierzamy operowac na wska-zniku, mozemy go odwzorowac jako typ com.sun.jna.Pointer. Takasytuacja zachodzi w module genie-connector. Wszystkie funkcje od-czytujace lub zapisujace dane do zródła pobieraja jako pierwszy argu-ment wskaznik do struktury (nazwanej DSC), bedacej zródłem danych.Klient biblioteki Genie nie powinien na własna reke nic z owa strukturarobic.

Strukture te pozyskuje sie wyołujac funkcje

int iUtlCreateFileDSC( void** phDSC, BOOLfAdvise, HWND hAdvise );

która w kodzie javy jest odwzorowana jako:

public int iUtlCreateFileDSC(PointerByReference

hDSC, int zero, int zero2);36

pierwszy argument, po wywołaniu funkcji, bedzie zawierac zainicjo-wana strukture hDsc.

Wszystkie pozostałe funkcje jako pierwszy argument pobieraja wska-znik do tej struktury.

By zachowac po stronie Javy bezpieczenstwo typów, mozna tworzycwłasne typy wskaznikowe. Nie maja one zadnej dodatkowej funkcjonal-nosci, a tylko zapewniaja ochrone przed błedami programistycznymi.Po stronie Javy wskaznik na hDsc bedzie odwzorowywany poprzez typ:

1 package cx.jbzdak.diesIrae.genieConnector;23 import com.sun.jna.Pointer;

35Przy przejsciu na system 64 bitowy zmieniaja sie długosci zmiennych.36Wynik tej funkcji wskazuje wystapienie (lub nie błedu), parametry zero i zero2

zgodnie z dokumentacja, musza miec wartosc 0.

32

Page 40: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

4 import com.sun.jna.PointerType;56 public class DscPointer extends PointerType78 public DscPointer() 9 super();

10 1112 public DscPointer(Pointer p) 13 super(p);14 15

Opis modułu

Załozenia modułu

JNA dostarcza tylko mapowanie funkcji C, by natomiast otrzymackod w pełni zgodny z paradygmatami Javy, nalezało dodac dodatkowewarstwy posrednie miedzy pozostałymi modułami projektu, a intefejsemdostarczonym przez JNA. Pozostałe moduły programu powinny widziecinterfejs posiadajacy nastepujace cechy:

• Uzywajacy mechanizmu wyjatków do obsługi błedów.

• Uzywajacy typów enumeracyjnych zamiast flag

• Zgodny ze specyfikacja Java Beans

• Obiektowo orientowany

By spełnic powyzsze załozenia (i zachowac rozsadna złozonosc kodu)Autor musiał rozbic odwzorowanie na cztery klasy:

GenieLibrary Klasa dokonujaca odwzorowania biblioteki Canberry.

LibraryWrapper Statyczna klasa odwzorowujaca argumenty napisanezgodnie ze standardami Javy na zgodne z API dostarczonym przezCanberre. Klasa ta dostarcza tez obsługe wyjatków.

SimpleConnector Klasa która enkapsuluje DSC. Ponadto jej załoze-niem projektowym było to, zeby nie przetrzymywała zadnego stanu,który da sie łatwo pobrac z DSC oraz nie odpytywała DSC podkatem zmiany stanu.

GenieConnector Dziedziczy po SimpleConnector’ze. Ta klasa juzprzetrzymuje stan z DSC, oraz periodycznie odczytuje ów stan zDSC.

Główne róznice miedzy SimpleConnector a GenieConnector

• Kazde wywołanie funkcji, która zwraca dane z DSC dla Simple-Connector’a powoduje wywołanie funkcji SAD, podczas gdy Ge-nieConnector zapamietuje te dane.

33

Page 41: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

• GenieConnector co jakis czas (domyslnie 1 sekunda) pobierastan z DSC.

• SimpleConnector nie jest swiadom zmian jakie zachodza w DSC(przykładem takiej zmiany jest zakonczenie pomiaru), podczas gdyGenieConnector sprawdza te dane i jesli zajda zmiany wywołujeodpowiedni PropertyChangeEvent.

Pełne mapowania

Zawartosc klasy GenieLibrary:

1 package cx.jbzdak.diesIrae.genieConnector;23 import com.sun.jna.Library;4 import com.sun.jna.NativeLong;5 import com.sun.jna.Pointer;6 import com.sun.jna.ptr.NativeLongByReference;7 import com.sun.jna.ptr.PointerByReference;8 import com.sun.jna.ptr.ShortByReference;9 import

cx.jbzdak.diesIrae.genieConnector.structs.DSQuery;1011 interface GenieLibrary extends Library 1213 public void vG2KEnv();1415 public int iUtlCreateFileDSC(PointerByReference hDSC,

int zero, int zero2);1617 public int iUtlCreateFileDSC2(PointerByReference

hDSC, int zero, int zero2);1819 public short SadGetStatus(DscPointer dscPointer,

NativeLongByReference result, ShortByReferencedummy1, ShortByReference dummy2);

2021 public short SadOpenDataSource(DscPointer dsc, String

sourceName, short type, short acces, shortverify, String shellId);

2223 public short SadGetParam(DscPointer hDSC, NativeLong

ulParam, short usRecord, short usEntry, byte[]result, short usExpect);

2425 public short SadGetParam(DscPointer hDSC, NativeLong

ulParam, short usRecord, short usEntry,NativeLongByReference result, short usExpect);

2627 public short SadPutParam(DscPointer hDSC, NativeLong

ulParam, short usRecord, short usEntry, byte[]

34

Page 42: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

result, short usExpect);2829 public short SadPutParam(DscPointer hDSC, NativeLong

ulParam, short usRecord, short usEntry,NativeLongByReference result, short usExpect);

3031 public short SadCloseDataSource(DscPointer dsc);3233 public short SadDeleteDSC(DscPointer dsc);3435 public short SadPutStruct(DscPointer sdc, short

structType, short record, short entry, Pointerptr, short structSize);

3637 public short SadFlush(DscPointer dsc);3839 public short SadControlDSC(DscPointer dsc, short

usDevice, short usOpCode);4041 public short SadGetSpectrum(DscPointer dsc, short

start, short count, short useFloats, int[]result);

4243 public short SadPutSpectrum(DscPointer dsc, short

start, short count, int[] input);4445 public short SadQueryDataSource(DscPointer

dscPointer, short opCode, DSQuery result);46

Opis klasy SimpleConnector

Jej własnosci sa opisane na diagramie numer 3.5, jej diagramstanów znajduje sie na rysunku 3.6. Diagram klas, które zawierajawyniki pomiarów spektromatycznych, znajduje sie na rys 3.7.

Stany klasy SimpleConnector Jak wynika z diagramu stanów (rys.3.6) klasa ta ma bardzo prosta przestrzen stanów, na przykład nie mo-zna powtórnie otworzyc zamknietej instancji tej klasy, to ograniczeniewynika z załozenia odwzorowania działania biblioteki Genie — DSCrówniez nie da sie powtórnie otworzyc.

Nastepujace metody zmieniaja stan SimpleConnectora:

void openFile(File file, Set<OpenModes> modes)Metoda ta musi zostac wywołana, gdy instancja jest w stanieNOT_OPENED, a jej prawidłowe wykonanie przenosi obiekt do stanuOPEN. Funkcja ta powoduje, ze dana instancja bedzie czerpac danez pliku wskazywanego przez file, który zostanie otwarty w trybiebedacym koniunkcja trybów zawartych w modes.

35

Page 43: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.5: Schemat UML klasy SimpleConnector

Rysunek 3.6: Schemat stanów klasy SimpleConnector

36

Page 44: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.7: Schemat stanów klas zawierajacych wyniki pomiarówspektrometrycznych

void openSource (String datasource, Set<OpenMode> mode,SourceType type) Funkcja ta działa analogicznie do open-Source. Łancuch datasource wskazuje na zródło danych, so-urceType natomiast wskazuje na typ zródła danych.

void close() Metoda ta musi zostac wywołana, gdy instancja jestw stanie OPEN, a jej prawidłowe wykonanie przenosi obiekt dostanu CLOSED. Po jej wywołaniu dana nie nalezy wywoływac ja-kichkolwiek innych funkcji na danej instancji omawianej klasy.

Pobieranie zebranych danych spektrometrycznych

Do pobierania danych spektrometrycznych słuzy funkcja:

public SpectrometricResult getSpectrometricData();

by pobrac zwartosc pojedynczego kanału nalezy wywołac na instancjiSpectrometric Result metode:

public int getCountForChannel(int channelNum);

Praca z parametrami

Biblioteka w pewnym stopniu ułatwia prace z parametrami (co dodalszych ułatwien patrz 3.8). W klasie SimpleConnector zdefiniowanometody słuzace do pracy z parametrami:

public <T> T getParam(final Parameter<T> parameter,final int record, final int entry)

public <T> void setParam(final Parameter<T>parameter, final T value, final int record, finalint entry)

37

Page 45: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Interfejs parameter jest typem sparametryzowanym, parametr T totyp parametru po stronie Javy. Ma on nastepujaca definicje:

1 public interface Parameter<T> 2 @NonNull ParameterType<T> getType();34 long getParamId();56 String getName();7

Własnosci tego interfejsu maja nastepujace znaczenie:

type Instancja klasy ParameterType, która enkapsuluje pobieranieparametru.

paramId wartosc podana jako parametr ulParam (patrz punkt: 3.8)wywołan SadGetParam i SadPutParam.

name Nazwa parametru37.

ParameterType to klasa abstrakcyjna majaca dwa zadania:

• Przechowuje jako stałe wszystkie inne typy parametrów.

• Enkapsuluje odczyt i zapis parametrów. Podklasy tej klasy muszadokonac implementacji metod:

public abstract T readParam(GenieLibrary library,DscPointer dscPointer, Parameter param, shortusRecord, short usEntry) throws

ConnectorException;

public abstract void writeParam(GenieLibrarylibrary, T value, DscPointer dscPointer,Parameter param, short usRecord, shortusEntry) throws ConnectorException;

Przekazanie parametru library ma na celu umozliwienie podkla-som wywołanie specjalnej przeładowanej metody SadGetParam38

tak, by JNA dokonała mapowania na typ Javy.

Wszystkie parametry zostały wyekstrahowane z plików nagłówko-wych i sa dostepne jako stałe w interfejsie: Parameters39.

Ponadto parametry, których autor musiał uzywac, zostały zapisanejako stałe w klasie ParamAlias z dokładnym opisem i prostsza nazwa.

37Parametry po stronie Genie sa zaimplementowane jako makra preprocesora majacenastepujaca konwencje nazewnicza: CAM_«TYP»_«NAZWA», gdzie typ to znak okreslajacytyp parametru (patrz: [13] strona 479), a nazwa jest zwracana przez metode getName

38lub odpowiednio: SadPutParam39Dokładniej sa zdefiniowane w interfejsach Parameters1 i Parameters2 po których

dziedziczy interfejs Parameters. Parametrów jest na tyle duzo ze przy próbach zdefin-iowania ich w jednym interfejsie przekroczony zostaje maksymalny rozmiar bytecoduklasy.

38

Page 46: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.8: Schemat UML klasy ErrorDescription

Własnosc flush Biblioteka Genie nie zapisuje wartosci parametróww zródle danych az do wywołania funkcji SadFlush. Klasa GenieCon-nector ma własnosc flush, która pozwala kontrolowac jej zachowaniew tym zakresie. Jesli bedzie ona ustawiona na AUTO_COMMIT, to para-metry beda zapisywane automatycznie zaraz po ustawieniu (domyslniejest ona ustawiona na wartosc MANUAL).

Obsługa błedów

Za obsługe błedów odpowiadaja klasy LibraryWrapper i Simple-Connector. Wszystkie wywołania funkcji SAD (sa one oznaczone nadiagramach UML) moga wygenerowac niesprawdzany wyjatek klasyGenieException. Wyjatek ten ma nastepujace własnosci:

errorCode Oryginalny kod błedu zwrócony przez funkcje, która zgło-siła bład.

detailedErrorCode Kod błedu zwrócony przez funkcje SadGetSta-tus, zawierajacy dokładne informacje o błedzie. (Dokładny opissprawdzenia błedów w [13] rozdział 7).

errorDescription Instancja klasy ErrorDescription zawierajaca roz-kodowane informacje z detailedErrorCode.

additionalInfo Dodatkowe informacje (głównie: parametry funkcjiwywołujacej bład).

Klasa ErrorDescription Klasa ta rozkodowuje informacje zawartew kodzie błedu. Jej schemat jest na diagramie 3.8.

Dodatkowo wyjasnienia wymaga sposób znajdowania opisu kodubłedu. Klasa ErrorDescription zawiera statyczna mape, w którejkluczami sa specificErrorCodes, a wartosciami opisy błedów zacz-erpniete z [13]. Przeniesiono tylko te kody błedów, z którymi autor siespotkał. Uzytkownicy biblioteki powinni dodawac własne.

Listing statycznej czesci klasy ErrorDescription.

39

Page 47: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

1 private static final Map<Integer, String>detailedMessages =

2 Collections.synchronizedMap(DefaultedMap.decorate(new HashMap(), "Nie okreslonowiadomosci szczegolowej"));

34 static 5 detailedMessages.put(/** kolejne kody bledow */);6

Klasa GenieConnector

Podstawowe róznice z GenieConnector to:

Inne funkcje wywołuja biblioteki Genie funkcje getStatus i isAc-quiring nie wywołuja metod SAD, lecz tylko zwracaja zapisanystan.

Dostep do zapamietanych wyników pomiarowych Klasa ta udoste-pnia własnosc lastResult, która zawiera ostatnio zapisane wy-niki pomiarowe. Jest to własnosc zwiazana (patrz 5.3).

Automatyczne odpytywanie DSC Instancje tej klasy automatycznieco zadany okres (domyslnie 1 sek) odswiezaja parametry DSC —dokładniej status oraz zebrane dane. Do odpytywania DSC słuzyklasa ConnectorStateWatcher dziedziczaca po klasie java.-util.Timer.

Wiecej własnosci zwiazanych status oraz acquiring to własnoscizwiazane.

Metody odswiezajace stan (a zatem wykonujace zapytania SAD) to:

updateStatus() Funkcja ta odswieza własnosci status i acquiring

updateLastResults() Funkcja ta odswieza własnosc lastResults

Diagram UML tej klasy jest na rysunku 3.9

Perspektywy rozwoju

W nastepnej kolejnosci mozna upraszczac uzywanie z bibliotek Can-berry:

Uproszczenie korzystania z parametrów Wywołanie funkcji SadGet-Param wymaga podania 5 argumentów40. Po stronie Javy wymagapodania trzech parametrów – instancji interfejsu Parameter i liczbdefiniujacych entry i record. Jednak dla wielu parametrów en-try i record ustawione sa na stałe, problem polega na tym, zedla niektórych parametrów oba równaja sie 0 (na przykład CAM_-T_SIDENT) dla innych 1 (np. CAM_L_ADCFANTIC). By oszczedzic

40Nie licze hDSC, poniewaz de facto jest to obiekt którego parametry pobieramy.

40

Page 48: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.9: Schemat UML klasy GenieConnector

programiscie koniecznosci pamietania tych wartosci liczbowych,nalezałoby umozliwic zapis i odczyt wartosci tych parametrówza pomoca interfejsu zgodnego ze specyfikacja JavaBeans (tj. zapomoca ’getterów’ i ’setterów)’.

Wymagania modułu

Moduł wymaga zainstalowania pliku DLL zawierajacego wywołaniastatycznych bibliotek Genie; domyslna nazwa pliku DLL to cxAth-JbzdakGenieConnector. Plik trzeba zainstalowac do katalogu Win-dows/Sytem3241.

3.9 Moduł encore-symulacja

Moduł ten udostepnia komponent pozwalajacy na przeprowadzaniesymulacji eksperymentu Comptona. Poniewaz komponent ten ma bycudostepniany tez jako aplet przez WWW, nie powinien on polegac nazadnych zewnetrznych bibliotekach — mechanizm ładowania apletówzezwala, co prawda, na pobieranie plików JAR, jednak powinno sie mini-malizowac wielkosc pobranego apletu. Symulacja pozwala na wybranieenergii padajacych kwantów γ oraz pozwala na obserwowanie nastepu-jacych własciwosci:

Energie rozproszonego kwantu γ i elektronu w zaleznosci od kata

41O innych miejscach instalacji czytaj przypis 18

41

Page 49: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 3.10: Wyglad programu do symulacji

Przekroje czynne Ogólnie przekrój czynny okresla prawdopodobien-stwa zajscia okreslonego zdarzenia kwantowego jesli cel jest oswie-tlany strumieniem czastek o gestosci jedna czastka na jednostkepowierzchni. W symulacji zostało to uproszczone — przekrojeczynne sa modelowane wzgledna iloscia zliczen dla danego kata.

Program pozwala albo na ogladanie symulacji w zwolnieniu (jedno ani-mowane zdarzenie na sekunde), albo na szybkie wypełnianie (w celupodgladu przekrojów czynnych o duzej ilosci zliczen — 100 nieani-mowanych zdarzen na sekunde).

Program umozliwia tez eksport danych w nastepujacych formatach:

csv Eksport ilosci zliczen i energii w poszczególnych binach.

obrazek Zapisuje zawartosc panelu z symulacja jako obrazek.

Aplet

Aplet mozna obejrzec na stronie autora: http://skimbleshanks.ath.cx/inz/encore-symulacja.

3.10 Moduł dies-gui

Moduł zawiera komponenty graficzne. Jest on podzielony na dwapodmoduły: dies-gui-shared i dies-gui-onSite. Celem tego podzi-ału jest oddzielenie kodu GUI od kodu zaleznego od technicznej im-plementacji detektorów. Moduł dies-gui-shared nalezy od modułów

42

Page 50: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

genieConnector oraz encore-silniki. Wszelkie dane pobierane z de-tektorów i operacje wykonywane na silnikach sa wykonywane za posred-nictwem instancji interfejsu DetectorsModel. Model ten reprezen-tuje oba detektory spektrometryczne prowadzace pomiary dla konkret-nego kata. Do modułu dołaczono bardzo prosty mechanizm dostar-czania odpowiedniej implementacji tych interfejsów (w zaleznosci odsrodowiska uruchomienia). Mechanizm ten (wbudowany w statycznaklase DetectorModelFactory) polega na tworzeniu instancji klasyo nazwie DetectorsModelImpl, która nie jest zdefiniowana w tymmodule (ani nie jest w jego zaleznosciach!), a implemenentacje klasyo tej nazwie dostarczane sa moduł dies-gui-shared. Klasa Detector-ModelFactory na zadanie tworzy (za pomoca introspekcji42) instancjeklasy DetectorsModelImpl. Listing klasy DetectorModelFactory:

1 package cx.ath.jbzdak.diesIrae.gui.model;23 import java.lang.reflect.Constructor;4 import java.util.Collection;5 import java.util.HashMap;6 import java.util.Map;78 public class DetectorModelFactory 9

10 static DetectorsModel currentModel;1112 static Map<Integer, DetectorsModel> models = new

HashMap<Integer, DetectorsModel>();1314 static private Constructor<DetectorsModel>

modelConstructor;1516 static 17 try 18 modelConstructor =

(Constructor<DetectorsModel>)19 Class.forName(20 "cx.ath.jbzdak.diesIrae.gui.model.

DetectorsModelImpl")21 .getConstructor(Integer.class);22 catch (Exception e)23 throw new RuntimeException(e);24 25 2627 private static DetectorsModel createModel(int i)28 try 29 return modelConstructor.newInstance(i);30 catch (Exception e)

42Introspekcja to api pozwalajace na programowy dostep do załadowanych klas orazpozwalajace na wykonwanie na nich operacji

43

Page 51: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

31 throw new RuntimeException(e);32 33 3435 public static Collection<DetectorsModel> getModels()36 return models.values();37 3839 public static DetectorsModel

getCurrentDetectorsStateModel()40 if(currentModel==null)41 currentModel = createModel(-1);42 43 return currentModel;44 4546 public static DetectorsModel getModelForAngle(int

angle)47 if(!models.containsKey(angle))48 models.put(angle, createModel(angle));49 50 return models.get(angle);51 52

API refleksji jest wykorzystane w dwóch punktach: w linii 18 tworzysie obiekt Class dla klasy o nazwie DetectorsModelImpl i z niegopobiera sie obiekt reprezentujacy konstruktor, pobierajacy jeden para-metr typu Integer (reprezentujacy kat, dla którego tworzymy model).W linii 29 za pomoca instancji Constructor tworzy sie instancje klasyDetectorsModel.

Interfejsy modeli danych wygladaja nastepujaco:

1 public interface DetectorsModel 23 int getAngle();45 void startAcquiring();67 void stopAcquisition();89 boolean isAcquiring();

1011 void clearData();1213 void setPreset(long time, TimeUnit timeUnit);1415 long getTime();1617 DetectorModel getGammaModel();18

44

Page 52: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

19 DetectorModel getBetaModel();2021

1 public interface DetectorModel 23 SpectrometricResult getLastResult();45 SimpleRoiDescriptor getRoiDescriptor();67 void clearData();89 //Kalibracja toru spektrometrycznego

10 public LinearFun getCalibration();1112 public int getStartChannel();1314 public int getEndChannel();1516 void addPropertyChangeListener(@NonNull

PropertyChangeListener listener);1718 void addPropertyChangeListener(@NonNull String

propertyName, @NonNull PropertyChangeListenerpropertyChangeListener);

1920 void removePropertyChangeListener(@NonNull

PropertyChangeListener listener);2122 void removePropertyChangeListener(@NonNull String

propertyName, @NonNull PropertyChangeListenerlistener);

2324

3.11 Moduł dies-peakfinder

Moduł umozliwia wyznaczanie pików w zebranych widmach - adokładniej dopasowywanie do zaznaczonego obszaru krzywej Gaussa.

Biblioteki, z których korzysta moduł

Moduł korzysta z nastepujacych bibliotek:

JAMA Java Matrix. Implementacja macierzy w jezyku Java. Bibliotekaudostepniona jako Public Domain.

45

Page 53: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

LMA Implementacja algorytmu Levenberga–Marquarda oparta na Nu-merical Recipies43. Dostepna do uzytku niekomercyjnego.

Metoda dopasowania

Dopasowanie jest wykonywane metoda Levenberga–Marquarda.Dopasowujemy funkcje o nastepujacym wzorze:

f(x) = a · e−(x−b)2

(2c)2 + d (3.1)

Znaczenie poszczególnych parametrów:

a Wysokosc piku.

b Połozenie piku

c Odchylenie standardowe.

d Poziom odniesienia piku. Parametr ten powinien niwelowac obecnosctła pomiaru.

Poczatkowe wartosci parametrów

Jakosc poczatkowych wartosci parametrów dopasowania jest waznadla prawdidłowego działania metody Lavenberga–Marquarda. Pocza-tkowe wartosci parametrów zgadywane sa za pomoca nastepujacejmetody:

a Ilosc zliczen w najwiekszym kanale.

b Połozenie piku wyznaczone ze wzoru:∑channel_number · counts_in_channel

counts_total(3.2)

c Odchylenie standardowe wyliczone ze wzoru:√∑counts_in_channel · (channel_number −mean)2 · 1

counts_total(3.3)

d Wartoscia poczatkowa tego parametru jest 0.

43“Numerical Recipes in FORTRAN 2nd edition”, p. 676-679, ISBN 0-521-43064X,1992

46

Page 54: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rozdział 4

Dystrybucja programu

4.1 Struktura projektu

Program ma standardowa strukture systemu Maven2. Kazdy modułma nastepujace katalogi:

target Zawiera pliki powstałe podczas tworzenia projektu.

src/main/java Zawiera pliki zródłowe

src/main/resources Zawiera pliki zasobów (np. pliki .properties)

src/test/java Zawiera pliki zródłowe testów

src/test/resources Zawiera pliki zasobów (np. pliki .properties)testów

W module głównym znajduja sie podkatalogi zawierajace pozostałemoduły.

4.2 Budowanie projektu

Instalacja systemu Maven

Pakiety z mavenem sa dostepne w wiekszosci dystrybucji Linuxa.Dla Ubuntu starczy wykonac polecenie:

sudo aptitude install maven2

Reczna instalacja Mavena tez nie jest bardzo trudna. Składa sie onaz nastepujacych kroków:

instalacja plików Nalezy pobrac spakowana dystrybucje mavena zestrony http://maven.apache.org/download.html oraz rozpa-kowac ja.

ustawienie zmiennej $PATH Nalezy do zmiennej path dodac połoze-nie podkatalogu bin z katalogu mavena. Na przykład jesli plikirozpakowano do katalogu:

/home/jbzdak/.maven2

47

Page 55: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

do zmiennej path nalezy dodac katalog:

/home/jbzdak/.maven2/bin

ustawienie zmiennej $M2_HOME Nalezy stworzyc zmienna $M2_HOME,która wskazuje na katalog, w którym rozpakowano pliki.

ustawienie zmiennej $JAVA_HOME Maven, by działac prawidłowo, musibyc uruchomiony w JDK (a nie JRE), wiec jesli zmienna $JAVA_-HOME wskazuje na JRE, nalezy tak ja zmienic, by wskazywała naJDK. Ponadto — zmienna ta powinna wskazywac na JDK w wersjiprzynajmniej 1.61

Budowanie projektu

Projekt jest budowany za pomoca mavena. By go zbudowac, nalezywykonac nastepujaca sekwencje polecen:

W kalatogu modułu głównego (dies-irae):

mvn clean install

W katalogu modułu dies-assembly (dies-irae/dies-assembly):

mvn assembly:assembly

4.3 Struktura gotowego programu

W katalogu głównym gotowego znajduje sie katalog lib zawierajacywszystkie pliki jar oraz plik startowy: dies-irae.bat.

4.4 Edycja projektu

By edytowac projekt, nalezy wykonac odpowiednie kroki w zaleznosciod IDE. Przed wprowadzaniem zmian w projekcie dobrze jest zapoznacsie z systemem wersji kontroli GIT2 (polecam szczególnie [19, 20]).

Eclipse

Nalezy pobrac wtyczki obsługujace system Maven2 oraz systemwersjonowania kodu GIT.

wtyczki maven2 Znajduja sie na stronie http://m2eclipse.sonatype.org/update/. Nalezy pobrac wtyczki zaznaczone na rys 4.1.

wtyczka git Znajduje sie na stronie http://www.jgit.org/updates/.

1W szczególnosci program nie bedzie sie kompilowac (ani uruchamiac) jesli zmiennata bedzie wskazywac na gcj (gnu java compiler), gdyz srodowisko to nie jest zgodne zJava w wersji 1.6.

2Rozproszony system kontroli wersji poczatkowo opracowany na potrzeby rozwojujadra Linuxa.

48

Page 56: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 4.1: Przykładowy zrzut ekranu podczas instalacji wtyczek

By otworzyc projekt, nalezy wejsc w menu importu projektów i jakotyp projektu wybrac Existing Maven Projects (rys. 4.2). W nastepnymekranie nalezy w polu Project root directory wybrac katalog głównyprojektu, wtedy w oknie pod tym polem pojawi sie lista projektów dozaimportowania (rys. 4.3).

Netbeans

Nalezy zainstalowac wtyczki maven oraz nbgit. By otworzyc projektnalezy wybrac “Open project”, a nastepnie wybrac katalog główny dies-irae. Jesli wtyczka mavena jest zainstalowana poprawnie, katalogprojektu powinien miec odpowiednia ikone (jak na rys. 4.4).

Intelij idea

Nalezy zainstalowac wtyczki Maven integration i Git integra-tion.

Ponadto nalezy zainstalowac oprogramowanie GIT na komputerze3.By zainstalowac GITa w systemie linuksowym, powinno sie uzyc mene-dzera pakietów, na przykład dla Ubuntu nalezy wykonac polecenie:

3Eclipse i Netbrans uzywaja implementacji GITa w Javie, natomiast Intelij Ideauzywa oryginalnej wersji GITa.

49

Page 57: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 4.2: Przykładowy zrzut ekranu podczas importu projektuMavena w Eclipse

sudo aptitude install git

Dla Windowsa powinno sie skorzystac z Cygwina4

Poniewaz aplikacja ta była tworzona w tym srodowisku, otwiera sieja jak normalny projekt Idei.

4.5 Wymagania projektu

Budowa projektu

Projekt wymaga JDK5 w wersji przynajmniej 1.6.

Wymagania srodowiska uruchomienia

Projekt wymaga JRE w wersji 1.6.Nalezy wykonac instrukcje zawarte w punktach 3.7, 3.8.

4Cygwin to przypominajace Linuksa srodowisko dla Microsoft Windows, pozwala onokompilowac czesc programów napisanych dla Linuxa tak by działały one w Windowsie.Zawiera ono równiez oficjalny port GITa dla Windows.[18]

5JDK (z ang.) Java Developement Kit

50

Page 58: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 4.3: Przykładowy zrzut ekranu podczas importu projektuMavena w Eclipse

Rysunek 4.4: Przykładowy zrzut ekranu podczas otwierania projektuMavena w Netbeans

51

Page 59: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rozdział 5

Eksperyment

5.1 Cele cwiczenia

Zaznajomienie studenta z fizyka eksperymentu Comptona W tymcelu stworzono symulacje eksperymentu, która pozwala szybkozaznajomic sie z przekrojami czynnymi i zaleznosciami energety-cznymi.

Technika pomiarów koincydencyjnych Zaznajomienie studenta z za-sada (i zasadnoscia) prowadzenia pomiarów z uzyciem blokówkoincydencyjnych.

Zasady zachowania Zademonstrowanie, ze zasady zachowania ’dzi-ałaja’.

Przekroje czynne Zbadanie przekrojów czynnych na efekt Comptona.

5.2 Przykładowe sprawozdanie

Kalibracja detektorów

Pierwszym krokiem własciwej czesci pomiarów jest kalibracja de-tektorów. W bierzacym układzie detektory sa kalibrowane za pomocadwóch zródeł kalibracyjnych – zródła CS-137 oraz EU-152. Wzmacnia-cze powinny byc tak ustawione by nawyzszemu kanałowi odpowiadałaenegria ok 800keV . W ten sposób optymalnie wykorzystuje sie widocznyprzedział widma oraz uzyskuje dosc dokładna kalibracje — zródła tedaja na tym zakresie 5 widocznych pików γ.

Zapis ekranu z zebranymi widmami kalibracyjnymi znajduje sie narysunku 5.1. Surowe dane znajduja sie w tabelach: 5.1 i 5.3; wynikikalibracji znajduja sie w tabelach: 5.2 i 5.4; wypełniony panel słuacydo kalibracji programu znajduje sie na rys. 5.2.

Rachunek niepewnosci pomiarowych

Energie danego piku wyzmnaczamy ze wzoru:

E = a · kan+ b (5.1)

52

Page 60: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Widmo kalibracyjne dla detektora wykrywajacego promieniowanie β w efek-cie komptona

(b) Widmo kalibracyjne dla detektora wykrywajacego promieniowanie γ w efek-cie komptona

Rysunek 5.1: Widma kalibracyjne

Rysunek 5.2: Wypełniony panel kalibracji programu

Energia linii [keV] Numer kanału122 156245 299344 420660 791779 925

Tablica 5.1: Surowe dane kalibracyjne detektora β

53

Page 61: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

a 0.85b −11σa 3 · 10−4

σb 116

Tablica 5.2: Współczynniki kalibracji (E = ax+ b) detektora β

Energia linii [keV] Numer kanału122 157245 300344 419660 784779 917

Tablica 5.3: Surowe dane kalibracyjne detektora γ

a 0.86b −14σa 3 · 10−4

σb 105

Tablica 5.4: Współczynniki kalibracji (E = ax+ b) detektora γ

gdzie a i b to współczynniki kalibracji danego detektora, a kan to numerkanału.

Metoda rózniczki zupełnej otrzymujemy wyrazenie na niepewnoscpomiarowa:

σE = σa · kan+ σkan · a+ σb (5.2)

Wartosc σkan to odchylenie standardowe odczytane z parametrówdopasowanegj krzywej gaussa (o metodzie dopasowywania w rozdziale3.11). Poniewaz wartosc σb jest absurdalnie wysoka, postanowiono jaodrzucic.

Zebrane wyniki pomiarów

Tabela 5.5 zawiera wyniki zebrane podczas pomiarów. Kazdy wiersztej tabeli zawiera wyniki dla jednego z katów, pierwsze trzy kolumnypodaja wyniki dla detektora γ, nastepne trzy dla β; ostatnie dwie kolunyzawieraja zsumowane wyniki.

Wyjasnienie oznaczen (litere X nalezy podmienic na odpowiednio γlub β:

σkanX[kan] Odchylenie standardowe krzywej gaussa odczytane z dopa-sowania. Patrz wzór 5.2. Jednostka wartosci z tej kolumny sakanały detektora.

54

Page 62: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

kat Eγ σkanγ σEγ Eβ σkanγ σkanβ Ecalk σEcalk

[keV] [kan] [keV] [keV] [kan] [keV] [keV] [keV]0 594 40 34 ?? ?? ?? ?? ??30 460 30 25 182 21 18 643 4360 403 131 111 226 81 70 630 18190 299 49 41 341 52 45 641 86120 230 25 21 415 31 27 646 48140 203 21 17 440 23 20 644 38

Tablica 5.5: Zbiorcza tabela wyników

EX[keV] Energia piku

σEX[keV] Niepwnosc energii piku, wyznaczona ze wzoru 5.2. Wartoscipotrzebne do wyznaczenia wyniku znajduja sie kolumnie σkanX[kan]i tabelach 5.4 i 5.2.

Ecalk[keV] Całkowita energia. Suma odpowiednich kolumn.

σEcalk[keV] Niepewnosc sumy energii z obu detektorów.

Zebrane widma znajduja sie na stronach 58 — 63.

Dyskusja wyników

Duze błedy widoczne dla niskich katów wynikaja geometrii pomiaru(patrz 5.3).

Dla zera stopni nie udało sie zlokalizowac piku w detektorze β —wynika to z faktu, ze obcina sie w detektorach najmniejsze kanały.

Zasada zachowania energii

Wyniki (w ramach niepewnosci pomiaru) zgadzaja sie z zasada za-chowania energii. Jednak fakt, ze we wszystkich pomiarach wartoscsumy energii czastek była mniejsza niz oczekiwane 660keV wskazuje namozliwosc błedu systematycznego.

Zgodnosc z symulacjami

Wykresy 5.10 i 5.9 przedstawiaja porównanie zmierzonej energiipiku z energia wymodelowana za pomoca przekształconego wzoru 1.6:

E′ =E0

1 + E0mec2

(1− cosθ)(5.3)

Dla niskich katów — 0 i 30 stopni — ze wzgledu na duza szerokosckatowa oraz liczne przypadkowe koincydencje wyniki sa rozbieznez przewidywaniami. By owa rozbieznosc wyeliminowac nalezałobypoprawic geometrie pomiarów

55

Page 63: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Dla detektora γ wyniki, poza katem 0, wyniki zebrane zgadzaja siez wymodelowanymi z granciach niepewnosci pomiarowych. Dla katówpowyzej 30 stopni zgadzaja sie z nimi bardzo dobrze. Dla detektoraβ natomiast widac lekka tendencje zanizania wyników zmierzonych,wzgledem wymodelowanych. Wyniki obu detektorów sa zgodne, w ra-mach niepewnosci pomiarowych, z przewidwyaniami teoretycznymi.

5.3 Peryspektywy rozwoju

Poprawa geometrii pomiarów

Detektory sa zbyt blisko od siebie i od zródła ma to nastepujacekonsekwencje:

Duza szerokosc katowa detektorów jest ona rzedu 10 − 15. Powo-duje to na przykład niemozliwosc dokładnych pomiarów dla 0.

Przypadkowe koincydencje dla niskich katów Drugi detektor mozerejestrowac koincydencje powodowane złapaniem w detektorze γkwantu pochodzacego ze zródła

Uwypukla obietosciowa nature detektorów Model zjawiska Comptonazakłada, ze zdarzenie zajdzie w jednym punkcie przestrzeni, pod-czas gdy zjawisko moze zajsc w dowolnym miejscu detektoramajacego niemała objetosc. Dodatkowo obniza to dokładnoscustalenia kata.

Oddalenie detektorów od siebie wymagało by natomiast o wielesilniejszych zródeł promieniotwórczych.

Pomiary dwuparametryczne

Bierzace oprzyrzadowanie umozliwia zbieranie pojedynczych widm,tj. punkt danych zawiera zliczenie jednego detektora, podczas gdyw urzadzeniach wielopparametrycznych punkt danych zwiera zliczeniakilku detektorów. Po zastosowaniu urzadzenia dwuparametrycznegow eksperymencie, mozna wykreslic pomiary z jednego detektora wfunkcji pomiarów z drugiego. Eksperyment Comptona byłby w tymwzgledzie bardzo dydaktyczny, poniewaz jego dwuparametryczne widmojest dosc proste i ma przejrzysta interpretacje; na widmie tym powin-nismy zobaczyc prosta.

Pierwsze testy urzadzenia dwuparametrycznego zostały juz wyko-nane i dały zadowalajace wyniki. Przykładowe wyniki załaczone narysunkach: 5.11 i 5.12.

Do pełnego wdrozenia urzadzenia dwumarametrycznego nalezywykonac nastepujace prace:

Oprogramowanie urzadzenia w Javie W tej chwili urzadzenie jestoprogramowane w VisualBasicu.

Opracowanie wizualizacji danych Załaczone obrazki powstały w Root’cie.Wizualizacje nalezałoby wykonac w Javie.

56

Page 64: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Właczenie comptona do internetowego laboratorium fizyki

Eksperyment Comptona zarazem jest eksperymentem bardzo dydak-tycznym, jak i w pełni zautomatyzowanym — po dokonaniu kalibracjinie wymagana jest fizyczna ingerencja w układ — wiec naturalnymkrokiem zdaje sie właczenie go do Internetowego Laboratorium Fizyki.

57

Page 65: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β, zaznaczony obszar patrz 5.2

(b) Detektor γ

Rysunek 5.3: Widma dla kata 0

58

Page 66: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β

(b) Detektor β, wesja bez marker a ROI (dla czytelnosci)

(c) Detektor γ

Rysunek 5.4: Widma dla kata 30

59

Page 67: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β

(b) Detektor γ

Rysunek 5.5: Widma dla kata 60

60

Page 68: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β

(b) Detektor γ

Rysunek 5.6: Widma dla kata 90

61

Page 69: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β

(b) Detektor γ

Rysunek 5.7: Widma dla kata 120

62

Page 70: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

(a) Detektor β

(b) Detektor γ

Rysunek 5.8: Widma dla kata 140

Rysunek 5.9: Porównanie wartosci modelowych i otrzymanych dladetektora γ

63

Page 71: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Rysunek 5.10: Porównanie wartosci modelowych i otrzymanych dladetektora β

Rysunek 5.11: Nieoczyszczone widmo dwuparametryczne w ekspery-mencie Comptona. Wyrkes wykonany przez mgr inz. Pawła Hładkiego.

Rysunek 5.12: Oczyszczone widmow dwuparametryczne w eksperymen-cie Comptona. Wyrkesy wykonane przez mgr inz. Pawła Hładkiego.

64

Page 72: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Bibliografia

[1] Janusz Araminowicz, Krystyna Małuszynska, Marian Przytuła;“Laboratorium Fizyki Jadrowej”; Warszawa 1978 PWN

[2] M. H. Pirenne; “The diffraction of X-Rays and elec-trons by free molecules”; Cambrige University Press1946; Dostepne w serwisie Google Books pod adresem:http://books.google.pl/books?id=OIM6AAAAMAAJ&q=H.+Pirenne%3B+%60%60The+diffraction+of+X-Rays+and+electrons+by+free+molecules%27%27&dq=H.+Pirenne%3B+%60%60The+diffraction+of+X-Rays+and+electrons+by+free+molecules%27%27&lr=&ei=CaJIS_nKApTIzAS0i-z0DQ&client=firefox-a&cd=1 (adres skrócony:http://tinyurl.com/diffractionByMolecules).

[3] Canberra; “Model 3125 Dual 0-5kV HVPS user’s manual”;

[4] Canberra; “Model 2007P PM Tube Base/Preamp user’s manual”;

[5] Canberra; “Model 802 Scincillation Derectors user’s manual”;

[6] Canberra; “Model 2007P Spectroscopy Amplifier user’s manual”;

[7] Canberra; “Multiport II Multichannel Analyzer user’s manual”;

[8] Strona domowa projektu Apache Maven;http://maven.apache.org/what-is-maven.html; dostep z dnia25-10-2009r.

[9] Strona domowa projektu Apache Maven; http://maven.apache.org/; dostep z dnia 21-09-2009r.

[10] Tim O‘Brien, Jason von Zyl i inni; Maven the definitiveGuide, wersja 0.71; O‘Reily; dostepne w internecie podadresami: http://www.sonatype.com/maven/documentation/download-book?file=books/maven-definitive-guide.pdf,oraz kopia na moim serwerze http://jbzdak.ath.cx/inz/maven-definitive-guide.pdf;

[11] POM Reference; http://maven.apache.org/pom.html; dostep zdnia 21-09-2009r.

[12] Specyfikacja Java Beans wersja 1.01; http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html

65

Page 73: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

[13] Canberra Software; S560 Programming Library User’s Manual;materiały dostarczone przez producenta; tłumaczenie własne.

[14] Sun Microsystems; Java Native Interface Specification;http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/design.html#wp715; dostep z dnia 21-09-2009r.

[15] Strona projektu JNA; https://jna.dev.java.net/; dostep zdnia 21-09-2009r.

[16] A. H. Compton; Wykład wygłoszony podczas otrzymywa-nia ngrody Nobla; Dostepne w internecie pod adresem:http://nobelprize.org/nobel_prizes/physics/laureates/1927/compton-lecture.pdf; dostep z dnia 17-10-2009r.

[17] David Resnick, Robert Halliday; “Fizyka 2”; Warszawa 2001 PWN;ISBN 83-01-0924-2

[18] Strona domowa projektu Cygwin; http://www.cygwin.com/;dostep z dnia 25-10-2009r.

[19] O projekcie git; http://git-scm.com/about; dostep z dnia 25-10-2009r.

[20] Wielu autorów; “Git community book”; http://book.git-scm.com/; dostep z dnia 25-10-2009r.

66

Page 74: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Spis rysunków

1.1 Geometria zderzenia comptonowskiego. Opracowanie własne. 11.2 Zaleznosci energetyczne i katowe dla padajacego kwanta

gamma o energii 0.01MeV . Opracowanie własne. . . . . . . . 41.3 Zaleznosci energetyczne i katowe dla padajacego kwanta

gamma o energii 0.660MeV . Opracowanie własne. . . . . . . 51.4 Zaleznosci energetyczne i katowe dla padajacego kwanta

gamma o energii 1,13MeV . Opracowanie własne. . . . . . . . 61.5 Przekroje czynne i rozkłady katowe za [1, str 65] . . . . . . . 61.6 Schemat oryginalnego układu pomiarowego Comptona [2, rys

16] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.7 Wyniki Comptona[2, rys 16] . . . . . . . . . . . . . . . . . . . 7

2.1 Geometria eksperymentu [1] . . . . . . . . . . . . . . . . . . . 82.2 Zdjecie układu . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Schemat elektronicznej czesci układu. . . . . . . . . . . . . . 10

3.1 Schemat UML klasy EngineDriver . . . . . . . . . . . . . . . . 233.2 Schemat UML klasy CommandDriver . . . . . . . . . . . . . . 243.3 Klasa PositionDriver . . . . . . . . . . . . . . . . . . . . . . . . 263.4 Klasa CalibratedDriver . . . . . . . . . . . . . . . . . . . . . . 263.5 Schemat UML klasy SimpleConnector . . . . . . . . . . . . 363.6 Schemat stanów klasy SimpleConnector . . . . . . . . . . . 363.7 Schemat stanów klas zawierajacych wyniki pomiarów spek-

trometrycznych . . . . . . . . . . . . . . . . . . . . . . . . . . 373.8 Schemat UML klasy ErrorDescription . . . . . . . . . . . . 393.9 Schemat UML klasy GenieConnector . . . . . . . . . . . . . 413.10Wyglad programu do symulacji . . . . . . . . . . . . . . . . . 42

4.1 Przykładowy zrzut ekranu podczas instalacji wtyczek . . . . 494.2 Przykładowy zrzut ekranu podczas importu projektu Mavena

w Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504.3 Przykładowy zrzut ekranu podczas importu projektu Mavena

w Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.4 Przykładowy zrzut ekranu podczas otwierania projektu Mavena

w Netbeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5.1 Widma kalibracyjne . . . . . . . . . . . . . . . . . . . . . . . 535.2 Wypełniony panel kalibracji programu . . . . . . . . . . . . . 535.3 Widma dla kata 0 . . . . . . . . . . . . . . . . . . . . . . . . . 58

67

Page 75: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

5.4 Widma dla kata 30 . . . . . . . . . . . . . . . . . . . . . . . . 595.5 Widma dla kata 60 . . . . . . . . . . . . . . . . . . . . . . . . 605.6 Widma dla kata 90 . . . . . . . . . . . . . . . . . . . . . . . . 615.7 Widma dla kata 120 . . . . . . . . . . . . . . . . . . . . . . . . 625.8 Widma dla kata 140 . . . . . . . . . . . . . . . . . . . . . . . . 635.9 Porównanie wartosci modelowych i otrzymanych dla detek-

tora γ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.10Porównanie wartosci modelowych i otrzymanych dla detek-

tora β . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.11Nieoczyszczone widmo dwuparametryczne w eksperymencie

Comptona. Wyrkes wykonany przez mgr inz. Pawła Hładkiego. 645.12Oczyszczone widmow dwuparametryczne w eksperymencie

Comptona. Wyrkesy wykonane przez mgr inz. Pawła Hładkiego. 64

68

Page 76: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

Załaczniki

Słownik terminów programistycznych

Własnosc (z ang. property) jakiegos obiektu w rozumieniu specyfikacjiJava Beans.

Własnosc zawiazana (z ang. bound property) jakiegos obiektu w rozu-mieniu specyfikacji Java Beans — tj. własnosc, której zmianaspowoduje wywołanie PropertyChangedEventa.

Oznaczenia na diagramach UML

«SAD call» Oznacza to, iz dana funkcja wykonuje wywołanie funkcjiSAD (o funkcjach SAD na stronie: 27). Gdy tym stereotypem oz-naczono własnosc, oznacza to, ze funkcje set lub/i get wywołujametody SAD.

«bound» Oznacza, ze dana własnosc jest własnoscia zwiazana (patrz5.3).

«final» Oznacza, ze dane pole klasy jest zadeklarowane jako final.Na własnosci (patrz 5.3) oznacza równiez, ze dana własnosc jesttylko do odczytu.

«immutable» Na klasie oznacza, ze instancje danej klasy sa niezmi-enne — tj. albo nie posiadaja stanu, albo ich stan jest niezmienny.

Generowanie bibliotek dll ze statycznych

Autor nie znalazł bezpłatnych narzedzi konwertujacych bibliotekistatyczne na biblioteki dll. Nalezy zatem recznie stworzyc plik dll. Na-jpierw nalezy stworzyc w Visual Studio1 projekt dll. Nastepnie nalezyskopiowac do niego konieczne pliki nagłówkowe oraz pliki bibliotekstatycznych z biblioteki S560.

Wreszcie nalezy stworzyc same pliki tworzace dynamiczne opakowa-nie dla statycznej biblioteki. Nalezy dla kazdej funkcji SAD stworzycfunkcje opakowujaca, tj. dla funkcji:

1Canberra sugeruje konkretna wersje tego srodowiska i kompilatora, jednakponiewaz sugerowana jest przestarzała wersja, która nie jest dostepna za darmo.Postanowiłem uzywac darmowego Visual Studio 2008 Express.

69

Page 77: Oprogramowanie ćwiczenia "Badanie Efektu Comptona"

SADENTRY SadCreateDSC(void * pstCfg, HMEM *phDSC, FLAG fAdv, HWND hWin );

nalezy stworzyc deklaracje funkcji (w pliku .h:

SADENTRY DLL_WRAPPER_SadCreateDSC(void * pstCfg,HMEM * phDSC, FLAG fAdv, HWND hWin);

oraz jej definicje (w pliku: .cpp):

extern "C"__declspec(dllexport) short

DLL_WRAPPER_SadCreateDSC(void * pstCfg, HMEM *phDSC, FLAG fAdv, HWND hWin)return SadCreateDSC(pstCfg, phDSC, fAdv, hWin);

Uwaga: nazwy wygenerowanych funkcji Jednym z problemów, najaki mozna sie natknac podczas generowania dll, jest problem deko-rowania nazw polegajacy na tym, ze kompilatory dodaja specjalne deko-racje do nazw wygenerowanych funkcji w skompilowanych plikach.

Po pierwsze kompilatory C++, by umozliwic przeładowywanie nazwdodaja pewne dekoracje. Nalezy wiec definicje funkcji opakowanychumiescic wewnatrz deklaracji:

extern "C"

by ten rodzaj dekoracji wyłaczyc.Ponadto sam Windows domyslnie dokonuje dekoracji nazw. Dlatego

tez w opcjach kompilatora nalezy wyłaczyc wszelkie dekoracje nazw.Uwaga: makro SADENTRY którym dekorowane jest kazde wywołaniefunkcji SAD, zawiera deklaracje dekorowania nazw, która spowodujewłaczenie dekorowania równiez wtedy gdy w kompilatorze były onewyłaczone, nalezy zatem nie zostawic makra SADENTRY przed wygen-erowanymi funkcjami. Makro to jest definiowane jako:

#define SADENTRY short WINAPI

wiec zupełnie bezpiecznie mozna zamienic je na short — typ zwracanyprzez kazda metode SAD.

Do wygenerowania samych plików zawierajacych funkcje opakowu-jace mozna wykorzystac klase: WrapperGenerator, która jest dostepnaw projekcie w module wrapper-generator2.

By stworzona biblioteka zawierała wszystkie metody potrzebne dodziałania modułu genie-connector, nalezy stworzyc funkcje opako-wujace dla wszystkich metod z plików Sad.h i Utility.h.

2Mozna ja tez pobrac ze strony: http://stackoverflow.com/questions/845183/

70