*-- Author : Stephen Burke 15/02/94 SUBROUTINE FFEND *-----------------------------------------Updates 15/02/94------- **: FFEND.......SB. New routine for end-of-run printout *-----------------------------------------Updates---------------- ********************************************************************** * * * Print statistics at end of run * * * ********************************************************************** *KEEP,FKNPL. CHARACTER*5 CKDBG PARAMETER (CKDBG='FKDBG') PARAMETER (NPL=72) LOGICAL LTRUE,LFIRST,LTRPL,LTRPLD DOUBLE PRECISION TRUE,RTRUE,CHITRU,SPRO,CPRO,SFIL,CFIL &, SSMT,CSMT,SSMTR,CSMTR,DPRO,CBPRO,QPRO,QGAIN &, RPRO,CRPRO,RFIL,CRFIL,RSMT,CRSMT,CHIFIL,CHISMT * * Per-track values can go in H1WORK; note that LTRUE and LFIRST must * be set at least per event. * * This is about 36k words long; the remaining common blocks are * about 3.6k in total. Some of this could be in /H1WORK/, but the * blocks would have to be reorganised. * COMMON /H1WORK/ * /FKPROJ/ & SPRO(5,NPL),CPRO(5,5,NPL) * /FKFILT/ &, SFIL(5,NPL),CFIL(5,5,NPL) * /FKSMTH/ &, SSMT(5,NPL),CSMT(5,5,NPL) &, SSMTR(5,NPL),CSMTR(5,5,NPL) * /FKINT/ &, DPRO(5,5,NPL),CBPRO(5,5,NPL),QPRO(5,5,NPL) &, QGAIN(5,5,NPL),IAPROX,LFIRST * /FKRSID/ &, RPRO(2,NPL),CRPRO(2,2,NPL),RFIL(2,NPL) &, CRFIL(2,2,NPL),RSMT(2,NPL),CRSMT(2,2,NPL) &, CHIFIL(NPL),CHISMT(NPL) * /FKTRUE/ &, TRUE(5,NPL),RTRUE(5,NPL),CHITRU(NPL),LTRUE * /FKDBG/ &, LTRPL(NPL),LTRPLD(NPL) *KEEP,FFSTEE. PARAMETER (NFT=72) LOGICAL LRISV,LWMAP,LGRAPH,LTRUTH REAL DSX,DSY,DSQOP,DSTTH,DSPHI,PMCUT,PCUT,CHPCUT &, QOPMAX,THEMAX,RFTMIN,RFTMAX,CEMAX COMMON /FFSTEE/ DSX,DSY,DSQOP,DSTTH,DSPHI &, PMCUT,IDIAG,JPLRSV,LRISV,LWMAP(NFT),JPLMAX &, IRP(NPL),JPLFT(NPL),JFTPL(NFT) &, LUNGKS,IWKGKS,IDGKS,LUNHB,LUNGKM,IWKGKM,IDGKM &, LGRAPH,LTRUTH,IHFF,IHFK,ISRJCT,PCUT,CHPCUT &, QOPMAX,THEMAX,RFTMIN,RFTMAX,CEMAX *KEEP,FFSCAL. * Counters PARAMETER (NSCAL=145) COMMON /FFSCAL/ NPFAIL,NRFAIL,NXFAIL,NFFAIL,NMFAIL,NBFAIL,NTFAIL &, NWFAIL,NNSPLT,NNMISS,NNMISP &, NQFAIL,NAFAIL,NOFAIL,NIFAIL &, NTRIN,NTROUT,NPRSEG(0:7,0:7),N23SEG(0:7,0:7) *KEEP,FKCNTL. COMMON /FKCNTL/ LUN,IPR,ITR,IPL,JSTART,JSTOP,JLAST,JSTEP *KEEP,FFDBG. CHARACTER*5 CFDBG CHARACTER*6 CFKDBG PARAMETER (CFDBG='FFDBG',CFKDBG='FFKDBG') PARAMETER (NTRACK=1000) COMMON /FFDBG/ ITRTR(2,NTRACK),ITRNF(5,NTRACK),JTRTR *KEEP,FKDBG. *KEND. COMMON /SUMARY/ LSUMA DIMENSION SEGFR(0:3,0:3),SEGFRP(0:3),SEGFRR(0:3) DIMENSION S23FR(0:3,0:3),S23FRP(0:3),S23FRR(0:3) *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/ *KEEP,BOSMDL. C ------BOSMDL LOGICAL BEGJOB,ENDRUN,BEGRUN,REVENT,ENDJOB,OTHDAT COMMON/BOSMDL/BEGJOB,ENDRUN,BEGRUN,REVENT,ENDJOB,OTHDAT, + LCCRUN,NCCRUN,NEVENT, + IHA,IBS,IDB,IDATEL,LUP,ISN,JSN SAVE /BOSMDL/ C ------ *KEND. ********************************************************************** IF (IW(6).LE.0) RETURN IF (.NOT.ENDJOB .AND. LSUMA.NE.1) RETURN IF (LUN.LE.0) LUN = 6 WRITE(LUN,*) WRITE(LUN,*) WRITE(LUN,*) ' *** Kalman Filter track summary ***' WRITE(LUN,*) WRITE(LUN,*) 'Tracks found: ',NTRIN WRITE(LUN,*) WRITE(LUN,*) 'BOS array full: ',NWFAIL WRITE(LUN,*) 'Bank structure corrupt: ',NBFAIL WRITE(LUN,*) 'Bad track parameters: ',NTFAIL WRITE(LUN,*) 'Too few planar points: ',NPFAIL WRITE(LUN,*) 'Too few radial points: ',NRFAIL WRITE(LUN,*) 'Momentum below cut: ',NMFAIL WRITE(LUN,*) 'Fatal error in fit: ',NFFAIL WRITE(LUN,*) 'Bad chi-squared prob: ',NXFAIL WRITE(LUN,*) 'Momentum too small: ',NQFAIL WRITE(LUN,*) 'Theta too large: ',NAFAIL WRITE(LUN,*) 'Track outside tracker: ',NOFAIL WRITE(LUN,*) 'Start and end inconsistent: ',NIFAIL WRITE(LUN,*) WRITE(LUN,*) 'Tracks fitted: ',NTROUT WRITE(LUN,*) WRITE(LUN,*) IF (LTRUTH) THEN WRITE(LUN,*) 'Tracks split: ',NNSPLT WRITE(LUN,*) 'Tracks missed: ',NNMISS WRITE(LUN,*) 'Tracks missed (primary): ',NNMISP WRITE(LUN,*) WRITE(LUN,*) ENDIF IF (NTROUT.LE.0 .OR. .NOT.ENDJOB) RETURN CALL VZERO(SEGFR,16) CALL VZERO(SEGFRP,4) CALL VZERO(SEGFRR,4) SEGSUM = 0. CALL VZERO(S23FR,16) CALL VZERO(S23FRP,4) CALL VZERO(S23FRR,4) S23SUM = 0. DO 200 JPS=0,7 NPS = JBIT(JPS,3) + JBIT(JPS,2) + JBIT(JPS,1) DO 100 JRS=0,7 NRS = JBIT(JRS,3) + JBIT(JRS,2) + JBIT(JRS,1) SEGF = 100.*FLOAT(NPRSEG(JPS,JRS))/FLOAT(NTROUT) SEGFR(NPS,NRS) = SEGFR(NPS,NRS) + SEGF SEGFRP(NPS) = SEGFRP(NPS) + SEGF SEGFRR(NRS) = SEGFRR(NRS) + SEGF SEGSUM = SEGSUM + SEGF S23F = 100.*FLOAT(N23SEG(JPS,JRS))/FLOAT(NTROUT) S23FR(NPS,NRS) = S23FR(NPS,NRS) + S23F S23FRP(NPS) = S23FRP(NPS) + S23F S23FRR(NRS) = S23FRR(NRS) + S23F S23SUM = S23SUM + S23F 100 CONTINUE 200 CONTINUE WRITE(LUN,1000) WRITE(LUN,*) WRITE(LUN,1001) (SEGFR(0,JRS),JRS=0,3),SEGFRP(0) WRITE(LUN,1002) (SEGFR(1,JRS),JRS=0,3),SEGFRP(1) WRITE(LUN,1003) (SEGFR(2,JRS),JRS=0,3),SEGFRP(2) WRITE(LUN,1004) (SEGFR(3,JRS),JRS=0,3),SEGFRP(3) WRITE(LUN,*) WRITE(LUN,1005) (SEGFRR(JPS),JPS=0,3),SEGSUM WRITE(LUN,*) WRITE(LUN,*) 1000 FORMAT(14X,'0R',8X,'1R',8X,'2R',8X,'3R',12X,'XR') 1001 FORMAT(' 0P: ',4(F6.2,4X),4X,F6.2) 1002 FORMAT(' 1P: ',4(F6.2,4X),4X,F6.2) 1003 FORMAT(' 2P: ',4(F6.2,4X),4X,F6.2) 1004 FORMAT(' 3P: ',4(F6.2,4X),4X,F6.2) 1005 FORMAT(' XP: ',4(F6.2,4X),4X,F6.2) WRITE(LUN,1010) WRITE(LUN,*) WRITE(LUN,1011) (S23FR(0,JRS),JRS=0,3),S23FRP(0) WRITE(LUN,1012) (S23FR(1,JRS),JRS=0,3),S23FRP(1) WRITE(LUN,1013) (S23FR(2,JRS),JRS=0,3),S23FRP(2) WRITE(LUN,1014) (S23FR(3,JRS),JRS=0,3),S23FRP(3) WRITE(LUN,*) WRITE(LUN,1015) (S23FRR(JPS),JPS=0,3),S23SUM WRITE(LUN,*) WRITE(LUN,*) 1010 FORMAT(13X,'0P3',7X,'1P3',7X,'2P3',7X,'3P3',11X,'XP3') 1011 FORMAT(' 0P2: ',4(F6.2,4X),4X,F6.2) 1012 FORMAT(' 1P2: ',4(F6.2,4X),4X,F6.2) 1013 FORMAT(' 2P2: ',4(F6.2,4X),4X,F6.2) 1014 FORMAT(' 3P2: ',4(F6.2,4X),4X,F6.2) 1015 FORMAT(' XP2: ',4(F6.2,4X),4X,F6.2) P1P2 = 0. P0P1P2 = 0. R0R1 = 0. P0R0R1 = 0. R0P1 = 0. P0R0P1 = 0. P0P2 = 0. R0P1R1 = 0. R1R2 = 0. P0P1 = 0. P1R1P2 = 0. R0R2 = 0. R0R1R2 = 0. P1P2R2 = 0. R1P2 = 0. R1P2R2 = 0. * Order is planar, radial, mixed, P?, R? DO 400 JPS=0,7 DO 300 JRS=0,7 MASK = JPS*8 + JRS NSEG = NPRSEG(JPS,JRS) * P0: planar, radial, mixed IF (IAND(MASK,32+16).EQ.48) P1P2 = P1P2 + NSEG IF (IAND(MASK,32+16+8).EQ.56) P0P1P2 = P0P1P2 + NSEG IF (IAND(MASK,2+1).EQ.3) R0R1 = R0R1 + NSEG IF (IAND(MASK,8+2+1).EQ.11) P0R0R1 = P0R0R1 + NSEG IF (IAND(MASK,16+1).EQ.17) R0P1 = R0P1 + NSEG IF (IAND(MASK,16+8+1).EQ.25) P0R0P1 = P0R0P1 + NSEG * P1: planar, radial IF (IAND(MASK,32+8).EQ.40) P0P2 = P0P2 + NSEG IF (IAND(MASK,16+2+1).EQ.19) R0P1R1 = R0P1R1 + NSEG * P2: planar, radial IF (IAND(MASK,4+2).EQ.6) R1R2 = R1R2 + NSEG * R0: planar IF (IAND(MASK,16+8).EQ.24) P0P1 = P0P1 + NSEG * R1: planar, radial IF (IAND(MASK,32+16+2).EQ.50) P1R1P2 = P1R1P2 + NSEG IF (IAND(MASK,4+1).EQ.5) R0R2 = R0R2 + NSEG IF (IAND(MASK,4+2+1).EQ.7) R0R1R2 = R0R1R2 + NSEG * R2: planar, mixed IF (IAND(MASK,32+16+4).EQ.52) P1P2R2 = P1P2R2 + NSEG IF (IAND(MASK,32+2).EQ.34) R1P2 = R1P2 + NSEG IF (IAND(MASK,32+4+2).EQ.38) R1P2R2 = R1P2R2 + NSEG 300 CONTINUE 400 CONTINUE EFFP0P = -1. EFFP0R = -1. EFFP0M = -1. EFFP1P = -1. EFFP1R = -1. EFFP2P = -1. EFFP2R = -1. EFFR0P = -1. EFFR1P = -1. EFFR1R = -1. EFFR2P = -1. EFFR2M = -1. IF (P1P2.GT.0.) EFFP0P = P0P1P2/P1P2 IF (R0R1.GT.0.) EFFP0R = P0R0R1/R0R1 IF (R0P1.GT.0.) EFFP0M = P0R0P1/R0P1 IF (P0P2.GT.0.) EFFP1P = P0P1P2/P0P2 IF (R0R1.GT.0.) EFFP1R = R0P1R1/R0R1 IF (P0P1.GT.0.) EFFP2P = P0P1P2/P0P1 IF (R1R2.GT.0.) EFFP2R = R1P2R2/R1R2 IF (P0P1.GT.0.) EFFR0P = P0R0P1/P0P1 IF (P1P2.GT.0.) EFFR1P = P1R1P2/P1P2 IF (R0R2.GT.0.) EFFR1R = R0R1R2/R0R2 IF (P1P2.GT.0.) EFFR2P = P1P2R2/P1P2 IF (R1P2.GT.0.) EFFR2M = R1P2R2/R1P2 WRITE(LUN,*) 'Efficiency for planar 0 from planars = ',EFFP0P &, ' (',INT(P1P2),')' WRITE(LUN,*) 'Efficiency for planar 0 from radials = ',EFFP0R &, ' (',INT(R0R1),')' WRITE(LUN,*) 'Efficiency for planar 0 from both = ',EFFP0M &, ' (',INT(R0P1),')' WRITE(LUN,*) WRITE(LUN,*) 'Efficiency for planar 1 from planars = ',EFFP1P &, ' (',INT(P0P2),')' WRITE(LUN,*) 'Efficiency for planar 1 from radials = ',EFFP1R &, ' (',INT(R0R1),')' WRITE(LUN,*) WRITE(LUN,*) 'Efficiency for planar 2 from planars = ',EFFP2P &, ' (',INT(P0P1),')' WRITE(LUN,*) 'Efficiency for planar 2 from radials = ',EFFP2R &, ' (',INT(R1R2),')' WRITE(LUN,*) WRITE(LUN,*) 'Efficiency for radial 0 from planars = ',EFFR0P &, ' (',INT(P0P1),')' WRITE(LUN,*) WRITE(LUN,*) 'Efficiency for radial 1 from planars = ',EFFR1P &, ' (',INT(P1P2),')' WRITE(LUN,*) 'Efficiency for radial 1 from radials = ',EFFR1R &, ' (',INT(R0R2),')' WRITE(LUN,*) WRITE(LUN,*) 'Efficiency for radial 2 from planars = ',EFFR2P &, ' (',INT(P1P2),')' WRITE(LUN,*) 'Efficiency for radial 2 from both = ',EFFR2M &, ' (',INT(R1P2),')' WRITE(LUN,*) WRITE(LUN,*) IF (IDIAG.GT.0) THEN * Output LOOK histograms CALL SAREA('FTREC',0) CALL FWLOOK('FFLOOKOUTPUT',IERR) IF (IERR.NE.0) THEN WRITE(6,'('' FWLOOK Error'',I10)') IERR ELSE WRITE(6,'('' FFKAL Look output to file FFLOOKOUTPUT'')') ENDIF ENDIF *Check print flag IF (IW(6).GT.0) THEN CALL FKEND CALL HPDIR('//PAWC/'//CFDBG,' ') CALL HPDIR('//PAWC/'//CFKDBG,' ') IF (IHFK.GT.0) CALL FKHPR ENDIF IF (IDIAG.LT.100 .OR. LUNHB.LE.0) RETURN OPEN(UNIT=LUNHB,ACCESS='DIRECT',FORM='UNFORMATTED', & RECL=1024,STATUS='NEW',IOSTAT=IOS) IF (IOS.NE.0) THEN CALL ERRLOG(311,'W:FFKAL: HBOOK file open failed') RETURN ENDIF CALL HRFILE(LUNHB,'FFKAL','N') CALL HCDIR('//PAWC/'//CFDBG,' ') CALL HCDIR('//FFKAL',' ') CALL HROUT(0,ICYC,' ') CALL HCDIR('//PAWC/'//CFKDBG,' ') CALL HCDIR('//FFKAL',' ') CALL HROUT(0,ICYC,' ') CALL HCDIR('//PAWC/'//CKDBG,' ') CALL HCDIR('//FFKAL',' ') CALL HROUT(0,ICYC,' ') CALL HCDIR('//PAWC/FPT0',' ') CALL HCDIR('//FFKAL',' ') CALL HROUT(0,ICYC,' ') CALL HCDIR('//PAWC',' ') CALL HREND('FFKAL') CLOSE(LUNHB) RETURN END *