/*--------------------------------------------------------------------------*/ /* kwhd1.c */ /*--------------------------------------------------------------------------*/ /* kwhd1.c 1st half: master header formatter file for DOS programs */ /* 6/10/86 1.00 change #include to proper .H file; before call to decodeheader1() do hfp = fopen(hfpname,"wt"); after return from decodeheader2() do fclose(hfp); */ /* for KWPARD - edit out all 'ro' items #define HEADER == FALSE in kwpard.h */ /* 6/11/96 change modem_rw.cellStartTime[] from 2 to 5 (kwhd2.c) make selected channels condition on HEADER or PARMS */ /* used by kwpard, kw2asc, kwrc, kwphf */ /* HEADER == FALSE, TRUE, TRUE, TRUE */ /* not used by kwtc, kwtrig, kwntp, kwsum, kw2cnts, or kw2suds, kw2v1 */ /* 6/18/96 battery: added 'Not Charging' */ /* 6/19/96 make all formatted headers the same, master in \kwsup\heads */ /* 6/24/96 fix bug in ro.channels: maxpeak, @, minpeak, @, mean, aqoffset */ /* not treated as physical (pixed place) items, stored as logical, ie. if recording ch 3,5,7, info in index 0,1,2, not 2,4,6 */ /* 7/2/96 add default 'Unknown(%d)' to sensor type */ /* 7/10/96 expand stream.filterflag when !HEADER (for kwpard only) */ /* add array propagation window - stream_rw_parms.apw */ /* add show sps when !HEADER */ /* add primary/secondary storage */ /* 9/19/96 merged vhf1/2.c into kwhd1/2.c */ /* 3/17/97 FIX: MAX & MIN peak time offsets hard coded to 0.005 */ /* 3/29/97 ADD: 1.40 K2 & 1/50 MTW */ /* 3/30/97 ADD: Seismological Parms & Serial Data Stream Parms */ #include "kw2asc.h" /* kw2asc.h, kwphf.h, kwpard.h, kwrc.h, qlca.h */ /* #include #include */ // Decode and write K2 header file to disk // Header-Write command void decodeheader1(void) { int i,j,k; // indexii char tempstr[90]; char string1[80]; char by,by1,hb; short wd; int hi,hi1,hi2,hi3; short bat; unsigned int hw1,hw2; unsigned short us; long lw,lwa,lwb; unsigned long ul,templ,chanmask; unsigned long ulmask, ulsave; float x,gs; float hr; float si; unsigned char uc; int code[MAX_CHANNELS],cd; struct ffblk ffblk; unsigned int d1,d2,d3,t1,t2,t3; // already have this! // headver = swap2(head.roParms.headerVersion); // ver = K2100, K2110, k2130, k2140 or MTW120, MTW150 // file, hfp, already open // headtype = K2 or MTW // setup control for loops k = chanct; si = (float)k; si = si/3.0; // want 0 , 1, 2 or 3 row = 0; if (si > 1.0) row = 1; if (si > 2.0) row = 2; if (si > 3.0) row = 3; if (si > 4.0) row = 4; if (si > 5.0) row = 5; if (si > 6.0) row = 6; fprintf(hfp,"\n"); findfirst(infname,&ffblk,0); d1 = (unsigned int)ffblk.ff_fdate & 0x001f; // day d2 = (unsigned int)ffblk.ff_fdate & 0x01e0; d2 = d2 >> 5; // month d3 = (unsigned int)ffblk.ff_fdate & 0xfe00; d3 = 1980 + (d3 >> 9); // year t1 = (unsigned int)ffblk.ff_ftime & 0x001f; t1 = t1 << 1; // seconds -- not used t2 = (unsigned int)ffblk.ff_ftime & 0x07e0; t2 = t2 >> 5; // minutes t3 = (unsigned int)ffblk.ff_ftime & 0xf800; t3 = t3 >> 11; // hours fprintf(hfp,"KW2ASC: %s %02d/%02d/%d %02d:%02d \n",infname,d2,d1,d3,t3,t2); /* KW2ASC, KWPHF, KWPARD, KWRC, QLCA */ if ( headtype == MTW ) us = swap2(mwhead.rwParms.misc.serialNumber); else us = swap2(k2head.rwParms.misc.serialNumber); if (headtype == MTW) fprintf(hfp,"Altus Mt.Whitney "); else fprintf(hfp,"Altus K2 "); fprintf(hfp,"Header, Version. %3.2f, S/N %d",(float)headver*0.01,us); fprintf(hfp,"\n"); if ( headtype == MTW ) strcpy(tempstr,mwhead.rwParms.misc.stnID); else strcpy(tempstr,k2head.rwParms.misc.stnID); fprintf(hfp," Stn: %s",tempstr); if ( headtype == MTW ) // added 5/21/96 strcpy(tempstr,mwhead.rwParms.misc.siteID); else strcpy(tempstr,k2head.rwParms.misc.siteID); fprintf(hfp," Site: %s",tempstr); #if HEADER // not used for kwpard if ( headtype == MTW ) wd = swap2(mwhead.roParms.stream.flags); else wd = swap2(k2head.roParms.stream.flags); if ((wd & 0x0003) == 1) fprintf(hfp," Functional Test"); if ((wd & 0x0003) == 3) fprintf(hfp," Sensor Response Test"); // added 5/21/96 if ((wd & 0x0004) == 4) fprintf(hfp," Trigger Data File"); // added 5/30/96 #endif fprintf(hfp,"\n"); #if HEADER // not used for kwpard if ( headtype == MTW ) us = swap2(mwhead.roParms.misc.maxChannels); else us = swap2(k2head.roParms.misc.maxChannels); fprintf(hfp," %d channel unit,",us); #endif if ( headtype == MTW ) us = swap2(mwhead.rwParms.misc.nchannels); else us = swap2(k2head.rwParms.misc.nchannels); fprintf(hfp," %d channel(s) selected: ",us); #if HEADER for (i = 0; i > 1; } fprintf(hfp,"\n"); #endif fprintf(hfp,"Comment: "); if ( headtype == MTW ) strcpy(tempstr,mwhead.rwParms.misc.comment); else strcpy(tempstr,k2head.rwParms.misc.comment); fprintf(hfp,tempstr); fprintf(hfp,"\n"); fprintf(hfp,"UserCodes: "); // added 5/21/96 for (i = 0; i < 4; i++) { if ( headtype == MTW ) wd = mwhead.rwParms.misc.userCodes[i]; else wd = k2head.rwParms.misc.userCodes[i]; fprintf(hfp," %d",wd); } fprintf(hfp,"\n"); fprintf(hfp,"\n"); #if HEADER // not used for kwpard if ( headtype == MTW ) bat = swap2(mwhead.roParms.misc.batteryVoltage); // short, voltage * 10 else bat = swap2(k2head.roParms.misc.batteryVoltage); // short, voltage * 10 x = bat * 1.0; x = x / 10.0; if (headver == K2100) fprintf(hfp,"Main battery: %3.2fV",x); if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { hb = k2head.rwParms.misc.minBatteryVoltage; hr = ((float) hb) * 0.1; if (x < 0.0) { x = x * -1.0; // make positive fprintf(hfp,"Main battery: %3.2fV, charging, minimum alarm voltage: %3.1fV",x,hr); } else // mtw fprintf (hfp,"Main battery: %3.2fV, Not Charging, minimum alarm voltage: %3.1fV",x,hr); } // if headver K2110 if (headtype == MTW) { hb = mwhead.rwParms.misc.minBatteryVoltage; hr = ((float) hb) * 0.1; if (x < 0.0) { x = x * -1.0; // make positive fprintf(hfp,"Main battery: %3.2fV, charging, minimum alarm voltage: %3.1fV",x,hr); } else fprintf (hfp,"Main battery: %3.2fV, Not Charging, minimum alarm voltage: %3.1fV",x,hr); } // if headver mtw fprintf(hfp,"\n"); #else if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { hb = k2head.rwParms.misc.minBatteryVoltage; hr = ((float) hb) * 0.1; fprintf(hfp,"Minimum alarm voltage: %3.1fV",hr); } // if headver K2 if (headtype == MTW) { hb = mwhead.rwParms.misc.minBatteryVoltage; hr = ((float) hb) * 0.1; fprintf(hfp,"Minimum alarm voltage: %3.1fV",hr); } // if headver mtwxxx fprintf(hfp,"\n"); #endif #if HEADER // not used for kwpard if ( headtype == MTW ) { fprintf(hfp," %d bit A/D",mwhead.roParms.misc.a2dBits); wd = swap2(mwhead.roParms.timing.acqDelay); } else { fprintf(hfp," %d bit A/D",k2head.roParms.misc.a2dBits); wd = swap2(k2head.roParms.timing.acqDelay); } fprintf(hfp," with group delay: %d msec",wd); fprintf(hfp,"\n"); if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { wd = swap2(k2head.roParms.misc.temperature); hr = (float)wd * 0.1; fprintf(hfp,"Temperature: %4.1f deg.C",hr); fprintf(hfp,"\n"); } if (headtype == MTW) { wd = swap2(mwhead.roParms.misc.temperature); hr = (float)wd * 0.1; fprintf(hfp,"Temperature: %4.1f deg.C",hr); fprintf(hfp,"\n"); } fprintf(hfp,"\n"); if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { hb = k2head.roParms.misc.restartSource; fprintf(hfp,"Restart Source(s):\n"); if ((hb& 0xFF) == 0x00) fprintf(hfp," None Known.\n"); if ((hb& 0x01) == 0x01) fprintf(hfp," Power switch.\n"); if ((hb& 0x02) == 0x02) fprintf(hfp," User command.\n"); if ((hb& 0x04) == 0x04) fprintf(hfp," Software watchdog.\n"); if ((hb& 0x08) == 0x08) fprintf(hfp," DSP failure.\n"); if ((hb& 0x10) == 0x10) fprintf(hfp," Battery failure.\n"); if ((hb& 0x20) == 0x20) fprintf(hfp," Memory failure.\n"); fprintf(hfp,"\n"); hb = k2head.roParms.misc.flags; fprintf(hfp,"System Error(s):\n"); if ((hb& 0xFF) == 0x00) fprintf(hfp," None Known.\n"); if ((hb& 0x01) == 0x01) fprintf(hfp," DSP system error.\n"); fprintf(hfp,"\n"); } // if headver == K2 if (headtype == MTW) { hb = mwhead.roParms.misc.restartSource; fprintf(hfp,"Restart Source(s):\n"); if ((hb& 0xFF) == 0x00) fprintf(hfp," None Known.\n"); if ((hb& 0x01) == 0x01) fprintf(hfp," Power switch.\n"); if ((hb& 0x02) == 0x02) fprintf(hfp," User command.\n"); if ((hb& 0x04) == 0x04) fprintf(hfp," Software watchdog.\n"); if ((hb& 0x08) == 0x08) fprintf(hfp," DSP failure.\n"); if ((hb& 0x10) == 0x10) fprintf(hfp," Battery failure.\n"); if ((hb& 0x20) == 0x20) fprintf(hfp," Memory failure.\n"); fprintf(hfp,"\n"); hb = mwhead.roParms.misc.flags; fprintf(hfp,"System Error(s):\n"); if ((hb& 0xFF) == 0x00) fprintf(hfp," None Known.\n"); if ((hb& 0x01) == 0x01) fprintf(hfp," DSP system error.\n"); fprintf(hfp,"\n"); } // if headtype == MTW fprintf(hfp,"Altus Time Source: "); if ( headtype == MTW ) uc = mwhead.roParms.timing.clockSource; else uc = k2head.roParms.timing.clockSource; if (uc == 0) fprintf(hfp,"RTC from cold start."); if (uc == 1) fprintf(hfp,"Keyboard."); if (uc == 2) fprintf(hfp,"Synchronized with external reference pulse."); if (uc == 3) fprintf(hfp,"Internal GPS Receiver."); fprintf(hfp,"\n"); // ver 1.10 Msec taken care of when time first decoded. fprintf(hfp,"Event Start Time: %s",starttime); fprintf(hfp,"\n"); fprintf(hfp,"Event Trigger Time: %s",trigtime); fprintf(hfp,"\n"); fprintf(hfp,"\n"); fprintf(hfp,"Samples per second: %d",sps); fprintf(hfp,"\n"); if (headver == K2100) { lw = swap4i(k2head.roParms.stream.duration); // 1/10 second frames hr = (float)((float)lw * 0.1); fprintf(hfp,"Duration: %6.3f seconds, %d frames.", hr, lw); } if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { lwa = swap4i(k2head.roParms.stream.duration); // variable time frames lwb = swap4i(k2head.roParms.stream.nscans); hr = (float)((float)lwb * ((float)1/sps)); // 1/sps fprintf(hfp,"Duration: %6.3f seconds, %d frames",hr,lwa); hb = k2head.rwParms.stream.filterFlag; if ((hb & 0x01) == 0x01) fprintf(hfp," Filtered Data"); if ((hb & 0x02) == 0x02) fprintf(hfp," Auto FT after event"); if ((hb & 0x04) == 0x04) fprintf(hfp," Data compressed"); } if (headtype == MTW) { lwa = swap4i(mwhead.roParms.stream.duration); // variable time frames lwb = swap4i(mwhead.roParms.stream.nscans); hr = (float)((float)lwb * ((float)1/sps)); // 1/sps fprintf(hfp,"Duration: %6.3f seconds, %d frames",hr,lwa); hb = mwhead.rwParms.stream.filterFlag; if ((hb & 0x01) == 0x01) fprintf(hfp," Filtered Data"); if ((hb & 0x02) == 0x02) fprintf(hfp," Auto FT after event"); if ((hb & 0x04) == 0x04) fprintf(hfp," Data compressed"); } fprintf(hfp,"\n"); #else // ! HEADER fprintf(hfp,"Samples per second: %d",sps); fprintf(hfp,"\n"); if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { hb = k2head.rwParms.stream.filterFlag; if ((hb & 0x01) == 0x01) fprintf(hfp," Filtered Data"); if ((hb & 0x02) == 0x02) fprintf(hfp," Auto FT after event"); else fprintf(hfp," No Auto FT after event"); if ((hb & 0x04) == 0x04) fprintf(hfp," Data compressed"); } if (headtype == MTW) { hb = mwhead.rwParms.stream.filterFlag; if ((hb & 0x01) == 0x01) fprintf(hfp," Filtered Data"); if ((hb & 0x02) == 0x02) fprintf(hfp," Auto FT after event"); else fprintf(hfp," No Auto FT after event"); if ((hb & 0x04) == 0x04) fprintf(hfp," Data compressed"); } fprintf(hfp,"\n"); #endif fprintf(hfp,"Pre-event: "); if ( headtype == MTW ) us = swap2(mwhead.rwParms.stream.preEvent); else us = swap2(k2head.rwParms.stream.preEvent); fprintf(hfp," %d seconds.",us); fprintf(hfp,"\n"); fprintf(hfp,"Minimum runtime: "); if ( headtype == MTW ) us = swap2(mwhead.rwParms.stream.minRunTime); else us = swap2(k2head.rwParms.stream.minRunTime); fprintf(hfp," %d seconds.",us); fprintf(hfp,"\n"); fprintf(hfp,"Post event: "); if ( headtype == MTW ) us = swap2(mwhead.rwParms.stream.postEvent); else us = swap2(k2head.rwParms.stream.postEvent); fprintf(hfp," %d seconds.",us); fprintf(hfp,"\n"); fprintf(hfp,"Array Propagation Window: "); // added 7/10/96 if ( headtype == MTW ) us = swap2(mwhead.rwParms.stream.apw); else us = swap2(k2head.rwParms.stream.apw); fprintf(hfp," %d seconds.",us); fprintf(hfp,"\n"); fprintf(hfp,"Storage: Primary "); // added 7/10/96 if ( headtype == MTW ) uc = (mwhead.rwParms.stream.primaryStorage); else uc = (k2head.rwParms.stream.primaryStorage); uc = uc + 0x41; // 0 = A, 1 = B fprintf(hfp," %c:, ",uc); fprintf(hfp,"Secondary "); // added 7/10/96 if ( headtype == MTW ) uc = (mwhead.rwParms.stream.secondaryStorage); else uc = (k2head.rwParms.stream.secondaryStorage); uc = uc + 0x41; // 0 = A, 1 = B fprintf(hfp," %c: ",uc); fprintf(hfp,"\n"); fprintf(hfp,"\n"); if ( headtype == MTW ) by = mwhead.rwParms.misc.cutlerCode; else by = k2head.rwParms.misc.cutlerCode; if (headver >= MTW120) { if ( headtype == MTW ) by1 = mwhead.rwParms.misc.cutler_protocol; else by1 = k2head.rwParms.misc.cutler_protocol; if (by1 == 0) // USGS DFS protocol { if (by == 0) fprintf(hfp,"Digital Field Station OFF."); if ((by == 1) || (by == 2) || (by == 3)) fprintf(hfp,"Digital Field Station ON: "); if (by == 1) fprintf(hfp," 4800 baud, 100 sps."); if (by == 2) fprintf(hfp," 9600 baud, 100 sps."); if (by == 3) fprintf(hfp," 19200 baud, 100 sps."); if ((by < 0) || (by > 3)) fprintf(hfp,"Digital Field Station not defined"); } // USGS DFS else { if (by1 == 1) // KMI DFS protocol { if (by == 0) fprintf(hfp,"KMI Digital Port OFF."); else { fprintf(hfp,"KMI Digital Port ON: "); if (by == 1) fprintf(hfp," 4800 baud\n"); if (by == 2) fprintf(hfp," 9600 baud\n"); if (by == 3) fprintf(hfp," 19200 baud\n"); if (by == 4) fprintf(hfp," 38400 baud\n"); if (by == 5) fprintf(hfp," 57600 baud\n"); if ((by <=0) || (by > 5)) fprintf(hfp," baud rate undefined\n"); if ( headtype == MTW ) by = mwhead.rwParms.misc.cutler_irig_type; else by = k2head.rwParms.misc.cutler_irig_type; switch (by) { case 0: fprintf(hfp," DFS IRIG B\n"); break; case 1: fprintf(hfp," DFS IRIG E\n"); break; case 2: fprintf(hfp," DFS IRIG H\n"); break; default: fprintf(hfp," DFS IRIG undefined\n"); break; } // switch: by= irig type if ( headtype == MTW ) by = mwhead.rwParms.misc.cutler_decimation; else by = k2head.rwParms.misc.cutler_decimation; if ((by==0) || (by==1) || (by==2) || (by==3) || (by==4) || (by==5)) { fprintf(hfp," Decimation = "); if (by==0) fprintf(hfp," 1:1\n"); if (by==1) fprintf(hfp," 2:1\n"); if (by==2) fprintf(hfp," 4:1\n"); if (by==3) fprintf(hfp," 5:1\n"); if (by==4) fprintf(hfp," 10:1\n"); if (by==5) fprintf(hfp," 20:1\n"); } else fprintf(hfp," Decimation = undefined\n",by); if ( headtype == MTW ) ul = swap4i(mwhead.rwParms.misc.cutler_bitmap); else ul = swap4i(k2head.rwParms.misc.cutler_bitmap); if (ul != 0) { fprintf(hfp," DFS channels: "); ulmask = 0x00000001; // mask for channels ulsave = ul; for (i= 0; i < MAX_CHANNELS; i++) { ul = ul & ulmask; if (ul != 0) fprintf(hfp," %d", i +1); ulmask = ulmask << 1; ul = ulsave; } fprintf(hfp,"\n"); } // if cutler_bitmap != 0 else fprintf(hfp," DFS channel bitmap undefined\n"); } // kmi dfs ON } else fprintf(hfp,"Digital Field Station undefined"); } // KMI DFS } else { // header 1.00 or 1.10 if (by == 0) fprintf(hfp,"Digital Field Station OFF."); if ((by == 1) || (by == 2) || (by == 3)) fprintf(hfp,"Digital Field Station ON, decimation "); if (by == 1) fprintf(hfp,"4, 4800 baud, 50 sps."); if (by == 2) fprintf(hfp,"2, 9600 baud, 100 sps."); if (by == 3) fprintf(hfp,"1, 19200 baud, 200 sps."); } // header < 120 fprintf(hfp,"\n"); fprintf(hfp,"\n"); #if HEADER // not used for kwpard fprintf(hfp,"Program versions: "); if ( headtype == MTW ) hi = swap2(mwhead.roParms.misc.sysBlkVersion); else hi = swap2(k2head.roParms.misc.sysBlkVersion); hr = (float)hi * 0.01; fprintf(hfp," sysBlk %3.2f",hr); if ( headtype == MTW ) hi = swap2(mwhead.roParms.misc.bootBlkVersion); else hi = swap2(k2head.roParms.misc.bootBlkVersion); hr = (float)hi * 0.01; fprintf(hfp,", bootBlk %3.2f,",hr); fprintf(hfp,"\n"); if ( headtype == MTW ) hi = swap2(mwhead.roParms.misc.appBlkVersion); else hi = swap2(k2head.roParms.misc.appBlkVersion); hr = (float)hi * 0.01; fprintf(hfp," appBlk %3.2f",hr); if ( headtype == MTW ) hi = swap2(mwhead.roParms.misc.dspBlkVersion); else hi = swap2(k2head.roParms.misc.dspBlkVersion); hr = (float)hi * 0.01; fprintf(hfp,", dspBlk %3.2f",hr); fprintf(hfp,"\n"); fprintf(hfp,"\n"); #endif if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.misc.latitude); else hr = swap4r(k2head.rwParms.misc.latitude); fprintf(hfp,"Instrument latitude: %f Degrees North",hr); fprintf(hfp,"\n"); if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.misc.longitude); else hr = swap4r(k2head.rwParms.misc.longitude); fprintf(hfp,"Instrument longitude: %f Degrees East",hr); fprintf(hfp,"\n"); if ( headtype == MTW ) wd = swap2(mwhead.rwParms.misc.elevation); // short else wd = swap2(k2head.rwParms.misc.elevation); // short fprintf(hfp,"Instrument elevation: %d Meters relative sea level.",wd); fprintf(hfp,"\n"); fprintf(hfp,"\n"); #if HEADER // not used for kwpard if ((headver == K2110) || (headver == K2130) || (headver == K2140)) { hi = swap2(k2head.roParms.timing.gpsLatitude); // short * 100 hr = (float) (hi * 0.01); fprintf(hfp,"GPS latitude: %5.2f Degrees North", hr); fprintf(hfp,"\n"); hi = swap2(k2head.roParms.timing.gpsLongitude); // short * 100 hr = (float) (hi * 0.01); fprintf(hfp,"GPS longitude: %5.2f Degrees East", hr); fprintf(hfp,"\n"); wd = swap2(k2head.roParms.timing.gpsAltitude); // short fprintf(hfp,"GPS altitude: %d Meters relative sea level.",wd); fprintf(hfp,"\n"); } // if K2 if (headtype == MTW) { hi = swap2(mwhead.roParms.timing.gpsLatitude); // short * 100 hr = (float) (hi * 0.01); fprintf(hfp,"GPS latitude: %5.2f Degrees North", hr); fprintf(hfp,"\n"); hi = swap2(mwhead.roParms.timing.gpsLongitude); // short * 100 hr = (float) (hi * 0.01); fprintf(hfp,"GPS longitude: %5.2f Degrees East", hr); fprintf(hfp,"\n"); wd = swap2(mwhead.roParms.timing.gpsAltitude); // short fprintf(hfp,"GPS altitude: %d Meters relative sea level.",wd); fprintf(hfp,"\n"); } // if K2110 fprintf(hfp,"\n"); #endif #if HEADER // not used for kwpard // ro.channel stuff in logical order, ie. ch 3 5 7 @ index 0,1,2 not 2,4,6 // start of channel stuff that uses loops for (j = 0; j <= row; j++) // ROWS { fprintf(hfp,"Ch "); for (k = 0; k < 3; k ++) // COLUMNS { if (chidx[(j*3)+k] != 0) // valid channel { fprintf(hfp,"%2d",chidx[(j*3)+k]); if ((k == 0) || (k == 1)) { // if ((chidx[(j*3)+k+1] >=1) && (chidx[(j*3)+k+1] <=9)) fprintf(hfp," "); // 14 spaces // else // fprintf(hfp," "); // 14 spaces } // k == 0,1 } // if chidx active } // for k fprintf(hfp,"\n"); fprintf(hfp," MaxPeak: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].maxPeak); else lw = swap4i(k2head.roParms.channel[(j*3)+k].maxPeak); gs = ad_val(lw); if ((gs < -3.0) || (gs > 3.0)) gs = 0.0; fprintf(hfp,"%11.7fV",gs); if ( (k == 0) || (k == 1 )) fprintf(hfp," "); // 4 spaces } // if channel } fprintf(hfp,"\n"); fprintf(hfp," at seconds: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].maxPeakOffset); else lw = swap4i(k2head.roParms.channel[(j*3)+k].maxPeakOffset); hr = lw * (float)(1.0/sps); // fixed 3/17/97 was 0.005 fprintf(hfp," %11.3f",hr); if ( (k == 0) || (k == 1) ) fprintf(hfp," "); // 4 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," MinPeak: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].minPeak); else lw = swap4i(k2head.roParms.channel[(j*3)+k].minPeak); gs = ad_val(lw); if ((gs < -3.0) || (gs > 3.0)) gs = 0.0; fprintf(hfp,"%11.7fV",gs); if ( (k == 0) || (k == 1) ) fprintf(hfp," "); // 4 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," at seconds: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].minPeakOffset); else lw = swap4i(k2head.roParms.channel[(j*3)+k].minPeakOffset); hr = lw * (float)(1.0/sps); // fixed 3/17/97 was 0.005 fprintf(hfp," %11.3f",hr); if ( (k==0) || (k ==1) ) fprintf(hfp," "); // 4 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Mean: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].mean); else lw = swap4i(k2head.roParms.channel[(j*3)+k].mean); gs = ad_val(lw); fprintf(hfp,"%10.7fV",gs); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 5 spaces } // if have chan } fprintf(hfp,"\n"); if (headver >= K2110) { fprintf(hfp," AcqOffset: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) lw = swap4i(mwhead.roParms.channel[(j*3)+k].aqOffset); else lw = swap4i(k2head.roParms.channel[(j*3)+k].aqOffset); gs = ad_val(lw); if ((gs < -3.0) || (gs > 3.0)) gs = 0.0; fprintf(hfp,"%12.7fV",gs); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 3 spaces } // if have chan } // for fprintf(hfp,"\n"); } // if headver >= K2110 fprintf(hfp,"\n"); // blank line end of set } // for j #endif for (j = 0; j <= row; j++) // ROWS { fprintf(hfp,"Ch "); for (k = 0; k < 3; k++) // COLUMNS { if (chidx[(j*3)+k] !=0) { fprintf(hfp,"%2d",chidx[(j*3)+k]); if ((k==0) || (k==1)) { // if ((chidx[(j*3)+k+1] >= 1) && (chidx[(j*3)+k+1] <= 9)) fprintf(hfp," "); // 15 spaces // else // fprintf(hfp," "); // 15 spaces } } // for chidx } // for k fprintf(hfp,"\n"); fprintf(hfp," Chan ID: "); // 16 chars for (k = 0;k < 3; k ++) { if (chidx[(j*3)+k] != 0) { if (headtype == MTW) strcpy(tempstr,mwhead.rwParms.channel[chidx[(j*3)+k]-1].id); else strcpy(tempstr,k2head.rwParms.channel[chidx[(j*3)+k]-1].id); if (strlen(tempstr) == 3) { strcpy(string1," "); // 1 space strcat(string1,tempstr); strcpy(tempstr,string1); } if (strlen(tempstr) == 2) { strcpy(string1," "); // 2 spaces strcat(string1,tempstr); strcpy(tempstr,string1); } if (strlen(tempstr) == 1) { strcpy(string1," "); // 3 spaces strcat(string1,tempstr); strcpy(tempstr,string1); } if (strlen(tempstr) == NULL) strcpy(tempstr,"----"); fprintf(hfp,"%s,",tempstr); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 12 spaces } // if have chan } // for k fprintf(hfp,"\n"); fprintf(hfp," Sensors: "); // 16 chars for (k=0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hi1 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].sensorType); else hi1 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].sensorType); code[(j*3)+k] = hi1; // save for Sensitivity below switch (hi1) // 17 spaces { case SENSOR_UNKNOWN: // 0 fprintf(hfp," Unknown (0) "); break; case SENSOR_ACCELERATION: // 1 fprintf(hfp," Acceleration(1) "); break; case SENSOR_VELOCITY: // 2 fprintf(hfp," Velocity(2) "); break; case SENSOR_FBA11: // 10 fprintf(hfp," FBA_11 (10) "); break; case SENSOR_FBA_4G: // 11 4g FBA fprintf(hfp," 4g FBA (11) "); break; case SENSOR_FBA_2G: // 12 2g FBA fprintf(hfp," 2g FBA (12) "); break; case SENSOR_FBA_1G: // 13 1g FBA fprintf(hfp," 1g FBA (13) "); break; case SENSOR_FBA_0_5G: // 14 0.5g FBA fprintf(hfp," 0.5g FBA (14) "); break; case SENSOR_FBA_0_25G: // 15 0.25g FBA fprintf(hfp," 0.25g FBA (15) "); break; case SENSOR_FBA_0_1G: // 16 0.1g FBA fprintf(hfp," 0.1g FBA (15) "); break; case SENSOR_FBA23: // 20 fprintf(hfp," FBA-23 (20) "); break; case SENSOR_WR1: // 30 fprintf(hfp," WR-1 (30) "); break; default: fprintf(hfp," Unknown (%d) ",hi1); break; } // switch (hi1) } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," "); // 16 chars Sensor S/N for (k=0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) { hw1 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].sensorSerialNumber); // low word 8/27/94 hw2 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].sensorSerialNumberExt); // high word } else { hw1 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].sensorSerialNumber); // low word 8/27/94 hw2 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].sensorSerialNumberExt); // high word } ul = (hw2 * 65536) + hw1; fprintf(hfp,"s/n%6u",ul); if ((k==0) || (k==1)) fprintf(hfp," "); // 8 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Displace, N: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hi1 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].north); else hi1 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].north); fprintf(hfp,"%04d,",hi1); if ( (k==0) || (k==1)) fprintf(hfp," "); // 12 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Displace, E: "); for (k=0; k<3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hi2 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].east); else hi2 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].east); fprintf(hfp,"%04d,",hi2); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 12 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Displace, U: "); for (k=0; k <3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hi3 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].up); else hi3 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].up); fprintf(hfp,"%04d,",hi3); if ( (k ==0) || (k==1) ) fprintf(hfp," "); // 12 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Alt,Azi(deg): "); for (k=0;k<3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) { hi1 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].altitude); hi2 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].azimuth); } else { hi1 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].altitude); hi2 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].azimuth); } fprintf(hfp,"%6d, %6d", hi1,hi2); if ( (k==0) || (k==1)) fprintf(hfp," "); // 3 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp,"\n"); // blank line between sets } // for j for (j = 0; j <= row; j++) { fprintf(hfp,"Ch "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] !=0) { fprintf(hfp,"%2d",chidx[(j*3)+k]); if ((k==0) || (k==1)) { // if ((chidx[(j*3)+k+1] >= 1) && (chidx[(j*3)+k+1] <= 9)) fprintf(hfp," "); // 15 spaces // else // fprintf(hfp," "); // 15 spaces } } // for chidx } // for k fprintf(hfp,"\n"); fprintf(hfp," Gain: "); // 15 chars for (k = 0; k < 3;k ++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hi1 = swap2(mwhead.rwParms.channel[chidx[(j*3)+k]-1].gain); else hi1 = swap2(k2head.rwParms.channel[chidx[(j*3)+k]-1].gain); fprintf(hfp,"%d",hi1); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 16 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Fullscale "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.channel[chidx[(j*3)+k]-1].fullscale); else hr = swap4r(k2head.rwParms.channel[chidx[(j*3)+k]-1].fullscale); fprintf(hfp,"%4.2fV",hr); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 12 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Sensitivity: "); for (k = 0; k < 3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.channel[chidx[(j*3)+k]-1].sensitivity); else hr = swap4r(k2head.rwParms.channel[chidx[(j*3)+k]-1].sensitivity); fprintf(hfp,"%5.3f",hr); // 11/3/94 was %4.1g // 3/29/95 was %5.2f cd = code[(j*3)+k]; // label acceleration if ((cd==1) || (cd==10) || (cd==11) || (cd==12) || (cd==13) || (cd==14) || (cd==15) || (cd==16) || (cd==20) ) { if ( (k==0) || (k==1)) fprintf(hfp,"V/g "); // 12 spaces if (k==2) fprintf(hfp,"V/g"); } else { if ( (k==0) || (k==1)) fprintf(hfp," "); // 12 spaces } } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," Damping: "); for (k =0; k < 3; k ++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.channel[chidx[(j*3)+k]-1].damping); else hr = swap4r(k2head.rwParms.channel[chidx[(j*3)+k]-1].damping); fprintf(hfp,"%5.2f",hr); // 3/29/95 was %4.1f if ( (k==0) || (k==1)) fprintf(hfp," "); // 12 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp," NatFreq: "); for (k=0; k <3; k++) { if (chidx[(j*3)+k] != 0) { if ( headtype == MTW ) hr = swap4r(mwhead.rwParms.channel[chidx[(j*3)+k]-1].naturalFrequency); else hr = swap4r(k2head.rwParms.channel[chidx[(j*3)+k]-1].naturalFrequency); fprintf(hfp,"%5.2fHz",hr); if ( (k==0) || (k==1) ) fprintf(hfp," "); // 10 spaces } // if have chan } fprintf(hfp,"\n"); fprintf(hfp,"\n"); // blank line } // for j /* ----------------------------------------------- */ /* THE BALANCE OF THE FORMATTED HEADER CODE IS */ /* IN KWHD2.C */ /* ----------------------------------------------- */ } // decodeheader1() /*--- end kwhd1.c ---------------------------------------------------*/