SHOW:
|
|
- or go back to the newest paste.
1 | #include "TString.h" | |
2 | #include <TFile.h> | |
3 | #include <TTree.h> | |
4 | #include <TNtuple.h> | |
5 | #include <TTreeCache.h> | |
6 | ||
7 | ||
8 | void test_cache() { | |
9 | TString in_fname("/tmp/test_in.root"); | |
10 | ||
11 | // create a tree in file | |
12 | { | |
13 | TFile * in_file = TFile::Open(in_fname, "RECREATE"); | |
14 | in_file->cd(); | |
15 | ||
16 | TNtuple * in_tree = new TNtuple("in_tree", "blah","a:b:c"); | |
17 | for (int i = 0; i < 10; ++i) { | |
18 | in_tree->Fill(i,2 * i,3 * i); | |
19 | } | |
20 | ||
21 | in_tree->Write(); | |
22 | in_file->Close(); | |
23 | } | |
24 | ||
25 | TFile * in_file = TFile::Open(in_fname); | |
26 | ||
27 | TNtuple * in_tree = (TNtuple*) in_file->Get("in_tree"); | |
28 | ||
29 | // set cache on input file (mimic TEventIterTree::GetTrees) | |
30 | TTreeCache *fTreeCache = 0; | |
31 | int fCacheSize = 100000; | |
32 | bool fTreeCacheIsLearning = 1; | |
33 | ||
34 | TTree * main = (TTree*) in_tree; | |
35 | TFile *curfile = main->GetCurrentFile(); | |
36 | if (!fTreeCache) { | |
37 | main->SetCacheSize(fCacheSize); | |
38 | fTreeCache = (TTreeCache *)curfile->GetCacheRead(main); | |
39 | if (fCacheSize < 0) fCacheSize = main->GetCacheSize(); | |
40 | } else { | |
41 | curfile->SetCacheRead(fTreeCache, main); | |
42 | fTreeCache->UpdateBranches(main); | |
43 | } | |
44 | if (fTreeCache) { | |
45 | fTreeCacheIsLearning = fTreeCache->IsLearning(); | |
46 | //~ if (fTreeCacheIsLearning) | |
47 | //~ Info("GetTrees","the tree cache is in learning phase"); | |
48 | } | |
49 | ||
50 | ||
51 | ||
52 | TFile * out_file = TFile::Open("/tmp/test_out.root", "RECREATE"); | |
53 | - | in_file->cd(); |
53 | + | in_file->cd(); // Probably somewhere inside PROOF code |
54 | ||
55 | TNtuple * out_tree = (TNtuple*) in_tree->CloneTree(0); | |
56 | out_tree->SetName("out_tree"); | |
57 | ||
58 | ||
59 | // vvv uncomment the following line to work around the bug | |
60 | //~ out_tree->SetDirectory(0); | |
61 | ||
62 | ||
63 | out_tree->SetDirectory(out_file); | |
64 | out_tree->SetAutoSave(); | |
65 | out_tree->Fill(-1, -1, -1); | |
66 | ||
67 | ||
68 | in_file->Close(); | |
69 | ||
70 | out_file->cd(); | |
71 | out_tree->Write(); | |
72 | out_file->Close(); | |
73 | ||
74 | } | |
75 | ||
76 | int main() { | |
77 | test_cache(); | |
78 | return 0; | |
79 | } |