info = K2.get_K2_info(int(target),poly_fit_deg = 8) if info['error'] == 'None': star = [] star_data_tess = get_data(target,tess_data) if star_data_tess != ['nan']*3: star = [target] + star_data_tess else: star = [target] + get_data(target,faint_data) star_qual = [target] data_by_segs = info['subtraction_by_segments'] for seg in data_by_segs: t0 = seg[0][0]*1440 t1 = seg[0][-1]*1440 num_i = (t1-t0)/KEPLER_CADENCE if len(seg[0]) < .5*num_i: star_qual.append('BAD') star.append('nan') else: star_qual.append('GOOD') sigma = np.std(seg[1]) star.append(sigma) star_qual.append(len(seg[0])/float(num_i)) result.append(star) quality.append(star_qual) else: errors.append(target) datalib.write_dat(result,'evaluation.csv',',') datalib.write_dat(errors,'bad_data.csv','') datalib.write_dat(quality,'quality.csv',',')
info = K2.get_K2_info(int(target), poly_fit_deg=8) if info['error'] == 'None': star = [] star_data_tess = get_data(target, tess_data) if star_data_tess != ['nan'] * 3: star = [target] + star_data_tess else: star = [target] + get_data(target, faint_data) star_qual = [target] data_by_segs = info['subtraction_by_segments'] for seg in data_by_segs: t0 = seg[0][0] * 1440 t1 = seg[0][-1] * 1440 num_i = (t1 - t0) / KEPLER_CADENCE if len(seg[0]) < .5 * num_i: star_qual.append('BAD') star.append('nan') else: star_qual.append('GOOD') sigma = np.std(seg[1]) star.append(sigma) star_qual.append(len(seg[0]) / float(num_i)) result.append(star) quality.append(star_qual) else: errors.append(target) datalib.write_dat(result, 'evaluation.csv', ',') datalib.write_dat(errors, 'bad_data.csv', '') datalib.write_dat(quality, 'quality.csv', ',')
def evaluate(folder_name): #ignores NumPy warnings warnings.simplefilter('ignore', np.RankWarning) #loads K2 tess and K2 faint catalogs tess_data = dl.read_dat('k2tess.csv',',') del tess_data[0] tess_data_ids = dl.get_column(tess_data,0) tess_data_is_dwarf = dl.get_column(tess_data,1) tess_data_teff = dl.get_column(tess_data,2) tess_data_mag = dl.get_column(tess_data,3) faint_data = dl.read_dat('k2faint.csv',',') del faint_data[0] faint_data_ids = dl.get_column(faint_data,0) faint_data_is_dwarf = dl.get_column(faint_data,1) faint_data_teff = dl.get_column(faint_data,2) faint_data_mag = dl.get_column(faint_data,3) output = [] #2d array that will be stored in a .csv file. [[id,is_dwarf,teff,mag,sigma1,sigma2...],[id,is_dwarf,teff,mag,sigma1,sigma2...]...] not_on_catalog = [] #list of the stars that could not be found in the tess and faint catalogs dirlist = os.listdir(folder_name) for n in range(0,len(dirlist)): fname = dirlist[n] data = dl.read_dat(folder_name + '/' + fname,',') #2d array containing the light curve. [[time,flux,segment],[time,flux,segment],...] #Searching on K2 catalogs for info star_id = '' is_dwarf = '' teff = 0 mag = 0 for i in range(0,len(tess_data_ids)): if str(tess_data_ids[i]).replace('.0','') in fname: star_id = tess_data_ids[i] is_dwarf = tess_data_is_dwarf[i] teff = tess_data_teff[i] mag = tess_data_mag[i] break del tess_data_ids[i],tess_data_mag[i],tess_data_teff[i],tess_data_is_dwarf[i] if star_id == '': #if it was not found in the tess catalog, it searches the faint catalog for i in range(0,len(faint_data_ids)): if str(faint_data_ids[i]).replace('.0','') in fname: star_id = faint_data_ids[i] is_dwarf = faint_data_is_dwarf[i] teff = faint_data_teff[i] mag = faint_data_mag[i] break del faint_data_ids[i],faint_data_mag[i],faint_data_teff[i],faint_data_is_dwarf[i] print star_id + ' : ' + str((n*100.0/len(dirlist))) + '%' #To know how much is already done if star_id != '' and len(data) > 1: #The code only runs if the star is on the catalog and there is data on the lightcurve # #Computes standard deviations for each segment: # time = [] flux = [] segment = [] for row in data: time.append(float(row[0])) flux.append(float(row[1])) segment.append(row[2]) #Deletes >3sigma points and nan segments sigma = np.std(flux) avg = np.average(flux) i = 0 end = len(time) while i in range(0,end): if abs(flux[i]-avg) > 3*sigma or str(segment[i]) == 'nan': del time[i],flux[i],segment[i] end = len(time) i+=1 #Splits into segments n = 0 #Number of segments for i in range(1,len(segment)): if str(segment[-i]) != 'nan': n = int(float(segment[-i]))+1 break time_seg = [] flux_seg = [] for i in range(0,n): time_seg.append([]) flux_seg.append([]) for i in range(0,len(time)): if segment[i] != 'nan': time_seg[int(float(segment[i]))].append(time[i]) flux_seg[int(float(segment[i]))].append(flux[i]) #Subtracts the polynomial fit (4 deg) in each segment and computes the standard deviation sigmas = [] for i in range(0,len(time_seg)): if time_seg[i] != [] and len(time_seg[i]) > .5*(time_seg[i][0]-time_seg[i][-1])/KEPLER_CADENCE: #This conditional checks if there is data in the segment and also that the segment have more than the 50% of the expected points poly = np.poly1d(np.polyfit(time_seg[i],flux_seg[i],4)) for j in range(0,len(time_seg[i])): flux_seg[i][j] -= poly(time_seg[i][j]) sigmas.append(np.std(flux_seg[i])) else: sigmas.append('nan') output.append([star_id,is_dwarf,teff,mag]+sigmas) else: not_on_catalog.append(fname) print not_on_catalog dl.write_dat(output,'evaluations/evaluation_of_' + folder_name + '.csv',',')