$Id: README,v 1.8 2000/05/20 10:18:38 johna Exp $

1) Decide which graphics systems drivers you want.  The choice depends
   on what graphics libraries you have access to.  Set the appropriate
   environment variables.  Here are the current possibilities (see
   example "rc" script in Appendix A):

     setenv G4VIS_BUILD_DAWNFILE_DRIVER     1  # Uses Fukui Renderer DAWN 
                                               #  with file connection 
                                               #  (recommended) 
     setenv G4VIS_BUILD_DAWN_DRIVER         1  # Uses Fukui Renderer DAWN 
                                               #  with network connection
                                               #  (for remote visualization)

     setenv G4VIS_BUILD_OPACS_DRIVER        1  # Uses OPACS graphics libraries

     setenv G4VIS_BUILD_OPENGLX_DRIVER      1  # Uses OpenGL libraries
     setenv G4VIS_BUILD_OPENGLXM_DRIVER     1  # Uses OpenGL and Motif 
                                               #  libraries

     setenv G4VIS_BUILD_OIX_DRIVER          1  # Uses OpenInventor X11

     setenv G4VIS_BUILD_RAYTRACER_DRIVER    1  # Uses G4RayTracer

     setenv G4VIS_BUILD_VRMLFILE_DRIVER     1  # Writes VRML ascii files
                                               #  to a local host
                                               #  (recommended)
     setenv G4VIS_BUILD_VRML_DRIVER         1  # Sends  VRML ascii files
                                               #  to a remote host 
                                               #  (for remote visualization)

   Setting any of these sets a C-pre-processor flag of the same name
   and a C-pre-processor flag G4VIS_BUILD.

   In some cases you will need additional variables, e.g.:

     setenv DAWN_HOME /afs/cern.ch/rd44/dev/DAWN/AIX-xlC

     set path=( $path $DAWN_HOME )

     setenv OPACS_HOME ~/private/GEANT4/OPACS

     setenv OGLHOME /usr/local
     setenv OGLFLAGS "-I$(OGLHOME)/include"
     setenv OGLLIBS "-L$OGLHOME/lib -lMesaGLU -lMesaGL"
     
   If you are going to use widgets, then you might need to set the
   environment variable:

     setenv XKEYSYMDB /usr/lib/X11/XKeysymDB

   If you decided to use the Fukui Renderer DAWN, you will also need
   to set, on rsplus, 

     setenv TCL_LIBRARY /usr/local/lib/tcl8.0
     setenv TK_LIBRARY  /usr/local/lib/tk8.0

   Such setting is not necessary on other machines, where only one version 
   of Tcl/Tk is installed.


2) Compile and build the Geant4 libraries:

     cd $G4INSTALL/source
     gmake

   If you have already built the Geant4 libraries and only wish to
   include/change visualization, you need to rebuild visualization and
   interfaces (since some graphics drivers share resources, such as X
   event handling, with interfaces) and rebuild the libary map (in
   case new libraries have been made):

     cd $G4INSTALL/source/visualization
     gmake clean
     gmake
     cd $G4INSTALL/source/interfaces
     gmake clean
     gmake
     cd $G4INSTALL/source
     gmake libmap

   *******************************************************************
   NOTE THAT IF YOU CHANGE ANY OF THE ABOVE ENVIRONMENT VARIABLES THEN
   YOU WILL HAVE TO REPEAT THE ABOVE OPERATIONS.
   *******************************************************************


3) Decide which graphics systems you want to use in your particular
   excutable.  Of course, this has to be chosen from the set you
   installed in (2) above.  Here are the current possibilities:

     setenv G4VIS_USE_DAWNFILE     1
     setenv G4VIS_USE_DAWN         1
     setenv G4VIS_USE_OPACS        1
     setenv G4VIS_USE_OPENGLX      1
     setenv G4VIS_USE_OPENGLXM     1
     setenv G4VIS_USE_OIX          1
     setenv G4VIS_USE_RAYTRACER    1
     setenv G4VIS_USE_VRML         1

   Setting any of these sets a C-pre-processor flag of the same name.
   Also, setting any of these sets the G4VIS_USE C-pre-processor flag
   - see examples/novices/N02/exampleN02.cc to see a use of this.

   The default graphics systems are registered when you execute
   G4VisManager::Initialise() (or G4VisManager::Initialize()).  Note
   also that you can register graphics systems directly, e.g.,
   pVisManager->RegisterGraphicsSystem ( new DAWNFILE ).  You can
   also register your own graphics system, e.g.,
   pVisManager->RegisterGraphicsSystem (new MyGraphicsSystem).


4) Compile and link your code.  This assumes, in the current
   directory, you have a GNUmakefile like
   $G4INSTALL/examples/novice/N01/GNUmakefile and your main program.
   Also your header files are in include/ and your source files are in
   src/ - see, e.g., $G4INSTALL/examples/novice/N01 (this is the
   "canonical" user code structure).

     gmake clean
     gmake

   *******************************************************************
   NOTE THAT IF YOU CHANGE ANY OF THE ABOVE ENVIRONMENT VARIABLES THEN
   YOU WILL HAVE TO REPEAT THE ABOVE gmake clean AND gmake COMMANDS, OR
   AT THE VERY LEAST, RECOMPILE YOUR MAIN PROGRAM AND YOUR DERIVED VIS
   MANAGER CLASS, E.G.,
      touch myprog.cc; touch src/MyVisManager.cc; gmake
   *******************************************************************


5) To run:

     setenv DISPLAY <local IP address>:0
     $G4WORKDIR/bin/$G4SYSTEM/myprog


Appendix A: An "rc" example
---------------------------

---------------------- g4rc ------------------------------------------ 
## Must be installed one level above $G4INSTALL and "sourced", i.e.,
## using '. g4rc'.

if [ -e `pwd`/geant4 ]; then

export G4INSTALL=`pwd`/geant4
export G4WORKDIR=$G4INSTALL
export G4LIB=$G4INSTALL/lib
export G4SYSTEM=Linux-g++
export G4LEVELGAMMADATA=$G4INSTALL/data/PhotonEvaporation

export CLHEP_BASE_DIR=/usr/local

##export CVSROOT=:pserver:allison@g4cvs.cern.ch:/afs/cern.ch/sw/geant4/cvs
export CVSROOT=/afs/cern.ch/sw/geant4/cvs
export CVSEDITOR=emacs

########## DAWN (Fukui) Renderer
export G4VIS_BUILD_DAWN_DRIVER=1
export G4VIS_BUILD_DAWNFILE_DRIVER=1
export G4VIS_USE_DAWN=1
export G4VIS_USE_DAWNFILE=1
export DAWN_BSD_UNIX_DOMAIN=1
export DAWN_GUI_ALWAYS=1
export DAWN_HOME=/home/johna/GEANT4/DAWN
export G4DAWNFILE_VIEWER=NONE
#export PATH=$PATH:$DAWN_HOME ###### Moved to .g4profile ??????????????

############ Ray Tracer
export G4VIS_BUILD_RAYTRACER_DRIVER=1
export G4VIS_USE_RAYTRACER=1

########## OPACS graphics
export G4VIS_BUILD_OPACS_DRIVER=1
export G4VIS_USE_OPACS=1
export OPACS_HOME=/disc2/OPACS
export OPACS_VERSION=v3
export OPACS_SYSTEM=Linux-gxx
export OCONFIG=Linux
. /disc2/OPACS/OPACS/$OPACS_VERSION/setup.sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/disc2/HEPVis/new/Linux-gxx-SF/
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/disc2/SoFree/new/Linux-gxx
OPATH="$OPATH $G4INSTALL/source/visualization/test/OPACS"

########### OpenGL
export G4VIS_BUILD_OPENGLX_DRIVER=1
export G4VIS_USE_OPENGLX=1
export G4VIS_BUILD_OPENGLXM_DRIVER=1
export G4VIS_USE_OPENGLXM=1
export XKEYSYMDB=/usr/lib/X11/XKeysymDB
export OGLHOME=/usr/X11

########### OpenInventor
export G4VIS_BUILD_OIX_DRIVER=1
export G4VIS_USE_OIX=1
export OIVFLAGS="-I/disc2/HEPVis/new/include -DINVENTOR2_1 -I/disc2/SoFree/new/include"
export OIVLIBS="-L/disc2/HEPVis/new/Linux-gxx-SF -lHEPVis -L/disc2/SoFree/new/Linux-gxx -lSoFree"
export SOFREEUSER=/disc2/SoFree/new/user/

############ VRML
export G4VIS_BUILD_VRML_DRIVER=1
export G4VIS_USE_VRML=1
export G4VIS_BUILD_VRMLFILE_DRIVER=1
export G4VIS_USE_VRMLFILE=1

########### Interfaces
export G4UI_BUILD_TERMINAL_SESSION=1
export G4UI_USE_TERMINAL=1
export G4UI_BUILD_GAG_SESSION=1
export G4UI_USE_GAG=1
export G4UI_BUILD_XM_SESSION=1
export G4UI_USE_XM=1
export G4UI_BUILD_WO_SESSION=1
export G4UI_USE_WO=1
#export G4UI_BUILD_XAW_SESSION=1
#export G4UI_USE_XAW=1

############ Persistency
# export G4USE_HEPODBMS=1
# . $G4INSTALL/examples/extended/persistency/PersistentEx01/g4odbms_setup.sh
# export OS=`uname`
# oocheckls -notitle `hostname` || \
#            oolockserver -notitle -noauto

else
 echo No geant4 here.
fi


Appendix B: Sample session
--------------------------

The Visualization Manager has been constructed with verbosity == 1.

$ test19 dumb 1
RunManager is constructing....
Constructing Visualization Manager....
Initialising Visualization Manager....

The following graphics systems drivers are supported in the GEANT4 distribution:

  DAWN     (socket connection to the Fukui Renderer DAWN) High quality technical renderer.
    Features:      exact hidden line, hidden surface algorithms.
                   high (unlimited) resolution.
                   renders to PostScript for viewing and/or hardcopy.
                   remote rendering.
                   off-line rendering.
                   graphical user interface.
    Disadvantages: compute intensive, takes time (use a fast graphics
                   system, such as OpenGL, to select view, then copy
                   to this renderer - /vis~/copy/view, /vis~/set/view).

  DAWNFILE (file connection to the Fukui Renderer DAWN  ) High quality technical renderer.
    Features:      exact hidden line, hidden surface algorithms.
                   high (unlimited) resolution.
                   renders to PostScript for viewing and/or hardcopy.
                   remote rendering.
                   off-line rendering.
                   graphical user interface.
                   connection via g4.prim file to Fukui Renderer DAWN etc.
    Disadvantages: compute intensive, takes time (use a fast graphics
                   system, such as OpenGL, to select view, then copy
                   to this renderer - /vis~/copy/view, /vis~/set/view).

  OPACS (the Orsay Package) 

  OpenGLIX (direct/immediate drawing on X Windows)
    Dumb single buffered X Window, No Graphics Database.
    Advantages:    does not gobble server memory.
                   good for drawing steps and hits.
    Disadvantages: needs G4 kernel for re-Draw.
                   cannot take advantage of graphics accelerators.

  OpenGLSX (display List/stored drawing on X Windows)
    Dumb double buffered X Window with Graphics Database.
    Advantages:    uses display lists as graphics database.
                   fastest possible redraw, e.g., on simple change
                     of viewpoint.
                   uses client-server model for remote viewing
                     (but only if you have a full client-server
                     implementation of OpenGL, i.e., not Mesa).
    Disadvantages: not advised for viewing large numbers of steps
                     and/or hits, because it gobbles memory for database.

  OpenGLIXm (with Motif widgets)
    Smart single buffered X Window, No Graphics Database.
    Advantages:    resizeable, and has Motif-based view-control panel.
                   does not gobble server memory.
                   good for drawing steps and hits.
    Disadvantages: currently locks out GEANT4 commands, until "exit".
                   needs G4 kernel for re-Draw.
                   cannot take advantage of graphics accelerators.

  OpenGLSXm (with Motif widgets)
    Smart double buffered X Window with Graphics Database.
    Advantages:    resizeable, and has Motif-based view-control panel.
                   uses display lists as graphics database.
                   fastest possible redraw, e.g., on simple change
                     of viewpoint.
                   uses client-server model for remote viewing
                     (but only if you have a full client-server
                     implementation of OpenGL, i.e., not Mesa).
    Disadvantages: currently locks out GEANT4 commands, until "exit".
                   not advised for viewing large numbers of steps
                     and/or hits, because it gobbles memory for database.

  Open Inventor    Open Inventor Window/View/Scene.
    Advantages:    Open Inventor feature set (interactivity, scene control).
    Disadvantages: Requires Open Inventor license ($$), Hepvis library (Free).

  VRML1     (produces VRML 1 file over network)
  VRML1FILE (produces VRML 1 file locally    )

  VRML2     (produces VRML 2 file over network)

  VRML2FILE (produces VRML 2 file locally    )

The following graphics systems drivers are installed on your system:
  DAWN     (socket connection to the Fukui Renderer DAWN)
  DAWNFILE (file connection to the Fukui Renderer DAWN)
  OPACS (the Orsay Package)
  OpenGLIX (direct/immediate drawing on X Windows)
  OpenGLSX (display List/stored drawing on X Windows)
  OpenGLIXm (with Motif widgets)
  OpenGLSXm (with Motif widgets)
  VRML1 (produces VRML 1 file over network)
  VRML2 (produces VRML 2 file over network), in preparation
  VRML1File (produces VRML 1 file locally)
  VRML2File (produces VRML 2 file locally), in preparation

You have instantiated your own Visualization Manager, inheriting
  G4VisManager and implementing RegisterGraphicsSystems.  An example
  class MyVisManager is provided which is controlled by the
  following environment variables:
    G4VIS_USE_DAWN
    G4VIS_USE_DAWNFILE
    G4VIS_USE_OPACS
    G4VIS_USE_OPENGLX
    G4VIS_USE_OPENGLXM
    G4VIS_USE_VRML
    G4VIS_USE_VRMLFILE
  Thus, in your main() you have something like:
    G4VisManager* visManager = new MyVisManager;
    visManager -> Initialize ();
  (Don't forget to delete visManager;)
Registering graphics systems....
G4VisManager::RegisterGraphicsSystem: FukuiRenderer (DAWN) registered.
G4VisManager::RegisterGraphicsSystem: DAWNFILE (DAWNFILE) registered.
G4VisManager::RegisterGraphicsSystem: Wo registered.
G4VisManager::RegisterGraphicsSystem: Xo registered.
G4VisManager::RegisterGraphicsSystem: OpenGLImmediateX (OGLIX) registered.
G4VisManager::RegisterGraphicsSystem: OpenGLStoredX (OGLSX) registered.
G4VisManager::RegisterGraphicsSystem: OpenGLImmediateXm (OGLIXm) registered.
G4VisManager::RegisterGraphicsSystem: OpenGLStoredXm (OGLSXm) registered.
G4VisManager::RegisterGraphicsSystem: VRML1 (VRML1) registered.
G4VisManager::RegisterGraphicsSystem: VRML2 (VRML2) registered.
G4VisManager::RegisterGraphicsSystem: VRML1FILE (VRML1FILE) registered.
G4VisManager::RegisterGraphicsSystem: VRML2FILE (VRML2FILE) registered.

You have successfully chosen to use the following graphics systems.
Current available graphics systems are:
  FukuiRenderer (DAWN)
  DAWNFILE (DAWNFILE)
  Wo
  Xo
  OpenGLImmediateX (OGLIX)
  OpenGLStoredX (OGLSX)
  OpenGLImmediateXm (OGLIXm)
  OpenGLStoredXm (OGLSXm)
  VRML1 (VRML1)
  VRML2 (VRML2)
  VRML1FILE (VRML1FILE)
  VRML2FILE (VRML2FILE)
Reading test19.g4m file....
# This is test19.g4m
#
# Switch on echoing of commands and history mechanism.
#
/control/saveHistory
#
# John's personal preferences
/vis/lights/move_with_camera true
/vis~/lights/move_with_camera true
Issue Draw or refresh to see effect.
Current value of lights move flag is 1
/vis/set/marker_choices 1
/vis~/set/marker_choices 1
Marker choice is now:  hidden by surfaces.
Issue Draw or refresh to see effect.
#
# See list of detector possibilities.
/test19det/detector
Available detectors:
0) Part of original test calorimeter
1) Example1 (LBNO, no rotation)
2) Example2 (embryo LBNO, rotated volumes)
3) A parametrised volume
4) MyDetector
Choose by specifying integer parameter.
# Select detector.
#/test19det/detector 1
#/test19det/detector 4
#
# Initialise run, i.e., create geometry, set cuts, etc.
/run/initialize
Detector not established - constructing default detector.
/test19det/detector 4
MyPhysicsList::SetCuts:
...
#
# Set gun for demo (detector 1)
#/gun/particle e+
#/gun/position 0 -100 0 cm
#/gun/direction 0 1 0
#
# Create empty scene.
/vis/scene/create
/vis/camera/reset
/vis~/camera/reset 
New empty scene "scene-0" created.
#
# Add volume to scene - "world" is default.
/vis/scene/add/volume
/vis/camera/reset
/vis~/camera/reset 
First occurrence of "expHall_P", copy no. 0, found at depth 0,
  with further requested depth of descent -1, has been added to scene "scene-0"
#
# See list of graphics systems possibilities.
help /vis/sceneHandler/create
#
# Create a scene handler for a specific graphics system.
# Edit the next line(s) to choose another graphic system
/vis/sceneHandler/create DAWNFILE
G4VisManager::SetCurrentGraphicsSystem: system now DAWNFILE
Graphics system set to DAWNFILE
1 DAWNFILE scenes extanct.
New scene handler "scene-handler-0" created.
/vis/sceneHandler/attach 
Scene "scene-0" attached to scene handler "scene-handler-0.
#/vis/sceneHandler/create DAWN
#/vis/sceneHandler/create OGLIX
#/vis/sceneHandler/create OGLSX
#/vis/sceneHandler/create VRML1
#/vis/sceneHandler/create VRML1FILE
#/vis/sceneHandler/create Xo
#/vis/sceneHandler/create Wo
#
# Create a viewer.
/vis/viewer/create
G4VisManager::CreateViewer: new viewer created: view parameters are:
  View parameters and options:
  Drawing style: wireframe
  Representation style: polyhedron
  Culling: on
  Culling invisible objects: on
  Density culling: off
  Culling daughters covered by opaque mothers: off
  Section flag: false
  Cutaway flag: false
  Explode flag: false
  No. of sides used in circle polygon approximation: 24
  Viewpoint direction:  (0,0,1)
  Up vector:            (0,1,0)
  Field half angle:     0
  Zoom factor:          1
  Current target point: (0,0,0)
  Dolly distance:       0
  Light moves with camera
  Relative lightpoint direction: (1,1,1)
  Actual lightpoint direction: (1,1,1)
  Derived parameters for standard view of object of unit radius:
    Camera distance:   1
    Near distance:     1e-06
    Far distance:      2
    Front half height: 1
  View geometry: true
  View hits    : true
  View digits  : true
  Default VisAttributes:
  G4VisAttributes: visible, daughters visible, colour: (1,1,1,1)
  linestyle: solid, line width: 1
  drawing style unforced
  Default TextVisAttributes:
  G4VisAttributes: visible, daughters visible, colour: (0,0,1,1)
  linestyle: solid, line width: 1
  drawing style unforced
  Default marker: G4VMarker: position: (0,0,0), world size: 0, screen size: 5
           fill style: no fill
           No Visualization Attributes
  Global marker scale: 1
  Marker hidden by surfaces.
  Window size hint: 600x600
  NOTE: objects with visibility flag set to "false" will not be drawn!
  "/vis~/set/culling off" to Draw such objects.
  Also see other "/vis~/set" commands.
New viewer "viewer-0 (DAWNFILE)" created.
#
# Draw current scene
/vis/scene/notifyHandlers
===========================================
Output file: g4.prim
Muximal number of file in the destination directory: 1
  (Customizable as: setenv G4DAWNFILE_MAX_FILE_NUM number) 
===========================================
Traversing scene data...
File  g4.prim  is generated.
No viewer is invoked.
Viewer "viewer-0 (DAWNFILE)" of scene handler "scene-handler-0"
  refreshed at request of scene "scene-0".
#
# for drawing the tracks
# if too many tracks cause core dump => storeTrajectory 0
/tracking/storeTrajectory 1
/vis/scene/include/trajectories
Trajectories will be drawn in scene "scene-0".
Choose a detector with /test19det/detector (or let default be constructed).
Idle> 
