AddFriend [message #4725] |
Sun, 22 July 2007 22:12 |
StefanoSpataro
Messages: 2736 Registered: June 2005 Location: Torino
|
first-grade participant |
From: *dip.t-dialin.net
|
|
Hello,
during the weekend I simulated many events, and the output of my simulation macro was composed by several files (bigdata_mega_X.root).
Then I launched my reconstruction, I added all the files with the fRun->AddFile() function, in order to have only one file with the output (full_bigdata_mega.root).
Then I wanted to launch my macro, and to use even the MCTrack information. In mý macro I put the following lines:
TFile* f = new TFile("$DATA/panda/kick/full_bigdata_mega.root"); TTree *t=(TTree *) f->Get("cbmsim") ;
t->AddFriend("cbmsim","$DATA/panda/kick/bigdata_mega.root");
t->AddFriend("cbmsim","$DATA/panda/kick/bigdata_mega_1.root");
t->AddFriend("cbmsim","$DATA/panda/kick/bigdata_mega_2.root");
t->AddFriend("cbmsim","$DATA/panda/kick/bigdata_mega_3.root");
Fist of all I get several warnings, telling me that the size of the friend is less than the original file (of course, but the sum of friends corresponds to the total size of the first file), then the analysis run smoothly, but when it exceeds the number of events of the first friend (so when it has to move to the next one), I have an error (illegal pointer to class...), so the friend mechanism has failed.
What I did wrong? Or is there some bug?
P.S. If I try to create one reconstruction file per each "son" of the first file, the first one is ok (bigdata_mega) but from the 2ns one (bigdata_mega_1) the analysis crashes (-E- CbmRootManager Branch: EventHeader. not found in Tree).
[Updated on: Sun, 22 July 2007 22:16] Report message to a moderator
|
|
|
|
Re: AddFriend [message #4727 is a reply to message #4726] |
Mon, 23 July 2007 10:57 |
StefanoSpataro
Messages: 2736 Registered: June 2005 Location: Torino
|
first-grade participant |
From: *physik.uni-giessen.de
|
|
Hi,
Aleksandra Wronska wrote on Mon, 23 July 2007 09:22 | I think AddFriend is used when you want to merge infos from two different trees, but sort of "paralel": e.g. in tree1 you store energy loss and in tree2 you store momenta for the same collection of events.
|
Indeed this is what I wanted to do, merge different but parallel trees with different informations (one with MCTrack, the pther with reconstruction categories). The only problem is that the simulation part was composed by several files, while the reconstructed one only by one.
Quote: |
If you want to add trees one after the other, you should rather use the chain mechanism, I guess:
TChain t("cbmsim");
t.AddFile("$DATA/panda/kick/bigdata_mega.root");
t.AddFile("$DATA/panda/kick/bigdata_mega_1.root");
etc...
|
Well, I decided to do the contrary of what I did before, so to define the tree with the simulation and the friend which contains the only reconstruction file:
TChain t("cbmsim");
t->AddFile("$DATA/panda/kick/bigdata_mega.root");
t->AddFile("$DATA/panda/kick/bigdata_mega_1.root");
t->AddFile("$DATA/panda/kick/bigdata_mega_2.root");
t->AddFile("$DATA/panda/kick/bigdata_mega_3.root");
t->AddFriend("cbmsim","$DATA/panda/kick/full_bigdata_mega.root");
In this way I get no warning, but the analysis crashes at the same point.
|
|
|
|
|
|
|