Пример #1
0
    def select(self, data0):
        from esutil.numpy_util import strmatch
        from .select import Selector

        selector=Selector()

        logic=selector.get_logic(data0, self['setname'])


        # these can be applied in addition to the set logic
        if 'objtype' in self:
            if self['objtype'] is not None:
                logic=logic & strmatch(data0['model'],self['objtype'])

        for name in ['sratio','s2n','Ts2n','s2','Tmean','mag','prob']:
            rname='%s_range' % name
            if name=='mag':
                name='mag_auto_r'
            if name=='prob':
                name='fit_prob'
            if name=='s2n':
                name='s2n_w'
            if rname in self:
                r=self[rname]
                logic=logic & ((data0[name] > r[0]) & (data0[name] < r[1]))

        w,=where(logic)
        if w.size == 0:
            data=None
        else:
            data=data0[w]
        return data
Пример #2
0
    def get_logic(self, data, setname):
        from esutil.numpy_util import strmatch

        logic = (data['flags']==0) | (data['flags'] == 2**16)

        logic=logic & (data['s2n_w'] > 10) & (data['s2n_w'] < 1.e6)

        # has minimal effect for use1
        #logic=logic & (data['Ts2n'] > 2)   & (data['Ts2n'] < 1.e6)
        # has minimal effect for use1
        #logic=logic & (data['Tmean'] > 2)  & (data['Ts2n'] < 1.e6)

        if setname=='use0':
            # default set
            pass
        elif setname=='use1':

            isdev=strmatch(data['model'],'gdev')
            isexp=strmatch(data['model'],'gexp')

            Ts2n20=(data['Ts2n'] > 20)

            logic=logic & (isexp | (isdev & Ts2n20) )

        elif setname=='use2':

            isexp=strmatch(data['model'],'gexp')
            logic = logic & isexp

        elif setname=='use3':
            Ts2n20=(data['Ts2n'] > 20)
            logic = logic & Ts2n20

        elif setname=='use4':
            isexp=strmatch(data['model'],'gexp')
            Ts2n20=(data['Ts2n'] > 20)
            logic = logic & isexp & Ts2n20

        elif setname=='use5':
            # same as use1 but with Ts2n > 3.5
            isdev=strmatch(data['model'],'gdev')
            isexp=strmatch(data['model'],'gexp')

            Ts2n20=(data['Ts2n'] > 20)
            Ts2n3_5=(data['Ts2n'] > 3.5)

            logic=logic & ((isexp & Ts2n3_5) | (isdev & Ts2n20) )

        else:
            raise ValueError("bad use name: '%s'" % setname)

        return logic
Пример #3
0
def read_output_set(run, psfnums, shnums, 
                    objtype=None, 
                    s2n_field='s2n_w',
                    s2n_min=None,
                    s2n_max=None,
                    s2_max=None,
                    gsens_min=None,
                    gerr_max=None,
                    columns=None,
                    subtract_mean=False,
                    progress=False):
    """
    Read some data based on the input.
    
    Multiple files may be read. If files are missing they will be skipped

    Note only a single shear number is expected but many psfnums can
    be sent.  
    
    Only those with flags==0 are kept.

    parameters
    ----------
    run: string
        run id
    psfnums: integers
        the psf numbers to read
    shnums: integers
        The shear numbers to read.
    objtype: string, optional
        optionally select only objects with this best-fit model
    columns: optional
        only return these columns
    subtract_mean: bool, optional
        Calculate the mean g and subtract it
    """
    from esutil.numpy_util import strmatch, combine_arrlist
    psfnums=get_psfnums(psfnums)
    shnums=get_shnums(shnums)

    ntot=len(shnums)*len(psfnums)*62

    itot=1
    if progress:
        from progressbar import ProgressBar
        prog=ProgressBar(width=70, color='green')
        #prog=ProgressBar(width=70, color='green', block='▣', empty='□')
        #prog=ProgressBar(width=70, color='green', block='◧', empty='◫')
        #prog=ProgressBar(width=70, color='green', block='■', empty='□')
        #prog=ProgressBar(width=70, color='green', block='=', empty='-')

    datalist=[]
    for shnum in shnums:
        shlist=[]
        for psfnum in psfnums:
            for ccd in xrange(1,62+1):
                if progress:
                    #prog.update(frac=float(itot)/ntot,
                    #            message='%s/%s' % (itot,ntot))
                    prog.update(frac=float(itot)/ntot)
                    itot += 1

                fname=get_output_path(run=run, psfnum=psfnum, shnum=shnum, 
                                      ccd=ccd, ftype='shear')
                if os.path.exists(fname):
                    data0=read_fits_output(run=run, psfnum=psfnum, 
                                           shnum=shnum, ccd=ccd, 
                                           ftype='shear',
                                           columns=columns, 
                                           verbose=False)

                    logic=(data0['flags']==0) | (data0['flags']==65536)
                    if objtype:
                        logic=logic & strmatch(data0['model'],objtype)

                    if s2n_min is not None:
                        logic=logic & (data0[s2n_field] > s2n_min)
                    if s2n_max is not None:
                        logic=logic & (data0[s2n_field] < s2n_max)

                    if s2_max is not None:
                        logic=logic & (data0['s2'] < s2_max)
                    if gsens_min is not None:
                        logic=logic \
                            & (data0['gsens'][:,0] > gsens_min) \
                            & (data0['gsens'][:,1] > gsens_min)
                    if gerr_max is not None:
                        g1err=sqrt(data0['gcov'][:,0,0])
                        g2err=sqrt(data0['gcov'][:,1,1])
                        logic=logic \
                            & (g1err < gerr_max) & (g2err < gerr_max)



                    wkeep,=where(logic)
                    if wkeep.size==0:
                        print 'No objects passed cuts'
                    else:
                        data0=data0[wkeep]
                        shlist.append(data0)

        shdata=combine_arrlist(shlist)

        if subtract_mean:
            g1mean = shdata['g'][:,0].mean()
            g2mean = shdata['g'][:,1].mean()
            shdata['g'][:,0] -= g1mean
            shdata['g'][:,1] -= g2mean
        datalist.append(shdata)

    if len(datalist)==0:
        raise RuntimeError("no outputs were found")
    data=combine_arrlist(datalist)
    return data