#define _WDIM_ 999 /* maximum number of traps */ c----------------------------------------------------------- c c To run this routine, simply compile it in some directory: c c g77 wfc3uv_cteforward.F -o wfc3uv_ctereverse.e c c * you can also use gfortran c * the capital F is important; it invokes the pre-compiler c c You can just run the program without any arguments to c get a list of its arguments: c c ./wfc3uv_rzc2raz.e c c Enjoy! c Jay c c-------------------------------------------------------------- c program wfc3uv_cteforward implicit none c c---------------------------------------------------- c character*80 RAW_HEADER(360) character*80 FILE_RAZ ! blev-cor raz image real pixz_rzc(8412,2070) real pixz_raz(8412,2070) real pixz_dif(8412,2070) real pixz_fff(8412,2070) real pixi(2070) real pixf(2070) real pixo(2070) integer NARG, NARGs character*80 ARGN(8) c c---------------------------------------------------- c integer q_w(_WDIM_) ! output: the run of charge with level #L real dpde_w(_WDIM_) ! output: the run of charge loss with level #L integer tprof_w(_WDIM_) ! output: the length of trail for charge level #L real rprof_wt(_WDIM_,100) ! output: the emission probability as fn of downhill pixel real cprof_wt(_WDIM_,100) ! output: the cumulative probability cprof_t( 0001 ) = 1.000-rprof_t(1) integer Ws integer i,j,ii real x,y,z real dx,dy,rpsf_phot real noise_sig integer NIT, NITs c c---------------------------------------------------- c character*80 STRING character*80 FILE_TRU real BKGD character*80 FILE_LST logical ADD_PN logical ADD_RN character*80 FILE_RZC character*80 FILE_DIF real CTE_FF logical OKARG c c---------------------------------------------------- c logical LINUX_FLAG common /LINUX_/LINUX_FLAG data LINUX_FLAG/.true./ integer*4 itest byte b(4) equivalence (itest,b) logical LINUX_TEST itest = 1 LINUX_TEST = .false. if (b(4).eq.1.and.b(1).eq.0) LINUX_TEST = .true. if (b(1).eq.1.and.b(4).eq.0) LINUX_TEST = .true. if (.not.LINUX_TEST) stop 'CANNOT SET INTEL FLAG' LINUX_FLAG = .true. if (b(4).eq.1.and.b(1).eq.0) LINUX_FLAG = .false. ! solaris c c---------------------------------------------------- c NARGs = iargc() if (NARGs.gt.8) stop 'MAX OF 8 ARGUMENTS' c-------------------------------------------------------------------- c c IF ON ARGUMENTS GIVEN, THEN TELL THE USER HOW TO USE IT c if (NARGs.lt.1) goto 999 write(*,'('' '')') write(*,'(''ARGUMENT LIST '')') write(*,'('' '')') do NARG = 1, NARGs call getarg(NARG,ARGN(NARG)) write(*,'(5x,i2.2,1x,80a)') NARG,ARGN(NARG) enddo write(*,'('' '')') write(*,'('' '')') c--------------------------- c c default arguments c FILE_TRU = 'NONE' BKGD = 0.0 FILE_LST = 'NONE' ADD_PN = .false. ADD_RN = .false. FILE_RZC = 'NONE' FILE_DIF = 'NONE' CTE_FF = 1.00 FILE_RAZ = ARGN(1) do NARG = 2, NARGs OKARG = .false. if (ARGN(NARG)(1:5).eq.'TRUE=') then OKARG = .true. FILE_TRU = ARGN(NARG)(6:80) endif if (ARGN(NARG)(1:5).eq.'BKGD=') then OKARG = .true. read(ARGN(NARG)(6:80),*) BKGD endif if (ARGN(NARG)(1:5).eq.'LIST=') then OKARG = .true. FILE_LST = ARGN(NARG)(6:80) endif if (ARGN(NARG)(1:3).eq.'PN+') then OKARG = .true. ADD_PN = .true. endif if (ARGN(NARG)(1:3).eq.'RN+') then OKARG = .true. ADD_RN = .true. endif if (ARGN(NARG)(1:3).eq.'PN-') then OKARG = .true. ADD_PN = .false. endif if (ARGN(NARG)(1:3).eq.'RN-') then OKARG = .true. ADD_RN = .false. endif if (ARGN(NARG)(1:5).eq.'ORIG=') then OKARG = .true. FILE_RZC = ARGN(NARG)(6:80) endif if (ARGN(NARG)(1:5).eq.'DIFF=') then OKARG = .true. FILE_DIF = ARGN(NARG)(6:80) endif if (ARGN(NARG)(1:5).eq.'CTES=') then OKARG = .true. read(ARGN(NARG)(6:80),*) CTE_FF endif if (.not.OKARG) then write(*,'('' '')') write(*,'('' '')') write(*,'(''ARGUMENT#'',i1,'' COULD NOT BE PARSED'')') NARG write(*,'('' '')') write(*,'('' ARG: '',a80)') ARGN(NARG) write(*,'('' '')') write(*,'('' '')') write(*,'(''PROPER USAGE: '')') write(*,'('' '')') goto 999 endif enddo write(*,'('' '')') write(*,'(''PARAMETERS FOR RUN--- '')') write(*,'('' '')') write(*,'(5x,''OUTPUT_RAZ = '',80a )') FILE_RAZ write(*,'(5x,'' INPUT = '',80a )') FILE_TRU write(*,'(5x,'' SHOW ORIG = '',80a )') FILE_RZC write(*,'(5x,'' SHOW DIFF = '',80a )') FILE_DIF write(*,'(5x,'' CTE SCALE = '',f8.4)') CTE_FF write(*,'(5x,'' BKGD = '',f6.2)') BKGD write(*,'(5x,'' STAR LIST = '',80a )') FILE_LST write(*,'(5x,''ADD PNOISE = '',l1 )') ADD_PN write(*,'(5x,''ADD RNOISE = '',l1 )') ADD_RN write(*,'(5x,'' '')') write(*,'('' '')') c------------------------------------------------------------------------- c c TAKE THE PARAMETRIZED CTE MODEL IN THE BLOCK DATA STATMENTS AND POPULATE c THE DETAILED MODEL c print*,'MAIN STEP00: POPULATE DETAILED CTE MODEL...' call setup_cte_w(q_w,dpde_w,tprof_w,rprof_wt,cprof_wt,Ws,.false.) c------------------------------------------------------------ c c STEP01: START WITH AN EMPTY IMAGE c print*,'MAIN STEP01: START WITH AN EMPTY IMAGE...' do i = 0001, 8412 do j = 0001, 2070 pixz_rzc(i,j) = 0.0 enddo enddo c------------------------------------------------------------ c c STEP02: IF THERE IS A SOURCE IMAGE TO START WITH, READ IT IN c print*,'MAIN STEP02: LOAD IN SOURCE IMAGE...',FILE_TRU(1:30) if (FILE_TRU(1:4).ne.'NONE') then call readfits_r4(FILE_TRU,pixz_rzc,8412,2070) endif c----------------------------------------------- c c STEP03: ADD BACKGROUND c print*,'MAIN STEP03: ADD BACKGROUND = ',BKGD do i = 0001, 8412 do j = 0001, 2049 pixz_rzc(i,j) = pixz_rzc(i,j) + BKGD enddo pixz_rzc(i,2050) = pixz_rzc(i,2050) + BKGD*1.25 ! simulate the funny pixels at the top pixz_rzc(i,2051) = pixz_rzc(i,2051) + BKGD*1.50 ! simulate the funny pixels at the top enddo c----------------------------------------------- c c STEP04: ADD SOURCES c print*,'MAIN STEP04: ADD SOURCES; FILE= ',FILE_LST(1:30) if (FILE_LST(1:4).ne.'NONE') then print*,'ADD SOURCES: ',FILE_LST(1:20) open(10,file=FILE_LST,status='old') 1 read(10,'(a80)',end=2) STRING if (STRING(1:1).eq.'#') goto 1 read(STRING,*) x,y,z do i = max(0001,int(x+0.5)-12), min(8412,int(x+0.5)+12) do j = max(0001,int(y+0.5)-12), min(2070,int(y+0.5)+12) dx = i-x dy = j-y pixz_rzc(i,j) = pixz_rzc(i,j) + z*rpsf_phot(dx,dy) enddo enddo goto 1 2 continue endif c----------------------------------------------- c c STEP05: ADD POISSON NOISE (do this before the CTE blurring) c (actually, this adds gaussian noise; it doesn't c take into the quantization of charge, or the c non-gaussian distributions at low flux levels) c print*,'MAIN STEP05: ADD POISSON NOISE? ',ADD_PN if (ADD_PN) then do i = 0001, 8412 do j = 0001, 2070 pixz_rzc(i,j) = pixz_rzc(i,j) . + sqrt(max(pixz_rzc(i,j),1.0))*noise_sig() enddo enddo endif c-------------------------------------------------------------------- c c STEP06: OUTPUT THE STARTING IMAGE, IF DESIRED (IT HAS POISSON NOISE) c print*,'MAIN STEP06: OUTPUT PRE-READOUT IMAGE? ',FILE_RZC(1:30) if (FILE_RZC(1:4).ne.'NONE') then call writfits_r4(FILE_RZC,pixz_rzc,8412,2070) endif c----------------------------------------------- c c STEP07: COMPUTE THE CTE SCALING FACTOR FOR EACH PIXEL c print*,'MAIN STEP07: SET UP CTE SCALING FOR EACH PIXEL; SCL=', . CTE_FF do i = 0001, 8412 do j = 0001, 2070 pixz_fff(i,j) = CTE_FF*max(1.*j,2048.0)/2048.00 enddo enddo c----------------------------------------------- c c STEP08: PUSH THE IMAGE THROUGH THE CTE ALGORITHM c print*,'MAIN STEP08: PUSH IMAGE THROUGH READOUT SIMULATOR...' NITs = 10 do i = 0001, 8412 do j = 0001, 2070 pixi(j) = pixz_rzc(i,j) pixo(j) = pixz_rzc(i,j) pixf(j) = pixz_fff(i,j) enddo do NIT = 1, NITs do j = 0001, 2070 pixi(j) = pixo(j) enddo call sim_colreadout_l_uvis_w(pixi,pixo,pixf,0001,2070,2070, . q_w,dpde_w,NITs, . tprof_w,rprof_wt,cprof_wt,Ws) enddo ii = i - (i-1)/2103*2103 if (ii.eq.0000+0001.or. . ii.eq.0025+0001.or. . ii.eq.0025+2049.or. . (ii-26).eq.(ii-26)/0064*0064) then write(*,2126) write(*,2125) 'ORIGINAL ', 'BLURRED ', ' CHANGE ' write(*,2126) write(*,2128) (j,j=1995,2005), (j,j=1995,2005), . (j,j=1995,2005) write(*,2126) endif write(*,2127) i,((int(pixi(j)+100.5)-100),j=1995,2005), . ((int(pixo(j)+100.5)-100),j=1995,2005), . ((int(pixo(j)+100.5)-100) . -(int(pixi(j)+100.5)-100),j=1995,2005) 2125 format(5x,4x,3(5x,28x,a10,28x)) 2126 format(5x,'----',3(5x,11('------'))) 2127 format(5x,i4.4,3(5x,11i6)) 2128 format(5x,'ICOL',3(5x,'J=',i4,10i6)) do j = 0001, 2070 pixz_raz(i,j) = pixo(j) enddo enddo c----------------------------------------------- c c STEP09: DETERMINE and OUTPUT SHIFT OF ELECRTRONS c if (FILE_DIF(1:4).ne.'NONE') then do i = 0001, 8412 do j = 0001, 2070 pixz_dif(i,j) = pixz_raz(i,j) - pixz_rzc(i,j) enddo enddo call writfits_r4(FILE_DIF,pixz_dif,8412,2070) endif c----------------------------------------------- c c STEP10: ADD READNOISE... c print*,'MAIN STEP09: ADD 3 e- READ-NOISE? ',ADD_RN if (ADD_RN) then do i = 0001, 8412 do j = 0001, 2070 pixz_rzc(i,j) = pixz_rzc(i,j) + 3.00*noise_sig() enddo enddo endif c----------------------------------------------- c c STEP11: OUTPUT OBSERVED c print*,'MAIN STEP10: OUTPUT OBSERVED IMAGE: ',FILE_RAZ(1:30) if (.true.) then ! no options here, the routine has to output something call writfits_r4(FILE_RAZ,pixz_raz,8412,2070) endif stop 999 continue ! come here if user needs a referesher on how to call print*,' ' print*,'./wfc3uv_cteforward.e blurred_image.fits ' print*,' [TRUE=trueinput_image.fits] ' print*,' [BKGD=12.0] ' print*,' [LIST=starlist.XYZ] ' print*,' [PN+] ' print*,' [RN+] ' print*,' [ORIG=preblur_image.fits] ' print*,' [DIFF=difference_image.fits] ' print*,' [CTES=1.00] ' print*,' ' print*,' The first arg must be there first, but the other ' print*,' arguments can be in any order. ' print*,' ' print*,' 1) OUTPUT trailed image (REQUIRED) ' print*,' 2) TRUE: if user is submitting an ' print*,' input image to trail; must ' print*,' be in "raz" format ' print*,' (8412x2070 real*4 image) (default NONE)' print*,' 3) BKGD: SKY to be added (default 0.00)' print*,' 4) LIST: a list of point sources ' print*,' to be added into the ' print*,' "TRUE" image ' print*,' (z=flux in r=10 pix) (default NONE)' print*,' 5) PN+ : turn off poisson noise (default off) ' print*,' 6) RN+ : turn on readnoise (default off) ' print*,' 7) ORIG: the pre-trailed image (default NONE)' print*,' 8) DIFF: the difference (default NONE)' print*,' 9) CTES: CTE scaling (default 1.00)' print*,' ' stop end c********************************************* c**** c**** #include "../ROUTINES/wfc3uv_f606w_psf_bdata.f" c**** c********************************************* c---------------------------------------------------------------------- c c This is the average effective WFC3UVIS PSF FOR F606W, scaled by 1e5 c and supersampled by x4. The center of the PSF is at (51,51). From c the data below: psfi(51,51) = 18907. This means that if a star is c centered on a pixel, then 18.907% of the light that falls within c 10 pixels will land within that central pixel. c c block data psf101x101_F606W_UVIS integer psfi(101,101) common /psfi_ / psfi data psfi / . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=041-051 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=001 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=041-051 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=002 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, ! j=003 i=041-051 . 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=003 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=031-040 . 0, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, ! j=004 i=041-051 . 5, 5, 5, 5, 5, 4, 4, 4, 3, 0, ! j=004 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=004 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, ! j=005 i=031-040 . 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, ! j=005 i=041-051 . 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, ! j=005 i=052-061 . 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=005 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=021-030 . 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, ! j=006 i=031-040 . 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ! j=006 i=041-051 . 5, 5, 5, 5, 5, 4, 4, 4, 3, 3, ! j=006 i=052-061 . 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, ! j=006 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=006 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=021-030 . 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, ! j=007 i=031-040 . 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, ! j=007 i=041-051 . 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, ! j=007 i=052-061 . 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, ! j=007 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=007 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=008 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=008 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ! j=008 i=021-030 . 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, ! j=008 i=031-040 . 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 5, ! j=008 i=041-051 . 5, 5, 5, 5, 5, 5, 4, 4, 3, 3, ! j=008 i=052-061 . 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, ! j=008 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=008 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=008 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=008 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=009 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=009 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, ! j=009 i=021-030 . 1, 2, 2, 3, 3, 4, 5, 6, 6, 6, ! j=009 i=031-040 . 7, 6, 6, 6, 5, 5, 4, 4, 4, 5, 5, ! j=009 i=041-051 . 5, 5, 6, 6, 5, 5, 5, 4, 4, 3, ! j=009 i=052-061 . 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, ! j=009 i=062-071 . 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ! j=009 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=009 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=009 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=010 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=010 i=011-020 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, ! j=010 i=021-030 . 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, ! j=010 i=031-040 . 7, 7, 7, 6, 6, 5, 5, 5, 5, 5, 5, ! j=010 i=041-051 . 5, 6, 6, 6, 6, 5, 5, 4, 4, 3, ! j=010 i=052-061 . 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, ! j=010 i=062-071 . 0, 0, 1, 1, 2, 0, 0, 0, 0, 0, ! j=010 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=010 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=010 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=011 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=011 i=011-020 . 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, ! j=011 i=021-030 . 2, 2, 3, 3, 4, 5, 6, 7, 8, 8, ! j=011 i=031-040 . 8, 8, 8, 7, 6, 6, 5, 5, 5, 5, 5, ! j=011 i=041-051 . 6, 6, 6, 6, 6, 6, 5, 5, 4, 3, ! j=011 i=052-061 . 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, ! j=011 i=062-071 . 1, 1, 1, 2, 2, 3, 0, 0, 0, 0, ! j=011 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=011 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=011 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=012 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=012 i=011-020 . 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, ! j=012 i=021-030 . 2, 3, 3, 4, 5, 6, 7, 8, 8, 9, ! j=012 i=031-040 . 9, 9, 8, 8, 7, 6, 6, 5, 5, 5, 5, ! j=012 i=041-051 . 6, 6, 6, 6, 6, 6, 5, 5, 4, 4, ! j=012 i=052-061 . 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, ! j=012 i=062-071 . 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, ! j=012 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=012 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=012 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=013 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=013 i=011-020 . 0, 3, 3, 3, 3, 2, 2, 2, 2, 2, ! j=013 i=021-030 . 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, ! j=013 i=031-040 . 10, 10, 9, 8, 8, 7, 6, 6, 5, 5, 6, ! j=013 i=041-051 . 6, 6, 6, 6, 6, 6, 5, 5, 4, 4, ! j=013 i=052-061 . 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, ! j=013 i=062-071 . 1, 1, 2, 2, 3, 4, 5, 7, 8, 0, ! j=013 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=013 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=013 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=014 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=014 i=011-020 . 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, ! j=014 i=021-030 . 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, ! j=014 i=031-040 . 10, 10, 10, 9, 8, 7, 7, 6, 6, 6, 6, ! j=014 i=041-051 . 6, 6, 6, 6, 6, 6, 5, 5, 4, 4, ! j=014 i=052-061 . 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, ! j=014 i=062-071 . 2, 2, 2, 3, 4, 5, 6, 7, 9, 10, ! j=014 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=014 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=014 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=015 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, ! j=015 i=011-020 . 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, ! j=015 i=021-030 . 3, 4, 4, 5, 6, 7, 9, 10, 10, 11, ! j=015 i=031-040 . 11, 11, 11, 10, 9, 8, 7, 6, 6, 6, 6, ! j=015 i=041-051 . 6, 6, 6, 6, 6, 6, 5, 5, 4, 4, ! j=015 i=052-061 . 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, ! j=015 i=062-071 . 3, 3, 3, 4, 5, 6, 7, 8, 10, 11, ! j=015 i=072-081 . 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=015 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=015 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=016 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, ! j=016 i=011-020 . 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, ! j=016 i=021-030 . 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ! j=016 i=031-040 . 12, 12, 11, 10, 9, 9, 8, 7, 7, 6, 6, ! j=016 i=041-051 . 7, 7, 7, 7, 6, 6, 6, 5, 5, 4, ! j=016 i=052-061 . 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, ! j=016 i=062-071 . 4, 4, 5, 5, 6, 7, 8, 10, 11, 12, ! j=016 i=072-081 . 13, 14, 0, 0, 0, 0, 0, 0, 0, 0, ! j=016 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=016 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=017 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 6, 6, 5, ! j=017 i=011-020 . 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, ! j=017 i=021-030 . 4, 4, 5, 6, 7, 8, 10, 11, 12, 12, ! j=017 i=031-040 . 12, 12, 12, 11, 10, 9, 8, 8, 7, 7, 7, ! j=017 i=041-051 . 7, 7, 7, 7, 7, 6, 6, 6, 5, 5, ! j=017 i=052-061 . 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, ! j=017 i=062-071 . 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, ! j=017 i=072-081 . 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, ! j=017 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=017 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=018 i=001-010 . 0, 0, 0, 0, 0, 0, 7, 7, 7, 6, ! j=018 i=011-020 . 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, ! j=018 i=021-030 . 4, 4, 5, 6, 7, 9, 10, 11, 12, 13, ! j=018 i=031-040 . 13, 13, 12, 12, 11, 10, 10, 9, 9, 9, 8, ! j=018 i=041-051 . 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, ! j=018 i=052-061 . 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, ! j=018 i=062-071 . 6, 7, 7, 8, 9, 11, 12, 13, 13, 14, ! j=018 i=072-081 . 14, 14, 14, 13, 0, 0, 0, 0, 0, 0, ! j=018 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=018 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=019 i=001-010 . 0, 0, 0, 0, 0, 7, 8, 8, 7, 7, ! j=019 i=011-020 . 7, 6, 6, 5, 5, 4, 4, 4, 4, 4, ! j=019 i=021-030 . 4, 4, 5, 6, 8, 9, 10, 12, 13, 13, ! j=019 i=031-040 . 14, 14, 13, 13, 12, 12, 11, 11, 11, 11, 11, ! j=019 i=041-051 . 10, 10, 10, 9, 9, 8, 8, 7, 7, 7, ! j=019 i=052-061 . 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, ! j=019 i=062-071 . 7, 8, 9, 10, 11, 13, 14, 14, 15, 15, ! j=019 i=072-081 . 14, 14, 13, 12, 12, 0, 0, 0, 0, 0, ! j=019 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=019 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=020 i=001-010 . 0, 0, 0, 0, 7, 8, 8, 8, 8, 8, ! j=020 i=011-020 . 8, 7, 7, 6, 6, 5, 4, 4, 4, 4, ! j=020 i=021-030 . 4, 5, 5, 7, 8, 10, 11, 12, 13, 14, ! j=020 i=031-040 . 15, 15, 15, 14, 14, 13, 13, 13, 13, 13, 13, ! j=020 i=041-051 . 13, 12, 11, 11, 10, 9, 9, 9, 8, 8, ! j=020 i=052-061 . 8, 8, 8, 8, 8, 7, 7, 8, 8, 8, ! j=020 i=062-071 . 9, 10, 11, 12, 13, 15, 15, 16, 16, 15, ! j=020 i=072-081 . 15, 14, 13, 12, 11, 10, 0, 0, 0, 0, ! j=020 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=020 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=021 i=001-010 . 0, 0, 0, 6, 7, 8, 8, 9, 9, 9, ! j=021 i=011-020 . 9, 9, 8, 7, 6, 6, 5, 5, 4, 4, ! j=021 i=021-030 . 4, 5, 6, 7, 9, 10, 12, 13, 15, 15, ! j=021 i=031-040 . 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, ! j=021 i=041-051 . 17, 16, 15, 14, 12, 11, 11, 10, 10, 10, ! j=021 i=052-061 . 10, 10, 10, 10, 10, 10, 9, 9, 10, 10, ! j=021 i=062-071 . 11, 12, 13, 14, 15, 16, 17, 17, 17, 16, ! j=021 i=072-081 . 15, 14, 12, 11, 10, 9, 8, 0, 0, 0, ! j=021 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=021 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=022 i=001-010 . 0, 0, 5, 6, 7, 7, 8, 9, 10, 10, ! j=022 i=011-020 . 10, 10, 9, 8, 7, 7, 6, 5, 5, 4, ! j=022 i=021-030 . 5, 5, 6, 8, 10, 12, 13, 15, 16, 17, ! j=022 i=031-040 . 18, 18, 18, 18, 18, 19, 20, 21, 22, 22, 23, ! j=022 i=041-051 . 22, 21, 19, 17, 16, 14, 13, 12, 12, 12, ! j=022 i=052-061 . 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, ! j=022 i=062-071 . 13, 14, 15, 16, 17, 18, 18, 18, 18, 16, ! j=022 i=072-081 . 15, 13, 12, 10, 9, 8, 7, 6, 0, 0, ! j=022 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=022 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=023 i=001-010 . 0, 0, 4, 5, 6, 7, 8, 9, 10, 10, ! j=023 i=011-020 . 11, 11, 10, 9, 8, 8, 7, 6, 5, 5, ! j=023 i=021-030 . 5, 6, 7, 9, 11, 13, 15, 17, 19, 20, ! j=023 i=031-040 . 21, 21, 21, 21, 22, 23, 24, 26, 27, 28, 29, ! j=023 i=041-051 . 28, 26, 24, 22, 19, 17, 16, 15, 15, 16, ! j=023 i=052-061 . 16, 17, 17, 17, 16, 16, 15, 15, 14, 14, ! j=023 i=062-071 . 15, 16, 17, 18, 19, 19, 19, 19, 18, 17, ! j=023 i=072-081 . 15, 13, 11, 9, 8, 7, 6, 5, 5, 0, ! j=023 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=023 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=024 i=001-010 . 0, 3, 4, 4, 5, 6, 7, 9, 10, 10, ! j=024 i=011-020 . 11, 11, 11, 10, 9, 8, 7, 7, 6, 6, ! j=024 i=021-030 . 6, 7, 8, 10, 13, 16, 18, 21, 23, 24, ! j=024 i=031-040 . 25, 25, 25, 25, 25, 27, 29, 31, 34, 36, 36, ! j=024 i=041-051 . 35, 33, 30, 26, 23, 21, 19, 19, 19, 20, ! j=024 i=052-061 . 21, 21, 22, 22, 21, 20, 18, 17, 17, 17, ! j=024 i=062-071 . 17, 18, 19, 20, 20, 20, 20, 19, 18, 17, ! j=024 i=072-081 . 15, 13, 11, 9, 7, 6, 5, 4, 4, 0, ! j=024 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=024 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=025 i=001-010 . 2, 3, 3, 4, 5, 5, 7, 8, 9, 10, ! j=025 i=011-020 . 11, 11, 11, 11, 10, 9, 8, 7, 7, 6, ! j=025 i=021-030 . 7, 8, 9, 12, 15, 19, 22, 25, 27, 29, ! j=025 i=031-040 . 29, 29, 29, 29, 29, 31, 34, 37, 40, 42, 43, ! j=025 i=041-051 . 42, 39, 36, 31, 28, 24, 23, 22, 22, 24, ! j=025 i=052-061 . 25, 27, 27, 27, 26, 24, 22, 20, 20, 19, ! j=025 i=062-071 . 19, 20, 20, 21, 21, 21, 20, 19, 18, 16, ! j=025 i=072-081 . 14, 12, 10, 9, 7, 6, 5, 4, 3, 3, ! j=025 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=025 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=026 i=001-010 . 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, ! j=026 i=011-020 . 10, 11, 11, 11, 10, 10, 9, 8, 7, 7, ! j=026 i=021-030 . 8, 9, 11, 15, 19, 23, 27, 30, 33, 34, ! j=026 i=031-040 . 34, 34, 33, 32, 33, 35, 38, 42, 45, 48, 49, ! j=026 i=041-051 . 48, 45, 41, 36, 32, 28, 26, 26, 27, 29, ! j=026 i=052-061 . 31, 33, 32, 32, 30, 28, 26, 23, 22, 22, ! j=026 i=062-071 . 22, 22, 22, 22, 22, 22, 21, 19, 18, 16, ! j=026 i=072-081 . 14, 12, 10, 8, 7, 5, 4, 3, 3, 2, ! j=026 i=082-091 . 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=026 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ! j=027 i=001-010 . 1, 2, 2, 2, 3, 4, 5, 6, 7, 8, ! j=027 i=011-020 . 9, 10, 11, 11, 10, 10, 9, 9, 8, 8, ! j=027 i=021-030 . 9, 11, 13, 17, 22, 27, 32, 36, 39, 40, ! j=027 i=031-040 . 39, 38, 37, 36, 37, 39, 42, 46, 50, 53, 54, ! j=027 i=041-051 . 54, 51, 46, 41, 36, 32, 30, 30, 31, 33, ! j=027 i=052-061 . 36, 38, 39, 38, 34, 32, 29, 26, 25, 24, ! j=027 i=062-071 . 24, 24, 24, 24, 23, 22, 21, 19, 18, 16, ! j=027 i=072-081 . 14, 12, 10, 8, 6, 5, 4, 3, 3, 2, ! j=027 i=082-091 . 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=027 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=028 i=001-010 . 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, ! j=028 i=011-020 . 8, 9, 10, 10, 10, 10, 9, 9, 9, 9, ! j=028 i=021-030 . 10, 12, 16, 20, 25, 31, 36, 41, 43, 44, ! j=028 i=031-040 . 44, 42, 41, 40, 39, 41, 44, 49, 54, 58, 60, ! j=028 i=041-051 . 59, 56, 51, 45, 40, 36, 34, 34, 35, 38, ! j=028 i=052-061 . 40, 42, 43, 41, 38, 35, 32, 29, 27, 26, ! j=028 i=062-071 . 26, 26, 26, 25, 24, 23, 22, 20, 18, 15, ! j=028 i=072-081 . 13, 11, 9, 8, 6, 5, 4, 3, 2, 2, ! j=028 i=082-091 . 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=028 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=029 i=001-010 . 1, 1, 1, 2, 2, 3, 3, 4, 5, 6, ! j=029 i=011-020 . 7, 8, 9, 9, 10, 10, 10, 9, 9, 10, ! j=029 i=021-030 . 11, 14, 17, 22, 28, 34, 40, 45, 48, 49, ! j=029 i=031-040 . 48, 47, 44, 42, 42, 44, 47, 52, 57, 61, 63, ! j=029 i=041-051 . 63, 60, 56, 50, 44, 40, 37, 37, 38, 41, ! j=029 i=052-061 . 43, 45, 45, 43, 40, 37, 34, 32, 30, 29, ! j=029 i=062-071 . 28, 28, 28, 27, 26, 25, 23, 20, 18, 15, ! j=029 i=072-081 . 13, 11, 9, 8, 6, 5, 4, 3, 2, 2, ! j=029 i=082-091 . 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=029 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ! j=030 i=001-010 . 1, 1, 1, 2, 2, 2, 3, 4, 4, 5, ! j=030 i=011-020 . 6, 7, 8, 9, 9, 9, 10, 10, 10, 11, ! j=030 i=021-030 . 12, 15, 18, 24, 30, 36, 42, 48, 51, 54, ! j=030 i=031-040 . 53, 51, 48, 46, 45, 46, 49, 53, 59, 63, 66, ! j=030 i=041-051 . 66, 64, 60, 55, 49, 44, 42, 41, 42, 44, ! j=030 i=052-061 . 46, 47, 46, 44, 42, 39, 36, 33, 33, 32, ! j=030 i=062-071 . 32, 31, 31, 30, 29, 26, 24, 21, 18, 16, ! j=030 i=072-081 . 13, 11, 9, 7, 6, 5, 4, 3, 2, 2, ! j=030 i=082-091 . 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, ! j=030 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=031 i=001-010 . 1, 1, 1, 2, 2, 2, 3, 3, 4, 5, ! j=031 i=011-020 . 6, 6, 7, 8, 9, 10, 10, 10, 11, 12, ! j=031 i=021-030 . 13, 15, 19, 25, 31, 38, 45, 51, 55, 57, ! j=031 i=031-040 . 57, 55, 52, 50, 48, 49, 51, 55, 60, 65, 69, ! j=031 i=041-051 . 70, 69, 66, 61, 55, 50, 46, 44, 45, 46, ! j=031 i=052-061 . 47, 48, 47, 45, 42, 40, 38, 36, 35, 36, ! j=031 i=062-071 . 35, 35, 35, 33, 31, 29, 26, 22, 19, 16, ! j=031 i=072-081 . 13, 11, 9, 7, 6, 5, 4, 3, 3, 2, ! j=031 i=082-091 . 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, ! j=031 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=032 i=001-010 . 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, ! j=032 i=011-020 . 5, 6, 7, 9, 9, 10, 11, 11, 12, 13, ! j=032 i=021-030 . 14, 17, 21, 27, 33, 41, 48, 54, 58, 61, ! j=032 i=031-040 . 61, 59, 57, 54, 52, 53, 55, 60, 66, 73, 79, ! j=032 i=041-051 . 83, 84, 83, 78, 70, 61, 53, 49, 47, 47, ! j=032 i=052-061 . 47, 47, 46, 45, 43, 41, 40, 39, 39, 39, ! j=032 i=062-071 . 40, 40, 39, 38, 35, 31, 28, 24, 20, 16, ! j=032 i=072-081 . 13, 11, 9, 7, 6, 5, 5, 4, 3, 3, ! j=032 i=082-091 . 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, ! j=032 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=033 i=001-010 . 1, 2, 2, 2, 2, 3, 3, 3, 4, 5, ! j=033 i=011-020 . 5, 7, 8, 9, 10, 11, 12, 13, 14, 14, ! j=033 i=021-030 . 16, 19, 23, 29, 36, 44, 51, 58, 62, 64, ! j=033 i=031-040 . 65, 64, 61, 60, 61, 63, 65, 70, 77, 86, 95, ! j=033 i=041-051 . 102, 106, 107, 102, 92, 79, 67, 57, 51, 48, ! j=033 i=052-061 . 47, 46, 46, 45, 44, 43, 43, 43, 44, 45, ! j=033 i=062-071 . 45, 45, 44, 42, 39, 35, 30, 25, 21, 17, ! j=033 i=072-081 . 14, 11, 9, 8, 6, 6, 5, 4, 4, 3, ! j=033 i=082-091 . 3, 3, 3, 2, 0, 0, 0, 0, 0, 0, ! j=033 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=034 i=001-010 . 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, ! j=034 i=011-020 . 6, 8, 9, 10, 12, 14, 15, 16, 16, 17, ! j=034 i=021-030 . 19, 22, 27, 33, 40, 48, 56, 62, 66, 69, ! j=034 i=031-040 . 69, 70, 71, 73, 76, 80, 84, 88, 97, 108, 121, ! j=034 i=041-051 . 131, 139, 143, 138, 125, 107, 89, 71, 57, 49, ! j=034 i=052-061 . 48, 47, 47, 46, 46, 46, 46, 47, 48, 50, ! j=034 i=062-071 . 51, 51, 48, 46, 42, 37, 32, 26, 21, 17, ! j=034 i=072-081 . 14, 11, 9, 8, 7, 6, 6, 5, 5, 4, ! j=034 i=082-091 . 4, 3, 3, 3, 0, 0, 0, 0, 0, 0, ! j=034 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=035 i=001-010 . 2, 2, 2, 3, 3, 3, 4, 4, 5, 6, ! j=035 i=011-020 . 7, 9, 11, 13, 15, 17, 19, 20, 21, 22, ! j=035 i=021-030 . 23, 27, 32, 38, 46, 54, 62, 68, 73, 76, ! j=035 i=031-040 . 80, 85, 91, 97, 103, 109, 114, 120, 131, 145, 161, ! j=035 i=041-051 . 176, 188, 193, 188, 170, 146, 119, 93, 70, 54, ! j=035 i=052-061 . 46, 49, 48, 49, 49, 49, 50, 51, 53, 54, ! j=035 i=062-071 . 55, 55, 51, 48, 44, 38, 32, 26, 21, 17, ! j=035 i=072-081 . 14, 11, 9, 8, 7, 7, 6, 6, 5, 5, ! j=035 i=082-091 . 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, ! j=035 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, ! j=036 i=001-010 . 2, 2, 3, 3, 3, 4, 4, 5, 6, 7, ! j=036 i=011-020 . 8, 10, 13, 16, 19, 21, 24, 25, 26, 27, ! j=036 i=021-030 . 29, 32, 36, 43, 52, 60, 68, 75, 82, 89, ! j=036 i=031-040 . 99, 109, 120, 130, 140, 149, 158, 167, 182, 200, 220, ! j=036 i=041-051 . 239, 253, 259, 250, 226, 193, 156, 120, 88, 65, ! j=036 i=052-061 . 50, 43, 41, 51, 52, 52, 53, 55, 56, 57, ! j=036 i=062-071 . 58, 57, 55, 49, 44, 38, 32, 26, 21, 17, ! j=036 i=072-081 . 14, 11, 9, 8, 8, 7, 7, 6, 6, 5, ! j=036 i=082-091 . 5, 4, 4, 4, 3, 0, 0, 0, 0, 0, ! j=036 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, ! j=037 i=001-010 . 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, ! j=037 i=011-020 . 10, 12, 15, 19, 22, 26, 29, 31, 32, 33, ! j=037 i=021-030 . 35, 37, 42, 49, 57, 65, 72, 83, 94, 106, ! j=037 i=031-040 . 121, 138, 155, 171, 188, 204, 221, 238, 259, 282, 306, ! j=037 i=041-051 . 326, 340, 341, 327, 294, 250, 202, 156, 115, 83, ! j=037 i=052-061 . 62, 48, 42, 42, 54, 54, 55, 57, 58, 58, ! j=037 i=062-071 . 58, 57, 54, 49, 42, 36, 30, 25, 20, 16, ! j=037 i=072-081 . 13, 11, 9, 8, 8, 7, 7, 7, 6, 6, ! j=037 i=082-091 . 5, 5, 4, 4, 4, 0, 0, 0, 0, 0, ! j=037 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, ! j=038 i=001-010 . 2, 2, 3, 3, 4, 4, 5, 6, 7, 9, ! j=038 i=011-020 . 11, 13, 17, 21, 26, 30, 35, 37, 38, 39, ! j=038 i=021-030 . 40, 43, 47, 53, 61, 66, 77, 91, 108, 126, ! j=038 i=031-040 . 147, 171, 197, 224, 255, 289, 322, 353, 385, 415, 439, ! j=038 i=041-051 . 455, 461, 454, 428, 384, 327, 266, 207, 155, 115, ! j=038 i=052-061 . 86, 65, 52, 47, 49, 56, 56, 57, 58, 58, ! j=038 i=062-071 . 57, 54, 51, 46, 40, 34, 28, 23, 18, 15, ! j=038 i=072-081 . 13, 11, 9, 8, 8, 8, 7, 7, 6, 6, ! j=038 i=082-091 . 5, 5, 4, 4, 4, 4, 0, 0, 0, 0, ! j=038 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, ! j=039 i=001-010 . 2, 2, 3, 4, 4, 5, 5, 6, 8, 9, ! j=039 i=011-020 . 12, 15, 19, 23, 28, 34, 38, 41, 43, 44, ! j=039 i=021-030 . 45, 47, 51, 56, 63, 69, 83, 102, 125, 149, ! j=039 i=031-040 . 178, 213, 255, 304, 363, 428, 490, 543, 588, 621, 639, ! j=039 i=041-051 . 642, 633, 609, 568, 508, 436, 360, 284, 216, 161, ! j=039 i=052-061 . 123, 94, 72, 60, 55, 58, 57, 56, 56, 56, ! j=039 i=062-071 . 54, 51, 47, 42, 36, 31, 26, 21, 17, 15, ! j=039 i=072-081 . 12, 10, 9, 8, 8, 8, 7, 7, 7, 6, ! j=039 i=082-091 . 6, 5, 5, 4, 4, 4, 0, 0, 0, 0, ! j=039 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, ! j=040 i=001-010 . 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, ! j=040 i=011-020 . 12, 15, 20, 24, 29, 36, 40, 43, 45, 48, ! j=040 i=021-030 . 48, 50, 52, 57, 60, 71, 89, 115, 143, 176, ! j=040 i=031-040 . 218, 272, 341, 428, 534, 646, 744, 824, 879, 910, 913, ! j=040 i=041-051 . 894, 859, 815, 756, 681, 593, 497, 399, 307, 231, ! j=040 i=052-061 . 175, 135, 104, 82, 69, 62, 59, 57, 55, 53, ! j=040 i=062-071 . 51, 47, 42, 37, 32, 28, 24, 19, 16, 13, ! j=040 i=072-081 . 12, 10, 9, 8, 8, 8, 7, 7, 7, 6, ! j=040 i=082-091 . 6, 5, 5, 4, 4, 4, 0, 0, 0, 0, ! j=040 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, ! j=041 i=001-010 . 2, 3, 3, 4, 5, 5, 6, 7, 8, 10, ! j=041 i=011-020 . 12, 16, 20, 24, 30, 35, 40, 43, 46, 48, ! j=041 i=021-030 . 49, 50, 53, 53, 61, 75, 98, 129, 165, 210, ! j=041 i=031-040 . 273, 357, 470, 612, 774, 946, 1092, 1195, 1250, 1262, 1234, ! j=041 i=041-051 . 1184, 1124, 1061, 991, 908, 807, 695, 568, 443, 335, ! j=041 i=052-061 . 253, 193, 149, 117, 94, 78, 67, 60, 56, 52, ! j=041 i=062-071 . 49, 44, 39, 34, 29, 25, 22, 19, 15, 13, ! j=041 i=072-081 . 12, 10, 9, 8, 8, 8, 7, 7, 7, 6, ! j=041 i=082-091 . 6, 5, 5, 4, 4, 4, 0, 0, 0, 0, ! j=041 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, ! j=042 i=001-010 . 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, ! j=042 i=011-020 . 12, 15, 19, 24, 29, 34, 38, 41, 45, 47, ! j=042 i=021-030 . 48, 49, 52, 53, 64, 82, 111, 148, 194, 257, ! j=042 i=031-040 . 348, 477, 649, 853, 1086, 1314, 1491, 1602, 1637, 1620, 1558, ! j=042 i=041-051 . 1477, 1396, 1328, 1264, 1188, 1088, 957, 802, 636, 486, ! j=042 i=052-061 . 368, 280, 217, 171, 136, 109, 88, 67, 59, 54, ! j=042 i=062-071 . 49, 43, 38, 33, 28, 24, 22, 19, 16, 13, ! j=042 i=072-081 . 12, 11, 9, 9, 8, 8, 7, 7, 7, 6, ! j=042 i=082-091 . 6, 5, 5, 5, 5, 5, 4, 0, 0, 0, ! j=042 i=092-101 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, ! j=043 i=001-010 . 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, ! j=043 i=011-020 . 12, 15, 19, 23, 27, 31, 35, 38, 42, 44, ! j=043 i=021-030 . 45, 47, 47, 54, 69, 92, 127, 172, 233, 321, ! j=043 i=031-040 . 450, 633, 865, 1141, 1429, 1692, 1878, 1982, 1997, 1957, 1872, ! j=043 i=041-051 . 1771, 1677, 1606, 1552, 1499, 1412, 1280, 1095, 888, 686, ! j=043 i=052-061 . 522, 399, 309, 243, 192, 152, 118, 91, 66, 57, ! j=043 i=062-071 . 51, 44, 39, 33, 29, 25, 22, 20, 17, 15, ! j=043 i=072-081 . 13, 11, 10, 9, 8, 8, 8, 7, 7, 6, ! j=043 i=082-091 . 6, 5, 5, 5, 5, 5, 5, 0, 0, 0, ! j=043 i=092-101 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, ! j=044 i=001-010 . 2, 2, 3, 4, 4, 5, 6, 7, 8, 9, ! j=044 i=011-020 . 12, 14, 18, 21, 25, 29, 32, 35, 38, 40, ! j=044 i=021-030 . 42, 45, 44, 55, 74, 103, 144, 201, 281, 398, ! j=044 i=031-040 . 571, 805, 1100, 1424, 1745, 2019, 2208, 2341, 2358, 2336, 2253, ! j=044 i=041-051 . 2147, 2037, 1944, 1876, 1826, 1757, 1628, 1428, 1174, 921, ! j=044 i=052-061 . 704, 538, 415, 325, 255, 200, 154, 116, 75, 63, ! j=044 i=062-071 . 54, 47, 41, 35, 30, 27, 24, 21, 19, 16, ! j=044 i=072-081 . 14, 13, 11, 10, 9, 8, 8, 8, 7, 7, ! j=044 i=082-091 . 6, 6, 5, 5, 5, 5, 5, 0, 0, 0, ! j=044 i=092-101 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, ! j=045 i=001-010 . 2, 2, 3, 3, 4, 4, 5, 6, 8, 9, ! j=045 i=011-020 . 11, 14, 17, 20, 24, 27, 30, 33, 36, 38, ! j=045 i=021-030 . 41, 37, 42, 57, 80, 115, 165, 235, 335, 484, ! j=045 i=031-040 . 693, 975, 1307, 1655, 1988, 2304, 2529, 2731, 2889, 3012, 3023, ! j=045 i=041-051 . 2918, 2732, 2507, 2333, 2222, 2109, 1972, 1758, 1470, 1162, ! j=045 i=052-061 . 893, 681, 524, 408, 317, 245, 187, 140, 99, 69, ! j=045 i=062-071 . 59, 51, 44, 38, 33, 30, 26, 24, 21, 18, ! j=045 i=072-081 . 16, 14, 12, 11, 10, 9, 9, 8, 8, 7, ! j=045 i=082-091 . 7, 6, 6, 5, 5, 5, 5, 0, 0, 0, ! j=045 i=092-101 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, ! j=046 i=001-010 . 2, 2, 2, 3, 3, 4, 5, 6, 7, 9, ! j=046 i=011-020 . 11, 14, 17, 20, 24, 27, 30, 33, 35, 38, ! j=046 i=021-030 . 41, 37, 43, 61, 89, 129, 188, 271, 392, 566, ! j=046 i=031-040 . 805, 1113, 1458, 1806, 2180, 2533, 2912, 3390, 3916, 4392, 4594, ! j=046 i=041-051 . 4464, 4054, 3495, 3007, 2684, 2492, 2289, 2059, 1743, 1390, ! j=046 i=052-061 . 1073, 817, 625, 481, 371, 284, 214, 158, 112, 75, ! j=046 i=062-071 . 63, 55, 48, 42, 37, 33, 30, 26, 23, 20, ! j=046 i=072-081 . 17, 15, 13, 12, 11, 10, 9, 9, 8, 8, ! j=046 i=082-091 . 7, 7, 6, 6, 5, 6, 6, 0, 0, 0, ! j=046 i=092-101 . 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, ! j=047 i=001-010 . 1, 2, 2, 3, 3, 4, 4, 5, 7, 9, ! j=047 i=011-020 . 11, 14, 18, 21, 25, 28, 32, 34, 37, 41, ! j=047 i=021-030 . 44, 40, 48, 69, 101, 146, 213, 309, 445, 635, ! j=047 i=031-040 . 893, 1205, 1542, 1891, 2314, 2833, 3567, 4584, 5751, 6772, 7243, ! j=047 i=041-051 . 7018, 6201, 5052, 3989, 3256, 2846, 2560, 2300, 1966, 1583, ! j=047 i=052-061 . 1223, 931, 708, 541, 413, 312, 232, 169, 118, 78, ! j=047 i=062-071 . 66, 58, 51, 45, 40, 36, 33, 29, 26, 22, ! j=047 i=072-081 . 19, 17, 15, 13, 12, 11, 10, 10, 9, 9, ! j=047 i=082-091 . 8, 7, 7, 6, 6, 6, 6, 0, 0, 0, ! j=047 i=092-101 . 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, ! j=048 i=001-010 . 1, 2, 2, 2, 3, 3, 4, 5, 7, 9, ! j=048 i=011-020 . 11, 15, 19, 22, 26, 31, 35, 38, 42, 45, ! j=048 i=021-030 . 49, 46, 55, 79, 115, 166, 241, 347, 494, 694, ! j=048 i=031-040 . 953, 1257, 1584, 1969, 2497, 3318, 4606, 6390, 8401,10092,10845, ! j=048 i=041-051 .10436, 9043, 7095, 5252, 3932, 3193, 2778, 2464, 2113, 1714, ! j=048 i=052-061 . 1328, 1008, 761, 577, 437, 327, 238, 171, 118, 80, ! j=048 i=062-071 . 68, 60, 53, 47, 43, 39, 35, 31, 27, 24, ! j=048 i=072-081 . 21, 18, 16, 14, 13, 12, 12, 11, 10, 9, ! j=048 i=082-091 . 9, 8, 7, 6, 6, 6, 6, 0, 0, 0, ! j=048 i=092-101 . 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, ! j=049 i=001-010 . 1, 2, 2, 2, 2, 3, 4, 5, 7, 9, ! j=049 i=011-020 . 12, 16, 20, 24, 29, 34, 38, 43, 47, 51, ! j=049 i=021-030 . 55, 52, 64, 91, 131, 188, 271, 384, 537, 738, ! j=049 i=031-040 . 990, 1279, 1607, 2029, 2744, 3962, 5912, 8545,11438,13763,14735, ! j=049 i=041-051 .14066,12028, 9208, 6532, 4579, 3468, 2884, 2525, 2163, 1760, ! j=049 i=052-061 . 1363, 1030, 772, 581, 436, 323, 232, 164, 113, 79, ! j=049 i=062-071 . 67, 60, 54, 48, 44, 40, 37, 32, 29, 25, ! j=049 i=072-081 . 22, 19, 17, 15, 14, 13, 13, 12, 11, 10, ! j=049 i=082-091 . 10, 9, 8, 7, 7, 7, 6, 0, 0, 0, ! j=049 i=092-101 . 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ! j=050 i=001-010 . 2, 2, 2, 2, 2, 3, 4, 5, 7, 9, ! j=050 i=011-020 . 13, 17, 21, 27, 32, 37, 42, 47, 52, 56, ! j=050 i=021-030 . 61, 60, 72, 103, 149, 212, 301, 418, 572, 769, ! j=050 i=031-040 . 1009, 1290, 1630, 2114, 3017, 4607, 7109,10399,13914,16685,17757, ! j=050 i=041-051 .16832,14241,10751, 7437, 4999, 3590, 2877, 2488, 2122, 1723, ! j=050 i=052-061 . 1330, 998, 741, 552, 411, 301, 214, 149, 103, 76, ! j=050 i=062-071 . 65, 58, 52, 47, 44, 40, 37, 33, 29, 26, ! j=050 i=072-081 . 22, 20, 18, 17, 15, 15, 14, 13, 12, 11, ! j=050 i=082-091 . 10, 9, 9, 8, 7, 7, 7, 7, 0, 0, ! j=050 i=092-101 . 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, ! j=051 i=001-010 . 2, 2, 2, 2, 2, 3, 4, 5, 7, 10, ! j=051 i=011-020 . 13, 18, 23, 28, 34, 39, 45, 50, 55, 59, ! j=051 i=021-030 . 65, 65, 80, 114, 164, 233, 326, 445, 595, 783, ! j=051 i=031-040 . 1012, 1288, 1643, 2164, 3187, 4978, 7741,11289,15009,17881,18907, ! j=051 i=041-051 .17818,14960,11187, 7631, 5024, 3509, 2754, 2364, 2009, 1625, ! j=051 i=052-061 . 1247, 926, 681, 502, 371, 270, 191, 132, 92, 70, ! j=051 i=062-071 . 61, 54, 49, 45, 42, 39, 36, 32, 29, 26, ! j=051 i=072-081 . 23, 21, 19, 17, 16, 16, 15, 14, 13, 12, ! j=051 i=082-091 . 11, 10, 9, 8, 8, 8, 7, 7, 0, 0, ! j=051 i=092-101 . 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, ! j=052 i=001-010 . 2, 2, 2, 2, 3, 3, 4, 5, 8, 10, ! j=052 i=011-020 . 14, 18, 23, 29, 35, 40, 45, 51, 56, 60, ! j=052 i=021-030 . 66, 66, 83, 120, 174, 246, 341, 458, 603, 784, ! j=052 i=031-040 . 1006, 1283, 1646, 2187, 3215, 4969, 7616,10949,14396,16999,17848, ! j=052 i=041-051 .16722,13969,10390, 7062, 4638, 3235, 2535, 2165, 1834, 1475, ! j=052 i=052-061 . 1122, 826, 601, 440, 324, 236, 166, 115, 82, 64, ! j=052 i=062-071 . 56, 50, 46, 43, 40, 37, 34, 31, 28, 25, ! j=052 i=072-081 . 23, 21, 19, 18, 17, 17, 16, 15, 14, 13, ! j=052 i=082-091 . 12, 11, 10, 9, 8, 8, 8, 8, 0, 0, ! j=052 i=092-101 . 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, ! j=053 i=001-010 . 2, 3, 3, 3, 3, 3, 4, 6, 8, 10, ! j=053 i=011-020 . 14, 18, 23, 29, 34, 39, 44, 49, 54, 58, ! j=053 i=021-030 . 64, 64, 82, 122, 178, 252, 345, 459, 597, 771, ! j=053 i=031-040 . 990, 1264, 1620, 2129, 3036, 4519, 6719, 9453,12253,14301,14891, ! j=053 i=041-051 .13878,11554, 8572, 5855, 3902, 2785, 2213, 1897, 1602, 1279, ! j=053 i=052-061 . 964, 704, 509, 371, 273, 199, 141, 98, 71, 58, ! j=053 i=062-071 . 51, 46, 42, 40, 37, 35, 32, 30, 27, 25, ! j=053 i=072-081 . 22, 21, 20, 19, 18, 17, 17, 16, 15, 13, ! j=053 i=082-091 . 12, 11, 10, 9, 8, 8, 8, 0, 0, 0, ! j=053 i=092-101 . 0, 0, 0, 3, 3, 2, 2, 2, 3, 3, ! j=054 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 6, 7, 10, ! j=054 i=011-020 . 13, 17, 22, 27, 32, 36, 41, 45, 49, 54, ! j=054 i=021-030 . 60, 61, 79, 120, 177, 249, 338, 446, 577, 744, ! j=054 i=031-040 . 960, 1234, 1574, 2032, 2748, 3840, 5418, 7352, 9305,10709,11050, ! j=054 i=041-051 .10243, 8509, 6351, 4428, 3066, 2289, 1871, 1607, 1348, 1063, ! j=054 i=052-061 . 794, 576, 414, 302, 222, 162, 115, 82, 61, 52, ! j=054 i=062-071 . 47, 43, 39, 37, 35, 33, 30, 28, 26, 24, ! j=054 i=072-081 . 22, 21, 20, 19, 18, 18, 17, 16, 15, 14, ! j=054 i=082-091 . 13, 12, 10, 9, 9, 9, 8, 0, 0, 0, ! j=054 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=055 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 5, 7, 9, ! j=055 i=011-020 . 12, 16, 20, 24, 28, 32, 36, 40, 44, 49, ! j=055 i=021-030 . 56, 55, 73, 113, 167, 235, 317, 417, 539, 698, ! j=055 i=031-040 . 910, 1180, 1501, 1893, 2432, 3148, 4109, 5265, 6414, 7218, 7358, ! j=055 i=041-051 . 6798, 5671, 4318, 3138, 2314, 1830, 1532, 1324, 1100, 857, ! j=055 i=052-061 . 635, 459, 331, 242, 178, 130, 94, 69, 54, 48, ! j=055 i=062-071 . 44, 41, 38, 36, 34, 31, 29, 27, 25, 23, ! j=055 i=072-081 . 22, 21, 20, 19, 19, 18, 17, 16, 15, 14, ! j=055 i=082-091 . 13, 12, 11, 10, 9, 9, 8, 0, 0, 0, ! j=055 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=056 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 5, 7, 8, ! j=056 i=011-020 . 11, 14, 18, 21, 25, 28, 32, 35, 39, 44, ! j=056 i=021-030 . 50, 50, 65, 100, 149, 210, 283, 371, 482, 630, ! j=056 i=031-040 . 832, 1094, 1403, 1744, 2160, 2604, 3113, 3674, 4216, 4562, 4561, ! j=056 i=041-051 . 4194, 3548, 2807, 2177, 1730, 1447, 1236, 1067, 875, 674, ! j=056 i=052-061 . 499, 362, 264, 195, 144, 106, 78, 60, 49, 47, ! j=056 i=062-071 . 44, 41, 38, 36, 33, 31, 28, 26, 24, 23, ! j=056 i=072-081 . 21, 20, 19, 19, 18, 18, 17, 16, 15, 14, ! j=056 i=082-091 . 13, 12, 11, 9, 9, 9, 8, 0, 0, 0, ! j=056 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=057 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 5, 6, 8, ! j=057 i=011-020 . 10, 13, 16, 18, 21, 25, 28, 31, 35, 40, ! j=057 i=021-030 . 47, 46, 57, 84, 126, 177, 239, 313, 409, 543, ! j=057 i=031-040 . 728, 974, 1264, 1574, 1885, 2198, 2451, 2675, 2859, 2931, 2845, ! j=057 i=041-051 . 2603, 2257, 1882, 1561, 1319, 1123, 979, 835, 675, 517, ! j=057 i=052-061 . 384, 283, 211, 158, 119, 89, 67, 54, 48, 47, ! j=057 i=062-071 . 45, 42, 40, 37, 34, 31, 28, 26, 23, 22, ! j=057 i=072-081 . 20, 19, 19, 18, 18, 17, 16, 16, 15, 14, ! j=057 i=082-091 . 13, 11, 10, 9, 9, 9, 8, 0, 0, 0, ! j=057 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=058 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 5, 6, 7, ! j=058 i=011-020 . 9, 11, 14, 16, 19, 22, 26, 30, 33, 38, ! j=058 i=021-030 . 45, 54, 53, 70, 101, 143, 193, 254, 334, 448, ! j=058 i=031-040 . 611, 829, 1094, 1375, 1644, 1864, 2013, 2096, 2115, 2060, 1938, ! j=058 i=041-051 . 1757, 1552, 1347, 1155, 1003, 876, 758, 636, 507, 390, ! j=058 i=052-061 . 294, 223, 170, 130, 99, 75, 59, 51, 49, 48, ! j=058 i=062-071 . 46, 44, 41, 38, 35, 31, 28, 25, 23, 21, ! j=058 i=072-081 . 19, 18, 18, 17, 17, 16, 15, 15, 14, 13, ! j=058 i=082-091 . 12, 11, 10, 9, 8, 8, 8, 0, 0, 0, ! j=058 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=059 i=001-010 . 3, 3, 3, 3, 3, 3, 4, 4, 5, 7, ! j=059 i=011-020 . 8, 10, 13, 16, 18, 22, 25, 30, 34, 39, ! j=059 i=021-030 . 45, 53, 51, 60, 80, 113, 151, 199, 264, 356, ! j=059 i=031-040 . 491, 676, 903, 1154, 1393, 1588, 1704, 1747, 1726, 1647, 1521, ! j=059 i=041-051 . 1366, 1205, 1049, 908, 786, 675, 573, 472, 377, 294, ! j=059 i=052-061 . 229, 180, 143, 112, 86, 66, 54, 50, 50, 49, ! j=059 i=062-071 . 48, 46, 43, 40, 36, 32, 28, 24, 22, 19, ! j=059 i=072-081 . 18, 17, 16, 16, 15, 15, 14, 13, 13, 12, ! j=059 i=082-091 . 11, 10, 9, 8, 8, 7, 7, 0, 0, 0, ! j=059 i=092-101 . 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, ! j=060 i=001-010 . 3, 3, 3, 3, 3, 3, 4, 4, 5, 7, ! j=060 i=011-020 . 8, 10, 13, 16, 19, 22, 27, 31, 36, 41, ! j=060 i=021-030 . 47, 53, 62, 54, 65, 86, 117, 154, 203, 275, ! j=060 i=031-040 . 379, 525, 709, 914, 1119, 1290, 1398, 1438, 1418, 1343, 1231, ! j=060 i=041-051 . 1097, 961, 829, 706, 598, 502, 418, 345, 280, 226, ! j=060 i=052-061 . 186, 153, 125, 100, 78, 62, 52, 51, 50, 50, ! j=060 i=062-071 . 49, 47, 43, 40, 36, 31, 26, 23, 20, 18, ! j=060 i=072-081 . 17, 15, 15, 14, 14, 13, 13, 12, 11, 10, ! j=060 i=082-091 . 10, 9, 8, 7, 7, 7, 6, 0, 0, 0, ! j=060 i=092-101 . 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, ! j=061 i=001-010 . 3, 3, 3, 3, 3, 3, 4, 4, 5, 7, ! j=061 i=011-020 . 8, 10, 13, 17, 20, 24, 29, 34, 40, 45, ! j=061 i=021-030 . 51, 56, 62, 55, 59, 70, 91, 120, 156, 208, ! j=061 i=031-040 . 285, 393, 530, 688, 847, 984, 1077, 1119, 1111, 1054, 963, ! j=061 i=041-051 . 853, 738, 624, 520, 431, 357, 299, 250, 211, 180, ! j=061 i=052-061 . 156, 134, 113, 92, 73, 59, 52, 50, 49, 48, ! j=061 i=062-071 . 47, 45, 42, 39, 34, 30, 25, 21, 18, 16, ! j=061 i=072-081 . 15, 14, 13, 12, 12, 11, 11, 10, 10, 9, ! j=061 i=082-091 . 8, 7, 7, 6, 6, 6, 0, 0, 0, 0, ! j=061 i=092-101 . 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, ! j=062 i=001-010 . 3, 3, 3, 3, 3, 4, 4, 5, 6, 7, ! j=062 i=011-020 . 9, 11, 14, 18, 23, 27, 32, 38, 43, 49, ! j=062 i=021-030 . 54, 59, 64, 70, 61, 65, 77, 99, 125, 162, ! j=062 i=031-040 . 216, 293, 390, 503, 619, 722, 791, 826, 823, 784, 715, ! j=062 i=041-051 . 627, 534, 445, 365, 301, 250, 213, 186, 164, 148, ! j=062 i=052-061 . 134, 120, 103, 85, 69, 57, 52, 48, 46, 45, ! j=062 i=062-071 . 44, 42, 39, 36, 32, 27, 22, 19, 16, 14, ! j=062 i=072-081 . 13, 12, 11, 11, 10, 10, 9, 9, 8, 7, ! j=062 i=082-091 . 7, 6, 5, 5, 5, 4, 0, 0, 0, 0, ! j=062 i=092-101 . 0, 0, 0, 0, 4, 4, 3, 3, 3, 3, ! j=063 i=001-010 . 3, 3, 3, 3, 4, 4, 4, 5, 6, 8, ! j=063 i=011-020 . 10, 12, 16, 20, 25, 30, 36, 41, 47, 52, ! j=063 i=021-030 . 58, 62, 66, 71, 78, 68, 73, 87, 108, 134, ! j=063 i=031-040 . 172, 226, 293, 371, 452, 524, 574, 598, 594, 565, 512, ! j=063 i=041-051 . 447, 377, 313, 257, 212, 179, 158, 144, 133, 125, ! j=063 i=052-061 . 117, 107, 93, 79, 66, 56, 49, 44, 41, 40, ! j=063 i=062-071 . 39, 37, 35, 32, 28, 23, 20, 16, 14, 12, ! j=063 i=072-081 . 11, 10, 10, 9, 9, 8, 8, 7, 6, 6, ! j=063 i=082-091 . 5, 5, 4, 4, 3, 3, 0, 0, 0, 0, ! j=063 i=092-101 . 0, 0, 0, 0, 4, 4, 4, 3, 3, 3, ! j=064 i=001-010 . 3, 3, 3, 4, 4, 4, 5, 6, 7, 9, ! j=064 i=011-020 . 11, 13, 17, 22, 27, 32, 39, 44, 49, 54, ! j=064 i=021-030 . 59, 63, 67, 72, 78, 72, 75, 83, 96, 116, ! j=064 i=031-040 . 143, 181, 228, 282, 337, 387, 420, 434, 429, 407, 367, ! j=064 i=041-051 . 319, 269, 224, 186, 156, 135, 123, 116, 111, 106, ! j=064 i=052-061 . 102, 95, 84, 73, 62, 53, 46, 40, 36, 34, ! j=064 i=062-071 . 33, 32, 30, 27, 23, 20, 16, 14, 12, 10, ! j=064 i=072-081 . 9, 9, 8, 8, 7, 7, 6, 6, 5, 4, ! j=064 i=082-091 . 4, 3, 3, 2, 2, 2, 0, 0, 0, 0, ! j=064 i=092-101 . 0, 0, 0, 0, 0, 4, 4, 3, 3, 3, ! j=065 i=001-010 . 3, 3, 4, 4, 4, 5, 6, 6, 8, 10, ! j=065 i=011-020 . 12, 15, 18, 23, 28, 34, 40, 46, 50, 54, ! j=065 i=021-030 . 58, 62, 67, 72, 79, 86, 78, 84, 91, 102, ! j=065 i=031-040 . 120, 148, 181, 218, 258, 292, 314, 322, 317, 300, 271, ! j=065 i=041-051 . 235, 200, 169, 142, 121, 106, 99, 95, 93, 91, ! j=065 i=052-061 . 89, 84, 76, 67, 58, 49, 41, 35, 31, 29, ! j=065 i=062-071 . 28, 26, 24, 22, 19, 16, 13, 11, 10, 9, ! j=065 i=072-081 . 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, ! j=065 i=082-091 . 3, 2, 2, 2, 1, 0, 0, 0, 0, 0, ! j=065 i=092-101 . 0, 0, 0, 0, 0, 4, 4, 3, 3, 3, ! j=066 i=001-010 . 3, 4, 4, 4, 5, 5, 6, 7, 8, 10, ! j=066 i=011-020 . 12, 15, 19, 24, 29, 34, 39, 45, 49, 53, ! j=066 i=021-030 . 56, 60, 65, 71, 78, 85, 92, 87, 90, 93, ! j=066 i=031-040 . 103, 120, 144, 170, 199, 225, 241, 245, 241, 229, 208, ! j=066 i=041-051 . 182, 157, 135, 116, 98, 86, 81, 80, 80, 79, ! j=066 i=052-061 . 79, 75, 69, 62, 53, 45, 37, 31, 27, 24, ! j=066 i=062-071 . 23, 21, 19, 17, 15, 13, 10, 9, 8, 7, ! j=066 i=072-081 . 6, 6, 6, 5, 5, 4, 4, 4, 3, 2, ! j=066 i=082-091 . 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, ! j=066 i=092-101 . 0, 0, 0, 0, 0, 4, 4, 3, 3, 3, ! j=067 i=001-010 . 3, 4, 4, 5, 5, 6, 7, 8, 9, 11, ! j=067 i=011-020 . 13, 16, 19, 23, 28, 33, 38, 42, 47, 50, ! j=067 i=021-030 . 53, 57, 62, 69, 76, 84, 89, 93, 96, 87, ! j=067 i=031-040 . 90, 98, 112, 131, 153, 173, 185, 190, 188, 180, 165, ! j=067 i=041-051 . 148, 130, 114, 98, 84, 74, 70, 70, 72, 73, ! j=067 i=052-061 . 72, 70, 65, 57, 49, 40, 33, 28, 23, 20, ! j=067 i=062-071 . 18, 16, 15, 13, 11, 10, 8, 8, 7, 6, ! j=067 i=072-081 . 5, 5, 5, 4, 4, 4, 3, 3, 2, 2, ! j=067 i=082-091 . 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, ! j=067 i=092-101 . 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, ! j=068 i=001-010 . 3, 4, 4, 5, 6, 6, 7, 8, 9, 11, ! j=068 i=011-020 . 13, 15, 19, 22, 27, 31, 36, 39, 43, 46, ! j=068 i=021-030 . 49, 53, 59, 65, 73, 80, 86, 89, 90, 91, ! j=068 i=031-040 . 82, 83, 90, 101, 115, 130, 141, 146, 146, 143, 134, ! j=068 i=041-051 . 122, 110, 99, 87, 75, 67, 65, 66, 68, 69, ! j=068 i=052-061 . 69, 66, 61, 54, 45, 37, 31, 25, 20, 17, ! j=068 i=062-071 . 14, 13, 12, 10, 9, 8, 6, 6, 5, 5, ! j=068 i=072-081 . 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, ! j=068 i=082-091 . 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=068 i=092-101 . 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, ! j=069 i=001-010 . 3, 4, 4, 5, 6, 6, 7, 8, 9, 11, ! j=069 i=011-020 . 12, 15, 18, 21, 25, 29, 33, 36, 39, 42, ! j=069 i=021-030 . 45, 50, 55, 62, 69, 77, 82, 85, 85, 84, ! j=069 i=031-040 . 83, 85, 77, 81, 88, 98, 106, 111, 114, 113, 109, ! j=069 i=041-051 . 103, 95, 88, 79, 70, 64, 62, 64, 66, 67, ! j=069 i=052-061 . 66, 64, 58, 51, 43, 35, 28, 23, 18, 14, ! j=069 i=062-071 . 12, 11, 9, 8, 7, 6, 6, 5, 5, 4, ! j=069 i=072-081 . 4, 4, 3, 3, 3, 3, 2, 2, 2, 1, ! j=069 i=082-091 . 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=069 i=092-101 . 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, ! j=070 i=001-010 . 3, 4, 4, 5, 6, 6, 7, 8, 9, 10, ! j=070 i=011-020 . 12, 14, 16, 19, 23, 26, 30, 33, 36, 39, ! j=070 i=021-030 . 42, 46, 52, 58, 66, 72, 78, 81, 80, 78, ! j=070 i=031-040 . 76, 75, 76, 79, 75, 81, 86, 91, 94, 95, 94, ! j=070 i=041-051 . 90, 85, 79, 72, 66, 61, 61, 62, 63, 64, ! j=070 i=052-061 . 64, 61, 56, 49, 41, 34, 27, 21, 16, 12, ! j=070 i=062-071 . 11, 9, 8, 7, 6, 6, 5, 5, 4, 4, ! j=070 i=072-081 . 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, ! j=070 i=082-091 . 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=070 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, ! j=071 i=001-010 . 3, 4, 4, 5, 6, 6, 7, 8, 8, 10, ! j=071 i=011-020 . 11, 13, 15, 18, 21, 24, 27, 30, 33, 37, ! j=071 i=021-030 . 40, 44, 49, 56, 62, 69, 73, 77, 76, 73, ! j=071 i=031-040 . 70, 68, 68, 70, 73, 78, 82, 85, 87, 87, 85, ! j=071 i=041-051 . 82, 77, 72, 66, 61, 58, 57, 58, 59, 61, ! j=071 i=052-061 . 61, 58, 54, 47, 40, 32, 25, 19, 15, 12, ! j=071 i=062-071 . 9, 8, 7, 6, 6, 5, 5, 5, 4, 4, ! j=071 i=072-081 . 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, ! j=071 i=082-091 . 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, ! j=071 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, ! j=072 i=001-010 . 3, 4, 4, 5, 5, 6, 7, 7, 8, 9, ! j=072 i=011-020 . 11, 12, 15, 17, 20, 23, 25, 28, 31, 34, ! j=072 i=021-030 . 38, 43, 47, 54, 60, 65, 69, 71, 71, 68, ! j=072 i=031-040 . 65, 62, 62, 63, 66, 70, 74, 77, 79, 79, 78, ! j=072 i=041-051 . 74, 69, 64, 59, 54, 52, 51, 52, 54, 56, ! j=072 i=052-061 . 56, 54, 50, 44, 37, 30, 23, 18, 14, 11, ! j=072 i=062-071 . 8, 7, 6, 6, 6, 5, 5, 5, 4, 4, ! j=072 i=072-081 . 4, 4, 3, 3, 3, 2, 2, 2, 2, 1, ! j=072 i=082-091 . 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, ! j=072 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, ! j=073 i=001-010 . 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, ! j=073 i=011-020 . 10, 12, 14, 16, 19, 22, 24, 27, 30, 33, ! j=073 i=021-030 . 37, 41, 46, 52, 57, 62, 66, 67, 65, 63, ! j=073 i=031-040 . 60, 57, 56, 57, 60, 64, 68, 71, 73, 73, 71, ! j=073 i=041-051 . 66, 61, 56, 51, 47, 45, 45, 46, 48, 50, ! j=073 i=052-061 . 50, 49, 46, 41, 34, 27, 21, 16, 12, 9, ! j=073 i=062-071 . 7, 6, 6, 6, 6, 5, 5, 5, 5, 5, ! j=073 i=072-081 . 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, ! j=073 i=082-091 . 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=073 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, ! j=074 i=001-010 . 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, ! j=074 i=011-020 . 10, 12, 14, 16, 19, 21, 24, 26, 29, 32, ! j=074 i=021-030 . 35, 40, 44, 49, 54, 59, 61, 62, 60, 57, ! j=074 i=031-040 . 54, 51, 51, 52, 54, 58, 62, 65, 67, 66, 63, ! j=074 i=041-051 . 59, 54, 48, 43, 40, 39, 40, 41, 42, 44, ! j=074 i=052-061 . 44, 43, 40, 36, 30, 24, 19, 14, 11, 8, ! j=074 i=062-071 . 7, 6, 6, 6, 6, 6, 6, 5, 5, 5, ! j=074 i=072-081 . 5, 4, 4, 3, 3, 3, 2, 2, 2, 2, ! j=074 i=082-091 . 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, ! j=074 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, ! j=075 i=001-010 . 3, 3, 3, 4, 4, 5, 6, 7, 8, 9, ! j=075 i=011-020 . 11, 13, 15, 17, 19, 21, 23, 26, 28, 31, ! j=075 i=021-030 . 34, 38, 42, 46, 50, 53, 56, 56, 54, 51, ! j=075 i=031-040 . 48, 45, 45, 46, 49, 52, 56, 59, 59, 59, 56, ! j=075 i=041-051 . 52, 47, 42, 38, 36, 34, 34, 35, 37, 38, ! j=075 i=052-061 . 38, 37, 34, 30, 25, 20, 16, 12, 9, 7, ! j=075 i=062-071 . 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, ! j=075 i=072-081 . 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, ! j=075 i=082-091 . 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=075 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=076 i=001-010 . 3, 3, 3, 3, 4, 5, 6, 7, 8, 10, ! j=076 i=011-020 . 12, 14, 16, 18, 20, 22, 24, 25, 27, 30, ! j=076 i=021-030 . 32, 35, 39, 43, 46, 48, 49, 48, 47, 44, ! j=076 i=031-040 . 41, 39, 39, 40, 43, 47, 50, 52, 53, 52, 50, ! j=076 i=041-051 . 46, 41, 37, 33, 31, 30, 30, 30, 31, 31, ! j=076 i=052-061 . 31, 30, 27, 24, 20, 17, 13, 10, 8, 7, ! j=076 i=062-071 . 6, 5, 5, 5, 6, 6, 6, 6, 6, 6, ! j=076 i=072-081 . 5, 5, 4, 4, 3, 3, 2, 2, 2, 2, ! j=076 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=076 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=077 i=001-010 . 3, 3, 3, 4, 4, 5, 6, 7, 9, 11, ! j=077 i=011-020 . 13, 15, 17, 19, 20, 22, 23, 25, 26, 28, ! j=077 i=021-030 . 30, 32, 35, 38, 41, 42, 42, 42, 40, 38, ! j=077 i=031-040 . 35, 34, 34, 35, 38, 41, 44, 46, 47, 46, 44, ! j=077 i=041-051 . 40, 36, 33, 29, 27, 26, 25, 25, 26, 25, ! j=077 i=052-061 . 25, 24, 22, 19, 16, 13, 10, 8, 7, 6, ! j=077 i=062-071 . 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, ! j=077 i=072-081 . 6, 5, 5, 4, 3, 3, 2, 2, 2, 2, ! j=077 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=077 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=078 i=001-010 . 0, 3, 4, 4, 5, 5, 6, 8, 9, 11, ! j=078 i=011-020 . 13, 16, 18, 19, 21, 22, 23, 24, 25, 26, ! j=078 i=021-030 . 27, 29, 31, 33, 35, 36, 36, 35, 33, 32, ! j=078 i=031-040 . 30, 30, 30, 30, 33, 36, 38, 40, 41, 40, 38, ! j=078 i=041-051 . 35, 32, 29, 26, 24, 22, 22, 22, 21, 21, ! j=078 i=052-061 . 20, 18, 17, 15, 12, 10, 8, 7, 6, 5, ! j=078 i=062-071 . 4, 4, 5, 5, 5, 6, 6, 6, 6, 6, ! j=078 i=072-081 . 6, 6, 5, 4, 4, 3, 3, 2, 2, 0, ! j=078 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=078 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=079 i=001-010 . 0, 0, 4, 5, 5, 6, 7, 9, 10, 12, ! j=079 i=011-020 . 14, 16, 18, 20, 21, 22, 22, 23, 23, 23, ! j=079 i=021-030 . 24, 25, 26, 27, 28, 29, 29, 28, 27, 26, ! j=079 i=031-040 . 25, 24, 25, 26, 28, 30, 32, 34, 34, 34, 32, ! j=079 i=041-051 . 30, 28, 25, 23, 21, 20, 19, 18, 17, 16, ! j=079 i=052-061 . 15, 14, 13, 11, 10, 9, 7, 6, 5, 4, ! j=079 i=062-071 . 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, ! j=079 i=072-081 . 6, 6, 5, 4, 4, 3, 3, 2, 2, 0, ! j=079 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=079 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=080 i=001-010 . 0, 0, 5, 6, 6, 7, 8, 10, 11, 13, ! j=080 i=011-020 . 15, 17, 19, 20, 21, 21, 21, 21, 21, 21, ! j=080 i=021-030 . 21, 21, 22, 22, 23, 23, 23, 22, 21, 20, ! j=080 i=031-040 . 20, 20, 20, 21, 23, 25, 26, 28, 28, 28, 27, ! j=080 i=041-051 . 25, 23, 22, 20, 18, 17, 16, 15, 14, 13, ! j=080 i=052-061 . 12, 11, 10, 10, 8, 7, 6, 5, 4, 4, ! j=080 i=062-071 . 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, ! j=080 i=072-081 . 6, 5, 5, 4, 4, 3, 3, 2, 0, 0, ! j=080 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=080 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=081 i=001-010 . 0, 0, 0, 7, 7, 8, 9, 11, 12, 14, ! j=081 i=011-020 . 16, 17, 18, 19, 20, 20, 20, 19, 19, 18, ! j=081 i=021-030 . 18, 18, 18, 18, 18, 18, 18, 17, 17, 16, ! j=081 i=031-040 . 16, 16, 16, 17, 18, 20, 21, 22, 23, 23, 22, ! j=081 i=041-051 . 21, 20, 18, 17, 16, 15, 14, 13, 12, 11, ! j=081 i=052-061 . 10, 10, 9, 8, 7, 6, 5, 4, 4, 3, ! j=081 i=062-071 . 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, ! j=081 i=072-081 . 5, 5, 5, 4, 3, 3, 2, 0, 0, 0, ! j=081 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=081 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=082 i=001-010 . 0, 0, 0, 0, 9, 10, 11, 12, 13, 14, ! j=082 i=011-020 . 16, 17, 18, 18, 18, 18, 18, 17, 16, 15, ! j=082 i=021-030 . 15, 14, 14, 14, 13, 13, 13, 13, 13, 13, ! j=082 i=031-040 . 13, 13, 13, 13, 14, 15, 16, 17, 18, 18, 17, ! j=082 i=041-051 . 17, 16, 15, 15, 14, 13, 12, 12, 11, 10, ! j=082 i=052-061 . 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, ! j=082 i=062-071 . 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, ! j=082 i=072-081 . 5, 4, 4, 4, 3, 3, 0, 0, 0, 0, ! j=082 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=082 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=083 i=001-010 . 0, 0, 0, 0, 0, 11, 12, 13, 14, 15, ! j=083 i=011-020 . 16, 16, 17, 17, 17, 16, 15, 15, 14, 13, ! j=083 i=021-030 . 12, 11, 11, 10, 10, 10, 10, 10, 10, 10, ! j=083 i=031-040 . 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 14, ! j=083 i=041-051 . 14, 14, 13, 13, 13, 12, 12, 11, 10, 9, ! j=083 i=052-061 . 9, 8, 7, 6, 5, 5, 4, 3, 3, 3, ! j=083 i=062-071 . 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, ! j=083 i=072-081 . 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, ! j=083 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=083 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=084 i=001-010 . 0, 0, 0, 0, 0, 0, 14, 14, 15, 15, ! j=084 i=011-020 . 15, 15, 15, 15, 15, 14, 13, 12, 11, 10, ! j=084 i=021-030 . 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, ! j=084 i=031-040 . 8, 8, 8, 9, 9, 9, 10, 10, 11, 11, 11, ! j=084 i=041-051 . 11, 12, 12, 12, 11, 11, 11, 10, 10, 9, ! j=084 i=052-061 . 8, 7, 7, 6, 5, 4, 4, 3, 3, 2, ! j=084 i=062-071 . 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, ! j=084 i=072-081 . 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, ! j=084 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=084 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=085 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, ! j=085 i=011-020 . 15, 15, 14, 13, 13, 12, 11, 10, 9, 8, ! j=085 i=021-030 . 7, 7, 6, 6, 6, 6, 6, 6, 6, 7, ! j=085 i=031-040 . 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, ! j=085 i=041-051 . 10, 10, 10, 11, 11, 11, 10, 10, 9, 9, ! j=085 i=052-061 . 8, 7, 6, 5, 5, 4, 3, 3, 2, 2, ! j=085 i=062-071 . 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, ! j=085 i=072-081 . 3, 3, 2, 0, 0, 0, 0, 0, 0, 0, ! j=085 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=085 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=086 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, ! j=086 i=011-020 . 15, 14, 13, 12, 11, 10, 9, 8, 7, 7, ! j=086 i=021-030 . 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, ! j=086 i=031-040 . 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, ! j=086 i=041-051 . 8, 9, 9, 10, 10, 10, 10, 10, 9, 8, ! j=086 i=052-061 . 8, 7, 6, 5, 4, 4, 3, 2, 2, 2, ! j=086 i=062-071 . 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, ! j=086 i=072-081 . 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, ! j=086 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=086 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=087 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, ! j=087 i=011-020 . 14, 13, 11, 10, 9, 8, 7, 6, 6, 5, ! j=087 i=021-030 . 5, 4, 4, 4, 4, 4, 5, 5, 5, 5, ! j=087 i=031-040 . 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, ! j=087 i=041-051 . 7, 8, 9, 9, 10, 10, 10, 9, 9, 8, ! j=087 i=052-061 . 7, 6, 6, 5, 4, 3, 3, 2, 2, 1, ! j=087 i=062-071 . 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, ! j=087 i=072-081 . 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=087 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=087 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=088 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=088 i=011-020 . 13, 12, 10, 9, 8, 6, 6, 5, 5, 4, ! j=088 i=021-030 . 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, ! j=088 i=031-040 . 5, 5, 4, 4, 4, 4, 4, 4, 5, 5, 6, ! j=088 i=041-051 . 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, ! j=088 i=052-061 . 7, 6, 5, 4, 4, 3, 2, 2, 1, 1, ! j=088 i=062-071 . 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! j=088 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=088 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=088 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=089 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=089 i=011-020 . 0, 11, 9, 8, 6, 5, 5, 4, 4, 3, ! j=089 i=021-030 . 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, ! j=089 i=031-040 . 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, ! j=089 i=041-051 . 6, 7, 8, 8, 9, 9, 9, 9, 8, 7, ! j=089 i=052-061 . 6, 6, 5, 4, 3, 3, 2, 1, 1, 1, ! j=089 i=062-071 . 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, ! j=089 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=089 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=089 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=090 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=090 i=011-020 . 0, 0, 0, 7, 6, 5, 4, 3, 3, 3, ! j=090 i=021-030 . 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, ! j=090 i=031-040 . 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 5, ! j=090 i=041-051 . 6, 7, 7, 8, 8, 8, 8, 8, 8, 7, ! j=090 i=052-061 . 6, 5, 4, 4, 3, 2, 2, 1, 1, 1, ! j=090 i=062-071 . 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, ! j=090 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=090 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=090 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=091 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=091 i=011-020 . 0, 0, 0, 0, 5, 4, 3, 3, 3, 3, ! j=091 i=021-030 . 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, ! j=091 i=031-040 . 4, 4, 4, 3, 3, 3, 3, 3, 4, 4, 5, ! j=091 i=041-051 . 6, 6, 7, 7, 8, 8, 8, 8, 7, 6, ! j=091 i=052-061 . 6, 5, 4, 3, 3, 2, 1, 1, 0, 0, ! j=091 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=091 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=091 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=091 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=092 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=092 i=011-020 . 0, 0, 0, 0, 0, 0, 3, 3, 2, 2, ! j=092 i=021-030 . 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, ! j=092 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, ! j=092 i=041-051 . 5, 6, 6, 7, 7, 7, 7, 7, 7, 6, ! j=092 i=052-061 . 5, 4, 4, 3, 2, 2, 1, 1, 0, 0, ! j=092 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=092 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=092 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=092 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=093 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=093 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, ! j=093 i=021-030 . 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, ! j=093 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, ! j=093 i=041-051 . 5, 5, 6, 6, 7, 7, 7, 6, 6, 5, ! j=093 i=052-061 . 5, 4, 3, 2, 2, 1, 1, 0, 0, 0, ! j=093 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=093 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=093 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=093 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=094 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=094 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, ! j=094 i=021-030 . 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, ! j=094 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, ! j=094 i=041-051 . 4, 5, 5, 6, 6, 6, 6, 6, 5, 5, ! j=094 i=052-061 . 4, 3, 3, 2, 1, 1, 0, 0, 0, 0, ! j=094 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=094 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=094 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=094 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=021-030 . 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! j=095 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, ! j=095 i=041-051 . 4, 4, 5, 5, 6, 6, 6, 5, 5, 5, ! j=095 i=052-061 . 4, 3, 2, 2, 1, 0, 0, 0, 0, 0, ! j=095 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=095 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=021-030 . 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, ! j=096 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ! j=096 i=041-051 . 4, 4, 5, 5, 6, 6, 6, 5, 5, 4, ! j=096 i=052-061 . 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, ! j=096 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=096 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, ! j=097 i=031-040 . 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, ! j=097 i=041-051 . 4, 5, 5, 6, 6, 6, 6, 6, 5, 4, ! j=097 i=052-061 . 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=097 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=031-040 . 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, ! j=098 i=041-051 . 4, 5, 5, 6, 6, 6, 6, 5, 5, 0, ! j=098 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=098 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=041-051 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=099 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=041-051 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=100 i=092-101 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=001-010 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=011-020 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=021-030 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=031-040 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=041-051 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=052-061 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=062-071 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=072-081 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! j=101 i=082-091 . 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/ ! j=101 i=092-101 end c********************************************* c**** c**** #include "../ROUTINES/rpsf_phot.f" c**** c********************************************* c---------------------------------------------------------------- c c This function will evaluate a PSF at a given (dx,dy) offset. c It uses bi-cubic interpolation for the regions that are within c 4 pixels of the center. Otherwise, it uses bi-linear c interpolation. c real function rpsf_phot(x,y) implicit none real x, y real rx, ry integer ix, iy ! 3 4 real fx, fy ! *1* 2 integer psfi(101,101) common / psfi_ / psfi real dd real A1, B1, C1, D1, E1, F1, V1 real A2, B2, C2, D2, E2, F2, V2 real A3, B3, C3, D3, E3, F3, V3 real A4, B4, C4, D4, E4, F4, V4 rx = 51 + x*4 ry = 51 + y*4 ix = int(rx) iy = int(ry) fx = rx-ix fy = ry-iy dd = sqrt(x**2+y**2) rpsf_phot = 0. if (dd.gt.12.0) return if (dd.gt.4.0) then rpsf_phot = (1-fx)*(1-fy)*psfi(ix ,iy ) . + ( fx )*(1-fy)*psfi(ix+1,iy ) . + (1-fx)*( fy )*psfi(ix ,iy+1) . + ( fx )*( fy )*psfi(ix+1,iy+1) rpsf_phot = rpsf_phot/1e5 return endif A1 = psfi(ix ,iy ) B1 = (psfi(ix+1,iy )-psfi(ix-1,iy ))/2 C1 = (psfi(ix ,iy+1)-psfi(ix ,iy-1))/2 D1 = (psfi(ix+1,iy )+psfi(ix-1,iy )-2*A1)/2 F1 = (psfi(ix ,iy+1)+psfi(ix ,iy-1)-2*A1)/2 E1 = (psfi(ix+1,iy+1)-A1) A2 = psfi(ix+1,iy ) B2 = (psfi(ix+2,iy )-psfi(ix ,iy ))/2 C2 = (psfi(ix+1,iy+1)-psfi(ix+1,iy-1))/2 D2 = (psfi(ix+2,iy )+psfi(ix ,iy )-2*A2)/2 F2 = (psfi(ix+1,iy+1)+psfi(ix+1,iy-1)-2*A2)/2 E2 =-(psfi(ix ,iy+1)-A2) A3 = psfi(ix ,iy+1) B3 = (psfi(ix+1,iy+1)-psfi(ix-1,iy+1))/2 C3 = (psfi(ix ,iy+2)-psfi(ix ,iy ))/2 D3 = (psfi(ix+1,iy+1)+psfi(ix-1,iy+1)-2*A3)/2 F3 = (psfi(ix ,iy+2)+psfi(ix ,iy )-2*A3)/2 E3 =-(psfi(ix+1,iy )-A3) A4 = psfi(ix+1,iy+1) B4 = (psfi(ix+2,iy+1)-psfi(ix ,iy+1))/2 C4 = (psfi(ix+1,iy+2)-psfi(ix+1,iy ))/2 D4 = (psfi(ix+2,iy+1)+psfi(ix ,iy+1)-2*A4)/2 F4 = (psfi(ix+1,iy+2)+psfi(ix+1,iy )-2*A4)/2 E4 = (psfi(ix ,iy )-A4) V1 = A1 . + B1*( fx ) . + C1*( fy ) . + D1*( fx )**2 . + E1*( fx )*( fy ) . + F1*( fy )**2 V2 = A2 . + B2*(fx-1) . + C2*( fy ) . + D2*(fx-1)**2 . + E2*(fx-1)*( fy ) . + F2*( fy )**2 V3 = A3 . + B3*( fx ) . + C3*(fy-1) . + D3*( fx )**2 . + E3*( fx )*(fy-1) . + F3*(fy-1)**2 V4 = A4 . + B4*(fx-1) . + C4*(fy-1) . + D4*(fx-1)**2 . + E4*(fx-1)*(fy-1) . + F4*(fy-1)**2 rpsf_phot = (1-fx)*(1-fy)*V1 . + ( fx )*(1-fy)*V2 . + (1-fx)*( fy )*V3 . + ( fx )*( fy )*V4 rpsf_phot = rpsf_phot/1e5 return end c********************************************* c**** c**** #include "../ROUTINES/setup_cte_w.f" c**** c********************************************* #define _UDIM_ 17 /* the number of points we specify run of cum.trap-vs-charge */ #define _TDIM_ 60 /* the maximum length of the trail we will concern ourselves with */ #define _NITCTE_ 07 /* the number iterations we do to get the charge down the detector */ #define _NITERN_ 05 /* the number of iterations we use to reconstruct an image */ c--------------------------------- c c the packet size -vs- cumulative number of traps c block data block_data_q1c2_u integer q1c2_u(2,_UDIM_) common /q1c2_u_ /q1c2_u ! cumulative traps data q1c2_u/ . 00, 00, ! 01 . 01, 19, ! 02 . 02, 38, ! 03 . 03, 43, ! 04 . 07, 56, ! 06 . 12, 62, ! 07 . 20, 65, ! 08 . 30, 67, ! 09 . 50, 79, ! 10 . 70, 85, ! 11 . 100, 92, ! 12 . 316, 133, ! 13 . 1000, 183, ! 14 . 3160, 263, ! 15 . 10000, 393, ! 16 . 31600, 513, ! 17 . 99999, 533/ ! 18 end c-------------------------------------------- c c this gives the charge release as a function c of the number of shifts; this is parametrized c to give the value at a limited number of c points, t(16) c block data block_data_chg_leak real chg_leak(5,16) common /chg_leak_/chg_leak c c q=01 q=010 q=0100 q=01000 q=10000! t nt c data chg_leak / 0.2000, 0.2000, 0.2000, 0.2000, 0.2000,! 01 (01) 01-01 1 . 0.0850, 0.0850, 0.0850, 0.0850, 0.0850,! 02 (02) 02-02 1 . 0.0675, 0.0675, 0.0675, 0.0675, 0.0675,! 03 (03) 03-03 1 . 0.0410, 0.0410, 0.0410, 0.0410, 0.0410,! 05 (04) 04-06 3 . 0.0260, 0.0260, 0.0260, 0.0260, 0.0260,! 08 (05) 07-09 3 . 0.0160, 0.0160, 0.0160, 0.0160, 0.0160,! 12 (06) 10-13 4 . 0.0130, 0.0130, 0.0130, 0.0130, 0.0130,! 16 (07) 14-17 4 . 0.0100, 0.0100, 0.0100, 0.0100, 0.0100,! 20 (08) 18-22 5 . 0.0060, 0.0060, 0.0060, 0.0060, 0.0060,! 25 (09) 23-27 5 . 0.0030, 0.0030, 0.0030, 0.0030, 0.0030,! 30 (10) 28-34 7 . 0.0020, 0.0020, 0.0020, 0.0020, 0.0020,! 40 (11) 35-44 10 . 0.0010, 0.0010, 0.0010, 0.0010, 0.0010,! 50 (12) 45-54 10 . 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,! 60 (13) 55-64 10 . 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,! 70 (14) 65-74 10 . 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,! 80 (15) 75-84 10 . 0.0000, 0.0000, 0.0000, 0.0000, 0.0000/! 90 (16) 85-94 10 end c------------------------------------------------------------------ c c this routine takes the parametrized model and explodes into the c full-blown model, which gives the charge that each trap affects and c the exact amount of charge released after each parallel transfer. c c subroutine setup_cte_w(q_w,dpde_w,tprof_w,rprof_wt,cprof_wt,Ws, . DOLOG) implicit none integer q_w(_WDIM_) ! output: the run of charge with level #L real dpde_w(_WDIM_) ! output: the run of charge loss with level #L integer tprof_w(_WDIM_) ! output: the length of trail for charge level #L real rprof_wt(_WDIM_,100) ! output: the emission probability as fn of downhill pixel real cprof_wt(_WDIM_,100) ! output: the cumulative probability cprof_t( 0001 ) = 1.000-rprof_t(1) integer Ws ! output: the number of traps logical DOLOG ! should the routine output log? c c----------------------------------------------------------------------------------------------------------- c integer q1c2_u(2,_UDIM_) common /q1c2_u_ /q1c2_u ! cumulative traps real chg_leak(5,16) common /chg_leak_/chg_leak c c----------------------------------------------------------------------------------------------------------- c integer U, UU, W integer q_u(_UDIM_) real lq_u(_UDIM_) integer c_u(_UDIM_) real lc_u(_UDIM_) real lq_w(_WDIM_) real f, lf, fr real lq, lw integer r integer t integer n real rprof_rt(5,100) real cprof_rt(5,100) real*8 rtot write(*,*) write(*,*) write(*,'(10x,''#-------------------------------------------'')') write(*,'(10x,''# PARAMETRIZED TRAP DISTRIBUTION LIST '')') write(*,'(10x,''#-------------------------------------------'')') write(*,121) write(*,122) do U = 1, _UDIM_ q_u(U) = q1c2_u(1,U) c_u(U) = q1c2_u(2,U) lq_u(U) = log10(q_u(u)*1.0) lc_u(U) = log10(c_u(u)*1.0) if (q_u(U).eq.0) lq_u(U) = -1 if (c_u(U).eq.0) lc_u(U) = -1 write(*,123) U,q_u(U),c_u(U),lq_u(U),lc_u(U) 121 format(10x,'#',' U ',5x,' qlev', 1x,' cum', . 5x,'lg10(qlv)',1x,'lg10(cum)') 122 format(10x,'#','---',5x,'-----', 1x,'-----', . 5x,'---------',1x,'---------') 123 format(10x,1x,i3.3, 5x, i5, 1x,i5, . 5x, f9.5, 1x,f9.5) enddo write(*,122) write(*,*) c-------------------------------------------- c c go from the parametrized cumulative list to c the location of the individual traps ; just c a log-interpolation of the above c Ws = c_u(_UDIM_) if (Ws.gt._WDIM_) stop 'Ws.ge._WDIM_' do W = 1, Ws lw = log10(w*1.0) uu = 1 do U = 1, _UDIM_-1 if (w.ge.c_u(U)) uu = u enddo f = (lw-lc_u(uu))*1.00/(lc_u(uu+1)-lc_u(uu)) lq_w(w) = lq_u(uu) + f*(lq_u(uu+1)-lq_u(uu)) q_w(w) = int(10**(lq_w(w))+0.99) if (q_w(w).gt.99999) q_w(w) = 99999 enddo c-------------------------------------------------------- c c now, take the parametrized 16-point trail distribution c and populate it into the full 100-point array ; this is c just simple linear interpolation so it could probably c be done better... we go from chg_leak(1:5,1:016) to c rprof_rt(1:5,1:100) c do r = 1, 5 rprof_rt(r,001) = 1.000*chg_leak(r,01) rprof_rt(r,002) = 1.000*chg_leak(r,02) rprof_rt(r,003) = 1.000*chg_leak(r,03) rprof_rt(r,004) = 0.500*chg_leak(r,03) + 0.500*chg_leak(r,04) rprof_rt(r,005) = 1.000*chg_leak(r,04) rprof_rt(r,006) = 0.666*chg_leak(r,04) + 0.334*chg_leak(r,05) rprof_rt(r,007) = 0.334*chg_leak(r,04) + 0.666*chg_leak(r,05) rprof_rt(r,008) = 1.000*chg_leak(r,05) rprof_rt(r,009) = 0.750*chg_leak(r,05) + 0.250*chg_leak(r,06) rprof_rt(r,010) = 0.500*chg_leak(r,05) + 0.500*chg_leak(r,06) rprof_rt(r,011) = 0.250*chg_leak(r,05) + 0.750*chg_leak(r,06) rprof_rt(r,012) = 1.000*chg_leak(r,06) rprof_rt(r,013) = 0.750*chg_leak(r,06) + 0.250*chg_leak(r,07) rprof_rt(r,014) = 0.500*chg_leak(r,06) + 0.500*chg_leak(r,07) rprof_rt(r,015) = 0.250*chg_leak(r,06) + 0.750*chg_leak(r,07) rprof_rt(r,016) = 1.000*chg_leak(r,07) rprof_rt(r,017) = 0.750*chg_leak(r,07) + 0.250*chg_leak(r,08) rprof_rt(r,018) = 0.500*chg_leak(r,07) + 0.500*chg_leak(r,08) rprof_rt(r,019) = 0.250*chg_leak(r,07) + 0.750*chg_leak(r,08) rprof_rt(r,020) = 1.000*chg_leak(r,08) rprof_rt(r,021) = 0.800*chg_leak(r,08) + 0.200*chg_leak(r,09) rprof_rt(r,022) = 0.600*chg_leak(r,08) + 0.400*chg_leak(r,09) rprof_rt(r,023) = 0.400*chg_leak(r,08) + 0.600*chg_leak(r,09) rprof_rt(r,024) = 0.200*chg_leak(r,08) + 0.800*chg_leak(r,09) rprof_rt(r,025) = 1.000*chg_leak(r,09) rprof_rt(r,026) = 0.800*chg_leak(r,09) + 0.200*chg_leak(r,10) rprof_rt(r,027) = 0.600*chg_leak(r,09) + 0.400*chg_leak(r,10) rprof_rt(r,028) = 0.400*chg_leak(r,09) + 0.600*chg_leak(r,10) rprof_rt(r,029) = 0.200*chg_leak(r,09) + 0.800*chg_leak(r,10) rprof_rt(r,030) = 1.000*chg_leak(r,10) rprof_rt(r,031) = 0.900*chg_leak(r,10) + 0.100*chg_leak(r,11) rprof_rt(r,032) = 0.800*chg_leak(r,10) + 0.200*chg_leak(r,11) rprof_rt(r,033) = 0.700*chg_leak(r,10) + 0.300*chg_leak(r,11) rprof_rt(r,034) = 0.600*chg_leak(r,10) + 0.400*chg_leak(r,11) rprof_rt(r,035) = 0.500*chg_leak(r,10) + 0.500*chg_leak(r,11) rprof_rt(r,036) = 0.400*chg_leak(r,10) + 0.600*chg_leak(r,11) rprof_rt(r,037) = 0.300*chg_leak(r,10) + 0.700*chg_leak(r,11) rprof_rt(r,038) = 0.200*chg_leak(r,10) + 0.800*chg_leak(r,11) rprof_rt(r,039) = 0.100*chg_leak(r,10) + 0.900*chg_leak(r,11) rprof_rt(r,040) = 1.000*chg_leak(r,11) rprof_rt(r,041) = 0.900*chg_leak(r,11) + 0.100*chg_leak(r,12) rprof_rt(r,042) = 0.800*chg_leak(r,11) + 0.200*chg_leak(r,12) rprof_rt(r,043) = 0.700*chg_leak(r,11) + 0.300*chg_leak(r,12) rprof_rt(r,044) = 0.600*chg_leak(r,11) + 0.400*chg_leak(r,12) rprof_rt(r,045) = 0.500*chg_leak(r,11) + 0.500*chg_leak(r,12) rprof_rt(r,046) = 0.400*chg_leak(r,11) + 0.600*chg_leak(r,12) rprof_rt(r,047) = 0.300*chg_leak(r,11) + 0.700*chg_leak(r,12) rprof_rt(r,048) = 0.200*chg_leak(r,11) + 0.800*chg_leak(r,12) rprof_rt(r,049) = 0.100*chg_leak(r,11) + 0.900*chg_leak(r,12) rprof_rt(r,050) = 1.000*chg_leak(r,12) rprof_rt(r,051) = 0.900*chg_leak(r,12) + 0.100*chg_leak(r,13) rprof_rt(r,052) = 0.800*chg_leak(r,12) + 0.200*chg_leak(r,13) rprof_rt(r,053) = 0.700*chg_leak(r,12) + 0.300*chg_leak(r,13) rprof_rt(r,054) = 0.600*chg_leak(r,12) + 0.400*chg_leak(r,13) rprof_rt(r,055) = 0.500*chg_leak(r,12) + 0.500*chg_leak(r,13) rprof_rt(r,056) = 0.400*chg_leak(r,12) + 0.600*chg_leak(r,13) rprof_rt(r,057) = 0.300*chg_leak(r,12) + 0.700*chg_leak(r,13) rprof_rt(r,058) = 0.200*chg_leak(r,12) + 0.800*chg_leak(r,13) rprof_rt(r,059) = 0.100*chg_leak(r,12) + 0.900*chg_leak(r,13) rprof_rt(r,060) = 1.000*chg_leak(r,13) rprof_rt(r,061) = 0.900*chg_leak(r,13) + 0.100*chg_leak(r,14) rprof_rt(r,062) = 0.800*chg_leak(r,13) + 0.200*chg_leak(r,14) rprof_rt(r,063) = 0.700*chg_leak(r,13) + 0.300*chg_leak(r,14) rprof_rt(r,064) = 0.600*chg_leak(r,13) + 0.400*chg_leak(r,14) rprof_rt(r,065) = 0.500*chg_leak(r,13) + 0.500*chg_leak(r,14) rprof_rt(r,066) = 0.400*chg_leak(r,13) + 0.600*chg_leak(r,14) rprof_rt(r,067) = 0.300*chg_leak(r,13) + 0.700*chg_leak(r,14) rprof_rt(r,068) = 0.200*chg_leak(r,13) + 0.800*chg_leak(r,14) rprof_rt(r,069) = 0.100*chg_leak(r,13) + 0.900*chg_leak(r,14) rprof_rt(r,070) = 1.000*chg_leak(r,14) rprof_rt(r,071) = 0.900*chg_leak(r,14) + 0.100*chg_leak(r,15) rprof_rt(r,072) = 0.800*chg_leak(r,14) + 0.200*chg_leak(r,15) rprof_rt(r,073) = 0.700*chg_leak(r,14) + 0.300*chg_leak(r,15) rprof_rt(r,074) = 0.600*chg_leak(r,14) + 0.400*chg_leak(r,15) rprof_rt(r,075) = 0.500*chg_leak(r,14) + 0.500*chg_leak(r,15) rprof_rt(r,076) = 0.400*chg_leak(r,14) + 0.600*chg_leak(r,15) rprof_rt(r,077) = 0.300*chg_leak(r,14) + 0.700*chg_leak(r,15) rprof_rt(r,078) = 0.200*chg_leak(r,14) + 0.800*chg_leak(r,15) rprof_rt(r,079) = 0.100*chg_leak(r,14) + 0.900*chg_leak(r,15) rprof_rt(r,080) = 1.000*chg_leak(r,15) rprof_rt(r,081) = 0.900*chg_leak(r,15) + 0.100*chg_leak(r,16) rprof_rt(r,082) = 0.800*chg_leak(r,15) + 0.200*chg_leak(r,16) rprof_rt(r,083) = 0.700*chg_leak(r,15) + 0.300*chg_leak(r,16) rprof_rt(r,084) = 0.600*chg_leak(r,15) + 0.400*chg_leak(r,16) rprof_rt(r,085) = 0.500*chg_leak(r,15) + 0.500*chg_leak(r,16) rprof_rt(r,086) = 0.400*chg_leak(r,15) + 0.600*chg_leak(r,16) rprof_rt(r,087) = 0.300*chg_leak(r,15) + 0.700*chg_leak(r,16) rprof_rt(r,088) = 0.200*chg_leak(r,15) + 0.800*chg_leak(r,16) rprof_rt(r,089) = 0.100*chg_leak(r,15) + 0.900*chg_leak(r,16) rprof_rt(r,090) = 1.000*chg_leak(r,16) rprof_rt(r,091) = 0.900*chg_leak(r,16) rprof_rt(r,092) = 0.800*chg_leak(r,16) rprof_rt(r,093) = 0.700*chg_leak(r,16) rprof_rt(r,094) = 0.600*chg_leak(r,16) rprof_rt(r,095) = 0.500*chg_leak(r,16) rprof_rt(r,096) = 0.400*chg_leak(r,16) rprof_rt(r,097) = 0.300*chg_leak(r,16) rprof_rt(r,098) = 0.200*chg_leak(r,16) rprof_rt(r,099) = 0.100*chg_leak(r,16) rprof_rt(r,100) = 0.000*chg_leak(r,16) enddo c----------------------------------------------------------------------- c c the rprof() array gives the fraction of the trapped charge that c comes out at every parallel shift; we need to normalize this c to 1.00 c we then need to compute the cumulative distribution cprof(), which C tells us how much is left c do r = 1, 5 rtot = 0. do t = 001, 100 rtot = rtot + rprof_rt(r,t) enddo do t = 001, 100 rprof_rt(r,t) = rprof_rt(r,t)/rtot enddo rtot = 0. do t = 001, 100 rtot = rtot + rprof_rt(r,t) cprof_rt(r,t) = 1-rtot enddo enddo write(*,*) write(*,*) write(*,300) write(*,301) write(*,300) write(*,302) write(*,303) do n = 1, 17 if (n.eq.01) t = 001 if (n.eq.02) t = 002 if (n.eq.03) t = 003 if (n.eq.04) t = 005 if (n.eq.05) t = 008 if (n.eq.06) t = 012 if (n.eq.07) t = 016 if (n.eq.08) t = 020 if (n.eq.09) t = 025 if (n.eq.10) t = 030 if (n.eq.11) t = 040 if (n.eq.12) t = 050 if (n.eq.13) t = 060 if (n.eq.14) t = 070 if (n.eq.15) t = 080 if (n.eq.16) t = 090 if (n.eq.17) t = 100 write(*,310) n,t,(rprof_rt(r,t),r=1,5), . (cprof_rt(r,t),r=1,5) enddo 300 format(10x,'#',105('-')) 301 format(10x,'#',' ',1x,' ', . 5x,'RADIAL PROFILE OF RELEASE ', . 5x,'CUMULATIVE DISTRIBUTION REMAINING ') 302 format(10x,'#',' N',1x,' T ', . 2(5x,' q=1 q=10 q=100 q=1000 q=10000 ')) 303 format(10x,'#','--',1x,'---', . 2(5x,'-------- -------- -------- -------- -------- ')) 310 format(10x,1x,i2.2,1x,i3.3, 5x,5(f8.6,1x),5x,5(f8.6,1x)) write(*,303) write(*,*) c----------------------------------------------------------------------- c c need to populate the full array now: c c rprof_rt(01:05,001:100) c ---> rprof_wt(01:Ws,001:100) c c do W = 1, Ws R = 1 lq = log10(q_w(W)*1.0) fr = (q_w(W)-1)/(10-1) if (q_w(w).ge.00010) then R = 2 fr = (lq-1)/(2-1) endif if (q_w(w).ge.00100) then R = 3 fr = (lq-2)/(3-2) endif if (q_w(w).ge.01000) then R = 4 fr = (lq-3)/(3-2) endif if (q_w(w).ge.10000) then R = 4 fr = 1.00 endif do T = 1, 100 rprof_wt(W,T) = rprof_rt(R,T) + fr*(rprof_rt(R+1,T) . -rprof_rt(R ,T)) cprof_wt(W,T) = cprof_rt(R,T) + fr*(cprof_rt(R+1,T) . -cprof_rt(R ,T)) enddo enddo if (DOLOG) then open(99,file='INFO_W.RQPROF',status='unknown') write(99,'(''# '')') write(99,'(''# '',234(''*''))') write(99,'(''# ***** '')') write(99,'(''# ***** SHOW FINAL TRAPS AND RELEASE PROFILES'')') write(99,'(''# ***** '')') write(99,'(''# '',234(''*''))') write(99,'(''# '')') write(99,'(''# '')') write(99,198) write(99,199) write(99,198) 198 format('#','---',5x,'------',5x,36(' -----')) 199 format('#',' W',5x,' qlev', . 5x,' T=1 T=2 T=3 T=4 T=5', . ' T=6 T=7 T=8 T=9 T=10', . ' T=11 T=12 T=13 T=14 T=15', . ' T=16 T=17 T=18 T=19 T=20', . ' T=25 T=30 T=35 T=40 T=45', . ' T=50 T=55 T=60 T=65 T=70', . ' T=75 T=80 T=85 T=90 T=95', . ' T=100') do W = 1, Ws write(99,'(1x,i3.3,5x,i6.6,5x,40i6)') . W,q_w(W),(int(rprof_wt(w,t)*1e5),t=001,020,001), . (int(rprof_wt(w,t)*1e5),t=025,100,005) if (W.eq.W/25*25.and.W.ne.Ws) then write(99,198) write(99,199) write(99,198) endif enddo write(99,198) write(99,199) write(99,198) write(99,'(''# '')') write(99,'(''# '')') write(99,'(''# '')') write(99,'(''# '')') write(99,'(''# '')') write(99,'(''# '',234(''*''))') write(99,'(''# ***** '')') write(99,'(''# ***** SHOW TRAPS AND CUMULATIVE PROFILES'')') write(99,'(''# ***** '')') write(99,'(''# '',234(''*''))') write(99,'(''# '')') write(99,198) write(99,199) write(99,198) do W = 1, Ws write(99,'(1x,i3.3,5x,i6.6,5x,40i6)') . W,q_w(W),(int(cprof_wt(w,t)*1e5),t=001,020,001), . (int(cprof_wt(w,t)*1e5),t=025,100,005) if (W.eq.W/25*25.and.W.ne.Ws) then write(99,198) write(99,199) write(99,198) endif enddo write(99,198) write(99,199) write(99,198) close(99) endif c---------------------------------------------------------------- c c set it up so that every trap has exactly 1 electron it can grab c in previous models (ACS) I sometimes dealt either with fractional c traps or with bunches of traps ; this will be scaled later c by the overall scaling and perhaps a more detailed column= or c column+row-based additional scaling. c do W = 1, Ws dpde_w(W) = 1.00 enddo return end c********************************************* c**** c**** #include "../ROUTINES/sim_colreadout_l_uvis_w.f" c**** c********************************************* c------------------------------------------------------------ c c This is the workhorse subroutine; it simulates the readout c of one column pixi() and outputs this to pixo() using a single c iteration. It can be called successively to do the transfer c in steps. c subroutine sim_colreadout_l_uvis_w(pixi,pixo,pixf,J1,J2,JDIM, . q_w,dpde_w,NITs, . tprof_w,rprof_wt,cprof_wt,Ws) implicit none integer JDIM real pixi(JDIM) ! input column array real pixo(JDIM) ! outout column array real pixf(JDIM) ! outout column array integer J1, J2 integer q_w(_WDIM_) ! the 5 readout-parameter arrays real dpde_w(_WDIM_) integer NITs integer tprof_w(_WDIM_) real rprof_wt(_WDIM_,100) real cprof_wt(_WDIM_,100) integer Ws integer j, t real pix0 real*8 ftrap integer ttrap real fpix ! fraction of this pixel involved real fopn ! fraction of this trap that is open real ffil ! fraction of this trap that gets filled real dpix ! the amount of charge that gets transferred real*8 padd integer w real*8 pix_1 real*8 pix_2 real*8 pix_3 real*8 padd_2 real*8 padd_3 real*8 prem_3, prem real*8 prem_4 real*8 pmax, prev real fcarry real fcarry0 fcarry0 = 0.00 if (Ws.gt._WDIM_) stop 'Ws.gt._WDIM_' ! more traps than we are allowed c---------------------------------------- c c figure out which traps we don't need to c worry about in this column c pmax = 10. do j = 0001, JDIM pixo(j) = pixi(j) if (pixo(j).gt.pmax) pmax = pixo(j) enddo c----------------------------------------------------------- c c go thru the traps one at a time (from highest to lowest q) c and see when they get filled and emptied; adjust the c pixels accordingly c do W = Ws, 001, -1 if (q_w(W).gt.pmax) goto 333 ftrap = 0.0 ttrap = _TDIM_ fcarry = fcarry0 do j = J1, J2 ! go up the column pixel by pixel pix_1 = pixo(j) if (ttrap.ge.(_TDIM_).and.pix_1.lt.q_w(w)-1) goto 444 if (pixo(j).ge.0) then pix_1 = pixo(j) + fcarry ! step 1, shuffle charge in fcarry = pix_1 - int(pix_1) pix_1 = int(pix_1) endif if (j.gt.J1) then if (pixf(j).lt.pixf(j-1)) . ftrap = pixf(j)/pixf(j-1)*ftrap endif padd_2 = 0. ! step 2, release the charge if (ttrap.lt._TDIM_) then ttrap = ttrap + 1 padd_2 = rprof_wt(w,ttrap)*ftrap endif padd_3 = 0. prem_3 = 0. if (pix_1.ge.q_w(w)) then prem_3 = dpde_w(w)/NITs*pixf(j) if (ttrap.lt._TDIM_) . padd_3 = cprof_wt(w,ttrap)*ftrap ttrap = 0 ftrap = prem_3 endif pixo(j) = pixo(j) + padd_2 + padd_3 - prem_3 444 continue enddo!j 333 continue enddo!w return end c********************************************* c**** c**** #include "../ROUTINES/noisesig.f" c**** c********************************************* c--------------------------------------------------------------- c c this function will return a gaussian random noise deviate in c terms of sigma. The return value will have a gaussian distribution c centered about 0 with a sigma of 1 ( exp( (-x**2)/2 ) ) c real function noise_sig() implicit none real rand noise_sig = cos(3.1415927*2*rand(0))*sqrt(-2*log(rand(0))) return end c********************************************* c**** c**** #include "../ROUTINES/writfits_r4.f" c**** c********************************************* c----------------------------------------------------- c c this just writes a real*4 fits image c subroutine writfits_r4(FILE,pix,PXDIMX,PXDIMY) implicit none character*80 FILE integer PXDIMX,PXDIMY real pix(PXDIMX,PXDIMY) integer nbyte0 integer nbyteE integer nbyte1 integer nbyte2 integer nbper integer i,ios character*2880 buffc byte buffb(2880) equivalence (buffb,buffc) integer ifirst, i1, i2 integer np1, np2, npt integer k character*80 FILEU character*70 HDR(25) common/HDR/HDR FILEU = FILE do i = 75,2,-1 if (FILE(i:i+4).eq.'.fits') FILEU = FILE(1:i+4) enddo open(10,file=FILEU,status='unknown', . err=900,recl=2880,form='UNFORMATTED', . access='DIRECT') write(buffc( 0*80+1: 1*80),'(''SIMPLE = T'')') write(buffc( 1*80+1: 2*80),'(''BITPIX = -32'')') write(buffc( 2*80+1: 3*80),'(''NAXIS ='',8x,i12)') 2 write(buffc( 3*80+1: 4*80),'(''NAXIS1 ='',8x,i12)') PXDIMX write(buffc( 4*80+1: 5*80),'(''NAXIS2 ='',8x,i12)') PXDIMY write(buffc( 5*80+1: 6*80),'(''DATATYPE='',9a)') " 'REAL*4' " write(buffc(06*80+1:07*80),'(''COMMENT '',a05)') ' ' write(buffc(07*80+1:08*80),'(''COMMENT '',a05)') ' ' write(buffc(08*80+1:09*80),'(''COMMENT '',a05)') ' ' write(buffc(09*80+1:10*80),'(''CRPIX1 ='',a70)') HDR(01) write(buffc(10*80+1:11*80),'(''CRPIX2 ='',a70)') HDR(02) write(buffc(11*80+1:12*80),'(''CRVAL1 ='',a70)') HDR(03) write(buffc(12*80+1:13*80),'(''CRVAL2 ='',a70)') HDR(04) write(buffc(13*80+1:14*80),'(''CTYPE1 ='',a70)') HDR(05) write(buffc(14*80+1:15*80),'(''CTYPE2 ='',a70)') HDR(06) write(buffc(15*80+1:16*80),'(''CD1_1 ='',a70)') HDR(07) write(buffc(16*80+1:17*80),'(''CD1_2 ='',a70)') HDR(08) write(buffc(17*80+1:18*80),'(''CD2_1 ='',a70)') HDR(09) write(buffc(18*80+1:19*80),'(''CD2_2 ='',a70)') HDR(10) write(buffc(19*80+1:20*80),'(''ORIENTAT='',a70)') HDR(11) write(buffc(20*80+1:21*80),'(''PA_APER ='',a70)') HDR(12) write(buffc(21*80+1:22*80),'(''PA_V3 ='',a70)') HDR(13) write(buffc(22*80+1:23*80),'(''DATE-OBS='',a70)') HDR(14) write(buffc(23*80+1:24*80),'(''TIME-OBS='',a70)') HDR(15) write(buffc(24*80+1:25*80),'(''EXPTIME ='',a70)') HDR(16) write(buffc(25*80+1:26*80),'(''ROOTNAME='',a70)') HDR(17) write(buffc(26*80+1:27*80),'(''TARGNAME='',a70)') HDR(18) write(buffc(27*80+1:28*80),'(''RA_TARG ='',a70)') HDR(19) write(buffc(28*80+1:29*80),'(''DEC_TARG='',a70)') HDR(20) write(buffc(29*80+1:30*80),'(''PROPOSID='',a70)') HDR(21) write(buffc(30*80+1:31*80),'(''FILTER1 ='',a70)') HDR(22) write(buffc(31*80+1:32*80),'(''FILTER2 ='',a70)') HDR(23) write(buffc(33*80+1:34*80),'(''VAFACTOR='',a70)') HDR(24) write(buffc(32*80+1:33*80),'(''CCDGAIN ='',a70)') HDR(25) write(buffc(33*80+1:34*80),'(''COMMENT '',a05)') ' ' write(buffc(34*80+1:35*80),'(''COMMENT '',a05)') ' ' write(buffc(35*80+1:36*80),'(''END '')') do k = 00, 34 if (buffc(k*80+11:k*80+30).eq.' ') . write(buffc(k*80+01:k*80+80),'(80('' ''))') enddo write(10,rec=i,iostat=ios) buffc ifirst = i+1 i1 = i i2 = i nbper = 4*PXDIMX*PXDIMY npt = PXDIMX*PXDIMY nbyte1 = 1 nbyte2 = nbper i1 = i+1 + nbyte1/2880 i2 = i+1 + nbyte2/2880 do i = i1, i2, 1 nbyte0 = (i-ifirst)*2880+ 1 nbyteE = (i-ifirst)*2880+2880 np1 = (nbyte0-nbyte1)/4 + 1 np2 = (nbyteE-nbyte1)/4 + 1 call pix2buff_r4(buffb,pix,np1,npt) write(10,rec=i,iostat=ios) buffc enddo close(10) return 900 continue print*,'writfits_r4.f ERROR' print*,' FILEU: ',FILEU stop end c------------------------------------------------------- c c subroutine pix2buff_r4(buff,pix,n1,nt) implicit none byte buff(2880) real*4 pix(*) integer n1,nt byte b(4) real*4 r equivalence(r,b) integer i, npu, nbu logical LINUX_FLAG common /LINUX_/LINUX_FLAG do i = 1, 720 npu = n1+i-1 nbu = (i-1)*4 if (npu.ge.1.and.npu.le.nt) r = pix(npu) if (.not.LINUX_FLAG) then buff(nbu+1) = b(1) buff(nbu+2) = b(2) buff(nbu+3) = b(3) buff(nbu+4) = b(4) endif if (LINUX_FLAG) then buff(nbu+1) = b(4) buff(nbu+2) = b(3) buff(nbu+3) = b(2) buff(nbu+4) = b(1) endif enddo return end c********************************************* c**** c**** #include "../ROUTINES/readfits_r4.f" c**** c********************************************* c-------------------------------------------------- c c this just reads in an r4 fits image c subroutine readfits_r4(FILE,pix,NDIMX,NDIMY) implicit none character*80 FILE integer NDIMX,NDIMY real pix(NDIMX,NDIMY) character*80 FILEU character*70 INFO(10) common / fitsinfo / INFO integer naxes integer laxis(3) common/laxis3_/laxis character*8 field character*70 stream integer nbyte0 integer nbyteE integer nbyte1 integer nbyte2 integer nbper integer i,ios, k integer j character*2880 buffc byte buffb(2880) equivalence (buffc,buffb) real*4 buffr(0720) integer ii,nn,nx,ny integer nxx, nyy integer ifirst, i1, i2 integer np1, np2, npt integer nextend integer nread real bscale, bzero integer bitpix logical DIAG data DIAG /.false./ character*70 HDR(25) common/HDR/HDR FILEU = FILE do i = 75,2,-1 if (FILE(i:i+4).eq.'.fits') FILEU = FILE(1:i+4) enddo do i = 1, 25 HDR(i) = ' ' enddo if (DIAG) then print*,'enter readfits_r4...' print*,'FILE: ',FILE(1:60) endif open(10,file=FILEU,status='old', . err=900,recl=2880,form='UNFORMATTED', . access='DIRECT') if (DIAG) print*,'...opened' naxes = -1 laxis(1) = 1 laxis(2) = 1 laxis(3) = 1 nextend = 0 do i = 1, 10 INFO(i) = ' ' enddo i = 0 nread = 0 100 continue i = i + 1 read(10,rec=i,iostat=ios) buffc if (DIAG) print*,'READREC: ',i do k = 0, 35, 1 if (DIAG) write(*,'(i4,1x,i4,1x,a80)') . i,k,buffc(k*80+1:k*80+80) field = buffc(k*80+01:k*80+08) stream = buffc(k*80+10:k*80+79) if (field.eq.'NAXIS ') read(stream,*) naxes if (field.eq.'NAXIS1 ') read(stream,*) laxis(1) if (field.eq.'NAXIS2 ') read(stream,*) laxis(2) if (field.eq.'NAXIS3 ') read(stream,*) laxis(3) if (field.eq.'NEXTEND ') read(stream,*) nextend if (field.eq.'BITPIX ') read(stream,*) bitpix if (field.eq.'BSCALE ') read(stream,*) bscale if (field.eq.'BZERO ') read(stream,*) bzero if (field.eq.'EXPTIME ') INFO(1) = stream if (field.eq.'FILTNAM1') INFO(2) = stream if (field.eq.'FILENAME') INFO(3) = stream if (field.eq.'DATE-OBS') INFO(4) = stream if (field.eq.'TIME-OBS') INFO(5) = stream if (field.eq.'DEC_TARG') INFO(6) = stream if (field.eq.'RA_TARG ') INFO(7) = stream if (field.eq.'PA_V3 ') INFO(8) = stream if (field.eq.'PROPOSID') INFO(9) = stream if (field.eq.'CRPIX1 ') HDR(01) = stream if (field.eq.'CRPIX2 ') HDR(02) = stream if (field.eq.'CRVAL1 ') HDR(03) = stream if (field.eq.'CRVAL2 ') HDR(04) = stream if (field.eq.'CTYPE1 ') HDR(05) = stream if (field.eq.'CTYPE2 ') HDR(06) = stream if (field.eq.'CD1_1 ') HDR(07) = stream if (field.eq.'CD1_2 ') HDR(08) = stream if (field.eq.'CD2_1 ') HDR(09) = stream if (field.eq.'CD2_2 ') HDR(10) = stream if (field.eq.'ORIENTAT') HDR(11) = stream if (field.eq.'PA_APER ') HDR(12) = stream if (field.eq.'PA_V3 ') HDR(13) = stream if (field.eq.'DATE-OBS') HDR(14) = stream if (field.eq.'TIME-OBS') HDR(15) = stream if (field.eq.'EXPTIME ') HDR(16) = stream if (field.eq.'ROOTNAME') HDR(17) = stream if (field.eq.'TARGNAME') HDR(18) = stream if (field.eq.'RA_TARG ') HDR(19) = stream if (field.eq.'DEC_TARG') HDR(20) = stream if (field.eq.'PROPOSID') HDR(21) = stream if (field.eq.'FILTER1 ') HDR(22) = stream if (field.eq.'FILTER2 ') HDR(23) = stream if (field.eq.'VAFACTOR') HDR(24) = stream if (field.eq.'END ') goto 101 enddo goto 100 101 continue nread = nread + 1 if (DIAG) then print*,'----------------------------------------' print*,' NREAD: ',nread print*,'NEXTEND: ',nextend print*,' NAXIS: ',naxes print*,' LAXIS: ',laxis(1),laxis(2),laxis(3) print*,' BITPIX: ',bitpix print*,' BSCALE: ',bscale print*,' BZERO: ',bzero endif ifirst = i+1 i1 = i i2 = i nbper = 4*laxis(1)*laxis(2) npt = laxis(1)*laxis(2) nbyte1 = 1 nbyte2 = nbper i1 = i+1 + nbyte1/2880 i2 = i+1 + nbyte2/2880 if (BITPIX.ne.-32) then print*,'BITPIX.ne.-32... unreal!' stop endif do i = i1, i2, 1 read(10,rec=i,iostat=ios) buffc nbyte0 = (i-ifirst)*2880+ 1 nbyteE = (i-ifirst)*2880+2880 np1 = (nbyte0-nbyte1)/4 + 1 np2 = (nbyteE-nbyte1)/4 + 1 call buff2pix_r4(buffb,buffr,0001,0720) do ii = 001, 720 nn = np1 + (ii-1) ny = 1 + (nn-1)/laxis(1) nx = nn-(ny-1)*laxis(1) if (nx.ge.001.and.nx.le.NDIMX.and. . ny.ge.001.and.ny.le.NDIMY) then pix(nx,ny) = buffr(ii) nxx = nx nyy = ny endif enddo if (ny.gt.NDIMY) goto 899 if (DIAG) write(*,1115) i,np1,np2,npt,nxx,nyy 1115 format(1x,i8,1x,i10,1x,i10,1x,i10,1x,2i6) enddo 899 close(10) if (DIAG) write(*,1115) i,np1,np2,npt,nxx,nyy return 900 continue print*,' ' print*,'READFITS ERROR: ' print*,' ' write(*,'('' could not read in file: '',80a)') FILEU print*,' ' stop end subroutine buff2pix_r4(buff,pix,n1,nt) implicit none byte buff(2880) real pix(*) integer n1,nt byte b(4) real r equivalence(r,b) integer i, npu, nbu logical LINUX_FLAG common /LINUX_/LINUX_FLAG do i = 1, 720 npu = n1+i-1 nbu = (i-1)*4 if (.not.LINUX_FLAG) then b(1) = buff(nbu+1) b(2) = buff(nbu+2) b(3) = buff(nbu+3) b(4) = buff(nbu+4) endif if (LINUX_FLAG) then b(4) = buff(nbu+1) b(3) = buff(nbu+2) b(2) = buff(nbu+3) b(1) = buff(nbu+4) endif if (npu.ge.1.and.npu.le.nt) pix(npu) = r enddo return end