root ile paralel programlamak ve nesneye yönelmek gökhan ünel

Benzer belgeler
Nesneye Yönelmek. veya sadece formülleri bilgisayarın anlayacağı dile çevirmeyi bilen birinin C++ kullanma yöntemleri. Gökhan Ünel

BİLG Dr. Mustafa T. Babagil 1

C#(Sharp) Programlama Dili

1 PROGRAMLAMAYA GİRİŞ

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Örnek1: #include <iostream> #include <string> using namespace std;

Genel Programlama II

Nesneye Yönelik Programlama (OOP) 7.Hafta

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

C++ Dersi: Nesne Tabanlı Programlama

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

BTEP243 Ders 3. class Yazım Kuralı:

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

#ifndef COMPLEX_H #define COMPLEX_H

C++ Dersi: Nesne Tabanlı Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

B03.10 Algoritmalari Uygulamak : Durum 3 (Yuvalı Kontrol Yapıları) Şimdi başka bir problem üzerinde çalışalım.

Internet Programming I. Hafta III. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

C++ Operatörler (Operators)

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Algoritma ve Programlama: Karar Yapıları ve Döngüler

NESNEYE YÖNELİK PROGRAMLAMA

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

NESNEYE YÖNELİK PROGRAMLAMA

How to ASP Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 29 Eki. 1 Kas. 2013

YZM 2116 Veri Yapıları

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

ALGORİTMA VE PROGRAMLAMA I

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

Ders 8: Metotlar. barisgokce.com

Genel Programlama II

GRID hakkında. bol ATLASlı örneklerle. Gökhan Ünel / UCIrvine. 4 Mart 2012

Fall Object-Oriented Programming Laboratory 02 - Structures

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

NESNEYE YÖNELİK PROGRAMLAMA

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

Lambda İfadeleri (Lambda Expressions)

Veri Tipleri Aşağıdaki programdaki 5 hatayı bulunuz.

Nesneye Dayalı Programlama Laboratuvarı

BİLG Dr. Mustafa T. Babagil 1

C++ Dersi: Nesne Tabanlı Programlama

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Şimdi başka bir problem üzerinde çalışalım.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Kabuk Programlama (Bash)

How to ASP Language. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. Hafta V

KONTROL VE OTOMASYON KULÜBÜ

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Karma C/C + + Kodlama

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

C++ ile Nesneye Dayalı Programlama

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Android Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

ALGORİTMA VE PROGRAMLAMA II

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

İNTERNET TABANLI PROGRAMLAMA

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

ACD BİLGİ İŞLEM ACD KABLOSUZ VERİ TOPLAMA SİSTEMLERİ URT-V2 KABLOSUZ VERİ TOPLAMA TERMİNALİ AİLE HEKİMLİĞİ KİOSK ÇÖZÜM ORTAĞI TEKNİK BELGESİ

Dr. Fatih AY Tel: fatihay@fatihay.net

C++ Dersi: Nesne Tabanlı Programlama

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ Published by Juan Soulié

İNTERNET TABANLI PROGRAMLAMA- 3.ders

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR PROGRAMLAMA

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Bilgisayar Programlama. 1.Hafta

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

Transkript:

root ile paralel programlamak ve nesneye yönelmek gökhan ünel HPFBU 2015

Neden Küme Bilgisayar? 2 Tam bir çözümleme yapmak için milyonlarca olay işlemek gerekiyor. Bu hızlıca yapmak ancak bir bilgisayar çiftliğinde, küme bilgisayarlar ile olasıdır. Küme bilgisayarlara iş yollamak için bir çok yöntem var. PBS, Condor, Proof Neden TProof? ROOT ile birlikte gelir. ağ ile bağlı bilgisayarları hızlıca kümelemeye olanak sağlar. dizüstü bilgisayarda geliştirdiğimiz yazılım, neredeyse aynen küme ye yollanabilir. (ek komut yok) AMA root çözümlemesi dışında kullanılamıyor. (MadGraph ile olay üretimini paralel yapamaz.)

3 Basit yöntem (küme bilgisayar olmadan) elimde her olaya ait bilgilerin yazıldığı, içinde N olay hakkında bilgi olan bir root kütüğü olsun. Çözümleme yapmak için en basit durumda MakeClass komutunu kullanabiliriz. Eğer kütükteki bilgiler bir ağaç halindeyse (ntuple).c kütüğüne olay döngüsü içine çözümlememi eklerim root kütükleri yükleyip çalıştırır. 1 çekirdek ile olayların üstünden tek tek geçerim.

resimli olarak 4 veri kütüğünü aç MakeClass komutu bu Olay Döngüsü gerekli tanımlamaları yap. ör: histogramlar olay bilgisini al gereken işlemleri yap, histogramları doldur sonraki olaya geç Tek Çekirdekte çalışma yönü mekanizmanın iskeletini kurar. Kilit işlev Loop() komutudur. olay döngüsünü içerir. Bize sadece kendi değişkenlerimizi, kendi histogramlarımızı tanımlayıp doldurmak kalır. sonuçları yaz çok çekirdek kullanmak bu yapıda zordur.

paralel çalışma görünümü 5 çalışıcı yönetici çalışıcı olayı ver sonucu al. çalışıcı Yönetici: tanımlamaları yapar, üzerinde çalışılacak kütüğü açar. olay döngüsünü kurar. işleri sırayla çalışıcılara yollar, sonuçları alır ve kaydeder. Çalışıcı: kendisinden istenen hesabı yapar. 1 olay işleyip sonucu döndürür.

TSelector 6 Çok çekirdek ve/veya çok makina ile çalışmaya hazırlık için MakeSelector() komutu kullanılır. Kütükteki ağacın adı LHCO ise LHCO->MakeSelector( incele ) komutu incele.h ve incele.c kütüklerini oluşturur. Gerekli değişkenler dışında 5 önemli işlev kendiliğinden tanımlanır: Begin() SlaveBegin(): Process(): SlaveTerminate(): Terminate(): Yönetici de çözümlemenin başında çalışır. Her Çalışıcı da çözümlemenin başında çalışır. Her Çalışıcı da kendisinden istenen 1 olayı işler. Her Çalışıcı da çözümlemenin sonunda çalışır. Yönetici de çözümlemenin sonunda çalışır.

Örnek 7 Begin()? Genel hazırlık SlaveBegin(): Process(): SlaveTerminate(): Terminate(): Yapılacak çözümleme için değişkenleri, histogramları tanımla. Yönetici tarafından yollanan olayı incele, gerekli hesapları yap. histogramları doldur. Doldurulan histogramlari kütüğe kaydet. yerel kütüğü yöneticiye yolla. Farklı çalışıcılarda yollanan kütükleri birleştir. Gelen histogramları çiz vs.

Begin 8 1 sa%r ekledik

SlaveBegin 9 selam et histo tanımla 3 sa%r ekledik

Process 10 ilk 3 olay için selamla PT histogramını doldur

SlaveTerminate 11 1 sa%r ekledik

Terminate 12 Selamla doldurulan histogramı bul(yeni root ile gerekmez) ve çiz histogramı bir kütüğe sakla

incele.h 13 tanımlamayı ekledik

deneme 14 Tek çekirdek ile denememizi yap0k. Şimdi bunu çok çekirdeğe yayalım.

root ile hazır gelir. çok çekirdek için 15 Yönetici ve Çalışıcı bilgisayarlar aynı kütük yapısında olmak zorunda değil. Başka işletim sisteminde bile olabilirler. proof veya prooflite kullanmalıyız. prooflite: kendi makinamızda N çekirdek kullanmak için proof: bir bilgisayar çiftliğinde N çekirdekli M makina kullanmak için. bu yapıyı çalıştırmak için gerekli macro: runproof.c root un // çalışma ortamını yükle. çalışıcıların iş yapabilmesi için gereken kütüphane veya düzenleme kütüklerini yolla (veriyi değil!) okunacak ve işlenecek root kütüklerini listele herşeyi çalıştır.

ortam: proof vs prooflite Prooflite 1 makinada çalışır. çalıştırmak için ek programa gerek yok. 16 kütükler $HOME/.proof altındadır Proof N makinada çalışır. root ile gelmez, ayrıca kurulmalıdır: xrootd.slac.stanford.edu 2 adet daemon a ve 1 biçimlendirme kütüğüne gerek var. xproofd ve xrootd xpdd.conf <<-örnek. kütük yeri biçimlendirme kütüğünde verilir. yöne0ci bilgisayarın adı kim yönetici, kim çalışıcı, kimin kaç çekirdeği var vs vs. runproof.c içinde proof ve prooflite farklı şekilde başlatılır

kütükler ve eklemeler prooflite ile doğrudan kütüklerin adını veririz. 17 proof kütükleri nerede bulacağını bilmek zorunda. root protokolu ile ulaşım. (http:// gibi ama bu root://) Bazen ek kütüphaneler gerekebilir: son olarak işlenecek en olay sayısı, bazı seçenekler ve önceki.c ve.h kütükleri verilir:

runproof.c 18 void runproof(int lite=1){ if (lite) { TProof *proof = TProof::Open(""); } else { TProof *proof = TProof::Open("pc-atb-srv-01"); } proof->setparallel(3); //using only few cores,the rest for other tasks TDSet *set; set = new TDSet("TTree","LHCO"); if (lite) { set->add("hpq.root"); // set->add("abc.root"); }else{ set->add("root://10.0.1.2//project/analyses/lvl0-1.root"); set->add("root://10.0.1.2//project/analyses/lvl0-2.root"); } } set->process("incele.c"); root.exe runproof.c olarak çalıştırılır.

sonuç 19 Yeşil: başarılı oldu demek

başka çıktılar 20 4 çekirdekte prooflite txt ekran grafik ekran Hata bildirimi Hataları görmek için

hatalara bakmak 21 Yönetici çıktısı 1. ve 2. Çalışıcı çıktıları sol alttaki display düğmesi ile çıktıları görüp olası hataları düzeltebiliriz.

xrootd örnek biçimlendirme kütüğü cat xpd.cf ProofLite için gerek yok xrd.port 1094 all.export / xrootd.async off nosf ##Proofu nereye kurduysanız ben buraya kurdum: xpd.port 1093 xpd.rootsys /cern/root-current xpd.workdir /cern/xrootd/proof # çalışanlar listesi, son değişken=çekirdek sayısıdır. xpd.worker worker 10.0.1.9 repeat=4 xpd.worker worker 10.0.1.10 repeat=2 xrootd -c xpd.cf 22

Nesneler ve Sınıflar 23 Bol alış%rmalı ve hızlı bir giriş

Root ile örnek 24 Root içinde LorentzVector sınıfı var. int a=3; TLorentzVector p1(-0.1, 0.1, 3500, 3501); ilk degerler px, py, pz, E olarak verilir p1 in kütlesi ne? (3501^2-3500^2) = 83.672 TLorentzVector sinifi bize bunu kolayca hesaplar: cout << p1.m()<<endl; 83.6719 ayrıntılar http://root.cern.ch/root/html/tlorentzvector.html 2 dakkalık ödev: yukardaki örneği yapın ayrıca p1 in eta, phi, pt değerlerini de yazdırın.

parçacık sınıfı 25 Bir parçacık tanımlamak için LV yeterli mi? haayır! hani ya bunun yükü (q) veya başa özellikleri? O zaman ben kendim yeni bir sınıf yazayım! böylece c++ class vs işlerini de öğrenirim Deneysel bir parçacık için neler lazım? LV olmalı yük olmalı parçacık kendini ekrana yazabilmeyi bilmeli Ptcone ve Etcone bilgisi olmalı iç algıçta parçacık etrafında ne kadar pt ölçülmüş? kalorimetrede parçacık etrafında ne kadar ET ölçülmüş? vb...

C++ da sınıf tanımlama 26 2 kütük lazım HPFparticle.h burada bildiriler olacak. Ör: dump() diye bir işlev var. HPFparticle.C burada tanımlamalar, önceden bildirilen işlerin nasıl yapıldığı anlatılacak. Ör: dump() işlevi bunu yapar. Bazı Nesneye Yönelik Programlama kavramları lazım. Sınıf yapmak neden sınıf yapmak gerektiğini öğrendik Özel veriyi saklamak sınıfların her bildiklerini paylaşmamaları programları daha gürbüz yapar Miras bunu ilerde göreceğiz Çokbiçimlilik - ekyük taşıma bunu zaten biliyoruz. + işlemi iki sayıyı toplar ama 2 LV de toplayabilirim.

Örnek ile devam 27 hpfparticle.h - bildiriler sınıfı başlatmak için 3 seçenek sınıfı kapatmak için sınıfını ekrana yazmak için yükünü vermek için Et ve pt vermek için LV değişmek için yükünü almak için Et ve pt almak için LV almak için sınıfın özel değişkenleri

hpfparticle.cpp - tanımlamalar, açıklamalar...1 28 sınıfı başlatmak, seçenek 1: hiç ön bilgi vermeden sınıfı başlatmak, seçenek 2: LV vererek kapatırken ek iş yapma sınıfı başlatmak, seçenek 3: LV ve Q vererek yük böyler verilir veya değişilir

hpfparticle.cpp - tanımlamalar, açıklamalar...2 29 EtCone böyle verilir. EtCone böyle verilir. LV böyle verilir. ekrana böyle yazalım.

root a bunları tanıtmak için 30 Derleyelim Kullanalim 15 dakka ödev molası. örnekleri siz de yapın

kopyalayıp yapıştırın diye.h 31 #include "TLorentzVector.h" class hpfparticle { public: hpfparticle(); hpfparticle(tlorentzvector); hpfparticle(tlorentzvector, int); ~hpfparticle(); void dump(); int setcharge( int); int setetcone( double ); int setptcone( double ); int settlv( TLorentzVector ); int q() { return p_charge; } double EtCone() { return p_et_cone; } double PtCone() { return p_pt_cone; } TLorentzVector lv() { return p_lvector; } private: int p_charge; double p_et_cone; double p_pt_cone; TLorentzVector p_lvector; };

kopyalayıp yapıştırın diye.cpp 32 #include "hpfparticle.h" #include <iostream> hpfparticle:: hpfparticle ( ){ p_et_cone = -999; p_pt_cone = -999; p_charge=-999; // not initialized p_lvector=tlorentzvector (-1,-1,-1,-1); } hpfparticle:: hpfparticle (TLorentzVector lv){ p_et_cone = -999; p_pt_cone = -999; p_charge=-999; // not initialized p_lvector=lv; } hpfparticle:: ~hpfparticle() {} hpfparticle:: hpfparticle (TLorentzVector lv, int q){ p_et_cone = -999; p_pt_cone = -999; p_charge=q; p_lvector=lv; } int hpfparticle:: setcharge (int q){ p_charge=q; return 0; } int hpfparticle:: setetcone (double iso){ p_et_cone=iso; return 0; } int hpfparticle:: setptcone (double iso){ p_pt_cone=iso; return 0; } int hpfparticle:: settlv (TLorentzVector lv){ p_lvector=lv; return 0; } void hpfparticle:: dump (){ std::cout << "Px="<<p_lvector.Px()<< " Py="<<p_lvector.Py() << " Pz="<<p_lvector.Pz()<< " E="<<p_lvector.E()<<std::endl; }

peki ya bir muon? 33 Özellikler Bir parçacıktır. -tamam- Ek bilgi taşır: olayı tetiklemiş mi? O halde hpfparticle dan alacağı mirasla tanımlanır hpfmuon.h Tetikleme bilgisini vermek için hem bildiri hem tanimlama ayni yerde Muon sınıfının kendine özel değişkeni

muon u kullanayım: 34 kopyalayıp yapıştırın diye #include "hpfparticle.h" class hpfmuon : public hpfparticle { public: hpfmuon( ): hpfparticle(){}; hpfmuon( TLorentzVector lv): hpfparticle(lv){}; ~hpfmuon(){}; int setmuintrigger(bool v) {p_topmutrigdec=v; return 0;} bool MuInTrigger() { return p_topmutrigdec; } private: bool p_topmutrigdec; };

Bir de electron yapalım 35 Bir parçacıktır. -tamam- Ek bilgi taşır: tetikleyen elektron mu?, elektron izinin eta ve phi değerleri (sadece iç algıçtan gelen bilgi) hpfelectron.h

derleyip kullanmak için 36 derleme kopyalayıp yapıştırın diye Kullanma #include "hpfparticle.h" class hpfelectron : public hpfparticle { public: hpfelectron( ): hpfparticle( ){}; hpfelectron( TLorentzVector lv): hpfparticle(lv){}; int seteltriggermatch(bool v) { p_eltriggermatch=v; return 0;} int settrketa(double v) { p_trketa=v; return 0;} int settrkphi(double v) { p_trkphi=v; return 0;} 15 dakka ödev molası. örneği tekrarlayın 1 elektron 1 pozitron tanımlayın dump() ile ekrana yazdırın. bool ElTriggerMatch() { return p_eltriggermatch; } double TrkEta() { return p_trketa; } double TrkPhi() { return p_trkphi; } private: bool p_eltriggermatch; double p_trketa; double p_trkphi; };

işaretçiler 37 int *p ; burada p : işaretçi *p: işaretçinin gösterdiği sayı new komutu hafızada yer ayırır ayırdığı yer *p nin cinsi kadardır. p = new int 32 bit ayırır hpfmuon *m1 ; m1 = new hpfmuon hpfmuon nesnesi kadar ayırır. delete komutu ayrılan yeri siler değişkenle işim bitince, silerim. Yoksa programımın kullandığı hafıza gittikçe artar.

önceki örnek - işaretçiler ile 38 aynı işlerin işaretçiler kullanılarak yapılması Benzetme yapıyorum işaretçi kapak new kavanoz delete kavanozu kır kırılan kavananozun içi yok Neden? kavanozun camı, yani hafıza az. İşim bitince cam kumbarasına geri atmalıyım. Doğanın dengesini koru.

dikkat ve not 39 camı kırmadan kapağa yeni kavanoz takmayın: yoksa eski kavanozu kaybedersiniz. sonunda hafıza biter -> segfault olur. Diyelim elimde bir çok elektron. muon vb var. kaç tane kullanacağımı bilmiyorum. o halde ne yapmalıyım? Bunu mu? HAYIR!!! const int max_muons = 1000; hpfmuon [max_muons] ; çalışır ama hafızayı gerekli gereksiz hep kullanır.

vector http://www.cplusplus.com/reference/stl/vector/ 40 STL vector ler bize sayısını son anda belirleyeceğimiz kadar nesne ile çalışma olanağı verir. vector değişkeni diziye sayı ekleme dizinin boyu dizideki i. sayı 10 dakika ödev molası: örneğin aynısını yapın

İki bilgiyi birleştirelim 41 #include <vector> void v2() { gsystem->load("hpfparticle_cpp.so"); gsystem->load("hpfmuon.h"); gsystem->load("hpfelectron.h"); /* groot->loadmacro("hpfparticle.cpp"); groot->loadmacro("hpfmuon.h"); groot->loadmacro("hpfelectron.h"); */ groot->loadmacro("is.c"); vector<hpfmuon> muons; vector<hpfelectron> electrons; hpfelectron *an_e; hpfmuon *an_m; TLorentzVector alv; alv.setptetaphim( 31.2, -2.1, 0.6, 0.106 ); an_m=new hpfmuon(alv); an_m->setetcone( 21.1 ); an_m->setptcone( 13.4 ); an_m->setcharge( -1 ); an_m->setmuintrigger( 0 ); muons.push_back(*an_m); delete an_m; ayrıca işaretçilerle çalışalım ve daha derli-toplu olsun bir işlev elektron, muon listesini hazırlasın, bir başkası kullansın. v2.c solda, is.c yi siz yazın. böyle yüklenince arıza veriyor. is.c elektron ve muon sayılarını ekrana koysun, ayrıca parçacıkların momentum-enerji değerlerini de. (bende 8 satırda oldu) muon bilgileri başa bir kütükte veya başka bir biçimde olabilir. } alv.setptetaphim( 91.2, 1.8, -0.6, 0.106 ); an_m=new hpfmuon(alv); an_m->setetcone( 1.1 ); an_m->setptcone( 3.4 ); an_m->setcharge( +1 ); an_m->setmuintrigger( 1 ); muons.push_back(*an_m); delete an_m; cout << "hazirlik tamam, hesaba geciyoruz."<<endl; hesapyap ( muons, electrons); Asıl İşi yapacak kısım, muonların elektronların doldurulma ayrıntılarından bağımsız ve oradaki değişikliklerden korunmalı. 10 dakika ödev molası: is.c yazın, hesapyap işlevini tanımlasın.