Re: Batch mode question

From: Nick van Eijndhoven (Nick@phys.uu.nl)
Date: Thu Jan 27 2000 - 09:53:43 MET


Isn't it such that since version 2.23/10 the syntax is :

root -q file.C

(i.e. drop the -b flag).

                                     Cheers,
                                      Nick.

Rene Brun wrote:
> 
> 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();
> >  }

-- 
Dr. Nick van Eijndhoven
Organisation: Utrecht University/Nikhef, Department of Subatomic Physics
Address:      P.O. Box 80.000, NL-3508 TA Utrecht, The Netherlands
Phone:        +31-30-2532331 (direct) +31-30-2531492 (secr.)   Fax: +31-30-2518689
Electronic:   nick@phys.uu.nl    http://www.phys.uu.nl/~nick   Office: Ornstein lab. 172
At NIKHEF:    H350 Tel: +31-20-5922028 (direct) +31-20-5922000 (secr.) Fax: +31-20-5925155
At CERN:      B160 1-012  Tel: +41-22-7679751 (direct) +41-22-7675857 (secr.) Fax: +41-22-7679480
-------------------------------------------------------------------------------------------------



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET