Source code for jii_multispeq_protocols.protocols.rides

"""
Photosynthesis (RIDES)
======================

Measures the same photosynthesis-related parameters in <15 seconds as 'Leaf Photosynthesis MutlispeQ v2.0' plus additional PS1 and P700 measurements.

+ Chlorophll Fluorescence: Phi2, PhiNPQ, PhiNO, NPQt, qL, LEF
+ Relative Chlorophyll
+ ATP synthase conductivity, proton motive force parameters through DIRK(ECS): ECSt mAU, vH+, gH+
+ Saturation pulse estimation of PSI parameters: PS1 active centers, PS1 open, PS1 oxidized and PS1 over reduced
+ Absorbance at: 450, 535, 605, 650, 730, 850, 880, and 940nm.
+ The rate of turnover of the cytochrome b6f complex through DIRKP(700)
+ Leaf Thickness (in mm), angle, and cardinal direction
+ Leaf Temperature and differential from ambient temperature
+ Environmental conditions: PAR and ambient temperature/pressure/humidity

Important
---------
Supports MultispeQ V1 and V2 with Firmware 2.34 and higher
"""

import warnings

import numpy as np
from scipy.optimize import curve_fit
import jii_multispeq.analysis as analysis

_protocol = [{'_protocol_set_': [{'averages': 1,
                      'energy_min_wake_time': 7000,
                      'energy_save_timeout': 300000,
                      'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['compass_and_angle']],
                      'label': 'no_leaf_baseline',
                      'par_led_start_on_open': 2},
                     {'autogain': [[2, 1, 3, 12, 50000], [3, 8, 1, 80, 50000]],
                      'averages': 1,
                      'detectors': [[3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [3], [1], [1], [1]],
                      'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['thickness']],
                      'label': 'DIRK_ECS',
                      'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2]],
                      'nonpulsed_lights_brightness': [['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity']],
                      'par_led_start_on_close': 2,
                      'protocols_delay': 10,
                      'pulse_distance': [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
                      'pulse_length': [['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2'],
                                       ['a_d2']],
                      'pulsed_lights': [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [3], [3], [3]],
                      'pulsed_lights_brightness': [['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2'],
                                                   ['a_b2']],
                      'pulses': [100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 20, 20, 100]},
                     {'averages': 1,
                      'detectors': [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]],
                      'environmental': [['previous_light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['compass_and_angle']],
                      'label': 'DIRK_P700',
                      'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2], [2]],
                      'nonpulsed_lights_brightness': [['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity'],
                                                      ['light_intensity'],
                                                      [0],
                                                      ['light_intensity']],
                      'protocols_delay': 1,
                      'pulse_distance': [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500],
                      'pulse_length': [['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3'],
                                       ['a_d3']],
                      'pulsed_lights': [[8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8], [8]],
                      'pulsed_lights_brightness': [['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3'],
                                                   ['a_b3']],
                      'pulses': [100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100, 100, 20, 100]},
                     {'averages': 1,
                      'detectors': [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [0], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]],
                      'environmental': [['previous_light_intensity'],
                                        ['temperature_humidity_pressure'],
                                        ['temperature_humidity_pressure2'],
                                        ['contactless_temp'],
                                        ['thickness'],
                                        ['compass_and_angle']],
                      'label': 'PAM',
                      'nonpulsed_lights': [[2], [2], [2], [2], [2], [2], [2], [9], [0], [2], [2], [2], [2], [2]],
                      'nonpulsed_lights_brightness': [['light_intensity'], [8000], [7000], [6000], [5000], [4000], [0], [2090], [0], [8000], [6000], [4000], [3000], ['light_intensity']],
                      'pulse_distance': [5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000],
                      'pulse_length': [[30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [0],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3'],
                                       [30, 'a_d3']],
                      'pulsed_lights': [[3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [0], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8], [3, 8]],
                      'pulsed_lights_brightness': [[400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [0],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3'],
                                                   [400, 'auto_bright3']],
                      'pulses': [100, 30, 15, 15, 15, 15, 15, 600, 15, 30, 15, 15, 15, 15]},
                     {'averages': 1,
                      'environmental': [['light_intensity'], ['temperature_humidity_pressure'], ['temperature_humidity_pressure2'], ['contactless_temp'], ['thickness'], ['compass_and_angle']],
                      'label': 'SPAD',
                      'spad': [1]}]}]

[docs] def _analyze ( _data ): """ Data evaluation of RIDES by: David M. Kramer created: 2017-05-09 @ 18:15:27 """ # Define the output dictionary here output = {} DIRK_ECS = analysis.basic.GetProtocolByLabel("DIRK_ECS", _data) P700_DIRK = analysis.basic.GetProtocolByLabel("DIRK_P700", _data) PAM = analysis.basic.GetProtocolByLabel("PAM", _data) output["leaf angle"] = P700_DIRK['angle'] if len(_data['set']) == 13: _data['set'].insert(0, {}) # ECS DIRK trace definitions beginning_of_ECS=100 # Note the 100 pulses length_of_ECS_subtrace=220 # The length of each subtrace. number_of_ECS_subtraces=6 # number of ECS subtraces. There are currently 6 of them. length_of_ECS_baseline=100 # there are 100 points in the baseline before the DIRK length_of_ECS_all_subtraces=beginning_of_ECS+(number_of_ECS_subtraces*length_of_ECS_subtrace) ECS_averaged_trace=DIRK_ECS['data_raw'][beginning_of_ECS:320] begining_of_subtrace_for_linear_fit=75 end_of_subtrace_for_linear_fit=145 P700_begining_of_subtrace_for_linear_fit=55 P700_end_of_subtrace_for_linear_fit=170 beginning_of_LEFD=1421 # Note the 100 pulses length_of_LEFd_subtrace=220 # The length of each subtrace. length_of_LEFd_baseline=100 # there are 100 points in the baseline before the DIRK LEFd_trace=DIRK_ECS['data_raw'][beginning_of_LEFD:(beginning_of_LEFD+length_of_LEFd_subtrace)] # P700 DIRK trace definitions beginning_of_P700_DIRK=100 # Note the 100 pulses length_of_P700_DIRK_subtrace=220 #The length of each subtrace. number_of_P700_DIRK_subtraces=6 # number of ECS subtraces. There are currently 6 of them. length_of_P700_DIRK_baseline=100 # there are 100 points in the baseline before the DIRK length_of_P700_DIRK_all_subtraces=beginning_of_P700_DIRK+(number_of_P700_DIRK_subtraces*length_of_P700_DIRK_subtrace) P700_DIRK_averaged_trace=DIRK_ECS['data_raw'][beginning_of_P700_DIRK:320] output['test_data_raw_PAM'] = len(PAM['data_raw']) loPAM = len(PAM['data_raw']) temp1 = [] for i in range(0, loPAM, 2): temp1.append(PAM['data_raw'][i]) for i in range(1, loPAM+1, 2): temp1.append(PAM['data_raw'][i]) PAM['data_raw']=temp1; # replace the old values wiht temp1 Fs_begin=1 #the first point to use for Fs Fs_end =4 #the end point to use for Fs #The first FM value (Fm_1) is obtained with the highest intensity Fm_1_begin =101 #the first point to use for the FIRST Fmp Fm_1_end =130 #the end point to use for the FIRST Fmp Fm_2_begin =131 #the first point to use for the FIRST Fmp Fm_2_end =145 #the end point to use for the FIRST Fmp Fm_3_begin =146 #the first point to use for the FIRST Fmp Fm_3_end =160 #the end point to use for the FIRST Fmp Fm_4_begin =161 #the first point to use for the FIRST Fmp Fm_4_end =175 #the end point to use for the FIRST Fmp Fm_5_begin =176 #the first point to use for the FIRST Fmp Fm_5_end =190 #the end point to use for the FIRST Fmp #START AND STOP FOR F0' FoPrime_begin =206 #the first point to use for Fo FoPrime_end =220 #the end point to use for Fo #SET THE INVERSE INTENSITIES FOR THE AVENSON INTENSITY RAMP inverse_intensity = [1/8000,1/7000,1/6000,1/5000] output['pump']="none" #PSI saturation pulse parameters: #Calculation of the DIRK delta_A_ECS PSI_ss_beg=1 #beginning of the trace for P700 steady-state PSI_ss_end=18 #end of the trace for P700 steady-state PSI_sat1_beg=25 #beginning of the trace for P700 first saturation pulse PSI_sat1_end=170 #end of the trace for P700 first saturation pulse PSI_dark_beg=195 #beginning of the trace for P700 steady-state PSI_dark_end=200 #end of the trace for P700 steady-state PSI_sat2_beg=220 #beginning of the trace for P700 second saturation pulse PSI_sat2_end=270 #end of the trace for P700 second saturation pulse # Start of analyses sections #ECS trace analysis: # Average the traces for i in range(1, number_of_ECS_subtraces): temp = DIRK_ECS['data_raw'][i*length_of_ECS_subtrace+beginning_of_ECS: (i+1)*length_of_ECS_subtrace+beginning_of_ECS] for j in range(length_of_ECS_subtrace): ECS_averaged_trace[j] = ECS_averaged_trace[j] + temp[j] # Create time axis fake_time_axis = list(range(1, length_of_ECS_subtrace + 1)) # Find best fit line for baseline m,b = np.polyfit(fake_time_axis[begining_of_subtrace_for_linear_fit:end_of_subtrace_for_linear_fit], ECS_averaged_trace[begining_of_subtrace_for_linear_fit:end_of_subtrace_for_linear_fit], 1) # Generate baseline offset baseline_offset = [np.round(j * np.round(m, 3) + round(b)) for j in range(length_of_ECS_subtrace)] # Calculate deltaI/I0 and convert to approximate delta_A for j in range(length_of_ECS_subtrace): rat = ECS_averaged_trace[j]/baseline_offset[j] ECS_averaged_trace[j] = -1 * np.log(rat) # ((rat-1)/-2.3) # Eliminate spike artifact ECS_averaged_trace[120] = ECS_averaged_trace[119] output['ECS_averaged_trace'] = ECS_averaged_trace[80:150] begin_trace_index=100 end_trace_index=120 number_of_points_to_fit=end_trace_index-begin_trace_index expData=ECS_averaged_trace[begin_trace_index:end_trace_index] # Here I assume that the time difference between points was time_per_point=1.5 #entger the delta time between points (only work with constant delta time) # Create time data t = np.array([i*time_per_point for i in range(len(expData))]) y = np.array(expData) def exp_func(x, a, b, c): return b + a * np.exp(-x / c) try: # Fit the data popt, pcov = curve_fit(exp_func, t, y, p0=[1, 1, 1]) a, b, c = popt # Generate fitted curve outdata = exp_func(t, a, b, c) output['fitinput'] = expData output['outdata'] = outdata.tolist() output["ECSt mAU"] = round(a, 5) output["ECS_tau"] = round(0.001 * c, 4) output["gH+"] = round(1000/c, 3) vHplus = output["ECSt mAU"] * output["gH+"] output["vH+"] = round(vHplus, 3) except Exception as e: pass # Or handle the error as needed # Calculaiton of the DIRK delta_P850 # Get sum of all subtraces for i in range(1, number_of_P700_DIRK_subtraces): temp = P700_DIRK['data_raw'][i*length_of_P700_DIRK_subtrace+beginning_of_P700_DIRK: (i+1)*length_of_P700_DIRK_subtrace+beginning_of_P700_DIRK] for j in range(length_of_P700_DIRK_subtrace): P700_DIRK_averaged_trace[j] = P700_DIRK_averaged_trace[j] + temp[j] # Create time axis fake_time_axis = list(range(1, length_of_P700_DIRK_subtrace + 1)) # Find best fit line for baseline m,b = np.polyfit(fake_time_axis, P700_DIRK_averaged_trace, 1) # Generate baseline offset using linear regression baseline_offset = [j * np.round(m, 3) + np.round(b) for j in range(length_of_P700_DIRK_subtrace)] # Calculate deltaI/I0 and convert to approximate delta_A for j in range(length_of_P700_DIRK_subtrace): rat = P700_DIRK_averaged_trace[j]/baseline_offset[j] P700_DIRK_averaged_trace[j] = -1 * np.log(rat) # ((rat-1)/-2.3) # Replace artifactual data at position 120 with prior value P700_DIRK_averaged_trace[120] = P700_DIRK_averaged_trace[119] # Slice the averaged trace for output output['P700_DIRK_averaged_trace'] = P700_DIRK_averaged_trace[P700_begining_of_subtrace_for_linear_fit: P700_end_of_subtrace_for_linear_fit] begin_trace_index=100 end_trace_index=120 number_of_points_to_fit=end_trace_index-begin_trace_index P700expData=P700_DIRK_averaged_trace[begin_trace_index:end_trace_index] P700_time_per_point=1.5 #entger the delta time between points (only work with constant delta time) # Create time series data points P700tdata = [] for i in range(len(expData)): # assuming expData is defined P700tdata.append([i * time_per_point, P700expData[i]]) # Convert to numpy array for curve_fit P700tdata = np.array(P700tdata) # Define the exponential decay function def exp_decay(x, a, b, c): return b + a * np.exp(-x / c) # Initial parameter guesses a = 1 b = 1 c = 1 try: # Perform non-linear least squares fitting # Note: curve_fit is scipy's equivalent to NonLinearRegression popt, pcov = curve_fit(exp_decay, P700tdata[:, 0], # x data P700tdata[:, 1], # y data p0=[a, b, c]) # initial guesses # Extract fitted parameters a, b, c = popt # Generate fitted data points P700_outdata = [] for i in range(len(expData)): P700_outdata.append(b + a * np.exp(-1 * i / c)) # Store results in output dictionary output = {} output['P700_fitinput'] = P700_outdata output['P700_outdata'] = outdata # assuming outdata is defined # Round and store parameters output['P700_DIRK_ampl'] = round(a, 5) output['tP700'] = round(0.001 * c, 4) output['kP700'] = round(1000 / c, 4) # Calculate and store initial velocity v_initial_P700 = output['P700_DIRK_ampl'] * output['kP700'] output['v_initial_P700'] = round(v_initial_P700, 7) except Exception as e: print(f"An error occurred: {e}") # Display the DIRKf results and calculate LEFd output['LEFd_trace'] = LEFd_trace # Display of PAM result and calculation of the fluorescence parameters # ************************************************************************************************ # Calculate the PAM fluorescence paramters output['data_raw_PAM'] = PAM['data_raw'][0:310] data=PAM['data_raw'][0:310] # Set our Apparent FmPrime, 3 FmPrime steps, and Fs to calculate both traditional fv/fm and new Multi-phase flash fv/fm # ---------------------------- # get the values for representative Fs baseline=0 # for the time being, do not use baseline # GET THE VALUES FOR Fs Fs = np.mean(data[Fs_begin:Fs_end]) - baseline # take only the first 4 values in the Fs range, excluding the very first Fs_std = np.std(data[Fs_begin:Fs_end]) # create standard deviation for this value for error checking output['Fs']=np.round(Fs,2) # GET THE VALUES FOR THE 5 Fm' ILLUMINATION CONDITIONS sat_vals = np.sort(data[Fm_1_begin:Fm_1_end]) # sort the saturating light values from low to high AFmP = np.mean(sat_vals[2:20]) - baseline # take the 18 largest values and average them AFmP_std = np.std(sat_vals) # create standard deviation for this value for error checking # output.AFmP=AFmP; sat_vals = np.sort(data[Fm_5_begin:Fm_5_end]) # sort the saturating light values from low to high FmP_end = np.mean(sat_vals[2:23]) - baseline # take the 21 largest values and average them FmP_end_std = np.std(sat_vals) # create standard deviation for this value for error checking # output.FmP_end=FmP_end; sat_vals = np.sort(data[Fm_2_begin:Fm_2_end]) # sort the saturating light values from low to high FmP_step1 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them FmP_step1_std = np.std(sat_vals) # create standard deviation for this value for error checking # output.FmP_step1=FmP_step1; sat_vals = np.sort(data[Fm_3_begin:Fm_3_end]) # sort the saturating light values from low to high FmP_step2 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them FmP_step2_std = np.std(sat_vals) # create standard deviation for this value for error checking # output.FmP_step2=FmP_step2; sat_vals = np.sort(data[Fm_4_begin:Fm_4_end]) # sort the saturating light values from low to high FmP_step3 = np.mean(sat_vals[2:6]) - baseline # take the 4 largest values and average them FmP_step3_std = np.std(sat_vals) # create standard deviation for this value for error checking # output.FmP_ste32=FmP_step3; # Calculations for F0' # ---------------------------- FoPrime_values = np.sort(data[FoPrime_begin:FoPrime_end]) # FoPrime = np.mean(FoPrime_values[5,10)) - baseline; FoPrime = np.min(FoPrime_values) FoPrime_std = np.std(FoPrime_values) # create standard deviation for this value for error checking output['FoPrime']=np.round(FoPrime,2) # output.FoPrime_values=FoPrime_values; # Calculations for corrected FmPrime using multi-phase flash # ---------------------------- m,b = np.polyfit(inverse_intensity, [AFmP,FmP_step1,FmP_step2,FmP_step3], 1) # Calculate Phi2 w/ and w/out multi-phase flash # ---------------------------- fvfm_noMPF = (AFmP-Fs)/AFmP fvfm_MPF = (b-Fs)/b # Calculate NPQt, PhiNPQ, PhiNO, qL w/ and w/out multi-phase flash # ---------------------------- #FIX: FmPrime does not exist at this point, but is called later FmPrime = AFmP npqt_MPF = (4.88 / ((b / FoPrime) -1) )-1 npqt_noMPF = (4.88 / ((AFmP / FoPrime) -1) )-1 qL_MPF = ((b - Fs)*FoPrime)/((b-FoPrime)*Fs) qL_noMPF = ((AFmP - Fs)*FoPrime)/((AFmP-FoPrime)*Fs) PhiNO_MPF = 1/(npqt_MPF + 1 + qL_MPF*4.88) # based on equation 52 in Kramer et al., 2004 PRES PhiNO_noMPF = 1/(npqt_noMPF + 1 + qL_noMPF*4.88) # based on equation 52 in Kramer et al., 2004 PRES PhiNPQ_MPF = 1-fvfm_MPF-PhiNO_MPF # based on equation 53 in Kramer et al., 2004 PRES PhiNPQ_noMPF = 1-fvfm_noMPF-PhiNO_noMPF # based on equation 53 in Kramer et al., 2004 PRES qP_MPF = (b - Fs)/(b - FoPrime) qP_noMPF = (FmPrime - Fs)/(FmPrime - FoPrime) # FmPrime does not exist at this point!!!! FvP_FmP_MPF = (b-FoPrime)/b FvP_FmP_noMPF = (AFmP-FoPrime)/AFmP # Create the variables to be printed (assume to use the MPF values unless there is a good reason not to) # ---------------------------- fvfm = fvfm_MPF npqt = npqt_MPF PhiNO = PhiNO_MPF PhiNPQ = PhiNPQ_MPF qL = qL_MPF FmPrime = b qP = qP_MPF FvP_FmP = FvP_FmP_MPF #****************OUTPUT VALUES FROM MACRO ******************* # if any of the flag conditions are true, then create the 'flag' object. Otherwise, do not create the flag object. # for now since flag system isn't fully implemented, also create as separate objects so they will be displayed # ---------------------------- # If multi-phase flash steps are flat or positive slope, then just use the normal Phi2, NPQt, PhiNPQ, PhiNO... etc. # If Phi2 or NPQt is less than zero, make zero and give user warning. If Phi2 is higher than .85, give user danger flag. # ---------------------------- if m > 0: fvfm = fvfm_noMPF npqt = npqt_noMPF PhiNO = PhiNO_noMPF PhiNPQ = PhiNPQ_noMPF qL = qL_noMPF FmPrime = AFmP qP = qP_noMPF FvP_FmP = FvP_FmP_noMPF if fvfm <= -.10: warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement") if fvfm >=.85: warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement") else: output["Phi2"] = np.round(fvfm,3) if PhiNPQ <= -.10: warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement") if PhiNPQ >= 1.1: warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement") else: output['PhiNPQ']= np.round(PhiNPQ,3) output['qL']= np.round(qL,3) output['NPQt']= np.round(npqt,3) output['PhiNO']= np.round(PhiNO,3) output['FvP_over_FmP'] = np.round(FvP_FmP,3) outputqP = np.round(qP,3) if PhiNO <= -.10: warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement") if PhiNO >= 1.1: warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement") else: output['PhiNO']= np.round(PhiNO,3) output['qL']= np.round(qL,3) output['NPQt']= np.round(npqt,3) output['PhiNPQ']= np.round(PhiNPQ,3) output['FvP_over_FmP'] = np.round(FvP_FmP,3) outputqP = np.round(qP,3) # Otherwise, use the multi-phase flash calculation for Phi2, NPQt, PhiNPQ, PhiNO... etc. # If Phi2 or NPQt is less than zero, make zero and give user warning. If Phi2 is higher than .85, give user warnings.warn flag. # ---------------------------- else: if fvfm <= -.10: warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement") if fvfm >=.85: warnings.warn("Phi2 is outside of expected range, please consider discarding the measurement") else: output["Phi2"] = np.round(fvfm,3) if PhiNPQ <= -.10: warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement") if PhiNPQ >= 1.1: warnings.warn("PhiNPQ is outside of expected range, please consider discarding the measurement") else: output['PhiNPQ']= np.round(PhiNPQ,3) output['qL']= np.round(qL,3) output['NPQt']= np.round(npqt,3) output['PhiNO']= np.round(PhiNO,3) output['FvP_over_FmP'] = np.round(FvP_FmP,3) outputqP = np.round(qP,3) if PhiNO <= -.10: warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement") if PhiNO >= 1: warnings.warn("PhiNO is outside of expected range, please consider discarding the measurement") else: output['PhiNO']= np.round(PhiNO,3) output['qL']= np.round(qL,3) output['NPQt']= np.round(npqt,3) output['PhiNPQ']= np.round(PhiNPQ,3) output['FvP_over_FmP'] = np.round(FvP_FmP,3) outputqP = np.round(qP,3) output['FmPrime']=np.round(FmPrime,2) # var Phi2_bar ="0: "; # for (var i=0; i< (10*output.Phi2); i++){ # Phi2_bar+="█"; # } # for (var i=10*output.Phi2; i< 10; i++){ # Phi2_bar+="░"; # } # Phi2_bar+=" :1.0 ("; # Phi2_bar+=output.Phi2; # Phi2_bar+=")"; # output.YII=Phi2_bar; # only display LEF if there is a light intensity measurement > 0 # ---------------------------- if 'light_intensity' in _data and _data['light_intensity'] > 0: output['LEF'] = np.round( (fvfm * 0.45 * _data['light_intensity']) ,3) # Calculate Standard Deviation for Warning or Danger flags (out of bounds measurement) # ---------------------------- if Fs_std > 100: warnings.warn("noisy Fs") # if (AFmP_std > 300) { # warnings.warn("noisy FmPrime", output); # } # if (FmP_step1_std > 120 | FmP_step2_std > 120 | FmP_step3_std > 120 | FmP_end_std > 300) { # warnings.warn("noisy multi-phase flash steps"); # } if FoPrime_std > 150: warnings.warn("noisy FoPrime") #ANALYZE THE PHI-PSI DATA ctrace=PAM['data_raw'] PSI_trace_beg=310 PSI_trace_end=615 PSI_trace_length=PSI_trace_end-PSI_trace_beg PSI_data=PAM['data_raw'][PSI_trace_beg:PSI_trace_end] PSI_dark_raw=np.mean(PSI_data[PSI_dark_beg:PSI_dark_end]) PSI_data_absorbance=[] for i in range(0, PSI_trace_length): PSI_data_absorbance.append(np.log(PSI_dark_raw/PSI_data[i])) PSI_dark=np.mean(PSI_data_absorbance[PSI_dark_beg:PSI_dark_end]) PSI_ss=np.mean(PSI_data_absorbance[PSI_ss_beg:PSI_ss_end]) PSI_sat1=np.mean(PSI_data_absorbance[PSI_sat1_beg:PSI_sat1_end]) PSI_sat2=np.mean(PSI_data_absorbance[PSI_sat2_beg:PSI_sat2_end]) PSI_ss=1000*np.mean(PSI_data_absorbance[PSI_ss_beg:PSI_ss_end]) PSI_sat1_vals = np.sort(PSI_data_absorbance[PSI_sat1_beg:PSI_sat1_end]) # sort the saturating light values from low to high length_of_sat1=PSI_sat1_end-PSI_sat1_beg top_20_percent= int(length_of_sat1*0.8) PSI_sat1 = 1000*np.mean(PSI_sat1_vals[top_20_percent:length_of_sat1]) # take the top 20% largest values and average them PSI_sat2_vals = np.sort(PSI_data_absorbance[PSI_sat2_beg:PSI_sat2_end]) # sort the saturating light values from low to high length_of_sat2=PSI_sat2_end-PSI_sat2_beg top_20_percent=int(length_of_sat2*0.8) PSI_sat2 = 1000*np.mean(PSI_sat2_vals[top_20_percent:length_of_sat2]) # take the top 20% largest values and average them PSI_ox=PSI_ss/PSI_sat2 PSI_act=PSI_sat2 PSI_open=(PSI_sat1-PSI_ss)/PSI_sat2 PSI_or=1-PSI_sat1/PSI_sat2 output['PSI_data_absorbance']=PSI_data_absorbance output["PS1 Active Centers"]=np.round(PSI_act, 3) output["PS1 Open Centers"]=np.round(PSI_open, 3) output["PS1 Over Reduced Centers"]=np.round(PSI_or, 3) output["PS1 Oxidized Centers"]=np.round(PSI_ox, 3) #output.PSI_dark=PSI_dark; #output.PSI_ss = PSI_ss; #MathROUND(PSI_ss, 3); #output.PSI_sat1 =MathROUND(PSI_sat1, 3); #output.PSI_sat2 =MathROUND(PSI_sat2, 3); #output.data_raw_PSI =PSI_data; #output.PSI_dark_beg=PSI_dark_beg; #output.PSI_dark_end=PSI_dark_end; # Humidity changes humidity_kinetics=[ DIRK_ECS['humidity'], P700_DIRK['humidity'], PAM['humidity'] ] output['humidity_K']=humidity_kinetics # output.humidity_K_T=humidity_kinetics.join(", "); humidity2_kinetics=[ DIRK_ECS['humidity2'], P700_DIRK['humidity2'], PAM['humidity2'] ] output['humidity2_K']=humidity2_kinetics # output.humidity2_K_T=humidity2_kinetics.join(", "); # changes in leaf contactless_temp air_temp_kinetics=[ DIRK_ECS['temperature'], P700_DIRK['temperature'], PAM['temperature'] ] contactless_temp_kinetics=[ DIRK_ECS['contactless_temp'], P700_DIRK['contactless_temp'], PAM['contactless_temp'] ] output['air_temp_kinetics']=air_temp_kinetics output['leaf_thickness']=DIRK_ECS['thickness'] output['LEAF_temp']=contactless_temp_kinetics # output.LEAF_temp_T=contactless_temp_kinetics.join(", "); #var air_flow=new Array(); #for (var i=1; i<12 ; i++){ # air_flow.push(json.set[i].air_flow); #} #output.air_flow=air_flow; light_intensity=DIRK_ECS['light_intensity'] output["Light Intensity (PAR)"]= light_intensity ambient_temperature=_data['set'][3]['temperature'] output["Ambient Temperature"]=ambient_temperature ambient_humidity=_data['set'][3]['humidity'] output["Ambient Humidity"]=ambient_humidity ambient_pressure=_data['set'][3]['pressure'] output["Ambient Pressure"]=ambient_pressure #var leaf_RH=json.set[1].humidity2; #output.leaf_RH=MathROUND(leaf_RH, 2); leaf_temperature = DIRK_ECS['contactless_temp'] output["Leaf Temperature"]=leaf_temperature leaf_air_difference_temperature = leaf_temperature-ambient_temperature output["Leaf Temperature Differential"]=np.round(leaf_air_difference_temperature,3) output['LEF']=np.round(0.45*output['Phi2']*output["Light Intensity (PAR)"],2) leaf_temperature_differential = ambient_temperature output["Leaf Temperature Differenial"]=np.round(leaf_temperature- leaf_temperature_differential, 2) newSpad = analysis.GetProtocolByLabel("SPAD", _data) output['SPAD'] = newSpad['spad'][0] return output
_example = { "time": 1579894191905, "device_name": "MultispeQ", "device_version": "2", "device_id": "00:00:04:32", "device_battery": 93, "device_firmware": 2.21, "sample": [ [ { "time": 1579894191905, "protocol_id": "editor", "set": [ { "time": 1579894192135, "label": "no_leaf_baseline", "light_intensity": 15.603, "r": 70, "g": 35, "b": 20, "w": 119, "temperature": 23.53, "humidity": 35.832, "pressure": 979.605, "temperature2": 23.65, "humidity2": 34.402, "pressure2": 979.932, "contactless_temp": 23.19, "compass_direction": "??", "compass": -1, "angle": 2.334, "pitch": 2.3, "roll": 0.41, "data_raw": [ ] }, { "time": 1579894193791, "label": "DIRK_ECS", "autogain": [ [ 2, 1, 3, 12, -493, 49615 ], [ 3, 8, 1, 80, -216, 43519 ] ], "light_intensity": 14.403, "r": 63.8, "g": 32, "b": 18.4, "w": 109.2, "temperature": 23.58, "humidity": 35.781, "pressure": 979.579, "temperature2": 23.71, "humidity2": 34.385, "pressure2": 979.935, "contactless_temp": 25.53, "thickness": 0.3, "data_raw": [ 49509, 49487, 49491, 49495, 49503, 49495, 49495, 49487, 49502, 49490, 49495, 49485, 49484, 49501, 49491, 49489, 49487, 49491, 49494, 49487, 49487, 49485, 49491, 49484, 49491, 49491, 49493, 49486, 49493, 49479, 49481, 49483, 49487, 49485, 49498, 49483, 49481, 49485, 49487, 49496, 49492, 49495, 49489, 49477, 49487, 49494, 49481, 49482, 49481, 49491, 49485, 49491, 49469, 49477, 49487, 49491, 49486, 49481, 49485, 49487, 49487, 49483, 49477, 49484, 49486, 49493, 49486, 49471, 49485, 49479, 49476, 49481, 49477, 49478, 49484, 49471, 49482, 49482, 49483, 49485, 49467, 49487, 49482, 49487, 49485, 49487, 49478, 49476, 49478, 49483, 49487, 49471, 49471, 49479, 49477, 49475, 49482, 49483, 49479, 49471, 49483, 49471, 49482, 49479, 49487, 49477, 49483, 49479, 49485, 49497, 49471, 49471, 49479, 49492, 49487, 49481, 49471, 49475, 49479, 49479, 49481, 49471, 49484, 49483, 49471, 49479, 49480, 49479, 49471, 49483, 49487, 49479, 49475, 49485, 49487, 49475, 49471, 49486, 49487, 49481, 49471, 49478, 49485, 49486, 49486, 49479, 49471, 49481, 49485, 49483, 49476, 49484, 49477, 49485, 49477, 49478, 49483, 49479, 49479, 49476, 49477, 49478, 49477, 49477, 49485, 49477, 49479, 49471, 49476, 49477, 49483, 49470, 49481, 49471, 49471, 49493, 49481, 49487, 49487, 49469, 49482, 49483, 49486, 49479, 49471, 49469, 49481, 49477, 49486, 49468, 49481, 49484, 49480, 49478, 49479, 49478, 49482, 49477, 49479, 49478, 49482, 49487, 49495, 49490, 49493, 49480, 49491, 49483, 49481, 49488, 49497, 49495, 49498, 49489, 49501, 49509, 49499, 49504, 49503, 49502, 49498, 49487, 49482, 49487, 49487, 49487, 49483, 49497, 49487, 49494, 49478, 49471, 49487, 49485, 49479, 49479, 49480, 49477, 49471, 49477, 49477, 49480, 49477, 49475, 49471, 49477, 49479, 49471, 49471, 49482, 49471, 49481, 49471, 49477, 49482, 49476, 49471, 49471, 49484, 49486, 49465, 49483, 49479, 49477, 49479, 49476, 49471, 49482, 49479, 49471, 49477, 49483, 49471, 49466, 49471, 49479, 49471, 49471, 49471, 49471, 49469, 49471, 49471, 49469, 49463, 49479, 49479, 49471, 49477, 49464, 49469, 49471, 49471, 49471, 49481, 49467, 49467, 49471, 49469, 49465, 49467, 49477, 49471, 49471, 49471, 49479, 49479, 49478, 49471, 49471, 49471, 49479, 49480, 49465, 49466, 49471, 49466, 49486, 49468, 49471, 49471, 49477, 49483, 49479, 49459, 49471, 49482, 49467, 49471, 49467, 49481, 49479, 49469, 49465, 49471, 49467, 49471, 49467, 49467, 49471, 49467, 49463, 49466, 49471, 49471, 49468, 49467, 49461, 49478, 49481, 49465, 49465, 49477, 49471, 49471, 49469, 49467, 49481, 49471, 49471, 49471, 49461, 49471, 49471, 49471, 49471, 49475, 49479, 49479, 49471, 49463, 49478, 49468, 49470, 49463, 49471, 49470, 49477, 49470, 49479, 49471, 49467, 49467, 49481, 49471, 49465, 49478, 49481, 49467, 49467, 49471, 49478, 49471, 49471, 49471, 49475, 49471, 49471, 49463, 49479, 49479, 49471, 49471, 49479, 49471, 49474, 49471, 49470, 49475, 49479, 49465, 49465, 49471, 49478, 49471, 49481, 49471, 49469, 49480, 49469, 49471, 49474, 49483, 49482, 49483, 49474, 49488, 49475, 49475, 49482, 49486, 49484, 49495, 49481, 49487, 49481, 49490, 49487, 49487, 49489, 49485, 49487, 49471, 49487, 49483, 49483, 49477, 49471, 49476, 49477, 49471, 49471, 49483, 49477, 49468, 49477, 49477, 49464, 49465, 49469, 49471, 49462, 49464, 49471, 49463, 49460, 49467, 49475, 49470, 49467, 49463, 49471, 49462, 49463, 49463, 49463, 49471, 49463, 49463, 49471, 49471, 49467, 49465, 49465, 49461, 49463, 49471, 49463, 49468, 49465, 49469, 49463, 49467, 49465, 49465, 49463, 49459, 49471, 49455, 49457, 49460, 49471, 49468, 49469, 49469, 49465, 49464, 49467, 49455, 49470, 49463, 49463, 49464, 49459, 49465, 49471, 49476, 49467, 49467, 49471, 49469, 49467, 49461, 49461, 49471, 49460, 49461, 49455, 49479, 49459, 49461, 49463, 49455, 49461, 49455, 49467, 49461, 49468, 49471, 49471, 49459, 49462, 49466, 49466, 49469, 49467, 49455, 49464, 49469, 49451, 49460, 49458, 49463, 49462, 49461, 49449, 49455, 49466, 49471, 49455, 49461, 49468, 49460, 49451, 49465, 49467, 49453, 49462, 49471, 49460, 49463, 49467, 49471, 49463, 49455, 49449, 49470, 49471, 49470, 49470, 49464, 49460, 49463, 49463, 49455, 49461, 49462, 49457, 49467, 49463, 49463, 49455, 49466, 49466, 49463, 49463, 49459, 49459, 49464, 49455, 49463, 49471, 49463, 49453, 49460, 49471, 49458, 49460, 49455, 49464, 49463, 49451, 49471, 49465, 49459, 49463, 49467, 49471, 49455, 49465, 49471, 49465, 49462, 49459, 49467, 49461, 49451, 49464, 49460, 49445, 49452, 49455, 49464, 49454, 49455, 49462, 49460, 49461, 49455, 49463, 49457, 49457, 49470, 49475, 49475, 49467, 49473, 49475, 49474, 49474, 49482, 49475, 49481, 49485, 49491, 49489, 49481, 49481, 49497, 49491, 49471, 49487, 49478, 49470, 49484, 49489, 49471, 49479, 49471, 49466, 49465, 49463, 49463, 49471, 49469, 49471, 49463, 49468, 49471, 49470, 49466, 49466, 49467, 49469, 49467, 49466, 49455, 49462, 49462, 49459, 49471, 49461, 49459, 49463, 49463, 49467, 49462, 49460, 49463, 49467, 49471, 49463, 49455, 49455, 49462, 49464, 49455, 49478, 49455, 49455, 49463, 49459, 49463, 49459, 49465, 49466, 49463, 49466, 49455, 49459, 49462, 49455, 49463, 49455, 49470, 49471, 49460, 49471, 49471, 49467, 49471, 49467, 49454, 49469, 49463, 49459, 49465, 49467, 49463, 49455, 49467, 49463, 49455, 49462, 49471, 49463, 49466, 49461, 49471, 49455, 49459, 49471, 49465, 49455, 49467, 49471, 49459, 49449, 49462, 49449, 49462, 49455, 49469, 49451, 49455, 49454, 49463, 49455, 49461, 49465, 49454, 49459, 49467, 49458, 49459, 49458, 49449, 49455, 49460, 49459, 49455, 49471, 49461, 49455, 49462, 49463, 49461, 49462, 49453, 49467, 49461, 49455, 49462, 49455, 49458, 49467, 49466, 49455, 49460, 49463, 49455, 49461, 49454, 49461, 49463, 49467, 49463, 49471, 49463, 49463, 49462, 49455, 49448, 49469, 49459, 49465, 49465, 49454, 49455, 49455, 49454, 49455, 49455, 49453, 49463, 49463, 49447, 49469, 49455, 49455, 49452, 49455, 49459, 49465, 49460, 49455, 49465, 49461, 49455, 49463, 49461, 49455, 49457, 49463, 49455, 49454, 49466, 49450, 49459, 49455, 49451, 49451, 49459, 49450, 49459, 49454, 49451, 49459, 49454, 49459, 49456, 49459, 49459, 49463, 49458, 49459, 49471, 49473, 49459, 49472, 49466, 49483, 49483, 49467, 49475, 49473, 49470, 49475, 49475, 49459, 49471, 49468, 49482, 49465, 49471, 49462, 49470, 49458, 49466, 49470, 49463, 49471, 49461, 49444, 49465, 49471, 49461, 49471, 49465, 49455, 49462, 49449, 49463, 49463, 49451, 49459, 49461, 49455, 49453, 49455, 49460, 49450, 49450, 49463, 49455, 49463, 49461, 49462, 49447, 49450, 49461, 49454, 49453, 49453, 49447, 49451, 49455, 49455, 49461, 49461, 49445, 49460, 49454, 49455, 49461, 49461, 49452, 49462, 49447, 49457, 49452, 49445, 49443, 49452, 49445, 49451, 49451, 49447, 49454, 49462, 49457, 49454, 49451, 49447, 49455, 49454, 49447, 49453, 49453, 49447, 49451, 49443, 49460, 49455, 49454, 49462, 49452, 49451, 49455, 49451, 49459, 49460, 49459, 49458, 49459, 49449, 49455, 49459, 49458, 49452, 49450, 49459, 49447, 49449, 49459, 49454, 49455, 49455, 49447, 49454, 49453, 49451, 49455, 49449, 49455, 49466, 49447, 49449, 49447, 49455, 49455, 49449, 49454, 49454, 49451, 49455, 49443, 49455, 49462, 49453, 49447, 49453, 49445, 49454, 49459, 49451, 49455, 49447, 49453, 49449, 49444, 49447, 49447, 49454, 49459, 49448, 49462, 49448, 49446, 49455, 49450, 49453, 49463, 49447, 49453, 49454, 49449, 49450, 49445, 49454, 49462, 49447, 49455, 49455, 49443, 49447, 49447, 49445, 49455, 49447, 49450, 49455, 49455, 49449, 49455, 49447, 49447, 49451, 49447, 49453, 49455, 49443, 49453, 49448, 49447, 49455, 49445, 49454, 49447, 49447, 49454, 49447, 49458, 49450, 49446, 49460, 49450, 49454, 49460, 49445, 49454, 49456, 49457, 49459, 49463, 49470, 49470, 49459, 49471, 49465, 49472, 49475, 49473, 49483, 49471, 49459, 49475, 49474, 49466, 49469, 49471, 49463, 49460, 49469, 49466, 49462, 49467, 49455, 49465, 49465, 49455, 49463, 49449, 49452, 49453, 49453, 49462, 49450, 49439, 49453, 49455, 49455, 49455, 49445, 49455, 49449, 49455, 49448, 49465, 49457, 49446, 49443, 49445, 49454, 49451, 49459, 49461, 49447, 49441, 49455, 49449, 49455, 49459, 49449, 49446, 49442, 49449, 49449, 49450, 49453, 49441, 49453, 49450, 49455, 49445, 49459, 49451, 49447, 49459, 49451, 49449, 49451, 49453, 49438, 49455, 49446, 49443, 49445, 49443, 49447, 49455, 49459, 49457, 49435, 49439, 49441, 49441, 49449, 49450, 49443, 49453, 49453, 49444, 49447, 49449, 49439, 49453, 49459, 49449, 49438, 49452, 49443, 49449, 49455, 49455, 49445, 49454, 49441, 49446, 49452, 49445, 49453, 49455, 49447, 49445, 49443, 49444, 49443, 49449, 49439, 49439, 49441, 49450, 49443, 49446, 49445, 49446, 49450, 49450, 49451, 49443, 49443, 49451, 49451, 49451, 49449, 49441, 49453, 49446, 49447, 49446, 49443, 49449, 49443, 49461, 49446, 49452, 49447, 49443, 49449, 49439, 49442, 49437, 49454, 49439, 49439, 49447, 49442, 49447, 49437, 49439, 49447, 49454, 49444, 49439, 49454, 49443, 49455, 49439, 49439, 49447, 49444, 49434, 49451, 49441, 49442, 49451, 49450, 49444, 49447, 49439, 49447, 49443, 49451, 49447, 49445, 49443, 49439, 49439, 49433, 49444, 49445, 49441, 49445, 49439, 49455, 49447, 49447, 49454, 49448, 49447, 49451, 49444, 49443, 49451, 49437, 49447, 49443, 49447, 49449, 49451, 49445, 49459, 49453, 49455, 49457, 49454, 49459, 49450, 49469, 49455, 49451, 49463, 49455, 49471, 49469, 49459, 49469, 49471, 49467, 49465, 49455, 49467, 49455, 49466, 49453, 49469, 49461, 49463, 49450, 49450, 49463, 49459, 49443, 49459, 49449, 49453, 49443, 49455, 49449, 49446, 49445, 49451, 49451, 49451, 49451, 49444, 49446, 49447, 49443, 49455, 49450, 49451, 49447, 49443, 49447, 49445, 49453, 49450, 49451, 49445, 49445, 49455, 49441, 49450, 49440, 49444, 49442, 49444, 49452, 49441, 49438, 49439, 49455, 49449, 49439, 49445, 49445, 49442, 49439, 49449, 49441, 49447, 49439, 49451, 49447, 49449, 49451, 49445, 49443, 49446, 49454, 49440, 49455, 49437, 49450, 49441, 49445, 49447, 49447, 49453, 49446, 49447, 49443, 49451, 49441, 49445, 49439, 49447, 49449, 49435, 49447, 49439, 49444, 49431, 49446, 49439, 49445, 49430, 49455, 914, 914, 914, 913, 910, 916, 914, 911, 915, 910, 914, 912, 912, 915, 912, 914, 914, 916, 913, 910, 906, 906, 909, 902, 905, 901, 898, 902, 897, 900, 896, 899, 894, 900, 892, 896, 893, 892, 895, 894, 893, 899, 895, 902, 897, 904, 897, 905, 900, 905, 900, 906, 905, 903, 906, 902, 908, 906, 903, 909, 904, 909, 906, 908, 909, 906, 909, 904, 909, 908, 906, 904, 910, 905, 910, 904, 910, 904, 910, 905, 910, 905, 909, 906, 910, 904, 910, 906, 910, 910, 906, 910, 906, 911, 905, 910, 906, 909, 905, 909, 908, 908, 910, 905, 909, 907, 910, 905, 909, 906, 906, 910, 908, 909, 910, 905, 910, 909, 909, 906, 910, 910, 908, 910, 908, 910, 910, 906, 910, 905, 910, 908, 910, 910, 908, 910, 908, 910, 908, 910 ] }, { "time": 1579894201305, "label": "DIRK_P700", "light_intensity": 14.4, "r": 63.8, "g": 32, "b": 18.4, "w": 109.2, "temperature": 23.64, "humidity": 35.808, "pressure": 979.576, "temperature2": 23.75, "humidity2": 34.302, "pressure2": 979.895, "contactless_temp": 24.71, "compass_direction": "??", "compass": -1, "angle": 2.511, "pitch": 2.51, "roll": 0.18, "data_raw": [ 43613, 43625, 43593, 43595, 43611, 43599, 43608, 43589, 43589, 43580, 43588, 43582, 43613, 43564, 43597, 43580, 43602, 43601, 43573, 43579, 43585, 43585, 43585, 43597, 43587, 43584, 43589, 43575, 43579, 43565, 43590, 43612, 43560, 43585, 43593, 43576, 43609, 43607, 43605, 43585, 43608, 43584, 43582, 43577, 43566, 43596, 43579, 43553, 43593, 43577, 43573, 43568, 43592, 43565, 43582, 43601, 43599, 43573, 43581, 43575, 43590, 43603, 43583, 43591, 43585, 43583, 43605, 43597, 43583, 43589, 43565, 43561, 43563, 43581, 43589, 43567, 43578, 43592, 43578, 43601, 43595, 43550, 43565, 43573, 43597, 43613, 43583, 43540, 43571, 43585, 43593, 43572, 43577, 43559, 43595, 43585, 43601, 43565, 43585, 43581, 43589, 43593, 43579, 43585, 43550, 43559, 43575, 43569, 43573, 43577, 43565, 43604, 43599, 43571, 43593, 43584, 43581, 43577, 43603, 43585, 43593, 43611, 43570, 43571, 43579, 43563, 43555, 43581, 43579, 43566, 43541, 43557, 43539, 43557, 43584, 43565, 43560, 43549, 43562, 43575, 43582, 43553, 43593, 43589, 43557, 43580, 43582, 43569, 43569, 43577, 43561, 43579, 43573, 43551, 43568, 43544, 43577, 43549, 43568, 43567, 43576, 43581, 43559, 43561, 43561, 43559, 43582, 43581, 43589, 43569, 43575, 43585, 43568, 43589, 43568, 43569, 43559, 43567, 43598, 43584, 43601, 43568, 43571, 43577, 43553, 43581, 43601, 43562, 43569, 43573, 43545, 43565, 43547, 43576, 43585, 43550, 43577, 43611, 43582, 43597, 43567, 43569, 43572, 43590, 43591, 43577, 43574, 43571, 43564, 43583, 43551, 43597, 43584, 43577, 43551, 43571, 43576, 43565, 43602, 43585, 43571, 43581, 43584, 43581, 43617, 43575, 43550, 43585, 43566, 43600, 43596, 43601, 43593, 43585, 43593, 43581, 43585, 43617, 43582, 43599, 43589, 43601, 43605, 43622, 43605, 43576, 43565, 43576, 43585, 43589, 43574, 43557, 43579, 43615, 43579, 43583, 43565, 43584, 43589, 43585, 43603, 43563, 43562, 43583, 43581, 43521, 43578, 43568, 43575, 43581, 43575, 43573, 43545, 43573, 43570, 43601, 43527, 43536, 43601, 43570, 43547, 43583, 43589, 43569, 43582, 43560, 43591, 43591, 43573, 43569, 43577, 43601, 43580, 43583, 43577, 43558, 43553, 43610, 43569, 43580, 43540, 43581, 43581, 43596, 43603, 43595, 43603, 43589, 43551, 43577, 43585, 43584, 43553, 43589, 43587, 43609, 43605, 43578, 43599, 43601, 43593, 43600, 43605, 43593, 43583, 43601, 43600, 43594, 43577, 43553, 43585, 43592, 43561, 43574, 43573, 43575, 43551, 43547, 43573, 43585, 43538, 43571, 43583, 43593, 43567, 43598, 43585, 43569, 43591, 43601, 43573, 43564, 43551, 43568, 43559, 43537, 43545, 43533, 43537, 43529, 43533, 43558, 43511, 43523, 43545, 43569, 43549, 43549, 43565, 43567, 43539, 43537, 43547, 43539, 43549, 43594, 43577, 43549, 43543, 43567, 43576, 43555, 43567, 43547, 43597, 43543, 43545, 43553, 43553, 43545, 43575, 43547, 43573, 43553, 43567, 43567, 43526, 43553, 43557, 43557, 43567, 43596, 43565, 43581, 43561, 43544, 43575, 43531, 43537, 43571, 43573, 43580, 43569, 43580, 43608, 43563, 43584, 43560, 43575, 43601, 43571, 43583, 43545, 43570, 43589, 43552, 43589, 43593, 43581, 43583, 43583, 43567, 43630, 43617, 43552, 43568, 43580, 43593, 43584, 43569, 43592, 43595, 43587, 43585, 43571, 43593, 43584, 43598, 43581, 43597, 43613, 43592, 43595, 43567, 43568, 43574, 43577, 43601, 43600, 43591, 43578, 43605, 43593, 43555, 43604, 43593, 43599, 43585, 43581, 43598, 43551, 43579, 43565, 43569, 43566, 43585, 43601, 43559, 43589, 43585, 43545, 43591, 43567, 43575, 43579, 43565, 43541, 43612, 43591, 43573, 43593, 43559, 43593, 43613, 43579, 43611, 43577, 43585, 43574, 43587, 43585, 43601, 43573, 43557, 43585, 43565, 43593, 43568, 43581, 43590, 43601, 43585, 43611, 43572, 43590, 43545, 43583, 43596, 43596, 43585, 43564, 43599, 43606, 43601, 43589, 43606, 43581, 43591, 43591, 43583, 43575, 43595, 43596, 43616, 43583, 43615, 43598, 43581, 43579, 43592, 43591, 43568, 43585, 43616, 43579, 43601, 43601, 43577, 43601, 43579, 43590, 43617, 43599, 43567, 43596, 43595, 43601, 43607, 43581, 43611, 43599, 43593, 43605, 43617, 43601, 43620, 43627, 43588, 43569, 43624, 43605, 43608, 43604, 43607, 43595, 43580, 43604, 43603, 43593, 43604, 43609, 43596, 43575, 43601, 43609, 43571, 43591, 43617, 43560, 43577, 43563, 43573, 43565, 43576, 43592, 43583, 43603, 43577, 43593, 43592, 43628, 43617, 43570, 43557, 43588, 43591, 43575, 43588, 43581, 43589, 43597, 43601, 43589, 43617, 43588, 43592, 43569, 43576, 43575, 43592, 43561, 43581, 43594, 43580, 43582, 43585, 43568, 43583, 43601, 43605, 43582, 43581, 43599, 43611, 43585, 43585, 43581, 43579, 43594, 43600, 43577, 43612, 43620, 43597, 43591, 43569, 43582, 43590, 43585, 43583, 43580, 43585, 43592, 43561, 43569, 43585, 43583, 43604, 43593, 43597, 43553, 43583, 43557, 43582, 43588, 43609, 43581, 43617, 43580, 43594, 43599, 43589, 43608, 43582, 43601, 43588, 43595, 43588, 43601, 43595, 43608, 43590, 43605, 43601, 43560, 43588, 43576, 43581, 43593, 43578, 43564, 43568, 43544, 43566, 43550, 43569, 43552, 43579, 43553, 43557, 43537, 43571, 43557, 43566, 43605, 43552, 43565, 43569, 43585, 43583, 43583, 43602, 43581, 43567, 43574, 43589, 43594, 43589, 43545, 43581, 43568, 43539, 43585, 43605, 43577, 43599, 43595, 43597, 43601, 43617, 43633, 43605, 43553, 43547, 43598, 43559, 43597, 43584, 43571, 43567, 43589, 43581, 43596, 43581, 43553, 43603, 43579, 43584, 43601, 43583, 43623, 43579, 43599, 43583, 43617, 43600, 43609, 43569, 43597, 43628, 43583, 43589, 43589, 43573, 43578, 43565, 43564, 43607, 43627, 43590, 43607, 43601, 43606, 43605, 43575, 43575, 43588, 43583, 43587, 43576, 43585, 43597, 43593, 43571, 43557, 43573, 43572, 43573, 43579, 43589, 43560, 43601, 43578, 43577, 43605, 43607, 43649, 43612, 43578, 43577, 43577, 43569, 43601, 43571, 43579, 43593, 43569, 43551, 43585, 43557, 43593, 43578, 43561, 43549, 43557, 43571, 43598, 43567, 43561, 43573, 43582, 43601, 43616, 43574, 43601, 43590, 43617, 43585, 43603, 43543, 43577, 43599, 43571, 43549, 43589, 43569, 43583, 43587, 43601, 43583, 43596, 43603, 43606, 43574, 43605, 43594, 43621, 43601, 43585, 43576, 43607, 43583, 43593, 43559, 43581, 43591, 43591, 43584, 43579, 43553, 43577, 43606, 43623, 43615, 43563, 43589, 43569, 43575, 43584, 43582, 43577, 43588, 43563, 43585, 43603, 43605, 43592, 43601, 43602, 43616, 43583, 43573, 43617, 43615, 43582, 43584, 43581, 43583, 43591, 43593, 43625, 43608, 43573, 43579, 43593, 43591, 43600, 43609, 43585, 43593, 43575, 43600, 43598, 43601, 43569, 43580, 43589, 43583, 43597, 43595, 43601, 43593, 43601, 43589, 43585, 43585, 43606, 43591, 43581, 43572, 43576, 43573, 43572, 43552, 43505, 43553, 43583, 43573, 43590, 43601, 43604, 43565, 43569, 43577, 43591, 43630, 43609, 43576, 43567, 43593, 43584, 43622, 43572, 43579, 43596, 43621, 43581, 43565, 43603, 43563, 43569, 43565, 43594, 43558, 43548, 43567, 43583, 43540, 43577, 43571, 43581, 43563, 43561, 43561, 43600, 43585, 43579, 43603, 43624, 43588, 43580, 43597, 43609, 43585, 43605, 43597, 43596, 43581, 43601, 43597, 43603, 43575, 43560, 43547, 43576, 43579, 43584, 43612, 43579, 43595, 43566, 43556, 43567, 43551, 43585, 43584, 43575, 43611, 43581, 43592, 43576, 43616, 43576, 43575, 43592, 43587, 43593, 43558, 43592, 43572, 43589, 43569, 43599, 43577, 43600, 43597, 43565, 43566, 43568, 43591, 43565, 43549, 43569, 43568, 43584, 43561, 43585, 43557, 43594, 43585, 43585, 43575, 43571, 43575, 43629, 43559, 43585, 43569, 43577, 43615, 43573, 43574, 43579, 43569, 43563, 43577, 43558, 43565, 43585, 43595, 43580, 43575, 43600, 43569, 43591, 43569, 43582, 43575, 43609, 43551, 43589, 43589, 43569, 43585, 43590, 43601, 43567, 43613, 43585, 43572, 43572, 43605, 43583, 43617, 43597, 43617, 43569, 43580, 43593, 43585, 43561, 43597, 43581, 43593, 43604, 43583, 43603, 43588, 43612, 43613, 43587, 43569, 43561, 43573, 43600, 43589, 43593, 43577, 43581, 43577, 43577, 43603, 43591, 43573, 43585, 43583, 43563, 43561, 43579, 43607, 43587, 43585, 43576, 43585, 43595, 43591, 43603, 43592, 43615, 43588, 43591, 43610, 43593, 43585, 43597, 43589, 43598, 43604, 43603, 43601, 43583, 43574, 43595, 43597, 43592, 43585, 43592, 43567, 43553, 43569, 43553, 43593, 43564, 43570, 43578, 43587, 43566, 43592, 43573, 43585, 43593, 43585, 43573, 43569, 43545, 43567, 43566, 43585, 43574, 43577, 43585, 43571, 43601, 43552, 43557, 43581, 43577, 43584, 43576, 43574, 43571, 43577, 43544, 43577, 43601, 43581, 43593, 43587, 43580, 43566, 43585, 43549, 43577, 43581, 43571, 43553, 43557, 43567, 43577, 43561, 43525, 43557, 43575, 43557, 43553, 43558, 43535, 43593, 43550, 43567, 43551, 43581, 43575, 43550, 43577, 43574, 43583, 43588, 43563, 43571, 43597, 43575, 43596, 43569, 43577, 43605, 43561, 43591, 43545, 43557, 43587, 43537, 43564, 43555, 43577, 43611, 43573, 43577, 43579, 43570, 43559, 43577, 43569, 43560, 43595, 43593, 43585, 43580, 43585, 43595, 43573, 43605, 43560, 43599, 43576, 43585, 43588, 43574, 43551, 43579, 43577, 43565, 43585, 43583, 43571, 43557, 43568, 43552, 43583, 43599, 43572, 43575, 43571, 43588, 43536, 43561, 43593, 43580, 43547, 43569, 43589, 43590, 43579, 43585, 43617, 43571, 43598, 43594, 43605, 43561, 43593, 43582, 43601, 43576, 43569, 43584, 43569, 43577, 43563, 43553, 43580, 43582, 43559, 43567, 43563, 43605, 43560, 43568, 43587, 43596, 43579, 43575, 43610, 43561, 43585, 43585, 43571, 43561, 43596, 43609, 43601, 43601, 43607, 43581, 43560, 43585, 43577, 43593, 43577, 43564, 43564, 43571, 43576, 43597, 43569, 43583, 43555, 43537, 43577, 43572, 43577, 43574, 43581, 43565, 43571, 43583, 43565, 43591, 43573, 43585, 43613, 43583, 43583, 43601, 43609, 43611, 43597, 43569, 43589, 43572, 43597, 43592, 43584, 43577, 43584, 43583, 43579, 43592, 43568, 43584, 43603, 43593, 43589, 43579, 43572, 43611, 43628, 43592, 43581, 43591, 43573, 43604, 43574, 43571, 43573, 43593, 43563, 43605, 43598, 43603, 43561, 43585, 43580, 43545, 43553, 43591, 43601, 43605, 43592, 43596, 43612, 43545, 43611, 43577, 43567, 43627, 43601, 43611, 43601, 43619, 43588, 43625, 43585, 43606, 43593, 43617, 43627, 43593, 43592, 43617, 43617, 43588, 43585, 43628, 43591, 43621, 43601, 43599, 43627, 43633, 43597, 43601, 43611, 43585, 43602, 43582, 43585, 43594, 43601, 43597, 43591, 43593, 43614, 43611, 43609, 43573, 43615, 43573, 43601, 43637, 43632, 43601, 43603, 43589, 43615, 43631, 43597, 43585, 43573, 43579, 43581, 43583, 43561, 43569, 43617, 43591, 43573, 43584, 43596, 43592, 43607, 43585, 43591, 43588, 43595, 43593, 43569, 43580, 43597, 43585, 43585, 43593, 43596, 43583, 43577, 43611, 43602, 43596, 43573, 43597, 43603, 43585, 43587, 43600, 43592, 43581, 43591, 43595, 43600, 43581, 43581, 43585, 43583, 43569, 43582, 43591, 43585, 43593, 43572, 43607, 43590, 43604, 43588, 43567, 43611, 43603, 43590, 43633, 43606, 43604, 43582, 43584, 43605, 43595, 43563, 43607, 43601, 43605, 43595, 43603, 43593, 43592, 43611, 43557, 43565, 43573, 43600, 43584, 43595, 43585, 43600, 43575, 43583, 43580, 43565, 43581, 43569, 43601, 43585, 43584, 43597, 43572, 43591, 43593, 43563, 43593, 43607, 43541, 43603, 43578, 43617, 43573, 43596, 43596, 43625, 43595, 43527, 43608, 43585, 43603, 43577, 43585, 43571, 43595, 43601, 43571, 43592, 43573, 43585, 43593, 43607, 43603, 43565, 43596, 43540, 43597, 43583, 43580, 43589, 43580, 43561, 43553, 43585, 43590, 43557, 43598, 43585, 43569, 43608, 43595, 43607, 43578, 43585, 43583, 43565, 43576, 43557, 43564, 43557, 43569, 43577, 43565, 43571, 43593, 43585, 43573, 43611, 43601, 43577, 43601, 43573, 43553, 43571, 43559, 43585, 43576, 43590, 43585, 43564, 43585, 43559, 43581, 43576, 43585, 43575, 43583, 43593, 43584, 43581, 43601, 43600, 43601, 43580, 43590, 43581, 43584, 43573, 43579, 43553, 43593 ] }, { "time": 1579894204819, "label": "PAM", "light_intensity": 14.4, "r": 63.8, "g": 32, "b": 18.4, "w": 109.2, "temperature": 23.7, "humidity": 35.835, "pressure": 979.568, "temperature2": 23.81, "humidity2": 34.436, "pressure2": 979.867, "contactless_temp": 24.33, "thickness": 0.3, "compass_direction": "??", "compass": -1, "angle": 2.324, "pitch": 2.32, "roll": 0.18, "data_raw": [ 1264, 43622, 1261, 43581, 1262, 43577, 1262, 43601, 1264, 43600, 1264, 43574, 1266, 43601, 1261, 43597, 1262, 43592, 1268, 43598, 1267, 43561, 1262, 43596, 1262, 43611, 1263, 43619, 1266, 43604, 1266, 43611, 1262, 43590, 1269, 43617, 1269, 43614, 1268, 43596, 1264, 43585, 1267, 43608, 1267, 43629, 1265, 43548, 1270, 43601, 1272, 43571, 1266, 43581, 1266, 43629, 1270, 43599, 1269, 43577, 1265, 43609, 1268, 43632, 1270, 43598, 1270, 43585, 1266, 43579, 1269, 43603, 1271, 43596, 1270, 43611, 1266, 43611, 1266, 43597, 1272, 43565, 1274, 43601, 1269, 43615, 1269, 43627, 1276, 43613, 1273, 43630, 1269, 43603, 1267, 43591, 1273, 43641, 1276, 43620, 1274, 43601, 1268, 43567, 1270, 43591, 1276, 43581, 1275, 43607, 1271, 43581, 1269, 43585, 1278, 43607, 1274, 43581, 1269, 43585, 1274, 43585, 1276, 43583, 1276, 43625, 1276, 43579, 1269, 43573, 1270, 43589, 1275, 43620, 1273, 43595, 1270, 43596, 1277, 43589, 1274, 43591, 1276, 43581, 1269, 43581, 1276, 43601, 1278, 43595, 1277, 43579, 1274, 43573, 1274, 43583, 1278, 43617, 1278, 43633, 1273, 43608, 1272, 43597, 1278, 43585, 1276, 43579, 1275, 43585, 1277, 43577, 1276, 43592, 1272, 43563, 1278, 43614, 1278, 43603, 1278, 43547, 1272, 43608, 1274, 43613, 1282, 43613, 1277, 43600, 1272, 43597, 1273, 43601, 1280, 43616, 1279, 43594, 1275, 43603, 3330, 43733, 3682, 43467, 3766, 43431, 3786, 43405, 3796, 43416, 3806, 43419, 3807, 43391, 3808, 43407, 3809, 43377, 3813, 43397, 3808, 43415, 3805, 43385, 3815, 43411, 3813, 43456, 3810, 43401, 3807, 43393, 3810, 43416, 3810, 43415, 3809, 43400, 3814, 43409, 3806, 43379, 3804, 43411, 3804, 43393, 3809, 43425, 3810, 43393, 3805, 43366, 3810, 43388, 3809, 43408, 3804, 43375, 3808, 43365, 3821, 43365, 3823, 43361, 3817, 43401, 3819, 43384, 3824, 43359, 3821, 43385, 3819, 43367, 3819, 43365, 3820, 43371, 3821, 43388, 3824, 43345, 3817, 43313, 3822, 43361, 3818, 43345, 3817, 43348, 3834, 43329, 3829, 43311, 3834, 43345, 3832, 43383, 3834, 43329, 3824, 43337, 3828, 43365, 3828, 43329, 3830, 43344, 3831, 43351, 3833, 43356, 3826, 43367, 3825, 43339, 3833, 43325, 3834, 43339, 3830, 43353, 3831, 43289, 3831, 43312, 3825, 43322, 3822, 43317, 3830, 43292, 3829, 43319, 3830, 43313, 3830, 43300, 3829, 43282, 3824, 43345, 3825, 43303, 3832, 43281, 3826, 43311, 3825, 43313, 3818, 43297, 3816, 43309, 3818, 43288, 3818, 43277, 3818, 43303, 3818, 43281, 3818, 43325, 3813, 43258, 3815, 43291, 3814, 43333, 3816, 43318, 3817, 43313, 3818, 43317, 3818, 43289, 3816, 43281, 3520, 43325, 3046, 43397, 2662, 43473, 2356, 43524, 2122, 43533, 1941, 43539, 1809, 43590, 1722, 43531, 1649, 43583, 1596, 43583, 1556, 43578, 1526, 43591, 1504, 43605, 1486, 43603, 1472, 43592, 1697, 43283, 1597, 43337, 1549, 43345, 1498, 43361, 1455, 43357, 1416, 43409, 1390, 43423, 1367, 43456, 1346, 43455, 1321, 43472, 1304, 43461, 1293, 43457, 1279, 43462, 1271, 43464, 1265, 43489, 1249, 43951, 3371, 43595, 3641, 43409, 3739, 43323, 3776, 43341, 3787, 43355, 3794, 43321, 3800, 43319, 3798, 43318, 3799, 43346, 3796, 43321, 3801, 43294, 3801, 43335, 3790, 43341, 3797, 43311, 3798, 43337, 3791, 43319, 3793, 43318, 3793, 43333, 3785, 43329, 3786, 43309, 3791, 43297, 3789, 43295, 3790, 43331, 3785, 43347, 3785, 43313, 3792, 43301, 3783, 43329, 3786, 43297, 3788, 43304, 3818, 43288, 3817, 43300, 3819, 43287, 3817, 43277, 3817, 43285, 3814, 43301, 3820, 43311, 3816, 43265, 3819, 43267, 3814, 43257, 3819, 43287, 3817, 43285, 3817, 43297, 3817, 43284, 3817, 43309, 3817, 43281, 3814, 43328, 3810, 43291, 3809, 43281, 3806, 43333, 3809, 43297, 3809, 43271, 3805, 43321, 3809, 43351, 3810, 43297, 3810, 43308, 3810, 43297, 3805, 43317, 3803, 43281, 3806, 43297, 3795, 43281, 3785, 43297, 3787, 43289, 3781, 43295, 3783, 43311, 3784, 43329, 3780, 43305, 3778, 43334, 3788, 43313, 3781, 43319, 3776, 43317, 3785, 43340, 3776, 43341, 3784, 43321, 3782, 43337, 1585, 43265, 3640, 43372, 3548, 43437, 3469, 43401, 3406, 43449, 3336, 43477, 3273, 43477, 3219, 43467, 3161, 43512, 3099, 43500, 3040, 43481, 2986, 43487, 2936, 43485, 2891, 43496, 2838, 43541 ] }, { "time": 1579894211290, "label": "SPAD", "absorbance": [ [ 7411, 9435, -40, 0.104365, 2, 3, 0 ], [ 65535, 9067, 0, -0.85901, 6, 1, 0 ] ], "spad": [ 42.726, 37.157, -40, 6.93 ], "light_intensity": 11.415, "r": 53, "g": 25, "b": 15, "w": 88, "temperature": 23.81, "humidity": 35.854, "pressure": 979.581, "temperature2": 23.94, "humidity2": 34.358, "pressure2": 979.884, "contactless_temp": 23.81, "thickness": 0.29, "compass_direction": "??", "compass": -1, "angle": 2.407, "pitch": 2.32, "roll": 0.65, "data_raw": [ ] } ], "data_raw": [ ] } ] ], "app_os": "macOS 18.7.0", "app_name": "PhotosynQ", "app_version": "1.6.11", "app_device": "x64", "location": False, "time_offset": "America/Detroit" }