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