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