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"
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"
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