Hi Michal, To run a Root application (including graphics or not) in batch mode do root -b -q file.C For example, to execute the tutorials macro "benchmarks.C" - interactively, you do cd $ROOTSYS/tutorials root Root > .x benchmarks.C Root > .q - in batch, you do: root -b -q benchmarks.C The same is true if you build your own application with your own main program providing you use TApplication or better TRint as in the Root main program. Rene Brun 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(); > }
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET