# Release Notes JSeismic

Added new methods on cgNormalization and an enum to permit changing the behavior when traces are shifted -- when
wiggles are filled at zero or at the trace average.

/*

* Enum controlling the behavior for how traces should be shifted and
* thus control the center position for wiggle fills.
*/
public static enum cgTraceShiftBehavior {
/**
  * Traces are never shifted, and equivalently wiggle fills are centered
  * at seismic amplitude zero.
*/
NEVER_SHIFT,
/**
  * Traces are always shifted, and equivalently wiggle fills are centered
  * at the seismic amplitude of the trace average.
*/
ALWAYS_SHIFT,
/**
  * If the dataset is detected to be velocity data or the normalization
  * mode is limits, then shift the trace.
*/
SHIFT_VELOCITY_DATA_OR_NORMALIZATION_LIMITS
};


The new methods are

public cgTraceShiftBehavior getTraceShiftBehavior();

public void setTraceShiftBehavior(cgTraceShiftBehavior shiftBehavior);

We also have two new methods in case someone wants to subclass cgTraceNormalization and directly change the behaviors

protected boolean isVelocityData(cgRangeFloat amplitudeRange);

protected  boolean shiftThisTrace(boolean isVelocityData, int normalizationMode)

Deprecated two methods

public void allowShiftOfSeismicData( boolean shiftable )

public boolean isSeismicDataShiftable()

Added new tutorial TraceShiftBehavior.java

Fixed cgSeismicPlot.exportToBI so that the title is centered and so that corner lables are exported.

Allow control (directColorModel) of if to interpolate colors.

May 2015

JGTK-1948 enhanced cgTraceAnnPanel to allow subclasses to create their own editor panel for headers.

JGTK-1953 Fixed status of axis show line and show tick controls

Fixed issue in cgTraceRasterizer where the anti-alias colors were incorrect when the
forground color is partially transparent.

Fixed another issue where the "Discrete Color" option (ColorInterpolationType.NONE) was broken when the colors had
transparency.

Added cgTraceInterpolator.CG_IT_SINC to add support for sinc interpolation in cgTraceInterpolator. This interpolation method is not supported in OpenGL.

Release 3.4

Added control of color interpolation for seismic displays in  case users
want to see only the colors provided in the color map. For an IndexedColorModel display,
discrete colors is the only possible option. For DirectColorModel, the only behavior
was to interpolate between colors in the color map based on the precise seismic
amplitude. Now with the 3.4 release, we have another option that can restrict the seismic display
to only use the given colors from the color map. We added the following methods to cgRasterizer:

setColorInterpolationType
getColorInterpolationType
We also added a new enum ColorInterpolationType.

Better control of axis generation in cgSeismicPlot: easier to have custom tick generators.

Better control of pipeline editors: cgBaseSeismicView now uses an abstract seismic editor. The factory
methods that create the editors are now also overridable.

Added two methods to cgHeaderFormat removeHeaderFieldDescription and sort.

Better picking. Fixed bugs in cgSnapSeismicPick. Added new cgInterpolatingSnapPick: ability to sinc interpolate to
improve accuracy. Fixed sample rounding in cgSnapSeismicPick.

Deprecated the FFT in com.interactive.jgeo.seismic.math.fft. Users should move away from this FFT implementaion
immediately. A new FFT implementation can be found in the util analysis package.

Improved the taper filter to use the new FFT provided in the util analysis package.

Added cgAxisZoomManipulator. This manipulator is installed in cgSeismicPlot and will control the zooms when the
user drags the right mouse in the seismic axis area. The manipulator will interactively draw a blue rectangle in the
axis area and then zoom that axis so that the new axis endpoints match the blue rectangle axial endpoints. Double
clicking with the right mouse button reverts the zoom.

Added new tutorial jseismic.controller.AxisZoomControl that demonstrates how to modify cgAxisZoomManipulator. In this case, the manipulator is only activated
on control right mouse clicks.

Allow user to suppress the colormap editor from the seismic editor. Two functions were added to cgAbstractEditorBuilder.java

setDisplayColorModelChoice(boolean) 
—
If false, the radio button to toggle between an "indexed" or "direct" color-model is hidden.
setColorMapEditorDisplayed(boolean) 
—
If false, the button to display the color-map editor is hidden. 
Added the ability to highlight traces when the seismic display is in density mode. In this
mode, when any trace is highlighted, the highlighted traces will be additionally drawn
as highlighted wiggle traces.
Other non-highlighted
traces are not drawn using wiggles.

You can experiment with this behavior by starting any of the JSeismic tutorials or demos. Use the
seismic editor to change to density mode, then double click a trace. That double-clicked trace will
be additionally drawn with a red wiggle.

Improved performance of the cgCache.invalidateAll method. This method now runs in constant time.

Allow per-pipeline instance control of anti-aliasing. The rasterizer, cgTraceRasterizer, now implements
cgAntiAliasController. This interface has methods to enable or disable anti-aliasing. If this anti-alias controller
interface is used, it will take priority over the global option for antialiasing. For your reference, the (pre-existing) global
option to set anti-aliasing is the following:

```xml
JCarnac.getRenderingHints().put( java.awt.RenderingHints.KEY_ANTIALIASING,
                                    java.awt.RenderingHints.VALUE_ANTIALIAS_ON );
```

Added support for large color maps. See documentation in the util package for more details.

Added static methods cgTraceRasterizer.setDefaultColorModelType and getDefaultColorModelType.
These methods allow users to control the default color model type for the rasterizer. You should
consider using this method to set DirectColorModel if you increase the number of colors in the color
map beyond 256.

The pipeline process methods have been changed so that the cgTraceData.key is set to null. This improves performance
by eliminating memory churn. If you put the traces in a cache or otherwise use the trace key, you must now set the
key yourself. Otherwise you will get null pointer exceptions. The three methods with changed behavior are the following:
cgSegyReader.process, cgTraceNormalization.process, and cgDefaultAbstractDataSelector.process.

Allow user to recieve an event when the rasterizer begins and finishes rendering traces. The event specifies which traces and sample
ranges will be rendered. These events can be used to improve performance of a network reader or for controlling
the cursor during seismic rendering.  If you want to implement a sophisticated trace caching algorithm, you will want to pull traces
into your cache as a block to satisfy the current rendering operation. That is now possible. Just do

```xml
cgBaseSeismicRenderer renderer = (cgBaseSeismicRenderer)_pipeline.getSeismicRenderer();
        renderer.setListener(new MyListener());
```

Added new class cgTraceInfo and interface cgTraceRendererListener. Added new methods setListener and getListener to cgBaseSeismicRenderer.

Changed the meaning of cgInterpolator.SamplePosition.AT_CENTER. See the javadocs for this Enum for a fuller description
of this new meaning.

If the number of colors in the cgColorMap exceeds 512, and the user attempts to edit the color map, an error dialog will be displayed instead of
the color map editor.

Added support for variable spaced traces to cgGenericSeismicImage. New classes added are:
cgAbstractGenericSeismicImage, and cgVSTGenericSeismicImage. This last class contains support for VST. The class
cgGenericSeismicImage itself does not support VST.

3.3 Release

Added a centering option for Seismic samples. This feature was requested to support precise alignment
of maps and seismic cross-section displays. The changes are

[cgInterpolator.cgSamplePosition](../../api/apidocs/index.md)
cgInterpolator.getSamplePosition()
cgInterpolator.setSamplePostion
The new sample position enum has AT_START (default behavior and same as 3.2 release) and AT_CENTER.

Improved layout of colorbar labels. See J/CarnacPro release notes for changed classes.

Fixed CGM export of variable spaced traces: wiggles and density.

Fixed off-by-one error in colors for DirectColorModel density plots.

Improve rendering of NaN in all seismic displays (now break the wiggle trace).

Added DirectColorModel/IndexedColorModel radio button to seismic editor. Added radio buttons
to choose cgSamplePosition (at start or at center). Changed seismic editor to automatically disable
antialiasing when a user picks step interpolation mode. In this interpolation mode, antialiasing
of the wiggles looks quite ugly.

Improve accuracy drawing NaN data in interpolated density mode (was causing apparent
trace shifting).

Improved docs for TickGenerators.

Improved handling of samples at end of trace while interpolating the trace. Hold extrapolated
samples constant at last known sample.

Added a new constructor to cgMemoryDataSource that takes list of traces and a list of header fields. This allows customers to
use this class with their own subclasses of cgTraceData and cgMemoryTraceHeaderField.

Fixed issue with thumb view controller when the trace start time is negative.

Fixed bug that caused visible banding in seismic view after scrolling when decimation > 1 and the traces/inch was increased.

Changed rasterizer so that wiggles will no longer draw a curve for NaN values. Previous releases were drawing a wiggle curve
at zero when NaN values were encountered. So now, traces with some NaNs will appear broken.

3.2 Release

Important Note: This release is binary incompatible to previous releases: some codes in cgSegyFormat have changed their numbers.
You must recompile your source code. This change was made to harmonize differences with other seismic reader technologies.
We also deprecated cgSegyFormat.CG_SHF_SEGY_REVISION_NUMBER. You should use CG_SHF_SEGY_REVISION_MAJOR_NUMBER and CG_SHF_SEGY_REVISION_MINOR_NUMBER
instead.

Improved ergonomics for the thumb view controller: when this controller is enabled, the seismic plot is changed to set the
minimum trace spacing to zero and to disable constant trace spacing.

Added support for CSEGY. Changed the cgSegyReader by adding an overridable method, interpretHeader, to interprete the headers.

Important Note: This release changes the interpretation of SEGY data sample format 6 from one byte
int to IEEE float.
If your application needs this old behavior, or some other behavior, you should override the new method interpretHeader and provide
different behavior. Also, the method cgSegyReader.parseTraceHeaderFields was made protected so that users can usefully subclass the reader.

The reader
was also changed so that it does not call overridable methods from its constructor. That means that in a normal scenario
the SEGY headers are not read and parsed until you try to read some traces; which usually is on the Event Dispatch Thread.
The best practice is to use the
ExceptionObserver
for cgSegyReader to allow your application to be notified if any errors
happen while parsing or reading the file.

If the user sets a cgTraceColorHandler, and uses either positive or negative monochrome fill,
the fill color will now use the color set from the handler instead of using the fill color from the color map. This fill
color will now match the color used to draw the wiggle (the handler color). This behavior is new to this release.
Previously the fill color from the color map was used in this situation.

The TraceColor tutorial demonstrates how to use a cgTraceColorHandler.

Fixed handling of NaNs in cgTraceInterpolator.

It also fixed
a bug in the cgSegyReader.parseStartValue method: the start value is now interpreted in milliseconds as per the SEGY spec.

Added capability to render seismic images using a direct color model. Previously, JSeismic always used
an indexed color model to render the seismic images. With an indexed color model, the image can only be
constructed from colors that are predefined in the color map. With a direct color model, any color
can be used when constructing the seismic image. This gives two major benefits for the user (a) faint
and subtle gradiations in the seismic image are much clearer now, and (b) anti-aliasing works much
better.

Added a tutorial pipeline.DirectColorModel to show how to enable a direct color model. Changed the existing
tutorial plot.variants.SeismicImage to allow the user to choose a direct color model.

Modified cgTraceRasterizer, cgSeismicImage, and cgGenericSeismicImage to support the new color model.
Added an enum type ColorModelType to the API. The interface cgRasterizer now has three new methods:

```xml
public void setImage(java.awt.image.BufferedImage);

   public ColorModelType getColorModelType();

   public void setColorModelType(ColorModelType cmType);
```

If you have an implementation of cgRasterizer, you will need to add support for these three new methods.
The last two methods are fairly obvious methods. The setImage method is less so — cgRasterizer
now has a setImageData method, and a setImage method. The setImageData method sets a byte array, and
setImage that sets a buffered image. The class
cgSeismicImage will call the new setImage method before asking for traces to be rasterized.

Minor change in cgSnapSeismicPick.getSnapValue so that we use rounding when computing the seismic sample from the user
selected time. Previous versions just truncated to the integer sample number when doing this computation.

Changed behavior of snap picking (cgSnapSeismicPick). Old behavior was that if the mouse click was on a negative
sample value, the nearest maxima was snapped to. Now, no special behavior is run if the mouse click is on a negative
sample value — which results in the largest nearby maxima being snapped to.

The color map will now automatically add extra colors at the end
of the cgColorMap to improve the way that wiggles are drawn with anti-aliasing.
Previously, the rasterizer assumed that wiggles drawn with anti-aliasing always
used a grey scale color map. When this assumption was violated, rather bad artifacts
were visible. Now, the color map arranges for the colors needed to anti-alias the
wiggle to be available at the end of the color map.

This release made a small change in the behavior of cgSegyEbcdicHeader. If the cp500 encoder is not available, attempting to convert an EBCDIC header
to a string will cause a RuntimeException to be thrown. Previously, this class logged an error and then returned a null string.

This release made a small change in the behavior of cgTraceNormalization. If the normalization mode is CG_NM_LIMITS,
this class now always allows the data to shift regardless of any other settings.

This release fixed a bug in the taper filter and FFT where they didn't work for input of length 4097 or longer.

Made a small change to the way that wiggles are drawn. The 3.1 release made the diagonal parts of wiggles look thicker. This
release reverts back to the wiggle drawing technique from before the 3.1 release (thinner wiggles).

For this release, we made a few changes in cgMemoryReader. We
changed this reader to cache trace statistics. This made a huge improvement
in rendering speed when the traces are long. We also improved the way this
reader calculated statistics when NaN's are present to carefully prevent the
NaN's from infecting the resultant statistics.

Added percentile clipping to seismic editor.

Added option for trace decimation so that user can choose to retain trace peaks.

Fixed CGM export of rotated generic seismic image.

Changed the way that the thumb view axis applies transformations; minor API changes in the thumb adapter.

Changed cgTraceNormalization such that CG_NM_INDEFINITE does nothing. Was getting a NullPointerException.

Add a comment to the top level javadocs in cgSegyReader and to cgSegyReader.setCoordinateScaling and cgSegyReader.setElevationScaling  that "coordinate and elevation scaling is disabled by default".

Changed the Seismic Advanced Viewer to enable both types of scaling, and give it a menu item so that users can change this setting.

Fixes to variable spaced traces and the  scaling editor panel case when depth indexed seismic.

New event PIPELINE_PROCESS_REPLACED and various minor changes to events.

Details of the API changes can be found in JSeismic_32changes.txt.

3.1 Release Notes

For the 3.1 release, J/Seismic moved up to JDK 5, and all collections were
generified. Many improvements were made to the printing, see the J/CarnacPro release notes. Additionally, the new
print to scale feature was completed in this release. This necessitated a
change in the requirements that
applications must follow in order for printing to work properly.

The changes for the 3.1 release are the following:

The seismic editor uses the JGoodies Forms layout manager which is in
    
forms.jar
. You will need to distribute this jar with your
    application if you want to use our seismic editor dialog. 
The class 
com.interactive.jgeo.seismic.pipeline.cgColorMap
is now deprecated. The new color map that you can begin to use is
    
com.interactive.util.gui.coloreditor.cgColorMap
which is
    identical to the old color map. The old color map will continue to work
    fine for two releases. This change was made to eliminate duplicated
    copies of the color map that were popping up in other modules.
So that users can use the new colormap, the 
setColorMap
method to 
cgRasterizer
changed signature from 
void
    setColorMap(com.interactive.jgeo.seismic.pipeline.cgColorMap
    colorMap)
to 
void setColorMap(
    com.interactive.util.gui.coloreditor.cgColorMap colorMap )
. This
    change should be insignificant to most users. 
If you
    implement 
cgRasterizer
or subclass
    
cgTraceRasterizer
, you may need to adjust your code.
Please email customersupport.digital@slb.com for further help.
Added 
virtualToReal
to
  
cgSeismicDataSelector
.
Added a note to JSeismic User Guide that making a seismic display
    anti-aliased has a small but real performance impact on all
  platforms.
Added 
process
method to 
cgPipeline
. 
Greatly improved vertical scrolling speed. A representative test-case
    was reduced from 5 ms down to 1.5 ms.
Added percentile clipping to 
cgTraceNormalization
. This
    option is named 
CG_NM_PERCENTILE_CLIPPING
and allows you an
    easy way to clip the trace values that are the 5% largest in every trace
    (or any other percentage).
The grid does not depend on the axis existence anymore. You can have a
    grid without having an axis.
All the tutorials were changed so that they will work with no argument.
    This makes them much easier to run.
Added new tutorial 
SeismicViewWithTimeSlice
that shows how
    to display time slice data from a normal seismic view and add labels at
    particular inline and cross line points.
Added 
SelectPipelinePlot
tutorial that shows selecting a
    new pipeline does not cause a leak.
Trace annotations can start on step value for other than trace number.
    Previously, the method
    
cgSeismicPlot.startTraceAsixTicksOnStepValue
only worked if
    the key field was 
CG_TRACE_ID
.
Improved printed resolution for 
cgGenericSeismicImage
.
Removed artifacts in seismic display when zooming out. The software was
    retaining the wiggle extrema which caused the display to look jagged.
    This change was actually made in 3.0.2.7.
Added thumb view controller and associated tutorial,
    
ThumbView
. This is a cool new controller that allows you to
    scroll and zoom with one widget. The class 
cgSeismicPlot
got
    a new method 
addThumbViewLocation
that will add the new
    controller to your seismic plot. A helper class,
    
cgSeismicThumbViewAddapter
, was also added.
The time slice editor is now fully featured like our other seismic
    editor.
We have added a new 
cgTraceProcessEvent
. All the seismic
    pipeline processes call 
fireProcessEvent
when their state
    changes. 
If you implement your own seismic process,
    you should add code to fire a process event when the state
    changes.
The older events: 
cgNormalizationEvent
, and
    
cgDataSelectorEvent
are now deprecated.
cgPipelineEvent
has been changed so that it contains a
    reference to the pipeline and also (if possible) a reference to the
    process. Additionally, the event numbers have changed and expanded a lot.
    The net result of these event changes is that it is now possible for
    listeners to get a very accurate picture of what state changed in the
    pipeline and processes.
We added a new class 
cgBaseHeaderFieldDesc
to represent
    non-binary header fields. Now 
cgBinaryHeaderFieldDesc
extends this new base class. The associated interface,
    
cgHeaderFieldDesc
, has some new methods. If you have an
    implementation of this interface you will need to implement these new
    mthods. Most likely this change will only impact customers with a custom
    seismic reader. The new methods are very simple to implement. The methods
    added to 
cgHeaderFieldDesc
are 
getDescription
,
    
setDescription
, 
setIdentifier
,
    
setKeyType
, 
setName
and 
setType
.
    Also 
cgHeaderFormat
got a new field
    
CG_HF_STATISTICS
, and two new methods
    
setLength
, and 
setType
.
Many constants were added to 
cgSeismicConstants
to support
    new header field types. One constant was deprecated:
    
CG_DF_NIBBLE
(0x0100). It has been replaced by
    
CG_DF_LOW_NIBBLE
. We added the high nibble as
    
CG_DF_HIGH_NIBBLE
.
The API changes for 3.1 are here. A
few deprecated classes and methods were removed.

3.0.2.7 Release Notes

This release fixed a small and rare bug in cgTraceInterpolator that was
hit with traces that had mostly zeros, and also removed the
cgTraceInterpolator.decimateData method. This method decimated the trace data
by the unusual means of preserving the trace peaks. Now the decimation just
chooses the nearest samples. This unusual decimation was causing the seismic
displays to be excessively jagged.

3.0.2 Release Notes

We added more control to the way that the plot is scaled when it is
printed. This functionality can be found in the package
com.interactive.jcarnac2d.util.export and in changes to the
class cgPrinter (e.g. PRN_PROPORTIONAL_EXPORT and
PRN_WYSIWYG_EXPORT). This new functionality is exposed in the
JSeismic tutorial jseismic/plot/Printing.java. This new
functionality is not yet available through the standard INT print dialog.

3.0.0 Release Notes

The API changes from 2.7.1 to 3.0.0
are mostly additional methods and classes to support rendering using a 3D
accelerated scene graph engine. These additions are only usable if the
scenegraph rendering extension is also installed (contact sales@int.com for
availability).

Some methods were added to cgAbstractPanel to allow users to replace
panels in our seismic editors. A new tutorial (ReplaceWithCustomEditor)
shows how to do this. We are now shipping the source code to our seismic
editors so that users can more easily create their own panels or
editors.

A new dual pipeline has been added ([cgDualSeismicPipeline](/solutions/geotoolkit/geotoolkit_java/api/apidocs)).
This necessitated changes primarily to [cgAbstractPipeline](/solutions/geotoolkit/geotoolkit_java/api/apidocs):
cgAbstractPipeline no longer implements the cgPipeline interface, and has now
become much more abstract. If your code uses cgAbstractPipeline, you may need
to change these occurrences to either cgPipeline or to cgSeismicPipeline.

The examples now conform to the Sun recommended practice of constructing
the GUI on the event thread.

The following methods are no longer synchronized: cgAbstractPipeline.draw,
cgDefaultSeismicTraceRenderer.draw, cgVSSeismicTraceRenderer.draw, and
cgTraceInterpolator.process. If your application depends on any of these
methods being synchronized, you should subclass and synchronize the method in
the subclass.

JSeismic now supports JDK 6. You should be aware of an issue in (newer)
JDKs that cause the Seismic axis baseline to disappear. We believe that this
is sometimes caused by the Java bug: [bug
6534474](http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6534474) that causes the border pixels of images to not draw correctly.
The axis baseline disappears on JDK 6 and some later JDK 5 versions. On Mac
OS X, the baseline disappears with Java 1.4.2 as well as Java 5. You can
work-around this bug by any of three different methods:

Enable anti-aliasing. See the Anti-Aliasing tutorial.
Enable precise geometry calculations in the Java rendering pipeline:
    set the Java rendering hint KEY_STROKE_CONTROL to VALUE_STROKE_PURE (see
    java.awt.RenderingHints). The 3.0.0 release enables this by default. See
    com.interactive.jcarnac2d.util.getRenderingHints()
Disable caching in the axis views of the seismic plot. We added a new
    method disableAxisViewCache in cgPlot
    to make this easy for you. 
The workarounds for the disappearing axis baseline have the following
properties:

<caption>

Windows
Linux
Mac OS X
Enable Anti-Aliasing
works
works with minor performance impact
works
Enable Precise Geometry in
        Rendering
works
works
does not work
Disable Axis Views Cache
works
does not work
does not work
You can now specify that you want the first trace to be annotated on the
trace axis to be the step value. The default functionality for a step value
of 10 would be to annotate traces 1, 11, 21 etc. You can now use the method
startTraceAxisTicksOnStepValue( boolean ) method in cgSeismicPlot
to allow the trace ticks to start at the step value (10, 20, 30 etc.) instead
of the first trace.

Some classes have been changed to improve their encapsulation: exposed
fields were made private. You may need to use the new accessor methods if you
were using the exposed field.

<caption>

Class
Removed Field
Accessor Method(s)
cgLabel
_view
get/setLabelViewComponent
_orient
get/setOrientation
The derivation for cgGenericSeismicImage has been changed. This change
simplifies its behavior cgAnchoredShape has behavior that is only pertinent
for drawing text.

<h3>Bugs Fixed

Fixed a bug where a subclass of cgAbstractPipeline calls
    setSecondaryKeyStart resulting in a class cast exception
Fixed stack trace dump from the Advanced Viewer when closing an
    Amplitude Distribution Plot.
Fixed a bug in the Two Plots tutorial that occurred when you select the
    Edit menu and then select Annotation and then in the trace tab you select
    SHTPT ID from the available fields and apply it.
The colormap editor has a check box to show color indices which is now
    working.
Fixed a bug that prevented reading segy files larger than 2G.
There was a problem with sample scaling in the Seismic Editor when
    dealing with depth-based i.e.(feet-per-inch) samples which has been
  fixed.
cgSnapSeismicPick.getSnapValue() was not snapping to the correct sample
    if the first sample of the trace in the seismic data file did not start
    at 0.0.
Fixed a bug in the SplitImage demo where some of the trace's status
    were being reported wrong.
There was a problem when trying to export a split image in CGM format
    where the two images would overlayed in the CGM file. To fix this
    cgSeismicViewClipImages in a cgDefaultSeismicViewClip will now respect
    their clip bounds.
The pipeline was refactored to use a LinkedList and the addProcess was
    not implemented correctly resulting in custom processes being inserted
    into the pipeline in the wrong place.
Several memory leaks in JSeismic related to the editors have been
  fixed.
There was a problem with the cgColorMap.load( colorfile ) method in
    which it failed to close the input stream.
2.7.1 Release Notes

<h3>Release Highlights

Allow anti-aliasing in wiggle plots (uses
    java.awt.RenderingHints.KEY_ANTIALIASING).
Permit asymmetric colorbars out of the box. The built in scaling panel
    in the builtin editor has a new check box "Center values around zero". If
    this is unchecked, the user can plot with asymmetric colorbars.
Allow user to change the number of colors while using the built-in
    editors.
Made color map files consistent across the classes in the toolkit.
Streamlined the way that pipeline processes are handled from the
    pipeline.
Added a document that shows how to run the examples.
Added editor for to support cgVSSeismicView (variable spaced
  traces).
Added extensive material to the Frequently Asked Questions of the User
    Guide.
<h3>Demonstrations

<h3>Changed

All demos have been put into a package to allow easier use from an
  IDE.
The demos use the new method 
FileFinder.findPath
in the
    util package to allow them to run with more flexibility in the current
    working directory. Previously the demos would only run with a single
    specific current working directory. Now they will run with the current
    working directory set either to the toolkit installed root, or any
    directory below that.
<h3>Tutorials

<h3>Changed

The tutorials have been renamed, and moved into a coherent package
    hierarchy that better reflects their purpose.
The tutorials have been streamlined and commented to make them more
    effective teaching tools.
Added new tutorial jseismic.plot.CyclePlot to demonstrate how to create
    and dispose of a seismic plot without incurring a memory leak.
Added jseismic.AntiAlias to demonstrate an anti-aliased wiggle
  plot.
Added trace highlighting to jseismic.plot.TraceStatus.
See the Readme.html for the tutorials.

<h3>Functionality

<h4>Added Functionality

Added dual pipeline and associated view.
com.interactive.jgeo.seismic.view.cgSeismicPlot added
  disposeOfDialogs()
Scaling panel in the built-in editor will display scale parameters in
    dB if cgNormalization.useDecibelUnits(true) is called 
Added cgRasterizationEvent and cgRasterzationListener
<h4>Changed Functionality

Added createColorMapEditor(cgColorMap cmap, Component frameParent) to
    cgColorMapDialog 
Modified createColorMapEditor(cgPipeline pipeline, Component
    frameParent) to call the newly added method. 
cgRasterizeTraceParameters Added new method
    cgRasterizeTraceParameters.getCurrentSyntheticTrace() 
cgRasterizeTraceParameters Added new method
    cgRasterizeTraceParameters.setCurrentSyntheticTrace() 
cgRasterizeTraceParameters Added new method
    cgRasterizeTraceParameters.getPreviousSyntheticTrace() 
cgRasterizeTraceParameters Added new method
    cgRasterizeTraceParameters.setPreviousSyntheticTrace() 
cgAbstractPipeline no longer implements cgPipeline 
Added new method cgAbstractPipeline.getSampleUnits()() 
Added new method cgAbstractPipeline.getSampleRate() 
Added new method cgAbstractPipeline.getDeltaTrace() 
Added new method cgAbstractPipeline.setInterpolationScaleFactor( float
    scaleFactor ) 
Added new method cgAbstractPipeline.invalidate() 
Added new method cgAbstractPipeline.removeDataSelectorListener(
    cgDataSelectorListener dsl ) 
Added new method cgAbstractPipeline.setPrimaryKey( int fieldId ) 
Added new method cgAbstractPipeline.getPrimaryKey() 
Added new method cgAbstractPipeline.setPrimaryKeyStart( double start )
  
Added new method cgAbstractPipeline.getPrimaryKeyStart() 
Added new method cgAbstractPipeline.setPrimaryKeyEnd( double end ) 
Added new method cgAbstractPipeline.getPrimaryKeyEnd() 
Added new method cgAbstractPipeline.setPrimaryKeyStep( double step )
  
Added new method cgAbstractPipeline.getPrimaryKeyStep() 
Added new method cgAbstractPipeline.setSecondaryKey( int fieldId ) 
Added new method cgAbstractPipeline.getSecondaryKey() 
Added new method cgAbstractPipeline.setSecondaryKeyStart( double start
    ) 
Added new method cgAbstractPipeline.getSecondaryKeyStart() 
Added new method cgAbstractPipeline.setSecondaryKeyEnd( double end )
  
Added new method cgAbstractPipeline.getSecondaryKeyEnd() 
Added new method cgAbstractPipeline.setSecondaryKeyStep( double step )
  
Added new method cgAbstractPipeline.getSecondaryKeyStep() 
Added new method cgAbstractPipeline.setStartSampleValue( double start )
  
Added new method cgAbstractPipeline.setEndSampleValue( double end )
  
Added new method cgAbstractPipeline.getEndSampleValue() 
Added new method cgAbstractPipeline.setApplyGaps( boolean status ) 
Added new method cgAbstractPipeline.setGapSize( int size ) 
Added new method cgAbstractPipeline.getStartValue() 
Added new method cgAbstractPipeline.setPlotType( int plotType ) 
Added new method cgAbstractPipeline.addDataSelectorListener(
    cgDataSelectorListener dsl ) 
Added new method cgAbstractPipeline.removeAllHighlighting() 
Added new method cgAbstractPipeline.getModelLimits() 
Added new method cgAbstractPipeline.getVirtualModelLimits() 
Added new method cgAbstractPipeline.getTraceRenderer() 
Added new method cgAbstractPipeline.getTraceRasterizer() 
Added new method cgAbstractPipeline.getColorMap() 
Added new method cgAbstractPipeline.setImageData( byte[] imageData, int
    imageWidth, int imageHeight, int scanLineSize ) 
Added new method cgAbstractPipeline.setBoundingBox( cgRect bbox, int
    destinationHeight ) 
Added new method cgAbstractPipeline.setNotify( boolean status ) 
Added new method cgAbstractPipeline.virtualToReal( int virtualTraceId )
  
Added new method cgAbstractPipeline.draw( cgTransformation
    transformation ) 
Added new method cgSeismicPipeline.invalidate() 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.addPipeline( cgAbstractPipeline pipeline,
    cgSeismicEditor editor ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.addPipeline( cgAbstractPipeline pipeline ) 
Added new method cgBaseSeismicView.addDuelPipeline(
    cgDuelSeismicPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.removePipeline( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.getPipelineEditor( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.setPipelineEditor( cgAbstractPipeline pipeline,
    cgSeismicEditor editor ) 
Added new method in cgBaseSeismicView cgAbstractPipeline
    getAbstractPipeline( int idx ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgBaseSeismicView.getNewSeismicImageInstance(cgAbstractPipeline pipeline)
  
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgDefaultSeismicViewClip( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgDefaultSeismicViewClip.getNewSeismicImageInstance( cgAbstractPipeline
    pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgGenericSeismicImage( double x, double y, double modelUnitsPerTrace,
    double modelUnitsPerSample, cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgGenericSeismicImage.setPipeline( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicImage( double x, double y, double w, double h,
    cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgSeismicImage.setPipeline( cgAbstractPipeline pipeline ) 
Added new method cgSeismicImage.getAbstractPipeline() 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicTimeSliceView( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgSeismicTimeSliceView.setPipeline( cgAbstractPipeline pipeline ) 
Changed the return type from cgPipeline to cgAbstractPipeline in method
    cgSeismicTimeSliceView.getPipeline() 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgSeismicVSImage.setPipeline( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicViewClipImage( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicViewClipImage( cgAbstractPipeline pipeline, int direction )
  
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicViewImage( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgSeismicViewImage( cgAbstractPipeline pipeline, int direction ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgSeismicViewImage.setPipeline( cgAbstractPipeline pipeline ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgVSSeismicView( cgAbstractPipeline pipeline, cgVSTraceRasterizerData
    vstrd ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgVSSeismicView.getNewSeismicImageInstance(cgAbstractPipeline pipeline)
  
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgVSSeismicViewClip( cgAbstractPipeline pipeline,
    cgVSTraceRasterizerData vstrd ) 
Changed parameter from cgPipeline to cgAbstractPipeline in method
    cgVSSeismicViewClip.getNewSeismicImageInstance(cgAbstractPipeline
    pipeline) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgTimeSliceDataSelectorPanel( cgAbstractPipeline pipeline,
    cgSeismicTimeSliceView plotView ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgTimeSlicePipelineEditorBuilder(cgAbstractPipeline pipeline,
    cgSeismicTimeSliceView timeSliceView ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgTimeSliceRasterizerPanel( cgAbstractPipeline pipeline,
    cgSeismicTimeSliceView timeSliceView ) 
Changed parameter from cgPipeline to cgAbstractPipeline in constructor
    for cgTimeSliceScalingPanel( cgAbstractPipeline pipeline,
    cgSeismicTimeSliceView timeSliceView ) 
com.interactive.jgeo.seismic.axes.cgSeismicTickGeneratorMethods added
    calculateSampleTickOrigin(int mantissaOrigin, double exponentOrigin, int
    modelOriginsign, double modelStep) 
com.interactive.jgeo.seismic.pipeline.cgVSTraceRasterizerData added
    constants CG_DISTANCE_IN_FEET, and CG_DISTANCE_IN_METERS
<h4>Deprecated Functionality

com.interactive.jgeo.seismic.cgm.CGMSeismicEncoder 
    
initSeismicTrace( cgSeismicImage image, int virtTraceId )
drawSeismicTrace( cgSeismicImage image, float[] samples )
com.interactive.jgeo.seismic.data.cgSeismicMetaData 
    
cgSeismicMetaData(cgSeismicMetaData other) - use clone
setSampleStart( double sampleStart ) - use
        cgDataSelector.setStartSampleValue 
com.interactive.jgeo.seismic.data.cgTraceData 
    
cgTraceData(cgTraceData other) - use clone
com.interactive.jgeo.seismic.editor.viewimage.cgCachePanel - trace
    cache is no longer used
com.interactive.jgeo.seismic.memory.cgMemoryDataSource 
    
cgMemoryDataSource(cgMemoryDataSource other) - use clone
com.interactive.jgeo.seismic.memory.cgMemoryReader 
    
cgMemoryReader( cgMemoryReader other ) - use clone
com.interactive.jgeo.seismic.memory.cgMemoryTraceHeaderField 
    
cgMemoryTraceHeaderField(cgMemoryTraceHeaderField other) - use
      clone
com.interactive.jgeo.seismic.pipeline.cgDataSelector 
    
Vector getKeys() - Replaced by cgSeismicReader.getKeys()
com.interactive.jgeo.seismic.pipeline.cgInterpolator 
    
getWholeTraceSwitch()
setWholeTraceSwitch(float switch_value)
getDecimationThreshold()
setDecimationThreshold(double decThreshold)
com.interactive.jgeo.seismic.pipeline.cgParameterTraceRasterizer -
    incorporated into the cgRasterizer
com.interactive.jgeo.seismic.pipeline.cgSeismicDataSelector 
    
getKeys() - Replaced by cgSeismicReader.getKeys()
getRealModelLimits() - moved to cgDefaultAbstractDataSelector
com.interactive.jgeo.seismic.pipeline.cgTraceInterpolator 
    
getDecimationThreshold()
setDecimationThreshold(double decThreshold)
com.interactive.jgeo.seismic.pipeline.cgTraceProcessBase 
    
cgTraceProcessBase(cgTraceProcessBase other)
com.interactive.jgeo.seismic.pipeline.cgTraceRasterizer 
    
rasterizeTrace( cgTraceData prevTrace, cgTraceData thisTrace,
        cgRangeInt sampleRange, int lastTraceLoc, int thisTraceLoc, boolean
        isHighlighted, boolean wiggleTraceSkip) - This method is part of the
        cgWiggleTraceSkip interface, which has been deprecated 
rasterizeTrace( cgTraceData prevTrace, cgTraceData thisTrace,
        cgRangeInt sampleRange, int lastTraceLoc, int thisTraceLoc, boolean
        isHighlighted, int wiggleColorIndex ) - This method is part of the
        cgWiggleMultiColorSupport interface, which has been deprecated 
com.interactive.jgeo.seismic.pipeline.cgVSSeismicPipeline 
    
cgVSSeismicPipeline( cgSeismicReader seismicReader )
setDataCache( cgTraceBaseCache cache ) - trace cache is no longer
        used
getRasterCache() - trace cache is no longer used
setRasterCache( cgTraceBaseCache cache ) - trace cache is no longer
        used
draw( cgTransformation transformation ) - draw functionality is now
        in class cgSeismicRenderer
com.interactive.jgeo.seismic.pipeline.cgWiggleTraceSkip - Replaced by
    using cgRasterizeTraceParameters
com.interactive.jgeo.seismic.view.cgSeismicImage 
    
setMaxBitmapSize(int max) - use cgSeismicHints
setBWPrintEnable(boolean bw) - use cgSeismicHinst
com.interactive.jgeo.seismic.view.cgSeismicTimeSliceTransformation 
    
cgSeismicTimeSliceTransformation(cgSeismicTimeSliceTransformation
        ststr) - use clone
com.interactive.jgeo.seismic.view.cgSeismicTransformation 
    
cgSeismicTransformation(cgSeismicTransformation str) - use
      clone
com.interactive.jgeo.seismic.view.cgSeismicVSImage 
    
cgSeismicVSImage( cgVSSeismicPipeline pipeline,
        cgVSTraceRasterizerData vstrd )
com.interactive.jgeo.seismic.view.cgVSSeismicView 
    
cgVSSeismicView( cgPipeline pipeline, cgVSTraceRasterizerData vstrd
        )
pipeline.cgVSSeismicPipeline and view.cgVSSeismicView have new
    constructors. The old constructors have been deprecated.
<h3>Issues

<h4>Resolved Issues

Corrected seek problem in cgSegyReader.getTraceMetaData for large
    seismic files.
<h4>Known Issues

When plotting trace axes using non-trace-step-relative headers, if
    large tick step (
>
10), tick spacing (
>
200 pixels), or trace gap
    values (
>
10) are used, the first tick value may not be displayed
    properly. Workaround: Use reasonable tick spacing values. Problem only
    occurs with large tick or large gap values.
2.6 Release Notes