### Content Skeleton

#### Previous topic

G4DAEView Dependencies

#### Next topic

G4DAEView Architecture

# G4DAEView Ideas¶

## JSON State vending¶

It would be useful for g4daeview.py to vend some JSON regarding current high level state over ZMQ or UDP ? EG for interoperation with an ipython session.

• are communicating JSON metadata over ZMQ already, but this only flows with the photon propagation request/response

## Tight zooming not easy¶

Tight zooming (eg viewing steps propagating thru the acrylic surfaces) is difficult as bookmarking cause view jumps.

## During VBO structural changes¶

Avoid VBO comparison assertions using –wipepropagate to delete any preexisting persisted propagation files, rather that compare against them and assert on differences:

g4daeview.sh --with-chroma --load 1 --debugkernel --wipepropagate

Some rare discrepancies in material codes have been observered between propagations see Propagated Flags Mismatch

## Live Style Change issues FIXED¶

Formerly could not make style transitions in some directions. In particular styles that use geometry shaders (noodles, movie) cannot be transitioned to from styles that do not. Actually the transition happens without error but a blank render results.

This was fixed by moving to keeping GLSL shaders around and swapping between them rather than attempting to delete shaders.

## Step Interpolation Visualization IMPLEMENTED¶

Keeping multiple propagation steps in the VBO at once provides an interesting visualization possibility.

1. Run the propagation at event load to a fixed maximum number of steps
• in propagate_vbo.cu store the step results into the vbo in slots by step number
• within the pre-draw DAEPhotonsRenderer/DAEPhotonsKernel CUDA call calculate photon parameters based on an input “time” constant (that can be varied forwards and backwards interactively)
• find the pair of steps whose times straddle the input time and use linear interpolation to calculate the photon position at that time, lay down the result into a slot in the VBO
• invoke geometry shader rendereing as normal with appropriate stride to pickup the dynamically calculated photon parameters

This way you have a “real” time view of simulation progression rather than the very artificicial view of discrete steps.

### What about non-Chroma devices ?¶

Chroma needs CUDA. To visualize on devices without Chroma/CUDA but with OpenCL (or Metal):

• provide way to pullback/persist/transport VBO, without ROOT dependency.

Dumb (non-compute) devices will not be able to do the interpolation, but they could do the fake glDrawElements time cutting via changing the count.

Current rendering requires geometry shading capability, that is not available on OpenGL ES would need to construct line strip VBO rather than generating lines.

Even OpenGL ES Next (expected released 2014) will not have geometry shaders.

## Node selection only applies to to particular geometry dyb/juno/lxe¶

Current workaround is via envvars like DAE_GEOMETRY_DYB. That does not scale so well, probably need to adopt defaults files maybe:

• ~/.g4daeview/defaults.cfg
• ~/.g4daeview/dyb/defaults.cfg
• ~/.g4daeview/juno/defaults.cfg

Pulled out the default geometry nodeselection, but not geo specific starting eye, near etc..:

g4daeview.sh -p lxe -C

## Live Updating Test¶

### worker¶

Start the “worker” with ZMQ tunnel node specified as the SSH config “alias” of the node on which the broker is running

g4daeview.sh --zmqtunnelnode=N       # starts up within a few seconds


### client¶

Start the “client” on N:

csa.sh    # takes several minutes to get going, currently only 100 events


The “worker” can be stopped and started whilst the “client” runs and new live ChromaPhotonList are presented as they are simulated and ZMQ transported. Use auto-created bookmark 9 to find them.

The Segmentation Violation issue due to changing GLUT menus whilst they are in use appears solved by the improved menu structuring and using a pending update slot. However suspect that menu entries from multiple events may appear together in some difficult to reproduce circumstances.