Seismic Widget Class


Overview

The Seismic and Segy widget classes are used to display a seismic section that the end-user can view and manipulate. The programmer has complete control over the display of the seismic section and the end-user, using a build-in panel, can change the resource values for the Seismic widget.

Inherited Behavior and Resources

The Seismic widget inherits behavior and resources from the Core, Primitive, CompBase, EditObject, Grid and Image classes.
The following resources are defined by the Seismic widget class:
Name Type Default Access
XmNadjustTimeLimit Boolean True CSG
XmNagcWindowLength int 125 CSG
XmNallocateReadWriteColor Boolean True CG
XmNannotationCallback XtCallbackList NULL C
XmNannotationFont char * *-helvetica*bold-r*140 CSG
XmNapplyAgc Boolean False CSG
XmNapplyFilter Boolean False CSG
XmNchangePanelCallback XtCallbackList NULL C
XmNclippingFactor int 4 CSG
XmNconstantTraceSpacing Boolean True CSG
XmNdataRec XintSeismicDataRec * NULL CSG
XmNendingTime float * dynamic CSG
XmNfillBias int 100 CSG
XmNfilterHighFrequency float * 60.0 CSG
XmNfilterLowFrequency float * 8.0 CSG
XmNfilterPassFlag Boolean True CSG
XmNfilterTransitionFactor int 5 CSG
XmNgapKeyName char * NULL CSG
XmNgapKeyIncrement int 1 CSG
XmNgapWidth int 4 CSG
XmNimageWidth int 400 CSG
XmNinchesPerSecond float * dynamic CSG
XmNinterpolationMode int XintLINEAR_
INTERPOLATION
CSG
XmNmaxNormalizationLimit float * 0.0 CSG
XmNminNormalizationLimit float * 0.0 CSG
XmNmaxOverlayNormalizationLimit float * 0.0 CSG
XmNminOverlayNormalizationLimit float * 0.0 CSG
XmNmuteBottomArray float * NULL CSG
XmNmuteTopArray float * NULL CSG
XmNnewPixmapCallback XtCallbackList NULL C
XmNoverlapFactor int 4 CSG
XmNoverlayData XtPointer NULL CSG
XmNoverlayForeground Pixel blue CSG
XmNoverlayInterpolationMode int XintLINEAR_
INTERPOLATION
CSG
XmNoverlayPlotType int XintWIGGLE CSG
XmNoverlayScale float * 1.0 CSG
XmNoverlayTraceNormalization int XintNO_TRACE_
NORMALIZATION
CSG
XmNplotBackground Pixel white CSG
XmNplotDirection int XintPLOT_L_TO_R CSG
XmNplotForeground Pixel black CSG
XmNplotType int XintPOSITIVE_FILL_AND_ WIGGLE CSG
XmNprimaryAnnotationBase int XintBASE_PKEY CSG
XmNprimaryAnnotationFormat char * "%g" CSG
XmNprimaryAnnotationIncrement int 1 CSG
XmNprimaryAnnotationName char * NULL CSG
XmNprimaryAnnotationStart int 1 CSG
XmNprimaryKeyEnd int XintALL_KEYS CSG
XmNprimaryKeyIncrement int 1 CSG
XmNprimaryKeyName char * NULL CSG
XmNprimaryKeyStart int 1 CSG
XmNprimaryTimingFont char * *courier*bold-r*100* CSG
XmNprimaryTimingLine int 1000 CSG
XmNprocessTraceCallback XtCallbackList NULL C
XmNreadAhead int 250 CSG
XmNscale float * 1.0 CSG
XmNsecondaryAnnotationBase int XintBASE_SKEY CSG
XmNsecondaryAnnotationFormat char * "%g" CSG
XmNsecondaryAnnotationIncrement int 1 CSG
XmNsecondaryAnnotationName char * NULL CSG
XmNsecondaryAnnotationStart int 1 CSG
XmNsecondaryKeyEnd int XintALL_KEYS CSG
XmNsecondaryKeyIncrement int 1 CSG
XmNsecondaryKeyName char * NULL CSG
XmNsecondaryKeyStart int 1 CSG
XmNsecondaryTimingFont char * *courier*medium-r*100* CSG
XmNsecondaryTimingLine int 100 CSG
XmNselectionCallback XtCallbackList NULL C
XmNstartingTime float * 0.0 CSG
XmNtraceColorArray Pixel * NULL CSG
XmNtraceColorCallback XtCallbackList NULL C
XmNtraceNormalization int XintNO_TRACE_
NORMALIZATION
CSG
XmNtracePositionArray float * NULL CSG
XmNtracesPerInch float * dynamic CSG
XmNtraceStatusArray int * NULL CSG
XmNuseBitmap Boolean True CSG
XmNvirtualMode int XintVIRTUAL_NONE CSG
XmNvirtualThreshold int 16000 CSG
XmNzoomPreserveAmplitude Boolean True CSG


XmNadjustTimeLimit

If this resource is True, the starting and ending times of the trace display will be taken from the values specified for the XmNstartingTime and XmNendingTime resources. If set to False, the starting and ending times of the trace data will be used.

XmNagcWindowLength

Specifies the length of the window used by the AGC operation expressed as number of samples.

XmNallocateReadWriteColor

Specifies whether the widget allocates the trace background, foreground and overlay colors as read/write cells or not. This resource must be set to True if you want to use the convenience functions XintSeismicEditForeground, XintSeismicEditBackground or XintSeismicEditOverlayForeground.

XmNannotationCallback

Specifies the list of callbacks that will be used to draw application defined annotation on the horizontal axis of the section display.

XmNannotationFont

Specifies the name of the font used to draw the annotation for the horizontal axis of the section display.

XmNapplyAgc

Specifies whether the AGC operation will be applied to the seismic data. The default is False, indicating that the AGC operation will not be applied to the section.

XmNapplyFilter

Specifies whether the bandpass filter operation will be applied to the seismic data. The default is False, indicating that the bandpass filter operation will not be applied to the section.

XmNchangePanelCallback

Specifies the list of callback procedures called by the EditPlot action procedure so that the callback procedures can display a panel allowing the end-user to change the plot attributes of a section.

XmNclippingFactor

Specifies the trace maximum extent in trace units. Trace amplitudes that extend above this value will be clipped.

XmNconstantTraceSpacing

Specifies whether the traces are displayed with fixed spacing or a best try fixed spacing. The default is True, indicating that the space between traces must be the same for all pairs of traces. When this resource is False, the trace spacing may vary between some traces, but the widget will do its best to use the same spacing between every pair of traces. For instance, assume that the resolution of the screen is 100 pixels per inch and the value of the resource XmNtracesPerInch is 30. If XmNconstantTraceSpacing is True, then the widget will leave 2 pixels between every pair of traces, resulting in the display of less than 30 traces per inch. If XmNconstantTraceSpacing is False, then the widget will leave 2 pixels between some pairs of traces and 3 pixels between other pairs of traces so that the number of traces per inch will be exactly 30.

XmNdataRec

Specifies a pointer to a XintSeismicDataRec structure that specifies the trace data to be displayed. If the value of this resource is NULL, then the Seismic widget will be created with an empty display.

XmNendingTime

Specifies the ending time (or depth) of the traces displayed on the plot. If this resource is not specified, then the Seismic widget will use the ending time (or depth) of the data in the XintSeismicDataRec structure when displaying the traces.

XmNfilterHighFrequency

Specifies the upper limit of the bandpass filter that can be applied to the trace data (controlled by resource XmNapplyFilter).

XmNfilterLowFrequency

Specifies the lower limit of the bandpass filter that can be applied to the trace data (controlled by resource XmNapplyFilter).

XmNfilterPassFlag

Specifies whether a band-pass filter or a band-reject filter will be applied to the data. (controlled by resource XmNapplyFilter).

XmNfilterTransitionFactor

Specifies the transition factor for the band-pass or band-reject filter. (controlled by resource XmNapplyFilter).

XmNgapKeyName

If the value of this resource is not NULL then gaps will be displayed between groups of traces. For instance, if a gap is to be inserted after a certain number of primary key changes, then specify any character string as the value of this resource.

XmNgapKeyIncrement

Specifies the spacing between gaps in terms of number of primary key changes. For example, if the primary key is traces and the gap key increment is 20, then a gap is inserted after 20 traces.

XmNgapWidth

Specifies the width of a gap as a number of traces.

XmNimageWidth

Specifies the width in pixels of the seismic image when the application specifies the position of each trace using resource XmNtracePositionArray.

XmNinchesPerSecond

Specifies the number of inches per second for the vertical (time) axis. The default value depends on the sampling rate of the data, and it corresponds to one pixel per sample in the data. For a depth dataset, this number represents the vertical scale in inches per kilofoot or inches per kilometer.

XmNinterpolationMode

Specifies the mode of interpolation in the time or depth direction. Possible values for this resource are XintLINEAR_INTERPOLATION, XintQUADRATIC_INTERPOLATION or XintSTEP_INTERPOLATION.

XmNmaxNormalizationLimit

Specifies the upper limit to use for trace normalization when the value of XmNtraceNormalization is XintNORMALIZE_USING_LIMITS.

XmNminNormalizationLimit

Specifies the lower limit to use for trace normalization when the value of XmNtraceNormalization is XintNORMALIZE_USING_LIMITS.

XmNmaxOverlayNormalizationLimit

Specifies the upper limit to use for trace normalization of the overlay data when the value of the resource XmNoverlayTraceNormalization is XintNORMALIZE_USING_LIMITS.

XmNminOverlayNormalizationLimit

Specifies the lower limit to use for trace normalization of the overlay data when the value of the resource XmNoverlayTraceNormalization is XintNORMALIZE_USING_LIMITS.

XmNmuteBottomArray

Specifies an array of floating point numbers each of which represents the time (or depth) after which a trace's display will be muted (set to zero amplitude). The size of this array must be the same as the number of traces in the XintSeismicData structure. If the value of this resource is NULL then no trace will be muted at the bottom.

XmNmuteTopArray

Specifies an array of floating point numbers each of which represents the time (or depth) before which a trace's display will be muted (set to zero amplitude). The size of this array must be the same as the number of traces in the XintSeismicData structure. If the value of this resource is NULL, then no trace will be muted at the top.

XmNnewPixmapCallback

Specifies the list of callback procedures called when a new pixmap representing a seismic section has been created by the Seismic widget. This resource is ignored if XmNbuildPixmap is set to False.

XmNoverlapFactor

Specifies an integer that controls the maximum extent of a wiggle on the plot. The maximum trace extent is determined by multiplying overlap factor and scaling factor (specified by the XmNscale resource). For instance, if the scaling factor is 1 and the overlap factor is 4, then the maximum amount of overlap for a wiggle is 4 trace increments.

XmNoverlayData

Specifies a pointer to an array of data that will be overlaid onto the displayed seismic section. The size of the array, as well as the format of the overlay data must be identical to that of the trace data array contained in the XintSeismicDataRec.

XmNoverlayForeground

Specifies the color (as a pixel value) for displaying the overlay data. If the display visual type is PseudoColor and the specified pixel indicates a read-only color cell, then the Seismic widget will allocate a read-write color cell in the application's colormap for this color.

XmNoverlayInterpolationMode

Specifies the mode of interpolation in the time or depth direction for the overlay. Possible values for this resource are XintLINEAR_INTERPOLATION, XintQUADRATIC_INTERPOLATION or XintSTEP_INTERPOLATION.

XmNoverlayPlotType

Specifies the type of display to use for the overlay data. Possible values for this resource are XintWIGGLE, XintPOSITIVE_FILL and XintNEGATIVE_FILL or a combination of these values formed by adding two or more of the defined constants.

XmNoverlayScale

Specifies the amplitude scale factor to apply to the overlay data before displaying it on the seismic section.

XmNoverlayTraceNormalization

Specifies the type of normalization to perform on the overlay traces before they are displayed. Possible values for this resource are:

Resource ValueDescription
XintNO_TRACE_NORMALIZATION (Default)Use all of the trace extent.
XintNORMALIZE_TRACE_AVERAGEUse the average value of the traces.
XintNORMALIZE_TRACE_MAXIMUMUse the maximum trace value.
XintNORMALIZE_USING_LIMITSUse the limits specified by XmNminNormalizationLimit and XmNmaxNormalizationLimit.


XmNplotBackground

Specifies the color (as a pixel value) of the background of the seismic widget. If the display visual type is PseudoColor and the specified pixel indicates a read-only color cell, then the Seismic widget will allocate a read-write color cell in the applications's colormap to use for the seismic widget background color.

XmNplotDirection

Specifies the order of the traces displayed in the seismic section. Possible values are XintPLOT_L_TO_R or XintPLOT_R_TO_L.

XmNplotForeground

Specifies the color (as a pixel value) of the foreground of the seismic section display. If the display visual type is PseudoColor and the specified pixel indicates a read-only color cell, then the Seismic widget will allocate a read-write color cell in the applications's colormap to use for the seismic section foreground color.

XmNplotType

Specifies the type of trace display to use in the seismic section display. The defined constants for this resource are:

Resource ValueDescription
XintCOLOR_FILLBoth positive and negative variant VA color fill (uses samples for colors).
XintDENSITYBackground color fill (uses samples for colors).
XintDENSITY_AND_NEGATIVE_FILLBackground color fill and negative monochrome VA display (uses samples for colors).
XintDENSITY_AND_POSITIVE_FILLBackground color fill and positive monochrome variable area display.
XintDENSITY_AND_WIGGLEBackground color fill and wiggle trace display (uses samples for colors).
XintINTERPOLATED_DENSITYInterpolated background color fill (uses samples for colors).
XintLOBE_FILLPositive and negative color fill, where the color of the fill is constant inside each lobe, based on the minimum or maximum amplitude.
XintNEGATIVE_FILLNegative monochrome variable area fill display.
XintNEGATIVE_COLOR_FILLNegative sample variant VA color fill (uses samples for colors).
XintNEGATIVE_FILL_AND_WIGGLENegative monochrome variable area fill plus wiggle trace display.
XintPOSITIVE_FILLPositive monochrome VA fill display.
XintPOSITIVE_AND_NEGATIVE_FILLPositive and negative monochrome VA fill display.
XintPOSITIVE_FILL_AND_WIGGLE (Default)Positive monochrome VA fill plus wiggle trace display.
XintPOSITIVE_COLOR_FILLPositive sample variant VA color fill (uses samples for colors).
XintWIGGLEWiggle trace display.

There are other possible values for this resource specified by performing a logical OR operation on values specified by the constants in the table above. For instance, positive sample variant VA (variable area) color fill and wiggle trace display can be specified by ORing together the constants, XintWIGGLE and XintPOSITIVE_COLOR_FILL.


XmNprimaryAnnotationBase

Specifies whether the annotation start and increment resource values refer to the primary key (XintBASE_PKEY) or the trace number (XintBASE_TN). Specify XintBASE_TN to have an annotation every nth trace, or XintBASE_PKEY to annotate based on the primary key (to annotate shot points for example).

XmNprimaryAnnotationFormat

Specifies the format used to draw the primary annotation on the horizontal axis. Use any C format descriptor (such as "%5.2f") suitable for displaying floating point data.

XmNprimaryAnnotationIncrement

Specifies the increment between each of the primary annotations in terms of primary key units.

XmNprimaryAnnotationName

Specifies the name of the key used to draw the annotation for the primary key values.

XmNprimaryAnnotationStart

Specifies the first primary key value to annotate.

XmNprimaryKeyEnd

Specifies the last primary key value to display.

XmNprimaryKeyIncrement

Specifies the increment to use for the primary key when selecting the data for display.

XmNprimaryKeyName

Specifies whether the primary keys defined in the XintSeismicKeyRec data structure are used to select the data for display. If this resource is NULL, then the widget will generate primary keys that are sequential integers beginning with 1. If the resource value is not NULL, then the primary key values in the XintSeismicKeyRec data structure will be used.

XmNprimaryKeyStart

Specifies the first primary key value to display.

XmNprimaryTimingFont

Specifies the name of a font to use for the primary annotation on the vertical axis.

XmNprimaryTimingLine

Specifies the interval in milliseconds between two primary timing lines. The value specified must be a multiple of the secondary timing line value. A thick horizontal line will be drawn at each of the intervals.

XmNprocessTraceCallback

Specifies the list of callback procedures called before a trace is rasterized. The application can implement application defined trace processing using this callback. To have this callback activated when the widget is first created use this resource instead of the XtAddCallback function to specify the callback list.

XmNreadAhead

Specifies the number of traces that are read in advance. These traces are used to calculate the scale factor whenever the resource XmNtraceNormalization is set to XintNO_TRACE_NORMALIZATION. This scale factor is based on the maximum sample value in the traces read and is used to scale the traces in that set. A new scale factor is computed for each successive set of traces.

If zero (0) is specified, all the traces will be read in advance. This can be expensive in terms of memory allocation..


XmNscale

Specifies the amplitude scale factor to apply to the trace data before displaying it in the seismic section display area.

XmNsecondaryAnnotationBase

Specifies whether the secondary annotation start and increment resource values refer to the secondary key value (XintBASE_SKEY) or the trace sequence number (XintBASE_TN). Specify XintBASE_TN to have an annotation every nth trace, or XintBASE_SKEY to annotate based on the secondary key value (to annotate shot points for example).

XmNsecondaryAnnotationFormat

Specifies the format used to draw the secondary annotation on the horizontal axis. Use any C format descriptor (such as "%5.2f") suitable for displaying floating point data.

XmNsecondaryAnnotationIncrement

Specifies the increment between each of the secondary annotations in terms of secondary key units.

XmNsecondaryAnnotationName

Specifies the name of the key used to draw the secondary key annotations. If this resource is NULL, then no secondary annotation will be displayed. If this resource is not NULL, then the secondary annotation (specified in the XintSeismicKeyRec data structure) will be displayed.

XmNsecondaryAnnotationStart

Specifies the first secondary key value to annotate. This resource only applies if resource XmNsecondaryAnnotationName is not NULL.

XmNsecondaryKeyEnd

Specifies the last secondary key value of the first trace to display

XmNsecondaryKeyIncrement

Specifies the increment to use for the secondary key when selecting the traces to be displayed.

XmNsecondaryKeyName

Specifies whether the secondary keys defined in the XintSeismicKeyRec data structure are used to select the data for display. If this resource is NULL, then the widget will not use secondary keys. If the resource value is not NULL, then the secondary key values in the XintSeismicKeyRec data structure will be used for data selection.

XmNsecondaryKeyStart

Specifies the secondary key value of the first trace to display. This resource only applies if resource XmNsecondaryKeyName is not NULL.

XmNsecondaryTimingFont

Specifies the name of a font to use for the secondary annotation on the vertical axis.

XmNsecondaryTimingLine

Specifies the interval in milliseconds between two secondary timing lines. A thin horizontal line will be drawn at each of these intervals.

XmNselectionCallback

Specifies a list of callbacks that is called when a user selects the Seismic widget. The callback structure is XintSeismicSelectionCallbackStruct . The reason sent by the callback is XintCR_SELECTION.

XmNstartingTime

Specifies the starting time (or depth) of the traces displayed on the plot. If this resource is not specified, then the Seismic widget will use the starting time (or depth) of the data in the XintSeismicDataRec structure when displaying the traces.

XmNtraceColorArray

Specifies an array of pixel values containing the color to use for drawing each trace wiggle and monochrome fill. If this array is not specified, all the traces will be drawn using the color specified in resource XmNplotForeground. A convenience function, XintSeismicUpdateTraceColor, is provided to change the color of a range of traces without having to re-rasterize the entire dataset.

The size of the array specified should be as large as the total number of traces in the dataset. For file based subclasses of Seismic (such as Segy), the size of this array should be as large as the number of traces contained in the file.


XmNtraceColorCallback

Specifies the list of callback procedures called before a trace is rasterized. The application can supply an array of pixels to be applied sample by sample to the trace. To have this callback activated when the widget is first created use this resource instead of the XtAddCallback function to specify the callback list.

XmNtraceNormalization

Specifies the type of normalization to perform on the traces before they are displayed. Possible values for this resource are:

Resource ValueDescription
XintNO_TRACE_NORMALIZATION (Default)Use all of the trace extent.
XintNORMALIZE_TRACE_AVERAGEUse the average value of the traces.
XintNORMALIZE_TRACE_MAXIMUMUse the maximum trace value.
XintNORMALIZE_USING_LIMITSUse the limits specified by XmNminNormalizationLimit and XmNmaxNormalizationLimit.


XmNtracePositionArray

Specifies an array of floating point numbers each of which represents the horizontal display position of a trace inside the range defined by the Grid resources XmNhorizontalStart and XmNhorizontalEnd. When this resource is set, resource XmNtracesPerInch is ignored, and the user should manually set the width of the Seismic plot using resource XmNimageWidth. Resource XmNtracePositionArray can be used for plots where the trace spacing is not constant or to open one or more gaps between the traces to insert graphic objects such as a LogCurve. If the position of a trace is outside the limits specified by resources XmNhorizontalStart and XmNhorizontalEnd the trace will not be displayed.

The size of the array specified should be as large as the total number of traces in the dataset. For file based subclasses of Seismic (such as Segy), the size of this array should be as large as the number of traces contained in the file.


XmNtraceStatusArray

Specifies an array of integers each of which specifies how the corresponding trace in the trace data array is to be displayed. You must use one of the following defined constants as the value of each element in the array:

Trace Status ValueDescription
XintTRACE_NORMALSpecifies that the corresponding trace is to be displayed as defined in the trace data array.
XintTRACE_INVERTEDSpecifies that the corresponding trace is to be displayed opposite to the way it is defined in the trace data array (positive amplitude becomes negative amplitude and negative amplitude becomes positive amplitude).
XintTRACE_KILLEDSpecifies that the corresponding trace is not displayed.

The size of the array should as large as the total number of traces in the dataset. For file based subclasses of Seismic (such as Segy), the size of this array should be as large as the number of traces contained in the file.


XmNtracesPerInch

Specifies the number of traces displayed per inch of the screen. The default value of this resource is one trace per two pixels. For instance, if the screen resolution is 100 pixels per inch, the default value for this resource is 50 traces per inch.

XmNuseBitmap

Specifies whether the Seismic widget will use a bitmap of depth 1 or a pixmap of the depth of the screen to store the seismic image when the plot type is monochrome (plot options wiggle, positive and negative fill). This resource should normally be set to True because bitmaps use less memory. However, if we wish to highlight some traces using action HighlightTrace or use function XintSeismicUpdateTraceColor to change the color of some traces, this resource should be set to False, so that it is not necessary to re-rasterize the entire image the first time you assign a color to some traces.

XmNvirtualMode

Specifies the scrolling mode to be used. Possible values are: XintVIRTUAL_NONE, XintVIRTUAL_WINDOW, and XintVIRTUAL_FULL. If you wish the entire seismic section to be pre-rasterized into an image or a pixmap then use XintVIRTUAL_NONE (default). The window size of the widget is the same as the image or pixmap. This option does not handle large datasets or high zoom factors very well because X has a maximum pixmap and window size (32K pixels).

If using XintVIRTUAL_WINDOW the entire seismic section is pre-rasterized into an image ora pixmap. However, the widget window size is always set to the size of the visible viewport. This option can only be used if the Seismic widget is created as a child of a INT scrolled widget. Option XintVIRTUAL_WINDOW is better than XintVIRTUAL_NONE because it eliminates flashing entirely during scroll operations. It also offers the ability to automatically switch to mode XintVIRTUAL_FULL when the pixmap or image size (width or height) is greater than the value of resource XmNvirtualThreshold. This option combines the advantages of both XintVIRTUAL_NONE and XintVIRTUAL_FULL and should be used in most cases. It is especially useful when working with small to medium datasets that may need to be zoomed to large resolutions.

When using XintVIRTUAL_FULL, only the visible portion of the seismic section is rasterized. As the user scrolls, new data is rasterized on demand. The widget window size as well as the image is always set to the size of the visible viewport. This option can only be used if the Seismic widget is created as a child of a INT scrolled widget. Resource XmNbuildPixmap is also ignored (always assumed to be False). This option should be used when dealing with a very large dataset and when it is important to bring the initial display up fast. Scrolling will be slower than in the other modes, especially if using a slow machine.


XmNvirtualThreshold

Specifies the pixmap or image threshold to be used when XmNvirtualMode is set to XintVIRTUAL_WINDOW. Any pixmap or image greater than the threshold will automatically be switched to XintVIRTUAL_FULL. For more information see

XmNzoomPreserveAmplitude

Specifies how the data in a scaled view of a seismic section should be normalized when a zoom operation is performed. With one exception, all normalization operations will be performed based on the amplitudes of the samples in the area being scaled according to the normalization options in effect at the time the zoom operation is performed. The one exception occurs when the value of XmNzoomPreserveAmplitude is True and the value of XmNtraceNormalization is set to XintNO_TRACE_NORMALIZATION. In this case, the traces in the scaled view will be normalized using the trace normalization limits defined for the original seismic section.