{"id":26,"date":"2015-09-03T11:36:00","date_gmt":"2015-09-03T11:36:00","guid":{"rendered":"http:\/\/jasonstark.com\/website\/?p=26"},"modified":"2020-07-11T01:43:12","modified_gmt":"2020-07-11T01:43:12","slug":"vernier-loggerpro-function-reference","status":"publish","type":"post","link":"https:\/\/jasonstark.com\/website\/2015\/09\/03\/vernier-loggerpro-function-reference\/","title":{"rendered":"Vernier LoggerPro Function Reference"},"content":{"rendered":"\n<p>LoggerPro functions for use in Calculated Columns.&nbsp; I always Google for this information and can never find it online.&nbsp; It is hidden in the \u201cHelp\u201d for LoggerPro (who would think to look there!?).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Functions<\/h3>\n\n\n\n<p>\u2013 Trigonometric functions will use degrees or radians as set in the Settings for (file name) in the File menu.<\/p>\n\n\n\n<p>\u2013 For more information about Savitsky-Golay methods see Numerical Recipes in C:&nbsp;<a href=\"http:\/\/lib-www.lanl.gov\/numerical\/bookcpdf.html\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/lib-www.lanl.gov\/numerical\/bookcpdf.html<\/a>&nbsp;chapter 15<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">analysis<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Function<\/td><td>Description<\/td><\/tr><tr><td>analysis<\/td><td>(\u201cX\u201d, startRow, endRow)<br>Takes all columns named \u201cX\u201d and extracts startRow to endRow for each of those columns, appending the values into a single column.<\/td><\/tr><tr><td>dataSets<\/td><td>datasets(\u201cX\u201d)<br>Appends the dataset names of all datasets that have a column named \u201cX\u201d. Use analysis and datasets together to create a graph (analysis on the vertical axis and datasets on the horizontal). for example, if you had 3 datasets as follows:<br>DS1&nbsp; DS2&nbsp; DS3<br>X &nbsp; &nbsp; &nbsp; X &nbsp; &nbsp;&nbsp; Y<br>1 &nbsp; &nbsp;&nbsp; 11 &nbsp;&nbsp;&nbsp; 21<br>2 &nbsp; &nbsp;&nbsp; 12 &nbsp;&nbsp;&nbsp; 22and then added analysis(\u201cX\u201d, 1, 1) and datasets(\u201cX\u201d) you would get:datasets &nbsp;&nbsp; analysis<br>DS1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>DS2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>beats per minute<\/td><td>BeatsPerMinute(\u201cSignal\u201d, \u201cTime\u201d, intervalInSeconds, minPercent, maxPercent, noise)<br>Returns the number of beats per minute of the values in \u201cSignal\u201d vs. \u201cTime\u201d. This function is similar to the rate function except that the interval given here is always in seconds and the returned value is always in minutes. For example, if \u201cTime\u201d is in seconds then: beatsPerMinute(\u201cSignal\u201d, \u201cTime\u201d, interval, min, max, noise) = 60 * rate(\u201cSignal\u201d, \u201cTime\u201d, interval, min, max, noise)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">blood pressure<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>diastolic<\/td><td>The measured arterial pressure when the heart is at rest. \u201cPressure\u201d and a \u201cTime\u201d column as inputs and return a single number.<br>diastolic(\u201cPressure\u201d, \u201cTime\u201d)<br>\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>Returns the smaller number of blood pressure<\/td><\/tr><tr><td>meanArterialPressure<\/td><td>meanArterialPressure(\u201cPressure\u201d, \u201cTime\u201d)\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>Returns the pressure value at the max peak used for blood pressure calculations.<\/td><\/tr><tr><td>Oscillations<\/td><td>Oscillations(\u201cPressure\u201d, \u201cTime\u201d)<br>\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>Returns the Oscillations of the peaks and valleys used to calculate systolic and other blood pressure values.<\/td><\/tr><tr><td>OscillatoryPeaks<\/td><td>OscillatoryPeaks(\u201cPressure\u201d, \u201cTime\u201d)<br>\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>Returns the peaks used to calculate systolic, diastolic, and pulse (the \u201chigh\u201d values in \u201cOscillations\u201d).<\/td><\/tr><tr><td>pulse<\/td><td>pulse(\u201cPressure\u201d, \u201cTime\u201d)<br>\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>Returns the pulse using the inputs from the Blood Pressure Sensor (similar results, different algorithm as the other beats-per-minute functions)<\/td><\/tr><tr><td>systolic<\/td><td>systolic(\u201cPressure\u201d, \u201cTime\u201d)<br>\u201cPressure\u201d: Pressure values from the BPS<br>\u201cTime\u201d: Time the pressure values were recorded<br>The measured arterial pressure when the heart contracts. Returns the larger number of blood pressure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">boolean<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><\/td><td>For the boolean functions a 1 is considered true, 0 false and anything else an invalid input<\/td><\/tr><tr><td>AND<\/td><td>AND(X, Y) return 1 if and only if X and Y are both 1<\/td><\/tr><tr><td>NOT<\/td><td>NOT(X) return 1 if X is 0; 0 if X is 1<\/td><\/tr><tr><td>OR<\/td><td>OR(X, Y) return 1 if X or Y is 1<\/td><\/tr><tr><td>XOR<\/td><td>XOR(X, Y) return 1 if X or Y is 1 but not both<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">calculus<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>calculus &gt;<\/td><td><\/td><\/tr><tr><td>derivative<\/td><td>derivative(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>The numerical derivative is the weighted average of the slope of \u2018n\u2019 points around each point. You can set \u2018n\u2019 in Settings for (Name). If you don\u2019t supply an \u201cX\u201d column, the program will find one.<\/td><\/tr><tr><td>derivativeSG<\/td><td>derivativeSG(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>Savitsky-Golay derivative. Fits a polynomial to \u2018n\u2019 points around each point and computes the derivative of the polynomial at that point. You can set \u2018n\u2019 in Settings for (Name). If you don\u2019t supply an \u201cX\u201d column, the program will find one.<\/td><\/tr><tr><td>derivativeTimeShift<\/td><td>derivativeTimeShift(\u201cY\u201d, \u201cX\u201d)<br>Returns the derivative of \u201cY\u201d with respect to \u201cX\u201d.<br>This function is specifically designed to be used with photogate and picket fence data. The derivatives returned are adjusted to estimate values at the start of the timing interval, instead of the midpoint. For details see The Physics Teacher, Vol 35, April 1997, p. 220. The article written by William Leonard is entitled \u201cThe Dangers of Automated Data Analysis.\u201d<br>Average velocity during the time interval is equal to the instantaneous velocity at midpoint of the time interval.<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEqA.jpg\" alt=\"\"><br>Where<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEqB.jpg\" alt=\"\"><\/td><\/tr><tr><td>integral<\/td><td>integral(\u201cY\u201d,\u201dX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>The numerical integral is the running sum of the areas of rectangles calculated by the midpoint rule. The i\u2019th rectangle is (Yi \u2013 Y(i-1)) \/ (Xi \u2013 X(i-1)). If you don\u2019t supply an \u201cX\u201d column, the program will find one.<\/td><\/tr><tr><td>secondderivative<\/td><td>secondDerivative(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>Calculates the numerical second derivative of \u201cY\u201d with respect to \u201cX\u201d. If you don\u2019t supply an \u201cX\u201d column, the program will find one.<\/td><\/tr><tr><td>secondderivativeSG<\/td><td>secondDerivativeSG(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>Savitsky-Golay second derivative. Fits a polynomial to \u2018n\u2019 points around each point and computes the second derivative of the polynomial at that point. You can set \u2018n\u2019 in Settings for (Name). If you don\u2019t supply an \u201cX\u201d column, the program will find one.<\/td><\/tr><tr><td>secondderivative<br>Time Shift<\/td><td>secondDerivativeTimeShift(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>Numerical time-shifted second derivative. Calculates the second numerical derivative of \u201cY\u201d with respect to \u201cX\u201d. The values are shifted so that the derivatives are calculated at the midpoints between each two values. If you don\u2019t supply an \u201cX\u201d column, the program will find one.<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEq2.jpg\" alt=\"\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>collapse<\/td><td>collapse(\u201cX\u201d)<br>Returns a column with all non-numerical cells (blanks and text) removed.<\/td><\/tr><tr><td>collapseIndirect<\/td><td>collapseIndirect(X, Y)<br>Returns a column of only the rows in \u201cX\u201d corresponding to rows in \u201cY\u201d that have valid numerical cells.<\/td><\/tr><tr><td>constant<\/td><td>Constant(x, num)<br>x: A real number<br>num: A real number or a column<br>Generates a constant column filled with the value \u2018x\u2019.&nbsp; The number of values in the returned column is num, or if a column was passed in, the size of the passed-in column.<\/td><\/tr><tr><td>delta<\/td><td>delta (\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns a column of values where the i\u2019th value is the i\u2019th value in \u201cX\u201d minus the (i-1)\u2019th value in \u201cX\u201d.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">digital filtering<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>lowPassFilter<\/td><td>(\u201cY\u201d, \u201cX\u201d, \u201cripple\u201d, \u201cfreqCutoff\u201d)<br>\u201cY\u201d: The data column to be filtered<br>\u201cX\u201d: The associated time column for \u201cY\u201d<br>\u201cripple\u201d: The ripple allowed in the pass-band<br>\u201cfreqCutoff\u201d: Cut-off frequency (-3dB), in hertz<br>Applies a Chebyshev low-pass filter. For \u201cripple\u201d, enter a value that is a percent of the pass-band. To apply a Butterworth low-pass filter, set \u201cripple\u201d to 0.<\/td><\/tr><tr><td>highPassFilter<\/td><td>(\u201cY\u201d, \u201cX\u201d, \u201cripple\u201d, \u201cfreqCutoff\u201d)<br>\u201cY\u201d: The data column to be filtered<br>\u201cX\u201d: The associated time column for \u201cY\u201d<br>\u201cripple\u201d: The ripple allowed in the pass-band<br>\u201cfreqCutoff\u201d: Cut-off frequency (-3dB), in hertz<br>Applies a Chebyshev high-pass filter. For \u201cripple\u201d, enter a value that is a percent of the pass-band. To apply a Butterworth high-pass filter, set ripple to 0.<\/td><\/tr><tr><td>bandPassFliter<\/td><td>(\u201cY\u201d, \u201cX\u201d, \u201clowFreq\u201d, \u201chighFreq\u201d)<br>\u201cY\u201d: The data column to be filtered<br>\u201cX\u201d: The associated time column for \u201cY\u201d<br>\u201clowFreq\u201d: Low frequency cut-off (-3dB), in hertz<br>\u201chighFreq\u201d: High frequency cut-off (-3dB), in hertz<br>Ripple is automatically set to zero and is not adjustable. The function returns the signal with the frequencies outside the designated frequency range removed.<\/td><\/tr><tr><td>bandStopFliter<\/td><td>(\u201cY\u201d, \u201cX\u201d, \u201clowFreq\u201d, \u201chighFreq\u201d)<br>\u201cY\u201d: The data column to be filtered<br>\u201cX\u201d: The associated time column for \u201cY\u201d<br>\u201clowFreq\u201d: Low frequency cut-off (-3dB), in hertz<br>\u201chighFreq\u201d: High frequency cut-off (-3dB), in hertz<br>Ripple is automatically set to zero and is not adjustable. The function returns the signal with the frequencies inside the designated frequency range removed.<\/td><\/tr><tr><td>timeDecayFilter<\/td><td>(\u201cY\u201d, \u201cX\u201d, \u201cdecayConstant\u201d)<br>\u201cY\u201d: The data column to be filtered<br>\u201cX\u201d: The associated time column for \u201cY\u201d<br>\u201cdecayConstant\u201d: A value in seconds that determines the decay of \u201cY\u201d<br>Applies an exponential time decay to the signal.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>ElectrophoresisInterpolate<\/td><td>ElectrophoresisInterpolate(\u201cStd. Dist\u201d, \u201cStd. BP\u201d, \u201cDist\u201d)<br>\u201cStd. Dist\u201d: Distances from the standard<br>\u201cStd. BP\u201d: Base Pair Counts from the standard<br>\u201cDist\u201d: Distances to interpolate<br>Returns a column of base pair counts based on the Electrophoresis curve fit for \u201cStd. Dist\u201d vs. \u201cStd. BP\u201d given \u201cDist\u201d. Will NOT work if curve fit has been deleted. This function is used automatically when doing a Gel Analysis (Electrophoresis).<\/td><\/tr><tr><td>exp<\/td><td>exp(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns the exponent, exp(x) = e^x, where e is the natural log base (2.17\u2026).<\/td><\/tr><tr><td>integer<\/td><td>integer(\u201cX\u201d)<br>Extracts the integral part of values in \u201cX\u201d.<\/td><\/tr><tr><td>interpolate<\/td><td>interpolate(\u201cX\u201d)<br>Fills in missing values using linear interpolation.<\/td><\/tr><tr><td>ln<\/td><td>ln(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers larger than 0<br>Returns the natural logarithm. If b = ln(a) then e^b = a&nbsp; (Where e is the constant 2.17\u2026).<\/td><\/tr><tr><td>log<\/td><td>log(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers larger than 0<br>(Log base 10) If b = log(a) then 10^b = a.<\/td><\/tr><tr><td>modulo<\/td><td>modulo(\u201cX\u201d, n)<br>\u201cX\u201d: A column of integers<br>n: An integer larger than 0<br>Returns the remainder of each of the numbers in \u201cX\u201d when divided by n.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">photogate<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Blocked MidTimes<\/td><td>BlockedMidTimes(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Calculate the average times between blocked events from Gate 1 to Gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Blocked to Blocked<\/td><td>BlockedToBlocked(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Returns a column of the times between successive blocked events in gate 1 and blocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Blocked to Unblocked<\/td><td>BlockedToUnblocked(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Returns a column of the times between successive blocked events in gate 1 and unblocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Blocked to Unblocked MidTimes<\/td><td>Blocked to Unblocked MidTimes<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Calculate the average time between the blocked events in gate 1 and unblocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>derivativeTimeShift<\/td><td>DerivativeTimeShift (\u201cY\u201d, \u201cX\u201d)<br>Returns the derivative of \u201cY\u201d with respect to \u201cX\u201d.<br>This function is specifically designed to be used with photogate and picket fence data. The derivatives returned are adjusted to estimate values at the start of the timing interval, instead of the midpoint. For details see The Physics Teacher, Vol 35, April 1997, p. 220.<br>Average velocity during the time interval is equal to the instantaneous velocity at midpoint of the time interval.<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEqA.jpg\" alt=\"\"><br>Where<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEqB.jpg\" alt=\"\"><\/td><\/tr><tr><td>Pendulum Period<\/td><td>PendulumPeriod(\u201cTime\u201d, \u201cGate1\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>Calculate the time between every other blocked event on Gate 1. If you don\u2019t enter a \u201cTime\u201d column, the program will find one.<\/td><\/tr><tr><td>secondDerivativeTimeShift<\/td><td>secondDerivativeTimeShift(\u201cY\u201d, \u201cX\u201d)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>Numerical time-shifted second derivative. Calculates the second numerical derivative of \u201cY\u201d with respect to \u201cX\u201d. The values are shifted so that the derivatives are calculated at the midpoints between each two values. If you don\u2019t supply an \u201cX\u201d column, the program will find one.<img decoding=\"async\" src=\"https:\/\/jasonstark.com\/wordpress\/2015\/09\/03\/vernier-loggerpro-function-reference\/DerivEq2.jpg\" alt=\"\"><\/td><\/tr><tr><td>Unblocked to Blocked<\/td><td>UnblockedToBlocked(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Returns a column of the times between successive unblocked events in gate 1 and blocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Unblocked to Unblocked<\/td><td>UnblockedToUnblocked(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Returns a column of the times between successive unblocked events in gate 1 and unblocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Unblocked to Blocked MidTimes<\/td><td>Unblocked to Blocked MidTimes<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Calculate the average time between unblocked events in gate 1 and blocked events in gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><tr><td>Unblocked MidTimes<\/td><td>UnblockedMidTimes(\u201cTime\u201d, \u201cGate1\u201d, \u201cGate2\u201d)<br>\u201cTime\u201d: Optional. A column of real numbers (the times of events)<br>\u201cGate1\u201d: A column of photogate states (1\u2019s and 0\u2019s)<br>\u201cGate2\u201d: Optional. A column of photogate states (1\u2019s and 0\u2019s)<br>Calculate the average times between unblocked events from Gate 1 to Gate 2. If you don\u2019t enter a \u201cTime\u201d column, the program will find one. If you don\u2019t enter \u201cGate2\u201d, \u201cGate1\u201d will be used.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>rate<\/td><td>rate(\u201cY\u201d, \u201cX\u201d, t, m1, m2, n)<br>\u201cY\u201d: A column of real numbers<br>\u201cX\u201d: Optional. A column of real numbers<br>t: Optional. Time interval<br>m1: Optional. Minimum threshold<br>m2: Optional. Maximum threshold<br>n: Optional. Noise threshold<br>Returns the rate of \u201cY\u201d with respect to \u201cX\u201d, where t is the time interval measured, m1 is min percentage threshold, m2 is max percentage threshold, and n is noise threshold. \u201cX\u201d, t, m1, m2, and noise are all optional with default values \u201cX\u201d is time column, t = 1\/10 the range, m1 = 40%, m2 = 60%, and noise = 0. Details<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">rotary motion<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>amplitude<\/td><td>(\u201cData Column\u201d, \u201cTime Column\u201d, \u201cMin Percent\u201d, \u201cMax Percent\u201d, \u201cTime Interval\u201d)<br>\u201cData Column\u201d: Data for which you want to calculate amplitude<br>\u201cTime Column\u201d: Associated time column for \u201cData Column\u201d<br>\u201cMin Percent\u201d: Threshold used to detect valleys<br>\u201cMax Percent\u201d: Threshold used to detect peaks<br>\u201cTime Interval\u201d: Period of time over which amplitude is calculated (in the time units of the experiment)<br>Calculates peak to peak amplitude. For Min and Max Percent, enter values between 0 and 100. Smaller values are more sensitive to noise and thus more sensitive to real cycles. Larger values are less sensitive to noise; too large of a value may filter out real cycles. \u201cTime Interval\u201d ends at the row at which the value is calculated (the current time).<\/td><\/tr><tr><td>period<\/td><td>(\u201cData Column\u201d, \u201cTime Column\u201d, \u201cMin Percent\u201d, \u201cMax Percent\u201d, \u201cTime Interval\u201d)<br>\u201cData Column\u201d: Data for which you want to calculate period<br>\u201cTime Column\u201d: Associated time column for \u201cData Column\u201d<br>\u201cMin Percent\u201d: Threshold used to detect valleys<br>\u201cMax Percent\u201d: Threshold used to detect peaks<br>\u201cTime Interval\u201d: Period of time over which period is calculated (in the time units of the experiment)<br>Calculates the period of an oscillating function. For Min and Max Percent, enter values between 0 and 100. Smaller values are more sensitive to noise and thus more sensitive to real cycles. Larger values are less sensitive to noise; too large of a value may filter out real cycles. \u201cTime Interval\u201d ends at the row at which the value is calculated (the current time).<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>round<\/td><td>round(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Round. Returns the closest integer to x. If x is equidistant to two integers, round(x) gives the largest of the two (e.g., round(0.5) = 1).<\/td><\/tr><tr><td>smoothAve<\/td><td>smoothAve(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns a column of moving averages of the values in \u201cX\u201d. The width of the \u201cwindow\u201d to use when averaging points can be set in Settings for (Name)\u2026<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">statistics<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>abs<\/td><td>abs(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Absolute value. If x less than 0, then abs(x) = -x.&nbsp; Otherwise, abs(x) = x.<\/td><\/tr><tr><td>ceiling<\/td><td>ceiling(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns the smallest integer larger than or equal to x.<\/td><\/tr><tr><td>floor<\/td><td>floor(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns the largest integer smaller than or equal to x.<\/td><\/tr><tr><td>max<\/td><td>max(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Compares all the values in a single column and returns a single number-the largest number in the column.<\/td><\/tr><tr><td>max2<\/td><td>max2(\u201cX\u201d, \u201cY\u201d)<br>\u201cX\u201d: column of real numbers<br>\u201cY\u201d: A column of real numbers or a single number.<br>Compares all the values in a column against a real number (e.g max2(\u201cX\u201d, 5.1))<\/td><\/tr><tr><td>mean<\/td><td>mean(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Arithmetic mean. Returns the sum of all the values in \u201cX\u201d divided by the number of values.<\/td><\/tr><tr><td>median<\/td><td>Median(\u201cX\u201d).<br>\u201cX\u201d: A column of real numbers<br>If m = median(\u201cX\u201d), then half the numbers in \u201cX\u201d are greater than (or equal) to m, and half are less than or equal.<\/td><\/tr><tr><td>min<\/td><td>min(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Compares all the values in a single column ,and returns a single number-the smallest number in the column.<\/td><\/tr><tr><td>min2<\/td><td>min(\u201cX\u201d, \u201cY\u201d)<br>\u201cX\u201d: A column of real numbers<br>\u201cY\u201d: A column of real numbers or a single number<br>Compares all the values in a column against a real number (e.g min2(\u201cX\u201d, 5.1))<\/td><\/tr><tr><td>numRows<\/td><td>NumRows(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns a single value-the number of rows in the column.<\/td><\/tr><tr><td>randInt<\/td><td>randInt(min, max, num):<br>min: A real number<br>max: A real number<br>num: A real number or a column<br>Random Integer. Returns a column of random integers between min and max (inclusive). The size of the returned column is num. If num is a column, then the size will be the number of rows in that column.<\/td><\/tr><tr><td>randReal<\/td><td>randReal(min, max, num)<br>min: A real number<br>max: A real number<br>num: A real number or a column<br>Random Real. Returns a column of random real numbers between min and max (inclusive). The size of the returned column is num. If num is a column, then the size will be the number of rows in that column.<\/td><\/tr><tr><td>stddev<\/td><td>stddev(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Standard Deviation. Returns a column representing the standard deviations of each of the numbers in a column.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>step<\/td><td>step(start, increment, num, first, skip)<br>start: Start value<br>increment: Increment value<br>num: Number of values to generate<br>first: Optional. First non-empty row<br>skip: Optional. Rows to skip between each value<br>Generates a column \u201cnum\u201d rows long starting with \u201cstart\u201d and incrementing by \u201cincrement\u201d. \u201cnum\u201d can be a positive integer or a column name. Optional parameters: \u201cfirst\u201d is the first non-empty row and \u201cskip\u201d is the number of rows to skip between each value.<\/td><\/tr><tr><td>StepColumnBase<\/td><td>stepColumnBased(\u201cX\u201d, start, increment, first, skip)<br>start: Start value<br>increment: increment value<br>first: Optional. First non-empty row<br>skip: Optional. Row to skip between each value<br>Generates a column based on non-empty values in column \u201cX\u201d starting with \u201cstart\u201d and incrementing by \u201cincrement.\u201d \u201cFirst\u201d is the first non-empty row and \u201cskip\u201d is the number of rows to skip between each value.<\/td><\/tr><tr><td>subset<\/td><td>subset(\u201cX\u201d, startRow, step)<br>\u201cX\u201d: A column of real numbers<br>startRow: An integer larger than 0<br>step: An integer larger than 0<br>Extract a subset. Returns a column extracted from \u201cX\u201d starting with \u2018startRow\u2019 by \u2018step\u2019. For example, subset(\u201cX\u201d, 1, 2) will get every second row of \u201cX\u201d starting with row 1.<\/td><\/tr><tr><td>sum<\/td><td>Sum(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Returns a column whose n\u2019th value is the sum of the values in \u201cX\u201d from row 1 to n.<\/td><\/tr><tr><td>sqrt<\/td><td>Square root. \u201cX\u201d: A column of non-negative real numbers.<br>If x is the square root of y, then x*x = y.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">trigonometric<\/h2>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>sin<\/td><td>sin(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>In a right triangle with angle between two sides \u2018x\u2019, sin(x) is the length of the opposite side divided by the hypotenuse.<\/td><\/tr><tr><td>cos<\/td><td>cos(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>In a right triangle with angle between two sides \u2018x\u2019, cos(x) is the length of the adjacent side divided by the hypotenuse.<\/td><\/tr><tr><td>tan<\/td><td>tan(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>In a right triangle with angle between two sides \u2018x\u2019, tan(x) is the length of the opposite side divided by the adjacent side.<\/td><\/tr><tr><td>asin<\/td><td>asin(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers between -1 and 1<br>Arcsine function. asin(x) = the angle whose sine is x.<\/td><\/tr><tr><td>acos<\/td><td>acos(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers between -1 and 1<br>Arccosine function. acos(x) = the angle whose cosine is x.<\/td><\/tr><tr><td>atan<\/td><td>atan(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Arctangent function. atan(x) = the angle whose tangent is x. The result will be between -pi\/2 and pi\/2.<\/td><\/tr><tr><td>sinh<\/td><td>sinh(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Hyperbolic sine.<\/td><\/tr><tr><td>cosh<\/td><td>cosh(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Hyperbolic cosine.<\/td><\/tr><tr><td>tanh<\/td><td>tanh(\u201cX\u201d)<br>\u201cX\u201d: A column of real numbers<br>Hyperbolic tangent.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Value<\/td><td>Value(n, \u201cX\u201d)<br>n: Number of rows backwards (when n &lt; 0) or forwards (n &gt;0) in column \u201cX\u201d to extract a value from.<br>\u201cX\u201d: Column from which to extract values .<br>Create a new column from another column by extracting offset values.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>If data are imported from an experiment file, you may want to specify the independent column. For example, if the imported data included \u201ctime\u201d in the first column but you wanted to calculate the derivative of pH with respect to volume, you have to define the derivative as derivative(\u201cpH\u201d,\u201dVolume\u201d).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LoggerPro functions for use in Calculated Columns.&nbsp; I always Google for this information and can never find it online.&nbsp; It is hidden in the \u201cHelp\u201d for LoggerPro (who would think to look there!?). Functions \u2013&hellip;<\/p>\n<p class=\"excerpt-more-link-wrapper\"><a class=\"excerpt-more-link\" href=\"https:\/\/jasonstark.com\/website\/2015\/09\/03\/vernier-loggerpro-function-reference\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,14,17],"tags":[],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-academics","category-engineering","category-modeling-instruction"],"_links":{"self":[{"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/posts\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/comments?post=26"}],"version-history":[{"count":1,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/posts\/26\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/categories?post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jasonstark.com\/website\/wp-json\/wp\/v2\/tags?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}