*-- Author : Stephen J. Maxfield SUBROUTINE FPKANL *D: FPKANL.......SM. Add options for left/right separation **: FPKANL 40000 SM. New routine for calibration checking. **---------------------------------------------------------------------- * Does not work in multi-processor environment. * * PARAMETER (NBIN=200) PARAMETER (NBLOR=40) PARAMETER (MXSIDE=1) *KEEP,BCS. INTEGER NHROW,NHCOL,NHLEN PARAMETER (NHROW = 2, NHCOL = 1, NHLEN=2) INTEGER NBOSIW PARAMETER (NBOSIW=1000000) INTEGER IW(NBOSIW) REAL RW(NBOSIW) COMMON /BCS/ IW EQUIVALENCE (RW(1),IW(1)) SAVE /BCS/ *KEND. COMMON/FPKSTA/ITOTAN,IRUNLA DIMENSION CVEC(6) DIMENSION IOUT(4) DIMENSION FOUT(5) DIMENSION PDAT(5,5) DIMENSION PAR(2), PMIN(2), PMAX(2), EPAR(2), COV(3) DIMENSION XST(4), YST(4) DIMENSION AVEC(8) DIMENSION NPEAK(3) DIMENSION NEMAX(3) LOGICAL EX CHARACTER*8 UID CHARACTER*23 DSNINQ /'/H1TFWD.H01.FPOKER.SUML'/ CHARACTER*22 STOREL /'H1TFWD.H01.FPOKER.SUML'/ CHARACTER*72 PARMFO & /'OPEN FILE2 UNIT=2 FILE="H1TFWD.H01.FPOKER.SUML" & ACTION=MODIFY RECL=23400'/ CHARACTER*72 PARMFN & /'OPEN FILE2 UNIT=2 FILE="H1TFWD.H01.FPOKER.SUML" & ACTION=WRITE RECL=23400'/ CHARACTER*8 NAMES1(8),NAMES2(8),NAMES3(8) DATA NEMAX/20, 10, 10/ DATA LOMAX/20/ DATA NAMES1/ + 'Run_numb','Events ', + 'Vmean ','dVmean ', + 'Vf0r8 ','dVf0r8 ', + 'intercep','dinterc '/ DATA NAMES2/ + 'Vplus ','dVplus ', + 'Splus ','dSplus ', + 'Intplus ','dIplus ', + 'Nopplus ','Chiplus '/ DATA NAMES3/ + 'Vminus ','dVminus ', + 'Sminus ','dSminus ', + 'Intminus','dIminus', + 'Nopminus','Chiminus'/ * *-------------------------------------------------------------------- CALL SAREA('FPOKE', 0) * Book histograms... Do KSIDE = 1, MXSIDE CALL BVEC(KSIDE*100, 0, 6) CALL STEXT(KSIDE*100, 4,'D-time (scaled) vs. Dist(predicted)') Enddo CALL BVEC( 12000, 0, 6) CALL STEXT(12000, 4,'DeltaR vs. Drift predicted)') * Analyse the data. * ------- --- ---- * Analysis of histogram results. Write(6,*) ' Fpkanl >> Total Events:', ITOTAN * Do peakparm analysis of the pred drift histograms... DO KSIDE = 1, MXSIDE NPEAK(KSIDE) = 0 DO KBIN = 1, NBIN DLO = -5. + (KBIN-1) * 0.05 DHI = DLO + 0.05 JHIS1 = 2000 + KBIN + (KSIDE-1)*2000 JHIS2 = 3000 + KBIN + (KSIDE-1)*2000 * Get average predicted drift distance in the slice... CALL GHSTAT('HS', JHIS2, 0, NENT, SUMW, RNEFF, XST, YST) DMAV = XST(3) IF(NENT .GT. NEMAX(KSIDE)) THEN CALL HPEAK('HS',JHIS1, 0, NPK, PDAT) IF (NPK .GE. 1) THEN NPEAK(KSIDE) = NPEAK(KSIDE) + 1 * peak position and error on... PPOS = PDAT(1,1) PERR = ABS(PDAT(2,1)) PINT = ABS(PDAT(3,1)) * comment out next line for 'full width errors' PERR = 2.0*(PERR / SQRT(PINT)) * Hence Drift time vs. predicted drift distance:- CVEC(1) = DMAV CVEC(2) = PPOS CVEC(3) = DMAV - DLO CVEC(4) = DHI - DMAV CVEC(5) = PERR CVEC(6) = PERR CALL SVEC(KSIDE*100, 0, CVEC) ENDIF ENDIF * Now purge figures - no longer needed. CALL PURGEF(JHIS1) CALL PURGEF(JHIS2) ENDDO ENDDO * Do peakparm analysis of the Lorentz Angle Histograms... DO KBIN = 1, NBLOR DLO = -5. + (KBIN-1) * 0.25 DHI = DLO + 0.25 JHIS1 = 10000 + KBIN JHIS2 = 11000 + KBIN * Get average predicted drift distance in the slice... CALL GHSTAT('HS', JHIS2, 0, NENT, SUMW, RNEFF, XST, YST) DMAV = XST(3) IF(NENT .GT. LOMAX) THEN CALL HPEAK('HS',JHIS1, 0, NPK, PDAT) IF (NPK .GE. 1) THEN * peak position and error on... PPOS = PDAT(1,1) PERR = ABS(PDAT(2,1)) PINT = ABS(PDAT(3,1)) * comment out next line for 'full width errors' PERR = 2.0*(PERR / SQRT(PINT)) * Hence Delta R vs. predicted drift distance:- CVEC(1) = DMAV CVEC(2) = PPOS CVEC(3) = DMAV - DLO CVEC(4) = DHI - DMAV CVEC(5) = PERR CVEC(6) = PERR CALL SVEC(12000, 0, CVEC) ENDIF ENDIF * Now purge figures - no longer needed. CALL PURGEF(JHIS1) CALL PURGEF(JHIS2) ENDDO * Extraction of calibration data. Not for online at moment... 999 RETURN END *