PRO proc, grp, num, len, offset, istart, istop ;rec = 3 ;grp = 4 ;num = 1 SPAWN, 'ls mcords.rec' + STRING(FORMAT='(I03)',grp) + '.' + STRING(FORMAT='(I04)',num) + '*', txt PRINT, txt OPENR, lun, txt, /GET_LUN POINT_LUN, lun, offset ;find first four headers mcd = ['DE'XB,'AD'XB,'BE'XB,'EF'XB] tmp = BYTARR(4) ind = ULONARR(10) cnt = 0 i = 0L WHILE (cnt LT 10) DO BEGIN POINT_LUN, lun, i+offset READU, lun, tmp IF TOTAL(tmp EQ mcd) EQ 4 THEN BEGIN ind[cnt] = i cnt = cnt + 1 ENDIF i = i + 1 ENDWHILE nbytes = ind[1]-ind[0] POINT_LUN, lun, ind[0]+offset ;determine number of waveforms in the file finfo = FSTAT(lun) nrec = (finfo.size-ind[0])/nbytes ;define template npts = nbytes/2-80-24 ;print, npts temp = REPLICATE({magic:0UL, $ version:0UL, $ seconds:0UL, $ fractions:0UL, $ epri:0UL, $ temp:UINTARR(70), $ wave:UINTARR(npts+24)},len); just do len (really should nrec) readu,lun, temp CLOSE, lun FREE_LUN, lun ;generate reference pulse fsmp = 111.11e6 plen = 10e-6 f0 = 190e6;180e6 f1 = 200e6;210e6 bw = f1-f0 k = bw/plen nt = CEIL(plen*fsmp) tt = (1/fsmp)*MAKE_ARRAY(nt,/INDEX,/FLOAT) ref = HANNING(nt)*EXP(-COMPLEX(0,1)*!DPI*(2.0*f0*tt + k*tt*tt)) pts_wave = LONG(npts+22)/16L ;reformat data (config file specific - 16 waveforms) w00 = swap_endian(temp.wave[00*pts_wave:01*pts_wave-2])-32768.0 w01 = swap_endian(temp.wave[01*pts_wave:02*pts_wave-2])-32768.0 w02 = swap_endian(temp.wave[02*pts_wave:03*pts_wave-2])-32768.0 w03 = swap_endian(temp.wave[03*pts_wave:04*pts_wave-2])-32768.0 w04 = swap_endian(temp.wave[04*pts_wave:05*pts_wave-2])-32768.0 w05 = swap_endian(temp.wave[05*pts_wave:06*pts_wave-2])-32768.0 w06 = swap_endian(temp.wave[06*pts_wave:07*pts_wave-2])-32768.0 w07 = swap_endian(temp.wave[07*pts_wave:08*pts_wave-2])-32768.0 w08 = swap_endian(temp.wave[08*pts_wave:09*pts_wave-2])-32768.0 w09 = swap_endian(temp.wave[09*pts_wave:10*pts_wave-2])-32768.0 w10 = swap_endian(temp.wave[10*pts_wave:11*pts_wave-2])-32768.0 w11 = swap_endian(temp.wave[11*pts_wave:12*pts_wave-2])-32768.0 w12 = swap_endian(temp.wave[12*pts_wave:13*pts_wave-2])-32768.0 w13 = swap_endian(temp.wave[13*pts_wave:14*pts_wave-2])-32768.0 w14 = swap_endian(temp.wave[14*pts_wave:15*pts_wave-2])-32768.0 w15 = swap_endian(temp.wave[15*pts_wave:16*pts_wave-2])-32768.0 ;istart = 400 ;istop = 1300 ;pusle compress x00 = convol(COMPLEX(w00[istart:istop,*]),ref); & PRINT, 00 x01 = convol(COMPLEX(w01[istart:istop,*]),ref); & PRINT, 01 x02 = convol(COMPLEX(w02[istart:istop,*]),ref); & PRINT, 02 x03 = convol(COMPLEX(w03[istart:istop,*]),ref); & PRINT, 03 x04 = convol(COMPLEX(w04[istart:istop,*]),ref); & PRINT, 04 x05 = convol(COMPLEX(w05[istart:istop,*]),ref); & PRINT, 05 x06 = convol(COMPLEX(w06[istart:istop,*]),ref); & PRINT, 06 x07 = convol(COMPLEX(w07[istart:istop,*]),ref); & PRINT, 07 x08 = convol(COMPLEX(w08[istart:istop,*]),ref); & PRINT, 08 x09 = convol(COMPLEX(w09[istart:istop,*]),ref); & PRINT, 09 x10 = convol(COMPLEX(w10[istart:istop,*]),ref); & PRINT, 10 x11 = convol(COMPLEX(w11[istart:istop,*]),ref); & PRINT, 11 x12 = convol(COMPLEX(w12[istart:istop,*]),ref); & PRINT, 12 x13 = convol(COMPLEX(w13[istart:istop,*]),ref); & PRINT, 13 x14 = convol(COMPLEX(w14[istart:istop,*]),ref); & PRINT, 12 x15 = convol(COMPLEX(w15[istart:istop,*]),ref); & PRINT, 13 ;allocate peak value arrays p00 = COMPLEXARR(len) p01 = COMPLEXARR(len) p02 = COMPLEXARR(len) p03 = COMPLEXARR(len) p04 = COMPLEXARR(len) p05 = COMPLEXARR(len) p06 = COMPLEXARR(len) p07 = COMPLEXARR(len) p08 = COMPLEXARR(len) p09 = COMPLEXARR(len) p10 = COMPLEXARR(len) p11 = COMPLEXARR(len) p12 = COMPLEXARR(len) p13 = COMPLEXARR(len) p14 = COMPLEXARR(len) p15 = COMPLEXARR(len) ;find and record peak values of cross channels FOR i0 = 0,len-1 DO BEGIN tmp = MAX(ABS(x01[*,i0]*CONJ(x00[*,i0])),itmp) p00[i0] = x01[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x02[*,i0]*CONJ(x00[*,i0])),itmp) p01[i0] = x02[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x03[*,i0]*CONJ(x00[*,i0])),itmp) p02[i0] = x03[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x04[*,i0]*CONJ(x00[*,i0])),itmp) p03[i0] = x04[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x05[*,i0]*CONJ(x00[*,i0])),itmp) p04[i0] = x05[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x06[*,i0]*CONJ(x00[*,i0])),itmp) p05[i0] = x06[itmp,i0]*CONJ(x00[itmp,i0]) tmp = MAX(ABS(x09[*,i0]*CONJ(x08[*,i0])),itmp) p06[i0] = x09[itmp,i0]*CONJ(x08[itmp,i0]) tmp = MAX(ABS(x10[*,i0]*CONJ(x08[*,i0])),itmp) p07[i0] = x10[itmp,i0]*CONJ(x08[itmp,i0]) tmp = MAX(ABS(x11[*,i0]*CONJ(x08[*,i0])),itmp) p08[i0] = x11[itmp,i0]*CONJ(x08[itmp,i0]) tmp = MAX(ABS(x12[*,i0]*CONJ(x08[*,i0])),itmp) p09[i0] = x12[itmp,i0]*CONJ(x08[itmp,i0]) tmp = MAX(ABS(x13[*,i0]*CONJ(x08[*,i0])),itmp) p10[i0] = x13[itmp,i0]*CONJ(x08[itmp,i0]) tmp = MAX(ABS(x14[*,i0]*CONJ(x08[*,i0])),itmp) p11[i0] = x14[itmp,i0]*CONJ(x08[itmp,i0]) ENDFOR ;save data ;OPENW, out, 'out' + STRING(FORMAT='(I1,I02,".",I04)',rec,grp,num) + '.dat', /GET_LUN ;WRITEU, out, p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13 ;CLOSE, out ;FREE_LUN, out ;smooth data r00 = CONVOL(p00,HANNING(32),/EDGE_TRUNCATE) r01 = CONVOL(p01,HANNING(32),/EDGE_TRUNCATE) r02 = CONVOL(p02,HANNING(32),/EDGE_TRUNCATE) r03 = CONVOL(p03,HANNING(32),/EDGE_TRUNCATE) r04 = CONVOL(p04,HANNING(32),/EDGE_TRUNCATE) r05 = CONVOL(p05,HANNING(32),/EDGE_TRUNCATE) r06 = CONVOL(p06,HANNING(32),/EDGE_TRUNCATE) r07 = CONVOL(p07,HANNING(32),/EDGE_TRUNCATE) r08 = CONVOL(p08,HANNING(32),/EDGE_TRUNCATE) r09 = CONVOL(p09,HANNING(32),/EDGE_TRUNCATE) r10 = CONVOL(p10,HANNING(32),/EDGE_TRUNCATE) r11 = CONVOL(p11,HANNING(32),/EDGE_TRUNCATE) ;average cross channels v00 = ATAN(MEAN(p00),/PHASE) v01 = ATAN(MEAN(p01),/PHASE) v02 = ATAN(MEAN(p02),/PHASE) v03 = ATAN(MEAN(p03),/PHASE) v04 = ATAN(MEAN(p04),/PHASE) v05 = ATAN(MEAN(p05),/PHASE) v06 = ATAN(MEAN(p06),/PHASE) v07 = ATAN(MEAN(p07),/PHASE) v08 = ATAN(MEAN(p08),/PHASE) v09 = ATAN(MEAN(p09),/PHASE) v10 = ATAN(MEAN(p10),/PHASE) v11 = ATAN(MEAN(p11),/PHASE) ;plot results WINDOW,0,XS=800,YS=600,RETAIN=2 PLOT, ATAN(r00,/PHASE), YRANGE=[-4,4] PLOT, ATAN(r01,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L PLOT, ATAN(r02,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L PLOT, ATAN(r03,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L + 255L PLOT, ATAN(r04,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L PLOT, ATAN(r05,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L + 255L ;PLOT, ATAN(r06,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L + 255L*256L XYOUTS, 100, 60, '000: ' + STRING(FORMAT='(D6.3)',v00), CHARSIZE=1.5, /DEVICE XYOUTS, 100, 80, '060: ' + STRING(FORMAT='(D6.3)',v01), CHARSIZE=1.5, /DEVICE, COLOR=255L XYOUTS, 300, 60, '120: ' + STRING(FORMAT='(D6.3)',v02), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L XYOUTS, 300, 80, '180: ' + STRING(FORMAT='(D6.3)',v03), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L + 255L XYOUTS, 500, 60, '240: ' + STRING(FORMAT='(D6.3)',v04), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L*256L XYOUTS, 500, 80, '300: ' + STRING(FORMAT='(D6.3)',v05), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L*256L + 255L WINDOW,1,XS=800,YS=600,RETAIN=2 PLOT, ATAN(r06,/PHASE), YRANGE=[-4,4] PLOT, ATAN(r07,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L PLOT, ATAN(r08,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L PLOT, ATAN(r09,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L + 255L PLOT, ATAN(r10,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L PLOT, ATAN(r11,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L + 255L ;PLOT, ATAN(r06,/PHASE), YRANGE=[-4,4], /NOERASE, COLOR=255L*256L*256L + 255L*256L XYOUTS, 100, 60, '000: ' + STRING(FORMAT='(D6.3)',v06), CHARSIZE=1.5, /DEVICE XYOUTS, 100, 80, '060: ' + STRING(FORMAT='(D6.3)',v07), CHARSIZE=1.5, /DEVICE, COLOR=255L XYOUTS, 300, 60, '120: ' + STRING(FORMAT='(D6.3)',v08), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L XYOUTS, 300, 80, '180: ' + STRING(FORMAT='(D6.3)',v09), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L + 255L XYOUTS, 500, 60, '240: ' + STRING(FORMAT='(D6.3)',v10), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L*256L XYOUTS, 500, 80, '300: ' + STRING(FORMAT='(D6.3)',v11), CHARSIZE=1.5, /DEVICE, COLOR=255L*256L*256L + 255L ;pjpg, 'img'+STRING(FORMAT='(I1,I02,".",I04)',rec,grp,num)+'197.jpg' ;uncomment if you want to re-read results ; p00 = COMPLEXARR(len) ; p01 = COMPLEXARR(len) ; p02 = COMPLEXARR(len) ; p03 = COMPLEXARR(len) ; p04 = COMPLEXARR(len) ; p05 = COMPLEXARR(len) ; p06 = COMPLEXARR(len) ; p07 = COMPLEXARR(len) ; p08 = COMPLEXARR(len) ; p09 = COMPLEXARR(len) ; p10 = COMPLEXARR(len) ; p11 = COMPLEXARR(len) ; p12 = COMPLEXARR(len) ; p13 = COMPLEXARR(len) ; ;OPENR, out, 'out004.0003.dat', /GET_LUN ;READU, out, p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13 ;CLOSE, out ;FREE_LUN, out ; ;v00 = ATAN(MEAN(p00),/PHASE) ;v01 = ATAN(MEAN(p01),/PHASE) ;v02 = ATAN(MEAN(p02),/PHASE) ;v03 = ATAN(MEAN(p03),/PHASE)` ;v04 = ATAN(MEAN(p04),/PHASE) ;v05 = ATAN(MEAN(p05),/PHASE) ;v06 = ATAN(MEAN(p06),/PHASE) ;v07 = ATAN(MEAN(p07),/PHASE) ;v08 = ATAN(MEAN(p08),/PHASE) ;v09 = ATAN(MEAN(p09),/PHASE) ;v10 = ATAN(MEAN(p10),/PHASE) ;v11 = ATAN(MEAN(p11),/PHASE) ;v12 = ATAN(MEAN(p12),/PHASE) ;v13 = ATAN(MEAN(p13),/PHASE) ;print, v00,v01,v02,v03,v04,v05,v06,v07,v08,v09,v10,v11,v12,v13 xxx END