source: trunk/MagicSoft/Mars/showplot.cc@ 8696

Last change on this file since 8696 was 8683, checked in by tbretz, 17 years ago
*** empty log message ***
File size: 11.8 KB
Line 
1#include <TROOT.h>
2#include <TClass.h>
3#include <TGClient.h>
4#include <TRint.h>
5
6#include "MLog.h"
7#include "MLogManip.h"
8
9#include "MArgs.h"
10
11#include "MStatusDisplay.h"
12
13using namespace std;
14
15static void StartUpMessage()
16{
17 // 1 2 3 4 5
18 // 12345678901234567890123456789012345678901234567890
19 gLog << endl;
20 gLog << "showplot --- Mars V" << MARSVER << " compiled on <" << __DATE__ << "> using ROOT v" << ROOT_RELEASE << endl;
21 gLog << endl;
22}
23
24static void Usage()
25{
26 // 1 2 3 4 5 6 7 8
27 // 12345678901234567890123456789012345678901234567890123456789012345678901234567890
28 gLog << all << endl;
29 gLog << "Sorry the usage is:" << endl;
30 gLog << " showplot [options] {filename}|{filetype number}" << endl << endl;
31 gLog << " Arguments:" << endl;
32 gLog << " filename Input file containing an MStatusArray" << endl;
33 gLog << " filetype number Open file of filetype calib, signal, star, etc." << endl;
34 gLog << " of sequence or dataset number" << endl << endl;
35 gLog << " Root Options:" << endl;
36 gLog << " -b Batch mode (no graphical output to screen)" << endl<<endl;
37 gLog << " -r Start the root interpreter" << endl<<endl;
38 gLog << " Options: "<< endl;
39 gLog.Usage();
40 gLog << " -q Quit when job is finished" << endl;
41 gLog << endl;
42 gLog << " General Output Options: "<< endl;
43 gLog << " --print[=printer] Print to printer" << endl;
44 gLog << " --save-as-ps[=filename] Save plots as postscript" << endl;
45 gLog << " --save-as-pdf[=filename] Save plots as pdf-file" << endl;
46 gLog << " --save-as-svg[=filename] Save plots as svg-file" << endl;
47 gLog << " --save-as-root[=filename] Save plots as root file" << endl;
48 gLog << " --save-as-C[=filename] Save plots as root scripts" << endl;
49 gLog << " --tab=num Save only tab number num" << endl << endl;
50 gLog << " Print only options:" << endl;
51 gLog << " --print-cmd='lpr -P%p %f' Set the printer command" << endl;
52 gLog << " --print-dir=/tmp Set the printing temp directory" << endl << endl;
53 gLog << " GUI only options:" << endl;
54 gLog << " --save-as-gif[=filename] Save plots as gif files" << endl;
55 gLog << " --save-as-jpg[=filename] Save plots as jpg files" << endl;
56 gLog << " --save-as-xpm[=filename] Save plots as xpm files" << endl;
57 gLog << " --save-as-png[=filename] Save plots as png files" << endl;
58 gLog << " --save-as-bmp[=filename] Save plots as bmp files" << endl;
59 gLog << " --save-as-xml[=filename] Save plots as xml files" << endl << endl;
60 gLog << " Size options:" << endl;
61 gLog << " --display-width=w Set width of display window to w" << endl;
62 gLog << " --display-height=h Set height of display window to h" << endl;
63 gLog << " --canvas-width=w Set width of canvas' contained by display to w" << endl;
64 gLog << " --canvas-height=h Set height of canvas' contained by display to h" << endl;
65 gLog << " --auto-size Determin optimum size (not available in batch mode)" << endl;
66 gLog << endl;
67 gLog << " --version, -V Show startup message with version number" << endl;
68 gLog << " -?, -h, --help This help" << endl;
69 gLog << endl;
70 gLog << "Description:" << endl;
71 gLog << " Use showplot to display a MStatusArray in an MStatusDisplay." << endl;
72 gLog << " MStatusArrays are typically written by programs showing data" << endl;
73 gLog << " check plots, like callisto." << endl << endl;
74 gLog << " Only the last size option given is taken into account." << endl;
75 gLog << " Width or height is set according to height or width." << endl << endl;
76 gLog << " In batch mode display width and height and auto-size is ignored." << endl;
77 gLog << "Printing:" << endl;
78 gLog << " For more details see MStatusDisplay::PrintPS" << endl << endl;
79 gLog << "Examples:" << endl;
80 gLog << " showplot filename.root" << endl;
81 gLog << " showplot -b --null --print --print-cmd='psnup -2 %f' filename.root | lpr" << endl;
82 gLog << " showplot -b --print --print-cmd='psbook %f | psnup -2 | lpr' filename.root" << endl;
83 gLog << " showplot -b --print --print-cmd='cat %f' filename.root > filename.ps" << endl;
84 gLog << " showplot -b --save-as-ps filename.root" << endl;
85 gLog << " showplot -q --save-as-gif=tab5.gif --tab=5 filename.root" << endl;
86 gLog << " showplot -b --save-as-ps --print=lp2 filename.root" << endl;
87 gLog << endl;
88}
89
90int main(int argc, char **argv)
91{
92 if (!MARS::CheckRootVer())
93 return 0xff;
94
95 MLog::RedirectErrorHandler(MLog::kColor);
96
97 //
98 // Evaluate arguments
99 //
100 MArgs arg(argc, argv, kTRUE);
101 gLog.Setup(arg);
102
103 StartUpMessage();
104
105 if (arg.HasOnly("-V") || arg.HasOnly("--version"))
106 return 0;
107
108 if (arg.HasOnly("-?") || arg.HasOnly("-h") || arg.HasOnly("--help"))
109 {
110 Usage();
111 return 2;
112 }
113
114 const Bool_t kQuit = arg.HasOnlyAndRemove("-q");
115 const Bool_t kBatch = arg.HasOnlyAndRemove("-b");
116 const Bool_t kRoot = arg.HasOnlyAndRemove("-r");
117
118 const Int_t kTab = arg.GetIntAndRemove("--tab=", -1);
119
120 const Bool_t kPrint = arg.HasOnlyAndRemove("--print") || arg.Has("--print=");
121 const Bool_t kSaveAsPs = arg.HasOnlyAndRemove("--save-as-ps") || arg.Has("--save-as-ps=");
122 const Bool_t kSaveAsPdf = arg.HasOnlyAndRemove("--save-as-pdf") || arg.Has("--save-as-pdf=");
123 const Bool_t kSaveAsSvg = arg.HasOnlyAndRemove("--save-as-svg") || arg.Has("--save-as-svg=");
124 const Bool_t kSaveAsGif = arg.HasOnlyAndRemove("--save-as-gif") || arg.Has("--save-as-gif=");
125 const Bool_t kSaveAsJpg = arg.HasOnlyAndRemove("--save-as-jpg") || arg.Has("--save-as-jpg=");
126 const Bool_t kSaveAsXpm = arg.HasOnlyAndRemove("--save-as-xpm") || arg.Has("--save-as-xpm=");
127 const Bool_t kSaveAsPng = arg.HasOnlyAndRemove("--save-as-png") || arg.Has("--save-as-png=");
128 const Bool_t kSaveAsBmp = arg.HasOnlyAndRemove("--save-as-bmp") || arg.Has("--save-as-bmp=");
129 const Bool_t kSaveAsXml = arg.HasOnlyAndRemove("--save-as-xml") || arg.Has("--save-as-xml=");
130 const Bool_t kSaveAsRoot = arg.HasOnlyAndRemove("--save-as-root") || arg.Has("--save-as-root=");
131 const Bool_t kSaveAsC = arg.HasOnlyAndRemove("--save-as-C") || arg.Has("--save-as-C=");
132
133 const Int_t kCanvasWidth = arg.GetIntAndRemove("--canvas-width=", -1);
134 const Int_t kCanvasHeight = arg.GetIntAndRemove("--canvas-height=", -1);
135
136 const Bool_t kAutoSize = arg.HasOnlyAndRemove("--auto-size");
137 Int_t kDisplayWidth = arg.GetIntAndRemove("--display-width=", -1);
138 Int_t kDisplayHeight = arg.GetIntAndRemove("--display-height=", -1);
139 if (kAutoSize)
140 {
141 kDisplayWidth=0;
142 kDisplayHeight=0;
143 }
144
145 TString kNamePrint = arg.GetStringAndRemove("--print=");
146 TString kPrintCmd = arg.GetStringAndRemove("--print-cmd=");
147 TString kPrintDir = arg.GetStringAndRemove("--print-dir=");
148 TString kNamePs = arg.GetStringAndRemove("--save-as-ps=");
149 TString kNamePdf = arg.GetStringAndRemove("--save-as-pdf=");
150 TString kNameSvg = arg.GetStringAndRemove("--save-as-svg=");
151 TString kNameGif = arg.GetStringAndRemove("--save-as-gif=");
152 TString kNameJpg = arg.GetStringAndRemove("--save-as-jpg=");
153 TString kNameXpm = arg.GetStringAndRemove("--save-as-xpm=");
154 TString kNamePng = arg.GetStringAndRemove("--save-as-png=");
155 TString kNameBmp = arg.GetStringAndRemove("--save-as-bmp=");
156 TString kNameXml = arg.GetStringAndRemove("--save-as-xml=");
157 TString kNameRoot = arg.GetStringAndRemove("--save-as-root=");
158 TString kNameC = arg.GetStringAndRemove("--save-as-C=");
159
160
161 //
162 // check for the right usage of the program
163 //
164 if (arg.GetNumOptions()>0)
165 {
166 gLog << err << "Unknown command line options..." << endl;
167 arg.Print("options");
168 gLog << endl;
169 return 3;
170 }
171 if (arg.GetNumArguments()<1 || arg.GetNumArguments()>2)
172 {
173 gLog << warn << "WARNING - Wrong number of arguments..." << endl;
174 Usage();
175 return 2;
176 }
177 if (arg.GetNumArguments()==2 && !arg.GetArgumentStr(1).IsDigit())
178 {
179 gLog << warn << "WARNING - First argument must not be a number..." << endl;
180 Usage();
181 return 2;
182 }
183
184 TApplication *app = kRoot ? new TRint("showplot", &argc, argv) : new TApplication("showplot", &argc, argv);
185 if (!gROOT->IsBatch() && !gClient || gROOT->IsBatch() && !kBatch)
186 {
187 gLog << err << "Bombing... maybe your DISPLAY variable is not set correctly!" << endl;
188 return 1;
189 }
190
191 //
192 // Process filenames
193 //
194 TString kInput = arg.GetArgumentStr(0);
195
196 //
197 // Something special for datacenter access
198 //
199 if (arg.GetNumArguments()==2)
200 {
201 const Int_t num = arg.GetArgumentStr(1).Atoi();
202 TString file = "/magic/data/";
203
204 kInput.ToLower();
205 switch (kInput.Hash())
206 {
207 case 3438106369U:
208 case 764164111U:
209 file += "callisto";
210 break;
211 default:
212 file += kInput;
213 break;
214 }
215 file += kInput==(TString)"ganymed" ? Form("/%05d", num/100000) : Form("/%04d", num/10000);
216 file += Form("/%08d/", num);
217 file += kInput;
218 file += Form("%08d.root", num);
219
220 kInput = file;
221
222 gLog << inf << "Inflated file name: " << kInput << endl;
223 }
224
225 if (kNamePs.IsNull() && kSaveAsPs)
226 kNamePs = kInput;
227 if (kNamePdf.IsNull() && kSaveAsPdf)
228 kNamePdf = kInput;
229 if (kNameSvg.IsNull() && kSaveAsSvg)
230 kNameSvg = kInput;
231 if (kNameGif.IsNull() && kSaveAsGif)
232 kNameGif = kInput;
233 if (kNameJpg.IsNull() && kSaveAsJpg)
234 kNameJpg = kInput;
235 if (kNameXpm.IsNull() && kSaveAsXpm)
236 kNameXpm = kInput;
237 if (kNamePng.IsNull() && kSaveAsPng)
238 kNamePng = kInput;
239 if (kNameBmp.IsNull() && kSaveAsBmp)
240 kNameBmp = kInput;
241 if (kNameXml.IsNull() && kSaveAsXml)
242 kNameXml = kInput;
243 if (kNameRoot.IsNull() && kSaveAsRoot)
244 kNameRoot = kInput;
245 if (kNameC.IsNull() && kSaveAsC)
246 kNameC = kInput;
247
248 //
249 // Update frequency by default = 1Hz
250 //
251 MStatusDisplay *d = new MStatusDisplay(kDisplayWidth, kDisplayHeight);
252
253 // From now on each 'Exit' means: Terminate the application
254 d->SetTitle(kInput);
255 d->SetWindowName(kInput);
256
257 if (kCanvasHeight>0)
258 d->SetCanvasHeight(kCanvasHeight);
259 if (kCanvasWidth>0)
260 d->SetCanvasWidth(kCanvasWidth);
261
262 const Int_t rc = d->Open(kInput);
263
264 if (kPrint)
265 d->PrintPS(kTab, kNamePrint, kPrintCmd, kPrintDir);
266 if (kSaveAsPs)
267 d->SaveAsPS(kTab, kNamePs);
268 if (kSaveAsPdf)
269 d->SaveAsPDF(kTab, kNamePdf);
270 if (kSaveAsSvg)
271 d->SaveAsSVG(kTab, kNameSvg);
272 if (kSaveAsGif)
273 d->SaveAsGIF(kTab, kNameGif);
274 if (kSaveAsJpg)
275 d->SaveAsJPG(kTab, kNameJpg);
276 if (kSaveAsXpm)
277 d->SaveAsXPM(kTab, kNameXpm);
278 if (kSaveAsPng)
279 d->SaveAsPNG(kTab, kNamePng);
280 if (kSaveAsBmp)
281 d->SaveAsBMP(kTab, kNameBmp);
282 if (kSaveAsXml)
283 d->SaveAsXML(kTab, kNameXml);
284 if (kSaveAsRoot)
285 d->SaveAsRoot(kTab, kNameRoot);
286 if (kSaveAsC)
287 d->SaveAsC(kTab, kNameC);
288
289 if (kBatch || kQuit || !rc)
290 {
291 delete d;
292 return 0;
293 }
294
295 // From now on each 'Close' means: Terminate the application
296 d->SetBit(MStatusDisplay::kExitLoopOnClose);
297
298 // Wait until the user decides to exit the application
299 app->Run(kFALSE);
300 delete app;
301 return 0;
302}
Note: See TracBrowser for help on using the repository browser.