
      FUNCTION ispoiss(ifile, ipha, rate, varnce, region, 
     &                 brgion, areasc, breasc, ckey)

      REAL rate(*), varnce(*), region(*), brgion(*)
      REAL areasc(*), breasc(*)
      INTEGER ifile, ipha
      CHARACTER ckey
      LOGICAL ispoiss

c Returns whether the given data bin has poisson errors.

c Arguments :
c    ifile   i        i: The dataset containing IPHA
c    ipha    i        i: PHA bin for which poisson nature is to be checked
c    rate    r        i: The observed rate
c    varnce  r        i: Observed variance
c    region  r        i: Source BACKSCAL values
c    brgion  r        i: Background BACKSCAL values
c    areasc  r        i: Source AREASCAL values
c    breasc  r        i: Background AREASCAL values
c    ckey    c        c: "s"=source, "b"=background
c    ispoiss l        r: true if bin is Poisson

      REAL datnrm

      REAL dgtime, dgbtme
      EXTERNAL dgtime, dgbtme

      ispoiss = .TRUE.

c Set the conversion to go from rate (cts/cm^2/s) back to counts.

      IF ( ckey .EQ. 's' ) THEN

         datnrm = areasc(ipha)*dgtime(ifile)

      ELSEIF ( ckey .EQ. 'b' ) THEN

         datnrm = breasc(ipha)*dgbtme(ifile)*brgion(ipha)/region(ipha)

      ELSE

         RETURN

      ENDIF

      IF ( datnrm .EQ. 0 ) datnrm = 1.

c If the bin is poisson then rate*datnrm = varnce*datnrm*datnrm because
c the mean and variance are identical.

      IF ( abs(rate(ipha)-varnce(ipha)*datnrm) .GT. 1e-5 ) THEN
         ispoiss = .FALSE.
      ENDIF

      RETURN
      END


