Historical Seawater Data - Moss Landing Marine Labs Doument updated 06/26/24 --Data Disclaimer-- Moss Landing Marine Laboratories (MLML) provides these data "as is", with no warranty, expressed or implied, of the data quality or consistency. Historical Seawater Data - Moss Landing Marine Labs --Data Disclaimer-- Moss Landing Marine Laboratories (MLML) provides these data "as is", with no warranty, expressed or implied, of the data quality or consistency. It is provided without support and without obligation on the part of MLML to assist in its use, correction, modification, or enhancement. For use in publication, authors should obtain written permission from the director of MLML, and acknowledge MLML as the data source in those publications. --Contacts-- Data Manager: Steven Cunningham (Steven.cunningham@sjsu.edu) --Data Citation-- [MLML] Moss Landing Marine Labs. 2014. Historical Seawater Data (insert date range) [Internet]. [cited (insert date of download)]. Available from: --Brief Narrative-- Seawater data observations are collected from raw seawater drawn through an intake pipe. Prior to October 31, 2013, the intake opening was set at a depth of ~18.3 m (60ft) below mean lower low water (MLLW). Due to sediment build-up around the pipe, the intake opening was raised to ~16.6m (54.4ft) below MLLW on October 31, 2013. The intake opening is located at 36.8025N and 121.7915W The seawater sensors are cleaned of biofouling agents on a weekly/twice-weekly interval, though some data drift can be observed in transmission, beam attenution, and fluorescence. Full maintenance Log available at: https://docs.google.com/spreadsheets/d/1KSEeCiINy9HNK2eE12wzfdXaGwKs50c7/edit?usp=sharing&ouid=115377605326757725344&rtpof=true&sd=true Sensors and Calibrations/Redeployments Seabird SBE19 CTD: First deployed Sept 3, 2010; swapped with calibrated CTD on Aug 26, 2022; AADI Oxygen Optode: First deployed Sept 3, 2010; redeployed following calibration on Aug 13, 2012; C-Star Transmissometer (10cm): First deployed Sept 3, 2010; calibrated on January 25, 2012; WetStar Fluorometer: First deployed Sept 3, 2010: calibrated on Nov 13, 2023; Honeywell Durafet III: First deployed May 4, 2012; replaced 2022; Last calibrated Oct 12, 2023 Turner C-Sense: First deployed November 2015. calibrated in Mar 2017. --QAQC-- Quality assurance and quality control analysis based on standards set forth by Integrated Ocean Observing Systems' (IOOS) Quality Assurance for Real-Time Oceanographic Data (QARTOD): http://www.ioos.noaa.gov/qartod/welcome.html Flags as follows--- 1 = Pass; Data have passed critical real-time quality control tests and are deemed adequate for use as preliminary data 2 = Not Evaluated; Data have not been QC-tested, or the information on the quality is not available 3 = Suspect or of High Interest; Data are considered to be either suspect or of high interest to data providers and users. They are flagged suspect to draw further attention to them by operators 4 = Fail; Data are considered to have failed one or more critical real-time QC checks. If they are deciminated at all, it should be readily apparent that they are not of acceptable quality. 9 = Missing data; Data are missing/NULL/NAN --Quality Checking: Data were checked against the following thresholds-- Temp/Optode Temp: C Sensor range test -5 t_sensor_max: flag = 4 elif math.isnan(val) == True: flag = 9 else: flag = 1 return flag def userRange( val , t_user_min , t_user_max ): # val = current data point # t_user_min = minimum scaled sensor value # t_user_max = maximum scaled sensor value if val < t_user_min or val > t_user_max: flag = 3 elif math.isnan(val) == True: flag = 9 else: flag = 1 return flag def flatLine( val , comp , eps , rep_cnt_fail=6 , rep_cnt_suspect=3 ): # val = current datapoint # comp = comparison values (n). Must be n>rep_cnt_fail # eps = tolerance value # rep_cnt_fail = number of repeated equal values to fail (default=6) # rep_cnt_suspect = number of repeated equal values to suspect (default=3) fail=rep_cnt_fail suspect=rep_cnt_suspect eps=eps if len(comp) < fail: raise ValueError("Not enough values to compare. Number of values in comp must be greater than rep_cnt_fail and rep_cnt_suspect.") count = 0 flag=[] for i in np.arange(len(comp)): test = abs(val - comp[i]) if test<=eps: count+= 1 if count >= suspect: flag.append(3) count = 0 for i in np.arange(len(comp)): test = abs(val - comp[i]) if test<=eps: count+= 1 if count >= fail: flag.append(4) else: flag.append(1) def spike_ref(current_temp, current_time, compList, compTimes, thrshld_low, thrshld_high, time_gap_threshold): # Ensure compList has sufficient length if len(compList) < 2 or len(compTimes) < 2: return 2 # Not enough data # Calculate the time gap last_time = compTimes[0] time_gap = current_time - last_time # Check if time gap exceeds the threshold if time_gap > time_gap_threshold: return 2 # Low flag due to time gap # Calculate the baseline mean from historical data mean = np.nanmean(compList[:3]) # Calculate the spike reference value (difference between current temp and baseline mean) spk_ref = abs(current_temp - mean) # Determine the flag based on thresholds if spk_ref >= thrshld_high: return 4 # Spike detected elif spk_ref >= thrshld_low: return 3 # Near spike else: return 1 # No spike