Event Filter Editor
The Event Filter Editor lets you attach an optional filter to a study so that only the events you care about are kept. You write a filter as a boolean expression in C#, compile it to check that it is valid, and then generate events. The filter is entirely optional: a study with no filter keeps every event it finds.
How Filtering Works
A filter is a true or false test. For every event a study finds, Aquila evaluates your expression against that event:
- If the expression is
true, the event is kept and added to your results. - If the expression is
false, the event is discarded.
For example, to keep only events where the Moon is above the ecliptic, you would write Moon.Latitude > 0. Each time the study finds an event, Aquila checks the Moon's latitude at that moment and keeps the event only when the value is greater than zero.
Writing an Expression
You build a filter from four kinds of building blocks:
- Bodies, such as
Sun,Moon, orMean Node. You can also use generic bodies that stand in for whichever bodies an event involves. - Properties of a body, accessed by typing the body name, a dot, and the property name, such as
Venus.Longitude. - Operators that compare values or combine tests.
- Functions that package common checks into a single call.
To enter an expression:
- Click in the filter script editor and type a boolean expression.
Generic bodies make a filter work no matter which specific bodies are involved:
- Single-body studies use
BodyorBody1. - Two-body studies use
Body1for the inner body andBody2for the outer body. - Three-body studies use
Body1,Body2, andBody3. - Studies with an apex body, such as a Yod, expose the apex as
Body4. - Studies that involve a natal body number it after the transiting bodies. In a Yod Activations study, for instance, the natal body is
Body5.

Inserting Functions and Tokens
Rather than typing function names and body names by hand, you can insert them from the editor's context menu, which prevents typos and syntax errors.
To insert a function:
- Right-click in the filter script editor to open the context menu.
- Click Functions in the context menu.
- Click the function you want in the submenu.

The context menu groups tokens into seven categories: Functions, Generic Bodies, Bodies, Body Properties, Zodiac Signs, Comparison Operators, and Logical Operators. Every category works the same way: open the menu, click the category, then click the item to insert it. Selecting a Comparison Operators or Logical Operators item inserts the symbol for you, so Greater Than inserts > and And inserts &&.
Compiling the Filter
Before a filtered study can generate events, the filter must be compiled so Aquila can confirm it is valid.
- Click the Compile button.

If the expression is valid, the filter is marked as compiled and the status indicator turns green. If it is not, an error dialog describes what needs to be fixed. Once the filter is compiled, generating events keeps only the events for which the expression is true. See Generate Events for a Study for how to generate events.
Operators
Comparison operators test the relationship between two values:
>is greater than.>=is greater than or equal to.<is less than.<=is less than or equal to.
Logical operators combine two tests:
&&(And) is true only when both sides are true.||(Or) is true when at least one side is true.
Body Properties
Each body exposes the following properties:
| Property | Description |
|---|---|
.Longitude | The body's ecliptic longitude in degrees. |
.Latitude | The body's ecliptic latitude in degrees. |
.Distance | The body's distance in Astronomical Units (AU). |
.LongitudeSpeed | The body's speed in longitude, in degrees per day. |
.LatitudeSpeed | The body's speed in latitude, in degrees per day. |
.DistanceSpeed | The body's speed in distance, in AU per day. |
Filter Functions
Functions are shortcuts for common checks. You provide the required information inside parentheses, and you can combine several functions with the logical operators. The available functions are:
| Function | What it checks | Example |
|---|---|---|
IsAspecting() | Whether two bodies are in a specific aspect within an orb. | IsAspecting(Body1, Body2, 90, 3) |
IsBalanced() | Whether two bodies sit at mirror-image positions on opposite sides of a balance point, within an orb. | IsBalanced(Body1, Body2, 90, 3) |
IsParallel() | Whether two bodies are parallel within an orb. | IsParallel(Moon, Sun, 0.5) |
IsContraParallel() | Whether two bodies are contra-parallel within an orb. | IsContraParallel(Venus, Mars, 1) |
InRange() | Whether a body's longitude falls within a degree range. | InRange(Body, 85, 95) |
IsOutOfBounds() | Whether a body's latitude is out of bounds, beyond about 23.4 degrees. | IsOutOfBounds(Moon) |
IsRetrograde() | Whether a body is moving retrograde. | IsRetrograde(Mercury) |
IsDirect() | Whether a body is moving direct. | IsDirect(Jupiter) |
InSign() | Whether a body is in a specific zodiac sign. | InSign(Mars, Aries) |
InFireSign() | Whether a body is in Aries, Leo, or Sagittarius. | InFireSign(Body1) |
InEarthSign() | Whether a body is in Taurus, Virgo, or Capricorn. | InEarthSign(Body2) |
InAirSign() | Whether a body is in Gemini, Libra, or Aquarius. | InAirSign(Venus) |
InWaterSign() | Whether a body is in Cancer, Scorpio, or Pisces. | InWaterSign(Moon) |
InCardinalSign() | Whether a body is in Aries, Cancer, Libra, or Capricorn. | InCardinalSign(Sun) |
InFixedSign() | Whether a body is in Taurus, Leo, Scorpio, or Aquarius. | InFixedSign(Mars) |
InMutableSign() | Whether a body is in Gemini, Virgo, Sagittarius, or Pisces. | InMutableSign(Mercury) |
InQuadrant() | Whether a body is in a specific quadrant, 1 to 4, of its sign. | InQuadrant(Body1, 1) |
InDomicile() | Whether a body is in its sign of domicile. | InDomicile(Saturn) |
InDetriment() | Whether a body is in its sign of detriment. | InDetriment(Sun) |
InExaltation() | Whether a body is in its sign of exaltation. | InExaltation(Jupiter) |
InFall() | Whether a body is in its sign of fall. | InFall(Mars) |
IsBodyPresent() | Whether a body is involved in an event. | IsBodyPresent(Saturn, Body1, Body2) |
Reusing Filters
You can save a filter expression as a named preset and reapply it to other studies. See Filter Script Presets for the full workflow.