Exemple #1
0
def dumpFits(parser):
    (options, args) = parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    if options.outfilename is None:
        print "-o filename options needs to be set ..."
        print "Returning ..."
        return None
    #load fits
    if os.path.exists(args[0]):
        savefile = open(args[0], 'rb')
        params = pickle.load(savefile)
        type = pickle.load(savefile)
        band = pickle.load(savefile)
        mean = pickle.load(savefile)
        savefile.close()
    else:
        raise IOError("input file does not exist ...")
    #dump fits, first the arrays
    cols = []
    #Get basic quasar stuff
    qsos = open_qsos(options.inputfilename)
    qsoDict = {}
    ii = 0
    for qso in qsos:
        qsoDict[qso.oname.strip().replace(' ', '') + '.fit'] = ii
        ii += 1
    paramsKeys = params[params.keys()[0]].keys()
    qsoKeys = params.keys()
    for key in paramsKeys:
        thiscol = []
        for qso in qsoKeys:
            try:
                thiscol.append(params[qso][key][0])
            except IndexError:
                thiscol.append(params[qso][key])
        cols.append(
            pyfits.Column(name=key, format='D', array=numpy.array(thiscol)))
    if not options.star and not options.nuvx and not options.uvx \
            and not options.rrlyrae and not options.nuvxall:
        #RA, Dec, name, z, key
        thiscol = []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].ra)
        cols.append(
            pyfits.Column(name='ra', format='D', array=numpy.array(thiscol)))
        thiscol = []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].dec)
        cols.append(
            pyfits.Column(name='dec', format='D', array=numpy.array(thiscol)))
        thiscol = []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].oname)
        cols.append(
            pyfits.Column(name='oname',
                          format='30A',
                          array=numpy.array(thiscol)))
        thiscol = []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].z)
        cols.append(
            pyfits.Column(name='z', format='D', array=numpy.array(thiscol)))
    else:
        if options.star:
            dir = '../data/star/'
        elif options.nuvx:
            dir = '../data/nuvx/'
        elif options.uvx:
            dir = '../data/uvx/'
        elif options.nuvxall:
            dir = '../data/nuvx_all/'
        elif options.rrlyrae:
            dir = '../data/rrlyrae/'
        #RA, Dec, key
        racol = []
        deccol = []
        if options.rrlyrae: idcol = []
        for qso in qsoKeys:
            #open relevant file
            file = fu.table_fields(os.path.join(dir, qso))
            indx = (file.mjd_g == 0.)
            if True in indx:
                deccol.append(file.dec[indx][0])
                racol.append(file.ra[indx][0])
            else:
                deccol.append(file.dec[0])
                racol.append(file.ra[0])
            if options.rrlyrae: idcol.append(file.id[0])
        cols.append(
            pyfits.Column(name='dec', format='D', array=numpy.array(deccol)))
        cols.append(
            pyfits.Column(name='ra', format='D', array=numpy.array(racol)))
        if options.rrlyrae:
            cols.append(
                pyfits.Column(name='ID', format='K', array=numpy.array(idcol)))
    thiscol = []
    for qso in qsoKeys:
        thiscol.append(qso)
    cols.append(
        pyfits.Column(name='key', format='30A', array=numpy.array(thiscol)))
    columns = pyfits.ColDefs(cols)
    tbhdu = pyfits.new_table(columns)
    tbhdu.writeto(options.outfilename)
    #create header
    outfile = pyfits.open(options.outfilename)
    hdr = outfile[1].header
    hdr.update('type', type, 'type of covariance fit')
    hdr.update('band', type, 'band(s) fit')
    hdr.update('mean', type, 'type of mean fit')
    return None
Exemple #2
0
def dumpFits(parser):
    (options,args)= parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    if options.outfilename is None:
        print "-o filename options needs to be set ..."
        print "Returning ..."
        return None
    #load fits
    if os.path.exists(args[0]):
        savefile= open(args[0],'rb')
        params= pickle.load(savefile)
        type= pickle.load(savefile)
        band= pickle.load(savefile)
        mean= pickle.load(savefile)
        savefile.close()
    else:
        raise IOError("input file does not exist ...")
    #dump fits, first the arrays
    cols= []
    #Get basic quasar stuff
    qsos= open_qsos(options.inputfilename)
    qsoDict= {}
    ii=0
    for qso in qsos:
        qsoDict[qso.oname.strip().replace(' ', '')+'.fit']= ii
        ii+= 1
    paramsKeys= params[params.keys()[0]].keys()
    qsoKeys= params.keys()
    for key in paramsKeys:
        thiscol= []
        for qso in qsoKeys:
            try:
                thiscol.append(params[qso][key][0])
            except IndexError:
                thiscol.append(params[qso][key])
        cols.append(pyfits.Column(name=key,format='D',
                                  array=numpy.array(thiscol)))
    if not options.star and not options.nuvx and not options.uvx \
            and not options.rrlyrae and not options.nuvxall:
        #RA, Dec, name, z, key
        thiscol= []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].ra)
        cols.append(pyfits.Column(name='ra',format='D',
                                  array=numpy.array(thiscol)))
        thiscol= []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].dec)
        cols.append(pyfits.Column(name='dec',format='D',
                                  array=numpy.array(thiscol)))
        thiscol= []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].oname)
        cols.append(pyfits.Column(name='oname',format='30A',
                                  array=numpy.array(thiscol)))
        thiscol= []
        for qso in qsoKeys:
            thiscol.append(qsos[qsoDict[qso]].z)
        cols.append(pyfits.Column(name='z',format='D',
                                  array=numpy.array(thiscol)))
    else:
        if options.star:
            dir= '../data/star/'
        elif options.nuvx:
            dir= '../data/nuvx/'
        elif options.uvx:
            dir= '../data/uvx/'
        elif options.nuvxall:
            dir= '../data/nuvx_all/'
        elif options.rrlyrae:
            dir= '../data/rrlyrae/'
        #RA, Dec, key
        racol= []
        deccol= []
        if options.rrlyrae: idcol= []
        for qso in qsoKeys:
            #open relevant file
            file= fu.table_fields(os.path.join(dir,qso))
            indx= (file.mjd_g == 0.)
            if True in indx:
                deccol.append(file.dec[indx][0])
                racol.append(file.ra[indx][0])
            else:
                deccol.append(file.dec[0])
                racol.append(file.ra[0])
            if options.rrlyrae: idcol.append(file.id[0])
        cols.append(pyfits.Column(name='dec',format='D',
                                  array=numpy.array(deccol)))
        cols.append(pyfits.Column(name='ra',format='D',
                                  array=numpy.array(racol)))
        if options.rrlyrae:
            cols.append(pyfits.Column(name='ID',format='K',
                                      array=numpy.array(idcol)))
    thiscol= []
    for qso in qsoKeys:
        thiscol.append(qso)
    cols.append(pyfits.Column(name='key',format='30A',
                              array=numpy.array(thiscol)))
    columns= pyfits.ColDefs(cols)
    tbhdu= pyfits.new_table(columns)
    tbhdu.writeto(options.outfilename)
    #create header
    outfile= pyfits.open(options.outfilename)
    hdr= outfile[1].header
    hdr.update('type',type,'type of covariance fit')
    hdr.update('band',type,'band(s) fit')
    hdr.update('mean',type,'type of mean fit')
    return None
Exemple #3
0
def skewQSO(parser):
    (options,args)= parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    savefilename= args[0]
    if os.path.exists(savefilename):
        savefile= open(savefilename,'rb')
        skews= pickle.load(savefile)
        gaussskews= pickle.load(savefile)
        fittype= pickle.load(savefile)
        band= pickle.load(savefile)
        mean= pickle.load(savefile)
        taus= pickle.load(savefile)      
        savefile.close()
    else:
        skews= {}
        gaussskews= {}
        fittype= options.type
        mean= options.mean
        band= options.band
        taus= nu.arange(options.dtau,options.taumax,options.dtau)/365.25
    if os.path.exists(options.fitsfile):
        fitsfile= open(options.fitsfile,'rb')
        params= pickle.load(fitsfile)
        fitsfile.close()
    else:
        raise IOError("--fitsfile (or -f) has to be set to the file holding the best-fits")
    if options.star:
        dir= '../data/star/'
    elif options.nuvx:
        dir= '../data/nuvx/'
    elif options.nuvxall:
        dir= '../data/nuvx_all/'
    elif options.uvx:
        dir= '../data/uvx/'
    elif options.rrlyrae:
        dir= '../data/rrlyrae/'
    else:
        dir= '../data/s82qsos/'
    qsos= QSOfilenames(dir=dir)
    if not options.split is None:
        splitarr= nu.arange(len(qsos)) / int(nu.ceil(len(qsos)/float(options.split)))
        splitDict= {}
        for ii, qso in enumerate(qsos):
            key= os.path.basename(qso)
            splitDict[key]= splitarr[ii]
        print "Running bin %i ..." % (options.rah-1)
    savecount= 0
    count= len(skews)
    if not options.star and not options.rrlyrae:
        #Read master file for redshifts
        dataqsos= open_qsos()
        qsoDict= {}
        ii=0
        for qso in dataqsos:
            qsoDict[qso.oname.strip().replace(' ', '')+'.fit']= ii
            ii+= 1
    for qso in qsos:
        key= os.path.basename(qso)
        if skews.has_key(key):
            continue
        if not options.split is None:
            if splitDict[key] != (options.rah-1):
                continue
        else:
            try:
                if int(key[5:7]) != options.rah and options.rah != -1:
                    continue
            except ValueError:
                if options.rah == -2 or options.rah == -1:
                    pass
                else:
                    print "Skipping ValueError "+key
                    continue
        sys.stdout.write('\r'+_ERASESTR+'\r')
        sys.stdout.flush()
        sys.stdout.write('\rWorking on %s: %s\r' % (str(count),key))
        sys.stdout.flush()
        v= VarQso(qso,flux=options.flux)
        if v.nepochs(band) < 20:
            #print "This object does not have enough epochs ..."
            continue
        #Set best-fit
        if options.flux:
            params[key]['logA']+= 2.*nu.log(nu.log(10.)/2.5)
        if options.mean == 'const':
            params[key]['m']= -nu.log(10.)/2.5*params[key]['m']
        v.LCparams= params[key]
        v.LC= LCmodel(trainSet=v._build_trainset(band),type=fittype,mean=mean,
                      init_params=params[key])
        v.LCtype= fittype
        v.LCmean= mean
        v.fitband= band
        #Now compute skew and Gaussian samples
        try:
            thisskew= v.skew(taus,band)
        except RuntimeError:
            continue
        if options.flux:
            thisskew*= -1.
        thisgaussskews= nu.zeros((options.nsamples,len(taus)))
        for ii in range(options.nsamples):
            #First re-sample
            if options.star or options.rrlyrae:
                redshift= 0.
            else:
                redshift= dataqsos[qsoDict[key]].z
            try:
                o= v.resample(v.mjd[band],band=band,noconstraints=True,
                              wedge=options.wedge,
                              wedgerate=options.wedgerate*365.25/(1.+redshift),
                              wedgetau=(1.+redshift)) #1yr
            except nu.linalg.linalg.LinAlgError:
                if params[key]['gamma'] > 1.5 \
                        or params[key]['logA'] < -10.:
                    continue #re-sampling fails because of bad gamma/logA
                else:
                    print key, params[key]
            o.LCparams= v.LCparams
            o.LC= v.LC
            o.fitband= v.fitband
            o.LCtype= v.LCtype
            o.LCmean= v.LCmean
            if options.wedge:
                o.LCparams['gamma']= 1.
                o.LCparams['logA']= o.LCparams['logA']\
                    +nu.log(0.025**v.LCparams['gamma']/0.025)
                o.LCmean= 'zero' #bc we remove the mean when resampling wedge
                #Set up LC with correct params
                o.LC= LCmodel(trainSet=o._build_trainset(band),
                              type=o.LCtype,mean=o.LCmean,
                              init_params=o.LCparams)
            thisgaussskews[ii,:]= o.skew(taus,band)
            if options.flux:
                thisgaussskews[ii,:]*= -1.
        skews[key]= thisskew
        gaussskews[key]= thisgaussskews
        savecount+= 1
        if savecount == options.saveevery:
            sys.stdout.write('\r'+_ERASESTR+'\r')
            sys.stdout.flush()
            sys.stdout.write('\rSaving ...\r')
            sys.stdout.flush()
            save_pickles(savefilename,skews,gaussskews,fittype,band,mean,taus)
            savecount= 0
        count+= 1
    sys.stdout.write('\r'+_ERASESTR+'\r')
    sys.stdout.flush()
    save_pickles(savefilename,skews,gaussskews,fittype,band,mean,taus)
    print "All done"