C+ C NAME: C smei_frm_pickup C PURPOSE: C Pick up pedestal or dark current pixels C CATEGORY: C ucsd/camera/for/lib C CALLING SEQUENCE: integer function smei_frm_pickup( id, nx, ny, frame, pixs ) C INPUTS: C id integer mod(id,4)=0: pick up pedestal pixels C mod(id,4)=1: pick up dark current pixels C mod(id,4)=2: pick up squares outside FOV arc C mod(id,4)=3: pick up center inside FOV arc C C bit 2 NOT set: do not pick up left side of CCD C bit 2 SET : pick up left side of CCD C C bit 3 NOT set: do not pick up right side of CCD C bit 3 SET : pick up right side of CCD C C If neither bit 2 nor bit 3 are set then both C left and right side are extracted (i.e. both C bits are assumed SET). C nx integer horizontal frame size C ny integer vertical frame size C frame (nx,ny) real frame data C OUTPUT: C smei_frm_pickup integer # pedestal or dark current pixels C pixs(n) real frame values in pedestal or dark current pixels C INCLUDE: include 'smei_frm_layout.h' C CALLS: C smei_frm_mode C MODIFICATION HISTORY: C DEC-2004, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- integer id integer nx integer ny real frame(nx,ny) real pixs(*) integer smei_frm_mode logical ped logical dark logical sqr logical cntr logical left logical right mode = smei_frm_mode(nx, nbin) ! If bits 1 and 2 are not set then set them both n = mod(id,4) ped = n .eq. 0 ! id = 0 dark = n .eq. 1 ! id = 1 sqr = n .eq. 2 ! id = 2 cntr = n .eq. 3 ! id = 3 left = iand(id,4) .ne. 0 ! bit 2 set, id = id+4 right = iand(id,8) .ne. 0 ! bit 3 set, id = id+8 n = 0 if (dark) then ! Dark current if (left .and. .not. right) then ! Only bit2 SET: left side do j=1,SMEI__FRM_NY/nbin do i=1,SMEI__DRK_NCOL/2,nbin n = n+1 pixs(n) = frame( (SMEI__DRK_COL(i)-1)/nbin+1,j) end do end do else if (right .and. .not. left) then! Only bit3 SET: right side do j=1,SMEI__FRM_NY/nbin do i=SMEI__DRK_NCOL/2+1,SMEI__DRK_NCOL,nbin n = n+1 pixs(n) = frame( (SMEI__DRK_COL(i)-1)/nbin+1,j) end do end do else ! Get both left and right do j=1,SMEI__FRM_NY/nbin do i=1,SMEI__DRK_NCOL,nbin n = n+1 pixs(n) = frame( (SMEI__DRK_COL(i)-1)/nbin+1,j) end do end do end if else if (ped) then ! Pedestal if (left .and. .not. right) then ! Only bit2 set: left side do j=1,SMEI__FRM_NY/nbin do i=1,SMEI__PED_NCOL/2,nbin n = n+1 pixs(n) = frame((SMEI__PED_COL(i)-1)/nbin+1,j) end do end do else if (right .and. .not. left) then! Only bit3 set: right side do j=1,SMEI__FRM_NY/nbin do i=SMEI__PED_NCOL/2+1,SMEI__PED_NCOL,nbin n = n+1 pixs(n) = frame((SMEI__PED_COL(i)-1)/nbin+1,j) end do end do else ! Get both left and right do j=1,SMEI__FRM_NY/nbin do i=1,SMEI__PED_NCOL,nbin n = n+1 pixs(n) = frame((SMEI__PED_COL(i)-1)/nbin+1,j) end do end do end if else if (sqr) then if (left .and. .not. right) then ! Only bit2 set: left side do j=1,SMEI__SQR_NROW,nbin do i=1,SMEI__SQR_NCOL/2,nbin n = n+1 pixs(n) = frame((SMEI__SQR_COL(i)-1)/nbin+1,(SMEI__SQR_ROW(j)-1)/nbin+1) end do end do else if (right .and. .not. left) then! Only bit3 set: right side do j=1,SMEI__SQR_NROW,nbin do i=SMEI__SQR_NCOL/2+1,SMEI__SQR_NCOL,nbin n = n+1 pixs(n) = frame((SMEI__SQR_COL(i)-1)/nbin+1,(SMEI__SQR_ROW(j)-1)/nbin+1) end do end do else ! Get both left and right do j=1,SMEI__SQR_NROW,nbin do i=1,SMEI__SQR_NCOL,nbin n = n+1 pixs(n) = frame((SMEI__SQR_COL(i)-1)/nbin+1,(SMEI__SQR_ROW(j)-1)/nbin+1) end do end do end if else do j=1,SMEI__PIX_NROW,nbin do i=1,SMEI__PIX_NCOL,nbin n = n+1 pixs(n) = frame((SMEI__PIX_COL(i)-1)/nbin+1,(SMEI__PIX_ROW(j)-1)/nbin+1) end do end do end if smei_frm_pickup = n return end