SUBROUTINE YPDSUM(FRAME,NS,DARK,XSTEPS,EVNUM,DNUM,DTHRSH, & DNSIG,STATUS) C C C Module Number: 14.2.5 C C Module Name: YPDSUM C C Keyphrase: C ---------- C Print summary of dark count and particle events C C Description: C ------------ C this routine finds noisy data points and print the results along with C the summary for a selected data point and the number of particle events C found. C C FORTRAN Name: YPDSUM.for C C C Keywords of Accessed Files : C -------------------------- C NONE C C Modules Called: C --------------- C SDAS: C umsput C C History: C -------- C Version Date Author Description C 1 9/30/86 D. Lindler Designed and coded C 2 Jan 88 D. Lindler New SDAS I/O and standards C 2.1 Sep 98 M. De La Pena Removed dead statements. C------------------------------------------------------------------------ C INCLUDE FILE FOR THE IRAF77 FORTRAN INTERFACE TO THE IRAF VOS C C C FILE I/O ACCESS MODES C INTEGER RDONLY PARAMETER (RDONLY = 1) INTEGER RDWRIT PARAMETER (RDWRIT = 2) INTEGER WRONLY PARAMETER (WRONLY = 3) INTEGER APPEND PARAMETER (APPEND = 4) C C CODES FOR DATA TYPES C INTEGER TYBOOL PARAMETER (TYBOOL = 1) INTEGER TYCHAR PARAMETER (TYCHAR = 2) INTEGER TYINT PARAMETER (TYINT = 4) INTEGER TYREAL PARAMETER (TYREAL = 6) INTEGER TYDOUB PARAMETER (TYDOUB = 7) C C UMSPUT DESTINATIONS -- CB, DAO, 4-SEP-87 C INTEGER STDOUT PARAMETER (STDOUT = 1) INTEGER STDERR PARAMETER (STDERR = 2) C C UHDAS HEADER PARM TYPES -- CB, DAO, 5-SEP-87 C INTEGER GENHDR PARAMETER (GENHDR = 0) INTEGER IMSPEC PARAMETER (IMSPEC = 1) C C THIS SECTION IS FOR PARAMETERS RELEVANT TO TABLE I/O. C C THESE MAY BE SET BY UTPPTI AND/OR READ BY UTPGTI: C C LENGTH OF ROW (UNIT = SIZE OF REAL) INTEGER TBRLEN PARAMETER (TBRLEN = 1) C INCREASE ROW LENGTH INTEGER TBIRLN PARAMETER (TBIRLN = 2) C NUMBER OF ROWS TO ALLOCATE INTEGER TBALLR PARAMETER (TBALLR = 3) C INCREASE ALLOC NUM OF ROWS INTEGER TBIALR PARAMETER (TBIALR = 4) C WHICH TYPE OF TABLE? (ROW OR COLUMN) INTEGER TBWTYP PARAMETER (TBWTYP = 5) C MAXIMUM NUMBER OF USER PARAMETERS INTEGER TBMXPR PARAMETER (TBMXPR = 6) C MAXIMUM NUMBER OF COLUMNS INTEGER TBMXCL PARAMETER (TBMXCL = 7) C TYPE = ROW-ORDERED TABLE INTEGER TBTYPR PARAMETER (TBTYPR = 11) C TYPE = COLUMN-ORDERED TABLE INTEGER TBTYPC PARAMETER (TBTYPC = 12) C C THESE MAY BE READ BY UTPGTI BUT MAY NOT BE SET: C C NUMBER OF ROWS WRITTEN TO INTEGER TBNROW PARAMETER (TBNROW = 21) C C END IRAF77.INC C C INPUT PARAMETERS C INTEGER FRAME C --->number of frames INTEGER NS C --->number of data points REAL DARK(1) C --->dark counts for all data pointss INTEGER XSTEPS C --->number of x-steps INTEGER EVNUM C --->number of particle events INTEGER DNUM C --->selected diode for special analysis REAL DTHRSH C --->threshhold for noisy data points REAL DNSIG C --->number of sigma above ave. for bad C data points C C OUTPUT PARAMETERS C INTEGER STATUS C --->WHAT HAPPENED C C LOCAL VARIABLES C REAL SUM,SUMSQ C --->SUM AND SUM SQUARED OF DARK INTEGER DIODE C --->DIODE NUMBER INTEGER NSUM C --->NO. POINTS IN SUM REAL AVE,SIG C --->AVERAGE AND STANDARD DEVIATION INTEGER I C --->INDEX CHARACTER*130 MESS C INTEGER DATAPT1, DATAPT2 C --->data point limits for selected diode REAL DARK_DNUM C --->dark rate for selected diode C C PRINT TOTAL NUMBER OF PARTICLE EVENTS C WRITE(MESS,99)EVNUM 99 FORMAT(I6,' PARTICLE EVENTS FOUND ') CALL UMSPUT(MESS,STDOUT,0,STATUS) C C COMPUTE AVERAGE DARK COUNT AND STANDARD DEVIATION C SUM=0.0 SUMSQ=0.0 DO 10 I=1,NS SUM=SUM+DARK(I) SUMSQ=SUMSQ+DARK(I)*DARK(I) 10 CONTINUE AVE=SUM/NS C --->AVERAGE SIG=SQRT(SUMSQ/NS-AVE*AVE) C C PRINT AVERAGE AND SIGMA C WRITE(MESS,199)AVE,SIG 199 FORMAT(' AVE. DARK COUNT (ALL DATA POINTS)=',E10.4, & ' ST. DEV.=',E10.4) CALL UMSPUT(MESS,STDOUT,0,STATUS) C C COMPUTE THRESHOLD IF NOT SUPPLIED C IF(DTHRSH.LE.0.0) DTHRSH=AVE+DNSIG*SIG C C PRINT NOISY DATA POINT NUMBERS AND COMPUTE AVERAGE WITHOUT THEM C SUM=0.0 SUMSQ=0.0 NSUM=0 DO 20 I=1,NS DIODE = (I-1)/XSTEPS+1 C --->DIODE NUMBER FOR DATA POINT IF(DARK(I).GT.DTHRSH)THEN C --->DATA POINT NOISY? WRITE(MESS,299)I,DARK(I),DIODE 299 FORMAT(' DATA POINT',I5,' IS NOISY, DARK RATE=',E10.4, & ' DIODE NUMBER',I4) CALL UMSPUT(MESS,STDOUT,0,STATUS) ELSE C ---> INCLUDE DARK(I) IN NEW AVERAGE NSUM=NSUM+1 SUMSQ=SUMSQ+DARK(I)*DARK(I) SUM=SUM+DARK(I) ENDIF 20 CONTINUE C C PRINT NEW AVERAGE C IF(NSUM.GT.0)THEN AVE=SUM/NSUM SIG=SQRT(SUMSQ/NSUM-AVE*AVE) WRITE(MESS,399)AVE,SIG 399 FORMAT(' AVERAGE DARK RATE (GOOD DIODES)=',E10.4, & ' ST. DEV.=',E10.4) CALL UMSPUT(MESS,STDOUT,0,STATUS) ELSE C --->NO GOOD DIODES FOUND WRITE(MESS,499) 499 FORMAT(' ALL DATA NOISY, DTHRSH OR DNSIG MAY BE', * ' TOO LOW') CALL UMSPUT(MESS,STDOUT,0,STATUS) ENDIF C C PRINT SUMMARY FOR ISOLATED DIODE C IF(DNUM.GE.0)THEN DARK_DNUM = 0. DATAPT1 = (DNUM * XSTEPS) + 1 DATAPT2 = DATAPT1 + (XSTEPS - 1) DO 598 I = DATAPT1, DATAPT2 DARK_DNUM = DARK_DNUM + DARK(I) 598 CONTINUE DARK_DNUM = DARK_DNUM / FLOAT(XSTEPS) WRITE(MESS,599)DNUM,DARK_DNUM 599 FORMAT(' AVERAGE DARK RATE FOR DIODE',I4,' =',E10.4, * ' COUNTS/SEC.') CALL UMSPUT(MESS,STDOUT,0,STATUS) ENDIF STATUS=0 1000 RETURN END