Tags:
create new tag
, view all tags

Analiza standardowych ntupli DaVinci

Analize mozemy przeprowadzic w oparciu o wygenerowany automatycznie skrypt. Taka generacja w sesji root-a dla zbioru TupleBs2JpsiEta.root utworzonego algorytmen o nazwie tupleBs2JpsiEta moze wygladac tak:

 TFile *tupfile = new TFile("TupleBs2JpsiEta.root");
 tupfile->cd("tupleBs2JpsiEta");  // tutaj nazwa odpowiada nazwie algorytmu ktory wyprodukowal ntuple
 TTree *tuptree  = (TTree*) gDirectory -> Get("DecayTree");
 tuptree->MakeClass("bs_ana"); // bs_ana jest dowolna nazwa

Można zapisać te komendy w osobnym pliku (jako funkcję C++) i wykonać z ROOT-a (konieczna jest zgodność wersji z tą stowarzyszoną z DaVinci, za pomocą którego ntuple został stworzony). Utworzone zostana zbiory bs_ana.C i bs_ana.h bedace definicja klasy do analizy ntupla. Nalezy wyedytowac zbior bs_ana.C wprowadzajac swoj kod analizy np tak:

W zbiorze znajduje sie petla:

   for (Long64_t jentry=0; jentry < nentries;jentry++) {
przed ktora mozemy zadeklarowac histogramy i nastepnie wypelnic je wewnatrz petli

Zmodyfikowany skrypt uruchamiamy w sesji root-a:

.L bs_ana.C
bs_ana b;
b.Loop()

W przypadku analizy duzych ntupli aby zmniejszyc czas wykonania oplaca sie skompilowac skrypt dokladajac na koncu komendy .L dwa znaki plus

.L bs_ana.C++

-- MariuszWitek - 25 Feb 2009

Sklejanie ntupli DaVinci

Jezeli dysponujemy kilkoma ntuplami o takiej samej strukturze (np. po niezaleznym procesowaniu roznych danych przy pomocy jednego algorytmu, albo po puszczeniu na gridzie jednego zadania rozbitego na kilka jobow, z ktorych kazdy wygenerowal osobny ntuple, zas my zapomnielismy zazadac ich mergingu lub merging sie nie udal), mozemy je "skleic" recznie w Roocie w jeden nowy, wielki ntuple, uzywajac:

TChain ch("NazwaDrzewa");
ch.Add("Plik1.root/NazwaKatalogu/NazwaDrzewa");
ch.Add("Plik2.root/NazwaKatalogu/NazwaDrzewa");
ch.Add("Plik3.root/NazwaKatalogu/NazwaDrzewa");
...
ch.Add("PlikN.root/NazwaKatalogu/NazwaDrzewa");
ch.Merge("PlikFinalny.root");

W przypadku wiekszej ilosc plikow o podobnych nazwach wygodnie jest napisac prosty program w C++, ktory w petli generowalby prawidlowa nazwe pliku i dodawal zawarte w nim drzewo do lancucha. Dla powyzszego przykladu odpowiedni segment kodu moglby wygladac tak:

char sciezka[30];
char temp[3];
for ( int i = 0; i<5; i++ ) {
   strcpy(sciezka,"Plik");
   sprintf(temp,"%d",i);
   strcat(sciezka,temp);
   strcat(sciezka,".root/NazwaKatalogu/NazwaDrzewa");   
   ch.Add(sciezka);
};

Ntuple wyprodukowany za pomoca DaVinci bedzie mial nazwe drzewa "DecayTree", zas nazwa katalogu bedzie taka sama, jak algorytmu, za pomoca ktorego wygenerowano ntuple. Drzewo w ntuplu "posklejanym" bedzie mialo identyczna strukture, jak drzewa w ntuplach, ktore sklejalismy.

-- SzymonKukulak - 25 Oct 2010

Topic revision: r5 - 2010-10-27 - SzymonKukulak
 
This site is powered by the TWiki collaboration platform Powered by Perl This site is powered by the TWiki collaboration platformCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback