Exemple #1
0
def fitQSO(parser):
    (options, args) = parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    if len(args) == 2:
        othersavefilename = args[1]
        othersavefile = open(othersavefilename, 'rb')
        otherparams = pickle.load(othersavefile)
        othersavefile.close()
    else:
        otherparams = {}
    savefilename = args[0]
    if os.path.exists(savefilename):
        savefile = open(savefilename, 'rb')
        params = pickle.load(savefile)
        type = pickle.load(savefile)
        band = pickle.load(savefile)
        mean = pickle.load(savefile)
        savefile.close()
        if params.has_key('.fit'): params.pop('.fit')
        for key in params.keys():
            if (params[key].has_key('gamma') and \
                    (params[key]['gamma'] < 0. or params[key]['gamma'] > 2.)) \
                    or (params[key].has_key('gammagr') \
                            and (params[key]['gammagr'] < 0. \
                                     or params[key]['gammagr'] > 2.)):
                print "Popping bad gamma ..."
                params.pop(key)
    else:
        params = {}
        type = options.type
        mean = options.mean
        band = options.band
    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/'
    if options.resampled:
        if os.path.exists(options.infile):
            samplefile = open(options.infile, 'rb')
            qsos = pickle.load(samplefile)
            samplefile.close()
        else:
            print "'--resampled' is set, but -i filename does not exist ..."
            print "Returning ..."
            return None
    else:
        qsos = QSOfilenames(dir=dir)
    savecount = 0
    count = len(params)
    for qso in qsos:
        if options.resampled:
            key = qso[0]
        else:
            key = os.path.basename(qso)
        if params.has_key(key) or otherparams.has_key(key):
            continue
        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
        print "Working on " + str(count) + ": " + key
        if options.resampled:
            v = qso[1]
        else:
            v = VarQso(qso, flux=options.fitflux)
        if v.nepochs(band) < 20:
            print "This object does not have enough epochs ..."
            continue
        params[key] = v.fit(band=band, type=type, loglike=True, mean=mean)
        if _DEBUG:
            print params[key]
        if params[key]['loglike'] == -numpy.finfo(numpy.dtype(
                numpy.float64)).max:
            print "Popping bad fit ..."
            params.pop(key)
        if savecount == options.saveevery:
            print "Saving ..."
            save_pickles(params, type, band, mean, savefilename)
            savecount = 0
        savecount += 1
        count += 1
    save_pickles(params, type, band, mean, savefilename)
    print "All done"
Exemple #2
0
def fitQSO(parser):
    (options,args)= parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    if len(args) == 2:
        othersavefilename= args[1]
        othersavefile= open(othersavefilename,'rb')
        otherparams= pickle.load(othersavefile)
        othersavefile.close()
    else:
        otherparams= {}
    savefilename= args[0]
    if os.path.exists(savefilename):
        savefile= open(savefilename,'rb')
        params= pickle.load(savefile)
        type= pickle.load(savefile)
        band= pickle.load(savefile)
        mean= pickle.load(savefile)
        savefile.close()
        if params.has_key('.fit'): params.pop('.fit')
        for key in params.keys():
            if (params[key].has_key('gamma') and \
                    (params[key]['gamma'] < 0. or params[key]['gamma'] > 2.)) \
                    or (params[key].has_key('gammagr') \
                            and (params[key]['gammagr'] < 0. \
                                     or params[key]['gammagr'] > 2.)):
                print "Popping bad gamma ..."
                params.pop(key)
    else:
        params= {}
        type= options.type
        mean= options.mean
        band= options.band
    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/'
    if options.resampled:
        if os.path.exists(options.infile):
            samplefile= open(options.infile,'rb')
            qsos= pickle.load(samplefile)
            samplefile.close()
        else:
            print "'--resampled' is set, but -i filename does not exist ..."
            print "Returning ..."
            return None
    else:
        qsos= QSOfilenames(dir=dir)
    savecount= 0
    count= len(params)
    for qso in qsos:
        if options.resampled:
            key= qso[0]
        else:
            key= os.path.basename(qso)
        if params.has_key(key) or otherparams.has_key(key):
            continue
        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
        print "Working on "+str(count)+": "+key
        if options.resampled:
            v= qso[1]
        else:
            v= VarQso(qso,flux=options.fitflux)
        if options.lownepochs:
            if v.nepochs(band) >= 20:
                print "This object has too many epochs ..."
                continue
            elif v.nepochs(band) < 3:
                print "This object does not have enough epochs ..."
                continue
        elif not options.lownepochs and v.nepochs(band) < 20:
            print "This object does not have enough epochs ..."
            continue
        params[key]= v.fit(band=band,type=type,loglike=True,mean=mean)
        if _DEBUG:
            print params[key]
        if params[key]['loglike'] == -numpy.finfo(numpy.dtype(numpy.float64)).max:
            print "Popping bad fit ..."
            params.pop(key)
        if savecount == options.saveevery:
            print "Saving ..."
            save_pickles(params,type,band,mean,savefilename)
            savecount= 0
        savecount+= 1
        count+= 1
    save_pickles(params,type,band,mean,savefilename)
    print "All done"
Exemple #3
0
def skew0957(parser):
    (options,args)= parser.parse_args()
    if len(args) == 0:
        parser.print_help()
        return
    savefilename= args[0]
    #Read data
    if options.vanderriest:
        vA= VarQso('../data/0957-A.fits',band=options.band)
        vB= VarQso('../data/0957-B.fits',band=options.band)
    else:
        vA= VarQso('../data/L0957-A_%s.fits' % options.band,band=options.band)
        vB= VarQso('../data/L0957-B_%s.fits' % options.band,band=options.band)
    if not options.fitsfile is None and os.path.exists(options.fitsfile):
        fitsfile= open(options.fitsfile,'rb')
        paramsA= pickle.load(fitsfile)
        paramsB= pickle.load(fitsfile)
        paramsAB= pickle.load(fitsfile)
        fitsfile.close()
        vA.LCparams= paramsA
        vB.LCparams= paramsB
        vA.LCtype='powerlawSF'
        vB.LCtype='powerlawSF'
        vA.LCmean= 'const'
        vB.LCmean= 'const'
        vA.fitband= options.band
        vB.fitband= options.band
    else:
        #Fit for means
        print "Fitting SF for both images ..."
        vA.fit(options.band,mean='const')
        vB.fit(options.band,mean='const')
    #Load into single new VarQso
    newm= list(vA.m[options.band]-vA.LCparams['m'])
    newerrm= list(vA.err_m[options.band])
    newmjd= list(vA.mjd[options.band])
    newm.extend(list(vB.m[options.band]+nu.mean(vA.m[options.band])
                                 -nu.mean(vB.m[options.band])-vB.LCparams['m']))
    newerrm.extend(list(vB.err_m[options.band]))
    newmjd.extend(list(vB.mjd[options.band]-417./365.25))#shift lagged B
    v= VarQso(newmjd,newm,newerrm,band=options.band,medianize=False)
    if not options.fitsfile is None and os.path.exists(options.fitsfile):
        v.LCparams= paramsAB
        v.LCtype='powerlawSF'
        v.LCmean= 'zero'
        v.fitband= options.band
        v.LC= LCmodel(trainSet=v._build_trainset(options.band),
                      type=v.LCtype,mean=v.LCmean,
                      init_params=paramsAB)
    else:
        v.fit(options.band)
    if not options.fitsfile is None and not os.path.exists(options.fitsfile):
        save_pickles(options.fitsfile,vA.LCparams,vB.LCparams,v.LCparams)
    taus= nu.arange(1.,201.,1.)/365.25
    thisskew= v.skew(taus,options.band,duration=0.7)
    thisgaussskews= nu.zeros((options.nsamples,len(taus)))
    print "Calculating simulated skews ..."
    for ii in range(options.nsamples):
        #First re-sample
        redshift= 1.41
        o= v.resample(v.mjd[options.band],band=options.band,noconstraints=True,
                      wedge=options.wedge,
                      wedgerate=options.wedgerate*365.25/(1.+redshift),
                      wedgetau=(1.+redshift)) #1yr
        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.05**v.LCparams['gamma']/0.05)
            o.LCmean= 'zero' #bc we remove the mean when resampling wedge
            #Set up LC with correct params
            o.LC= LCmodel(trainSet=o._build_trainset(options.band),
                          type=o.LCtype,mean=o.LCmean,
                          init_params=o.LCparams)
        thisgaussskews[ii,:]= o.skew(taus,options.band,duration=0.7)
    skews= {}
    gaussskews= {}
    skews['0957']= thisskew
    gaussskews['0957']= thisgaussskews
    save_pickles(savefilename,skews,gaussskews,
                 None,options.band,None,taus)
    return None