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