QMIPS

Q-MIPS DATA FILE FORMAT

The header structure labeled isis_header is the 1024 byte portion that occurs once at the beginning of a file. The structure labeled isis_sonar is the 256 byte trailer which is placed at the end of every ping.

NOTE: These structures were designed for PC's, which align on 16-bit boundaries. If you are using a 32- or 64-bit machine, alignment will have to be forced as these structures will be larger than 256 bytes on those machines. Creating a union of these structures with a 1024 or 256 byte (respectively) unsigned char buffer generally works. Also note the defines. The WORD define for RISC machines, or any 32-bit machine, should be changed to unsigned short.
#define BYTE unsigned char
#define WORD unsigned int          /* PC: 16 bit  */
#define DWORD unsigned long        /* PC: 32 bit */

struct isis_header
{                                 
    /* header header */
    /*****************/
    BYTE fileFormat;               /* always decimal 50 */
    BYTE reserved;
    BYTE softwareRev[6];
    BYTE spare1[20];    

    /* digitizer parameters */
    /************************/
    WORD  sampleRate;              /* in Ksamples/sec */
    WORD  numChannels;             /* 1-4 */
    WORD  bitsPerPixel;            /* 8 or 12 */
    WORD  pixelsPerChannelPerPing; /* (WORD COUNT) */
    float speedOfSoundInWater;     /* two way travel time in meters/sec */
    float noLongerUsed;
    WORD  asyncChannelNumber;      /* if 8 no async chan. otherwise, asynchronous */
    WORD  numSonarChannels;        /* 1 to 4 */
    WORD  ch1_processingAvailable;
    WORD  ch2_processingAvailable;
    WORD  ch3_processingAvailable;
    WORD  ch4_processingAvailable;

                  /* nav system parameters */

    WORD  timeDelay;                /* tenths of seconds */
    BYTE navSystemName[100];
    BYTE projectionType[12];
    BYTE spheriodType[12];
    WORD zone;
    float originLat;
    float originLong;
    float offsetLat;
    float offsetLong;
    WORD   navUnits;               /* 0 = meters */
                                   /* 1 = feet */
                                   /* 2 = yards */
                                   /* 3 = degrees */


                  /* site parameters */

    WORD  diveNumber;
    WORD  blockNumber;
    WORD  trackNumber;
    WORD  runNumber;
    BYTE spare4[100];

    /* annotation */
    BYTE operatorAnnotation[100];
    BYTE sonarName[40];


    /* sonar parameters */
    /************************/
    WORD triggerDirection;         /* -1 is neg, 0 is equal, 1 isos */
    DWORD triggerMagnitude;
    float triggerWidth;

    WORD ch1_frequency;            /* in kHz */
    WORD ch2_frequency;
    WORD ch3_frequency;
    WORD ch4_frequency;

    float ch1_horizBeamAngle;      /* degrees */
    float ch2_horizBeamAngle;
    float ch3_horizBeamAngle;
    float ch4_horizBeamAngle;

/* name of this file */

   char thisFileName[45];
/* which channels are half wave rectified */
/* -------------------------------------- */
   WORD  ch1_halfWaveRectify;
   WORD  ch2_halfWaveRectify;
   WORD  ch3_halfWaveRectify;
   WORD  ch4_halfWaveRectify;

    /* left over */
    BYTE spare5[486];

};


struct isis_sonar
{
/* time and date stamp */
     BYTE day;
     BYTE month;
     BYTE year;
     BYTE hour;
     BYTE minute;
     BYTE seconds;
     WORD tenthsSeconds;

/* misc. info */

    BYTE fileName[12];
    WORD pingNumber;
    WORD asyncByteOffset;     /* when non-zero, indicates where  */
                              /* sync (subbottom) channel starts */
    BYTE spare1[12];

/* digitizer parameters */

    BYTE spare2[4];
    float timeInterval;       /* multiplier (fraction) to make window in time
                                 of an uncorrected channel */
    float APaltitude;         /* altitude from array processor
                                 computed from water column */
    WORD  triggerChannel;  
    WORD  altSource;          /* which altitude to use:
                                    0 = from telemetry
                                  1-4 = channel 1-4 water column
                                    5 = manual entry */
    DWORD waterColumn;
    DWORD triggerPeriod;
    WORD  ch_1signalDivisor;  /* chan 1 signal divisor multiply by 100 */ 
    float telemFishDepth;     
    float telemFishHeading;   
    float telemFishPitch;     
    float telemFishRoll;      
    float telemFishAlt;       /* meters - comes from manual entry or */
                              /* towfish telem.                      */
    BYTE  spare3[10];

    /* sonar parameters */
   
    BYTE  ch1_spare4[8];
    WORD  ch1_bandWidth;      /* in kilohertz     */
    WORD  ch1_sampleScheme;
    WORD  ch1_rangeScale;     /* meters */
    WORD  ch1_gain;
    WORD  ch1_pulseWidth;     /* microseconds */
    WORD  sampleRate;
    WORD  ch1_corrected;      /* boolean */

    BYTE  ch2_spare4[8];
    WORD  ch2_bandWidth;      /* in kilohertz */
    WORD  ch2_sampleScheme;
    WORD  ch2_rangeScale;     /* meters */
    WORD  ch2_gain;
    WORD  ch2_pulseWidth;     /* microseconds */
    WORD  ch2_spare;
    WORD  ch2_corrected;      /* boolean */

    BYTE  ch3_spare4[8];
    WORD  ch3_bandWidth;      /* in kilohertz */
    WORD  ch3_sampleScheme;
    WORD  ch3_rangeScale;     /* meters */
    WORD  ch3_gain;
    WORD  ch3_pulseWidth;     /* microseconds */
    WORD  ch3_spare;
    WORD  ch3_corrected;      /* boolean */
    
    BYTE  ch4_spare4[8];
    WORD  ch4_bandWidth;      /* in kilohertz */
    WORD  ch4_sampleScheme;
    WORD  ch4_rangeScale;     /* meters */
    WORD  ch4_gain;
    WORD  ch4_pulseWidth;     /* microseconds */
    WORD  ch4_spare;
    WORD  ch4_corrected;      /* boolean */


                /* nav system parameters */

    BYTE nav_sensor[4];       /* sensor code */
    WORD eventNumber;
    BYTE station_1_code;      /* station code data as */
                              /* BYTE station_2_code; */
    BYTE station_3_code;
    BYTE station_4_code;

    float range_1;            /* ranges to the nav stations/
    float range_2;
    float range_3;
    float range_4;

/* #define nav_telemetry.latitude *((double)&nav_telemetry.navEasting) */
/* re-use easting and northing variable space for latitude.            */
/* If a system collects XY data pairs,                                 */
/* then the navEasting and navNorthing fields would been commented and */
/* set to floats.                                                      */

    /*float navEasting;       /* (x) in meters */ 
    /*float navNorthing;      /* (y) in meters */ 
    double navEasting;        /* USGS uses lat & lon */

    float navDepth;           /* (z) in meters */

    float navRMS;             /* root mean square -- quality factor of nav solution */
    float navFishHeading;     /* degrees */
    float navFishSpeed;       /* knots */
    float navShipGyro;        /* degrees */

    DWORD navFixNumber;       /* sequential value */

    double navLongitude;      /* double precision */

    BYTE spare6[2];           /* alphanumeric */

    BYTE navFixHour;
    BYTE navFixMinute;
    BYTE navFixSeconds;
    BYTE navSpare;

    WORD  julianDay;  /* cable out */
    WORD  layback;

};

Return to the data page

Return to USGS Cruise SEAX 96004 home page