Keywords:

Summary

This demo shows how to use the LightCurve sensor plugin to generate a 1D (magnitude vs. time) light curve from a terrestrial observation location of a simple spherical object in orbit. The light curve captures the changing magnitude of the total reflected (and emitted) light from the object as it traverses the sky.

The following demos, manuals and tutorials can provide additional information about the topics at the focus of this demo:

  • Related Demos

    • N/A

  • Related Manuals

  • Related Tutorials

    • N/A

Details

This section explains any technical details of the simulation.

Important Files

This section highlights key files important to the simulation.

Scene Geometry

The scene in this demo consists entirely of the orbiting sphere object. The sphere itself is a facetized model (see geometry/sphere.obj), which is instanced using FlexMotion using the SGP4 location engine with a Two-Line Element (TLE) for the SEASAT 1 satellite (NORAD 10967). Since the sphere is uniform, the orientation setup for this object is not important (a static Euler angle setup was used).

The GLIST setup for the orbiting sphere object.
<geometrylist enabled="true">
  <object>
    <basegeometry>
      <obj><filename>sphere.obj</filename></obj>
    </basegeometry>
    <dynamicinstance tags="sphere">
      <motion type="flexible">
        <locationengine type="sgp4">
          <data source="internal">
            <tle1>1 10967U 78064A   23320.39076064  .00000335  00000-0  13623-3 0  9992</tle1>
            <tle2>2 10967 107.9972 156.5508 0001869 301.4908  58.6055 14.44619060384514</tle2>
          </data>
        </locationengine>
        <orientationengine type="euler">
          <data source="internal" datetime="relative" frame="scene" order="xyz" delimiter=" ">
            <![CDATA[
              0 0 0 0
            ]]>
          </data>
        </orientationengine>
      </motion>
    </dynamicinstance>
  </object>
</geometrylist>

An important attribute of this setup is that the <dynamicinstance> has a tag associated with it (i.e., tags="sphere"). This tag name (in this case, sphere) will be given to the LightCurve sensor plugin so that it will track it.

Sensor Configuration

The LightCurve plugin configuration is shown below. They key components of the setup are:

  • The location of the observation (see the sensor_location),

  • The tag associated with the target object to track (see target_tag),

  • The start, duration and number of time samples for the observation (see the date_time, duration and sample_count), and

  • The spectral bandpass of the sensor making the observation (see the bandpass).

The sensor plugin setup for the LightCurve plugin.
            "name" : "LightCurve",
            "inputs" : {
                "sensor_location" : {
                    "latitude"  : 35,
                    "longitude" : -106.0,
                    "altitude"  : 0
                },
                "bandpass" : {
                    "units"   : "angstroms",
                    "minimum" : 5070,
                    "maximum" : 5950,
                    "delta"   : 1
                },
                "target_tag" : "sphere",
                "date_time" : "2023-11-16T12:47:00.0000-00:00",
                "duration" : 840,
                "debug_filename" : "debug.grid"
            }
        }

Simulations and Results

Running the Simulation

The simulation is run using the demo.jsim file, either from the JSIM Editor in the graphical user interface (GUI) or from the command-line:

$ dirsig5 demo.jsim

During the setup phase, the plugin will output the parameters being used for the simulation:

Setting up the 'LightCurve' plugin
    Sensor location (lat,lon,alt) = 35, -106, 0
    Target object requested = 'sphere'
    Start date/time (ISO8601) = 2023-11-16T12:47:00.0000+00:00
    Curve duration = 840s
    Curve samples = 100
    Bandpass (min,max,delta) = 5070, 5950, 1
    Grid size = 100 x 100
    Output filename = test.txt
    Band zeropoint = 3.55e-09 erg/(s cm^2 A)
    Debug grid filename = debug.grid

During the simulation, a status message will be print for each time step:

Output of the LightCurve sensor plugin during the simulation.
[|][#-------------------------------------------------]
[/][##------------------------------------------------]
[-][###-----------------------------------------------]
...
[lines deleted for documentation purposes]
...
[-][################################################--]
[\][#################################################-]
[|][##################################################]

Setup time: 0m 0.367s
Render time: 0m 23.610s
Total run time: 0m 23.976s

Note that enabling debug output via the command-line --log_level=debug option will produce additional information for each time (capture) step:

[debug] LightCurve::captureStarted:
[debug]   Target center in ENU  = -3.144e+05, 9.463e+05, 6.791e+05
[debug]   Target center in ECEF = -1.748e+06, -4.954e+06, 4.803e+06
[debug]   Target radius     = 6.928 [meters]
[debug]   Target distance   = 1206482.011 [meters]
[debug]   Target half angle = 3.356e-04 [degrees]

Light Curve Output

The primary output of the simulation is a multi-column, ASCII/Text file containing the following values for each time sample:

  1. The relative capture time in seconds

  2. The magnitude (see note on units and zero point below)

  3. The spectrally integrated radiance (Watts per cm2 per steradian)

  4. The radius of the bounding volume for the target (in radians), and

  5. The solid angle of the bounding volume for the target (in steradians).

The default output filename for the plugin is lightcurve.dat. This filename can be overridden via the output_filename variable in the input configuration.

The default zero point for the magnitude is for Vega in the V band (~5556Å) is 3.55e-09 erg per second per cm2 per Angstrom. This zero point can be overridden via the band_zeropoint in the input configuration.

The output lightcurve.dat file for this demo.
4.200000 6.471662e+00 2.760982e-04 2.878857e-06 3.315126e-11 
12.600000 6.410562e+00 2.786720e-04 2.947305e-06 3.474643e-11 
21.000000 6.349705e+00 2.809153e-04 3.018947e-06 3.645617e-11 
...
819.000000 5.712571e+00 1.191655e-03 1.965598e-06 1.545430e-11 
827.400000          inf 0.000000e+00 1.934742e-06 1.497291e-11 
835.800000          inf 0.000000e+00 1.904844e-06 1.451372e-11 
Tip
The 0 value for the radiances and corresponding inf value for the magnitude indicates that the target was unobservable (below the horizon) at that time.

The magnitude vs. time data from the output file is plotted below:

curve
Figure 1. Plot of the magnitude vs. time (converted to UTC) for the demo.

Grid Sample Output (optional)

In some situations it is helpful to visualize the samples within the field-of-view (FOV) being used to compute the total radiance (and resulting magnitude) for the FOV of the sensor. For this purpose, an optional debug "grid file" can be generated during the simulation (see the optional debug_filename variable in the input configuration). The FOV was sampled with a M x M uniform grid (100 is the default, but can be changed via the grid_size variable). The format of this debug grid file is ASCII/Text, with each line containing the spectrally integrated radiance for each of the M samples in a row of the FOV sampling grid. M lines with M values captures all the samples for a given time. These blocks of M lines of M values repeats for each time. Hence, a simulation with N time samples will result in a file with N x M lines and N x (M x M) samples. Below, these samples for this demo were plotted and animated as a function of time to show how the solar loading on the sphere changes as a function of position as it traverses the sky.

grid
Figure 2. An animation of the sub-IFOV samples on the sphere target as a function of time.
Tip
This animation was created using GNUplot. See the plot_grid.gp script used to create this animation.