<resource schema="yiannists">
	<meta name="creationDate">2019-05-24T11:13:40Z</meta>

	<meta name="title">Time series for the microlensing event OGLE-2015-BLG-0060</meta>
	<meta name="description">
We present the analysis of stellar binary microlensing event OGLE-2015-BLG-0060
based on observations obtained from 13 different telescopes. Intensive coverage
of the anomalous parts of the light curve was achieved by automated follow-up
observations from the robotic telescopes of the Las Cumbres Observatory. We
show that, for the first time, all main features of an anomalous microlensing
event are well covered by follow-up data, allowing us to estimate the physical
parameters of the lens. The strong detection of second-order effects in the
event light curve necessitates the inclusion of longer-baseline survey data in
order to constrain the parallax vector. We find that the event was most likely
caused by a stellar binary-lens with masses M_star1 = 0.87 ± 0.12 Msun and
M_star2 = 0.77 ± 0.11Msun. The distance to the lensing system is 6.41 ± 0.14
kpc and the projected separation between the two components is 13.85 ± 0.16 AU.

This collection contains lightcurves resulting from different data processing
pipelines in a common reduction.  See the accompanying paper for details.
	</meta>

	<meta name="creator">Tsapras, Y.</meta>

	<meta name="source">2019MNRAS.487.4603T</meta>
	<meta name="contentLevel">Research</meta>
	<meta name="type">Catalog</meta>

	<meta name="subject">gravitational-microlensing</meta>
	<meta name="subject">galactic-bulge</meta>
	<meta name="subject">binary-stars</meta>

	<meta name="coverage.waveband">Optical</meta>

	<table id="instance">
		<dm id="obs_pos">
			(stc2:Coords) {
				time: (stc2:TimeCoordinate) {
					frame:
						(stc2:TimeFrame) {
							timescale: UTC
							refPosition: BARYCENTER
							time0: 2450000.5 }
					location: @epoch
				}
				space:
					(stc2:SphericalCoordinate) {
						frame: (stc2:SpaceFrame) {
							orientation: ICRS
							epoch: "J2000.0" }
						longitude: @ra
						latitude: @dec
					}
			}
		</dm>

		<param name="ra" type="double precision"
			ucd="pos.eq.ra;meta.main"
			description="ICRS right ascension of OGLE-2015-BLG-0060"
			verbLevel="1"/>
		<param name="dec" type="double precision"
			ucd="pos.eq.dec;meta.main"
			description="ICRS declination of OGLE-2015-BLG-0060"
			verbLevel="1"/>
		<param name="instrument" type="text"
			ucd="instr"
			description="Instrument used to obtain the light curve"
			verbLevel="1"/>
		
		<column name="epoch" type="double precision"
			unit="d" ucd="time.epoch"
			tablehead="Time (HJD-2450000)"
			description="Epoch of observation"
			verbLevel="1"/>
		<!-- UCD amended below -->
		<column name="mag" type="double precision"
			unit="mag" ucd="phot.mag"
			tablehead="m"
			description="Unscaled instrumental magnitude (note that microlensing
				is achromatic)."
			verbLevel="1"/>
		<column name="usable" type="smallint" required="True"
			ucd="meta.code.qual"
			tablehead="Usable?"
			description="If 1, the point was used in the paper's modeling, if 0,
				it was masked out."
			verbLevel="1"/>
		<!-- UCD amended below -->
		<column name="magerr" type="double precision"
			unit="mag" ucd="stat.error"
			tablehead="Err(m)"
			description="FILLED IN IN THE PARMAKER"
			verbLevel="1"/>
		<column name="seeing"
			unit="pixel" ucd="instr.obsty.seeing"
			tablehead="Seeing"
			description="Seeing FWHM in instrument pixels (for LCO, that's
        	0.389 arcsec/pix, binning 1 by 1)."
			verbLevel="1"/>
		<column name="background"
			unit="adu" ucd="instr.background"
			tablehead="Sky background"
			description="Sky background on this light curve's reference image."
			verbLevel="1"/>
	</table>

	<data id="build_instance" auto="False">

		<embeddedGrammar>
			<iterator>
				<setup>
					<par name="labels">["index", "epoch", "mag", "magerr",
						"seeing", "background"]</par>
				</setup>
				<code>
					maskName = self.sourceToken[:-4]+".mask"
					if os.path.exists(maskName):
						with open(maskName, "r") as f:
							masked = set(map(int, f.read().split(",")))
					else:
						masked = set()

					with open(self.sourceToken) as f:
						for line in f:
							if not line.strip():
								continue
							row = dict(zip(labels, line.split()))
							row["usable"] = int(row["index"]) not in masked
							yield row
				</code>
			</iterator>

			<pargetter>
				<setup>
					<par name="obsdata">{
					"LCO_COJ_A1": (
						"LCO (Dome A), SSO, Australia, old camera",
						"SDSS-i'", "opt.I"),
					"LCO_COJ_A2": (
						"LCO (Dome A), SSO, Australia, new camera",
						"SDSS i'", "opt.I"),
					"LCO_COJ_B": (
						"LCO (Dome B), SSO, Australia",
						"SDSS i'", "opt.I"),
					"LCO_CPT_A": (
						"LCO (Dome A), SAAO, South Africa",
						"SDSS i'", "opt.I"),
					"LCO_CPT_B": (
						"LCO (Dome B), SAAO, South Africa",
						"SDSS i'", "opt.I"),
					"LCO_CPT_C": (
						"LCO (Dome C), SAAO, South Africa",
						"SDSS i'", "opt.I"),
					"LCO_LSC_A": (
						"LCO (Dome A), CTIO, Chile",
						"SDSS i'", "opt.I"),
					"LCO_LSC_B": (
						"LCO (Dome B), CTIO, Chile",
						"SDSS i'", "opt.I"),
					"LCO_LSC_C": (
						"LCO (Dome C), CTIO, Chile",
						"SDSS i'", "opt.I"),
					"L_DK_Z": (
						"Danish Telescope, La Silla, Chile",
						"LIred", "opt.I"),
					"MOA-I": (
						"MOA Telescope, Mount John, New Zealand, using red Filter",
						"MOA I", "opt.R"),
					"MOA-V": (
						"MOA Telescope, Mount John, New Zealand, using blue Filter",
						"MOA V", "opt.B"),
					"OGLE-I": (
						"Warsaw Telescope, Las Campanas, Chile, using I Filter",
						"I", "opt.I"),
					"OGLE-V": (
						"Warsaw Telescope, Las Campanas, Chile, using V Filter",
						"V", "opt.V"),
					"Salerno-I": (
						"Salerno Telescope, Salerno, Italy",
						"I", "opt.I"),
					"VVV-K": (
						"VISTA Telescope, Paranal, Chile",
						"K", "ir.K"),
						}
					</par>
					<par name="scalingFactors"> {
						# this is from lightcurves/scaling_factors.txt
						"OGLE-I": (2.308, 0.0004),
						"OGLE-V": (1.708, 0.0004),
						"L_DK_Z": (4.360, 0.0004),
						"MOA-I": (1.979, 0.0004),
						"MOA-V": (1.284, 0.0004),
						"LCO_LSC_B": (17.011, 0.0004),
						"LCO_LSC_C": (11.479, 0.0004),
						"LCO_COJ_A2": (1.541, 0.0004),
						"LCO_CPT_A": (5.172, 0.0004),
						"LCO_COJ_B": (3.393, 0.0004),
						"LCO_CPT_C": (3.583, 0.0004),
						"LCO_CPT_B": (4.069, 0.0004),
						"LCO_LSC_A": (6.795, 0.0004),
						"LCO_COJ_A1": (4.178, 0.0004),
						"Salerno-I": (3.722, 0.0004),
						"VVV-K": (1.526, 0.0004),}
					</par>
				</setup>
				<code>
					telescopeCode = os.path.basename(self.sourceToken)[:-4]
					pars = dict(zip(
						("instName", "band", "ucd"), obsdata[telescopeCode]))
					pars.update(dict(zip(
						["f_i", "sigma_i"], scalingFactors[telescopeCode])))
					return pars
				</code>
			</pargetter>
		</embeddedGrammar>

		<make table="instance">
			<rowmaker idmaps="*"/>
			<parmaker>
				<map key="ra">269.993125</map>
				<map key="dec">-27.780944</map>
				<map key="instrument">@instName</map>
				<apply name="fixmetadata">
					<code>
						magCol = targetTable.tableDef.getColumnByName("mag")
						magCol.ucd = "phot.mag;em.%s"%@ucd
						magCol.description = ("Unscaled instrumental magnitude in %s"
							" (note that microlensing is achromatic)."%@band)
						
						magErrCol = targetTable.tableDef.getColumnByName("mag")
						magErrCol.ucd = "stat.error;phot.mag;em.%s"%@ucd
						magErrCol.description = (u"Uncertainty in the magnitude"
							u" as estimated by the specific pipeline; for this"
							u" telescope use f_i=%f and σ_i=%f in the error estimate"
							u" in sect. 3.5 of the paper."%(@f_i, @sigma_i))
					</code>
				</apply>
			</parmaker>
		</make>
	</data>

	<table id="timeseries">
		<!-- we *could* collect ts metadata here.  We don't, though, as
		we just build the full spectra and write them as a side effect
		of make_files' embedded grammar. -->
	</table>

	<data id="make_files">
		<sources pattern="data/lightcurves/*.dat"/>
		<embeddedGrammar>
			<iterator>
				<setup>
					<par name="builder">rd.getById("build_instance")</par>
					<code>
						from gavo import api
						destDir = rd.getAbsPath("processed")
						if not os.path.exists(destDir):
							os.makedirs(destDir)
					</code>
				</setup>
				<code>
					d = api.makeData(builder, forceSource=self.sourceToken)
					destName = os.path.join(
						destDir,
						os.path.basename(self.sourceToken[:-4]+".vot"))
					with open(destName, "w") as f:
						api.writeAsVOTable(d, f, version=(1,5))
					yield {}
				</code>
			</iterator>
		</embeddedGrammar>
	</data>

	<service id="get" allowed="static,fixed">
		<meta name="shortName">ogle60 web"</meta>
		<publish render="fixed" sets="local"/>
		<nullCore/>
		<property name="staticData">processed</property>
		<template key="fixed">index.html</template>
	</service>
</resource>
