Środowisko programistyczne GEANT4

Podobne dokumenty
Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wstęp do Programowania 2

TEMAT : KLASY POLIMORFIZM

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Część 4 życie programu

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

PARADYGMATY PROGRAMOWANIA Wykład 4

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Język C++ Różnice między C a C++

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

I - Microsoft Visual Studio C++

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Projektowanie klas c.d. Projektowanie klas przykład

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Mechanizm dziedziczenia

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Plik klasy. h deklaracje klas

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wstęp do programowania obiektowego, wykład 7

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Język C++ wykład VIII

Programowanie obiektowe w C++ Wykład 12

Programowanie i struktury danych

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Szablony klas, zastosowanie szablonów w programach

Zaawansowane programowanie w języku C++ Klasy w C++

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie 2. Język C++. Wykład 9.

C++ wprowadzanie zmiennych

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Szablon klasy std::vector

Podstawy programowania skrót z wykładów:

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Operacje wejścia/wyjścia (odsłona druga) - pliki

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie (C++) NI 5

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Laboratorium 1 - Programowanie proceduralne i obiektowe

Obsługa wyjątków. Język C++ WW12

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Programowanie 2. Język C++. Wykład 3.

Wstęp do programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

Podstawy Programowania Obiektowego

Szablony funkcji i szablony klas

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie Obiektowe i C++

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Listy powiązane zorientowane obiektowo

Technologie cyfrowe semestr letni 2018/2019

Wstęp do programowania

Programowanie obiektowe

Wykład 8: klasy cz. 4

Techniki Programowania wskaźniki 2

Owad():waga(1),jadowitosc(false) {cout<<"konstruktor domyslny owada\n";}

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Materiały do zajęć VII

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Dziedziczenie jednobazowe, poliformizm

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

TEMAT : KLASY DZIEDZICZENIE

Wykład 9: Polimorfizm i klasy wirtualne

Do czego służą klasy?

Programowanie w języku C++

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Technologie cyfrowe semestr letni 2018/2019

Polimorfizm, metody wirtualne i klasy abstrakcyjne

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Transkrypt:

Środowisko programistyczne GEANT4 Leszek Adamczyk Wydział Fizyki i Informatyki Stosowanej Akademia Górniczo-Hutnicza Wykłady w semestrze zimowym 2013/2014

Informacje wstępne Kurs oparty jest na: dokumentacji Geant4 http://geant4.cern.ch/support/ gettingstarted.shtml przykładach zawartych w dystrybucji GEANT4 $G4INSTALL/examples kursach dostępnych na stronach GEANT4 http://geant4.cern.ch/support/ training.shtml Strona kursu: http://home.agh.edu.pl/~leszekad/dydaktyka/ wfiis_geant4_2013

Informacje wstępne wersja 4.9.4.p01 GEANT4 jest zainstalowana na: komputerach w pracowniach komputerowych na serwerze fatcat na zajęciach będziemy korzystać z wersji 4.9.6.p02 dostępnej na "dowolnej"maszynie przez CVMFS Cern Virtual Machine File system instrukcja instalacji na stronie przedmiotu zachęcamy do instalacji wersji4.9.6.p02 na prywatnych komputerach. zaliczenie kursu na podstawie projektów (aplikacja GEANT4 + analiza wyników)

Wymagania programistyczne Unix/Linux podstawowe polecenia systemowe edycja tekstów korzystanie ze zmiennych środowiskowych kompilacja i uruchamianie programów Znajomość podstawowych cech programowania obiektowego: abstrakcja, hermetyzacja, polimorfizm, dziedziczenie Podstawowa znajomość C++ tworzenie aplikacji GEANT4 to pisanie kodu w C++ Analiza i prezentacja wyników symulacji poznamy podstawowe możliwości pakietu ROOT

C++: Wbudowane typy danych char - typ znakowy int - typ całkowitoliczbowy float - typ zmiennoprzecinkowy double - typ zmiennoprzecinkowy podwójnej precyzji bool - typ boolowski o wartościach true, false specyfikatory long,short,signed,unsigned GEANT4 G4int,G4float,G4double,G4bool,G4long

C++: Strumienie wejścia, wyjścia #include <iostream> using namespace std; int main () int liczba; cout << "Podaj liczbę parzystą: " ; cin >> liczba; if (!(liczba%2) ) cout << liczba << endl; else cerr << "Błąd: " << liczba << " nie jest liczbą parzystą" << endl; return 0; GEANT4 : G4cout, G4cin, G4cerr, G4endl

C++: Przestrzeń nazw #include <iostream> int main () int liczba; std::cout << "Podaj liczbę parzystą: " ; std::cin >> liczba; if (!(liczba%2) ) std::cout << liczba << std::endl; else std::cerr << "Błąd: " << liczba << " nie jest liczbą parzystą" << std::endl; return 0; zakres::obiekt (szukaj obiektu poza lokalna przestrzenia)

C++: Rzutowanie typów rzutowanie niejawne (niezalecane) Typ1 obiekt1; Typ2 obiekt2 = wartość;... obiekt1 = obiekt2; rzutowanie wymuszone (niezalecane) obiekt1 = (Typ1) obiekt2; operator static_cast (zalecane) obiekt1 = static_cast<typ1> (obiekt2);

C++: Typ tekstowy String #include <string>... string text1("jeden ") string text2; cin >> text2; text1 = text1 + " " + text2; cout << text1 << endl; text1.size(); text1.compare(text2) text1.find(text2) GEANT4 - G4string

C++: Przeciażanie funkcji int suma( int, int) double suma( double, double) double suma( double) int suma( int a, int b) return a+b; double suma( double a, double b) return a+b; double suma( double a) return a+a;

C++: Wskaźniki int liczba = 5; int* pliczba; pliczba = &liczba; cout << liczba << endl // zwraca 5 cout << pliczba << endl // zwraca adres w pamięci cout <<*plliczba << endl // zwraca 5 *pliczba = 10; cout << liczba << endl // zwraca 10 int tablica[5] = 1,2,3,4,5; int *ptablica = tablica // to samo ptablica=&tablica[0]; cout << tablica[1] << endl // zwraca 2 cout << *(ptablica+1) << endl // zwraca 2 f(tablica) // do funkcji przekazany jest adres tablicy nigdy jej kopia

C++: Referencja Referencja - inna nazwa obiektu int liczba = 5; int &rliczba=liczba; cout << liczba << endl // zwraca 5 cout << rliczba << endl // zwraca 5 rliczba = 10; cout << liczba << endl // zwraca 10 Referencja nie może być ponownie przypisana int liczba2 = 20; rliczba = liczba2 cout << liczba << endl // zwraca 20

C++: Przekazywanie argumentów do funkcji void fprzezwartość ( Typ obiekt) obiekt =... // tworzy i modyfikuje lokalną kopię void fprzezwskaźnik ( Typ * obiekt) *obiekt =... void fprzezreferencje ( Typ & obiekt) obiekt =...

C++: Argumenty lini poleceń i zmienne środowiskowe program arg1 arg2 int main (int argc, char *argv[], char *env[])... argc - ilość argumentów + 1 argv[0] - nazwa programu argv[1] - argument pierwszy... env[0] - pierwsza zmienna srodowiskowa...

C++: Argumenty lini poleceń i zmienne środowiskowe #include <iostream> #include <string> #include <cstdlib> using namespace std; int main (int argc, char *argv[], char *env[]) if ( argc >= 2 ) double a = atof ( argv[1] ); int b = atoi ( argv[2] ); string n = "PWD="; int i =0; do if ( n.compare(0, n.size(), env[i], n.size()) == 0) cout << "Program uruchomiono z: "; cout << env[i] + n.size() << endl; i++; while ( env[i]!= NULL ) ; return 0;

C++: Zasięg i czas życia zmiennych Obiekty globalne i statyczne sa tworzone w chwili uruchomienia programu i żyja do jego końca; Pozostałe obiekty sa tworzone w chwili napotkania ich definicji i niszczone gdy ich nazwa opuszcza zasięg. int zmiennaglobalna; int main ()... int zmiennalokalna; void f( void) int zmiennalokalna; static int licznik = 0; licznik++; cout << "Funkcja wywołana po raz: " << licznik << endl;

C++: Operatory new i delete new - przyporzadkowuje dynamicznie pamięć; delete - zwalnia przydzielona pamięć; wymagaja stosowania wskaźników; pamięcia jawnie zarzadza programista double *p = new double;... delete p; double *p = new double[20];... delete [] p; cout << "Podaj rozmiar tablicy: "; int rozmiar; cin >> rozmiar double *p = new double[rozmiar]; double r[rozmiar]; // błąd -> const int rozmiar = 5;... delete [] p; Uwaga na wyciek pamięci!

C++: Wzorce(szablony) funkcji Wzorzec umożliwia jednoczesna definicję funkcji dla wielu typów argumentów. template <typename T> void pisz (T *t, int n ) for( int i=0; i<n; i++) T m = t[i]; cout << m << endl; int main() int tabi[] = -2, -1, 1, 2, 4; double tabd[] = -2.5, -1.5, 1.5, 2.5,; pisz (tabi,5); pisz (tabd,4);

C++: Klasy Klasy umożliwiaja tworzenie własnych typów danych i funkcji operujacych na nich. Składowe klasy: dane inaczej pola; funkcje inaczej metody; Deklaracja klasy: class Klasa double x; double y; double suma ( void ); ;

C++: Klasy Klase dzielimy na dwie główne części: publicznego zbioru pól i metod (interfejs publiczny) prywatnego zbioru pól i metod (implementacja) class Klasa public: // interfejs publiczny private: // prywatna implementacja ; Użytkownik klasy programuje korzystajac z interfejsu publicznego; Zmiana prywatnej implementacji przy zachowaniu interfejsu publicznego powoduje, że kod w którym go stosujemy nie wymaga zmian; GEANT4: Budowa aplikacji polega na modyfikacji implementacji przy zachowaniu struktury interfejsu publicznego, dzięki czemu jadro GEANT a poprawnie obsługuje zmodyfikowane klasy.

C++: Tworzenie obiektu i dostęp do pól klasy class Klasa public: double x; double y; private: double z ; Klasa k; Klasa *p = new Klasa();... k.x = 2.0; p->y = 3.0; k.z = 4.0; // błąd z jest polem prywatnym

C++: Podział kodu klasy na pliki Klasa.h: #include <iostream> class Klasa public: double x; double y; void pisz( void); ; Klasa.cpp: #include "Klasa.h" void Klasa::pisz(void) std:cout << "Pola klasy: " << a << "," << b << std:endl;

C++: Dziedziczenie klasę z której tworzymy(wyprowadzamy) nowa klasę nazywamy klasa bazowa; klasę wyprowadzoną z klasy bazowej nazywamy klasa pochodną GEANT4: wszystkie klasy bazowe maja nazwę: G4KlasaBazowa class KlasaPochodna : public G4KlasaBazowa... klasa pochodna może być klas a bazową innych klas; klasa pochodna nie ma dostępu do składowych prywatnych swojej klasy bazowej.

C++: Dziedziczenie: Przykład class Baza public: Baza( void ) cout << "Konstruktor klasy bazowej" << endl; ~Baza( void ) cout << "Destruktor klasy bazowej" << endl; ; double x,y; class Pochodna : public Baza public: Pochodna( void ) cout << "Konstruktor klasy pochodnej" << endl; ~Pochodna( void ) cout << "Destruktor klasy pochodnej" << endl; ; double z; int main() Pochodna o; o.x=1.0; o.z=2.0; return 0; Konstruktor klasy bazowej Konstruktor klasy pochodnej Destruktor klasy pochodnej Destruktor klasy bazowej

C++: Dziedziczenie: modyfikacja interfejsu publicznego class Baza public: void f( void )... ; class Pochodna : public Baza public: void f( void )... ; int main() Baza ob; Pochodna op; ob.f(); // f z Baza op.f(); // f z Pochodna... Baza *pb = &ob; bp->f(); // f z Baza pb = &op; bp->f(); // f z Baza Pochodna *pp = &op; pp->f(); // f z Pochodna

C++: Dziedziczenie: funkcje wirtualne class Baza public: virtual void f( void ) ; class Pochodna : public Baza public: void f( void )... ; int main() Baza ob; Pochodna op; ob.f(); // f z Baza op.f(); // f z Pochodna... Baza *pb = &ob; bp->f(); // f z Baza pb = &op; bp->f(); // f z Pochodna Pochodna *pp = &op; pp->f(); // f z Pochodna

C++: Klasa abstrakcyjna funkcja wirualna może być zadeklarowana jako czysto wirtualna (bez implementacji) virtual void f (void) = 0; klasę która deklaruje przynajmniej jedna funkcję czysto wirtualna nazywamy klasa abstrakcyjna; w programie nie można utworzyć obiektów klasy abstarkcyjnej; implementacji funkcji czysto wirtualnych dostarczaja dopiero klasy pochodne; klasa abstrakcyjna służy do zadania części interfejsu klas pochodnych; GEANT4: jadro GEANT a korzysta z interfejsu zadanego przez klasy abstarkcyjne; GEANT4: wszystkie klasy abstarkcyjne maja nazwę: G4VKlasaAbstrakcyjna

C++: Kolekcje standardowe Kolekcjami nazywamy klasy przechowujace inne obiekty vector - kolekcja danych typu uporzadkowanego Zastosowanie wektorów: dostęp do elementów kolekcji poprzez ich indeks; iteracja po elementach w dowolnym kierunku; dodawanie i usuwanie elementów z końca kolekcji. #include <vector> Przykładowa deklaracja: vector<typdanych> w(100); Dostęp do elementów kolekcji: w[5] = 11; z = w.at(5);

C++: Metody klasy vector w.size(); // ilość elementów w kolekcji w.empty() // true jeśli kolekcja pusta w.clear(); // usuwa wszystkie elementy w.push_back (10); // dodaje do końca kolekcji 10 w.pop_back(); // usuwa ostatni element z kolekcji w.front(); // pierwszy element w.back(); // ostatni element Iterator - wskaźnik, ułatwiający pracę z kolekcjami. vector<typdanych>::iterator it = w.begin(); while ( it!= w.end() ) *it =... // zmiana wskazywanej wartości it++; // przejście do następnego elementu

C++: Kolekcja typu map Mapa składa się z par (klucz, wartość). Mapa umożliwia dostęp do wartości pary poprzez wartość klucza. #include <map> Przykładowa deklaracja: map<typklucza, TypWartości> w; map<string, int> indeks; indeks["x"] = 12345; indeks["y"] = 54321; cout << indeks["x"] << endl;

C++: Iterator kolekcji map Iterator mapy wskazuje na pary. Para jest obiektem posiadajacym pola first (klucz) oraz second (wartość) map<string, int> indeks; indeks["x"] = 12345; indeks["y"] = 54321; map<string, int >::iterator it = indeks.begin(); while ( it!= indeks.end() ) cout << (*it).first << " - " << (*it).second << endl; it++; // przejście do następnego elementu mapy it = indeks.find("y"); indeks.erase("x");