Skip to main content

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, or Mean 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 Body or Body1.
  • Two-body studies use Body1 for the inner body and Body2 for the outer body.
  • Three-body studies use Body1, Body2, and Body3.
  • 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.

A study's Event Filter Editor.

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:

  1. Right-click in the filter script editor to open the context menu.
  2. Click Functions in the context menu.
  3. Click the function you want in the submenu.

The filter script editor with its right-click context menu open and the Functions submenu expanded.

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.

The Event Filter Editor with an expression entered.

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:

PropertyDescription
.LongitudeThe body's ecliptic longitude in degrees.
.LatitudeThe body's ecliptic latitude in degrees.
.DistanceThe body's distance in Astronomical Units (AU).
.LongitudeSpeedThe body's speed in longitude, in degrees per day.
.LatitudeSpeedThe body's speed in latitude, in degrees per day.
.DistanceSpeedThe 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:

FunctionWhat it checksExample
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.