Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SaveCanvas.C
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file SaveCanvas.C
1 // $Id: $
2 
11 #ifndef SaveCanvas_C
12 
13 #define SaveCanvas_C
14 
15 #include <TList.h>
16 #include <TClass.h>
17 #include <TCanvas.h>
18 #include <TSystem.h>
19 #include <TPad.h>
20 #include <TString.h>
21 #include <TDirectory.h>
22 #include <TFile.h>
23 #include <TStyle.h>
24 #include <TObject.h>
25 #include <TH1F.h>
26 
27 #include <iostream>
28 
29 using namespace std;
30 
32 void
33 SavePad(TPad * p)
34 {
35  if (!p)
36  return;
37 
38  TList * l = p->GetListOfPrimitives();
39 // l->Print();
40 
41  TIter next(l);
42  TObject *obj = NULL;
43  while ((obj = next()))
44  {
45 
46  if (obj->IsA()->GetBaseClassOffset(TClass::GetClass("TPad")) >= 0)
47  {
48  if ((TPad *) obj != p)
49  SavePad((TPad *) obj);
50  }
51  else if (obj->IsA()->GetBaseClassOffset(TClass::GetClass("TH1")) >= 0)
52  {
53  cout << "Save TH1 " << obj->GetName() << endl;
54  obj->Clone()->Write(obj->GetName(), TObject::kOverwrite);
55  }
56  else if (obj->IsA()->GetBaseClassOffset(TClass::GetClass("TF1")) >= 0)
57  {
58  cout << "Save TF1 " << obj->GetName() << endl;
59  obj->Clone()->Write(obj->GetName(), TObject::kOverwrite);
60  }
61  else if (obj->IsA()->GetBaseClassOffset(TClass::GetClass("TGraph")) >= 0)
62  {
63  cout << "Save TGraph " << obj->GetName() << endl;
64  obj->Clone()->Write(obj->GetName(), TObject::kOverwrite);
65  }
66  }
67 }
68 
70 
75 void
76 SaveCanvas(TCanvas * c, TString name = "", Bool_t bEPS = kTRUE)
77 {
78  if (name.Length() == 0)
79  name = c->GetName();
80 
81  c->Print(name + ".png");
82 
83  TDirectory * oldd = gDirectory;
84 
85  TString rootfilename;
86 
87  c->Print(rootfilename = name + ".root");
88 
89  TFile f(rootfilename, "update");
90 
91  SavePad(c);
92 
93  f.Close();
94 
95  oldd->cd();
96 
97  if (bEPS)
98  {
99 // c->Print(name + ".pdf");
100 
101  float x = 20;
102  float y = 20;
103  gStyle->GetPaperSize(x, y);
104 
105  gStyle->SetPaperSize(c->GetWindowWidth() / 72 * 2.54,
106  c->GetWindowHeight() / 72 * 2.54);
107 // c->Print(name + ".eps");
108  c->Print(name + ".svg");
109  gSystem->Exec("rsvg-convert -f pdf -o "+name + ".pdf " + name + ".svg");
110  gSystem->Exec("rm -fv " + name + ".svg");
111 
112  gStyle->SetPaperSize(x, y);
113  }
114  // c->Print(name+".C");
115 }
116 
118 
130 void
132 {
133 
134  TCanvas *c1 = new TCanvas("CanvasTest", "CanvasTest", 800, 900);
135 
136  TH1F * h1 = new TH1F("h1", "histo from a gaussian", 100, -3, 3);
137  h1->FillRandom("gaus", 10000);
138 
139  h1->Draw();
140 
141  // single call to save c1 to file RootFileName.*
142  SaveCanvas(c1, "RootFileName");
143 
144 }
145 
146 #endif
147