Esempio n. 1
0
def classify_lasair_light_curves(object_names=('ZTF18acsovsw', ), plot=True):
    light_curve_list = []
    for object_name in object_names:
        try:
            mjd, passband, mag, magerr, photflag, zeropoint, ra, dec, objid, redshift, mwebv = read_lasair_json(
                object_name)
        except Exception as e:
            print(e)
            continue

        flux = 10.**(-0.4 * (mag - zeropoint))
        fluxerr = np.abs(flux * magerr * (np.log(10.) / 2.5))

        passband = np.where((passband == 1) | (passband == '1'), 'g', passband)
        passband = np.where((passband == 2) | (passband == '2'), 'r', passband)

        # Set photflag detections when S/N > 5
        photflag2 = np.zeros(len(flux))
        photflag2[flux / fluxerr > 5] = 4096
        photflag2[np.where(mjd == min(mjd[photflag2 == 4096]))] = 6144

        mjd_first_detection = min(mjd[photflag == 4096])
        photflag[np.where(mjd == mjd_first_detection)] = 6144

        deleteindexes = np.where(((passband == 3) | (passband == '3'))
                                 | (mjd > mjd_first_detection)
                                 & (photflag == 0))
        print("Deleting indexes {} at mjd {} and passband {}".format(
            deleteindexes, mjd[deleteindexes], passband[deleteindexes]))
        mjd, passband, flux, fluxerr, zeropoint, photflag = delete_indexes(
            deleteindexes, mjd, passband, flux, fluxerr, zeropoint, photflag)

        light_curve_list += [(mjd, flux, fluxerr, passband, zeropoint,
                              photflag, ra, dec, objid, redshift, mwebv)]

    classification = Classify(light_curve_list,
                              known_redshift=True,
                              bcut=False,
                              zcut=None)
    predictions, time_steps = classification.get_predictions(
        return_predictions_at_obstime=False)
    print(predictions)

    if plot:
        classification.plot_light_curves_and_classifications(
            step=True, use_interp_flux=False)
        # classification.plot_light_curves_and_classifications(step=False, use_interp_flux=True)
        # classification.plot_light_curves_and_classifications(step=False, use_interp_flux=False)
        # classification.plot_classification_animation_step()
        # classification.plot_classification_animation()

    return classification.orig_lc, classification.timesX, classification.y_predict
Esempio n. 2
0
def main():
    mjd = [
        57433.4816, 57436.4815, 57439.4817, 57451.4604, 57454.4397, 57459.3963,
        57462.418, 57465.4385, 57468.3768, 57473.3606, 57487.3364, 57490.3341,
        57493.3154, 57496.3352, 57505.3144, 57513.2542, 57532.2717, 57536.2531,
        57543.2545, 57546.2703, 57551.2115, 57555.2669, 57558.2769, 57561.1899,
        57573.2133, 57433.5019, 57436.4609, 57439.4587, 57444.4357, 57459.4189,
        57468.3142, 57476.355, 57479.3568, 57487.3586, 57490.3562, 57493.3352,
        57496.2949, 57505.3557, 57509.2932, 57513.2934, 57518.2735, 57521.2739,
        57536.2321, 57539.2115, 57543.2301, 57551.1701, 57555.2107, 57558.191,
        57573.1923, 57576.1749, 57586.1854
    ]
    flux = [
        2.0357230e+00, -2.0382695e+00, 1.0084588e+02, 5.5482742e+01,
        1.4867026e+01, -6.5136810e+01, 1.6740545e+01, -5.7269131e+01,
        1.0649184e+02, 1.5505235e+02, 3.2445984e+02, 2.8735449e+02,
        2.0898877e+02, 2.8958893e+02, 1.9793906e+02, -1.3370536e+01,
        -3.9001358e+01, 7.4040916e+01, -1.7343750e+00, 2.7844931e+01,
        6.0861992e+01, 4.2057487e+01, 7.1565346e+01, -2.6085690e-01,
        -6.8435440e+01, 17.573107, 41.445435, -110.72664, 111.328964,
        -63.48336, 352.44907, 199.59058, 429.83075, 338.5255, 409.94604,
        389.71262, 195.63905, 267.13318, 123.92461, 200.3431, 106.994514,
        142.96387, 56.491238, 55.17521, 97.556946, -29.263103, 142.57687,
        -20.85057, -0.67210346, 63.353024, -40.02601
    ]
    fluxerr = [
        42.784702, 43.83665, 99.98704, 45.26248, 43.040398, 44.00679,
        41.856007, 49.354336, 105.86439, 114.0044, 45.697918, 44.15781,
        60.574158, 93.08788, 66.04482, 44.26264, 91.525085, 42.768955,
        43.228336, 44.178196, 62.15593, 109.270035, 174.49638, 72.6023,
        48.021034, 44.86118, 48.659588, 100.97703, 148.94061, 44.98218,
        139.11194, 71.4585, 47.766987, 45.77923, 45.610615, 60.50458,
        105.11658, 71.41217, 43.945534, 45.154167, 43.84058, 52.93122,
        44.722775, 44.250145, 43.95989, 68.101326, 127.122025, 124.1893,
        49.952255, 54.50728, 114.91599
    ]
    passband = [
        'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g',
        'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'r', 'r', 'r',
        'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r',
        'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r'
    ]
    zeropoint = [
        27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5,
        27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5,
        27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5,
        27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5, 27.5,
        27.5, 27.5, 27.5
    ]
    photflag = [
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4096, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 4096, 6144, 4096, 4096, 4096, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    ]
    objid = 'MSIP_01_NONIa-0001_10400862'
    ra = 3.75464531293933
    dec = 0.205076187109334
    redshift = 0.233557
    mwebv = 0.0228761

    light_curve_list = [(mjd, flux, fluxerr, passband, zeropoint, photflag, ra,
                         dec, objid, redshift, mwebv)]

    classification = Classify(light_curve_list)
    predictions = classification.get_predictions()
    print(predictions)

    classification.plot_light_curves_and_classifications()
    classification.plot_classification_animation()
Esempio n. 3
0
	def do(self,debug=False):
		
		# run this under Admin
		user = User.objects.get(username='******')

		# get New, Watch, FollowupRequested, Following
		transients_to_classify = \
			Transient.objects.filter(Q(status__name = 'New') |
									 Q(status__name = 'Watch') |
									 Q(status__name = 'FollowupRequested') |
									 Q(status__name = 'Following'))

		light_curve_list_z,light_curve_list_noz,transient_list_z,transient_list_noz = [],[],[],[]
		for t in transients_to_classify: #.filter(Q(name = '2019np') | Q(name = '2019gf')):
			ra, dec, objid, redshift = t.ra, t.dec, t.name,t.z_or_hostz()

			if not t.mw_ebv is None:
				mwebv = t.mw_ebv
			else:
				mwebv = 0.0


			photdata = get_all_phot_for_transient(user, t.id)
			if not photdata: continue
			gobs = photdata.filter(band__name = 'g-ZTF')
			robs = photdata.filter(band__name = 'r-ZTF')
			if not len(gobs) and not len(robs): continue
			mjd, passband, flux, fluxerr, mag, magerr, zeropoint, photflag = \
				np.array([]),np.array([]),[],[],[],[],[],[]
			
			if redshift: transient_list_z += [t]
			else: transient_list_noz += [t]
				
			first_detection_set = False
			for obs,filt in zip([gobs.order_by('obs_date'),robs.order_by('obs_date')],['g','r']):
				for p in obs:
					if p.data_quality: continue
					if len(np.where((filt == passband) & (np.abs(mjd - date_to_mjd(p.obs_date)) < 0.001))[0]): continue

					mag += [p.mag]
					if p.mag_err:
						magerr += [p.mag_err]
						fluxerr_obs = 0.4*np.log(10)*p.mag_err
					else:
						magerr += [0.001]
						fluxerr_obs = 0.4*np.log(10)*0.001

					flux_obs = 10**(-0.4*(p.mag-27.5))
					mjd = np.append(mjd,[date_to_mjd(p.obs_date)])
					flux += [flux_obs]
					fluxerr += [fluxerr_obs]
					zeropoint += [27.5]
					passband = np.append(passband,[filt])
					
					if flux_obs/fluxerr_obs > 5 and not first_detection_set:
						photflag += [6144]
						first_detection_set = True
					elif flux_obs/fluxerr_obs > 5:
						photflag += [4096]
					else: photflag += [0]
					#except: import pdb; pdb.set_trace()

			try:
				if redshift:
					light_curve_info = (mjd, flux, fluxerr, passband,
										zeropoint, photflag, ra, dec, objid, redshift, mwebv)
					light_curve_list_z += [light_curve_info,]
				else:
					light_curve_info = (mjd, flux, fluxerr, passband, zeropoint, photflag, ra, dec, objid, None, mwebv)			
					light_curve_list_noz += [light_curve_info,]
			except:
				import pdb; pdb.set_trace()

		if len(light_curve_list_noz):
			classification_noz = Classify(light_curve_list_noz, known_redshift=False, bcut=False, zcut=None)
			predictions_noz = classification_noz.get_predictions()
		if len(light_curve_list_z):
			classification_z = Classify(light_curve_list_z, known_redshift=True, bcut=False, zcut=None)
			predictions_z = classification_z.get_predictions()
			
		if debug:
			import matplotlib
			matplotlib.use('MacOSX')
			import matplotlib.pyplot as plt
			plt.ion()
			classification_z.plot_light_curves_and_classifications()

		for tl in [transient_list_z,transient_list_noz]:
			for t,i in zip(tl,range(len(tl))):
				best_predictions = predictions_z[0][i][-1,:]

				adjusted_best_predictions = np.zeros(10)
				idx,outclassnames,PIa = 0,[],0
				for j in range(len(classification_z.class_names)):
					if classification_z.class_names[j] == 'Pre-explosion': continue
					elif classification_z.class_names[j].startswith('SNIa'): PIa += best_predictions[j]
					else:
						outclassnames += [classification_z.class_names[j]]
						adjusted_best_predictions[idx] = best_predictions[j]
						idx += 1
				outclassnames += ['SN Ia']
				outclassnames = np.array(outclassnames)
				adjusted_best_predictions[9] = PIa

				print(t.name,outclassnames[adjusted_best_predictions == np.max(adjusted_best_predictions)][0])
				transient_class = outclassnames[adjusted_best_predictions == np.max(adjusted_best_predictions)][0]
				photo_class = TransientClass.objects.filter(name = classdict[transient_class])

				if len(photo_class):
					t.photo_class = photo_class[0]
					t.save()
				else:
					print('class %s not in DB'%classdict[transient_class])
					raise RuntimeError('class %s not in DB'%classdict[transient_class])
Esempio n. 4
0
def classify_lasair_light_curves(
        object_names=('ZTF18acsovsw', ), plot=True, figdir='.'):
    light_curve_list = []
    peakfluxes_g, peakfluxes_r = [], []
    mjds, passbands, mags, magerrs, zeropoints, photflags = [], [], [], [], [], []
    obj_names = []
    ras, decs, objids, redshifts, mwebvs = [], [], [], [], []
    peakmags_g, peakmags_r = [], []
    for object_name in object_names:
        try:
            mjd, passband, mag, magerr, photflag, zeropoint, ra, dec, objid, redshift, mwebv = read_lasair_json(
                object_name)
            sortidx = np.argsort(mjd)
            mjds.append(mjd[sortidx])
            passbands.append(passband[sortidx])
            mags.append(mag[sortidx])
            magerrs.append(magerr[sortidx])
            zeropoints.append(zeropoint[sortidx])
            photflags.append(photflag[sortidx])
            obj_names.append(object_name)
            ras.append(ra)
            decs.append(dec)
            objids.append(objid)
            redshifts.append(redshift)
            mwebvs.append(mwebv)
            peakmags_g.append(min(mag[passband == 1]))
            peakmags_r.append(min(mag[passband == 2]))

        except Exception as e:
            print(e)
            continue

        flux = 10.**(-0.4 * (mag - zeropoint))
        fluxerr = np.abs(flux * magerr * (np.log(10.) / 2.5))

        passband = np.where((passband == 1) | (passband == '1'), 'g', passband)
        passband = np.where((passband == 2) | (passband == '2'), 'r', passband)

        # Set photflag detections when S/N > 5
        photflag2 = np.zeros(len(flux))
        photflag2[flux / fluxerr > 5] = 4096
        photflag2[np.where(mjd == min(mjd[photflag2 == 4096]))] = 6144

        mjd_first_detection = min(mjd[photflag == 4096])
        photflag[np.where(mjd == mjd_first_detection)] = 6144

        deleteindexes = np.where(((passband == 3) | (passband == '3'))
                                 | (mjd > mjd_first_detection)
                                 & (photflag == 0))
        if deleteindexes[0].size > 0:
            print("Deleting indexes {} at mjd {} and passband {}".format(
                deleteindexes, mjd[deleteindexes], passband[deleteindexes]))
        mjd, passband, flux, fluxerr, zeropoint, photflag = delete_indexes(
            deleteindexes, mjd, passband, flux, fluxerr, zeropoint, photflag)

        light_curve_list += [(mjd, flux, fluxerr, passband, photflag, ra, dec,
                              objid, redshift, mwebv)]

        try:
            dummy = max(flux[passband == 'g'])
            dummy = max(flux[passband == 'r'])
        except Exception as e:
            print(e)
            continue

        peakfluxes_g.append(max(flux[passband == 'g']))
        peakfluxes_r.append(max(flux[passband == 'r']))

    # import sys
    # import pickle
    # with open('save_real_ZTF_unprocessed_data_snia_osc_12nov2019.npz', 'wb') as f:
    #     pickle.dump([mjds, passbands, mags, magerrs, photflags, zeropoints, ras, decs, objids, redshifts, mwebvs], f)
    # # np.savez('save_real_ZTF_unprocessed_data_snia_osc_12nov2019.npz', mjds=mjds, passbands=passbands, mags=mags, magerrs=magerrs, photflags=photflags, zeropoints=zeropoints, ras=ras, decs=decs, objids=objids, redshifts=redshifts, mwebvs=mwebvs)# , peakflux_g=peakfluxes_g, peakflux_r=peakfluxes_r)
    # print("finished")
    # # # sys.exit(0)
    # # with open('save_real_ZTF_unprocessed_data_snia_osc_12nov2019.npz', 'rb') as f:
    # #     a = pickle.load(f)

    classification = Classify(known_redshift=True, bcut=False, zcut=None)
    predictions, time_steps = classification.get_predictions(
        light_curve_list, return_predictions_at_obstime=False)
    print(predictions)

    if plot:
        # try:
        classification.plot_light_curves_and_classifications(
            step=True,
            use_interp_flux=False,
            figdir=figdir,
            plot_matrix_input=True)
        # except Exception as e:
        #     print(e)
        # classification.plot_light_curves_and_classifications(step=False, use_interp_flux=True)
        # classification.plot_light_curves_and_classifications(step=False, use_interp_flux=False)
        # classification.plot_classification_animation_step()
        # classification.plot_classification_animation()

    return classification.orig_lc, classification.timesX, classification.y_predict
        1.9793906e+02, -1.3370536e+01, -3.9001358e+01, 7.4040916e+01, -1.7343750e+00, 2.7844931e+01, 6.0861992e+01,
        4.2057487e+01, 7.1565346e+01, -2.6085690e-01, -6.8435440e+01, 17.573107, 41.445435, -110.72664, 111.328964,
        -63.48336, 352.44907, 199.59058, 429.83075, 338.5255, 409.94604, 389.71262, 195.63905, 267.13318, 123.92461,
        200.3431, 106.994514, 142.96387, 56.491238, 55.17521, 97.556946, -29.263103, 142.57687, -20.85057, -0.67210346,
        63.353024, -40.02601]
fluxerr = [42.784702, 43.83665, 99.98704, 45.26248, 43.040398, 44.00679, 41.856007, 49.354336, 105.86439, 114.0044,
           45.697918, 44.15781, 60.574158, 93.08788, 66.04482, 44.26264, 91.525085, 42.768955, 43.228336, 44.178196,
           62.15593, 109.270035, 174.49638, 72.6023, 48.021034, 44.86118, 48.659588, 100.97703, 148.94061, 44.98218,
           139.11194, 71.4585, 47.766987, 45.77923, 45.610615, 60.50458, 105.11658, 71.41217, 43.945534, 45.154167,
           43.84058, 52.93122, 44.722775, 44.250145, 43.95989, 68.101326, 127.122025, 124.1893, 49.952255, 54.50728,
           114.91599]
passband = ['g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g', 'g',
            'g', 'g', 'g', 'g', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r',
            'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r']
photflag = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4096, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4096,
            6144, 4096, 4096, 4096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
objid = 'transient_1'
ra = 3.75464531293933
dec = 0.205076187109334
redshift = 0.233557
mwebv = 0.0228761

light_curve_list = [(mjd, flux, fluxerr, passband, photflag, ra, dec, objid, redshift, mwebv)]

classification = Classify()
predictions, time_steps = classification.get_predictions(light_curve_list)
print(predictions)

classification.plot_light_curves_and_classifications()
classification.plot_classification_animation()