Batch mode question

From: lijowski@cosray2.wustl.edu
Date: Tue Jan 25 2000 - 17:38:19 MET


  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