Hi Michal, what exactly do you understand under batch mode? No graphics, no interactivity, both? In case you don't want graphics follow the recipe given by Rene, use the -b option and your program will run like before but you will not get anything on the screen (PostScript output is possible though). If you don't want to get the interactive prompt (in case you want to run the job via a batch submission system) then you should not call the theApp->Run() method. This Run() method will wait for user input which is generally not possible when running in a batch system (unless you construct some scripts whith an input file on stdin, etc.). Cheers, Fons. lijowski@cosray2.wustl.edu wrote: > > Hello, > > How to modify the attached code to run it in the batch mode? > > Thank you and best regards. > > Michal Lijowski > > // This program tests splitting histogram > > #include <TROOT.h> > #include <TFile.h> > #include <Rtypes.h> > #include <TSystem.h> > #include <TStyle.h> > #include <TCanvas.h> > #include <TApplication.h> > #include <TBenchmark.h> > #include <TAxis.h> > #include <TH1.h> > #include <TH2.h> > #include <TGraph.h> > #include <TText.h> > #include <TObjString.h> > #include <TPolyMarker.h> > #include <iostream.h> > > // ---------------------------------------------------------------------- > int main(int argc, char **argv) > > { > Char_t *ProgName, tmpstr[80]; > > TROOT TEST_HIST("TEST_HIST", "TEST HIST"); > > /* Kludge so that this will work under the debugger. */ > ProgName = strrchr(argv[0], '/'); > if (ProgName == NULL) { > /* not running under gdb */ > ProgName = argv[0]; > } else { > /* running under gdb */ > ProgName++; > } > > gBenchmark = new TBenchmark(); > gBenchmark -> Start(ProgName); > gROOT -> SetStyle("Plain"); > gStyle -> SetOptStat(11); > gStyle -> SetCanvasColor(10); > > const Int_t Xsize = 500, Ysize = 500; > Int_t xk, yk; > > cout << gSystem -> Exec("uname -a") << endl; > > Text_t *rootversion = (Text_t *) gROOT -> GetVersion(); > sprintf(tmpstr, " ROOT version %s", rootversion); > > cout << tmpstr << endl; > > // create a new Root file > char outdir[100] = "/data3/users/lijowski/"; > Char_t outfile[200]; > > sprintf(outfile, "%s%s.root", outdir, ProgName); > printf(" Output file %s\n", outfile); > > TFile *FF = new TFile(outfile, "recreate"); > > Char_t htitle[80], ctitle[40], cname[40], outps[120]; > > Float_t AA = 100.0; > Float_t BB1 = 250.0; > Float_t BB2 = 250.0; > Float_t CC1 = 50.0; > Float_t CC2 = 50.0; > > sprintf(htitle, "TEST HISTOGRAM"); > > Float_t xxmin = 0, xxmax = Xsize, yymin = 0, yymax = Ysize; > TH2F *HH = new TH2F("HH", htitle, Xsize, xxmin, xxmax, Ysize, yymin, yymax); > HH -> SetXTitle("X - coordinate (half pixel)"); > HH -> GetXaxis() -> CenterTitle(kTRUE); > HH -> SetYTitle("Y - coordinate (half pixel)"); > HH -> GetYaxis() -> CenterTitle(kTRUE); > > // fill the histogram > for (yk = 0; yk < Ysize; yk++) { > Float_t YY = (Float_t) yk; > for (xk = 0; xk < Xsize; xk++) { > Float_t XX = (Float_t) xk; > Float_t argx = (XX - BB1) / CC1; > Float_t argy = (YY - BB2) / CC2; > Float_t ZZ1 = TMath::Exp(-0.5 * argx * argx); > Float_t ZZ2 = TMath::Exp(-0.5 * argy * argy); > Float_t ww = AA * ZZ1 * ZZ2; > > HH -> Fill(XX, YY, ww); > } > } > > printf(" Done filling histogram %d\n", HH -> GetEntries()); > > TApplication theApp("App", &argc, argv); > > Int_t ii = 0; > TCanvas *CNVS[5]; > sprintf(cname, "CVS_%02d", ii); > sprintf(ctitle, "Canvas %02d", ii); > CNVS[ii] = new TCanvas(cname, ctitle, 500, 500); > gPad -> SetTicks(); > HH -> DrawCopy(); > CNVS[ii] -> Update(); > ii++; > > // Enter event loop, one can now interact with the objects in > // the canvas. Select "Exit ROOT" from Canvas "File" menu to exit > // the event loop and execute the next statements. > theApp.Run(kTRUE); > > Float_t XLimits[4][2] = { > 0.0, 250.0, > 250.0, 500.0}; > > Float_t YLimits[3][2] = { > 0.0, 250.0, > 250.0, 500.0}; > > // split this histogram into 4 parts > for (yk = 0; yk < 2; yk++) { > for (xk = 0; xk < 2; xk++) { > sprintf(cname, "CVS_%02d", ii); > sprintf(ctitle, "Canvas %02d", ii); > CNVS[ii] = new TCanvas(cname, ctitle, 500, 500); > gPad -> SetTicks(); > Float_t xxmin = XLimits[xk][0]; > Float_t xxmax = XLimits[xk][1]; > Float_t yymin = YLimits[yk][0]; > Float_t yymax = YLimits[yk][1]; > cout << " xxmin " << xxmin << " xxmax " << xxmax << " yymin " << yymin << " yymax " << yymax << endl; > Int_t IBXmin = HH -> GetXaxis() -> FindBin(xxmin); > Int_t IBXmax = HH -> GetXaxis() -> FindBin(xxmax); > Int_t IBYmin = HH -> GetYaxis() -> FindBin(yymin); > Int_t IBYmax = HH -> GetYaxis() -> FindBin(yymax); > cout << " IBXmin " << IBXmax << " IBXmax " << IBXmax << " IBYmin " << IBYmin << " IBYmax " << IBYmax << endl; > > HH -> GetXaxis() -> SetRange(IBXmin, IBXmax); > HH -> GetYaxis() -> SetRange(IBYmin, IBYmax); > HH -> DrawCopy(); > CNVS[ii] -> Update(); > ii++; > // Enter event loop, one can now interact with the objects in > // the canvas. Select "Exit ROOT" from Canvas "File" menu to exit > // the event loop and execute the next statements. > theApp.Run(kTRUE); > } > } > > FF -> Write(); > FF -> Close(); > gBenchmark -> Stop(ProgName); > cout << " Real Time " << gBenchmark->GetRealTime(ProgName) << " secs" << endl; > cout << " CPU Time " << gBenchmark->GetCpuTime(ProgName) << " secs" << endl; > > // Here we don't return from the eventloop. "Exit ROOT" will quit the app. > theApp.Run(); > } -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET