def get_all_obs(infiles): # parses data from each file into a structured array and adds it to a list. # Output: a list of structured arrays and a list of header dictionaries # corresponding to each object all_obs_list = [] all_headerdicts = [] for infile in infiles: (obs,headerdict) = des_io.parse_observations(infile) all_obs_list.append(obs) all_headerdicts.append(headerdict) return all_obs_list, all_headerdicts
def extract_colors(infiles): nobjects = len(infiles) triggers = np.zeros(nobjects, dtype='bool') colors = np.zeros(nobjects) ifluxes = np.zeros(nobjects) detections = np.zeros(nobjects,dtype='bool') deltaT = [] SNIDset = set() zcutflag = 0 allowmultitrig = True for i, infile in enumerate(infiles): # get a list with all the values in the data table (obs,headerdict)= des_io.parse_observations(infile) # skip files associated with objects w/ redshift > zmax if zcutflag and photoZcut(headerdict): continue # Separate deep and shallow fields deep_sel = deepfield(obs) deep = obs[deep_sel] shallow = obs[~deep_sel] # Look just at shallow fields for now # make a list of all the nites there were observations and make a nitedictlist nitelist = np.unique(shallow['MJD'].astype('int')) zobs, zMJD, zflux, zSNR = obsinband(shallow, 'z') # identify whether there was a z observation on a nite and get its MJD iobs, iMJD, iflux, iSNR = obsinband(shallow, 'i') # identify whether there was an i observation on a nite and get its MJD ztrig = zobs == 2 itrig = iobs == 2 zdet = zobs > 0 idet = iobs > 0 # get boolean selector list of common trigger nites for z and i observations zsel, isel,cnites = common_nites(zMJD, iMJD, zobs, iobs) trig_flags = ztrig[zsel] & itrig[isel] # if SNR is defined (only for sims) make sure at least one trigger obs has adequate SNR if zSNR.any(): zSNRpass = zSNR >= 5 iSNRpass = iSNR >= 5 trig_flags = trig_flags & (zSNRpass[zsel] | iSNRpass[isel]) trig = np.any(trig_flags) MJDtrig = zMJD[zsel][trig_flags] if len(MJDtrig)>1: deltaT.append(MJDtrig.max() - MJDtrig.min()) # cut out object if it has multiple triggers within maxtrignites if ((not allowmultitrig) and multitrig(MJDtrig,maximumtrignites)): continue # record whether the trigger has a follow up observation for a full detection detections[i] = followupdet(MJDtrig,zMJD,iMJD) if detections[i]: SNIDset.add(headerdict['SNID']) triggers[i] = trig if trig: zflux1 = zflux[ztrig & zsel][0] # this doesn't quite work if there are multiple triggers -- need fix iflux1 = iflux[itrig & isel][0] colors[i] = -2.5*(np.log10(iflux1)-np.log10(zflux1)) if np.isnan(colors[i]): print zflux1,iflux1,headerdict['SNID'] ifluxes[i] = iflux[iobs > 0][-1] - iflux[iobs > 0][0] return triggers, colors, ifluxes, np.sum(detections), SNIDset,np.array(deltaT)