subroutine darkr(mode,ic,ifm,id,jd,iframemask,frame,dark,adu2e,idarkcr,ihit,ihist) implicit none c c Dark current removal -- this version detects cosmic rays and excludes them from c the dark current determination/removal, but **does not stamp them out**. c The threshold for covered pixels is set lower than appropriate for in-FOV data, c in an attempt to get just about all, even when singly charged, minimum ionizing. c c Also here scales up the two columns containing the partially covered (& onboard stamped out) pixels, c integer*4 mode,ic,ifm,id,jd real*4 frame(id,jd),dark,darkcnt,crmin,crtest,adu2e,amodesq,abin,sum integer*4 i,j,idarkcr,ibad,ihit(id,jd),ihist(250),jarg integer iframemask(jd,id) c data crmin / 500. / !# of electrons threshold to exclude it as a cosmic ray c darkcnt = 0.0 dark=0.0 idarkcr=0 amodesq=float(mode)*float(mode) crtest=crmin/(amodesq*adu2e) !convert to desired response threshold for cosmic rays abin=amodesq*adu2e/100. !multiplying response by this yields 100 electron bins c c if(mode.eq.2.and.ic.ge.1) then C C Remove the known dark current from the 2 by 2 pixel binning mode for Flight Cameras (presumed format) C Here id = 636 and jd = 128 c This quick version, iframemask disabled C sum=0. do j=1,128 sum=sum+frame(9,j)+frame(10,j) if(j.ne.128)sum=sum+frame(633,j)+frame(634,j) enddo sum=sum/510. c do j=1,128 do i=633,634 c if(j.ne.128)then !***warning*** may be bad data here... ibad=0 if(frame(i,j).ge.crtest+sum)ibad=1 if(ibad.eq.0)then dark = dark + frame(i,j) darkcnt = darkcnt + 1.0 else idarkcr=idarkcr+1 ihit(i,j)=ihit(i,j)+1 jarg=1+nint(abin*(frame(i,j)-sum)) if(jarg.gt.250)jarg=250 c print 1000,i,j,frame(i,j),abin*(frame(i,j)-sum)*100. 1000 format('Cosmic ray in covered pixel at ',2i4,', ',f5.0,' ADUs, ',f7.0,' electrons') ihist(jarg)=ihist(jarg)+1 endif c endif end do do i=9,10 ibad=0 if(frame(i,j).ge.crtest+sum)ibad=1 if(ibad.eq.0)then dark = dark + frame(i,j) darkcnt = darkcnt + 1.0 else idarkcr=idarkcr+1 ihit(i,j)=ihit(i,j)+1 jarg=1+nint(abin*(frame(i,j)-sum)) if(jarg.gt.250)jarg=250 c print 1000,i,j,frame(i,j),abin*(frame(i,j)-sum)*100. ihist(jarg)=ihist(jarg)+1 endif end do end do c end if C if(darkcnt.gt.0)dark=dark/darkcnt c c if(ifm.eq.0)then do j=1,jd do i=1,id c frame(i,j) = frame(i,j) - dark if(frame(i,j).gt.0.)frame(i,j) = frame(i,j) - dark end do end do c else c do j=1,jd c do i=1,id c if(iframemask(i,j).ne.0) then c frame(i,j) = frame(i,j) - dark c end if c end do c end do c endif C return end