Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/Go4ExampleMesh/MainUserAnalysis.cxx

Go to the documentation of this file.
00001 //---------------------------------------------------------------
00002 //        Go4 Release Package v2.10-5 (build 21005) 
00003 //                      03-Nov-2005
00004 //---------------------------------------------------------------
00005 //       The GSI Online Offline Object Oriented (Go4) Project
00006 //       Experiment Data Processing at DVEE department, GSI
00007 //---------------------------------------------------------------
00008 //
00009 //Copyright (C) 2000- Gesellschaft f. Schwerionenforschung, GSI
00010 //                    Planckstr. 1, 64291 Darmstadt, Germany
00011 //Contact:            http://go4.gsi.de
00012 //----------------------------------------------------------------
00013 //This software can be used under the license agreements as stated
00014 //in Go4License.txt file which is part of the distribution.
00015 //----------------------------------------------------------------
00016 #include <iostream.h>
00017 #include <string.h>
00018 #include <stdlib.h>
00019 #include "TROOT.h"
00020 #include "TRint.h"
00021 #include "TApplication.h"
00022 #include "TH1.h"
00023 #include "TBrowser.h"
00024 #include "TCanvas.h"
00025 #include "TBenchmark.h"
00026 #include "Go4ProfileTimer/TGo4ProfileTimer.h"
00027 #include "TMeshAnalysis.h"
00028 #include "Go4AnalysisClient/TGo4AnalysisClient.h"
00029 #include "Go4EventServer/Go4EventServer.h"
00030 
00031 void usage(); // print announcement
00032 
00033 TROOT go4application("GO4","Go4 user analysis");
00034 
00035 #define kGUI   2
00036 #define kBatch 1
00037 
00038 //==================  analysis main program ============================
00039 int main(int argc, char **argv)
00040 {
00041 if(argc < 3) {
00042   usage(); // no argument: print usage
00043   exit(0);
00044 }
00045 
00046 //=================  init root application loop ==========================
00047 TApplication theApp("Go4App", 0, 0);
00048 
00049 //================= Begin analysis setup ==================================
00050 // argv[0] program
00051 // argv[1] "-gui" when started by GUI.
00052 //         In this case the following args are (delivered by GUI):
00053 // argv[2] analysis name as specified in GUI
00054 // argv[3] hostname of GUI
00055 // argv[4] connector port of GUI
00056 //         if not GUI (batch mode) the args are (designed by user):
00057 // argv[1] -file|-trans|-stream|-evserv|-revserv
00058 // argv[2] input name (file or server)
00059 // argv[3] optional -p portnumber
00060 // argv[4] optional -output or number of events
00061 // argv[5] optional number of events
00062 
00063 Int_t  runningMode;      // kGUI or kBatch
00064 Int_t  maxevents = -1;   // number of events (batch mode)
00065 Int_t  intype=GO4EV_NULL;// type of source
00066 Bool_t writeout1=kFALSE;  // write output file
00067 Bool_t writeout2=kFALSE;  // write output file
00068 UInt_t iport;            // port number used by GUI
00069 UInt_t sport=6003;       // remote event server port
00070 Int_t  iarg;             // argument index
00071 Text_t serv[128];        // input name
00072 Text_t out[128];         // output root events
00073 Text_t anl[128];         // output root events
00074 Text_t asf[128];         // auto save file (batch)
00075 Text_t filetype[8];      // file type .lmd or .lml
00076 Text_t *pc,*tmpname,*outname;
00077 TMeshAnalysis* analysis;
00078 
00079 // strip any path information from input:
00080 // outname is name without path and postfix
00081 // postfix .lmd is default in all cases
00082 // postfix .lml is a metafile, @ is prefixed
00083  strcpy(filetype,".lmd");
00084  tmpname=argv[2]+strlen(argv[2])-4;
00085  if((pc=strstr(tmpname,".lmd")) != 0)*pc=0;
00086  if((pc=strstr(tmpname,".lml")) != 0){*pc=0;strcpy(filetype,".lml");}
00087  tmpname=argv[2];
00088  if((pc=strstr(argv[2],"@")) != 0) tmpname++;
00089  outname=tmpname;
00090  if((tmpname=strrchr(outname,'/')) != 0) outname=tmpname+1;
00091  strncpy(asf,outname,110);     // auto save file
00092  strcat(asf,"_AS");
00093 
00094 if(strcmp(argv[1],"-gui") == 0)
00095 {
00096 // set up arguments for GUI mode
00097    runningMode = kGUI;
00098    iport = (argc>4) ? atoi(argv[4]) : 5000; // port of GUI server
00099    intype=GO4EV_MBS_FILE;
00100    writeout1=kFALSE;        // no output
00101    writeout2=kFALSE;        // no output
00102    strcpy(serv,"/GSI/lea/gauss"); // default input file
00103    strcpy(out,"gauss_MeshRawEvent");
00104    strcpy(anl,"gauss_MeshAnl");
00105  }
00106  else
00107 // set up arguments for batch mode
00108  {
00109    strncpy(out,outname,110);     // output root file
00110    strcat(out,"_XXXEvent"); // append name of output event object
00111    strncpy(anl,outname,110);     // output root file
00112    strcat(anl,"_XXXAnl");   // append name of output event object
00113    runningMode = kBatch;
00114    strncpy(serv,argv[2],110);     // input (file with full path)
00115         if(strstr(argv[1],"-f")){intype=GO4EV_MBS_FILE;strcat(serv,filetype);}
00116    else if(strstr(argv[1],"-t")) intype=GO4EV_MBS_TRANSPORT;
00117    else if(strstr(argv[1],"-s")) intype=GO4EV_MBS_STREAM;
00118    else if(strstr(argv[1],"-e")) intype=GO4EV_MBS_EVENTSERVER;
00119    else if(strstr(argv[1],"-r")) intype=GO4EV_MBS_REVSERV;
00120    else {
00121        cout << "invalid input type: " << argv[1] << endl;
00122        usage(); // print usage
00123        exit(0);
00124      }
00125    iarg=3;
00126    if(argc > iarg){
00127      if(strstr(argv[iarg],"-o"))writeout2=kTRUE;
00128      else if(strstr(argv[iarg],"-p")){iarg++; sport=atoi(argv[iarg]);}
00129      else maxevents=atoi(argv[iarg]);
00130      iarg++;
00131    }
00132    if(argc > iarg){
00133      if(strstr(argv[iarg],"-o"))writeout2=kTRUE;
00134      else maxevents=atoi(argv[iarg]);
00135      iarg++;
00136    }
00137    if(argc > iarg)maxevents=atoi(argv[iarg]);
00138    if(maxevents == -1) maxevents = 99999999;
00139    cout << endl << "**** Input " << serv << " (" << argv[1] << ") ";
00140    if(strstr(argv[1],"-r")) cout << "port " << sport;
00141    cout << endl << "     output step1: " << out << ".root";
00142    if(writeout1) cout << " enabled"; else cout << " disabled";
00143    cout << endl << "     output step2: " << anl << ".root";
00144    if(writeout2) cout << " enabled"; else cout << " disabled";
00145    cout << endl << "     process " << maxevents << " events" << endl;
00146    cout << "     auto save file: " << asf << ".root" << endl << endl;
00147  }
00148 // Now setup the  analysis itself
00149 // arguments could be adjusted for other needs
00150 
00151 //=================== log message settings =============================
00152 TGo4Log::Instance();        // init logger object
00153 TGo4Log::SetIgnoreLevel(1); // set this to 1 to suppress detailed debug output
00154                             // set this to 2 to get warnings and errors only
00155                             // set this to 3 to get errors only
00156 TGo4Log::OpenLogfile("XXXLogfile.txt","--Logfile for go4 XXX--",kFALSE);
00157 TGo4Log::LogfileEnable(kFALSE); // will enable or disable logging all messages
00158 
00159 analysis = new TMeshAnalysis(serv,intype,sport,out,anl,writeout1,writeout2);
00160 
00161 analysis->SetAutoSaveFile(asf);   // optional
00162 analysis->SetAutoSaveInterval(0); // after n seconds , 0 = at termination of event loop
00163 analysis->SetAutoSave(kFALSE);    // optional
00164 
00165 // ===================== End analysis setup ================================
00166 
00167  if(runningMode == kBatch)
00168    {
00169      cout << "**** Main: starting analysis in batch mode ...  " << endl;
00170      analysis->SetAutoSave(kTRUE);   // optional enable auto-save
00171      if (analysis->InitEventClasses() )
00172        {
00173           analysis->RunImplicitLoop(maxevents);
00174           delete analysis;
00175           cout << "**** Main: Done!"<<endl;
00176           gApplication->Terminate();
00177        }
00178      else
00179        {
00180           cout << "**** Main: Init event classes failed, aborting!"<<endl;
00181           gApplication->Terminate();
00182        }
00183    }
00184  if(runningMode == kGUI)
00185    {
00186      cout << "**** Main: starting analysis in client mode ..." << endl;
00187      // to start histogram server: kTRUE,"base","password"
00188      TGo4AnalysisClient* client = new TGo4AnalysisClient(argc,argv,analysis,kFALSE,"","");
00189      cout << "**** Main created AnalysisClient Instance: "<<client->GetName()<<endl;
00190    }
00191 //=================  start root application loop ==========================
00192 cout << "Run the application loop" << endl;
00193 theApp.Run();
00194 return 0;
00195 }
00196 
00197 void usage()
00198 {
00199 cout << endl;
00200 cout << "* GO4  online analysis    " << endl;
00201 cout << "* H. Essel, GSI, Darmstadt" << endl;
00202 cout << "* calling:                " << endl;
00203 cout << "* MainUserAnalysis -file|-trans|-stream|-evserv|-revserv input [-port #] [-output] [events]" <<endl;
00204 cout << endl;
00205 }
00206 
00207 //----------------------------END OF GO4 SOURCE FILE ---------------------

Generated on Tue Nov 8 10:55:54 2005 for Go4-v2.10-5 by doxygen1.2.15