The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Type: Package
Title: Design Complex Light Regimes
Version: 1.0.0
Description: A system for accurately designing complex light regimes using LEDs. Takes calibration data and user-defined target irradiances and it tells you what intensities to use. For more details see Vong et al. (2025) <doi:10.1101/2025.06.06.658293>.
License: GPL (≥ 3)
Encoding: UTF-8
URL: https://github.com/ginavong/LightFitR/
BugReports: https://github.com/ginavong/LightFitR/issues
LazyData: true
Depends: R (≥ 3.5)
Imports: utils, graphics, lubridate, nnls, stringr
RoxygenNote: 7.3.2
Suggests: knitr, rmarkdown, testthat (≥ 3.0.0)
Config/testthat/edition: 3
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2025-07-24 15:27:11 UTC; Gina Vong
Author: Gina Vong ORCID iD [aut, cre, cph]
Maintainer: Gina Vong <gywv500@york.ac.uk>
Repository: CRAN
Date/Publication: 2025-07-25 16:30:14 UTC

calibration data

Description

Example calibration data

Usage

calibration

Format

A data frame with 12 columns:

filename

File that the raw data came from

time

The time when a given measurement was taken

led

LED channel being calibrated at that timepoint

intensity

Intensity the light is set to

wavelength

The wavelength this row describes

irradiance

The irradiance measured at that wavelength by the spectrometer

Source

<https://github.com/ginavong/2024_LightFitR_MethodsPaper/blob/master/data/heliospectra_measurements/calibration/Apollo_Calib_20240827/Apollo_calibration_annotated_20240827.Rda>


Check that the intended irradiances are acheivable by the lights

Description

Check that the intended irradiances are acheivable by the lights

Usage

checkRange(
  intended_irradiance,
  calibration_leds,
  calibration_wavelengths,
  calibration_intensities,
  calibration_irradiances
)

Arguments

intended_irradiance

Matrix of intended irradiances to be checked. Each row corresponds to an LED channel.

calibration_leds

A numeric vector of LED values from calibration, mapping to intensities and irradiances (i.e. the same length)

calibration_wavelengths

A numeric vector of wavelengths from calibration, corresponding to intensities and irradiances

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

calibration_irradiances

A numeric vector of measured irradiances (any units, as long as it is consistently used) from calibration

Value

Boolean: TRUE = pass, FALSE = fail

Examples

calib <- LightFitR::calibration
irradiances <- LightFitR::target_irradiance
checkRange(irradiances, calib$led, calib$wavelength, calib$intensity, calib$irradiance)


closest intensities

Description

Matrix of closest intensities for example purposes. Generated from 'target_irradiance'

Usage

example_closest

Format

A matrix with 9 rows and 10 columns: each row represents an LED channel and each column represents an event


example intensities

Description

Matrix of random intensities for example purposes

Usage

example_intensities

Format

A matrix with 9 rows and 10 columns: each row represents an LED channel and each column represents an event


regime matrix

Description

Example regime matrix

Usage

example_regime

Format

A matrix with 13 rows and 10 columns:

time

time in HH:MM:SS format

hour

The hour of the event

minute

The minute of the event

second

The second of the event

380nm

Intensity at 380nm LED channel

400nm

Intensity at 400nm LED channel

etc.

Check formatting of the heliospectra matrices

Description

Heliospectra DYNA matrices should have 9 rows (1 for each LED channel) and up to 150 columns (max number of events that Heliospectra DYNA can store)

Usage

helio.checkFormat(check_matrix)

Arguments

check_matrix

Matrix to be checked. Rows correspond to LEDs and columns are events / timepoints.

Value

Vector of booleans: TRUE = pass, FALSE = fail

Examples

matrix_to_check <- LightFitR::target_irradiance
helio.checkFormat(target_irradiance)


Check that the 9th white channel is set to 0

Description

We currently cannot support programming the white (5700k) LED channel.

Usage

helio.checkWhite(irradiance_matrix)

Arguments

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

Value

Boolean: TRUE = pass, FALSE = fail


Format regime_matrix for csv output that Heliospectra lights can parse

Description

Format regime_matrix for csv output that Heliospectra lights can parse

Usage

helio.csv_schedule(regime_matrix, filename)

Arguments

regime_matrix

Matrix containing light regime, as generated by makeRegime

filename

Character. Filename to export to

Value

Matrix formatted for Heliospectra lights csv

Examples

tempfile_name = tempfile(fileext='.csv')
helio.csv_schedule(LightFitR::example_regime, tempfile_name)


Turn Heliospectra into disco lights

Description

Congratulations! You've found the easter egg function!

Usage

helio.disco(filename, format = c("csv", "json"))

Arguments

filename

Character. Filename to export to

format

Character. Which format to export to? csv or json. Use extensions '.csv' or '.txt'

Details

This writes a schedule for Heliospectra DYNA lights which randomly changes colour every second for a fun disco effect. The disco will last until the Heliospectra runs out of memory (150 events), so you can get 2 min 30s of disco out of your expensive lights... Enjoy!

Value

Disco schedule file for the heliospectra

Examples

tempfile_name = tempfile(fileext='.txt')
helio.disco(tempfile_name, format='json')


heliospectra DYNA LEDs

Description

Data about the heliospectra DYNA LED channels

Usage

helio.dyna.leds

Format

A data frame with 9 rows and 3 columns:

name

Name of the LED channel

wavelength

Wavelength of the LED channel

colour

Colour of the LED channel

Source

<https://heliospectra.com/led-grow-lights/dyna/>


Maximum number of events

Description

Maximum number of events programmable onto heliospectra

Usage

helio.eventLimit

Format

Integer representing maximum allowable events


Format regime_matrix for json output that Heliospectra lights can parse

Description

Format regime_matrix for json output that Heliospectra lights can parse

Usage

helio.json_schedule(regime_matrix, filename)

Arguments

regime_matrix

Matrix containing light regime, as generated by makeRegime

filename

Character. Filename to export to

Value

Character in json format that Heliospectra can parse

Examples

tempfile_name = tempfile(fileext='.txt')
helio.csv_schedule(LightFitR::example_regime, tempfile_name)


Add white (5700k) LED to intensities matricies after calculations

Description

Add white (5700k) LED to intensities matricies after calculations

Usage

internal.addWhiteZero(intensities_matrix)

Arguments

intensities_matrix

Matrix of intensities with 8 rows

Value

Matrix of intensities with 9 rows


Internal function to make a calibration dataframe from user-supplied vectors of calibration data

Description

Internal function to make a calibration dataframe from user-supplied vectors of calibration data

Usage

internal.calibCombine(
  calibration_leds,
  calibration_wavelengths,
  calibration_intensities,
  calibration_irradiances
)

Arguments

calibration_leds

A numeric vector of LED values from calibration, mapping to intensities and irradiances (i.e. the same length)

calibration_wavelengths

A numeric vector of wavelengths from calibration, corresponding to intensities and irradiances

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

calibration_irradiances

A numeric vector of measured irradiances (any units, as long as it is consistently used) from calibration

Value

Correctly formatted dataframe of calibration data, for use in other functions


Internal function to check matrix for NAs

Description

Internal function to check matrix for NAs

Usage

internal.checkNAs(check_matrix)

Arguments

check_matrix

Matrix to be checked. Rows correspond to LEDs and columns are events / timepoints.

Value

Boolean: TRUE = pass, FALSE = fail


Internal function. Find the intensities corresponding to the closest irradiance match between intended and calibration.

Description

Internal function. Find the intensities corresponding to the closest irradiance match between intended and calibration.

Usage

internal.closestIntensities(
  irradiance_matrix,
  calibration_df,
  peaks = LightFitR::helio.dyna.leds$wavelength
)

Arguments

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

calibration_df

Dataframe of calibration data generated by internal.calibCombine

peaks

Vector of length 8 or 9. Containing wavelengths at which each LED peaks.

Value

Matrix of closest intensities, in the same format as 'irradiance_matrix'

Examples


# Format calibration data correctly
calib <- LightFitR::calibration[, c(3, 5, 4, 6)]

# Run function
internal.closestIntensities(LightFitR::target_irradiance, calib)


Internal function. Find the closest wavelengths to the stated peaks

Description

Internal function. Find the closest wavelengths to the stated peaks

Usage

internal.closestWavelength(wavelength_vec, peak_wavelengths)

Arguments

wavelength_vec

Vector of wavelengths that we have spectrometry data for

peak_wavelengths

Vector of stated LED peaks

Value

Vector of wavelengths closest to the stated peaks


Internal function. Takes vector of timepoints (POSICxt format) and converts into format readable by heliospectra.

Description

Internal function. Takes vector of timepoints (POSICxt format) and converts into format readable by heliospectra.

Usage

internal.makeTimes(timeVector_POSIXct)

Arguments

timeVector_POSIXct

Vector of schedule timepoints in POSICxt format

Value

Matrix of times. Each row corresponds to hours, minutes, seconds


Remove empty white (5700k) LED from calculations

Description

Remove empty white (5700k) LED from calculations

Usage

internal.rmWhite(irradiance_matrix)

Arguments

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

Value

Matrix of irradiances, with 9th row removed as we currently don't support 5700k LED channel


Tidy intensities generated by algorithm so that lights can accept them

Description

Tidy intensities generated by algorithm so that lights can accept them

Usage

internal.tidyIntensities(intensities_matrix, calibration_intensities)

Arguments

intensities_matrix

Matrix of predicted intensities

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

Value

Maxtrix of intensities which are integers and capped at the maximum possible intensity


Create a regime (matrix) to program lights to achieve intended irradiances

Description

This is a wrapper function that carries out multiple steps:

1. Calculate closest intensities

2. Predict the intensities to use to achieve the target irradiance (via a system of linear equations or non-negative least squares)

3. Tidy the intensities (rounding to integer, keep within the range of intensities that the lights can be set to)

4. Format the intensities and timestamps into a human-readable regime matrix

Usage

makeRegime(
  timeVector_POSIXct,
  irradiance_matrix,
  calibration_leds,
  calibration_wavelengths,
  calibration_intensities,
  calibration_irradiances,
  peaks = LightFitR::helio.dyna.leds$wavelength,
  method = "nnls"
)

Arguments

timeVector_POSIXct

Vector of schedule timepoints in POSICxt format

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

calibration_leds

A numeric vector of LED values from calibration, mapping to intensities and irradiances (i.e. the same length)

calibration_wavelengths

A numeric vector of wavelengths from calibration, corresponding to intensities and irradiances

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

calibration_irradiances

A numeric vector of measured irradiances (any units, as long as it is consistently used) from calibration

peaks

Vector of length 8 or 9. Containing wavelengths at which each LED peaks.

method

Use 'nnls' (non-negative least squares) or 'sle' (system of linear equations)

Value

Matrix with light regime needed to program the lights

NNLS vs SLE

NNLS and SLE largely predict the same intensities, except in outlier cases. The default is NNLS, but if your predicted intensities end up being very far off, try SLE.

Examples

# Prep variables
calib <- LightFitR::calibration
times <- LightFitR::time_vector
target_irradiance <- LightFitR::target_irradiance

# Run function
makeRegime(times, target_irradiance, calib$led, calib$wavelength, calib$intensity, calib$irradiance)



Use non-linear least squares to interpolate intensities

Description

Use non-linear least squares to interpolate intensities

Usage

nnls_intensities(
  irradiance_matrix,
  closest_intensities,
  calibration_leds,
  calibration_wavelengths,
  calibration_intensities,
  calibration_irradiances,
  peaks = LightFitR::helio.dyna.leds$wavelength
)

Arguments

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

closest_intensities

Matrix of closest intensities, generated by 'internal.closestIntensities'. Same format as 'irradiance_matrix'

calibration_leds

A numeric vector of LED values from calibration, mapping to intensities and irradiances (i.e. the same length)

calibration_wavelengths

A numeric vector of wavelengths from calibration, corresponding to intensities and irradiances

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

calibration_irradiances

A numeric vector of measured irradiances (any units, as long as it is consistently used) from calibration

peaks

Vector of length 8 or 9. Containing wavelengths at which each LED peaks.

Value

Matrix of intensities to set the lights to, to achieve desired irradiances

Examples

# Prep variables
target_irradiance = LightFitR::target_irradiance
closest = LightFitR::example_closest
calib = LightFitR::calibration

# Run the function
nnls_intensities(target_irradiance, closest,
  calib$led, calib$wavelength, calib$intensity, calib$irradiance)


Read a heliospectra script (json format) into a matrix.

Description

Read a heliospectra script (json format) into a matrix.

Usage

read.helio_json(helio_script)

Arguments

helio_script

File (.txt or .json) containing heliospectra regime script

Value

Matrix containing the regime encoded by the Heliospectra script

Examples

example_file <- system.file("extdata", "example_json_schedule.txt",
  package = "LightFitR", mustWork = TRUE)
read.helio_json(example_file)


Use a system of linear equations to calculate intensities

Description

Use a system of linear equations to calculate intensities

Usage

sle_intensities(
  irradiance_matrix,
  closest_intensities,
  calibration_leds,
  calibration_wavelengths,
  calibration_intensities,
  calibration_irradiances,
  peaks = LightFitR::helio.dyna.leds$wavelength
)

Arguments

irradiance_matrix

Matrix of intended irradiances. rows = leds and columns = events

closest_intensities

Matrix of closest intensities, generated by 'internal.closestIntensities'. Same format as 'irradiance_matrix'

calibration_leds

A numeric vector of LED values from calibration, mapping to intensities and irradiances (i.e. the same length)

calibration_wavelengths

A numeric vector of wavelengths from calibration, corresponding to intensities and irradiances

calibration_intensities

A numeric vector of intensities (heliospectra units) from calibration

calibration_irradiances

A numeric vector of measured irradiances (any units, as long as it is consistently used) from calibration

peaks

Vector of length 8 or 9. Containing wavelengths at which each LED peaks.

Value

Matrix of intensities to set the lights to, to achieve desired irradiances

Examples

#' # Prep variables
target_irradiance = LightFitR::target_irradiance
closest = LightFitR::example_closest
calib = LightFitR::calibration

# Run the function
sle_intensities(target_irradiance, closest,
  calib$led, calib$wavelength, calib$intensity, calib$irradiance)


target irradiances

Description

Matrix of random target irradiances for example purposes

Usage

target_irradiance

Format

A matrix with 9 rows and 10 columns: each row represents an LED channel and each column represents an event


time vector

Description

Example timepoints for events

Usage

time_vector

Format

A vector of length 10 with timepoints in POSIXct format


Write the schedule to file that Heliospectra can parse

Description

Writes to json or csv format

Usage

write.helioSchedule(regime_matrix, filename, format = c("csv", "json"))

Arguments

regime_matrix

Matrix containing light regime, as generated by makeRegime

filename

Character. Filename to export to

format

Character. Which format to export to? csv or json. Use extensions '.csv' or '.txt'

Value

Heliospectra schedule file in either the csv or json format

Examples

tempcsv_name = tempfile(fileext='.csv')
write.helioSchedule(LightFitR::example_regime, tempcsv_name, format='csv')

temptxt_name = tempfile(fileext='.txt')
write.helioSchedule(LightFitR::example_regime, temptxt_name, format='json')

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.