def do_rg_corr(self): self['rgcorrstats'] = None if 'rgstats' not in self or 'psfstats' not in self: return if self['psfstats'] is None or self['rgstats'] is None: return if len(self['rgstats']) == 1: # this is when we couldn't make f0 return if self['psfstats']['whyflag'] != 0 or self['rgstats']['whyflag'] != 0: return # apply basic correction rgs = self['rgstats'] psfs = self['psfstats'] #e1,e2,R,flags = admom.correct(rgs['Irr']+rgs['Icc'], # rgs['e1'],rgs['e2'],rgs['a4'], # psfs['Irr']+psfs['Icc'], # psfs['e1'],psfs['e2'],psfs['a4']) # the PSF is supposed to be gaussian now, put in a4=0? e1,e2,R,flags = admom.correct(rgs['Irr']+rgs['Icc'], rgs['e1'],rgs['e2'],rgs['a4'], psfs['Irr']+psfs['Icc'], psfs['e1'],psfs['e2'],0.0) self['rgcorrstats'] = {'e1':e1,'e2':e2,'R':R,'flags':flags} if self.verbose: print("rgcorrstats:") pprint(self['rgcorrstats'])
def _fit_stacks(self): import admom sdata=self._stack_data self.res_fmom=self._run_fmom(sdata['image_stack'], sdata['psf_stack']) if 'imsum' in sdata: self.res_sums=self._run_sums_shear() ares = self._run_admom(sdata['image_stack'], sdata['image_skyvar']) psf_ares = self._run_admom(sdata['psf_stack'], sdata['psf_skyvar']) T=ares['Irr']+ares['Icc'] Tpsf=psf_ares['Irr'] + psf_ares['Icc'] e1corr,e2corr,R,flags=admom.correct(T, ares['e1'], ares['e2'],ares['a4'], Tpsf, psf_ares['e1'], psf_ares['e2'], psf_ares['a4']) ares['e1corr'] = e1corr ares['e2corr'] = e2corr ares['R'] = R ares['compea4_flags']=flags self._ares=ares self._psf_ares=psf_ares print 'Admom R:',R print 'admom sh1: ',0.5*e1corr, 'sh2: ',0.5*e2corr print 'sh1/Rshear:',0.5*e1corr/self.Rshear,'sh2/Rshear:',0.5*e2corr/self.Rshear psf_fitter = self._fit_stack(sdata['psf_stack'], sdata['psf_skyvar'], psf_ares, ngauss=self.ngauss_psf, name='PSF') psf_gmix=psf_fitter.get_gmix() fitter=self._fit_stack(sdata['image_stack'], sdata['image_skyvar'], ares, psf=psf_gmix, ngauss=self.ngauss_obj, name='Images') self._fitter=fitter self._psf_fitter=psf_fitter res=self._fitter.get_result() sh1,sh2=0.5*res['pars'][2], 0.5*res['pars'][3] err1=0.5*res['perr'][2] err2=0.5*res['perr'][3] fmt='%15.6f' print_pars(res['pars'], front='pars: ', fmt='%15.6f') print_pars(res['perr'], front='perr: ', fmt='%15.6f') print 'fit: sh1: %.6g +/- %.6g sh2: %.6g +/- %.6g' % (sh1,err1,sh2,err2) print 'fit/Rshear: ',sh1/self.Rshear,sh2/self.Rshear
def do_basic_corr(self): if 'imstats' not in self or 'psfstats' not in self: raise ValueError("run do_psf_admom() and do_admom() first") if self['psfstats']['whyflag'] != 0 or self['imstats']['whyflag'] != 0: self['corrstats'] = None return # apply basic correction ims = self['imstats'] psfs = self['psfstats'] e1,e2,R,flags = admom.correct(ims['Irr']+ims['Icc'], ims['e1'],ims['e2'],ims['a4'], psfs['Irr']+psfs['Icc'], psfs['e1'],psfs['e2'],psfs['a4']) self['corrstats'] = {'e1':e1,'e2':e2,'R':R,'flags':flags} if self.verbose: print("corrstats:") pprint(self['corrstats'])
def _measure_gals_admom(self): import admom nbin=self.im_stacks.size Tpsf=self.psf_ares['Irr'] + self.psf_ares['Icc'] e1p=self.psf_ares['e1'] e2p=self.psf_ares['e2'] a4p=self.psf_ares['a4'] st=zeros(nbin, dtype=[('s2n','f8'), ('e1','f8'), ('e1err','f8'), ('e2','f8'), ('e2err','f8'), ('T','f8'), ('R','f8')]) self._ares_dicts=[] for i in xrange(nbin): print '-'*70 s2n_min=self.im_stacks['s2n_min'][i] s2n_max=self.im_stacks['s2n_max'][i] print 's2n: [%.2f,%.2f]' % (s2n_min,s2n_max) im=self.im_stacks['images'][i,:,:] skysig=sqrt(self.im_stacks['skyvar'][i]) images.multiview(im) cen=array(im.shape)/2. ares = admom.admom(im, cen[0], cen[1], sigsky=skysig, guess=4.0, nsub=self.nsub) T=ares['Irr']+ares['Icc'] corr=admom.correct(T, ares['e1'], ares['e2'],ares['a4'], Tpsf, e1p, e2p, a4p) e1,e2,R,flags=corr sh1=0.5*e1/self.Rshear sh2=0.5*e2/self.Rshear uncer=ares['uncer']/R err=0.16/sqrt(self.im_stacks['nstack'][i]) mess='sh1: %s +/- %s sh2: %s +/- %s R: %s flags: %s' mess=mess % (sh1,err,sh2,err,R,flags) print mess st['s2n'][i] = (s2n_min+s2n_max)/2. st['e1'][i] = e1 st['e1err'][i] = err st['e2'][i] = e2 st['e2err'][i] = err st['R'][i] = R st['T'][i] = T self._ares_dicts.append(ares) self._admom_shear = st
def run(self): import lensing import admom i=0 j=0 e1vals=numpy.zeros(self.nimage) e2vals=numpy.zeros(self.nimage) gvals=numpy.zeros(self.nimage/2) while i < self.nimage: if (((i+1) % 100) == 0): print '%d/%d' % (i+1,self.nimage) g=self.gprior.sample1d(1) imd1,imd2=self._make_pair(g[0]) ares1 = self._run_admom(imd1['image'], imd1['image_skyvar']) if ares1['whyflag'] != 0: print 'bad1' continue psfres1 = self._run_admom(imd1['psf_image'], imd1['psf_skyvar']) if psfres1['whyflag'] != 0: print 'badpsf1' continue ares2 = self._run_admom(imd2['image'], imd2['image_skyvar']) if ares2['whyflag'] != 0: print 'bad2' continue psfres2 = self._run_admom(imd2['psf_image'], imd2['psf_skyvar']) if psfres2['whyflag'] != 0: print 'badpsf2' continue gvals[i] = g for ares,pres in zip([ares1,ares2],[psfres1,psfres2]): T=ares['Irr']+ares['Icc'] Tpsf=pres['Irr'] + pres['Icc'] e1,e2,R,flags=admom.correct(T, ares['e1'], ares['e2'],ares['a4'], Tpsf, pres['e1'], pres['e2'], pres['a4']) if flags != 0: raise ValueError("compea4 failed") e1vals[j] = e1 e2vals[j] = e2 j += 1 i += 1 data=numpy.zeros(e1vals.size, dtype=[('e1','f8'),('e2','f8')]) data['e1'] = e1vals data['e2'] = e2vals self._data=data self.calc_shear()
def _measure_gals_admom(self): import admom nbin=self.im_stacks.size Tpsf=self.psf_ares['Irr'] + self.psf_ares['Icc'] e1p=self.psf_ares['e1'] e2p=self.psf_ares['e2'] a4p=self.psf_ares['a4'] st=zeros(nbin, dtype=[('s2n','f8'), ('e1','f8'), ('e1err','f8'), ('e2','f8'), ('e2err','f8'), ('T','f8'), ('R','f8')]) for i in xrange(nbin): print '-'*70 s2n_min=self.im_stacks['s2n_min'][i] s2n_max=self.im_stacks['s2n_max'][i] print 's2n: [%.2f,%.2f]' % (s2n_min,s2n_max) im_real=self.im_stacks['images_real'][i,:,:] im_imag=self.im_stacks['images_imag'][i,:,:] imc = self._make_complex_image(im_real, im_imag) im=self._make_cspace_image(imc) if False and i==3: import images images.multiview(im) skysig=sqrt(self.im_stacks['skyvar'][i]) cen=array(im.shape)/2. ares = admom.admom(im, cen[0], cen[1], sigsky=skysig, guess=4.0, nsub=self.nsub) T=ares['Irr']+ares['Icc'] corr=admom.correct(T, ares['e1'], ares['e2'],ares['a4'], Tpsf, e1p, e2p, a4p) e1,e2,R,flags=corr uncer=ares['uncer']/R err2=( 0.32**2 + uncer**2)/self.im_stacks['nstack'][i] err=sqrt(err2) mess='e1: %s +/- %s e2: %s +/- %s R: %s flags: %s' mess=mess % (e1,err,e2,err,R,flags) print mess st['s2n'][i] = (s2n_min+s2n_max)/2. st['e1'][i] = e1 st['e1err'][i] = err st['e2'][i] = e2 st['e2err'][i] = err st['R'][i] = R st['T'][i] = T self._admom_shear = st