TTree'lere alisabilmek icin lutfen asagidaki adimlari uygulayin.
  1. Ekteki treeFillexample.C macro'sunu calistirin. Bu macro 100 ogrenci icin random olarak bir midterm, bir final ve 0 ila 8 arasinda sayisi da random olan laboratuvar notlarini uretiyor. Uretilmis notlar, bir ROOT dosyasindaki gradeTree adli bir TTree'ye kaydediliyor. Bu macro'yu dikkatlice inceleyin. Sacma/eksik bir yonu varsa, bunu belirleyin. Kodlama anlaminda en onemli kismi, doldurma isinin yapilmasi - bu isi dikkatli calisin. Bunun nasil oldugunu anlamiyorsaniz, C dili ile ilgili ISOTDAQ okullarinda kullanilan ~30 sayfalik belgeye ve onun icindeki alistirmalara tekrar goz atabilirsiniz.

  2. Su adimlari deneyin ve ne olduklarini anlamaya calisin:
      root -l gradeFile.root
      .ls
      gradeTree->Print()
      gradeTree->Show(14)
      gradeTree->MakeClass()
  3. En son adim size gradeTree'yi kullanarak bir kod yazmanizi kolaylastiracak bir cesit template class yaratacak. Bu class'in header dosyasini (gradeTree.h) acip degisik degiskenlerin nasil isimlendirildiklerine bakin. Daha sonra gradeTree.C dosyasini acip, icindeki Loop() metodunu su sekilde degistirin:

      if (fChain == 0) return;
    
      Long64_t nentries = fChain->GetEntriesFast();
    
      TH1F *numlabgrade = new TH1F("numlabgrade", "Number of Lab Grades", 10,-0.5,9.5);
      TH1F *totlabgrade = new TH1F("totlabgrade", "Total Lab Grades;N_{students};Total Points", 81,-0.5,80.5);
    
      Long64_t nbytes = 0, nb = 0;
      for (Long64_t jentry=0; jentry<nentries;jentry++) {
         Long64_t ientry = LoadTree(jentry);
         if (ientry < 0) break;
         nb = fChain->GetEntry(jentry);   nbytes += nb;
         // if (Cut(ientry) < 0) continue;
    
         int nlab = lab->size();
         cout << "Student " << jentry << " (id#" << studentID << ") has attended " << nlab << " labs. Grades are:";
         int totlab = 0;
         for (int i=0; i<nlab; ++i ) {
            cout << " " << (*lab)[i];
            totlab += (*lab)[i];
         }
         cout << endl;
         totlabgrade->Fill(totlab);
         numlabgrade->Fill(nlab);
    
      }
    
      TCanvas *c1 = new TCanvas();
      c1->Divide(2);
    
      c1->cd(1);
      numlabgrade->Draw();
    
      c1->cd(2);
      totlabgrade->Draw();
    
  4. Degistirmis oldugunuz kodu, root icerisinden soyle calistirin. Sonuclari ve kodun isi nasil yaptigini anlamaya calisin. Cikan histogramlari yorumlayin. Neden sagdaki histogramda 0 bini diger binlerden daha yuksek? Olasilik hesabi ile 0 bininde kac entry olacaginin expected value'sunu cikarin.

     root -l
     .L gradeTree.C
     gradeTree t
     t.Loop()
  5. Ogrenciler icin toplam lab notunu 8'e bolup, ve buna midterm ve final notlarini da ekleyip bir donem sonu notu hesaplatin. Bu toplam notun histogramini cikartin. Mean ve rms ne cikiyor?

Topic attachments
I Attachment Action Size Date Who Comment
treeFillexample.CC treeFillexample.C manage 1.6 K 01 Sep 2015 - 18:58 ErkcanOzcan Example ROOT macro to create a file and save a TTree inside it
Topic revision: r1 - 01 Sep 2015, ErkcanOzcan
 

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback