Binary lenses orbit around the common center of mass. If the microlensing event is long enough, we should take orbital motion into account. However, to first order, microlensing is only sensitive to changes in the projected separation and orientation of the binary lenses, while most orbital parameters remain unconstrained. Rather than adding too many dimensions to our parameter space, in order to describe the subtle deviations in our microlensing event, it can be sufficient to restrict to circular orbits.
VBMicrolensing offers two functions:
BinaryLightCurveOrbital
BinaryLightCurveKepler
The first function describes circular orbital motion, while the second considers elliptic Keplerian orbital motion. Note that we deprecate the "linear approximation", which is popular in many microlensing papers, since it does not correspond to any physical trajectories and may lead to unphysical solutions.
Both functions discussed here include the parallax calculation. Therefore, a preliminary call to VBM.SetObjectCoordinates
is mandatory (see Parallax). If you want to fit orbital motion without parallax, you may set the two components of the parallax to zero.
Finally, the reference time for orbital motion calculation is by default
Here is an example of use of BinaryLightCurveOrbital
:
VBMicrolensing VBM; // Declare instance to VBMicrolensing
double pr[12]; // Array of parameters
double s, q, u0, alpha, rho, tE, t0, paiN, paiE, g1, g2, g3, t;
VBM.SetObjectCoordinates("OB151212coords.txt", "."); // Read target coordinates in file
VBM.parallaxsystem = 1; // Here we use North-East components for parallax
u0 = -0.01; // Impact parameter
t0 = 7550.4; // Time of closest approach to the center of mass
tE = 100.3; // Einstein time
rho = 0.01; // Source radius
s = 0.8; // Separation between the two lenses
q = 0.1; // Mass ratio
alpha = 0.53; // Angle between a vector pointing to the left and the source velocity
paiN = 0.3; // Parallax component in the North direction
paiE = 0.13; // Parallax component in the East direction
g1 = 0.001; // Orbital component gamma1
g2 = -0.002; // Orbital component gamma2
g3 = 0.0011; // Orbital component gamma3
pr[0] = log(s);
pr[1] = log(q);
pr[2] = u0;
pr[3] = alpha;
pr[4] = log(rho);
pr[5] = log(tE);
pr[6] = t0;
pr[7] = paiN;
pr[8] = paiE;
pr[9] = g1;
pr[10] = g2;
pr[11] = g3;
t = 7551.6; // Time at which we want to calculate the magnification
Mag = VBM.BinaryLightCurveOrbital(pr, t); // Calculates the Binary Lens magnification at time t with parameters in pr
printf("Binary Light Curve with Parallax and Orbital Motion at time t: %lf", Mag); // Output should be 30.92...
A circular orbital motion is completely specified by the three components of the angular velocity
All values are specified at time
For more details, you might see the appendix of Skowron et al. (2011). In general, the component
Conventional orbital elements can be easily recovered from the components of
where
If the microlensing event is long compared to the orbital period of the binary lens, it is possible to attempt a full orbital fit including eccentricity. A convenient parameterization introduced by Bozza, Khalouei and Bachelet (2021) considers two additional parameters to the three components of the vector
The function BinaryLightCurveKepler
therefore accepts a total of 14 parameters and its use is similar to that of BinaryLightCurveOrbital
. So we do not repeat the example here.
The relations of these parameters to the conventional orbital elements are shown in detail in the appendix of Bozza, Khalouei and Bachelet (2021).