CEMPD / VERDI

This is the repo for the VERDI project, written in java.
GNU General Public License v3.0
17 stars 13 forks source link

3-D contour plot display #184

Closed dschwede closed 2 years ago

dschwede commented 6 years ago

• 3-D contour plots display too much up-and-down visual noise that doesn’t reflect the actual data field.

lizadams commented 5 years ago

I believe the 3-D contour plot is from vis5d.
https://www.ssec.wisc.edu/visad-docs/javadoc/index.html?visad/data/vis5d/Vis5DFamily.html

We could look into using VisAD, which is what IDV uses: https://www.unidata.ucar.edu/software/idv/ https://www.unidata.ucar.edu/software/idv/docs/userguide/examples/3DSurface.html https://www.ssec.wisc.edu/~billh/visad.html#collaboration

lizadams commented 2 years ago

There is a very nice 3D visualization package called Paraview. Paraview's documentation is available here: https://www.paraview.org/ Paraview in turn uses VTK, as described in their User Manual - both are available as open source from Kitaware. https://kitware.github.io/vtk-examples/site/Java/

The Visualization Toolkit (VTK) is an open-source, freely available software system for 3D computer graphics, mod- eling, image processing, volume rendering, scientific visualization, and information visualization. VTK also includes ancillary support for 3D interaction widgets, two and three-dimensional annotation, and parallel computing. At its core, VTK is implemented as a C++ toolkit, requiring users to build applications by combining various objects into an application. The system also supports automated wrapping of the C++ core into Python, Java, and Tcl so that VTK applications may also be written using these interpreted programming languages. VTK is used world-wide in commercial applications, research and development, and as the basis of many advanced visualization applications such as ParaView, VisIt, VisTrails, Slicer, MayaVi, and OsiriX.

yadongxuEPA commented 2 years ago

Retested with VERDI_2.1.4_linux64_20220706.tar.gz on Atmos, found that this issue has not resolved. Tested with the data file "CCTM46_P16.baseO2a.36k.O3MAX" to VERDI GUI and clicked on " Contour Plot", no plot was displayed and the following error messages was shown in the command window. VERDI_testing_issue_184_1

systemsgo commented 2 years ago

299 is fixed now. I'm still working on an alternate display to reduce the noise.

lizadams commented 2 years ago

retested using VERDI_2.1.4_mac_20220720.tar.gz

cd VERDI_2.1.4
./verdi.sh -f $cwd/data/model/CCTM46_P16.baseO2a.36k.O3MAX -s "O3[1]" -g contour

It worked. I was able to generate a plot on my MacBook Pro. Including a few screenshots.

Screen Shot 2022-07-20 at 12 14 00 PM Screen Shot 2022-07-20 at 12 14 09 PM

Note, when I used the option to save as image within VERDI, it seemed to generate an image that was only a partial capture of the full image. See the following: O3_contour_ts_3 contour_O3_ts_4 contour_O3_ts_5

lizadams commented 2 years ago

Created a script to try and create the contour plot, then save the image as a "png" file, and then quit. The script doesn't work unless I comment out the -saveImage step. cd VERDI_2.1.4/data/scripts

#!/bin/csh -f

#script for testing command line options

echo 'running verdi_script_contour.csh'

cd $cwd/../..
  ./verdi.sh \
         -f $cwd/data/model/CCTM46_P16.baseO2a.36k.O3MAX \
         -s "O3[1]" \
         -g contour \
#         -saveImage "png" $cwd/data/plots/contour_O3.png \
#         -quit
   echo 'check outputfile' `ls -lrt $cwd/data/plots/contour_O3.png`

VERDI should allow the user to create a png image of the contour plot, and it should also capture the full image available, not just the upper left corner.

lizadams commented 2 years ago

I also tried this on our Linux servers, dogwood and longleaf. VERDI_2.1.4_linux64_20220720.tar.gz

I don't know if I need to load a module or if there is a dependency that is not available on our servers, or if this is an issue with the linux distribution of VERDI.

./verdi_script_contour.csh

running verdi_script_contour.csh libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Caught handled GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection 172.22.212.206:14.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x6e6097ac, isOwner false, <149f4264, 22e81e63>[count 0, qsz 0, owner ]]] on thread main-SharedResourceRunner

[1]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
[2]: java.base/java.lang.Thread.run(Thread.java:833)

Caused0 by GLException: main-SharedResourceRunner: Error making temp context(1) current: display 0x2b5224000f30, context 0x2b5224014350, drawable X11OnscreenGLXDrawable[Realized true, Factory jogamp.opengl.x11.glx.X11GLXDrawableFactory@2b9eb25d, Handle 0xe00002, Surface WrappedSurface[ displayHandle 0x2b5224000f30 , surfaceHandle 0xe00002 , size 64x64 , UOB[ OWNS_SURFACE | WINDOW_INVISIBLE ] , X11GLXGraphicsConfiguration[X11GraphicsScreen[X11GraphicsDevice[type .x11, connection 172.22.212.206:14.0, unitID 0, handle 0x2b5224000f30, owner true, ResourceToolkitLock[obj 0xfcc9676, isOwner true, <46176ce1, 262b85c9>[count 2, qsz 0, owner ]]], idx 0], visualID 0x177, fbConfigID 0x8f, requested GLCaps[rgba 8/8/8/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono , hw, GLProfile[GL2/GL2.sw], on-scr[.]], chosen GLCaps[glx vid 0x177, fbc 0x8f: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 32/0/0, dbl, mono , hw, GLProfile[GL2/GL2.sw], on-scr[.]]] , surfaceLock <78f9c70b, 136d9144>[count 1, qsz 0, owner ] , X11DummyUpstreamSurfaceHook[pixel 64x64] , upstreamSurface false ]] on thread main-SharedResourceRunner

[1]: jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:770)
[2]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:653)
[3]: jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:591)
[4]: jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:277)
[5]: jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:353)
[6]: java.base/java.lang.Thread.run(Thread.java:833)

libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast com.jogamp.opengl.GLException: J3D-Renderer-1: Error making temp context(1) current: display 0x2b5254031c20, context 0x2b52540bcaa0, drawable X11OnscreenGLXDrawable[Realized true, Factory jogamp.opengl.x11.glx.X11GLXDrawableFactory@2b9eb25d, Handle 0xa00041, Surface JAWTWindow[0x45c4398f][JVM version: 17.0.2 (17.0.2 update 0) JAWT version: 0x10004, CA_LAYER: false, isLayeredSurface false, bounds [ 0 / 0 1 x 1 ], insets [ l 0, r 0 - t 0, b 0 - 0x0], pixelScale 1.0x1.0, shallUseOffscreenLayer false, isOffscreenLayerSurface false, attachedSurfaceLayer 0x0, windowHandle 0xa00041, surfaceHandle 0xa00041, bounds [ 0 / 0 1 x 1 ], insets [ l 0, r 0 - t 0, b 0 - 0x0], window [0/0 1x1], pixels[scale 1.0, 1.0 -> 1x1], visible true, lockedExt false, config AWTGraphicsConfiguration[AWTGraphicsScreen[AWTGraphicsDevice[type .awt, connection :0.0, unitID 0, awtDevice X11GraphicsDevice[screen=0], handle 0x0], idx 0], chosen GLCaps[glx vid 0x177, fbc 0x8f: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 32/0/0, dbl, mono , sw, GLProfile[GL2/GL2.sw], on-scr[.]], requested GLCaps[rgba 5/5/5/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono , hw, GLProfile[GL2/GL2.sw], on-scr[.]], X11GraphicsConfig[dev=X11GraphicsDevice[screen=0],vis=0x177], encapsulated X11GLXGraphicsConfiguration[X11GraphicsScreen[X11GraphicsDevice[type .x11, connection 172.22.212.206:14.0, unitID 0, handle 0x2b5254031c20, owner true, JAWTToolkitLock[obj 0x262d3b9e, isOwner true, <4357990c, 667ed9ef>[count 1, qsz 0, owner ]]], idx 0], visualID 0x177, fbConfigID 0x8f, requested GLCaps[rgba 5/5/5/0, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/0, dbl, mono , hw, GLProfile[GL2/GL2.sw], on-scr[.]], chosen GLCaps[glx vid 0x177, fbc 0x8f: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 32/0/0, dbl, mono , sw, GLProfile[GL2/GL2.sw], on-scr[.]]]], awtComponent org.jogamp.java3d.JoglPipeline$QueryCanvas[canvas1,0,0,1x1], surfaceLock <5051f448, 1ca94b19>[count 1, qsz 0, owner ]]] at jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:393) at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:770) at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:653) at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:591) at org.jogamp.java3d.JoglPipeline$QueryCanvas.doQuery(JoglPipeline.java:8684) at org.jogamp.java3d.JoglPipeline$QueryCanvas.access$100(JoglPipeline.java:8635) at org.jogamp.java3d.JoglPipeline.createQueryContext(JoglPipeline.java:6573) at org.jogamp.java3d.Canvas3D.createQueryContext(Canvas3D.java:4650) at org.jogamp.java3d.Canvas3D.createQueryContext(Canvas3D.java:3643) at org.jogamp.java3d.Renderer.doWork(Renderer.java:462) at org.jogamp.java3d.J3dThread.run(J3dThread.java:271)

DefaultRenderingErrorListener.errorOccurred: CONTEXT_CREATION_ERROR: Renderer: Error creating Canvas3D graphics context for queryProperties() graphicsDevice = X11GraphicsDevice[screen=0] canvas = org.jogamp.java3d.Canvas3D[canvas2,0,0,0x0,invalid] This version of Java3D can't query "textureWidthMax/textureHeightMax" so they are being assigned the default values: textureWidthMax: 1024 textureHeightMax: 1024 If images render as a 'grey-box', try setting these parameters to a lower value, eg. 512, with '-DtextureWidthMax=512' Otherwise check your graphics environment specifications X11Util.Display: Shutdown (JVM shutdown: true, open (no close attempt): 2/2, reusable (open, marked uncloseable): 0, pending (open in creation order): 2) X11Util: Open X11 Display Connections: 2 X11Util: Open0: NamedX11Display[172.22.212.206:14.0, 0x2b5224000f30, refCount 1, unCloseable false] X11Util: Open[1]: NamedX11Display[172.22.212.206:14.0, 0x2b5254031c20, refCount 1, unCloseable false] ls: cannot access /proj/ie/proj/CMAS/VERDI/VERDI_2.1.4/data/plots/contour_O3.png: No such file or directory check outputfile end: Not in while/foreach. [lizadams@dogwood-login2 scripts]$ module list

Currently Loaded Modules: 1) gcc/9.1.0 2) openmpi_4.0.1/gcc_9.1.0

yadongxuEPA commented 2 years ago

Retested "save Image" option in VERDI GUI on Atmos, found that it worked ok. Note that there is an "imageDimension" pop-up window after inputting the saved image name. VERDI_testing_issue_184_1

lizadams commented 2 years ago

I retested this on the mac using VERDI_2.1.4_mac_20221007.tar.gz, and it doesn't fully save the new image - but I think this may be related to my screen resolution settings. O3_contour

yadongxuEPA commented 2 years ago

Retested "save Image" option with VERDI_2.1.4_linux64_20221007.tar.gz GUI on Atmos, confirmed that it worked ok.