Skip to content

Instantly share code, notes, and snippets.

@dannygoldstein
Last active February 26, 2019 21:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dannygoldstein/4c92a6830621a282afbae5a53a7cf757 to your computer and use it in GitHub Desktop.
Save dannygoldstein/4c92a6830621a282afbae5a53a7cf757 to your computer and use it in GitHub Desktop.
stack light curves
var binsize = slider.value;
var fluxalph = ((binsize == 0) ? 1. : 0.1);
for (var i = 0; i < toggle.labels.length; i++) {
var fluxsource = eval("obs" + i).data_source;
var binsource = eval("bin" + i).data_source;
var fluxerrsource = eval("obserr" + i).data_source;
var binerrsource = eval("binerr" + i).data_source;
var minmjd = Math.min.apply(Math, fluxsource.data['mjd']);
var date = new Date(); // a new date
var time = date.getTime(); // the timestamp, not neccessarely using UTC as current time
var maxmjd = ((time / 86400000) - (date.getTimezoneOffset()/1440) + 40587.);
binsource.data['mjd'] = [];
binsource.data['flux'] = [];
binsource.data['fluxerr'] = [];
binsource.data['filter'] = [];
binsource.data['color'] = [];
binsource.data['lim_mag'] = [];
binsource.data['mag'] = [];
binsource.data['magerr'] = [];
binerrsource.data['xs'] = [];
binerrsource.data['ys'] = [];
binerrsource.data['color'] = [];
for (var j = 0; j < fluxsource.get_length(); j++){
fluxsource.data['alpha'][j] = fluxalph;
fluxerrsource.data['alpha'][j] = fluxalph;
}
if (binsize > 0){
// now do the binning
var k = 0;
var curmjd = minmjd;
var mjdbins = [curmjd];
while (curmjd < maxmjd){
curmjd += binsize;
mjdbins.push(curmjd);
}
var nbins = mjdbins.length - 1;
for (var l = 0; l < nbins; l++) {
// calculate the flux, fluxerror, and mjd of the bin
var flux = [];
var weight = [];
var mjd = [];
var limmag = [];
var ivarsum = 0;
for (var m = 0; m < fluxsource.get_length(); m++){
if ((fluxsource.data['mjd'][m] < mjdbins[l + 1]) && (fluxsource.data['mjd'][m] >= mjdbins[l])){
let fluxvar = fluxsource.data['fluxerr'][m] * fluxsource.data['fluxerr'][m];
let ivar = 1 / fluxvar;
weight.push(ivar);
flux.push(fluxsource.data['flux'][m]);
mjd.push(fluxsource.data['mjd'][m]);
limmag.push(fluxsource.data['lim_mag']);
ivarsum += ivar;
}
}
var myflux = 0;
var mymjd = 0;
if (weight.length == 0){
continue;
}
for (var n = 0; n < weight.length; n++){
myflux += weight[n] * flux[n] / ivarsum;
mymjd += weight[n] * mjd[n] / ivarsum;
}
var myfluxerr = Math.sqrt(1 / ivarsum);
if (myflux / myfluxerr > 5.){
var mymag = -2.5 * Math.log10(myflux) + 25;
var mymagerr = Math.abs(-2.5 * myfluxerr / myflux / Math.log(10));
} else {
var mymag = NaN;
var mymagerr = NaN;
}
var mymaglim = -2.5 * Math.log10(5 * myfluxerr) + 25;
binsource.data['mjd'].push(mymjd);
binsource.data['flux'].push(myflux);
binsource.data['fluxerr'].push(myfluxerr);
binsource.data['filter'].push(fluxsource.data['filter'][0]);
binsource.data['color'].push(fluxsource.data['color'][0]);
binsource.data['mag'].push(mymag);
binsource.data['magerr'].push(mymagerr);
binsource.data['lim_mag'].push(mymaglim);
binerrsource.data['xs'].push([mymjd, mymjd]);
binerrsource.data['ys'].push([myflux - myfluxerr, myflux + myfluxerr]);
binerrsource.data['color'].push(fluxsource.data['color'][0]);
}
}
fluxsource.change.emit();
binsource.change.emit();
fluxerrsource.change.emit();
binerrsource.change.emit();
}
var binsize = slider.value;
var fluxalph = ((binsize == 0) ? 1. : 0.1);
for (var i = 0; i < toggle.labels.length; i++) {
var fluxsource = eval("obs" + i).data_source;
var binsource = eval("bin" + i).data_source;
var fluxerrsource = eval("obserr" + i).data_source;
var binerrsource = eval("binerr" + i).data_source;
var unobssource = eval("unobs" + i).data_source;
var unobsbinsource = eval("unobsbin" + i).data_source;
var allsource = eval("all" + i);
var minmjd = Math.min.apply(Math, allsource.data['mjd']);
var date = new Date(); // a new date
var time = date.getTime(); // the timestamp, not neccessarely using UTC as current time
var maxmjd = ((time / 86400000) - (date.getTimezoneOffset()/1440) + 40587.);
binsource.data['mjd'] = [];
binsource.data['flux'] = [];
binsource.data['fluxerr'] = [];
binsource.data['filter'] = [];
binsource.data['color'] = [];
binsource.data['lim_mag'] = [];
binsource.data['mag'] = [];
binsource.data['magerr'] = [];
binerrsource.data['xs'] = [];
binerrsource.data['ys'] = [];
binerrsource.data['color'] = [];
unobsbinsource.data['mjd'] = [];
unobsbinsource.data['lim_mag'] = [];
unobsbinsource.data['color'] = [];
unobsbinsource.data['flux'] = [];
unobsbinsource.data['fluxerr'] = [];
unobsbinsource.data['mag'] = [];
unobsbinsource.data['magerr'] = [];
unobsbinsource.data['filter'] = [];
for (var j = 0; j < fluxsource.get_length(); j++){
fluxsource.data['alpha'][j] = fluxalph;
fluxerrsource.data['alpha'][j] = fluxalph;
}
for (var j = 0; j < unobssource.get_length(); j++){
unobssource.data['alpha'][j] = fluxalph;
}
if (binsize > 0){
// now do the binning
var k = 0;
var curmjd = minmjd;
var mjdbins = [curmjd];
while (curmjd < maxmjd){
curmjd += binsize;
mjdbins.push(curmjd);
}
var nbins = mjdbins.length - 1;
for (var l = 0; l < nbins; l++) {
// calculate the flux, fluxerror, and mjd of the bin
var flux = [];
var weight = [];
var mjd = [];
var limmag = [];
var ivarsum = 0;
for (var m = 0; m < allsource.get_length(); m++){
if ((allsource.data['mjd'][m] < mjdbins[l + 1]) && (allsource.data['mjd'][m] >= mjdbins[l])){
let fluxvar = allsource.data['fluxerr'][m] * allsource.data['fluxerr'][m];
let ivar = 1 / fluxvar;
weight.push(ivar);
flux.push(allsource.data['flux'][m]);
mjd.push(allsource.data['mjd'][m]);
limmag.push(allsource.data['lim_mag'][m]);
ivarsum += ivar;
}
}
var myflux = 0;
var mymjd = 0;
if (weight.length == 0){
continue;
}
for (var n = 0; n < weight.length; n++){
myflux += weight[n] * flux[n] / ivarsum;
mymjd += weight[n] * mjd[n] / ivarsum;
}
var myfluxerr = Math.sqrt(1 / ivarsum);
var obs = myflux / myfluxerr > 5;
if (obs){
var mymag = -2.5 * Math.log10(myflux) + 25;
var mymagerr = Math.abs(-2.5 * myfluxerr / myflux / Math.log(10));
var mysource = binsource;
binerrsource.data['xs'].push([mymjd, mymjd]);
binerrsource.data['ys'].push([mymag - mymagerr, mymag + mymagerr]);
binerrsource.data['color'].push(allsource.data['color'][0]);
} else {
var mymag = null;
var mymagerr = null;
var mysource = unobsbinsource;
}
if (weight.length > 1) {
var mymaglim = -2.5 * Math.log10(5 * myfluxerr) + 25;
} else {
var mymaglim = limmag[0];
}
mysource.data['mjd'].push(mymjd);
mysource.data['flux'].push(myflux);
mysource.data['fluxerr'].push(myfluxerr);
mysource.data['filter'].push(allsource.data['filter'][0]);
mysource.data['color'].push(allsource.data['color'][0]);
mysource.data['mag'].push(mymag);
mysource.data['magerr'].push(mymagerr);
mysource.data['lim_mag'].push(mymaglim);
}
}
fluxsource.change.emit();
binsource.change.emit();
fluxerrsource.change.emit();
binerrsource.change.emit();
unobssource.change.emit();
unobsbinsource.change.emit();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment