LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
evdb::RootEnv Class Reference

Configure the ROOT environment. More...

#include "RootEnv.h"

Public Member Functions

 RootEnv (int argc, char **argv)
 
 ~RootEnv ()
 
int Run ()
 

Private Member Functions

void SetStyle ()
 
void InterpreterConfig ()
 
void SignalConfig ()
 
void LoadIncludes ()
 
void LoadClasses ()
 

Detailed Description

Configure the ROOT environment.

Definition at line 14 of file RootEnv.h.

Constructor & Destructor Documentation

evdb::RootEnv::RootEnv ( int  argc,
char **  argv 
)

Definition at line 29 of file RootEnv.cxx.

References InterpreterConfig(), LoadClasses(), LoadIncludes(), SetStyle(), and SignalConfig().

30  {
31  //======================================================================
32  // Setup the root environment for a program started with command line
33  // options argc and argv
34  //======================================================================
35  TApplication* app = ROOT::GetROOT()->GetApplication();
36 
37  // ROOT::GetROOT() should initialize gROOT.
38  if(!gROOT)
39  throw cet::exception("RootEnv") << "No ROOT global pointer";
40 
41  if (app == 0) {
42  int largc = 0;
43  char** largv = 0;
44  TRint* rapp = new TRint("TAPP",&largc, largv, 0, 0, kTRUE);
45 
46  // std::string p = gSystem->BaseName(argv[0]); p+= " [%d] ";
47  rapp->SetPrompt("evd [%d] ");
48  }
49  else {
50  gROOT->SetBatch(kFALSE);
51  if (gClient==0) {
52  app->InitializeGraphics();
53  }
54  }
55 
56  this->SetStyle();
57  this->SignalConfig();
58  this->InterpreterConfig();
59  this->LoadIncludes();
60  this->LoadClasses();
61  }
void LoadIncludes()
Definition: RootEnv.cxx:129
void SetStyle()
Definition: RootEnv.cxx:206
void SignalConfig()
Definition: RootEnv.cxx:101
void InterpreterConfig()
Definition: RootEnv.cxx:88
void LoadClasses()
Definition: RootEnv.cxx:188
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
evdb::RootEnv::~RootEnv ( )

Definition at line 65 of file RootEnv.cxx.

66  {
67  // ROOT takes care of the following delete so don't do it twice
68  // if (fTheApp) { delete fTheApp; fTheApp = 0; }
69  }

Member Function Documentation

void evdb::RootEnv::InterpreterConfig ( )
private

Definition at line 88 of file RootEnv.cxx.

Referenced by RootEnv().

89  {
90  //======================================================================
91  // Configure the root interpreter
92  //======================================================================
93  if (gInterpreter) { // gInterpreter from TInterpreter.h
94  gInterpreter->SaveContext();
95  gInterpreter->SaveGlobalsContext();
96  }
97  }
void evdb::RootEnv::LoadClasses ( )
private

Definition at line 188 of file RootEnv.cxx.

Referenced by RootEnv().

189  {
190  //======================================================================
191  // Load classes to make the root session more covenient
192  //======================================================================
193  if (gROOT) {
194  gROOT->LoadClass("TGeometry", "Graf3d");
195  gROOT->LoadClass("TTree", "Tree");
196  gROOT->LoadClass("TMatrix", "Matrix");
197  gROOT->LoadClass("TMinuit", "Minuit");
198  gROOT->LoadClass("TPostScript", "Postscript");
199  gROOT->LoadClass("TCanvas", "Gpad");
200  gROOT->LoadClass("THtml", "Html");
201  }
202  }
void evdb::RootEnv::LoadIncludes ( )
private

Definition at line 129 of file RootEnv.cxx.

Referenced by RootEnv().

130  {
131  //======================================================================
132  // Load include files to make the root session more covenient
133  //======================================================================
134  TApplication* app = gROOT->GetApplication();
135  if (app) {
136  // Load a set of useful C++ includes.
137  // app->ProcessLine("#include <iostream>"); // Root gets this one itself
138  app->ProcessLine("#include <iomanip>");
139  app->ProcessLine("#include <string>");
140 
141  // Load experiment include files
142  // Have to be careful here, not every experiment uses
143  // SRT, so don't try to load the SRT macro paths
144  // if SRT variables aren't defined.
145  std::string mp = gROOT->GetMacroPath();
146  std::string ip;
147  const char* p;
148  bool srtPrivate = false;
149  bool srtPublic = false;
150  p = gSystem->Getenv("SRT_PRIVATE_CONTEXT");
151  if (p) {
152  srtPrivate = true;
153  mp += ":";
154  mp += p;
155  mp += ":";
156  mp += p;
157  mp += "/macros";
158  ip += " -I";
159  ip += p;
160 
161  std::string dip = ".include ";
162  dip += gSystem->Getenv("SRT_PRIVATE_CONTEXT");
163  gROOT->ProcessLine(dip.c_str());
164  }
165  p = gSystem->Getenv("SRT_PUBLIC_CONTEXT");
166  if (p) {
167  srtPublic = true;
168  mp += ":";
169  mp += p;
170  mp += "/macros";
171  ip += " -I";
172  ip += p;
173 
174  std::string dip = ".include ";
175  dip += gSystem->Getenv("SRT_PUBLIC_CONTEXT");
176  gROOT->ProcessLine(dip.c_str());
177  }
178 
179  if(srtPublic || srtPrivate){
180  gROOT->SetMacroPath(mp.c_str());
181  gSystem->SetIncludePath(ip.c_str());
182  }
183  }
184  }
int evdb::RootEnv::Run ( )

Definition at line 73 of file RootEnv.cxx.

74  {
75  //======================================================================
76  // Turn control of the application over to ROOT's event loop
77  //======================================================================
78  TApplication* app = ROOT::GetROOT()->GetApplication();
79  if (app) {
80  app->Run(kFALSE); // kTRUE == "Return from run" request...
81  return 1;
82  }
83  return 0;
84  }
void evdb::RootEnv::SetStyle ( )
private

Definition at line 206 of file RootEnv.cxx.

Referenced by RootEnv().

207  {
208  gROOT->SetStyle("Plain");
209 
210  // Set Line Widths
211  gStyle->SetFrameLineWidth(1);
212  gStyle->SetFuncWidth(1);
213  gStyle->SetHistLineWidth(1);
214 
215  gStyle->SetFuncColor(2);
216  gStyle->SetGridColor(18);
217  gStyle->SetGridStyle(1);
218  // SetGridWidth expects a short, the default value is 1, just use that
219  gStyle->SetGridWidth();
220 
221  // Set margins -- I like to shift the plot a little up and to the
222  // right to make more room for axis labels
223  gStyle->SetPadTopMargin(0.08);
224  gStyle->SetPadBottomMargin(0.36);
225  gStyle->SetPadRightMargin(0.03);
226  gStyle->SetPadLeftMargin(0.10);
227 
228  // Set fonts
229  gStyle->SetTextFont(132);
230  gStyle->SetLabelFont(132,"XYZ");
231  gStyle->SetStatFont(132);
232  gStyle->SetTitleFont(132,"XYZ");
233 
234  gStyle->SetStatFontSize(0.07);
235  gStyle->SetTitleFontSize(0.07);
236  gStyle->SetLabelSize(0.07,"XYZ");
237  gStyle->SetTitleSize(0.07,"XYZ");
238  gStyle->SetTextSize(0.07);
239 
240  gStyle->SetStatW(0.19);
241  gStyle->SetStatX(0.90);
242  gStyle->SetStatY(0.90);
243  gStyle->SetOptTitle(0);
244  gStyle->SetOptStat(0);
245 
246  // Set tick marks and turn off grids
247  gStyle->SetNdivisions(510,"XYZ");
248  gStyle->SetPadTickX(1);
249  gStyle->SetPadTickY(1);
250 
251  // Set paper size for life in the US
252  gStyle->SetPaperSize(TStyle::kUSLetter);
253  gStyle->SetPalette(1);
254 
255  // Force this style on all histograms
256  gROOT->ForceStyle();
257  }
void evdb::RootEnv::SignalConfig ( )
private

Definition at line 101 of file RootEnv.cxx.

Referenced by RootEnv().

102  {
103  //======================================================================
104  // Configure root's signale handlers
105  //======================================================================
106  return;
107  if (gSystem) { // gSystem from TSystem.h
108  // Reset ROOT's signal handling to the defaults...
109  gSystem->ResetSignal(kSigBus, kTRUE);
110  gSystem->ResetSignal(kSigSegmentationViolation,kTRUE);
111  gSystem->ResetSignal(kSigSystem, kTRUE);
112  gSystem->ResetSignal(kSigPipe, kTRUE);
113  gSystem->ResetSignal(kSigIllegalInstruction, kTRUE);
114  gSystem->ResetSignal(kSigQuit, kTRUE);
115  gSystem->ResetSignal(kSigInterrupt, kTRUE);
116  gSystem->ResetSignal(kSigWindowChanged, kTRUE);
117  gSystem->ResetSignal(kSigAlarm, kTRUE);
118  gSystem->ResetSignal(kSigChild, kTRUE);
119  gSystem->ResetSignal(kSigUrgent, kTRUE);
120  gSystem->ResetSignal(kSigFloatingException, kTRUE);
121  gSystem->ResetSignal(kSigTermination, kTRUE);
122  gSystem->ResetSignal(kSigUser1, kTRUE);
123  gSystem->ResetSignal(kSigUser2, kTRUE);
124  }
125  }

The documentation for this class was generated from the following files: