Podstawy ROOTa. Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński ROOT 1/26



Podobne dokumenty
Praktyki studenckie na LHC IFJ PAN, 5 lipca 2017

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

Środowisko do Analizy Danych Obiektowo Orientowane. Izabela Ciepał Instytut Fizyki Jądrowej PAN Kraków

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Pakiet ROOT. prosty generator Monte Carlo. Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauki

Wstęp do systemu Linux

Cząstki elementarne i ich oddziaływania PROJEKT 2016 Obserwacja mezonów powabnych i dziwnych analiza danych zebranych w eksperymencie LHCb

Programowanie obiektowe

Qtiplot. dr Magdalena Posiadała-Zezula

Wstęp do systemu Linux

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Usługi Informatyczne "SZANSA" - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, Bielsko-Biała

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

ROOT III (I/O+TTree+TNtuple)

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

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

Programowanie: grafika w SciLab Slajd 1. Programowanie: grafika w SciLab

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

Informatyka I : Tworzenie projektu

VBA praca z makrami w Excelu: piszemy kod! Ulepszamy program! 0. Parę uwag o samym edytorze

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie strukturalne i obiektowe

Fizyka cząstek elementarnych warsztaty popularnonaukowe

Programowanie - wykład 4

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

ROZDZIAŁ 11 - DODATKI SPIS TREŚCI

W tym celu korzystam z programu do grafiki wektorowej Inkscape 0.46.

1 Powtórzenie wiadomości

Tworzenie prezentacji w MS PowerPoint

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

ANALIZA DANYCH SHOWERA. Narzędzia na wiązkę dla Shower Operatora

SERWER AKTUALIZACJI UpServ

1. Opis okna podstawowego programu TPrezenter.

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

KATEGORIA OBSZAR WIEDZY

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Co nie powinno być umieszczane w plikach nagłówkowych:

Viszio. SZARP v3.1. Adam Smyk. 1. Uruchamianie programu. SZARP

Instrukcja obsługi programu Do-Exp

INSTRUKCJA OBSŁUGI ⓫ Dodatki

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

Ćwiczenie 1. Przygotowanie środowiska JAVA

PARADYGMATY PROGRAMOWANIA Wykład 4

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

7. Pętle for. Przykłady

SERWER AKTUALIZACJI UpServ

Gromadzenie danych. Przybliżony czas ćwiczenia. Wstęp. Przegląd ćwiczenia. Poniższe ćwiczenie ukończysz w czasie 15 minut.

Opis preprocesora graficznego dla programu KINWIR -I

1 Podstawy c++ w pigułce.

JAK ZAPROJEKTOWAĆ WYGLĄD STRONY INTERNETOWEJ W KREATORZE CLICK WEB?

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Visual Studio instalacja

POMOC / INSTRUKCJA OBSŁUGI

Podstawowe operacje graficzne.


Grafika w Matlabie. Wykresy 2D

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu.

Maskowanie i selekcja

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

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Kolory elementów. Kolory elementów

Rozciąganie histogramu

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

1 Podstawy c++ w pigułce.

Instrukcja do ćwiczeń

Edytor tekstu OpenOffice Writer Podstawy

Wprowadzenie do języka Java

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Pokaz slajdów na stronie internetowej

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Podstawy Programowania Podstawowa składnia języka C++

Język C, tablice i funkcje (laboratorium)

Konfigurowanie modułu BK9050 firmy Beckhoff wprowadzenie

Grafika komputerowa. Zajęcia IV

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

CPT-CAD - Program do tworzenia dokumentacji geologicznej i geotechnicznej

FAQ: /PL Data: 3/07/2013 Konfiguracja współpracy programów PC Access i Microsoft Excel ze sterownikiem S7-1200

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Sylabus Moduł 4: Grafika menedżerska i prezentacyjna

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wizualizacja funkcji w programie MATLAB

Wstęp do Programowania, laboratorium 02

GNUPLOT Wprowadzenie. dr inż. Marzena Tefelska Wydział Fizyki Politechnika Warszawska 2015

Budowa i generowanie planszy

Powtórka algorytmów. Wprowadzenie do języka Java.

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

Visual Basic for Applications Wprowadzenie, makra

PyX jest pakietem Pythona do grafiki wektorowej. Pozawala zatem tworzyd pliki EPS oraz PDF.

Transkrypt:

M. Trzebiński ROOT 1/26 Podstawy ROOTa Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015

Dane w eksperymentach fizyki wysokich energii M. Trzebiński ROOT 2/26 W wyniku zderzenia cząstek na akceleratorze mogą powstać inne cząstki. Pojedyncze zderzenie nazywamy przypadkiem. Przykład: W akceleratorze LHC krążą w przeciwnych kierunkach dwie paczki po 10 11 protonów.załóżmy,żewpewnymmiejscupaczkisięmijajątak,że dokładnie jedna para protonów oddziałuje(zderza się ze sobą). W wyniku tego zderzeniapowstaje10pionówdodatnich(π + ),9pionówujemnych(π ), neutron, proton i 12 fotonów. Każda z tych cząstek może zostać zmierzona w detektorze, np. możemy wyznaczyć jej trajektorię, pęd, energię itd. Wiązki krążą nadal i po kilku minięciach znów następuje sytuacja, w której dokładnie dwa protony się zderzają. Tym razem produkują się dwa protony, trzy piony dodatnie i trzy piony ujemne. Proszę zauważyć, że: tezderzeniasąniezależne jednoniemawpływunadrugie, ilość informacji dostępnych w danym zderzeniu jest różna(w pierwszym zderzeniuinformacjęo32pędach,wdrugimo8), rodzaj informacji jest ten sam tzn. możemy zdefiniować uniwersalne zmienneopisującenp.ilośćcząstekwdanymprzypadku(n=32w pierwszymorazn=8wdrugim),pędkażdejcząstki(np.px 1,px 2,..., px n).

Makro-świat a mikro-świat M. Trzebiński ROOT 3/26 Makro-świat Determinizm Jeśli znamy warunki początkowe(położenia i prędkości) oraz działające siły możemy przewidzieć co się stanie Mikro-świat Badanie mikro-świata zderzanie cząstek Rozmiarprotonu:1fm=10 15 m=10 12 mm Rozmiar elektronu: mniejszy niż 1/1000 protonu(nie wiadomo jak mały) Nie da się zmierzyć parametrów początkowych Efekty kwantowe nawet jeśli znalibyśmy warunki początkowe, nie można przewidzieć wyniku

Dlaczego statystyka? M. Trzebiński ROOT 4/26 Nie znamy dokładnie warunków początkowych Nawet jeśli znalibyśmy warunki początkowe, nie można przewidzieć wyniku Z tego samego eksperymentu dostajemy raz taki wynik, raz inny Podstawowe prawa fizyki rządzą prawdopodobieństwami(częstościami występowania) określonych wyników Analiza prawdopodobieństw statystyka

Analiza danych jak odróżnić jabłka od gruszek M. Trzebiński ROOT 5/26

Klasyfikacja histogramy M. Trzebiński ROOT 6/26

Analiza danych jak odróżnić jabłka od gruszek M. Trzebiński ROOT 7/26

Czego można się dowiedzieć z rozkładu? M. Trzebiński ROOT 8/26 Wiek zwiedzających muzeum Fizyki Cząstek Typowy rozkład: Pewnego razu: O czym świadczy taka zmiana?

Sygnał i tło M. Trzebiński ROOT 9/26

ROOT M. Trzebiński ROOT 10/26 Cel oprogramowania ROOT Stworzenie oprogramowania do analizy danych w fizyce wysokich energii: grafika przedstawiająca dane(histogramy, punkty,...) struktury danych(ntuple, drzewa) procedury do analizy danych pliki skompresowane zawierające dane w formacie niezależnym od systemu operacyjnego Instalacja: http://root.cern.ch/drupal/content/downloading-root Na naszym systemie w CC1 pakiet ROOT został już zainstalowany.

Zaczynamy M. Trzebiński ROOT 11/26 Uruchomić program ROOT: root Zamknąć program ROOT:.q(w konsoli programu) Otworzyć program ROOT z opcją -l, a następnie go zamknąć: root-l.q Ze strony praktyk ściągnąć przykładowy plik w formacie ROOT (mc signal.root): za pomocą przeglądarki(zapisać w katalogu/media/cw ROOT) lub polecenia wget http://atlas.ifj.edu.pl/praktyki/materialy/cwiczenie6/mc signal.root

Cojestwpliku? Wyświetlmy informację o pierwszych 10 przypadkach. Na logikę: ntuple->scan(10) Nie działa? Jaki błąd został wyświetlony? Jaka składnia została podpowiedziana przez ROOTa? ntuple->scan(,,,10) ntuple->scan(,,,10,25) M. Trzebiński ROOT 12/26 Otworzyć plik programem ROOT: root-l mc signal.root Wylistować zawartość pliku:.ls(w konsoli programu) Co znaczą wyświetlone informacje? Przypadki znajdują się w ntuple. Wyświetlić informacje o pierwszym przypadku: ntuple->show(1) Co zostało wyświetlone? Wyświetlić informację o piątym przypadku. Wyświetlić informację o wszystkich przypadkach: ntuple->scan() Jakie informacje zostały wyświetlone? Jest tego trochę dużo(10 000), nie będziemy oglądać wszystkich(q)

Interface graficzny M. Trzebiński ROOT 13/26 TBrowser a lub new TBrowser Zadania. Używając interface graficznego: wyświetlić zawartość pliku mc signal.root, wyświetlić zawartość drzewa ntuple, wyświetlić histogram zmiennej m, wyświetlić histogram zmiennej x1, ile jest wejść do histogramu? jaka jest liczba binów? w jakim zakresie rysowane są wartości? jaka jest średnia? zmienić skalę na osi y na logarytmiczną, wyświetlić histogram zmiennej x6 i zmienić skalę na osi y na liniową, czy wartości w histogramach są związane z wartościami wyświetlanymi wcześniej za pomocą poleceń Show oraz Scan?

Tworzenie klasy M. Trzebiński ROOT 14/26 ROOT oferuje nam automatyczne narzędzia do tworzenia klas: ntuple->makeclass("pierwszy program ROOT") Jaka informacja została podana przez ROOTa? Wyjść z ROOTa i wylistować zawartość katalogu. Powstały dwa nowe pliki: główny(.c) oraz nagłówkowy(.h). Pliki te są tzw. makrem programu ROOT można je uruchomić bezpośrednio przy jego użyciu. Mają składnię opartą na C++. Uruchomić makro pierwszy program ROOT.C root-l pierwszy program ROOT.C lub root-l.x pierwszy program ROOT.C

Struktura pliku.h nagłówki oraz klasa M. Trzebiński ROOT 15/26 1 #ifndef pierwszy program ROOT h 2 #define pierwszy program ROOT h 3 #include <TROOT.h> 4 #include <TChain.h> 5 #include <TFile.h> 6 class pierwszy program ROOT { 7 public : 8 TTree fchain; //! 9 Int t fcurrent; //! 10 // Declaration of leaf types 11 Float t m; 12 Float t x1; 13 Float t x2; 14 // List of branches 15 TBranch bm; //! 16 TBranch b x1; //! 17 TBranch b x2; //! 18 19 pierwszy program ROOT(TTree tree=0); 20 virtual pierwszyprogram ROOT(); 21 virtual Int t Cut(Long64 t entry); 22 virtual Int t GetEntry(Long64 t entry); 23 virtual Long64 t LoadTree(Long64 t entry); 24 virtual void Init(TTree tree); 25 virtual void Loop(); 26 virtual Bool t Notify(); 27 virtual void Show(Long64 t entry = 1); 28 }; 29 #endif

Struktura pliku.h inicjalizacja gałęzi M. Trzebiński ROOT 16/26 1 void pierwszy program ROOT::Init(TTree tree) 2 { 3 // Set branch addresses and branch pointers 4 if (!tree) return; 5 fchain = tree; 6 fcurrent = 1; 7 fchain >SetMakeClass( 1); 8 9 fchain >SetBranchAddress( m, &m, &bm); 10 fchain >SetBranchAddress( x1, &x1, &b x1); 11 fchain >SetBranchAddress( x2, &x2, &b x2); 12 Notify(); 13 }

Struktura pliku.c M. Trzebiński ROOT 17/26 1 #define pierwszyprogramroot cxx 2 #include pierwszyprogram ROOT.h 3 #include <TH2.h> 4 #include <TStyle.h> 5 #include <TCanvas.h> 6 7 void pierwszy program ROOT::Loop() 8 { 9 if (fchain == 0) return; 10 11 Long64 t nentries = fchain >GetEntriesFast(); 12 13 Long64 t nbytes = 0, nb = 0; 14 for (Long64 t jentry=0; jentry<nentries;jentry++) { 15 Long64 t ientry = LoadTree(jentry); 16 if (ientry < 0) break; 17 nb = fchain >GetEntry(jentry); nbytes += nb; 18 // if (Cut(ientry) < 0) continue; 19 } 20 }

Zadania M. Trzebiński ROOT 18/26 Zmodyfikować plik.c tak aby: wyświetlił na ekran numer przypadku, wyświetlił na ekran wartość parametru m dla danego przypadku, wyświetlił na ekran wartość parametru m tylko dla przypadków, gdy x1>1.

Tworzenie histogramów i plików M. Trzebiński ROOT 19/26 Definicja histogramu jednowymiarowego(klasa TH1F.h): TH1F h1 = new TH1F( nazwa, tytul, nbin, xmin, xmax); nbins liczba binów(int) xmin początekosix(floatlubdouble) xmax koniecosix(floatlubdouble) Wypełnienie histogramu danymi: h1->fill(zmienna); Definicja histogramu dwuwymiarowego TH2F.h: TH2F h2 = new TH2F( nazwa, tytul, nbinx, xmin, xmax, nbiny, ymin, ymax); h2->fill(zmiennax, zmiennay); Tworzenie pliku: TFile plik = new TFile( plik.root, RECREATE ); Inneopcjeto: NEW tworzenienowego,błądgdyjużistnieje, READ otwarcie tylko do odczytu Zapisanie histogramu do pliku: h1->write(); Zamknięcie i zapisanie pliku: plik->close();

Zadanie M. Trzebiński ROOT 20/26 Stworzyć plik histogramy.root zawierający: histogram zmiennej m, histogram zmiennej x1, histogramzmiennejmpodwarunkiem,żex1>1, histogramzmiennejxpodwarunkiem,żex1>1. Podpowiedź: należy zmodyfikować makro pierwszy program ROOT.C Zadanie dodatkowe: Do pliku histogramy.root: dodać histogram dwuwymiarowy zmiennych x1 oraz x2, dodać histogram jednowymiarowy zmiennej x1 z wagą 1000.

Kanwy Histogramy tworzone przez ROOTa nie są najpiękniejsze czas to zmienić! Otwarcie pliku i zadeklarowanie histogramu: TFile f=newtfile( histogramy.root, READ ); TH1F h; f->getobject( nazwa histogramu, h); TCanvas kanwa do rysowania TCanvas c = new TCanvas( nazwa, tytul ); Ustawienie rysowania w tej kanwie c->cd(); Narysowanie histogramu na kanwie: hh->draw(); Narysowanie drugiego histogramu na tej samej kanwie: h->draw( same ); Zapisanie okna jako rysunku: c->saveas( histogram.png ); Zapisanie okna jako rysunku w formacie wektorowym: c->saveas( histogram.eps ); Do wyświetlania plików.eps służy np. program GhostView: gv-watch nazwa pliku.eps& M. Trzebiński ROOT 21/26

Upiększanie histogramów cz. 1 Zmiana lewego marginesu kanwy: c1->setleftmargin(0.14); Zmiana osi y na logarytmiczną: gpad->setlogy(1); Zmiana wielkości czcionki podpisu osi x: h->getxaxis()->settitlesize(0.05); Zmiana odległości między osią x a podpisem: h->getxaxis()->settitleoffset(1.25); Zmiana wielkości czcionki liczb na skali osi x: h->getxaxis()->setlabelsize(0.05); Zmiana odległości między osią x liczbami na skali: h->getxaxis()->setlabeloffset(0.01); Ustawienie maksimum na osi y: h->setmaximum(2.e-2); Ustawienie tytułu wykresu: h->settitle( opis ); Ustawienie tytułu osi x: h->getyaxis()->settitle( opis ); M. Trzebiński ROOT 22/26

M. Trzebiński ROOT 23/26 Upiększanie histogramów cz. 2 Zmiana koloru linii: h->setlinecolor(2); Zmiana stylu linii: h->setlinestyle(1); Uwaga: powiązanie cyfr z kolorami/stylami można znaleźć w Internecie. Zmiana grubości: h->setlinewidth(3); Dodanie tekstu do obrazka: TLatex tekst; tekst.settextsize(0.05); tekst.drawlatex(pozx, pozy, #sqrt{s} = 14 TeV ); pozx początek napisu względem osi X pozy początek napisu względem osi Y Legenda: TLegend legenda = new TLegend(0.75,0.8,0.97,0.97); legenda->addentry(h, ópis wejscia", ł"); opcje:l linia,p punkt,f prostokąt,e błądnaosiy legenda->settextsize(0.05); legenda->settextfont(42); legenda->draw( same );

Fit M. Trzebiński ROOT 24/26 Procedura fitowania pozwala na dopasowanie funkcji do danych. W programie ROOT można z niej korzystać na kilka sposobów: 1. Tryb interaktywny: otworzyć plik.root zawierający histogramy, uruchomić TBrowser, wyświetlić histogram, wybrać Tools-> FitPanel, 2. Przez polecenie, w przypadku gdy funkcja jest predefiniowana w programie ROOT: h->fit( gaus ); Znane funkcje: gaus funkcja Gaussa z trzema parametrami(p0, p1, p2): f(x) =p0 exp( 0.5 ((x p1)/p2) 2 )), expo eksponentazdwomaparametrami:f(x) =exp(p0+p1 x), poln wielomiann-tegostopnia:f(x) =p0+p1 x +p2 x 2 +... 3. Przez dopasowanie funkcji zdefiniowanej przez użytkownika: TF1 f1=newtf1( f1, [0] x sin([1] x)",-3,3);

Zadania M. Trzebiński ROOT 25/26 1. Za pomocą FitPanel dopasować krzywą Gaussa do rozkładu m. Jakiesąparametryfitu?Cooneznaczą?Jakiesąbłędy? 2.Zmienićzakresfitowaniana2.9 3.1. Czy dofitowane wartości uległy zmianie? 3. Napisać makro, które: wczytuje histogram rozkładu m z pliku histogramy.root, rysuje go na kanwie, zmienia kolor linii na niebieski a jej styl na linię przerywaną, dodaje następujący opis osi X: masa ukladu, m[gev], dodaje następujący opis osi Y: liczba przypadkow, fituje krzywą Gausa do histogramu, zapisuje go w pliku masa.eps. 4. Zadanie dodatkowe: wypróbować pozostałe opcje rysowania.

Kompilacja makra za pomocą g++ M. Trzebiński ROOT 26/26 W makrze pierwszy program ROOT.C dodać funkcję główną: 1 int main(){ 2 pierwszy program ROOT a; 3 a.loop(); 4 5 return 0; 6 } Potrzebne są biblioteki ROOTa. Nie znajdują się one w domyślnych katalogach przeszukiwanych przez g++, dlatego trzeba go o tym poinformować: g++-i root-config--incdir -o program program.c root-config --libs Zadania: 1. Sprawdzić, co robią polecenia root-config--incdir oraz root-config --libs wpisane w terminalu. 2. Zmodyfikować makro pierwszy program ROOT.C, tak by je można było skompilować g++.1