parameter (maxpar = 100, maxstr=500) real alp(maxpar,maxpar), beta(maxpar), par(maxpar) real x(maxstr), y(maxstr), z(11,maxstr) integer iframe(maxstr) character name*80, oldframe*80 open(1,file='psf.lis',status='old') n=0 nframe=0 oldframe = ' ' 1 read(1,'(a)',end=99) name l=index(name,' ') -1 if (name(1:8) .ne. oldframe(1:8)) then nframe = nframe+1 oldframe = name end if open(2,file=name(1:l),status='old') read(2,*) niter, chi2 if (chi2 .lt. 2000) then n=n+1 do i=1,11 read(2,*) j, z(i,n) end do read(2,*) read(2,*) id, x(n), y(n) x(n) = x(n) - 400 y(n) = y(n) - 400 iframe(n) = nframe end if goto 1 99 continue do i=4,11 if (i .eq. 4) then npar = 5 + nframe else npar=6 end if do ipar=1,npar beta(ipar) = 0. do jpar=1,npar alp(jpar,ipar) =0 . end do end do do istar=1,n do ipar=1,npar beta(ipar) = beta(ipar) + & z(i,istar)*func(ipar,x(istar),y(istar),iframe(istar)) do jpar=1,npar alp(jpar,ipar) = alp(jpar,ipar) + & func(ipar,x(istar),y(istar),iframe(istar))* & func(jpar,x(istar),y(istar),iframe(istar)) end do end do end do call invers(alp,maxpar,npar,ist) if (ist .ne. 0) then print *, 'Error inverting matrix', i do ipar=1,npar print *, ipar, alp(ipar,ipar) end do pause end if call vmul(alp,maxpar,npar,beta,par) print 101, i, (par(ipar),ipar=1,npar) 101 format(i3,25(1pe12.4)) end do stop end function func(ipar,x,y,iframe) func = 0. if (ipar .eq. 1) then func = x else if (ipar .eq. 2) then func = y else if (ipar .eq. 3) then func = x**2 else if (ipar .eq. 4) then func = y**2 else if (ipar .eq. 5) then func = x*y else if (ipar .eq. 5+iframe) then func = 1. end if return end