Seismic data processing |
Processing of seismic data is divided into two parts: Real-time QC display, and ordinary processing. At this stage only
real-time processing is accounted for. Ordinary processing is complicated by the fact that geometry setting av SEGY data must first deal with
the effect of an irregular line shape as the ship navigates icecovered waters.
GEODE seismograph
The GEODE is a pretty nifty piece of engineering. Is has excellent specifications and rugged packaging. The small size makes it easy to handle. The laptop Windows controlling software is intuitive and provides the features needed - with one exception, and that is the possibility to have various on-line QC displays. In particular, a near trace plot is needed. If we could transfer last shot data over network to another Linux box we could harness the power of Seismic Unix to make a real-time near trace plot. So we have written a small Python script that monitors a specified directory, and reports via UDP network broadcast telegrams that data are available. A script on a Linux box listens for these UDP telegrams and fetches data when they are ready. This is a screenshot of the GEODE laptop where the Python script is running in a Command Prompt window on the right. The GEODE was triggered and data was written to file 180.sgy (click to enlarge). Screenshot of Python script monitoring GEODE laptop data directory and announcing changes via UDP broadcast telegrams on port 25000. Click to enlarge. The screenshot shows that the SEGY file 180.sgy increased in size by 8672 bytes. In order to facilitate later processing by Seismic Unix, the beginning reel header (3600 bytes) of this file is extracted and inserted in front of last shot data, increasing total package size to 8672+3600=12272 bytes. The program only looks for changes in SEGY files; the file extension must be *.sgy (not case sensitive). Here you can download the GEODE file monitoring and network file transfer program. The program contains a Constants section that specifies monitored data directory, UDP (and TCP) port number, and SEGY file extension. Alter these values by editing the program in IDLE - the Python IDE that is included in the Windows version of Python - or in any text editor. Constants section in GEODE file monitoring script. Edit these to suit your system. Linux box with on-line Seismic Unix QC plotsThe Linux box has Seismic Unix installed. A script listens for UDP broadcast telegrams and fetches data when available. Data is written to two files. One is called last-shot.su and keeps, as the name implies, data from the last GEODE shot. The other holds accumulated data, and the file name is identical to the file name on the GEODE laptop, except that file extension is *.su (it is in Seismic Unix format, see description here) instead of the original *.sgy. In this way you also get an automatic back-up of GEODE laptop files. The script, called read_GEODE.py, is documented here. After file storage is completed, a script called qc.sh is executed. This script uses Seismic Unix to make plots of interest. Below is an example of a Linux real-time QC screen produced by qc.sh. A sinus signal of varying frequency is injected into ch1 of the GEODE signal cable. Click to enlarge.
Four plots are shown:
Below is a listing of qc.sh file - download script here. It must be mentioned that the $LOGFILE variable contains the name of the accumulated data file (in Seismic Unix format, see description here), and the $FILE variable holds the name of a file that contains data from the last shot. $CHANNEL is the channel number to watch. Notice how both size and position of each #plot window is determined (e.g. xbox=850 ybox=10 wbox=410 hbox=460). At the end there is a plot commented out, if you want to make a frequency diagram of all channels versus shot number. A similar QC display, showing "real" data from one-channel mini-streamer, is shown here (from a regional OBS survey, seismic source consisted of several large airguns - that's why the signature is terrible ....) Listing of qc.sh. Download by right clicking here 1 #!/bin/sh 2 #===================================================================================== 3 # A r c t i c O c e a n T r a n s e c t - 2 0 0 5 4 # 5 # U S C G H E A L E Y 6 # 7 # THIS PROGRAM IS CALLED FROM read_GEODE.py - ONLY EDIT, 8 # DO NOT EXECUTE 9 # 10 # The on-line QC script is executed after new SEGY data has 11 # been received by the read_GEODE.py script. 12 # 13 # Input : One parameter: Name of file that holds accumulated data. 14 # 15 # Tips: 16 # * Don't insert comments in multi-line commands! 17 # * -geometry 500x200+100+10 means: 18 # window size = 500 px width, 200 px height 19 # -"- position = 100 px X-coordinate on screen 20 # 10 px Y-coordinate on screen 21 # * Trace headers used by GEODE. Example of surange output 22 # from GEOLDE *.sgy file: 23 # ............................................................ 24 # olem@linux:~/www/Healy-2005/software/QC> surange < 180.su 25 # 116 traces: 26 # fldr=(181,238) tracf=(1,2) trid=1 nvs=1 nhs=1 27 # scalco=1 gx=(0,1) counit=1 ns=1024 dt=1000 28 # year=5 day=203 hour=(10,12) minute=(0,59) sec=(0,58) 29 # timbas=1 30 # ............................................................ 31 # fldr = Field record counter (= FFID) 32 # tracf = Trace within field record 33 # trid = Trace identification code; 1 = seismic data 34 # nvs = Number of vertically summed traces yielding this trace. 35 # nhs = Number of horizontally stacked traced yielding this trace. 36 # scalco = Scalar for coordinates (+ = multiplier, - = divisor) 37 # gx = X receiver group coordinate. 38 # counit = Coordinate units (1 = length in meters or feet, 2 = arc seconds). 39 # ns = Number of samples in this trace. 40 # dt = Sample interval of this trace in microseconds. 41 # year, day, hour, minute, sec: OK 42 # timbas = Time basis (1 = local, 2 = GMT, 3 = other). 43 # Ref.: http://www2.geo.uib.no/seismic-unix/ 44 # 45 # 46 # University of Bergen, Dept. of Earth Science, Bergen, Norway 47 # http://www2.geo.uib.no/Healy-2005 48 # 49 # July 22, 2005 - O. Meyer 50 #===================================================================================== 51 52 53 # Constants used 54 55 CHANNEL=1 # Trace (in each shot) to display 56 NO_OF_CHANNELS=2 # Total number of channels in Seismic Unix data files 57 FILE="./last_shot.su" # Last shot file (name by convention) 58 LOGFILE=$1 # Parameter on invocation line: File name, accumulated data 59 60 # First get rid of old plots 61 # zap ximage # Use these on RedHat 62 # zap xgraph 63 # killall gnuplot_x11 64 killall xgraph # Use these on Suse Linux 65 killall ximage 66 67 68 #-------------------------------------------------------------------------------------------------------------- 69 # Process last shot : Plot amplitude vs. time for selected channel 70 #-------------------------------------------------------------------------------------------------------------- 71 72 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \ 73 suxgraph style=seismic -geometry 280x470+665+5 \ 74 grid1=dot grid2=dot \ 75 title="GEODE ch=$CHANNEL time signal" \ 76 label1="TWT [s]" \ 77 label2="Amplitude" \ 78 windowtitle="Time signal, ch=$CHANNEL" & 79 80 81 #-------------------------------------------------------------------------------------------------------------- 82 # Process last shot : Plot Gabor spectrogram (instantanous frequency) 83 #-------------------------------------------------------------------------------------------------------------- 84 85 #suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \ 86 #sugabor < $FILE | suximage xbox=310 ybox=5 wbox=300 hbox=550 cmap=hsv6 x2end=200 \ 87 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \ 88 sugabor | suximage xbox=990 ybox=5 wbox=330 hbox=470 cmap=hsv6 \ 89 x2end=150 \ 90 label1="TWT [s]" label2="Frequency [Hz]" \ 91 title="Gabor spectrogram, ch=$CHANNEL" \ 92 windowtitle="Gabor spectrogram" & 93 94 95 #-------------------------------------------------------------------------------------------------------------- 96 # Process last shot : Plot frequency spectrum on selected channel 97 #-------------------------------------------------------------------------------------------------------------- 98 99 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \ 100 sufft | suamp mode=amp | \ 101 suop op=db | \ 102 suxgraph style=normal -geometry 610x200+665+510 \ 103 x1end=250 \ 104 grid1=dot grid2=dot \ 105 title="GEODE ch $CHANNEL spectrum" \ 106 label1="Frequency [Hz]" \ 107 label2="Amplitude [dB]" \ 108 windowtitle="Last shot frequency spectrum, ch=$CHANNEL" & 109 110 111 #-------------------------------------------------------------------------------------------------------------- 112 # Process whole data file : "Near-trace plot" 113 #-------------------------------------------------------------------------------------------------------------- 114 115 suwind key=tracf j=$NO_OF_CHANNELS s=$CHANNEL < $LOGFILE | \ 116 suximage perc=95 xbox=5 ybox=5 wbox=655 hbox=705 cmap=hsv0 \ 117 label1="Two-way traveltime [s]" label2="Shot no." windowtitle="Near trace plot, ch=$CHANNEL, file=$LOGFILE" & 118 119 120 #-------------------------------------------------------------------------------------------------------------- 121 # Process whole data file : Frequency spectrum 122 #-------------------------------------------------------------------------------------------------------------- 123 124 #suspecfx < $LOGFILE | \ 125 # suximage xbox=5 ybox=670 wbox=690 hbox=250 cmap=hsv6 x1end=200 \ 126 # label1="Frequency [Hz]" label2="Trace no." windowtitle="Frequency spectrum, file=$LOGFILE" & 127 128 #--------------------------------------------------------------------------------------------------------------- 129 # E N D O F S C R I P T 130 #---------------------------------------------------------------------------------------------------------------- 131 exit # this must be the last command 132 Listing of qc.sh. Download script by right-clicking here. Please send bug reports or comments to Links
|
|
|