Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

sudshead.h

Go to the documentation of this file.
00001 
00002 /*
00003  *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE
00004  *   CHECKED IT OUT USING THE COMMAND CHECKOUT.
00005  *
00006  *    $Id: sudshead_8h-source.html 2161 2006-05-19 16:55:03Z paulf $
00007  *
00008  *    Revision history:
00009  *     $Log$
00009  *     Revision 1.1  2006/05/19 16:55:02  paulf
00009  *     first inclusion
00009  *
00010  *     Revision 1.2  2001/04/12 03:03:08  lombard
00011  *     reorgainized to put the format-specific header items in *head.h
00012  *     and the putaway-specific items in *putaway.h, of which there
00013  *     currently is only sacputaway.h
00014  *     Function protoypes used by putaway.c moved to pa_subs.h
00015  *
00016  *
00017  *
00018  */
00019 
00020 #ifndef SUDSPUTAWAY_H
00021 #define SUDSPUTAWAY_H
00022 /*
00023 // suds.h -- General include for SUDS library
00024 */
00025 #define _SUDS_VERSION "1.44"
00026 /*
00027 // Revision History:
00028 
00029 // Version 1.31 - Thu 30-Jan-1992 11:19, RB
00030 //    Added SUDS_INSTRUMENT structure and expanded datatype in SUDS_DESCRIPTRACE
00031 //    and MUXDATA to include 12 bit unsigned, 12 bit signed, 16 unsigned and
00032 //    16 bit signed data stored as short integers.
00033 
00034 // Version 1.32 - 20-Aug-1992 RLB
00035 //    Cleaned up considerably.
00036 
00037 // Version 1.40 - 01-Oct-1992 RLB
00038 //    Complete rebuild of I/O functions, overhaul of everything else.
00039 
00040 // Version 1.41 - 21-Dec-1992 RLB
00041 //    Fixed file access problems, added datatype '2', minor cleanup.
00042 
00043 // Version 1.42 - 14-Feb-1993 RLB
00044 //    Fixed problem when first struct in file has data following it.
00045 //    Added suds_abs_pos( ) function and other minor cleanup.
00046 
00047 // Version 1.43 02-Jun-1993, RLB
00048 //    Fixed seek problems when working with multiple files.
00049 //    Added suds_update( ) function.
00050 
00051 // Version 1.44 23-Aug-1993, RLB
00052 //    Added SUDS_CHANSET struct.
00053 
00054 // Dec 1999, Tom Murray
00055 //    Added #pragma pack's to correct padding of structures
00056 
00057 //---------------------------------------------------------------------
00058 
00059 //---------------------------------------------------------------------
00060 // DEFINES
00061 
00062 // Define code for type of machine suds is being compiled on.
00063 // '6' is 80x86 machine
00064 */
00065 #define MACHINE         '6'
00066 
00067 /* // Define symbols for missing data. */
00068 #define NODATA          "-32767."
00069 #define NOTIME          "-2147472000" /* // Dec 14, 1901 00:00 00 GMT, near largest long */
00070 #define NOCHAR          "_"
00071 #define NOSTRG          ""
00072 #define NOLIST          "0"
00073 
00074 /* // Integer defines for standard variable types */
00075 #define CHR             1       /* // char 1 byte */
00076 #define MIN             2       /* // char number 1 byte */
00077 #define STR             3       /* // string */
00078 #define BTS             4       /* // char 1 byte */
00079 #define SHT             5       /* // short 2 bytes */
00080 #define LNG             6       /* // long 4 bytes */
00081 #define FLT             7       /* // float 4 bytes */
00082 #define DBL             8       /* // double 8 bytes */
00083 #define STI             9       /* // struct stat_ident 8 bytes */
00084 #define STT             10      /* // st_time 4 bytes */
00085 #define MST             11      /* // ms_time 8 bytes */
00086 #define LLT             12      /* // lon_lat 8 bytes */
00087 #define CAL             13      /* // struct calib 500 bytes */
00088 #define CPX             14      /* // struct complex 16 bytes */
00089 #define BTW             15      /* // unsigned short 2 bytes */
00090 
00091 /* // Structure types or identifiers */
00092 #define NO_STRUCT       0
00093 #define STAT_IDENT      1
00094 #define STRUCTTAG       2
00095 #define TERMINATOR      3
00096 #define EQUIPMENT       4
00097 #define STATIONCOMP     5
00098 #define MUXDATA         6
00099 #define DESCRIPTRACE    7
00100 #define LOCTRACE        8
00101 #define CALIBRATION     9
00102 #define FEATURE         10
00103 #define RESIDUAL        11
00104 #define EVENT           12
00105 #define EV_DESCRIPT     13
00106 #define ORIGIN          14
00107 #ifdef ERROR
00108 #undef ERROR   /* stupid NT */
00109 #endif
00110 #define ERROR           15
00111 #define FOCALMECH       16
00112 #define MOMENT          17
00113 #define VELMODEL        18
00114 #define LAYERS          19
00115 #define COMMENT         20
00116 #define PROFILE         21
00117 #define SHOTGATHER      22
00118 #define CALIB           23
00119 #define COMPLEX         24
00120 #define TRIGGERS        25
00121 #define TRIGSETTING     26
00122 #define EVENTSETTING    27
00123 #define DETECTOR        28
00124 #define ATODINFO        29
00125 #define TIMECORRECTION  30
00126 #define INSTRUMENT      31
00127 #define CHANSET         32
00128 
00129 #define TOTAL_STRUCTS   32
00130 
00131 /* // Standard variable types redefined for portability and clarity */
00132 /* //typedef void            VOID; */
00133 typedef char            CHAR;   /* // A single ascii character */
00134 typedef char            MINI;   /* // A 1 byte integer (0 to 255) */
00135 typedef char            STRING; /* // A character string, null byte terminated */
00136 typedef unsigned char   BITS8;  /* // An 8 bit field */
00137 typedef unsigned short  BITS16; /* // A 16 bit field */
00138 typedef short           SH_INT; /* // A 16 bit signed integer */
00139 typedef long            LG_INT; /* // A 32 bit signed integer */
00140 typedef float           FLOAT;  /* // A 32 bit floating point number, IEEE */
00141 typedef double          DOUBLE; /* // A 64 bit double precision number, IEEE */
00142 typedef struct {
00143    FLOAT   fx;
00144    FLOAT   fy;
00145 } VECTOR;
00146 typedef struct {
00147    FLOAT   cr;
00148    FLOAT   ci;
00149 } COMPLEXX;
00150 typedef struct {
00151    DOUBLE  dr;
00152    DOUBLE  di;
00153 } D_COMPLEX;
00154 typedef struct {
00155    FLOAT   xx;
00156    FLOAT   yy;
00157    FLOAT   xy;
00158 } TENSOR;
00159 typedef LG_INT  ST_TIME;     /* // Stamp GMT time in seconds before or after Jan 1, */
00160 /* //      1970, resolution is one second */
00161 typedef DOUBLE  MS_TIME;     /* // GMT time in seconds before or after Jan 1, */
00162 /* //      1970, resolution finer than microseconds */
00163 typedef DOUBLE  LONLAT;      /* // Latitude or longitude in degrees, N and E positive */
00164 
00165 /*
00166 //---------------------------------------------------------------------
00167 // STRUCTURE DEFINITIONS
00168 
00169 // SUDS_FORM:  Information on each suds structure used for input from ascii,
00170 //             output to ascii, loading or unloading the database, etc.
00171 
00172 // antipadding
00173 */
00174 #pragma pack(1)
00175 
00176 typedef struct {
00177    LG_INT num;
00178    STRING *meaning;
00179 } SUDS_CODES;
00180 
00181 typedef struct {
00182   LG_INT  fstype;           /* // Structure types or identifiers */
00183   STRING  *fname;           /* // Name used to identify structure item */
00184   LG_INT  ftype;            /* // Type of variable in field */
00185   LG_INT  flength;          /* // Length of variable in the field */
00186   LG_INT  offset;           /* // Offset of variable pointer from beginning of */
00187   /* // structure measured in bytes, where first byte */
00188   /* // of structure=0. */
00189   STRING  *initval;         /* // Value to initialize structure */
00190   STRING  *fformat;         /* // Printf type format to read + write field */
00191   LG_INT  nextfstype;       /* // If structure, this is fstype */
00192 } SUDS_FORM;
00193 
00194 
00195 /* // SUDS_STRUCTTAG:  Structure to identify structures when archived together */
00196 
00197 #define ST_MAGIC   'S'       /* // magic character for sync in structtag */
00198 
00199 typedef struct {
00200   CHAR sync;                /* // The letter S. If not present, error exists. */
00201   /* // Use to unscramble damaged files or tapes. */
00202   CHAR machine;             /* // code for machine writing binary file for use */
00203   /* // in identifying byte order and encoding. */
00204   SH_INT id_struct;         /* // structure identifier: numbers defined above */
00205   LG_INT len_struct;        /* // structure length in bytes for fast reading */
00206   /* // and to identify new versions of the structure */
00207   LG_INT len_data;          /* // length of data following structure in bytes */
00208 } SUDS_STRUCTTAG;
00209 
00210 
00211 /* // SUDS_STATIDENT:  Station identification. */
00212 
00213 typedef struct {             /* // station component identifier */
00214   STRING  network[4];       /* // network name */
00215   STRING  st_name[5];       /* // name of station where equipment is located */
00216   CHAR    component;        /* // component v,n,e */
00217   SH_INT  inst_type;        /* // instrument type */
00218 } SUDS_STATIDENT;
00219 
00220 
00221 /* // SUDS_ATODINFO: Information on the A to D converter */
00222 
00223 typedef struct {
00224   SH_INT  base_address;     /* // base I/O address of this device */
00225   SH_INT  device_id;        /* // device identifier */
00226   BITS16  device_flags;     /* // device flags */
00227   SH_INT  extended_bufs;    /* // number of extended buffers used */
00228   SH_INT  external_mux;     /* // AtoD external mux control word */
00229   CHAR    timing_source;    /* // AtoD timing source: i=internal, e=external */
00230   CHAR    trigger_source;   /* // AtoD trigger source: i=internal, e=external */
00231 } SUDS_ATODINFO;
00232 
00233 
00234 /* // SUDS_CALIBRATION: Calibration information for a station component */
00235 
00236 #define NOCALPTS 30
00237 
00238 typedef struct {
00239   COMPLEXX   pole;          /* // pole */
00240   COMPLEXX   zero;          /* // zero */
00241 } SUDS_CALIBR;
00242 
00243 typedef struct {
00244   SUDS_STATIDENT ca_name;   /* // station component identification */
00245   FLOAT maxgain;            /* // maximum gain of calibration curve */
00246   FLOAT normaliz;           /* // factor to multiply standard calib by to make */
00247   /* // peak at given frequency=1 */
00248   SUDS_CALIBR cal[NOCALPTS]; /* // calibration info */
00249   ST_TIME   begint;         /* // time this calibration becomes effective */
00250   ST_TIME   endt;           /* // time this calibration is no longer effective */
00251 } SUDS_CALIBRATION;
00252 
00253 
00254 /* // SUDS_COMMENT:  Comment tag to be followed by the bytes of comment */
00255 
00256 typedef struct {
00257   SH_INT   refer;           /* // structure identifier comment refers to */
00258   SH_INT   item;            /* // item in structure comment refers to */
00259   SH_INT   length;          /* // number of bytes in comment */
00260    SH_INT   unused;
00261 } SUDS_COMMENT;
00262 
00263 
00264 /* // SUDS_CHANSET:  Associate station/components into sets. */
00265 
00266 typedef struct {
00267   SH_INT  type;             /* // Set type; 0=single channel(s), 1=orthogonal vector */
00268   SH_INT  entries;          /* // Number of entries in set (these follow as data) */
00269   STRING  network[4];       /* // Network name */
00270   STRING  name[5];          /* // Set name */
00271   ST_TIME active;           /* // Set is defined after this time */
00272   ST_TIME inactive;         /* // Set is not defined after this time */
00273 } SUDS_CHANSET;
00274 
00275 /* // Entries of this form follow SUDS_CHANSET struct. */
00276 typedef struct _CHANSETENTRY {
00277   LG_INT  inst_num;         /* // Instrument serial number */
00278   SH_INT  stream_num;       /* // Stream of instrument */
00279   SH_INT  chan_num;         /* // Channel of stream */
00280   SUDS_STATIDENT st;        /* // Station/component identifier */
00281 } CHANSETENTRY;
00282 
00283 
00284 /* // SUDS_DESCRIPTRACE:  Descriptive information about a seismic trace. */
00285 /* //                     Normally followed by waveform. */
00286 
00287 typedef struct {
00288   SUDS_STATIDENT dt_name;   /* // station component identification */
00289   MS_TIME begintime;        /* // time of first data sample */
00290   SH_INT  localtime;        /* // minutes to add to GMT to get local time */
00291   CHAR    datatype;         /* // s = 12 bit unsigned stored as short int, 0 to 4096, */
00292   /* // q = 12 bit signed stored as short int, -2048 to 2048, */
00293   /* // u = 16 bit unsigned stored as short int, 0 to 65536 */
00294   /* // i = 16 bit signed stored as short int, -32767 to 32767, */
00295   /* // 2 = 24 bit signed integer stored as long, */
00296   /* // l = 32 bit signed integer stored as long, */
00297   /* // r = 12 bit data, 4 lsb time stored as short int, */
00298   /* // f = float (32 bit IEEE real), */
00299   /* // d = double (64 bit IEEE real), */
00300   /* // c = complex, */
00301   /* // v = vector, */
00302   /* // t = tensor */
00303   CHAR    descriptor;       /* // g=good, t=telemetry noise, c=calibration, etc */
00304   SH_INT  digi_by;          /* // agency code who digitized record; 0=original */
00305   SH_INT  processed;        /* // processing done on this waveform */
00306   LG_INT  length;           /* // number of samples in trace */
00307   FLOAT   rate;             /* // samples per second */
00308   FLOAT   mindata;          /* // minimum value of data (type s,l,f only) */
00309   FLOAT   maxdata;          /* // maximum value of data (type s,l,f only) */
00310   FLOAT   avenoise;         /* // average value of first 200 samples (type s,l,f only) */
00311   LG_INT  numclip;          /* // number of clipped datapoints */
00312   MS_TIME time_correct;     /* // time correction to be added to begintime */
00313   FLOAT   rate_correct;     /* // rate correction to be added to rate */
00314 } SUDS_DESCRIPTRACE;
00315 
00316 
00317 /* // SUDS_DETECTOR:  Information on detector program being used */
00318 
00319 typedef struct {
00320   CHAR    dalgorithm;       /* // triggering algorithm: x=xdetect, m=mdetect */
00321   /* // e=eqdetect */
00322   CHAR    event_type;       /* // c=calibration, e=earthquake, E=explosion, */
00323   /* // f=free run, n=noise, etc. */
00324   CHAR    net_node_id[10];  /* // network node identification */
00325   FLOAT   versionnum;       /* // software version number */
00326   LG_INT  event_number;     /* // unique event number assigned locally. */
00327   LG_INT  spareL;           /* // spare */
00328 } SUDS_DETECTOR;
00329 
00330 
00331 /* // SUDS_EQUIPMENT:  Equipment making up a station/component. Primarily used for */
00332 /* //                  maintenance but may be referenced by researcher. One or more */
00333 /* //                  structures exist for each piece of equipment making up a */
00334 /* //                  station/component. */
00335 
00336 typedef struct {
00337   SUDS_STATIDENT this;      /* // identifier of this piece of equipment */
00338   SUDS_STATIDENT previous;  /* // next piece of equipment toward sensor */
00339   SUDS_STATIDENT next;      /* // next piece of equipment toward recorder */
00340   STRING  serial[8];        /* // serial number */
00341   SH_INT  model;            /* // model such as L4, HS10, etc. */
00342   SH_INT  knob1;            /* // knob setting or series resistor value of Lpad */
00343   SH_INT  knob2;            /* // knob setting or shunt  resistor value of Lpad */
00344   SH_INT  reason;           /* // reason change was made */
00345   FLOAT   frequency;        /* // sensor corner frequency, vco freq, transmitter */
00346   /* // frequency, etc. */
00347   ST_TIME effective;        /* // date/time these values became effective */
00348 } SUDS_EQUIPMENT;
00349 
00350 
00351 /* // SUDS_ERROR:  Error matrix */
00352 
00353 typedef struct {
00354   FLOAT   covarr[10];       /* // covariance matrix */
00355 } SUDS_ERROR;
00356 
00357 
00358 /* // SUDS_EVENT:  General information about an event. */
00359 
00360 typedef struct {
00361   SH_INT  authority;        /* // organization processing the data */
00362   LG_INT  number;           /* // unique event number assigned by organization */
00363   SH_INT  felt;             /* // number of felt reports */
00364   CHAR    mintensity;       /* // maximum Modified Mercali Intensity */
00365   CHAR    ev_type;          /* // e=earthquake, E=explosion, n=nuclear, */
00366   /* // i=icequake, b=b_type, n=net, r=regional, */
00367   /* // t=teleseism, c=calibration, n=noise */
00368   CHAR    tectonism;        /* // observed u=uplift, s=subsidence, S=strikeslip */
00369   /* // faulting, N=normal faulting, T=thrust */
00370   CHAR    waterwave;        /* // seiche, tsunami, etc. */
00371   CHAR    mechanism;        /* // t=thrust, s=strike-slip, n=normal, e=explosive */
00372   CHAR    medium;           /* // medium containing explosion or event */
00373   FLOAT   size;             /* // magnitude or pounds TNT for explosions */
00374 } SUDS_EVENT;
00375 
00376 
00377 /* // SUDS_EVENTSETTING:  Settings for earthquake trigger system */
00378 
00379 typedef struct {
00380   STRING  netwname[4];      /* // network name */
00381   MS_TIME beginttime;       /* // time these values in effect */
00382   SH_INT  const1;           /* // trigger constant 1 */
00383   SH_INT  const2;           /* // trigger constant 2 */
00384   SH_INT  threshold;        /* // trigger threshold */
00385   SH_INT  const3;           /* // trigger constant 3 */
00386   FLOAT   minduration;      /* // minimum duration for event */
00387   FLOAT   maxduration;      /* // maximum duration for event */
00388   CHAR    algorithm;        /* // triggering algorithm: x=xdetect, m=mdetect */
00389   /* // e=eqdetect */
00390   CHAR    spareK;           /* // spare */
00391   SH_INT  spareI;           /* // spare */
00392 } SUDS_EVENTSETTING;
00393 
00394 
00395 /* // SUDS_EVDESCR:  Descriptive information about an event typically used for */
00396 /* //                major, destructive earthquakes. This structure is typically */
00397 /* //                associated with EVENT structure. */
00398 
00399 typedef struct {
00400   STRING  eqname[20];  /* // Popular name used to refer to this earthquake */
00401   STRING  country[16]; /* // country of earthquake */
00402   STRING  state[16];   /* // state, province or other political subdivision */
00403   SH_INT  localtime;   /* // hours to add to GMT to get local time */
00404    SH_INT  spareB;
00405 } SUDS_EVDESCR;
00406 
00407 
00408 /* // SUDS_FEATURE:  Observed phase arrival time, amplitude, and period. */
00409 
00410 typedef struct {
00411   SUDS_STATIDENT fe_name;   /* // station component identification */
00412   SH_INT  obs_phase;        /* // observed phase code */
00413   CHAR    onset;            /* // wave onset descriptor, i or e */
00414   CHAR    direction;        /* // first motion: U,D,+,- */
00415   SH_INT  sig_noise;        /* // ratio ampl. of first peak or trough to noise */
00416   CHAR    data_source;      /* // i=interactive,a=automatic,r=rtp, or user code */
00417   CHAR    tim_qual;         /* // timing quality given by analyst: 0-4, etc. */
00418   /* //      n=ignore timing */
00419   CHAR    amp_qual;         /* // amplitude quality given by analyst: 0-4, etc. */
00420   /* //      n=ignor amplitude information */
00421   CHAR    ampunits;         /* // units amplitude measured in: d=digital counts */
00422   /* //      m=mm on develocorder, etc. */
00423   SH_INT  gain_range;       /* // 1 or gain multiplier if gain range in effect */
00424   MS_TIME time;             /* // phase time, x value where pick was made */
00425   FLOAT   amplitude;        /* // peak-to-peak amplitude of phase */
00426   FLOAT   period;           /* // period of waveform measured */
00427   ST_TIME time_of_pick;     /* // time this pick was made */
00428   SH_INT  pick_authority;   /* // organization processing the data */
00429   SH_INT  pick_reader;      /* // person making this pick */
00430 } SUDS_FEATURE;
00431 
00432 
00433 /* // SUDS_FOCALMECH:  General information about a focal mechanism. */
00434 
00435 typedef struct {
00436   FLOAT   astrike;          /* // strike of plane a */
00437   FLOAT   adip;             /* // dip of plane a */
00438   FLOAT   arake;            /* // rake of plane a */
00439   FLOAT   bstrike;          /* // strike of plane b */
00440   FLOAT   bdip;             /* // dip of plane b */
00441   FLOAT   brake;            /* // rake of plane b */
00442   CHAR    prefplane;        /* // preferred plane a or b or blank */
00443    CHAR    spareC[3];
00444 } SUDS_FOCALMECH;
00445 
00446 /* // SUDS_INSTRUMENT: Instrument hardware settings, mainly PADS related */
00447 /* //                  added by R. Banfill, Jan 1991 */
00448 
00449 typedef struct {
00450   SUDS_STATIDENT in_name;   /* // Station component identification */
00451   SH_INT  in_serial;        /* // Instrument serial number */
00452   SH_INT  comps;            /* // Number of components recorded by instrument */
00453   SH_INT  channel;          /* // Actual channel number on recorder */
00454   CHAR    sens_type;        /* // Sensor type; a=accel, v=vel, d=disp... */
00455   CHAR    datatype;         /* // see SUDS_DESCRIPTRACE.datatype */
00456   LG_INT  void_samp;        /* // Invalid or void sample value */
00457   FLOAT   dig_con;          /* // Digitizing constant (counts / volt) */
00458   FLOAT   aa_corner;        /* // Anti-alias filter corner frequency (Hz) */
00459   FLOAT   aa_poles;         /* // Anti-alias filter poles */
00460   FLOAT   nat_freq;         /* // Transducer natural frequency (Hz) */
00461   FLOAT   damping;          /* // Transducer damping coeff. */
00462   FLOAT   mot_con;          /* // Transducer motion constant (volts / GMU) */
00463   FLOAT   gain;             /* // Amplifier gain (dB) */
00464   FLOAT   local_x;          /* // Local coordinate X (meters) */
00465   FLOAT   local_y;          /* // Local coordinate Y (meters) */
00466   FLOAT   local_z;          /* // Local coordinate Z (meters) */
00467   ST_TIME effective;        /* // Time these setting took effect */
00468   FLOAT   pre_event;        /* // Pre-event length (IST+pre_event=trigger time) */
00469   SH_INT  trig_num;         /* // Trigger number on instrument */
00470   STRING  study[6];         /* // Study name, used to insure unique station names */
00471   SH_INT  sn_serial;        /* // Sensor serial number */
00472 } SUDS_INSTRUMENT;
00473 
00474 /* // SUDS_LAYERS:  Velocity layers. */
00475 
00476 typedef struct {
00477   FLOAT   thickness;        /* // thickness in kilometers */
00478   FLOAT   pveltop;          /* // p velocity at top of layer */
00479   FLOAT   pvelbase;         /* // p velocity at base of layer */
00480   FLOAT   sveltop;          /* // s velocity at top of layer */
00481   FLOAT   svelbase;         /* // s velocity at base of layer */
00482   SH_INT  function;         /* // velocity function in layer: 0=constant, */
00483   /* //    1=linear, 2=exponential, etc. */
00484    SH_INT  spareF;
00485 } SUDS_LAYERS;
00486 
00487 
00488 /* // SUDS_LOCTRACE:  Location of trace. */
00489 
00490 typedef struct {
00491   SUDS_STATIDENT lt_name;   /* // station component identification */
00492   STRING  *fileloc;         /* // pointer to pathname in file system */
00493   STRING  *tapeloc;         /* // pointer to name of tape or offline storage */
00494   LG_INT  beginloc;         /* // bytes from begining of file to trace */
00495 } SUDS_LOCTRACE;
00496 
00497 
00498 /* // SUDS_MOMENT:  Moment tensor information. */
00499 
00500 typedef struct {
00501   BITS8   datatypes;        /* // sum of: 1=polarities, 2=amplitudes, */
00502   /* // 4=waveforms, etc. */
00503   CHAR    constraints;      /* // solution constrained: d=deviatoric, */
00504   /* // c=double couple */
00505    CHAR    spareD[2];
00506   FLOAT   sc_moment;        /* // scalar moment */
00507   FLOAT   norm_ten[6];      /* // normalized moment tensor */
00508 } SUDS_MOMENT;
00509 
00510 
00511 /* // SUDS_MUXDATA:  Header for multiplexed data */
00512 
00513 typedef struct {
00514   STRING  netname[4];       /* // network name */
00515   MS_TIME begintime;        /* // time of first data sample */
00516   SH_INT  loctime;          /* // minutes to add to GMT to get local time */
00517   SH_INT  numchans;         /* // number of channels: if !=1 then multiplexed */
00518   FLOAT   dig_rate;         /* // samples per second */
00519   CHAR    typedata;         /* // see SUDS_DESCRIPTRACE.datatype */
00520   CHAR    descript;         /* // g=good, t=telemetry noise, c=calibration, etc */
00521   SH_INT  spareG;           /* // spare */
00522   LG_INT  numsamps;         /* // number of sample sweeps. Typically not known */
00523   /* // when header is written, but can be added later */
00524   LG_INT  blocksize;        /* // number of demultiplexed samples per channel if */
00525   /* // data is partially demultiplexed, otherwise=0 */
00526 } SUDS_MUXDATA;
00527 
00528 
00529 /* // SUDS_ORIGIN: Information about a specific solution for a given event */
00530 
00531 typedef struct {
00532   LG_INT  number;           /* // unique event number assigned by organization */
00533   SH_INT  authority;        /* // organization processing the data */
00534   CHAR    version;          /* // version of solution within organization */
00535   CHAR    or_status;        /* // processing status: f=final, a=automatic, etc */
00536   CHAR    preferred;        /* // p=preferred location */
00537   CHAR    program;          /* // name of processing program  h=hypo71, */
00538   /* // l=hypolayer, i=isc, c=centroid, etc. */
00539   CHAR    depcontrl;        /* // depth control: f=fixed, etc. */
00540   CHAR    convergence;      /* // hypocentral convergence character */
00541   LG_INT  region;           /* // geographic region code assigned locally */
00542   MS_TIME orgtime;          /* // origin time */
00543   LONLAT  or_lat;           /* // latitude, north is plus */
00544   LONLAT  or_long;          /* // longitude, east is plus */
00545   FLOAT   depth;            /* // depth in kilometers, + down */
00546   FLOAT   err_horiz;        /* // horizontal error in km */
00547   FLOAT   err_depth;        /* // vertical error in km */
00548   FLOAT   res_rms;          /* // rms of residuals */
00549   STRING  crustmodel[6];    /* // code for model used in this location */
00550   SH_INT  gap;              /* // azimuthal gap in degrees */
00551   FLOAT   nearstat;         /* // distance in km to nearest station */
00552   SH_INT  num_stats;        /* // number of stations reporting phases */
00553   SH_INT  rep_p;            /* // number of p phases reported */
00554   SH_INT  used_p;           /* // number of p times used in the solution */
00555   SH_INT  rep_s;            /* // number of s phases reported */
00556   SH_INT  used_s;           /* // number of s times used in the solution */
00557   SH_INT  mag_type;         /* // magnitude type: coda,tau,xmag ml,mb,ms,mw */
00558   SH_INT  rep_m;            /* // number of magnitude readings reported */
00559   SH_INT  used_m;           /* // number of magnitude readings used */
00560   FLOAT   magnitude;        /* // magnitude value */
00561   FLOAT   weight;           /* // average magnitude weight */
00562   FLOAT   mag_rms;          /* // rms of magnitude */
00563   ST_TIME effective;        /* // time this solution was calculated */
00564 } SUDS_ORIGIN;
00565 
00566 
00567 /* // SUDS_PROFILE:  Grouping of shotgathers by profile. */
00568 
00569 typedef struct {
00570    int junk1;
00571   /* // What is your suggestion? */
00572 } SUDS_PROFILE;
00573 
00574 
00575 /* // SUDS_RESIDUAL:  Calculated residuals for arrival times, magnitudes, etc. */
00576 
00577 typedef struct {
00578   LG_INT  event_num;        /* // unique event number */
00579   SUDS_STATIDENT re_name;   /* // station component identification */
00580   SH_INT  set_phase;        /* // phase code set for this solution */
00581   CHAR    set_tim_qual;     /* // timing quality assigned for this soln: 0-4 */
00582   CHAR    set_amp_qual;     /* // amplitude quality assigned for this soln: 0-4 */
00583   FLOAT   residual;         /* // traveltime residual or phase magnitude */
00584   FLOAT   weight_used;      /* // weight used in this solution */
00585   FLOAT   delay;            /* // delay time or station correction used */
00586   FLOAT   azimuth;          /* // azimuth event to station, 0 north */
00587   FLOAT   distance;         /* // distance in km event to station */
00588   FLOAT   emergence;        /* // angle of emergence from source, 0=down,180=up */
00589 } SUDS_RESIDUAL;
00590 
00591 
00592 /* // SUDS_SHOTGATHER:  Grouping of waveforms by source event */
00593 
00594 typedef struct {
00595    int junk2;
00596   /* // What is your suggestion? */
00597 } SUDS_SHOTGATHER;
00598 
00599 
00600 /* // SUDS_STATIONCOMP:  Generic station component information */
00601 
00602 typedef struct {
00603   SUDS_STATIDENT sc_name;   /* // station component identification */
00604   SH_INT  azim;             /* // component azimuth clockwise from north */
00605   SH_INT  incid;            /* // component angle of incidence from vertical */
00606   /* //      0 is vertical, 90 is horizontal */
00607   LONLAT  st_lat;           /* // latitude, north is plus */
00608   LONLAT  st_long;          /* // longitude, east is plus */
00609   FLOAT   elev;             /* // elevation in meters */
00610   CHAR    enclosure;        /* // d=dam, n=nuclear power plant, v=underground */
00611   /* //      vault, b=buried, s=on surface, etc. */
00612   CHAR    annotation;       /* // annotated comment code */
00613   CHAR    recorder;         /* // type device data recorded on */
00614   CHAR    rockclass;        /* // i=igneous, m=metamorphic, s=sedimentary */
00615   SH_INT  rocktype;         /* // code for type of rock */
00616   CHAR    sitecondition;    /* // p=permafrost, etc. */
00617   CHAR    sensor_type;      /* // sensor type: d=displacement, v=velocity, */
00618   /* // a=acceleration, t=time code */
00619   CHAR    data_type;        /* // see SUDS_DESCRIPTRACE.datatype */
00620   CHAR    data_units;       /* // data units: d=digital counts, v=millivolts, */
00621   /* // n=nanometers (/sec or /sec/sec) */
00622   CHAR    polarity;         /* // n=normal, r=reversed */
00623   CHAR    st_status;        /* // d=dead, g=good */
00624   FLOAT   max_gain;         /* // maximum gain of the amplifier */
00625   FLOAT   clip_value;       /* // +-value of data where clipping begins */
00626   FLOAT   con_mvolts;       /* // conversion factor to millivolts: mv per counts */
00627   /* //      0 means not defined or not appropriate */
00628   /* // max_ground_motion=digital_sample*con_mvolts* */
00629   /* // max_gain */
00630   SH_INT  channel;          /* // a2d channel number */
00631   SH_INT  atod_gain;        /* // gain of analog to digital converter */
00632   ST_TIME effective;        /* // date/time these values became effective */
00633   FLOAT   clock_correct;    /* // clock correction in seconds. */
00634   FLOAT   station_delay;    /* // seismological station delay. */
00635 } SUDS_STATIONCOMP;
00636 
00637 
00638 /* // SUDS_TERMINATOR:  Structure to end a sequence of related structures when */
00639 /* //                   loaded in a serial file or on a serial device. */
00640 
00641 typedef struct {
00642   SH_INT  structid;         /* // id for structure at beginning of this sequence */
00643    SH_INT  spareA;
00644 } SUDS_TERMINATOR;
00645 
00646 
00647 /* // SUDS_TIMECORRECTION:  Time correction information. */
00648 
00649 typedef struct {
00650   SUDS_STATIDENT tm_name;   /* // time trace station id used to determine */
00651   /* // correction. */
00652   MS_TIME time_correct;     /* // time correction to be added to begintime */
00653   FLOAT   rate_correct;     /* // rate correction to be added to rate */
00654   CHAR    sync_code;        /* // synchronization code as follows: */
00655   /* //   0 = total failure,   1 = 1 second synch, */
00656   /* //   2 = 10 second synch, 3 = minute synch, */
00657   /* //   4, 5 = successful decode. */
00658   CHAR    program;          /* // program used to decode time: */
00659   /* //   e = irige, c = irigc */
00660   ST_TIME effective_time;   /* // time this correction was calculated */
00661    SH_INT  spareM;
00662 } SUDS_TIMECORRECTION;
00663 
00664 
00665 /* // SUDS_TRIGGERS:  Earthquake detector trigger statistics */
00666 
00667 typedef struct {
00668   SUDS_STATIDENT tr_name;   /* // station component identification */
00669   SH_INT  sta;              /* // short term average */
00670   SH_INT  lta;              /* // long term average; pre_lta for xdetect */
00671   SH_INT  abs_sta;          /* // short term absolute average */
00672   SH_INT  abs_lta;          /* // long term absolute average */
00673   SH_INT  trig_value;       /* // value of trigger level (eta) */
00674   SH_INT  num_triggers;     /* // number of times triggered during this event */
00675   MS_TIME trig_time;        /* // time of first trigger */
00676 } SUDS_TRIGGERS;
00677 
00678 
00679 /* // SUDS_TRIGSETTING:  Settings for earthquake trigger system */
00680 
00681 typedef struct {
00682   STRING  netwname[4];      /* // network name */
00683   MS_TIME beginttime;       /* // time these values in effect */
00684   SH_INT  const1;           /* // trigger constant 1 */
00685   SH_INT  const2;           /* // trigger constant 2 */
00686   SH_INT  threshold;        /* // trigger threshold */
00687   SH_INT  const3;           /* // trigger constant 3 */
00688   SH_INT  const4;           /* // trigger constant 4 */
00689   SH_INT  wav_inc;          /* // weighted average increment */
00690   FLOAT   sweep;            /* // trigger sweep time in seconds */
00691   FLOAT   aperture;         /* // seconds for coincident station triggers */
00692   CHAR    algorithm;        /* // triggering algorithm: x=xdetect, m=mdetect */
00693   /* // e=eqdetect */
00694   CHAR    spareJ;           /* // spare */
00695   SH_INT  spareI;           /* // spare */
00696 } SUDS_TRIGSETTING;
00697 
00698 
00699 /* // SUDS_VELMODEL:  Velocity model */
00700 
00701 typedef struct {
00702   STRING  netname[4];       /* // network name */
00703   STRING  modelname[6];     /* // model name */
00704    CHAR    spareE;
00705   CHAR    modeltype;        /* // p=profile A to B, a=area within corners A B */
00706   LONLAT  latA;             /* // latitude of point A, north is plus */
00707   LONLAT  longA;            /* // longitude of point A, east is plus */
00708   LONLAT  latB;             /* // latitude of point B, north is plus */
00709   LONLAT  longB;            /* // longitude of point B, east is plus */
00710   ST_TIME time_effective;   /* // time this model was created */
00711 } SUDS_VELMODEL;
00712 
00713 /* //--------------------------------------------------------------------- */
00714 /* // SUDS structure */
00715 
00716 typedef struct _SUDS {
00717    int type;
00718    long data_len;
00719    union {
00720       SUDS_STATIDENT st;
00721       SUDS_ATODINFO ad;
00722       SUDS_CALIBRATION ca;
00723       SUDS_COMMENT co;
00724       SUDS_CHANSET cs;
00725       SUDS_DESCRIPTRACE dt;
00726       SUDS_DETECTOR de;
00727       SUDS_EQUIPMENT eq;
00728       SUDS_ERROR er;
00729       SUDS_EVENT ev;
00730       SUDS_EVENTSETTING es;
00731       SUDS_EVDESCR ed;
00732       SUDS_FEATURE fe;
00733       SUDS_FOCALMECH fo;
00734       SUDS_INSTRUMENT in;
00735       SUDS_LAYERS la;
00736       SUDS_LOCTRACE lo;
00737       SUDS_MOMENT mo;
00738       SUDS_MUXDATA mu;
00739       SUDS_ORIGIN or;
00740       SUDS_PROFILE pr;
00741       SUDS_RESIDUAL re;
00742       SUDS_SHOTGATHER sh;
00743       SUDS_STATIONCOMP sc;
00744       SUDS_TERMINATOR te;
00745       SUDS_TIMECORRECTION tc;
00746       SUDS_TRIGGERS tr;
00747       SUDS_TRIGSETTING ts;
00748       SUDS_VELMODEL vm;
00749    } stype;
00750 } SUDS;
00751 
00752 
00753 /* // remove anti-padding */
00754 /* // syntax may be wrong - might be #pragma pack instead */
00755 
00756 #pragma pack()
00757 
00758 /* //--------------------------------------------------------------------- */
00759 /* // Function prototypes for SUDS library functions */
00760 
00761 /* // Manifest constants ------------------------------------------------- */
00762 #define SUDS_EOF      -1
00763 #define SUDS_READONLY  1
00764 #define SUDS_READWRITE 2
00765 #define SUDS_APPEND    3
00766 #define SUDS_CREATE    4
00767 
00768 #ifndef TRUE
00769 #define TRUE           1
00770 #endif
00771 #ifndef FALSE
00772 #define FALSE          0
00773 #endif
00774 
00775 /* // Input / output functions ------------------------------------------- */
00776 #ifndef _SUDS_IO_
00777 
00778 /* // Open and close functions */
00779 extern int suds_open( char *filespec, int mode );
00780 extern int suds_close( int fd );
00781 
00782 /* // Read functions */
00783 extern int suds_read( int fd, SUDS *suds );
00784 extern int suds_read_data( int fd, void *ptr, long len );
00785 
00786 /* // Write functions */
00787 extern int suds_write( int fd, SUDS *suds );
00788 extern int suds_write_data( int fd, void  *ptr, long len );
00789 extern int suds_update( int fd, SUDS *suds );
00790 extern int suds_flush( int fd );
00791 
00792 /* // Navigation functions */
00793 extern long suds_pos( int fd );
00794 extern long suds_abs_pos( int fd );
00795 extern int suds_seek( int fd, long pos );
00796 extern int suds_rewind( int fd );
00797 
00798 /* // Retrieve error messages */
00799 extern char *suds_get_err( void );
00800 
00801 #endif
00802 
00803 /* // Structure initialization ------------------------------------------- */
00804 #ifndef _SUDS_INIT_
00805 
00806 extern void suds_init( SUDS *suds );
00807 
00808 #endif
00809 
00810 /* // Time functions ----------------------------------------------------- */
00811 #ifndef _SUDS_TIME_
00812 
00813 extern double get_mstime( void );
00814 extern double make_mstime( int year, int month, int day, int hour,
00815                            int minute, double second );
00816 extern int decode_mstime( double mstime, int *year, int *month, int *day,
00817                           int *hour, int *minute, double *second );
00818 extern char *list_mstime( double mstime, int format );
00819 extern int yrday( int month, int day, int leap );
00820 extern void mnday( int doy, int leap, int *month, int *day );
00821 extern int isleap( int year, int cal );
00822 
00823 #endif
00824 
00825 /* //--------------------------------------------------------------------- */
00826 
00827 #endif

Generated on Tue May 6 09:16:11 2003 for Earthworm Libs by doxygen1.3-rc3