A Quandary

Today I am considering an important problem concerning the algorithm I use for determining the height of the flares of a Leonid. My original, and deeply flawed method was to apply simple plane geometry based on the assumption that every Leonid first begins to emit light at a height of about 119 km. This means that the first flare will be at 119 km; combining this with the angular altitude, it is trivial to determine the distance to the Leonid. But this approach suffered from a nasty flaw: the earth isn’t flat. I had always thought that, for meteor work, the curvature of the earth isn’t important, and it isn’t when you’re looking at most meteors that are fairly close. But many of the Leonids in this dataset are very low and therefore quite far away; the curvature of the earth is indeed a significant factor. So I began using a better algorithm taking that into account; it is explained here.

But I was bothered by another problem: how do I know that the first recorded flare actually represents the first instant that the Leonid entered the atmosphere and began glowing? Many of these Leonids are quite distant; the likelihood of seeing their true first flare is reduced. The first flares recorded in my data might well represent the Leonid at some deeper point in the atmosphere. So I tried a completely different algorithm. We know the linear velocity of the Leonids quite accurately: it is 71 km/sec. If we contrast the linear velocity of the Leonid with its angular velocity, we can calculate its distance. It doesn’t matter if we catch the entire Leonid or just part of it; so long as we get enough data to give a reliable indicator of its angular velocity, we can reliably calculate its range. Here’s the actual code I use:

double deltaX=(lastFlare.x-firstFlare.x)/horzRad2Pix;

double deltaY=(lastFlare.y-firstFlare.y)/vertRad2Pix;

double angularVelocity=29.97*Math.sqrt(deltaX*deltaX+deltaY*deltaY)/(flareCount-1);

zCoord=new Coordinates(middleFlare.x,middleFlare.y);

angularVelocity/=Math.sin(zCoord.radiantDistance);

double range=linearVelocity/angularVelocity;

deltaX and deltaY are the angular distances between the first flare and the last flare. In the third line, we calculate the total angular distance traveled [Math.sqrt(...)] and divide by the number of flares minus 1 to get the average distance traveled in a single frame. There are 29.97 frames per second, so multiplying by that value gives us the angular velocity in radians per second. In the fourth line, we calculate radiantDistance, the distance from the Leonid to the radiant; this will give us the foreshortening. If we see the Leonid 90º from the radiant, we’re seeing it without any foreshortening. So we divide our angularVelocity by the sine of the radiantDistance to get the angular velocity that we would see if it were moving at right angles to our line of sight. Then we simply divide the linear velocity by this angular velocity to get the range to the Leonid. Here is the distribution of ranges that we get from all the Leonids seen by five cameras:

You can readily see some obvious factors: the green camera was pointed highest and the purple camera was pointed lowest. But what’s terribly bothersome about this histogram is its breadth. This histogram says that a significant number of Leonids first became visible at heights of 70 km. That’s absurd; in a paper published the year after the Leonid meteor shower, Betlem et al used double-station photography to obtain precise heights and velocities of 47 Leonids; they obtained a mean first appearance height of 114.35 ± 2.49 km, and a mean last appearance height of 100.40 ± 4.52 km. This distribution further suggests that plenty of Leonids first appeared at an altitude of 140 km -- an equally absurd proposition. And what the hell is that crazy blip in the histogram at 165 km? This histogram yields such preposterous results that I must certainly throw away the algorithm used to obtain it.

But that algorithm is theoretically more sound than the one based on assuming the height of first appearance. We __know__ that such an algorithm suffers from the problem that the first recorded flare is probably not the first actual flare. By contrast, the “angular velocity” algorithm is theoretically without any serious flaws. Why shouldn’t it be right? To examine this problem more closely, I delved into the statistics of first appearance heights, thinking that there might be something unusual about the preposterously high or preposterously low Leonids that would reveal the true problem. This got me nowhere. But then I spent some time directly comparing the Leonids in the results with the images themselves and I discovered that my algorithms aren’t perfect: they are especially weak at nailing the first few flares. I haven’t actually done any statistical analyses yet, but it does seem that there’s a significant issue here. So my next step is to carry out that careful statistical analysis.