View difference between Paste ID: faWW6g4a and MfQhREmz
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
}