From 177ed364b71728b414e39cb9e7d5c837e69ac19d Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 5 Dec 2017 12:42:28 -0800 Subject: [PATCH 01/48] remove the old Database class --- pybmpdb/__init__.py | 11 +- pybmpdb/dataAccess.py | 558 +------------------------------ pybmpdb/summary.py | 107 ------ pybmpdb/tests/test_dataAccess.py | 290 ---------------- pybmpdb/tests/test_summary.py | 38 --- 5 files changed, 10 insertions(+), 994 deletions(-) diff --git a/pybmpdb/__init__.py b/pybmpdb/__init__.py index a966638..8d14bff 100644 --- a/pybmpdb/__init__.py +++ b/pybmpdb/__init__.py @@ -1,11 +1,4 @@ -from .dataAccess import Database, db_connection, get_data -from .summary import ( - CategoricalSummary, - DatasetSummary, - getSummaryData, - setMPLStyle, - categorical_boxplots, - categorical_stats, -) +from .dataAccess import * +from .summary import * from .tests import test diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index 7f32e2a..580f8fa 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -15,7 +15,14 @@ __all__ = [ - 'Database', + 'db_connection', + 'get_default_query', + 'get_data', + 'load_from_access', + 'load_from_csv', + 'prepare_data', + 'transform_parameters', + 'to_DataCollection' ] @@ -286,552 +293,3 @@ def to_DataCollection(df, **kwargs): # pragma: no cover stationcol='station', paramcol='parameter', othergroups=othergroups, pairgroups=pairgroups, **kwargs) ) - - -class Database(object): # pragma: no cover - """Top-level entry point for International BMP Database analysis - - Parameters - ---------- - filename : string - CSV file or MS Access database containing the data. - dbtable : optional string (defaults to the bundled data') - Table in the MS Access database storing the data for - analysis. Only used if `usingdb` is True. - catanalysis : optional bool (default = False) - Toggles the filtering for data that have been approved for - BMP Category-level analysis - - Attributes - ---------- - dbfile : string - Full path to the database file. - driver : string - ODBC-compliant Microsoft Access driver string. - category_type : string - See Input section. - usingdb : bool - See Input section. - excluded_parameters : list of string or None - See `parametersToExclude` in Input section. - data : pandas DataFrame - DataFrame of all of the data found in the DB or CSV file. - - """ - def __init__(self, filename=None, dbtable=None, sqlquery=None, - catanalysis=False, useTex=True, ndscaler=None): - - self.file = filename or wqio.download('bmpdata') - self.usingdb = os.path.splitext(self.file)[1] in ['.accdb', '.mdb'] - self.catanalysis = catanalysis - self.useTex = useTex - self.ndscaler = ndscaler or _handle_ND_factors - - # property initialization - self.__data_raw = None - self.__data_cleaned = None - self.__data_final = None - self._data = None - - if self.usingdb: - self._sqlquery = sqlquery - if dbtable is None: - dbtable = 'bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014' - self._dbtable = dbtable - self.driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' - else: - self._sqlquery = None - self._dbtable = None - self.driver = None - - self._row_headers = [ - 'category', 'epazone', 'state', 'site', 'bmp', - 'station', 'storm', 'sampletype', 'watertype', - 'paramgroup', 'units', 'parameter', 'fraction', - 'initialscreen', 'wqscreen', 'catscreen', 'balanced', - 'bmptype', 'pdf_id', 'site_id', 'bmp_id', - ] - - self.agg_rules = { - 'res': 'mean', - 'qual': 'min', - 'sampledatetime': 'min' - } - - @property - def dbtable(self): - return self._dbtable - @dbtable.setter - def dbtable(self, value): - self._dbtable = value - - @property - def sqlquery(self): - if self._sqlquery is None: - sqlfile = resource_filename('pybmpdb.data', 'default.sql') - with open(sqlfile, 'r') as sql: - self._sqlquery = sql.read().format(self.dbtable) - return self._sqlquery - @sqlquery.setter - def sqlquery(self, value): - self._sqlquery = value - - @property - def _data_raw(self): - if self.__data_raw is None: - if self.usingdb: - # SQL query text, execution, data retrieval - df = get_data(self.sqlquery, self.file, driver=self.driver) - else: - df = pandas.read_csv(self.file, parse_dates=['sampledate'], encoding='utf-8') - - return df.fillna({'wq_qual': '='}) - - @property - def _data_cleaned(self): - if self.__data_cleaned is None: - units_norm = { - u['unicode']: info.getNormalization(u['name']) - for u in info.units - } - - target_units = { - p['name'].lower(): info.getUnitsFromParam(p['name'], attr='unicode') - for p in info.parameters - } - - # rename columns: - rename_columns = { - 'wq_qual': 'qual', - 'wq_value': 'res', - 'wq_units': 'units', - 'raw_parameter': 'general_parameter', - 'category': 'category' - } - - biofilters = { - 'Biofilter - Grass Swale': 'Grass Swale', - 'Biofilter - Grass Strip': 'Grass Strip', - } - - drop_columns = ['ms', '_parameter'] - self.__data_cleaned = ( - self._data_raw - .rename(columns=rename_columns) - .dropna(subset=['res']) - .assign(qual=lambda df: df['qual'].str.strip()) - .assign(res=lambda df: df['res'] * _handle_ND_factors(df)) - .assign(qual=lambda df: _handle_ND_qualifiers(df)) - .assign(initialscreen=lambda df: _process_screening(df, 'initialscreen')) - .assign(wqscreen=lambda df: _process_screening(df, 'wqscreen')) - .assign(catscreen=lambda df: _process_screening(df, 'catscreen')) - .assign(station=lambda df: df['station'].str.lower()) - .assign(sampletype=lambda df: _process_sampletype(df, 'sampletype')) - .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) - .assign(units=lambda df: df['units'].map( - lambda u: info.getUnits(u, attr='unicode') - )) - .assign(_parameter=lambda df: df['parameter'].str.lower().str.strip()) - .assign(fraction=lambda df: df['fraction'].str.lower().str.strip()) - .replace({'category': biofilters}) - .pipe(wqio.utils.normalize_units, units_norm, target_units, paramcol='_parameter', - rescol='res', unitcol='units', napolicy='raise') - .drop(drop_columns, axis=1) - .query("res > 0") - ) - - return self.__data_cleaned - - @property - def _data_final(self): - if self.__data_final is None: - self.__data_final = ( - self._data_cleaned - .groupby(by=self._row_headers) - .agg(self.agg_rules) - .set_index('sampledatetime', append=True) - ) - return self.__data_final - - @property - def data(self): - if self._data is None: - self._data = self._data_final - return self._data - @data.setter - def data(self, df): - self._data = df - - @property - def index(self): - return {name: level for level, name in enumerate(self.data.index.names)} - - @property - def bmp_categories(self): - return self.index_values('category') - - @property - def params(self): - return self.index_values('parameter') - - @property - def parameters(self): - self._parameters = self._get_parameters(asobj=True) - return self._parameters - - @property - def parameter_lookup(self): - return {p.name: p for p in self.parameters} - - def index_values(self, levelname): - """ Fetch unique values of a level of the index of ``data`` - - Parameters - ---------- - levelname : string - - Returns - ------- - values : np.array - - """ - return self.data.index.get_level_values(levelname).unique().tolist() - - def connect(self): - if self.usingdb: - return db_connection(self.file) - else: - raise ValueError("can't connect to {}".format(self.file)) - - def _get_parameters(self, asobj=True): - """ - Looks at the dataframe `tabledata` (from `getTableData`) and returns a list - of Parameter objects for each unique parameter-unit combination. - - Ideally, there should only be one unit for each parameter. - - Input: - usingdb (bool, default False) : toggles reading from the database or a - local csv file - csvfile (string, default 'bmp/bmpcats.csv') : path and filename to the - datafile - - Returns - ------- - parameters (list of Parameter objects) - - """ - - # groups the data by parameter, tex, and units - parameter_unit_levels = ['parameter', 'units'] - params_df = self.data.reset_index()[parameter_unit_levels].drop_duplicates() - - if params_df.shape[0] > params_df['parameter'].unique().shape[0]: - raise ValueError('dataframe does not have consistent units') - - if self.useTex: - parameters = [ - wqio.Parameter( - name=info.getParam(row['parameter'], attr='tex'), - units=info.getUnits(row['units'], attr='tex') - ) for row in params_df.to_dict(orient='records') - ] - else: - parameters = [ - wqio.Parameter(name=row['parameter'], units=row['units']) - for row in params_df.to_dict(orient='records') - ] - - return parameters - - def _check_for_parameters(self, parameter_names): - if np.isscalar(parameter_names): - parameter_names = [parameter_names] - return np.all([p in self.params for p in parameter_names]) - - def dbtable_to_csv(self, tablename, filepath=None): - ''' - Converts all relevant tables in the DB to CSV files - ''' - if not self.usingdb: - raise NotImplementedError('`Database` source is not an Access Database') - if filepath is None: - filepath = 'bmpdb.csv' - - df = get_data(self.sqlquery, self.file, driver=self.driver) - df.to_csv(filepath, index=False, encoding='utf-8') - - def select(self, **kwargs): - """Select data from the database. - - Parameters - ---------- - Optional kwargs: - You can additioanlly pass keyword arguments that define - selection criteria on the data. Values can be either strings - (single values) or lists of strings (multiple values). - Valid Keys are: - 'category', 'site', 'bmp', 'storm', 'paramgroup', - 'units', 'parameter', 'sampletype', 'epazone', 'state', - 'wqscreen', and 'catscreen' - - Returns - ------- - pandas.DataFrame or bmp.Table per `astable` - - Examples - -------- - >>> db = bmp.Database(my_database_path) - >>> table = db.select( - ... category=['Wetland Basin', 'Bioretention'], - ... paramgroup='Nutrients' - ... ) - - """ - good_keys = [ - 'category', 'site', 'bmp', 'storm', 'sampledatetime', - 'paramgroup', 'units', 'parameter', 'sampletype', - 'epazone', 'state', 'station' - ] - - index_levels = self.data.index.names - - data = self.data.reset_index() - for key, val in kwargs.items(): - if key not in good_keys: - raise ValueError("filtering by %s not supported" % key) - - if np.isscalar(val): - val = [val] - - data = data.loc[data[key].isin(val), :] - - return data.set_index(index_levels) - - def redefineBMPCategory(self, category, criteria, dropold=True): - """ Redefine a selection of BMPs into another or new category - - Parameters - ---------- - category : string - The longer-form name/description of the BMP category that - will be created. - critera : callable - This should return True/False in a manner consitent with the - `.select()` method of a pandas dataframe. See that docstring - for more info. - dropold : bool, optional (default is True) - Toggles the replacement (True) or addition (False) of the - data of the redefined BMPs into the the `data` dataframe. - - Returns - ------- - None (operates in-place) - - Notes - ----- - The standard dataframe present in `Database.data` has the - following indicies: - - | Level | Name | - |-------|--------------------------------------------| - | 0 | category (determined by ``category_type``) | - | 1 | epazone | - | 2 | state | - | 3 | site | - | 4 | bmp | - | 5 | storm | - | 6 | sampletype | - | 7 | paramgroup | - | 8 | units | - | 9 | parameter | - - So if you were creating a selection based on a set of Site IDs, - your lambda expression would look like this: - - >>> criteria = lambda row: row[1] in my_site_id_list - - Examples - -------- - >>> # import and create `Database` object - >>> import bmp - >>> db = bmp.dataAccess.Database() - >>> # replace tree box planters original BMP category (MD) - >>> # with "TreeBox" - >>> TB_bmps = [-1098775618, 95902823, 1053525776, 1495211473] - >>> criteria = lambda row: row[3] in TB_bmps - >>> db.redefineBMPCategory('TB', 'Tree box planter', criteria) - >>> # show that it worked - >>> print(db.data.index.get_level_values('category').unique()) - """ - - self.data = wqio.utils.redefine_index_level( - self.data, 'category', category, - criteria=criteria, dropold=dropold - ) - - def transformParameters(self, existingparams, newparam, resfxn, qualfxn, - newunits, indexMods=None): - """ Apply an arbitrary transformation to a parameter in the data - - Parameters - ---------- - existingparams : list of strings - List of the existing parameters that will be used to compute - the new values - newparam : string - Name of the new parameter to be generated - resfxn : callable - Function (or lambda) that will determine the result of - ``newparam`` based on the values of ``existingparams``. - Function must assume to be operating on a row of - ``self.data`` with the elements of ``existingparams`` stored - as columns. - qualfxn : function - Same as ``resfxn``, but for determining the final qualifier - of the ``newparam`` results. - newunits : string - Units of the newly computed values - indexMods : dict, optional (keys = index level names) - Dictionary of index level name whose values are the new - values of those levels where ``parameter == newparam``. - - Returns - ------- - None (operates in-place) - - Example - ------- - >>> csvpath = 'bmp/data/data_pybmpdb.csv' - >>> db = bmp.dataAccess.Database(file=csvpath) - >>> db.transformParameters(['pH'], 'protons', - ... lambda x, junk: wqio.utils.pH2concentration(x[('res', 'pH')]), - ... lambda x, junk: x[('qual', 'pH')], 'mg/L' - ... ) - - """ - - index_name_cache = self.data.index.names - existingparams = wqio.validate.at_least_empty_list(existingparams) - - params_exist = self._check_for_parameters(existingparams) - if not params_exist: - raise ValueError("Parameter %s is not in this dataset" % param) - - selection = ( - self.data - .query("parameter in @existingparams") - .pipe(utils.refresh_index) - .unstack(level='parameter') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: qualfxn(df, existingparams), - 'qual', newparam) - .pipe(wqio.utils.assign_multilevel_column, - lambda df: resfxn(df, existingparams), - 'res', newparam) - .xs(newparam, level='parameter', axis='columns', drop_level=False) - .stack(level='parameter') - ) - - indexMods = wqio.validate.at_least_empty_dict(indexMods, units=newunits) - # add the units into indexMod, apply all changes - indexMods['units'] = newunits - for levelname, value in indexMods.items(): - selection = wqio.utils.redefine_index_level( - selection, - levelname, - value, - criteria=None, - dropold=True - ) - - if newunits.lower() not in [u['name'].lower() for u in info.units]: - info.units = info.addUnit(name=newunits) - - if newparam.lower() not in [p['name'].lower() for p in info.parameters]: - info.parameters = info.addParameter(name=newparam, units=newunits) - - # return the *full* dataset (preserving original params) - self.data = pandas.concat([ - self.data.reset_index(), - selection.reset_index() - ]).set_index(index_name_cache) - - def unionParamsWithPreference(self, existingparams, newparam, newunits): - """ - Looks as instances of two different analytes, picks the best one, and - the appends a new row with the preferred result under a new parameter - name. The best example of this is taking NO3+NO2 and NO3 data, and - "unioning" them to get NOx data -- NO3+NO2 is the best to use, but if - it's not available, fall back to NO3 since NO2 is typically small. - - Parameters - ---------- - existingparams : list of string - List of the parameters you wish to merge (currently limited - to 2) - - newparam : string - Name of the new parameter you're creating (e.g., NOx in the - example above) - - newunits : string - Units of the new value - - Returns: - None - (operates in-place) - - Examples - ------- - >>> db = bmp.dataAccess.Database(file='bmp/data/data_pybmpdb.csv') - >>> table = bmp.dataAccess.Table('Nutrients', db) - >>> nitro_components = [ - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - 'Nitrogen, Nitrate (NO3) as N' - ] - >>> nitro_combined = 'Nitrogen, NOx as N' - >>> table.unionParamsWithPreference(nitro_components, nitro_combined, 'mg/L') - - """ - - if len(existingparams) != 2: - raise NotImplementedError('existingparams must be a sequence of length = 2') - - # function to return the right column of qualifiers - def returnFiniteQual(df, existingparams): - - return np.where( - ~df[('qual', existingparams[0])].isnull(), - df[('qual', existingparams[0])], - df[('qual', existingparams[1])], - ) - - # function to return the right column of results - def returnFiniteRes(df, existingparams): - - return np.where( - ~df[('res', existingparams[0])].isnull(), - df[('res', existingparams[0])], - df[('res', existingparams[1])], - ) - - self.transformParameters(existingparams, newparam, returnFiniteRes, returnFiniteQual, newunits) - - def to_DataCollection(self, selection_dict=None, **kwargs): - selection_dict = wqio.validate.at_least_empty_dict(selection_dict) - othergroups = kwargs.pop('othergroups', ['category', 'units']) - pairgroups = kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) - return ( - self.select(**selection_dict) - .reset_index() - .pipe( - wqio.DataCollection, - rescol='res', - qualcol='qual', - ndval=['ND'], - stationcol='station', - paramcol='parameter', - othergroups=othergroups, - pairgroups=pairgroups, - **kwargs) - ) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 34210b8..75b471d 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -202,113 +202,6 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, return df -def getSummaryData(dbpath=None, catanalysis=False, minstorms=3, minbmps=3, - name=None, useTex=False, ndscaler=None, combine_nox=True, - removegrabs=True, grab_categories=None, combine_WB_RP=True, - excludedbmps=None, excludedparams=None, - balancedonly=True, **selection): - """ - Select offical data from database. - - Parameters - ---------- - dbpath : string - File path to the BMP Database Access file. - catanalysis : optional bool (default = False) - Filters for data approved for BMP Category-level analysis. - minstorms : option int (default = 3) - The minimum number of storms each group defined by BMP, station, - and parameter should have. Groups with too few storms will be - filtered out. - minbmps : option int (default = 3) - The minimum number of BMPs each group defined - by category, station, and parameter should have. - Groups with too few BMPs will be filtered out. - excludedbmps : optional list or None (default) - List of BMP Names to exclude form the result. - name : optional string or None (default) - Passed directly to the Table constuctor. - usetex : optional bool (default = False) - Passed directly to the Table constuctor. - **selection : optional keyword arguments - Selection criteria passed directly Database.selectData - - Returns - ------- - subset : pandas.DataFrame or bmpTable - - """ - - # main dataset - if dbpath is None: - dbpath = wqio.download('bmpdata') - - db = dataAccess.Database(dbpath, catanalysis=catanalysis, ndscaler=ndscaler) - db.data = db.select(**selection) - - # combine NO3+NO2 and NO3 into NOx - nitro_components = [ - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - 'Nitrogen, Nitrate (NO3) as N' - ] - if db._check_for_parameters(nitro_components) and combine_nox: - nitro_combined = 'Nitrogen, NOx as N' - db.unionParamsWithPreference(nitro_components, nitro_combined, 'mg/L') - - if grab_categories is None: - grab_categories = ['Retention Pond', 'Wetland Basin'] - else: - grab_categories = wqio.validate.at_least_empty_list(grab_categories) - - if catanalysis: - # merge Wet land Basins and Retention ponds, keeping - # the original records - category_index_level = db.index['category'] - WBRP_combo = 'Wetland Basin/Retention Pond' - db.redefineBMPCategory( - category=WBRP_combo, - criteria=lambda r: r[category_index_level] in grab_categories, - dropold=False - ) - grab_categories.append(WBRP_combo) - - bmptype_index_level = db.index['bmptype'] - db.redefineBMPCategory( - category='Permeable Friction Course', - criteria=lambda r: r[bmptype_index_level] == 'PF', - dropold=True - ) - - # all data should be compisite data, but grabs are allowed - # for bacteria at all BMPs, and all parameter groups at - # retention ponds and wetland basins. Samples of an unknown - # type are excluded - if removegrabs: - querytxt = ( - "(sampletype == 'composite') | " - "(((category in @grab_categories) | (paramgroup == 'Biological')) & " - " (sampletype != 'unknown'))" - ).format(grab_categories) - subset = db.data.query(querytxt) - else: - subset = db.data.copy() - - excludedbmps = wqio.validate.at_least_empty_list(excludedbmps) - excludedparams = wqio.validate.at_least_empty_list(excludedparams) - - subset = ( - subset.query("bmp not in @excludedbmps") - .query("parameter not in @excludedparams") - .pipe(_pick_best_sampletype) - .pipe(_pick_best_station) - .pipe(_filter_onesided_BMPs, execute=balancedonly) - .pipe(_filter_by_storm_count, minstorms) - .pipe(_filter_by_BMP_count, minbmps) - ) - - return subset, db - - def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): ND_neither = [(df[qualin] == '=') & (df[qualout] == '='), 'Pair'] ND_in = [(df[qualin] == 'ND') & (df[qualout] == '='), 'Influent ND'] diff --git a/pybmpdb/tests/test_dataAccess.py b/pybmpdb/tests/test_dataAccess.py index 73ff4c3..5924d09 100644 --- a/pybmpdb/tests/test_dataAccess.py +++ b/pybmpdb/tests/test_dataAccess.py @@ -47,55 +47,6 @@ def df_for_quals(): return df -@pytest.fixture -def db_quals(): - return ['U', 'UJ'] - - -@pytest.fixture -def db_fromcsv(): - dbfile = get_data_file('bmpdata.csv') - db = da.Database(dbfile, useTex=False) - return db - - -@pytest.fixture -def db_fromaccess(): - dbfile = get_data_file('bmpdata.accdb') - db = da.Database(dbfile, dbtable='bmp_data', useTex=False) - return db - - -@pytest.fixture -def expected_parameters(): - parameters = [ - 'Cadmium, Dissolved', 'Cadmium, Total', - 'Copper, Dissolved', 'Copper, Total', - 'Lead, Dissolved', 'Lead, Total', - 'Kjeldahl nitrogen (TKN)', - 'Kjeldahl nitrogen, Suspended', - 'Kjeldahl nitrogen, Dissolved', - 'Nitrogen, Nitrate (NO3) as N', - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - 'Phosphorus as P, Dissolved', - 'Phosphorus as P, Total', - 'Total suspended solids', - 'Escherichia coli', - ] - return parameters - - -@pytest.fixture -def expected_index_names(): - index_names = [ - 'category', 'epazone', 'state', 'site', 'bmp', 'station', 'storm', 'sampletype', - 'watertype', 'paramgroup', 'units', 'parameter', 'fraction', 'initialscreen', - 'wqscreen', 'catscreen', 'balanced', 'bmptype', 'pdf_id', 'site_id', 'bmp_id', - 'sampledatetime' - ] - return index_names - - def test__handle_ND_factors(df_for_quals): expected = np.array([2, 2, 2, 2, 2, 3, 2, 1, 1]) result = da._handle_ND_factors(df_for_quals) @@ -207,244 +158,3 @@ def test_transform_parameters(): paramlevel='param' ) pdtest.assert_frame_equal(result, expected) - - -@patch.object(zipfile.ZipFile, 'extractall') -@patch.object(request, 'urlretrieve') -@patch.object(os.path, 'splitext') -@patch.object(os, 'makedirs') -@patch.object(wqio, 'download') -def test_Database_no_file(mockdl, mockos, mockpath, mockreq, mockzip): - db = da.Database() - mockdl.assert_called_once_with('bmpdata') - - -@pytest.mark.parametrize(('db', 'expected_driver'), [ - (db_fromcsv(), None), pytest.mark.skipif('NO_ACCESS')( - (db_fromaccess(), r'{Microsoft Access Driver (*.mdb, *.accdb)}') - ), -]) -def test_Database_driver(db, expected_driver): - assert db.driver == expected_driver - - -@pytest.mark.parametrize(('db', 'expected'), [ - (db_fromcsv(), False), - pytest.mark.skipif('NO_ACCESS')((db_fromaccess(), True)), -]) -def test_Database_usingdb(db, expected): - assert db.usingdb == expected - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_file(db): - assert hasattr(db, 'file') - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_data_attr(db, expected_index_names): - expected_datashape = (16273, 2) - assert isinstance(db.data, pandas.DataFrame) - assert db.data.shape == expected_datashape - assert isinstance(db.data.index, pandas.MultiIndex) - assert db.data.index.names == expected_index_names - assert db.data['res'].min() > 0 - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_sqlquery_setter(db): - new_query = 'test' - db.sqlquery = new_query - assert db.sqlquery == new_query - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database__data_raw(db): - assert isinstance(db._data_raw, pandas.DataFrame) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database__data_cleaned(db): - assert isinstance(db._data_cleaned, pandas.DataFrame) - - -@pytest.mark.parametrize(('db', 'expected'), [ - (db_fromcsv(), None), - pytest.mark.skipif('NO_ACCESS')((db_fromaccess(), 'bmp_data')), -]) -def test_Database_dbtable(db, expected): - assert db.dbtable == expected - db.dbtable = 'test' - assert db.dbtable == 'test' - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -@pytest.mark.parametrize('options', [ - pytest.mark.xfail(raises=ValueError)(dict(junk=False)), - dict(paramgroup='Metals'), - dict(parameter='Copper, Total', site='21st and Iris Rain Garden', bmp='UDFCD Rain Garden'), - dict(parameter=['Copper, Total', 'Lead, Total']), -]) -def test_Database_select(db, options): - data = db.select(**options) - assert isinstance(data, pandas.DataFrame) - assert data.index.names == db.data.index.names - for level, values in options.items(): - nptest.assert_array_equal( - data.index.get_level_values(level).unique(), - np.array(values) - ) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_params(db, expected_parameters): - for p in db.params: - assert p in expected_parameters - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_parameters(db): - for p in db.parameters: - assert p.name in db.params - assert isinstance(p, wqio.Parameter) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_parameter_lookup(db): - assert isinstance(db.parameter_lookup, dict) - assert sorted(list(db.parameter_lookup.keys())) == sorted(db.params) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_index(db, expected_index_names): - assert len(db.index.keys()) == len(expected_index_names) - for key in db.index.keys(): - assert key in expected_index_names - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_index_values(db): - expected_categories = [ - 'Grass Swale', - 'Bioretention', - 'Detention Basin', - 'Porous Pavement', - 'Retention Pond', - 'Wetland Basin' - ] - bmpcats = db.index_values('category') - assert sorted(bmpcats) == sorted(expected_categories) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database_index_vals_raises(db): - with pytest.raises(KeyError): - db.index_values('JUNK') - - -@pytest.mark.xfail -def test_Database_transformParameters(db_fromcsv): - old_params = ['Total suspended solids'] - new_param = 'log_Total suspended solids' - db_fromcsv.transformParameters( - old_params, new_param, - lambda x, old_p: 1000 * x[('res', old_p)], - lambda x, old_p: x[('qual', old_p)], - '1000*mg/L' - ) - assert '1000*mg/L' in db_fromcsv.data.index.get_level_values('units') - assert new_param in db_fromcsv.parameter_lookup.keys() - assert new_param in db_fromcsv.data.index.get_level_values('parameter') - - -@pytest.mark.xfail -def test_Database_unionParamsWithPreference(db_fromcsv): - components = [ - 'Nitrogen, Nitrate (NO3) as N', - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - ] - combined = 'NOx' - db_fromcsv.unionParamsWithPreference(components, combined, 'mg/L') - assert combined in db_fromcsv.parameter_lookup.keys() - assert combined in db_fromcsv.data.index.get_level_values('parameter') - - -@pytest.mark.parametrize('dropold', [True, False]) -def test_Database_redefineBMPCategory(db_fromcsv, dropold): - newcat = 'Test New Category' - oldcat = 'Bioretention' - - bmpcat_index = db_fromcsv.index['category'] - db_fromcsv.redefineBMPCategory(newcat, lambda row: row[bmpcat_index] == oldcat, - dropold=dropold) - assert newcat in db_fromcsv.data.index.get_level_values('category') - if dropold: - assert oldcat not in db_fromcsv.data.index.get_level_values('category') - else: - assert oldcat in db_fromcsv.data.index.get_level_values('category') - - -def test_Database_to_DataCollection(db_fromcsv): - dc = db_fromcsv.to_DataCollection(dict(state='GA')) - assert isinstance(dc, wqio.DataCollection) - - -@pytest.mark.parametrize('db', [ - db_fromcsv(), - pytest.mark.skipif('NO_ACCESS')(db_fromaccess()), -]) -def test_Database__check_for_parameters(db, expected_parameters): - assert db._check_for_parameters(expected_parameters) - assert db._check_for_parameters(expected_parameters[0]) - assert not (db._check_for_parameters(['junk', 'garbage'])) - - -@pytest.mark.skipif('True') -@pytest.mark.parametrize(('db', 'should_raise'), [ - (db_fromcsv(), True), - pytest.mark.skipif('NO_ACCESS')((db_fromaccess(), False)), -]) -def test_Database_dbtable_to_csv(db, should_raise): - with tempfile.TemporaryDirectory() as tempdir: - outputfile = os.path.join(tempdir, 'testoutput.csv') - if should_raise: - with pytest.raises(NotImplementedError): - db.dbtable_to_csv('bmpcats', filepath=outputfile) - else: - db.dbtable_to_csv('bmpcats', filepath=outputfile) diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index c0a5908..968b40e 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -705,44 +705,6 @@ def test_makeReport(self): ''' -class Test_helpers(object): - def setup(self): - if os.name == 'posix': - dbfile = 'testdata.csv' - else: - dbfile = 'testdata.accdb' - - self.dbfile = get_data_file(dbfile) - self.db = pybmpdb.dataAccess.Database(self.dbfile) - self.known_pfcs = [ - 'NCDOT_PFC_A', 'NCDOT_PFC_B', 'NCDOT_PFC_D', - 'AustinTX3PFC', 'AustinTX1PFC', 'AustinTX2PFC' - ] - self.known_shape = (2250, 2) - self.known_shape_excl = (2168, 2) - - @pytest.mark.skipif(SKIP_DB, reason='no viable DN') - def test_getSummaryData_smoke(self): - df, db = pybmpdb.summary.getSummaryData(dbpath=self.dbfile) - assert df.shape == self.known_shape - - @pytest.mark.skipif(SKIP_DB, reason='no viable DN') - def test_getSummaryDataExclusive_smoke(self): - exbmps = ['15.2Apex', '7.6Apex'] - df, db = pybmpdb.summary.getSummaryData(dbpath=self.dbfile, excludedbmps=exbmps) - assert df.shape == self.known_shape_excl - for x in exbmps: - assert x not in df.index.get_level_values('bmp').unique() - - def test_setMPLStyle_smoke(self): - pybmpdb.summary.setMPLStyle() - - @pytest.mark.skipif(SKIP_DB, reason='no viable DN') - def test_getPFCs(self): - pfcs = pybmpdb.summary.getPFCs(self.db) - assert pfcs == self.known_pfcs - - def _do_filter_test(index_cols, infilename, outfilename, fxn, *args): infile = get_data_file(infilename) outfile = get_data_file(outfilename) From 35126e4819fee6075e53e433acf0dea2c2986ce7 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 5 Dec 2017 12:46:45 -0800 Subject: [PATCH 02/48] unalias the main imports --- pybmpdb/dataAccess.py | 6 ++--- pybmpdb/tests/test_dataAccess.py | 40 ++++++++++++++++---------------- pybmpdb/tests/test_summary.py | 40 ++++++++++++++++---------------- 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index 580f8fa..f5f6734 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -6,7 +6,7 @@ except ImportError: pyodbc = None -import numpy as np +import numpy import pandas from . import info, utils @@ -40,13 +40,13 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No quals = ['U', 'UA', 'UI', 'UC', 'UK', 'K'] is_ND = df[qualcol].isin(quals) | ((df[qualcol] == 'UJ') & (df[rescol] < df[dlcol])) - return np.where(is_ND, 'ND', '=') + return numpy.where(is_ND, 'ND', '=') def _process_screening(df, screencol): yes = df[screencol].str.lower().isin(['inc', 'yes']) no = df[screencol].str.lower().isin(['exc', 'no']) - return np.select([yes, no], ['yes', 'no'], 'invalid') + return numpy.select([yes, no], ['yes', 'no'], 'invalid') def _process_sampletype(df, sampletype): diff --git a/pybmpdb/tests/test_dataAccess.py b/pybmpdb/tests/test_dataAccess.py index 5924d09..48d5164 100644 --- a/pybmpdb/tests/test_dataAccess.py +++ b/pybmpdb/tests/test_dataAccess.py @@ -11,7 +11,7 @@ import numpy.testing as nptest import pandas.util.testing as pdtest -import numpy as np +import numpy import pandas try: @@ -19,7 +19,7 @@ except ImportError: pyodbc = None -from pybmpdb import dataAccess as da +from pybmpdb import dataAccess import wqio @@ -48,14 +48,14 @@ def df_for_quals(): def test__handle_ND_factors(df_for_quals): - expected = np.array([2, 2, 2, 2, 2, 3, 2, 1, 1]) - result = da._handle_ND_factors(df_for_quals) + expected = numpy.array([2, 2, 2, 2, 2, 3, 2, 1, 1]) + result = dataAccess._handle_ND_factors(df_for_quals) nptest.assert_array_equal(result, expected) def test__handle_ND_qualifiers(df_for_quals): - result = da._handle_ND_qualifiers(df_for_quals) - expected = np.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', '=']) + result = dataAccess._handle_ND_qualifiers(df_for_quals) + expected = numpy.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', '=']) nptest.assert_array_equal(result, expected) @@ -63,8 +63,8 @@ def test__process_screening(): df = pandas.DataFrame({ 'screen': ['Yes', 'INC', 'No', 'eXC', 'junk'] }) - expected = np.array(['yes', 'yes', 'no', 'no', 'invalid']) - result = da._process_screening(df, 'screen') + expected = numpy.array(['yes', 'yes', 'no', 'no', 'invalid']) + result = dataAccess._process_screening(df, 'screen') nptest.assert_array_equal(result, expected) @@ -72,38 +72,38 @@ def test__process_sampletype(): df = pandas.DataFrame({ 'sampletype': ['SRL GraB asdf', 'SeL cOMPositE df', 'jeL LSDR as'] }) - expected = np.array(['grab', 'composite', 'unknown']) - result = da._process_sampletype(df, 'sampletype') + expected = numpy.array(['grab', 'composite', 'unknown']) + result = dataAccess._process_sampletype(df, 'sampletype') nptest.assert_array_equal(result, expected) def test__check_levelnames(): - da._check_levelnames(['epazone', 'category']) + dataAccess._check_levelnames(['epazone', 'category']) with pytest.raises(ValueError): - da._check_levelnames(['site', 'junk']) + dataAccess._check_levelnames(['site', 'junk']) @pytest.mark.skipif('NO_ACCESS') def test_db_connection(): dbfile = get_data_file('bmpdata.accdb') try: - cnn = da.db_connection(dbfile) + cnn = dataAccess.db_connection(dbfile) assert isinstance(cnn, pyodbc.Connection) cnn.close() except: raise -@patch.object(da, 'db_connection') +@patch.object(dataAccess, 'db_connection') @patch.object(pandas, 'read_sql', return_value=1) def test_get_data(mock_sql, mock_cnn): - da.get_data('select * from table', 'test.mdb') + dataAccess.get_data('select * from table', 'test.mdb') mock_sql.assert_called_once_with('select * from table', mock_cnn().__enter__()) -@patch.object(da, 'get_default_query', return_value='select * from [{}]') -@patch.object(da, 'get_data') +@patch.object(dataAccess, 'get_default_query', return_value='select * from [{}]') +@patch.object(dataAccess, 'get_data') @pytest.mark.parametrize(('sql', 'table', 'expected_sql'), [ (None, None, 'select * from [bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014]'), ('select * from bmp_data', None, 'select * from bmp_data'), @@ -112,7 +112,7 @@ def test_get_data(mock_sql, mock_cnn): ]) def test_load_from_access(get_data, get_dq, sql, table, expected_sql): dbfile = 'test.mdb' - _ = da.load_from_access(dbfile, sqlquery=sql, dbtable=table) + _ = dataAccess.load_from_access(dbfile, sqlquery=sql, dbtable=table) get_data.assert_called_once_with( expected_sql, dbfile, @@ -122,7 +122,7 @@ def test_load_from_access(get_data, get_dq, sql, table, expected_sql): @patch.object(pandas, 'read_csv') def test_load_from_csv(read_csv): - da.load_from_csv('bmp.csv') + dataAccess.load_from_csv('bmp.csv') read_csv.assert_called_once_with('bmp.csv', parse_dates=['sampledate'], encoding='utf-8') @@ -151,7 +151,7 @@ def test_transform_parameters(): old_params = ['A', 'B'] new_param = 'C' - result = da.transform_parameters( + result = dataAccess.transform_parameters( df, old_params, new_param, 'ug/L', lambda x: 1000 * x['res'].sum(axis=1), lambda x: x[('qual', 'B')], diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 968b40e..412365e 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -9,14 +9,14 @@ import pandas.util.testing as pdtest from wqio.tests import helpers -import numpy as np -import matplotlib.pyplot as plt +import numpy +from matplotlib import pyplot import pandas -import pybmpdb +from pybmpdb import summary -mock_figure = mock.Mock(spec=plt.Figure) +mock_figure = mock.Mock(spec=pyplot.Figure) PYTHON2 = sys.version_info.major == 2 SKIP_DB = True # pyodbc is None or os.name == 'posix' @@ -47,18 +47,18 @@ def __init__(self, include): self.min = 0.123456 self.max = 123.456 self.mean = 12.3456 - self.mean_conf_interval = np.array([-1, 1]) + self.mean + self.mean_conf_interval = numpy.array([-1, 1]) + self.mean self.logmean = 12.3456 - self.logmean_conf_interval = np.array([-1, 1]) + self.logmean + self.logmean_conf_interval = numpy.array([-1, 1]) + self.logmean self.geomean = 12.3456 - self.geomean_conf_interval = np.array([-1, 1]) + self.geomean + self.geomean_conf_interval = numpy.array([-1, 1]) + self.geomean self.std = 4.56123 self.logstd = 4.56123 self.cov = 5.61234 self.skew = 6.12345 self.pctl25 = 0.612345 self.median = 1.23456 - self.median_conf_interval = np.array([-1, 1]) + self.median + self.median_conf_interval = numpy.array([-1, 1]) + self.median self.pctl75 = 2.34561 self.include = include self.exclude = not self.include @@ -90,7 +90,7 @@ def main_setup(self): self.known_paramgroup = 'Metals' self.known_bmp = 'testbmp' self.known_latex_file_name = 'metalstestbmpcarbondioxide' - self.ds_sum = pybmpdb.DatasetSummary(self.ds, self.known_paramgroup, 'testfigpath') + self.ds_sum = summary.DatasetSummary(self.ds, self.known_paramgroup, 'testfigpath') self.known_latex_input_tt = r"""\subsection{testbmp} \begin{table}[h!] \caption{test table title} @@ -438,7 +438,7 @@ def setup(self): self.datasets = [mock_dataset(*inc) for inc in includes] self.known_paramgroup = 'Metals' self.known_dataset_count = 3 - self.csum = pybmpdb.CategoricalSummary( + self.csum = summary.CategoricalSummary( self.datasets, self.known_paramgroup, 'basepath', @@ -718,11 +718,11 @@ def _do_filter_test(index_cols, infilename, outfilename, fxn, *args): def test__pick_non_null(): df = pandas.DataFrame({ - ('res', 'this'): [1.0, np.nan, 2.0, np.nan], - ('res', 'that'): [np.nan, np.nan, 9.0, 3.0] + ('res', 'this'): [1.0, numpy.nan, 2.0, numpy.nan], + ('res', 'that'): [numpy.nan, numpy.nan, 9.0, 3.0] }) - expected = np.array([1.0, np.nan, 2.0, 3.0]) - result = pybmpdb.summary._pick_non_null(df, 'res', 'this', 'that') + expected = numpy.array([1.0, numpy.nan, 2.0, 3.0]) + result = summary._pick_non_null(df, 'res', 'this', 'that') nptest.assert_array_equal(result, expected) @@ -732,7 +732,7 @@ def test__pick_best_station(): index_cols, 'test_pick_station_input.csv', 'test_pick_station_output.csv', - pybmpdb.summary._pick_best_station + summary._pick_best_station ) @@ -743,7 +743,7 @@ def test__pick_best_sampletype(): index_cols, 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv', - pybmpdb.summary._pick_best_sampletype + summary._pick_best_sampletype ) @@ -754,7 +754,7 @@ def test__filter_onesided_BMPs(): index_cols, 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv', - pybmpdb.summary._filter_onesided_BMPs + summary._filter_onesided_BMPs ) @@ -765,7 +765,7 @@ def test__filter_by_storm_count(): index_cols, 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv', - pybmpdb.summary._filter_by_storm_count, + summary._filter_by_storm_count, 6 ) @@ -777,7 +777,7 @@ def test__filter_by_BMP_count(): index_cols, 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv', - pybmpdb.summary._filter_by_BMP_count, + summary._filter_by_BMP_count, 4 ) @@ -788,5 +788,5 @@ def test_paired_qual(): 'out_qual': ['=', 'ND', '=', 'ND'] }) expected = ['Pair', 'Effluent ND', 'Influent ND', 'Both ND'] - result = pybmpdb.summary.paired_qual(df, 'in_qual', 'out_qual') + result = summary.paired_qual(df, 'in_qual', 'out_qual') nptest.assert_array_equal(result, expected) From b016c5f1f164a0a19c0dc35b46408c9b9a2be9bf Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 5 Dec 2017 15:27:33 -0800 Subject: [PATCH 03/48] fix and test edge case with qual=UJ and res=DL --- pybmpdb/dataAccess.py | 2 +- pybmpdb/tests/test_dataAccess.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index f5f6734..6b2941f 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -39,7 +39,7 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No if quals is None: quals = ['U', 'UA', 'UI', 'UC', 'UK', 'K'] - is_ND = df[qualcol].isin(quals) | ((df[qualcol] == 'UJ') & (df[rescol] < df[dlcol])) + is_ND = df[qualcol].isin(quals) | ((df[qualcol] == 'UJ') & (df[rescol] <= df[dlcol])) return numpy.where(is_ND, 'ND', '=') diff --git a/pybmpdb/tests/test_dataAccess.py b/pybmpdb/tests/test_dataAccess.py index 48d5164..4892a9c 100644 --- a/pybmpdb/tests/test_dataAccess.py +++ b/pybmpdb/tests/test_dataAccess.py @@ -42,20 +42,21 @@ def df_for_quals(): {'res': 5., 'DL': 15., 'qual': 'UJ'}, {'res': 5., 'DL': 10., 'qual': 'UJ'}, {'res': 10., 'DL': 5., 'qual': 'UJ'}, + {'res': 10., 'DL': 10., 'qual': 'UJ'}, {'res': 5., 'DL': 5., 'qual': 'junk'}, ]) return df def test__handle_ND_factors(df_for_quals): - expected = numpy.array([2, 2, 2, 2, 2, 3, 2, 1, 1]) + expected = numpy.array([2, 2, 2, 2, 2, 3, 2, 1, 1, 1]) result = dataAccess._handle_ND_factors(df_for_quals) nptest.assert_array_equal(result, expected) def test__handle_ND_qualifiers(df_for_quals): result = dataAccess._handle_ND_qualifiers(df_for_quals) - expected = numpy.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', '=']) + expected = numpy.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', 'ND', '=']) nptest.assert_array_equal(result, expected) From 16b3b99f0a64b65d4a36e0b8ebf7b093870cf066 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 5 Dec 2017 17:17:33 -0800 Subject: [PATCH 04/48] convert info dicts into json --- pybmpdb/info.py | 3248 +---------------------------------------------- 1 file changed, 10 insertions(+), 3238 deletions(-) diff --git a/pybmpdb/info.py b/pybmpdb/info.py index 74c8427..ee867d3 100644 --- a/pybmpdb/info.py +++ b/pybmpdb/info.py @@ -1,7 +1,15 @@ +import json +from pkg_resources import resource_filename + + __all__ = ['getUnits', 'getTexParam', 'getTexUnit', 'getNormalization', 'getConversion'] +def _loader(fname): + with open(resource_filename('pybmpdb.data', fname), 'r') as f: + return json.load(f) + def _find_by_name(value_string, list_of_dicts, key='name'): # get the parameter's entry in the lookup list of dicts _entry = list(filter( @@ -98,3241 +106,5 @@ def addUnit(**kwargs): return units -units = [ - { - 'name': '%', - 'factor': 1, - 'tex': r'\si{\percent}', - 'unicode': '%' - }, { - 'name': 'NS', - 'factor': 1, - 'tex': r'NS', - 'unicode': 'NS' - }, { - 'name': '#/100mL', - 'factor': 1, - 'tex': r'\#\SI[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'MPN/100 mL' - }, { - 'name': '10/ml', - 'factor': 100, - 'tex': r'\SI[per-mode=symbol]{10}{\per\milli\liter}', - 'unicode': '10/mL' - }, { - 'name': 'MPN/100 mL', - 'factor': 1, - 'tex': r'MPN\si[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'MPN/100 mL' - }, { - 'name': 'MPN/L', - 'factor': 0.1, - 'tex': r'MPN\si[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'MPN/100 mL' - }, { - 'name': 'MPN/100mL', - 'factor': 1, - 'tex': r'MPN\si[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'MPN/100 mL' - }, { - 'name': 'CFU/100 mL', - 'factor': 1, - 'tex': r'CFU\si[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'CFU/100 mL' - }, { - 'name': 'CFU/100mL', - 'factor': 1, - 'tex': r'CFU\si[per-mode=symbol]{\per100\milli\liter}', - 'unicode': 'CFU/100 mL' - }, { - 'name': 'NT', - 'factor': 1, - 'tex': r'NT', - 'unicode': 'NT' - }, { - 'name': 'PC', - 'factor': 1, - 'tex': r'PC', - 'unicode': 'PC' - }, { - 'name': 's', - 'factor': 1, - 'tex': r'', - 'unicode': 'S' - }, { - 'name': 'ml/L', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\milli\liter\per\liter}', - 'unicode': 'mL/L' - }, { - 'name': 'mV', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\milli\volt}', - 'unicode': 'mV' - }, { - 'name': 'kg/L', - 'factor': 1000, - 'tex': r'\si[per-mode=symbol]{\kilo\gram\per\liter}', - 'unicode': 'kg/L' - }, { - 'name': 'g/L', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\gram\per\liter}', - 'unicode': 'g/L' - }, { - 'name': 'mg/L', - 'factor': 0.001, - 'tex': r'\si[per-mode=symbol]{\milli\gram\per\liter}', - 'unicode': 'mg/L' - }, { - 'name': 'ug/L', - 'factor': 0.000001, - 'tex': r'\si[per-mode=symbol]{\micro\gram\per\liter}', - 'unicode': 'μg/L' - }, { - 'name': 'µg/L', - 'factor': 0.000001, - 'tex': r'\si[per-mode=symbol]{\micro\gram\per\liter}', - 'unicode': 'μg/L' - }, { - 'name': 'ng/L', - 'factor': 0.000000001, - 'tex': r'\si[per-mode=symbol]{\nano\gram\per\liter}', - 'unicode': 'ng/L' - }, { - 'name': '°C', - 'factor': 1, - 'tex': r'\si{\degreeCelsius}', - 'unicode': '°C' - }, { - 'name': 'deg C', - 'factor': 1, - 'tex': r'\si{\degreeCelsius}', - 'unicode': '°C' - }, { - 'name': 'degC', - 'factor': 1, - 'tex': r'\si{\degreeCelsius}', - 'unicode': '°C' - }, { - 'name': 'µmhos/cm', # micro? - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'μmhos/cm', # mu? - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'umhos/cm', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'umho/cm', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'μS/cm', # micro? - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'µS/cm', # mu? - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'uS/cm', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{\micro\siemens\per\centi\meter}', - 'unicode': 'μS/cm' - }, { - 'name': 'mS', - 'factor': 1000, - 'tex': r'\si[per-mode=symbol]{\milli\siemens}', - 'unicode': 'mS' - }, { - 'name': 'ADMI value', - 'factor': 1, - 'tex': r'ADMI Value', - 'unicode': 'ADMI Value' - }, { - 'name': 'kg', - 'factor': 1, - 'tex': r'kg', - 'unicode': 'kg' - }, { - 'name': 'm', - 'factor': 1, - 'tex': r'\si[per-mode=symbol]{meter}', - 'unicode': 'm' - }, { - 'name': 'mm', - 'factor': 0.001, - 'tex': r'\si[per-mode=symbol]{\milli\meter}', - 'unicode': 'mm' - }, { - 'name': 'um', - 'factor': 0.000001, - 'tex': r'\si[per-mode=symbol]{\micro\meter}', - 'unicode': 'μm' - }, { - 'name': 'μm', - 'factor': 0.000001, - 'tex': r'\si[per-mode=symbol]{\micro\meter}', - 'unicode': 'μm' - }, { - 'name': 'SU', - 'factor': 1, - 'tex': 'SU', - 'unicode': 'SU' - }, { - 'name': 'NTU', - 'factor': 1, - 'tex': 'NTU', - 'unicode': 'NTU' - }, { - 'name': 'PCU', - 'factor': 1, - 'tex': 'PCU', - 'unicode': 'PCU' - }, -] - - -parameters = [ - { - 'name': '1,1,1,2-tetrachloroethane', - 'tex': '1,1,1,2-Tetrachloroethane', - 'units': 'ug/L', - 'unicode': '1,1,1,2-Tetrachloroethane', - 'fraction': 'total' - }, { - 'name': '1,1,1-trichloroethane', - 'tex': '1,1,1-Trichloroethane', - 'units': 'ug/L', - 'unicode': '1,1,1-Trichloroethane', - 'fraction': 'total' - }, { - 'name': '1,1,2,2-tetrachloroethane', - 'tex': '1,1,2,2-Tetrachloroethane', - 'units': 'ug/L', - 'unicode': '1,1,2,2-Tetrachloroethane', - 'fraction': 'total' - }, { - 'name': '1,1,2-trichloroethane', - 'tex': '1,1,2-Trichloroethane', - 'units': 'ug/L', - 'unicode': '1,1,2-Trichloroethane', - 'fraction': 'total' - }, { - 'name': '1,1-dichloroethane', - 'tex': '1,1-Dichloroethane', - 'units': 'ug/L', - 'unicode': '1,1-Dichloroethane', - 'fraction': 'total' - }, { - 'name': '1,1-dichloroethylene', - 'tex': '1,1-Dichloroethylene', - 'units': 'ug/L', - 'unicode': '1,1-Dichloroethylene', - 'fraction': 'total' - }, { - 'name': '1,1-dichloropropene', - 'tex': '1,1-Dichloropropene', - 'units': 'ug/L', - 'unicode': '1,1-Dichloropropene', - 'fraction': 'total' - }, { - 'name': '1,2,3-trichlorobenzene', - 'tex': '1,2,3-Trichlorobenzene', - 'units': 'ug/L', - 'unicode': '1,2,3-Trichlorobenzene', - 'fraction': 'total' - }, { - 'name': '1,2,3-trichloropropane', - 'tex': '1,2,3-Trichloropropane', - 'units': 'ug/L', - 'unicode': '1,2,3-Trichloropropane', - 'fraction': 'total' - }, { - 'name': '1,2,4-trichlorobenzene', - 'tex': '1,2,4-Trichlorobenzene', - 'units': 'ug/L', - 'unicode': '1,2,4-Trichlorobenzene', - 'fraction': 'total' - }, { - 'name': '1,2,4-trimethylbenzene', - 'tex': '1,2,4-Trimethylbenzene', - 'units': 'ug/L', - 'unicode': '1,2,4-Trimethylbenzene', - 'fraction': 'total' - }, { - 'name': '1,2-benzanthracene', - 'tex': '1,2-Benzanthracene', - 'units': 'ug/L', - 'unicode': '1,2-Benzanthracene', - 'fraction': 'total' - }, { - 'name': '1,2-dibromoethane', - 'tex': '1,2-Dibromoethane', - 'units': 'ug/L', - 'unicode': '1,2-Dibromoethane', - 'fraction': 'total' - }, { - 'name': '1,2-dichlorobenzene', - 'tex': '1,2-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': '1,2-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': '1,2-dichloroethane', - 'tex': '1,2-Dichloroethane', - 'units': 'ug/L', - 'unicode': '1,2-Dichloroethane', - 'fraction': 'total' - }, { - 'name': '1,2-dichloropropane', - 'tex': '1,2-Dichloropropane', - 'units': 'ug/L', - 'unicode': '1,2-Dichloropropane', - 'fraction': 'total' - }, { - 'name': '1,2-diphenylhydrazine', - 'tex': '1,2-Diphenylhydrazine', - 'units': 'ug/L', - 'unicode': '1,2-Diphenylhydrazine', - 'fraction': 'total' - }, { - 'name': '1,3,5-trimethylbenzene', - 'tex': '1,3,5-Trimethylbenzene', - 'units': 'ug/L', - 'unicode': '1,3,5-Trimethylbenzene', - 'fraction': 'total' - }, { - 'name': '1,3-dichlorobenzene', - 'tex': '1,3-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': '1,3-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': '1,3-dichloropropane', - 'tex': '1,3-Dichloropropane', - 'units': 'ug/L', - 'unicode': '1,3-Dichloropropane', - 'fraction': 'total' - }, { - 'name': '1,4-dichlorobenzene', - 'tex': '1,4-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': '1,4-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': '1-chlorohexane', - 'tex': '1-Chlorohexane', - 'units': 'ug/L', - 'unicode': '1-Chlorohexane', - 'fraction': 'total' - }, { - 'name': '1-methylnaphthalene', - 'tex': '1-Methylnaphthalene', - 'units': 'ug/L', - 'unicode': '1-Methylnaphthalene', - 'fraction': 'total' - }, { - 'name': '2,2-dichloropropane', - 'tex': '2,2-Dichloropropane', - 'units': 'ug/L', - 'unicode': '2,2-Dichloropropane', - 'fraction': 'total' - }, { - 'name': "2,4'-ddd", - 'tex': "2,4'-DDD", - 'units': 'ug/L', - 'unicode': "2,4'-DDD", - 'fraction': 'total' - }, { - 'name': "2,4'-dde", - 'tex': "2,4'-DDE", - 'units': 'ug/L', - 'unicode': "2,4'-DDE", - 'fraction': 'total' - }, { - 'name': "2,4'-ddt", - 'tex': "2,4'-DDT", - 'units': 'ug/L', - 'unicode': "2,4'-DDT", - 'fraction': 'total' - }, { - 'name': '2,4,5-tp-silvex', - 'tex': '2,4,5-TP-SILVEX', - 'units': 'ug/L', - 'unicode': '2,4,5-TP-Silvex', - 'fraction': 'total' - }, { - 'name': '2,4,5-trichlorophenol', - 'tex': '2,4,5-Trichlorophenol', - 'units': 'ug/L', - 'unicode': '2,4,5-Trichlorophenol', - 'fraction': 'total' - }, { - 'name': '2,4,6-trichlorophenol', - 'tex': '2,4,6-Trichlorophenol', - 'units': 'ug/L', - 'unicode': '2,4,6-Trichlorophenol', - 'fraction': 'total' - }, { - 'name': '2,4-d', - 'tex': '2,4-D', - 'units': 'ug/L', - 'unicode': '2,4-D', - 'fraction': 'total' - }, { - 'name': '2,4-dichlorophenol', - 'tex': '2,4-Dichlorophenol', - 'units': 'ug/L', - 'unicode': '2,4-Dichlorophenol', - 'fraction': 'total' - }, { - 'name': '2,4-dinitrophenol', - 'tex': '2,4-Dinitrophenol', - 'units': 'ug/L', - 'unicode': '2,4-Dinitrophenol', - 'fraction': 'total' - }, { - 'name': '2,4-dinitrotoluene', - 'tex': '2,4-Dinitrotoluene', - 'units': 'ug/L', - 'unicode': '2,4-Dinitrotoluene', - 'fraction': 'total' - }, { - 'name': '2,4-dimethylphenol', - 'tex': '2,4-Dimethylphenol', - 'units': 'ug/L', - 'unicode': '2,4-Dimethylphenol', - 'fraction': 'total' - }, { - 'name': '2,6-dinitrotoluene', - 'tex': '2,6-Dinitrotoluene', - 'units': 'ug/L', - 'unicode': '2,6-Dinitrotoluene', - 'fraction': 'total' - }, { - 'name': '2-butanone', - 'tex': '2-Butanone', - 'units': 'ug/L', - 'unicode': '2-Butanone', - 'fraction': 'total' - }, { - 'name': '2-chloroethyl vinyl ether', - 'tex': '2-Chloroethyl Vinyl Ether', - 'units': 'ug/L', - 'unicode': '2-Chloroethyl Vinyl Ether', - 'fraction': 'total' - }, { - 'name': '2-chloronaphthalene', - 'tex': '2-Chloronaphthalene', - 'units': 'ug/L', - 'unicode': '2-Chloronaphthalene', - 'fraction': 'total' - }, { - 'name': '2-chlorophenol', - 'tex': '2-Chlorophenol', - 'units': 'ug/L', - 'unicode': '2-Chlorophenol', - 'fraction': 'total' - }, { - 'name': '2-chlorotoluene', - 'tex': '2-Chlorotoluene', - 'units': 'ug/L', - 'unicode': '2-Chlorotoluene', - 'fraction': 'total' - }, { - 'name': '2-hexanone', - 'tex': '2-Hexanone', - 'units': 'ug/L', - 'unicode': '2-Hexanone', - 'fraction': 'total' - }, { - 'name': '2-methylnaphthalene', - 'tex': '2-Methylnaphthalene', - 'units': 'ug/L', - 'unicode': '2-Methylnaphthalene', - 'fraction': 'total' - }, { - 'name': '2-nitrophenol', - 'tex': '2-Nitrophenol', - 'units': 'ug/L', - 'unicode': '2-Nitrophenol', - 'fraction': 'total' - }, { - 'name': "3,3'-dichlorobenzidine", - 'tex': "3,3'-Dichlorobenzidine", - 'units': 'ug/L', - 'unicode': "3,3'-Dichlorobenzidine", - 'fraction': 'total' - }, { - 'name': "4,4'-ddd", - 'tex': "4,4'-DDD", - 'units': 'ug/L', - 'unicode': "4,4'-DDD", - 'fraction': 'total' - }, { - 'name': "4,4'-dde", - 'tex': "4,4'-DDE", - 'units': 'ug/L', - 'unicode': "4,4'-DDE", - 'fraction': 'total' - }, { - 'name': "4,4'-ddt", - 'tex': "4,4'-DDT", - 'units': 'ug/L', - 'unicode': "4,4'-DDT", - 'fraction': 'total' - }, { - 'name': '4,6-dinitro-2-methylphenol', - 'tex': '4,6-Dinitro-2-methylphenol', - 'units': 'ug/L', - 'unicode': '4,6-Dinitro-2-methylphenol', - 'fraction': 'total' - }, { - 'name': '4,6-dinitro-o-cresol', - 'tex': '4,6-Dinitro-o-cresol', - 'units': 'ug/L', - 'unicode': '4,6-Dinitro-o-cresol', - 'fraction': 'total' - }, { - 'name': '4-bromophenyl phenyl ether', - 'tex': '4-Bromophenyl Phenyl Ether', - 'units': 'ug/L', - 'unicode': '4-Bromophenyl Phenyl Ether', - 'fraction': 'total' - }, { - 'name': '4-chlorophenyl phenyl ether', - 'tex': '4-Chlorophenyl Phenyl Ether', - 'units': 'ug/L', - 'unicode': '4-Chlorophenyl Phenyl Ether', - 'fraction': 'total' - }, { - 'name': '4-chlorotoluene', - 'tex': '4-Chlorotoluene', - 'units': 'ug/L', - 'unicode': '4-Chlorotoluene', - 'fraction': 'total' - }, { - 'name': '4-nitrophenol', - 'tex': '4-Nitrophenol', - 'units': 'ug/L', - 'unicode': '4-Nitrophenol', - 'fraction': 'total' - }, { - 'name': '4-chloro-3-methylphenol', - 'tex': '4-Chloro-3-Methylphenol', - 'units': 'ug/L', - 'unicode': '4-Chloro-3-Methylphenol', - 'fraction': 'total' - }, { - 'name': '4-chloro-3-methylphenol, dissolved', - 'tex': 'Dissolved 4-Chloro-3-Methylphenol', - 'units': 'ug/L', - 'unicode': '4-Chloro-3-Methylphenol', - 'fraction': 'dissolved' - }, { - 'name': '4-hydroxy-4-methyl-2-pentanone', - 'tex': '4-Hydroxy-4-Methyl-2-Pentanone', - 'units': 'ug/L', - 'unicode': '4-Hydroxy-4-Methyl-2-Pentanone', - 'fraction': 'total' - }, { - 'name': 'acenaphthene', - 'tex': 'Acenaphthene', - 'units': 'ug/L', - 'unicode': 'Acenaphthene', - 'fraction': 'total' - }, { - 'name': 'acenaphthene, dissolved', - 'tex': 'Dissolved Acenaphthene', - 'units': 'ug/L', - 'unicode': 'Acenaphthene', - 'fraction': 'dissolved' - }, { - 'name': 'acenaphthylene', - 'tex': 'Acenaphthylene', - 'units': 'ug/L', - 'unicode': 'Acenaphthylene', - 'fraction': 'total' - }, { - 'name': 'acenaphthylene, suspended', - 'tex': 'Suspended Acenaphthylene', - 'units': 'ug/L', - 'unicode': 'Acenaphthylene', - 'fraction': 'suspended' - }, { - 'name': 'acetone', - 'tex': 'Acetone', - 'units': 'ug/L', - 'unicode': 'Acetone', - 'fraction': 'total' - }, { - 'name': 'acrolein', - 'tex': 'Acrolein', - 'units': 'ug/L', - 'unicode': 'Acrolein', - 'fraction': 'total' - }, { - 'name': 'acrylonitrile', - 'tex': 'Acrylonitrile', - 'units': 'ug/L', - 'unicode': 'Acrylonitrile', - 'fraction': 'total' - }, { - 'name': 'alachlor', - 'tex': 'Alachlor', - 'units': 'ug/L', - 'unicode': 'Alachlor', - 'fraction': 'total' - }, { - 'name': 'aldrin', - 'tex': 'Aldrin', - 'units': 'ug/L', - 'unicode': 'Aldrin', - 'fraction': 'total' - }, { - 'name': 'alkalinity', - 'tex': 'Alkalinity', - 'units': 'mg/L', - 'unicode': 'Alkalinity', - 'fraction': 'total' - }, { - 'name': 'alkalinity, carbonate as caco3', - 'tex': 'Alkalinity, Carbonate as CaCO$_{3}$', - 'units': 'mg/L', - 'unicode': 'Alkalinity, Carbonate as CaCO₃', - 'fraction': 'total' - }, { - 'name': 'aluminum, dissolved', - 'tex': 'Dissolved Aluminum', - 'units': 'ug/L', - 'unicode': 'Aluminum', - 'fraction': 'dissolved' - }, { - 'name': 'aluminum, total', - 'tex': 'Total Aluminum', - 'units': 'ug/L', - 'unicode': 'Aluminum', - 'fraction': 'total' - }, { - 'name': 'anthracene', - 'tex': 'Anthracene', - 'units': 'ug/L', - 'unicode': 'Anthracene', - 'fraction': 'total' - }, { - 'name': 'anthracene, suspended', - 'tex': 'Suspended Anthracene', - 'units': 'ug/L', - 'unicode': 'Anthracene', - 'fraction': 'suspended' - }, { - 'name': 'antimony, dissolved', - 'tex': 'Dissolved Antimony', - 'units': 'ug/L', - 'unicode': 'Antimony', - 'fraction': 'dissolved' - }, { - 'name': 'antimony, total', - 'tex': 'Total Antimony', - 'units': 'ug/L', - 'unicode': 'Antimony', - 'fraction': 'total' - }, { - 'name': 'aroclor 1016', - 'tex': 'Aroclor 1016', - 'units': 'ug/L', - 'unicode': 'Aroclor 1016', - 'fraction': 'total' - }, { - 'name': 'aroclor 1221', - 'tex': 'Aroclor 1221', - 'units': 'ug/L', - 'unicode': 'Aroclor 1221', - 'fraction': 'total' - }, { - 'name': 'aroclor 1232', - 'tex': 'Aroclor 1232', - 'units': 'ug/L', - 'unicode': 'Aroclor 1232', - 'fraction': 'total' - }, { - 'name': 'aroclor 1242', - 'tex': 'Aroclor 1242', - 'units': 'ug/L', - 'unicode': 'Aroclor 1242', - 'fraction': 'total' - }, { - 'name': 'aroclor 1248', - 'tex': 'Aroclor 1248', - 'units': 'ug/L', - 'unicode': 'Aroclor 1248', - 'fraction': 'total' - }, { - 'name': 'aroclor 1254', - 'tex': 'Aroclor 1254', - 'units': 'ug/L', - 'unicode': 'Aroclor 1254', - 'fraction': 'total' - }, { - 'name': 'aroclor 1260', - 'tex': 'Aroclor 1260', - 'units': 'ug/L', - 'unicode': 'Aroclor 1260', - 'fraction': 'total' - }, { - 'name': 'arsenic, dissolved', - 'tex': 'Dissolved Arsenic', - 'units': 'ug/L', - 'unicode': 'Arsenic', - 'fraction': 'dissolved' - }, { - 'name': 'arsenic, total', - 'tex': 'Total Arsenic', - 'units': 'ug/L', - 'unicode': 'Arsenic', - 'fraction': 'total' - }, { - 'name': 'dissolved arsenic', - 'tex': 'Dissolved Arsenic', - 'units': 'ug/L', - 'unicode': 'Arsenic', - 'fraction': 'dissolved' - }, { - 'name': 'total arsenic', - 'tex': 'Total Arsenic', - 'units': 'ug/L', - 'unicode': 'Arsenic', - 'fraction': 'total' - }, { - 'name': 'atrazine', - 'tex': 'Atrazine', - 'units': 'ug/L', - 'unicode': 'Atrazine', - 'fraction': 'total' - }, { - 'name': 'bhc-alpha', - 'tex': 'BHC-ALPHA', - 'units': 'ug/L', - 'unicode': 'BHC-ALPHA', - 'fraction': 'total' - }, { - 'name': 'bhc-beta', - 'tex': 'BHC-BETA', - 'units': 'ug/L', - 'unicode': 'BHC-BETA', - 'fraction': 'total' - }, { - 'name': 'bhc-delta', - 'tex': 'BHC-DELTA', - 'units': 'ug/L', - 'unicode': 'BHC-DELTA', - 'fraction': 'total' - }, { - 'name': 'bod', - 'tex': 'Biological Oxygen Demand', - 'units': 'mg/L', - 'unicode': 'Biological Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'bod, dissolved', - 'tex': 'Biological Oxygen Demand (dissolved)', - 'units': 'mg/L', - 'unicode': 'Biological Oxygen Demand', - 'fraction': 'dissolved' - }, { - 'name': 'bod, non-standard conditions', - 'tex': 'Biological Oxygen Demand (non-standard conditions)', - 'units': 'mg/L', - 'unicode': 'Biological Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'barium, dissolved', - 'tex': 'Dissolved Barium', - 'units': 'ug/L', - 'unicode': 'Barium', - 'fraction': 'dissolved' - }, { - 'name': 'barium, total', - 'tex': 'Total Barium', - 'units': 'ug/L', - 'unicode': 'Barium', - 'fraction': 'total' - }, { - 'name': 'benz[a]anthracene', - 'tex': 'Benz[a]anthracene', - 'units': 'ug/L', - 'unicode': 'Benz[a]anthracene', - 'fraction': 'total' - }, { - 'name': 'benz[a]anthracene, suspended', - 'tex': 'Suspended Benz[a]anthracene', - 'units': 'ug/L', - 'unicode': 'Benz[a]anthracene', - 'fraction': 'suspended' - }, { - 'name': 'benzene', - 'tex': 'Benzene', - 'units': 'ug/L', - 'unicode': 'Benzene', - 'fraction': 'total' - }, { - 'name': 'benzidine', - 'tex': 'Benzidine', - 'units': 'ug/L', - 'unicode': 'Benzidine', - 'fraction': 'total' - }, { - 'name': 'benzo(b)fluoranthene', - 'tex': 'Benzo(b)fluoranthene', - 'units': 'ug/L', - 'unicode': 'Benzo(b)fluoranthene', - 'fraction': 'total' - }, { - 'name': 'benzo(b)fluoranthene, suspended', - 'tex': 'Suspended Benzo(b)fluoranthene', - 'units': 'ug/L', - 'unicode': 'Benzo(b)fluoranthene', - 'fraction': 'suspended' - }, { - 'name': 'benzo[a]pyrene', - 'tex': 'Benzo[a]pyrene', - 'units': 'ug/L', - 'unicode': 'Benzo[a]pyrene', - 'fraction': 'total' - }, { - 'name': 'benzo[a]pyrene, suspended', - 'tex': 'Suspended Benzo[a]pyrene', - 'units': 'ug/L', - 'unicode': 'Benzo[a]pyrene', - 'fraction': 'suspended' - }, { - 'name': 'benzo[ghi]perylene', - 'tex': 'Benzo[ghi]perylene', - 'units': 'ug/L', - 'unicode': 'Benzo[ghi]perylene', - 'fraction': 'total' - }, { - 'name': 'benzo[ghi]perylene, suspended', - 'tex': 'Suspended Benzo[ghi]perylene', - 'units': 'ug/L', - 'unicode': 'Benzo[ghi]perylene', - 'fraction': 'suspended' - }, { - 'name': 'benzo[k]fluoranthene', - 'tex': 'Benzo[k]fluoranthene', - 'units': 'ug/L', - 'unicode': 'Benzo[k]fluoranthene', - 'fraction': 'total' - }, { - 'name': 'benzo[k]fluoranthene, suspended', - 'tex': 'Suspended Benzo[k]fluoranthene', - 'units': 'ug/L', - 'unicode': 'Benzo[k]fluoranthene', - 'fraction': 'suspended' - }, { - 'name': 'benzoic acid', - 'tex': 'Benzoic acid', - 'units': 'ug/L', - 'unicode': 'Benzoic acid', - 'fraction': 'total' - }, { - 'name': 'benzyl alcohol', - 'tex': 'Benzyl Alcohol', - 'units': 'ug/L', - 'unicode': 'Benzyl Alcohol', - 'fraction': 'total' - }, { - 'name': 'beryllium, dissolved', - 'tex': 'Dissolved Beryllium', - 'units': 'ug/L', - 'unicode': 'Beryllium', - 'fraction': 'dissolved' - }, { - 'name': 'beryllium, total', - 'tex': 'Total Beryllium', - 'units': 'ug/L', - 'unicode': 'Beryllium', - 'fraction': 'total' - }, { - 'name': 'biphenyl', - 'tex': 'Biphenyl', - 'units': 'ug/L', - 'unicode': 'Biphenyl', - 'fraction': 'total' - }, { - 'name': 'bis(2-chloro-1-methylethyl) ether', - 'tex': 'Bis(2-chloro-1-methylethyl) Ether', - 'units': 'ug/L', - 'unicode': 'Bis(2-chloro-1-methylethyl) Ether', - 'fraction': 'total' - }, { - 'name': 'bis(2-chloroethoxy)methane', - 'tex': 'Bis(2-chloroethoxy)methane', - 'units': 'ug/L', - 'unicode': 'Bis(2-chloroethoxy)methane', - 'fraction': 'total' - }, { - 'name': 'bis(2-chloroethyl) ether', - 'tex': 'Bis(2-chloroethyl) Ether', - 'units': 'ug/L', - 'unicode': 'Bis(2-chloroethyl) Ether', - 'fraction': 'total' - }, { - 'name': 'bis(2-chloroisopropyl) ether', - 'tex': 'Bis(2-chloroisopropyl) Ether', - 'units': 'ug/L', - 'unicode': 'Bis(2-chloroisopropyl) Ether', - 'fraction': 'total' - }, { - 'name': 'bis(2-ethylhexyl) phthalate', - 'tex': 'Bis(2-ethylhexyl) Phthalate', - 'units': 'ug/L', - 'unicode': 'Bis(2-ethylhexyl) Phthalate', - 'fraction': 'total' - }, { - 'name': 'bis(2-ethylhexyl)phthalate', - 'tex': 'Bis(2-ethylhexyl)Phthalate', - 'units': 'ug/L', - 'unicode': 'Bis(2-ethylhexyl) Phthalate', - 'fraction': 'total' - }, { - 'name': 'bis(n-octyl)phthalate', - 'tex': 'Bis(n-octyl)phthalate', - 'units': 'ug/L', - 'unicode': 'Bis(n-octyl) Phthalate', - 'fraction': 'total' - }, { - 'name': 'bromobenzene', - 'tex': 'Bromobenzene', - 'units': 'ug/L', - 'unicode': 'Bromobenzene', - 'fraction': 'total' - }, { - 'name': 'bromochloroiodomethane', - 'tex': 'Bromochloroiodomethane', - 'units': 'ug/L', - 'unicode': 'Bromochloroiodomethane', - 'fraction': 'total' - }, { - 'name': 'bromoform', - 'tex': 'Bromoform', - 'units': 'ug/L', - 'unicode': 'Bromoform', - 'fraction': 'total' - }, { - 'name': 'bromomethane', - 'tex': 'Bromomethane', - 'units': 'ug/L', - 'unicode': 'Bromomethane', - 'fraction': 'total' - }, { - 'name': 'butyl benzyl phthalate', - 'tex': 'Butyl Benzyl Phthalate', - 'units': 'ug/L', - 'unicode': 'Butyl Benzyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'cbod', - 'tex': 'Chemical-Biological Oxygen Demand', - 'units': 'mg/L', - 'unicode': 'Chemical-Biological Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'cfc-11', - 'tex': 'CFC-11', - 'units': 'ug/L', - 'unicode': 'CFC-11', - 'fraction': 'total' - }, { - 'name': 'cfc-12', - 'tex': 'CFC-12', - 'units': 'ug/L', - 'unicode': 'CFC-12', - 'fraction': 'total' - }, { - 'name': 'cadmium, dissolved', - 'tex': 'Dissolved Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'dissolved' - }, { - 'name': 'cadmium, suspended', - 'tex': 'Suspended Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'suspended' - }, { - 'name': 'cadmium, total', - 'tex': 'Total Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'total' - }, { - 'name': 'dissolved cadmium', - 'tex': 'Dissolved Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'dissolved' - }, { - 'name': 'suspended cadmium', - 'tex': 'Suspended Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'suspended' - }, { - 'name': 'total cadmium', - 'tex': 'Total Cadmium', - 'units': 'ug/L', - 'unicode': 'Cadmium', - 'fraction': 'total' - }, { - 'name': 'calcium as caco3, total', - 'tex': 'Total Calcium as CaCO$_{3}$', - 'units': 'mg/L', - 'unicode': 'Calcium as CaCO₃', - 'fraction': 'total' - }, { - 'name': 'calcium, dissolved', - 'tex': 'Dissolved Calcium', - 'units': 'mg/L', - 'unicode': 'Calcium', - 'fraction': 'dissolved' - }, { - 'name': 'calcium, total', - 'tex': 'Total Calcium', - 'units': 'mg/L', - 'unicode': 'Calcium', - 'fraction': 'total' - }, { - 'name': 'carbofuran', - 'tex': 'Carbofuran', - 'units': 'ug/L', - 'unicode': 'Carbofuran', - 'fraction': 'total' - }, { - 'name': 'carbon disulfide', - 'tex': 'Carbon Disulfide', - 'units': 'ug/L', - 'unicode': 'Carbon Disulfide', - 'fraction': 'total' - }, { - 'name': 'carbon fraction, particulate organic material', - 'tex': 'Carbon Fraction, Particulate Organic Material', - 'units': 'mg/L', - 'unicode': 'Carbon, Organic', - 'fraction': 'particulate' - }, { - 'name': 'carbon tetrachloride', - 'tex': 'Carbon Tetrachloride', - 'units': 'ug/L', - 'unicode': 'Carbon Tetrachloride', - 'fraction': 'total' - }, { - 'name': 'chemical oxygen demand', - 'tex': 'Chemical Oxygen Demand', - 'units': 'mg/L', - 'unicode': 'Chemical Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'chemical oxygen demand, high level', - 'tex': 'Chemical Oxygen Demand (high level)', - 'units': 'mg/L', - 'unicode': 'Chemical Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'chemical oxygen demand, low level', - 'tex': 'Chemical Oxygen Demand (low level)', - 'units': 'mg/L', - 'unicode': 'Chemical Oxygen Demand', - 'fraction': 'total' - }, { - 'name': 'chemical oxygen demand, low level, filtered', - 'tex': 'Chemical Oxygen Demand (low level, filtered)', - 'units': 'mg/L', - 'unicode': 'Chemical Oxygen Demand', - 'fraction': 'dissolved' - }, { - 'name': 'chemical oxygen demand, soluble', - 'tex': 'Chemical Oxygen Demand (soluble)', - 'units': 'mg/L', - 'unicode': 'Chemical Oxygen Demand', - 'fraction': 'dissolved' - }, { - 'name': 'chlordane', - 'tex': 'Chlordane', - 'units': 'ug/L', - 'unicode': 'Chlordane', - 'fraction': 'total' - }, { - 'name': 'chloride, dissolved', - 'tex': 'Dissolved Chloride', - 'units': 'mg/L', - 'unicode': 'Chloride', - 'fraction': 'dissolved' - }, { - 'name': 'chloride, total', - 'tex': 'Total Chloride', - 'units': 'mg/L', - 'unicode': 'Chloride', - 'fraction': 'total' - }, { - 'name': 'chlorobenzene', - 'tex': 'Chlorobenzene', - 'units': 'ug/L', - 'unicode': 'Chlorobenzene', - 'fraction': 'total' - }, { - 'name': 'chlorodibromomethane', - 'tex': 'Chlorodibromomethane', - 'units': 'ug/L', - 'unicode': 'Chlorodibromomethane', - 'fraction': 'total' - }, { - 'name': 'chloroethane', - 'tex': 'Chloroethane', - 'units': 'ug/L', - 'unicode': 'Chloroethane', - 'fraction': 'total' - }, { - 'name': 'chloroform', - 'tex': 'Chloroform', - 'units': 'ug/L', - 'unicode': 'Chloroform', - 'fraction': 'total' - }, { - 'name': 'chloromethane', - 'tex': 'Chloromethane', - 'units': 'ug/L', - 'unicode': 'Chloromethane', - 'fraction': 'total' - }, { - 'name': 'chlorotoluene', - 'tex': 'Chlorotoluene', - 'units': 'ug/L', - 'unicode': 'Chlorotoluene', - 'fraction': 'total' - }, { - 'name': 'chlorpyrifos', - 'tex': 'Chlorpyrifos', - 'units': 'ug/L', - 'unicode': 'Chlorpyrifos', - 'fraction': 'total' - }, { - 'name': 'chromium(vi), dissolved', - 'tex': 'Dissolved Chromium(VI)', - 'units': 'ug/L', - 'unicode': 'Chromium(VI)', - 'fraction': 'dissolved' - }, { - 'name': 'chromium(vi), total', - 'tex': 'Total Chromium(VI)', - 'units': 'ug/L', - 'unicode': 'Chromium(VI)', - 'fraction': 'total' - }, { - 'name': 'chromium, dissolved', - 'tex': 'Dissolved Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'dissolved' - }, { - 'name': 'chromium, suspended', - 'tex': 'Suspended Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'suspended' - }, { - 'name': 'chromium, total', - 'tex': 'Total Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'total' - }, { - 'name': 'dissolved chromium', - 'tex': 'Dissolved Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'dissolved' - }, { - 'name': 'suspended chromium', - 'tex': 'Suspended Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'suspended' - }, { - 'name': 'total chromium', - 'tex': 'Total Chromium', - 'units': 'ug/L', - 'unicode': 'Chromium', - 'fraction': 'total' - }, { - 'name': 'chrysene', - 'tex': 'Chrysene', - 'units': 'ug/L', - 'unicode': 'Chrysene', - 'fraction': 'total' - }, { - 'name': 'chrysene, suspended', - 'tex': 'Suspended Chrysene', - 'units': 'ug/L', - 'unicode': 'Chrysene', - 'fraction': 'suspended' - }, { - 'name': 'cobalt, total', - 'tex': 'Total Cobalt', - 'units': 'ug/L', - 'unicode': 'Cobalt', - 'fraction': 'total' - }, { - 'name': 'copper, dissolved', - 'tex': 'Dissolved Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'dissolved' - }, { - 'name': 'copper, suspended', - 'tex': 'Suspended Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'suspended' - }, { - 'name': 'copper, total', - 'tex': 'Total Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'total' - }, { - 'name': 'dissolved copper', - 'tex': 'Dissolved Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'dissolved' - }, { - 'name': 'suspended copper', - 'tex': 'Suspended Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'suspended' - }, { - 'name': 'total copper', - 'tex': 'Total Copper', - 'units': 'ug/L', - 'unicode': 'Copper', - 'fraction': 'total' - }, { - 'name': 'cumene', - 'tex': 'Cumene', - 'units': 'ug/L', - 'unicode': 'Cumene', - 'fraction': 'total' - }, { - 'name': 'cyanazine', - 'tex': 'Cyanazine', - 'units': 'ug/L', - 'unicode': 'Cyanazine', - 'fraction': 'total' - }, { - 'name': 'cyanide', - 'tex': 'Cyanide', - 'units': 'mg/L', - 'unicode': 'Cyanide', - 'fraction': 'total' - }, { - 'name': 'daconil', - 'tex': 'DACONIL', - 'units': 'ug/L', - 'unicode': 'DACONIL', - 'fraction': 'total' - }, { - 'name': 'di(2-ethylhexyl) phthalate', - 'tex': 'Di(2-ethylhexyl) Phthalate', - 'units': 'ug/L', - 'unicode': 'Di(2-ethylhexyl) Phthalate', - 'fraction': 'total' - }, { - 'name': 'di-n-octyl phthalate', - 'tex': 'Di-n-octyl Phthalate', - 'units': 'ug/L', - 'unicode': 'Di-n-octyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'diazinon', - 'tex': 'Diazinon', - 'units': 'ug/L', - 'unicode': 'Diazinon', - 'fraction': 'total' - }, { - 'name': 'dibenz[a,h]anthracene', - 'tex': 'Dibenz[a,h]anthracene', - 'units': 'ug/L', - 'unicode': 'Dibenz[a,h]anthracene', - 'fraction': 'total' - }, { - 'name': 'dibenz[a,h]anthracene, dissolved', - 'tex': 'Dissolved Dibenz[a,h]anthracene', - 'units': 'ug/L', - 'unicode': 'Dibenz[a,h]anthracene', - 'fraction': 'dissolved' - }, { - 'name': 'dibenzofuran', - 'tex': 'Dibenzofuran', - 'units': 'ug/L', - 'unicode': 'Dibenzofuran', - 'fraction': 'total' - }, { - 'name': 'dibromomethane', - 'tex': 'Dibromomethane', - 'units': 'ug/L', - 'unicode': 'Dibromomethane', - 'fraction': 'total' - }, { - 'name': 'dibromodichloromethane', - 'tex': 'Dibromodichloromethane', - 'units': 'ug/L', - 'unicode': 'Dibromodichloromethane', - 'fraction': 'total' - }, { - 'name': 'dibutyl phthalate', - 'tex': 'Dibutyl Phthalate', - 'units': 'ug/L', - 'unicode': 'Dibutyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'dichlorobromomethane', - 'tex': 'Dichlorobromomethane', - 'units': 'ug/L', - 'unicode': 'Dichlorobromomethane', - 'fraction': 'total' - }, { - 'name': 'dichlorodifluoromethane', - 'tex': 'Dichlorodifluoromethane', - 'units': 'ug/L', - 'unicode': 'Dichlorodifluoromethane', - 'fraction': 'total' - }, { - 'name': 'dichlorophenol', - 'tex': 'Dichlorophenol', - 'units': 'ug/L', - 'unicode': 'Dichlorophenol', - 'fraction': 'total' - }, { - 'name': 'dinitrophenol', - 'tex': 'Dinitrophenol', - 'units': 'ug/L', - 'unicode': 'Dinitrophenol', - 'fraction': 'total' - }, { - 'name': 'dieldrin', - 'tex': 'Dieldrin', - 'units': 'ug/L', - 'unicode': 'Dieldrin', - 'fraction': 'total' - }, { - 'name': 'diethyl phthalate', - 'tex': 'Diethyl Phthalate', - 'units': 'ug/L', - 'unicode': 'Diethyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'dimethyl phthalate', - 'tex': 'Dimethyl Phthalate', - 'units': 'ug/L', - 'unicode': 'Dimethyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'dimethylnaphthalene', - 'tex': 'Dimethylnaphthalene', - 'units': 'ug/L', - 'unicode': 'Dimethylnaphthalene', - 'fraction': 'total' - }, { - 'name': 'dissolved oxygen (do)', - 'tex': 'Dissolved Oxygen (DO)', - 'units': 'mg/L', - 'unicode': 'Dissolved Oxygen (DO)', - 'fraction': 'dissolved' - }, { - 'name': 'dro', - 'tex': 'DRO', - 'units': 'ug/L', - 'unicode': 'DRO', - 'fraction': 'total' - }, { - 'name': 'endosulfan i', - 'tex': 'Endosulfan I', - 'units': 'ug/L', - 'unicode': 'Endosulfan I', - 'fraction': 'total' - }, { - 'name': 'endosulfan i (alpha)', - 'tex': 'Endosulfan I (alpha)', - 'units': 'ug/L', - 'unicode': 'Endosulfan I (alpha)', - 'fraction': 'total' - }, { - 'name': '.alpha.-endosulfan, dissolved', - 'tex': 'Dissolved, Endosulfan I (alpha)', - 'units': 'ug/L', - 'unicode': 'Endosulfan I (alpha)', - 'fraction': 'dissolved' - }, { - 'name': 'endosulfan ii', - 'tex': 'Endosulfan II', - 'units': 'ug/L', - 'unicode': 'Endosulfan II', - 'fraction': 'total' - }, { - 'name': 'endosulfan ii (beta)', - 'tex': 'Endosulfan II (beta)', - 'units': 'ug/L', - 'unicode': 'Endosulfan II (beta)', - 'fraction': 'total' - }, { - 'name': '.beta.-endosulfan, dissolved', - 'tex': 'Dissolved, Endosulfan II (beta)', - 'units': 'ug/L', - 'unicode': 'Endosulfan II (beta)', - 'fraction': 'dissolved' - }, { - 'name': 'endosulfan sulfate', - 'tex': 'Endosulfan sulfate', - 'units': 'ug/L', - 'unicode': 'Endosulfan sulfate', - 'fraction': 'total' - }, { - 'name': 'endrin', - 'tex': 'Endrin', - 'units': 'ug/L', - 'unicode': 'Endrin', - 'fraction': 'total' - }, { - 'name': 'endrin aldehyde', - 'tex': 'Endrin Aldehyde', - 'units': 'ug/L', - 'unicode': 'Endrin Aldehyde', - 'fraction': 'total' - }, { - 'name': 'endrin ketone', - 'tex': 'Endrin Ketone', - 'units': 'ug/L', - 'unicode': 'Endrin Ketone', - 'fraction': 'total' - }, { - 'name': 'enterococcus', - 'tex': 'Enterococcus', - 'units': 'MPN/100 mL', - 'unicode': 'Enterococcus', - 'fraction': 'total' - }, { - 'name': 'escherichia coli', - 'tex': 'Escherichia coli', - 'units': 'MPN/100 mL', - 'unicode': 'Escherichia coli', - 'fraction': 'total' - }, { - 'name': 'ethyl methacrylate', - 'tex': 'Ethyl Methacrylate', - 'units': 'ug/L', - 'unicode': 'Ethyl Methacrylate', - 'fraction': 'total' - }, { - 'name': 'ethylbenzene', - 'tex': 'Ethylbenzene', - 'units': 'ug/L', - 'unicode': 'Ethylbenzene', - 'fraction': 'total' - }, { - 'name': 'ethylene dibromide', - 'tex': 'Ethylene Dibromide', - 'units': 'ug/L', - 'unicode': 'Ethylene Dibromide', - 'fraction': 'total' - }, { - 'name': 'fecal coliform', - 'tex': 'Fecal Coliform', - 'units': 'MPN/100 mL', - 'unicode': 'Fecal Coliform', - 'fraction': 'total' - }, { - 'name': 'fecal streptococcus group bacteria', - 'tex': 'Fecal Streptococcus Group Bacteria', - 'units': 'MPN/100 mL', - 'unicode': 'Fecal Streptococcus Group Bacteria', - 'fraction': 'total' - }, { - 'name': 'fluoranthene', - 'tex': 'Fluoranthene', - 'units': 'ug/L', - 'unicode': 'Fluoranthene', - 'fraction': 'total' - }, { - 'name': 'fluoranthene, suspended', - 'tex': 'Suspended Fluoranthene', - 'units': 'ug/L', - 'unicode': 'Fluoranthene', - 'fraction': 'suspended' - }, { - 'name': 'fluorene', - 'tex': 'Fluorene', - 'units': 'ug/L', - 'unicode': 'Fluorene', - 'fraction': 'total' - }, { - 'name': 'fluorene, suspended', - 'tex': 'Suspended Fluorene', - 'units': 'ug/L', - 'unicode': 'Fluorene', - 'fraction': 'suspended' - }, { - 'name': 'fluoride, dissolved', - 'tex': 'Dissolved Fluoride', - 'units': 'mg/L', - 'unicode': 'Fluoride', - 'fraction': 'dissolved' - }, { - 'name': 'fluoride, total', - 'tex': 'Total Fluoride', - 'units': 'mg/L', - 'unicode': 'Fluoride', - 'fraction': 'total' - }, { - 'name': 'glyphosate', - 'tex': 'Glyphosate', - 'units': 'ug/L', - 'unicode': 'Glyphosate', - 'fraction': 'total' - }, { - 'name': 'halon 1011', - 'tex': 'Halon 1011', - 'units': 'ug/L', - 'unicode': 'Halon 1011', - 'fraction': 'total' - }, { - 'name': 'hardness', - 'tex': 'Hardness', - 'units': 'mg/L', - 'unicode': 'Hardness', - 'fraction': 'total' - }, { - 'name': 'hardness, non-carbonate', - 'tex': 'Hardness, non-carbonate', - 'units': 'mg/L', - 'unicode': 'Hardness, non-carbonate', - 'fraction': 'total' - }, { - 'name': 'heptachlor', - 'tex': 'Heptachlor', - 'units': 'ug/L', - 'unicode': 'Heptachlor', - 'fraction': 'total' - }, { - 'name': 'heptachlor epoxide', - 'tex': 'Heptachlor Epoxide', - 'units': 'ug/L', - 'unicode': 'Heptachlor Epoxide', - 'fraction': 'total' - }, { - 'name': 'hexachlorobenzene', - 'tex': 'Hexachlorobenzene', - 'units': 'ug/L', - 'unicode': 'Hexachlorobenzene', - 'fraction': 'total' - }, { - 'name': 'hexachlorobutadiene', - 'tex': 'Hexachlorobutadiene', - 'units': 'ug/L', - 'unicode': 'Hexachlorobutadiene', - 'fraction': 'total' - }, { - 'name': 'hexachlorocyclopentadiene', - 'tex': 'Hexachlorocyclopentadiene', - 'units': 'ug/L', - 'unicode': 'Hexachlorocyclopentadiene', - 'fraction': 'total' - }, { - 'name': 'hexachloroethane', - 'tex': 'Hexachloroethane', - 'units': 'ug/L', - 'unicode': 'Hexachloroethane', - 'fraction': 'total' - }, { - 'name': 'hydrocarbons, total petroleum (tph)', - 'tex': 'Hydrocarbons, Total Petroleum (TPH)', - 'units': 'ug/L', - 'unicode': 'Total Petroleum Hydrocarbons', - 'fraction': 'total' - }, { - 'name': 'total petroleum hydrocarbons', - 'tex': 'Total Petroleum Hydrocarbons', - 'units': 'ug/L', - 'unicode': 'Total Petroleum Hydrocarbons', - 'fraction': 'total' - }, { - 'name': 'total petroleum hydrocarbons - diesel range', - 'tex': 'Total Petroleum Hydrocarbons - Diesel range', - 'units': 'ug/L', - 'unicode': 'Organics, Diesel Range', - 'fraction': 'total' - }, { - 'name': 'hydrocarbons, total petroleum, diesel range organics', - 'tex': 'Hydrocarbons, Total Petroleum, diesel range Organics', - 'units': 'ug/L', - 'unicode': 'Organics, Diesel Range', - 'fraction': 'total' - }, { - 'name': 'hydrocarbons, total petroleum, gasoline range organics', - 'tex': 'Hydrocarbons, Total Petroleum, gasoline range organics', - 'units': 'ug/L', - 'unicode': 'Organics, Gasoline Range', - 'fraction': 'total' - }, { - 'name': 'indeno[1,2,3-cd]pyrene', - 'tex': 'Indeno[1,2,3-cd]pyrene', - 'units': 'ug/L', - 'unicode': 'Indeno[1,2,3-cd]pyrene', - 'fraction': 'total' - }, { - 'name': 'indeno[1,2,3-cd]pyrene, suspended', - 'tex': 'Suspended Indeno[1,2,3-cd]pyrene', - 'units': 'ug/L', - 'unicode': 'Indeno[1,2,3-cd]pyrene', - 'fraction': 'suspended' - }, { - 'name': 'inorganic carbon, total', - 'tex': 'Total Inorganic Carbon', - 'units': 'mg/L', - 'unicode': 'Carbon, Inorganic', - 'fraction': 'total' - }, { - 'name': 'iodomethane', - 'tex': 'Iodomethane', - 'units': 'ug/L', - 'unicode': 'Iodomethane', - 'fraction': 'total' - }, { - 'name': 'iron, dissolved', - 'tex': 'Dissolved Iron', - 'units': 'ug/L', - 'unicode': 'Iron', - 'fraction': 'dissolved' - }, { - 'name': 'iron, total', - 'tex': 'Total Iron', - 'units': 'ug/L', - 'unicode': 'Iron', - 'fraction': 'total' - }, { - 'name': 'dissolved iron', - 'tex': 'Dissolved Iron', - 'units': 'ug/L', - 'unicode': 'Iron', - 'fraction': 'dissolved' - }, { - 'name': 'total iron', - 'tex': 'Total Iron', - 'units': 'ug/L', - 'unicode': 'Iron', - 'fraction': 'total' - }, { - 'name': 'isophorone', - 'tex': 'Isophorone', - 'units': 'ug/L', - 'unicode': 'Isophorone', - 'fraction': 'total' - }, { - 'name': 'isopropylbenzene', - 'tex': 'Isopropylbenzene', - 'units': 'ug/L', - 'unicode': 'Isopropylbenzene', - 'fraction': 'total' - }, { - 'name': 'kjeldahl nitrogen (tkn)', - 'tex': 'Total Kjeldahl Nitrogen', - 'units': 'mg/L', - 'unicode': 'Kjeldahl Nitrogen', - 'fraction': 'total' - }, { - 'name': 'total kjeldahl nitrogen', - 'tex': 'Total Kjeldahl Nitrogen', - 'units': 'mg/L', - 'unicode': 'Kjeldahl Nitrogen', - 'fraction': 'total' - }, { - 'name': 'kjeldahl nitrogen, dissolved', - 'tex': 'Dissolved Kjeldahl Nitrogen', - 'units': 'mg/L', - 'unicode': 'Kjeldahl Nitrogen', - 'fraction': 'dissolved' - }, { - 'name': 'kjeldahl nitrogen, suspended', - 'tex': 'Suspended Kjeldahl Nitrogen', - 'units': 'mg/L', - 'unicode': 'Kjeldahl Nitrogen', - 'fraction': 'suspended' - }, { - 'name': 'lead, dissolved', - 'tex': 'Dissolved Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'dissolved' - }, { - 'name': 'lead, suspended', - 'tex': 'Suspended Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'suspended' - }, { - 'name': 'lead, total', - 'tex': 'Total Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'total' - }, { - 'name': 'dissolved lead', - 'tex': 'Dissolved Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'dissolved' - }, { - 'name': 'suspended lead', - 'tex': 'Suspended Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'suspended' - }, { - 'name': 'total lead', - 'tex': 'Total Lead', - 'units': 'ug/L', - 'unicode': 'Lead', - 'fraction': 'total' - }, { - 'name': 'lindane', - 'tex': 'Lindane', - 'units': 'ug/L', - 'unicode': 'Lindane', - 'fraction': 'total' - }, { - 'name': 'lithium, dissolved', - 'tex': 'Dissolved Lithium', - 'units': 'ug/L', - 'unicode': 'Lithium', - 'fraction': 'dissolved' - }, { - 'name': 'magnesium, dissolved', - 'tex': 'Dissolved Magnesium', - 'units': 'ug/L', - 'unicode': 'Magnesium', - 'fraction': 'dissolved' - }, { - 'name': 'magnesium, total', - 'tex': 'Total Magnesium', - 'units': 'ug/L', - 'unicode': 'Magnesium', - 'fraction': 'total' - }, { - 'name': 'malathion', - 'tex': 'Malathion', - 'units': 'ug/L', - 'unicode': 'Malathion', - 'fraction': 'total' - }, { - 'name': 'manganese, dissolved', - 'tex': 'Dissolved Manganese', - 'units': 'ug/L', - 'unicode': 'Manganese', - 'fraction': 'dissolved' - }, { - 'name': 'manganese, total', - 'tex': 'Total Manganese', - 'units': 'ug/L', - 'unicode': 'Manganese', - 'fraction': 'total' - }, { - 'name': 'mercury, dissolved', - 'tex': 'Dissolved Mercury', - 'units': 'ug/L', - 'unicode': 'Mercury', - 'fraction': 'dissolved' - }, { - 'name': 'mercury, total', - 'tex': 'Total Mercury', - 'units': 'ug/L', - 'unicode': 'Mercury', - 'fraction': 'total' - }, { - 'name': 'methoxychlor', - 'tex': 'Methoxychlor', - 'units': 'ug/L', - 'unicode': 'Methoxychlor', - 'fraction': 'total' - }, { - 'name': 'methyl mercury', - 'tex': 'Methyl Mercury', - 'units': 'ug/L', - 'unicode': 'Methyl Mercury', - 'fraction': 'total' - }, { - 'name': 'methyl bromide', - 'tex': 'Methyl bromide', - 'units': 'ug/L', - 'unicode': 'Methyl bromide', - 'fraction': 'total' - }, { - 'name': 'methyl ethyl ketone', - 'tex': 'Methyl Ethyl Ketone', - 'units': 'ug/L', - 'unicode': 'Methyl Ethyl Ketone', - 'fraction': 'total' - }, { - 'name': 'methyl isobutyl ketone', - 'tex': 'Methyl Isobutyl Ketone', - 'units': 'ug/L', - 'unicode': 'Methyl Isobutyl Ketone', - 'fraction': 'total' - }, { - 'name': 'methyl tert-butyl ether', - 'tex': 'Methyl Tertiary Butyl Ether', - 'units': 'ug/L', - 'unicode': 'Methyl Tertiary Butyl Ether', - 'fraction': 'total' - }, { - 'name': 'methylene blue active substances (mbas)', - 'tex': 'Methylene Blue Active Substances (MBAS)', - 'units': 'ug/L', - 'unicode': 'Methylene Blue Active Substances', - 'fraction': 'total' - }, { - 'name': 'methylene chloride', - 'tex': 'Methylene Chloride', - 'units': 'ug/L', - 'unicode': 'Methylene Chloride', - 'fraction': 'total' - }, { - 'name': 'methylnaphthalene', - 'tex': 'Methylnaphthalene', - 'units': 'ug/L', - 'unicode': 'Methylnaphthalene', - 'fraction': 'total' - }, { - 'name': 'molybdenum, total', - 'tex': 'Total Molybdenum', - 'units': 'ug/L', - 'unicode': 'Molybdenum', - 'fraction': 'total' - }, { - 'name': 'n-nitrosodi-n-propylamine', - 'tex': 'N-Nitrosodi-n-Propylamine', - 'units': 'ug/L', - 'unicode': 'N-Nitrosodi-n-Propylamine', - 'fraction': 'total' - }, { - 'name': 'n-nitrosodimethylamine', - 'tex': 'N-Nitrosodimethylamine', - 'units': 'ug/L', - 'unicode': 'N-Nitrosodimethylamine', - 'fraction': 'total' - }, { - 'name': 'n-nitrosodiphenylamine', - 'tex': 'N-Nitrosodiphenylamine', - 'units': 'ug/L', - 'unicode': 'N-Nitrosodiphenylamine', - 'fraction': 'total' - }, { - 'name': 'naphthalene', - 'tex': 'Naphthalene', - 'units': 'ug/L', - 'unicode': 'Naphthalene', - 'fraction': 'total' - }, { - 'name': 'naphthalene, dissolved', - 'tex': 'Dissolved Naphthalene', - 'units': 'ug/L', - 'unicode': 'Naphthalene', - 'fraction': 'dissolved' - }, { - 'name': 'naphthalene, suspended', - 'tex': 'Suspended Naphthalene', - 'units': 'ug/L', - 'unicode': 'Naphthalene', - 'fraction': 'suspended' - }, { - 'name': 'nickel, dissolved', - 'tex': 'Dissolved Nickel', - 'units': 'ug/L', - 'unicode': 'Nickel', - 'fraction': 'dissolved' - }, { - 'name': 'nickel, total', - 'tex': 'Total Nickel', - 'units': 'ug/L', - 'unicode': 'Nickel', - 'fraction': 'total' - }, { - 'name': 'dissolved nickel', - 'tex': 'Dissolved Nickel', - 'units': 'ug/L', - 'unicode': 'Nickel', - 'fraction': 'dissolved' - }, { - 'name': 'total nickel', - 'tex': 'Total Nickel', - 'units': 'ug/L', - 'unicode': 'Nickel', - 'fraction': 'total' - }, { - 'name': 'nitrobenzene', - 'tex': 'Nitrobenzene', - 'units': 'ug/L', - 'unicode': 'Nitrobenzene', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrate (no3) as n', - 'tex': 'Nitrogen, Nitrate (NO$_{3}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrate (NO₃) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrate (no$_{3}$) as n', - 'tex': 'Nitrogen, Nitrate (NO$_{3}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrate (NO₃) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrite (no2) + nitrate (no3) as n', - 'tex': 'Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrite (no$_{2}$) + nitrate (no$_{3}$) as n', - 'tex': 'Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrite (no2) as n', - 'tex': 'Nitrogen, Nitrite (NO$_{2}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrite (NO₂) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nitrite (no$_{2}$) as n', - 'tex': 'Nitrogen, Nitrite (NO$_{2}$) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Nitrite (NO₂) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, nox as n', - 'tex': 'Nitrogen, NO$_{x}$ as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, NOₓ as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, no$_{x}$ as n', - 'tex': 'Nitrogen, NO$_{x}$ as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, NOₓ as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, noₓ as n', - 'tex': 'Nitrogen, NO$_{x}$ as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, NOₓ as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, total', - 'tex': 'Total Nitrogen', - 'units': 'mg/L', - 'unicode': 'Nitrogen', - 'fraction': 'total' - }, { - 'name': 'total nitrogen', - 'tex': 'Total Nitrogen', - 'units': 'mg/L', - 'unicode': 'Nitrogen', - 'fraction': 'total' - }, { - 'name': 'nitrogen, ammonia as n', - 'tex': 'Nitrogen, Ammonia as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Ammonia as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, ammonium (nh4) as n', - 'tex': 'Nitrogen, Ammonium (NH4) as N', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Ammonium (NH₄) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, ammonium (nh4) as nh4', - 'tex': 'Nitrogen, Ammonium (NH$_{4}$) as NH$_{4}$', - 'units': 'mg/L', - 'unicode': 'Ammonium (NH₄) as NH₄', - 'fraction': 'total' - }, { - 'name': 'nitrogen, unionized ammonia (nh3) as n', - 'tex': 'Nitrogen, Unionized Ammonia (NH$_{3}$) as N', - 'units': 'mg/L', - 'unicode': 'Unionized Ammonia (NH₃) as N', - 'fraction': 'total' - }, { - 'name': 'nitrogen, ammonia (nh3) as nh3', - 'tex': 'Nitrogen, Ammonia (NH$_{3}$) as NH3', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Ammonia (NH₃) as NH₃', - 'fraction': 'total' - }, { - 'name': 'oil range organics', - 'tex': 'Oil Range Organics', - 'units': 'ug/L', - 'unicode': 'Organics, Oil Range', - 'fraction': 'total' - }, { - 'name': 'oil and grease', - 'tex': 'Oil and Grease', - 'units': 'mg/L', - 'unicode': 'Oil and Grease', - 'fraction': 'total' - }, { - 'name': 'organic nitrogen, dissolved', - 'tex': 'Dissolved Organic Nitrogen', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Organic', - 'fraction': 'dissolved' - }, { - 'name': 'nitrogen, dissolved inorganic', - 'tex': 'Nitrogen, Dissolved Inorganic', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Inorganic', - 'fraction': 'dissolved' - }, { - 'name': 'organic nitrogen, total', - 'tex': 'Total Organic Nitrogen', - 'units': 'mg/L', - 'unicode': 'Nitrogen, Organic', - 'fraction': 'total' - }, { - 'name': 'organic carbon, dissolved', - 'tex': 'Dissolved Organic Carbon', - 'units': 'mg/L', - 'unicode': 'Carbon, Organic', - 'fraction': 'dissolved' - }, { - 'name': 'organic carbon, total', - 'tex': 'Total Organic Carbon', - 'units': 'mg/L', - 'unicode': 'Carbon, Organic ', - 'fraction': 'total' - }, { - 'name': 'oro', - 'tex': 'ORO', - 'units': 'ug/L', - 'unicode': 'ORO', - 'fraction': 'total' - }, { - 'name': 'oxidation reduction potential (orp)', - 'tex': 'Oxidation Reduction Potential (ORP)', - 'units': 'mV', - 'unicode': 'Oxidation Reduction Potential (ORP)', - 'fraction': 'total' - }, { - 'name': 'p-isopropyltoluene', - 'tex': 'p-Isopropyltoluene', - 'units': 'ug/L', - 'unicode': 'p-Isopropyltoluene', - 'fraction': 'total' - }, { - 'name': "p,p'-dde", - 'tex': "p,p'-DDE", - 'units': 'ug/L', - 'unicode': "p,p'-DDE", - 'fraction': 'total' - }, { - 'name': 'pbp', - 'tex': 'PBP', - 'units': 'ug/L', - 'unicode': 'PBP', - 'fraction': 'total' - }, { - 'name': 'pentachlorophenol', - 'tex': 'Pentachlorophenol', - 'units': 'ug/L', - 'unicode': 'Pentachlorophenol', - 'fraction': 'total' - }, { - 'name': 'pentachlorophenol, dissolved', - 'tex': 'Dissolved Pentachlorophenol', - 'units': 'ug/L', - 'unicode': 'Pentachlorophenol', - 'fraction': 'dissolved' - }, { - 'name': 'phenanthrene', - 'tex': 'Phenanthrene', - 'units': 'ug/L', - 'unicode': 'Phenanthrene', - 'fraction': 'total' - }, { - 'name': 'phenanthrene, dissolved', - 'tex': 'Dissolved Phenanthrene', - 'units': 'ug/L', - 'unicode': 'Phenanthrene', - 'fraction': 'dissolved' - }, { - 'name': 'phenanthrene, suspended', - 'tex': 'Suspended Phenanthrene', - 'units': 'ug/L', - 'unicode': 'Phenanthrene', - 'fraction': 'suspended' - }, { - 'name': 'phenol', - 'tex': 'Phenol', - 'units': 'ug/L', - 'unicode': 'Phenol', - 'fraction': 'total' - }, { - 'name': 'phenols', - 'tex': 'Phenols', - 'units': 'ug/L', - 'unicode': 'Phenols', - 'fraction': 'total' - }, { - 'name': 'phosphate-phosphorus', - 'tex': 'Phosphate-Phosphorus', - 'units': 'mg/L', - 'unicode': 'Phosphate-Phosphorus', - 'fraction': 'total' - }, { - 'name': 'phosphorus as p, dissolved', - 'tex': 'Dissolved Phosphorus as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'dissolved' - }, { - 'name': 'dissolved phosphorus as p', - 'tex': 'Dissolved Phosphorus as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'dissolved' - }, { - 'name': 'phosphorus as p, suspended', - 'tex': 'Suspended Phosphorus as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'suspended' - }, { - 'name': 'phosphorus as p, total', - 'tex': 'Total Phosphorus as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'total' - }, { - 'name': 'total phosphorus as p', - 'tex': 'Total Phosphorus as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'total' - }, { - 'name': 'phosphorus as po4, total', - 'tex': 'Total Phosphorus as PO4', - 'units': 'mg/L', - 'unicode': 'Phosphorus as PO₄', - 'fraction': 'total' - }, { - 'name': 'phosphorus, particulate organic', - 'tex': 'Phosphorus, Particulate Organic', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Organic', - 'fraction': 'particulate' - }, { - 'name': 'phosphorus, particulate', - 'tex': 'Phosphorus, Particulate', - 'units': 'mg/L', - 'unicode': 'Phosphorus as P', - 'fraction': 'particulate' - }, { - 'name': 'phosphorus, organic', - 'tex': 'Phosphorus, Organic', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Organic', - 'fraction': 'total' - }, { - 'name': 'phosphorus, soluble reactive (srp)', - 'tex': 'Phosphorus, Soluble Reactive (SRP)', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Soluble Reactive (SRP)', - 'fraction': 'total' - }, { - 'name': 'phosphorus, organic as p, dissolved', - 'tex': 'Dissolved Phosphorus, organic as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Organic', - 'fraction': 'dissolved' - }, { - 'name': 'dissolved phosphorus, organic as p', - 'tex': 'Dissolved Phosphorus, organic as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Organic', - 'fraction': 'dissolved' - }, { - 'name': 'phosphorus, orthophosphate as p', - 'tex': 'Phosphorus, Orthophosphate as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Orthophosphate as P', - 'fraction': 'total' - }, { - 'name': 'phosphorus, orthophosphate as p, dissolved', - 'tex': 'Dissolved Phosphorus, Orthophosphate as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Orthophosphate as P', - 'fraction': 'dissolved' - }, { - 'name': 'phosphorus, orthophosphate as p, suspended', - 'tex': 'Suspended Phosphorus, Orthophosphate as P', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Orthophosphate as P', - 'fraction': 'suspended' - }, { - 'name': 'phosphorus, orthophosphate as po4', - 'tex': 'Phosphorus, Orthophosphate as PO$_{4}$', - 'units': 'mg/L', - 'unicode': 'Phosphorus, Orthophosphate as PO₄', - 'fraction': 'total' - }, { - 'name': 'polycyclic aromatic hydrocarbons', - 'tex': 'Polycyclic Aromatic Hydrocarbons', - 'units': 'ug/L', - 'unicode': 'Polycyclic Aromatic Hydrocarbons', - 'fraction': 'total' - }, { - 'name': 'potassium, dissolved', - 'tex': 'Dissolved Potassium', - 'units': 'mg/L', - 'unicode': 'Potassium', - 'fraction': 'dissolved' - }, { - 'name': 'potassium, total', - 'tex': 'Total Potassium', - 'units': 'mg/L', - 'unicode': 'Potassium', - 'fraction': 'total' - }, { - 'name': 'prometryn', - 'tex': 'Prometryn', - 'units': 'ug/L', - 'unicode': 'Prometryn', - 'fraction': 'total' - }, { - 'name': 'pyrene', - 'tex': 'Pyrene', - 'units': 'ug/L', - 'unicode': 'Pyrene', - 'fraction': 'total' - }, { - 'name': 'pyrene, suspended', - 'tex': 'Suspended Pyrene', - 'units': 'ug/L', - 'unicode': 'Pyrene', - 'fraction': 'suspended' - }, { - 'name': 'relative toxicity (i 25% reduction)', - 'tex': 'RELATIVE TOXICITY (I 25\% REDUCTION)', - 'units': '%', - 'unicode': 'Relative Toxicity (I 25% Reduction)', - 'fraction': 'total' - }, { - 'name': 'relative toxicity (i 25% reduction), filtered', - 'tex': 'RELATIVE TOXICITY (I 25\% REDUCTION, filtered)', - 'units': '%', - 'unicode': 'Relative Toxicity (I 25% Reduction)', - 'fraction': 'suspended' - }, { - 'name': 'ssc-total coarse fraction (>63um)', - 'tex': r'SSC-Total Coarse Fraction ($>63$ \si[per-mode=symbol]{\micro\meter})', - 'units': 'mg/L', - 'unicode': 'SSC-Total Coarse Fraction (>63 µm)', - 'fraction': 'total' - }, { - 'name': 'ssc-total fine fraction (<63um)', - 'tex': r'SSC-Total Fine Fraction (<63 \si[per-mode=symbol]{\micro\meter})', - 'units': 'mg/L', - 'unicode': 'SSC-Total Fine Fraction (<63 µm)', - 'fraction': 'total' - }, { - 'name': 'ssc-total particulate solids', - 'tex': 'SSC-Total Particulate Solids', - 'units': 'mg/L', - 'unicode': 'SSC-Total Particulate Solids', - 'fraction': 'total' - }, { - 'name': 'ssc <2000 microns', - 'tex': r'SSC $<2000$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <2000 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <1000 microns', - 'tex': r'SSC $<1000$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <1000 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <500 microns', - 'tex': r'SSC $<500$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <500 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <250 microns', - 'tex': r'SSC $<250$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <250 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <100 microns', - 'tex': r'SSC $<100$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <100 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <62.5 microns', - 'tex': r'SSC $<62.5$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <62.5 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <50 microns', - 'tex': r'SSC $<50$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <50 µm', - 'fraction': 'total' - }, { - 'name': 'ssc <25 microns', - 'tex': r'SSC $<25$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'SSC <25 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <2000 microns', - 'tex': r'TVSS $<2000$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <2000 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <1000 microns', - 'tex': r'TVSS $<1000$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <1000 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <500 microns', - 'tex': r'TVSS $<500$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <500 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <250 microns', - 'tex': r'TVSS $<250$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <250 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <100 microns', - 'tex': r'TVSS $<100$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <100 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <62.5 microns', - 'tex': r'TVSS $<62.5$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <62.5 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <50 microns', - 'tex': r'TVSS $<50$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <50 µm', - 'fraction': 'total' - }, { - 'name': 'tvss <25 microns', - 'tex': r'TVSS $<25$ \si[per-mode=symbol]{\micro\meter}', - 'units': 'mg/L', - 'unicode': 'TVSS <25 µm', - 'fraction': 'total' - }, { - 'name': 'sand', - 'tex': 'Sand', - 'units': 'mg/L', - 'unicode': 'Sand', - 'fraction': 'total' - }, { - 'name': 'sec-butylbenzene', - 'tex': 'Sec-Butylbenzene', - 'units': 'ug/L', - 'unicode': 'Sec-Butylbenzene', - 'fraction': 'total' - }, { - 'name': 'selenium, dissolved', - 'tex': 'Dissolved Selenium', - 'units': 'ug/L', - 'unicode': 'Selenium', - 'fraction': 'dissolved' - }, { - 'name': 'selenium, total', - 'tex': 'Total Selenium', - 'units': 'ug/L', - 'unicode': 'Selenium', - 'fraction': 'total' - }, { - 'name': 'settleable solids', - 'tex': 'Settleable Solids', - 'units': 'mg/L', - 'unicode': 'Settleable Solids', - 'fraction': 'total' - }, { - 'name': 'silt', - 'tex': 'Silt', - 'units': 'mg/L', - 'unicode': 'Silt', - 'fraction': 'total' - }, { - 'name': 'silver, dissolved', - 'tex': 'Dissolved Silver', - 'units': 'ug/L', - 'unicode': 'Silver', - 'fraction': 'dissolved' - }, { - 'name': 'silver, total', - 'tex': 'Total Silver', - 'units': 'ug/L', - 'unicode': 'Silver', - 'fraction': 'total' - }, { - 'name': 'simazine', - 'tex': 'Simazine', - 'units': 'ug/L', - 'unicode': 'Simazine', - 'fraction': 'total' - }, { - 'name': 'sodium, dissolved', - 'tex': 'Dissolved Sodium', - 'units': 'mg/L', - 'unicode': 'Sodium', - 'fraction': 'dissolved' - }, { - 'name': 'sodium, total', - 'tex': 'Total Sodium', - 'units': 'mg/L', - 'unicode': 'Sodium', - 'fraction': 'total' - }, { - 'name': 'specific conductance', - 'tex': 'Specific Conductance', - 'units': 'umhos/cm', - 'unicode': 'Specific Conductance', - 'fraction': 'total' - }, { - 'name': 'styrene', - 'tex': 'Styrene', - 'units': 'ug/L', - 'unicode': 'Styrene', - 'fraction': 'total' - }, { - 'name': 'sulfate, dissolved', - 'tex': 'Dissolved Sulfate', - 'units': 'mg/L', - 'unicode': 'Sulfate', - 'fraction': 'dissolved' - }, { - 'name': 'sulfate, total', - 'tex': 'Total Sulfate', - 'units': 'mg/L', - 'unicode': 'Sulfate', - 'fraction': 'total' - }, { - 'name': 'sulfide, total', - 'tex': 'Total Sulfide', - 'units': 'mg/L', - 'unicode': 'Sulfide', - 'fraction': 'total' - }, { - 'name': 'surfactants', - 'tex': 'Surfactants', - 'units': 'ug/L', - 'unicode': 'Surfactants', - 'fraction': 'total' - }, { - 'name': 'suspended sediment concentration (ssc)', - 'tex': 'Suspended Sediment Concentration', - 'units': 'mg/L', - 'unicode': 'Suspended Sediment Concentration', - 'fraction': 'total' - }, { - 'name': 'temperature, water', - 'tex': 'Temperature, water', - 'units': 'deg C', - 'unicode': 'Temperature, Water', - 'fraction': 'total' - }, { - 'name': 'tetrachloroethane', - 'tex': 'Tetrachloroethane', - 'units': 'ug/L', - 'unicode': 'Tetrachloroethane', - 'fraction': 'total' - }, { - 'name': 'tetrachloroethylene', - 'tex': 'Tetrachloroethylene', - 'units': 'ug/L', - 'unicode': 'Tetrachloroethylene', - 'fraction': 'total' - }, { - 'name': 'thallium, dissolved', - 'tex': 'Dissolved Thallium', - 'units': 'ug/L', - 'unicode': 'Thallium', - 'fraction': 'dissolved' - }, { - 'name': 'thallium, total', - 'tex': 'Total Thallium', - 'units': 'ug/L', - 'unicode': 'Thallium', - 'fraction': 'total' - }, { - 'name': 'toluene', - 'tex': 'Toluene', - 'units': 'ug/L', - 'unicode': 'Toluene', - 'fraction': 'total' - }, { - 'name': 'total coliform', - 'tex': 'Total Coliform', - 'units': 'MPN/100 mL', - 'unicode': 'Total Coliform', - 'fraction': 'total' - }, { - 'name': 'total dissolved solids', - 'tex': 'Total Dissolved Solids', - 'units': 'mg/L', - 'unicode': 'Total Dissolved Solids', - 'fraction': 'total' - }, { - 'name': 'total solids', - 'tex': 'Total Solids', - 'units': 'mg/L', - 'unicode': 'Total Solids', - 'fraction': 'total' - }, { - 'name': 'total suspended solids', - 'tex': 'Total Suspended Solids', - 'units': 'mg/L', - 'unicode': 'Total Suspended Solids', - 'fraction': 'total' - }, { - 'name': 'total volatile solids', - 'tex': 'Total Volatile Solids', - 'units': 'mg/L', - 'unicode': 'Total Volatile Solids', - 'fraction': 'total' - }, { - 'name': 'total volatile solids, filterable', - 'tex': 'Total Volatile Solids (filterable)', - 'units': 'mg/L', - 'unicode': 'Total Volatile Solids', - 'fraction': 'total' - }, { - 'name': 'toxaphene', - 'tex': 'Toxaphene', - 'units': 'ug/L', - 'unicode': 'Toxaphene', - 'fraction': 'total' - }, { - 'name': 'tribromomethane', - 'tex': 'Tribromomethane', - 'units': 'ug/L', - 'unicode': 'Tribromomethane', - 'fraction': 'total' - }, { - 'name': 'trichloroethane', - 'tex': 'Trichloroethane', - 'units': 'ug/L', - 'unicode': 'Trichloroethane', - 'fraction': 'total' - }, { - 'name': 'trichloroethylene', - 'tex': 'Trichloroethylene', - 'units': 'ug/L', - 'unicode': 'Trichloroethylene', - 'fraction': 'total' - }, { - 'name': 'trichlorofuoromethane', - 'tex': 'Trichlorofuoromethane', - 'units': 'ug/L', - 'unicode': 'Trichlorofuoromethane', - 'fraction': 'total' - }, { - 'name': 'trichlorotrifluoroethane', - 'tex': 'Trichlorotrifluoroethane', - 'units': 'ug/L', - 'unicode': 'Trichlorotrifluoroethane', - 'fraction': 'total' - }, { - 'name': 'trihalomethanes', - 'tex': 'Trihalomethanes', - 'units': 'ug/L', - 'unicode': 'Trihalomethanes', - 'fraction': 'total' - }, { - 'name': 'true color', - 'tex': 'True Color', - 'units': 'ADMI Value', - 'unicode': 'True Color', - 'fraction': 'total' - }, { - 'name': 'true color, filtered', - 'tex': 'Filtered True Color', - 'units': 'ADMI Value', - 'unicode': 'Filtered True Color', - 'fraction': 'total' - }, { - 'name': 'turbidity', - 'tex': 'Turbidity', - 'units': 'NT', - 'unicode': 'Turbidity', - 'fraction': 'total' - }, { - 'name': 'turbidity, filtered', - 'tex': 'Filtered Turbidity', - 'units': 'NT', - 'unicode': 'Filtered Turbidity', - 'fraction': 'total' - }, { - 'name': 'vanadium, total', - 'tex': 'Total Vanadium', - 'units': 'ug/L', - 'unicode': 'Vanadium', - 'fraction': 'total' - }, { - 'name': 'vinyl acetate', - 'tex': 'Vinyl Acetate', - 'units': 'ug/L', - 'unicode': 'Vinyl Acetate', - 'fraction': 'total' - }, { - 'name': 'vinyl chloride', - 'tex': 'Vinyl Chloride', - 'units': 'ug/L', - 'unicode': 'Vinyl Chloride', - 'fraction': 'total' - }, { - 'name': 'xylenes, total', - 'tex': 'Total Xylenes', - 'units': 'ug/L', - 'unicode': 'Total Xylenes', - 'fraction': 'total' - }, { - 'name': 'zinc, dissolved', - 'tex': 'Dissolved Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'dissolved' - }, { - 'name': 'zinc, suspended', - 'tex': 'Suspended Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'suspended' - }, { - 'name': 'zinc, total', - 'tex': 'Total Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'total' - }, { - 'name': 'dissolved zinc', - 'tex': 'Dissolved Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'dissolved' - }, { - 'name': 'suspended zinc', - 'tex': 'Suspended Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'suspended' - }, { - 'name': 'total zinc', - 'tex': 'Total Zinc', - 'units': 'ug/L', - 'unicode': 'Zinc', - 'fraction': 'total' - }, { - 'name': 'alpha-chlordane', - 'tex': 'alpha-chlordane', - 'units': 'ug/L', - 'unicode': 'alpha-chlordane', - 'fraction': 'total' - }, { - 'name': 'cis-1,2-dichloroethylene', - 'tex': 'cis-1,2-Dichloroethylene', - 'units': 'ug/L', - 'unicode': 'cis-1,2-Dichloroethylene', - 'fraction': 'total' - }, { - 'name': 'cis-1,3-dichloropropene', - 'tex': 'cis-1,3-Dichloropropene', - 'units': 'ug/L', - 'unicode': 'cis-1,3-Dichloropropene', - 'fraction': 'total' - }, { - 'name': 'di-n-butyl phthalate', - 'tex': 'di-n-Butyl Phthalate', - 'units': 'ug/L', - 'unicode': 'di-n-Butyl Phthalate', - 'fraction': 'total' - }, { - 'name': 'gamma-chlordane', - 'tex': 'Gamma-Chlordane', - 'units': 'ug/L', - 'unicode': 'Gamma-Chlordane', - 'fraction': 'total' - }, { - 'name': 'm-dichlorobenzene', - 'tex': 'm-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': 'm-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': 'm-nitroaniline', - 'tex': 'm-Nitroaniline', - 'units': 'ug/L', - 'unicode': 'm-Nitroaniline', - 'fraction': 'total' - }, { - 'name': 'm-xylene', - 'tex': 'm-Xylene', - 'units': 'ug/L', - 'unicode': 'm-Xylene', - 'fraction': 'total' - }, { - 'name': 'n-butylbenzene', - 'tex': 'n-Butylbenzene', - 'units': 'ug/L', - 'unicode': 'n-Butylbenzene', - 'fraction': 'total' - }, { - 'name': 'n-propylbenzene', - 'tex': 'n-Propylbenzene', - 'units': 'ug/L', - 'unicode': 'n-Propylbenzene', - 'fraction': 'total' - }, { - 'name': 'o-chlorotoluene', - 'tex': 'o-Chlorotoluene', - 'units': 'ug/L', - 'unicode': 'o-Chlorotoluene', - 'fraction': 'total' - }, { - 'name': 'o-dichlorobenzene', - 'tex': 'o-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': 'o-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': 'o-xylene', - 'tex': 'o-Xylene', - 'units': 'ug/L', - 'unicode': 'o-Xylene', - 'fraction': 'total' - }, { - 'name': 'p-bromophenyl phenyl ether', - 'tex': 'p-Bromophenyl Phenyl Ether', - 'units': 'ug/L', - 'unicode': 'p-Bromophenyl Phenyl Ether', - 'fraction': 'total' - }, { - 'name': 'p-chlorophenyl phenyl ether', - 'tex': 'p-Chlorophenyl Phenyl Ether', - 'units': 'ug/L', - 'unicode': 'p-Chlorophenyl Phenyl Ether', - 'fraction': 'total' - }, { - 'name': 'p-chlorotoluene', - 'tex': 'p-Chlorotoluene', - 'units': 'ug/L', - 'unicode': 'p-Chlorotoluene', - 'fraction': 'total' - }, { - 'name': 'p-cymene', - 'tex': 'p-Cymene', - 'units': 'ug/L', - 'unicode': 'p-Cymene', - 'fraction': 'total' - }, { - 'name': 'p-dichlorobenzene', - 'tex': 'p-Dichlorobenzene', - 'units': 'ug/L', - 'unicode': 'p-Dichlorobenzene', - 'fraction': 'total' - }, { - 'name': 'p-nitrophenol', - 'tex': 'p-Nitrophenol', - 'units': 'ug/L', - 'unicode': 'p-Nitrophenol', - 'fraction': 'total' - }, { - 'name': 'p-xylene', - 'tex': 'p-Xylene', - 'units': 'ug/L', - 'unicode': 'p-Xylene', - 'fraction': 'total' - }, { - 'name': 'ph', - 'tex': 'pH', - 'units': 'S', - 'unicode': 'pH', - 'fraction': 'total' - }, { - 'name': 'protons', - 'tex': 'Protons (Hydrogen Ions)', - 'units': 'mg/L', - 'unicode': 'Protons (Hydrogen Ions)', - 'fraction': 'total' - }, { - 'name': 'tert-butylbenzene', - 'tex': 'Tertiary Butylbenzene', - 'units': 'ug/L', - 'unicode': 'Tertiary Butylbenzene', - 'fraction': 'total' - }, { - 'name': 'total petroleum hydrocarbons - motor oil range', - 'tex': 'Total Petroleum Hydrocarbons (motor oil range)', - 'units': 'ug/L', - 'unicode': 'Organics, Motor Oil Range', - 'fraction': 'total' - }, { - 'name': 'trans-1,2-dichloroethylene', - 'tex': 'trans-1,2-Dichloroethylene', - 'units': 'ug/L', - 'unicode': 'trans-1,2-Dichloroethylene', - 'fraction': 'total' - }, { - 'name': 'trans-1,3-dichloropropene', - 'tex': 'trans-1,3-Dichloropropene', - 'units': 'ug/L', - 'unicode': 'trans-1,3-Dichloropropene', - 'fraction': 'total' - }, { - 'name': 'trans-1,4-dichloro-2-butene', - 'tex': 'trans-1,4-Dichloro-2-butene', - 'units': 'ug/L', - 'unicode': 'trans-1,4-Dichloro-2-butene', - 'fraction': 'total' - }, { - 'name': 'dibenzo[b,k]fluoranthene', - 'tex': 'Dibenzo[b,k]fluoranthene', - 'units': 'ug/L', - 'unicode': 'Dibenzo[b,k]fluoranthene', - 'fraction': 'total' - }, { - 'name': 'dichlobenil', - 'tex': 'Dichlobenil', - 'units': 'ug/L', - 'unicode': 'Dichlobenil', - 'fraction': 'total' - }, { - 'name': 'prometon', - 'tex': 'Prometon', - 'units': 'ug/L', - 'unicode': 'Prometon', - 'fraction': 'total' - }, { - 'name': 'total volatile solids, non-filterable', - 'tex': 'Total Volatile Solids (non-filterable)', - 'units': 'ug/L', - 'unicode': 'Total Volatile Solids', - 'fraction': 'total' - }, { - 'name': 'benzo(b/j)fluoranthene', - 'tex': 'Benzo(b/j)fluoranthene', - 'units': 'ug/L', - 'unicode': 'Benzo(b/j)fluoranthene', - 'fraction': 'total' - }, { - 'name': 'bismuth', - 'tex': 'Bismuth', - 'units': 'ug/L', - 'unicode': 'Bismuth', - 'fraction': 'total' - }, { - 'name': 'boron', - 'tex': 'Boron', - 'units': 'ug/L', - 'unicode': 'Boron', - 'fraction': 'total' - }, { - 'name': 'lithium, total', - 'tex': 'Lithium, Total', - 'units': 'ug/L', - 'unicode': 'Lithium', - 'fraction': 'total' - }, { - 'name': 'silicon', - 'tex': 'Silicon', - 'units': 'ug/L', - 'unicode': 'Silicon', - 'fraction': 'total' - }, { - 'name': 'strontium', - 'tex': 'Strontium', - 'units': 'ug/L', - 'unicode': 'Strontium', - 'fraction': 'total' - }, { - 'name': 'tellurium', - 'tex': 'Tellurium', - 'units': 'ug/L', - 'unicode': 'Tellurium', - 'fraction': 'total' - }, { - 'name': 'tin, total', - 'tex': 'Tin, Total', - 'units': 'ug/L', - 'unicode': 'Tin', - 'fraction': 'total' - }, { - 'name': 'titanium, total', - 'tex': 'Titanium, Total', - 'units': 'ug/L', - 'unicode': 'Titanium', - 'fraction': 'total' - }, { - 'name': 'tungsten', - 'tex': 'Tungsten', - 'units': 'ug/L', - 'unicode': 'Tungsten', - 'fraction': 'total' - }, { - 'name': 'uranium-234/235/238', - 'tex': 'Uranium-234/235/238', - 'units': 'ug/L', - 'unicode': 'Uranium', - 'fraction': 'total' - }, { - 'name': 'uranium', - 'tex': 'Uranium', - 'units': 'ug/L', - 'unicode': 'Uranium', - 'fraction': 'total' - }, { - 'name': 'zirconium', - 'tex': 'Zirconium', - 'units': 'ug/L', - 'unicode': 'Zirconium', - 'fraction': 'total' - }, { - 'name': 'cesium', - 'tex': 'Cesium', - 'units': 'ug/L', - 'unicode': 'Cesium', - 'fraction': 'total' - }, { - 'name': 'rubidium', - 'tex': 'Rubidium', - 'units': 'ug/L', - 'unicode': 'Rubidium', - 'fraction': 'total' - }, { - 'name': '1,2-dibromo-3-chloropropane', - 'tex': '1,2-Dibromo-3-Chloropropane', - 'units': 'ug/L', - 'unicode': '1,2-Dibromo-3-Chloropropane', - 'fraction': 'total' - }, { - 'name': 'trans-1,2-dichloroethylenetrans-1,2-dichloroethylene', - 'tex': 'trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene', - 'units': 'ug/L', - 'unicode': 'trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene', - 'fraction': 'total' - }, { - 'name': '2,4,5-t', - 'tex': '2,4,5-T', - 'units': 'ug/L', - 'unicode': '2,4,5-T', - 'fraction': 'total' - }, { - 'name': '2,4-db', - 'tex': '2,4-DB', - 'units': 'ug/L', - 'unicode': '2,4-DB', - 'fraction': 'total' - }, { - 'name': 'dalapon', - 'tex': 'Dalapon', - 'units': 'ug/L', - 'unicode': 'Dalapon', - 'fraction': 'total' - }, { - 'name': 'dicamba', - 'tex': 'Dicamba', - 'units': 'ug/L', - 'unicode': 'Dicamba', - 'fraction': 'total' - }, { - 'name': 'dichlorprop', - 'tex': 'Dichlorprop', - 'units': 'ug/L', - 'unicode': 'Dichlorprop', - 'fraction': 'total' - }, { - 'name': 'mcpa', - 'tex': 'MCPA', - 'units': 'ug/L', - 'unicode': 'MCPA', - 'fraction': 'total' - }, { - 'name': 'mecoprop', - 'tex': 'Mecoprop', - 'units': 'ug/L', - 'unicode': 'Mecoprop', - 'fraction': 'total' - }, { - 'name': 'sulfur', - 'tex': 'Sulfur', - 'units': 'ug/L', - 'unicode': 'Sulfur', - 'fraction': 'total' - }, { - 'name': 'm,p-xylenes', - 'tex': 'm,p-Xylenes', - 'units': 'ug/L', - 'unicode': 'm,p-Xylenes', - 'fraction': 'total' - }, { - 'name': 'silica', - 'tex': 'Silica', - 'units': 'ug/L', - 'unicode': 'Silica', - 'fraction': 'total' - }, { - 'name': 'nitrogen, dissolved', - 'tex': 'Nitrogen, Dissolved', - 'units': 'ug/L', - 'unicode': 'Nitrogen', - 'fraction': 'dissolved' - }, { - 'name': 'nitrogen, particulate', - 'tex': 'Nitrogen, Particulate', - 'units': 'ug/L', - 'unicode': 'Nitrogen', - 'fraction': 'particulate' - }, { - 'name': 'meta & para xylene mix', - 'tex': 'meta & para Xylene mix', - 'units': 'ug/L', - 'unicode': 'm,p-Xylenes', - 'fraction': 'total' - }, { - 'name': 'temperature, air', - 'tex': 'Temperature, air', - 'units': 'deg C', - 'unicode': 'Temperature, Air', - 'fraction': 'total' - }, { - 'name': 'gasoline range organics', - 'tex': 'Gasoline range organics', - 'units': 'ug/L', - 'unicode': 'Organics, Gasoline Range', - 'fraction': 'total' - }, { - 'name': 'particle size, percent > 50 microns', - 'tex': 'Particle Size, Percent > 50 microns', - 'units': 'ug/L', - 'unicode': 'Particle Size, Percent >50 µm', - 'fraction': 'total' - }, { - 'name': 'chlorophyll a, uncorrected for pheophytin', - 'tex': 'Chlorophyll A (uncorrected for pheophytin)', - 'units': 'ug/L', - 'unicode': 'Chlorophyll A (uncorrected for pheophytin)', - 'fraction': 'total' - }, { - 'name': '1-methylphenanthrene', - 'tex': '1-Methylphenanthrene', - 'units': 'ug/L', - 'unicode': '1-Methylphenanthrene', - 'fraction': 'total' - }, { - 'name': '2,6-dimethylnaphthalene', - 'tex': '2,6-Dimethylnaphthalene', - 'units': 'ug/L', - 'unicode': '2,6-Dimethylnaphthalene', - 'fraction': 'total' - }, { - 'name': 'benzo[e]pyrene', - 'tex': 'Benzo[e]pyrene', - 'units': 'ug/L', - 'unicode': 'Benzo[e]pyrene', - 'fraction': 'total' - }, { - 'name': 'bifenthrin by nci', - 'tex': 'Bifenthrin by NCI', - 'units': 'ug/L', - 'unicode': 'Bifenthrin by NCI', - 'fraction': 'total' - }, { - 'name': 'cobalt, dissolved', - 'tex': 'Cobalt, Dissolved', - 'units': 'ug/L', - 'unicode': 'Cobalt', - 'fraction': 'dissolved' - }, { - 'name': 'cyfluthrin by nci', - 'tex': 'Cyfluthrin by NCI', - 'units': 'ug/L', - 'unicode': 'Cyfluthrin by NCI', - 'fraction': 'total' - }, { - 'name': 'cypermethrin', - 'tex': 'Cypermethrin', - 'units': 'ug/L', - 'unicode': 'Cypermethrin', - 'fraction': 'total' - }, { - 'name': 'dibenzothiophene', - 'tex': 'Dibenzothiophene', - 'units': 'ug/L', - 'unicode': 'Dibenzothiophene', - 'fraction': 'total' - }, { - 'name': 'esfenvalerate', - 'tex': 'Esfenvalerate', - 'units': 'ug/L', - 'unicode': 'Esfenvalerate', - 'fraction': 'total' - }, { - 'name': 'fenvalerate', - 'tex': 'Fenvalerate', - 'units': 'ug/L', - 'unicode': 'Fenvalerate', - 'fraction': 'total' - }, { - 'name': 'l-cyhalothrin by nci', - 'tex': 'L-Cyhalothrin by NCI', - 'units': 'ug/L', - 'unicode': 'L-Cyhalothrin by NCI', - 'fraction': 'total' - }, { - 'name': 'molybdenum, dissolved', - 'tex': 'Molybdenum, Dissolved', - 'units': 'ug/L', - 'unicode': 'Molybdenum', - 'fraction': 'dissolved' - }, { - 'name': 'permethrin', - 'tex': 'Permethrin', - 'units': 'ug/L', - 'unicode': 'Permethrin', - 'fraction': 'total' - }, { - 'name': 'tin, dissolved', - 'tex': 'Tin, Dissolved', - 'units': 'ug/L', - 'unicode': 'Tin', - 'fraction': 'dissolved' - }, { - 'name': 'titanium, dissolved', - 'tex': 'Titanium, Dissolved', - 'units': 'ug/L', - 'unicode': 'Titanium', - 'fraction': 'dissolved' - }, { - 'name': 'vanadium, dissolved', - 'tex': 'Vanadium, Dissolved', - 'units': 'ug/L', - 'unicode': 'Vanadium', - 'fraction': 'dissolved' - }, { - 'name': 'cypermethrin by nci', - 'tex': 'Cypermethrin by NCI', - 'units': 'ug/L', - 'unicode': 'Cypermethrin by NCI', - 'fraction': 'total' - }, { - 'name': 'bicarbonate', - 'tex': 'Bicarbonate', - 'units': 'ug/L', - 'unicode': 'Bicarbonate', - 'fraction': 'total' - }, { - 'name': 'Campylobacter spp.', - 'tex': 'Campylobacter spp.', - 'units': 'MPN/100 mL', - 'unicode': 'Campylobacter spp.', - 'fraction': 'total' - }, { - 'name': 'C. dubia % survival (100% sample)', - 'tex': 'c. dubia % survival (100% sample)', - 'units': '%', - 'unicode': 'c. dubia % survival (100% sample)', - 'fraction': 'total' - }, { - 'name': 'C. dubia reproduction, % control (100% sample)', - 'tex': 'C. dubia reproduction, % control (100% sample)', - 'units': '%', - 'unicode': 'C. dubia reproduction, % control (100% sample)', - 'fraction': 'total' - }, { - 'name': 'd8-acenaphthylene', - 'tex': 'D8-Acenaphthylene', - 'units': 'ug/L', - 'unicode': 'D8-Acenaphthylene', - 'fraction': 'total' - }, { - 'name': 'd10-anthracene', - 'tex': 'D10-Anthracene', - 'units': 'ug/L', - 'unicode': 'D10-Anthracene', - 'fraction': 'total' - }, { - 'name': 'd14-terphenyl (fs)', - 'tex': 'D14-Terphenyl (FS)', - 'units': 'ug/L', - 'unicode': 'D14-Terphenyl (FS)', - 'fraction': 'total' - }, { - 'name': 'particle size, % <0.21 um, >0.10 um', - 'tex': 'Particle Size, % <0.21 um, >0.10 um', - 'units': 'mg/L', - 'unicode': 'Particle Size, % <0.21 µm, >0.10 µm', - 'fraction': 'total' - }, { - 'name': 'particle size, d50', - 'tex': 'Particle Size, D50', - 'units': 'μm', - 'unicode': 'Particle Size, D50', - 'fraction': 'total' - }, { - 'name': '% sand, very coarse (1000-2000um)', - 'tex': r'Percent sand, very coarse (1000-2000 \si[per-mode=symbol]{\micro\meter})', - 'units': '%', - 'unicode': 'Percent sand, very coarse (1000-2000 µm)', - 'fraction': 'total' - }, { - 'name': 'echinoderm fertilization (50% sample)', - 'tex': 'Echinoderm fertilization (50% sample)', - 'units': 'NS', - 'unicode': 'Echinoderm fertilization (50% sample)', - 'fraction': 'total' - } -] +parameters = _loader('parameters.json') +units = _loader('units.json') \ No newline at end of file From 4b1ca99e4da0530168c2e9934e3df6fb2c0d52f3 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 5 Dec 2017 17:18:41 -0800 Subject: [PATCH 05/48] add json data --- pybmpdb/data/parameters.json | 1 + pybmpdb/data/units.json | 1 + 2 files changed, 2 insertions(+) create mode 100644 pybmpdb/data/parameters.json create mode 100644 pybmpdb/data/units.json diff --git a/pybmpdb/data/parameters.json b/pybmpdb/data/parameters.json new file mode 100644 index 0000000..76005f6 --- /dev/null +++ b/pybmpdb/data/parameters.json @@ -0,0 +1 @@ +[{"name": "1,1,1,2-tetrachloroethane", "tex": "1,1,1,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,1,2-Tetrachloroethane", "fraction": "total"}, {"name": "1,1,1-trichloroethane", "tex": "1,1,1-Trichloroethane", "units": "ug/L", "unicode": "1,1,1-Trichloroethane", "fraction": "total"}, {"name": "1,1,2,2-tetrachloroethane", "tex": "1,1,2,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,2,2-Tetrachloroethane", "fraction": "total"}, {"name": "1,1,2-trichloroethane", "tex": "1,1,2-Trichloroethane", "units": "ug/L", "unicode": "1,1,2-Trichloroethane", "fraction": "total"}, {"name": "1,1-dichloroethane", "tex": "1,1-Dichloroethane", "units": "ug/L", "unicode": "1,1-Dichloroethane", "fraction": "total"}, {"name": "1,1-dichloroethylene", "tex": "1,1-Dichloroethylene", "units": "ug/L", "unicode": "1,1-Dichloroethylene", "fraction": "total"}, {"name": "1,1-dichloropropene", "tex": "1,1-Dichloropropene", "units": "ug/L", "unicode": "1,1-Dichloropropene", "fraction": "total"}, {"name": "1,2,3-trichlorobenzene", "tex": "1,2,3-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,3-Trichlorobenzene", "fraction": "total"}, {"name": "1,2,3-trichloropropane", "tex": "1,2,3-Trichloropropane", "units": "ug/L", "unicode": "1,2,3-Trichloropropane", "fraction": "total"}, {"name": "1,2,4-trichlorobenzene", "tex": "1,2,4-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,4-Trichlorobenzene", "fraction": "total"}, {"name": "1,2,4-trimethylbenzene", "tex": "1,2,4-Trimethylbenzene", "units": "ug/L", "unicode": "1,2,4-Trimethylbenzene", "fraction": "total"}, {"name": "1,2-benzanthracene", "tex": "1,2-Benzanthracene", "units": "ug/L", "unicode": "1,2-Benzanthracene", "fraction": "total"}, {"name": "1,2-dibromoethane", "tex": "1,2-Dibromoethane", "units": "ug/L", "unicode": "1,2-Dibromoethane", "fraction": "total"}, {"name": "1,2-dichlorobenzene", "tex": "1,2-Dichlorobenzene", "units": "ug/L", "unicode": "1,2-Dichlorobenzene", "fraction": "total"}, {"name": "1,2-dichloroethane", "tex": "1,2-Dichloroethane", "units": "ug/L", "unicode": "1,2-Dichloroethane", "fraction": "total"}, {"name": "1,2-dichloropropane", "tex": "1,2-Dichloropropane", "units": "ug/L", "unicode": "1,2-Dichloropropane", "fraction": "total"}, {"name": "1,2-diphenylhydrazine", "tex": "1,2-Diphenylhydrazine", "units": "ug/L", "unicode": "1,2-Diphenylhydrazine", "fraction": "total"}, {"name": "1,3,5-trimethylbenzene", "tex": "1,3,5-Trimethylbenzene", "units": "ug/L", "unicode": "1,3,5-Trimethylbenzene", "fraction": "total"}, {"name": "1,3-dichlorobenzene", "tex": "1,3-Dichlorobenzene", "units": "ug/L", "unicode": "1,3-Dichlorobenzene", "fraction": "total"}, {"name": "1,3-dichloropropane", "tex": "1,3-Dichloropropane", "units": "ug/L", "unicode": "1,3-Dichloropropane", "fraction": "total"}, {"name": "1,4-dichlorobenzene", "tex": "1,4-Dichlorobenzene", "units": "ug/L", "unicode": "1,4-Dichlorobenzene", "fraction": "total"}, {"name": "1-chlorohexane", "tex": "1-Chlorohexane", "units": "ug/L", "unicode": "1-Chlorohexane", "fraction": "total"}, {"name": "1-methylnaphthalene", "tex": "1-Methylnaphthalene", "units": "ug/L", "unicode": "1-Methylnaphthalene", "fraction": "total"}, {"name": "2,2-dichloropropane", "tex": "2,2-Dichloropropane", "units": "ug/L", "unicode": "2,2-Dichloropropane", "fraction": "total"}, {"name": "2,4'-ddd", "tex": "2,4'-DDD", "units": "ug/L", "unicode": "2,4'-DDD", "fraction": "total"}, {"name": "2,4'-dde", "tex": "2,4'-DDE", "units": "ug/L", "unicode": "2,4'-DDE", "fraction": "total"}, {"name": "2,4'-ddt", "tex": "2,4'-DDT", "units": "ug/L", "unicode": "2,4'-DDT", "fraction": "total"}, {"name": "2,4,5-tp-silvex", "tex": "2,4,5-TP-SILVEX", "units": "ug/L", "unicode": "2,4,5-TP-Silvex", "fraction": "total"}, {"name": "2,4,5-trichlorophenol", "tex": "2,4,5-Trichlorophenol", "units": "ug/L", "unicode": "2,4,5-Trichlorophenol", "fraction": "total"}, {"name": "2,4,6-trichlorophenol", "tex": "2,4,6-Trichlorophenol", "units": "ug/L", "unicode": "2,4,6-Trichlorophenol", "fraction": "total"}, {"name": "2,4-d", "tex": "2,4-D", "units": "ug/L", "unicode": "2,4-D", "fraction": "total"}, {"name": "2,4-dichlorophenol", "tex": "2,4-Dichlorophenol", "units": "ug/L", "unicode": "2,4-Dichlorophenol", "fraction": "total"}, {"name": "2,4-dinitrophenol", "tex": "2,4-Dinitrophenol", "units": "ug/L", "unicode": "2,4-Dinitrophenol", "fraction": "total"}, {"name": "2,4-dinitrotoluene", "tex": "2,4-Dinitrotoluene", "units": "ug/L", "unicode": "2,4-Dinitrotoluene", "fraction": "total"}, {"name": "2,4-dimethylphenol", "tex": "2,4-Dimethylphenol", "units": "ug/L", "unicode": "2,4-Dimethylphenol", "fraction": "total"}, {"name": "2,6-dinitrotoluene", "tex": "2,6-Dinitrotoluene", "units": "ug/L", "unicode": "2,6-Dinitrotoluene", "fraction": "total"}, {"name": "2-butanone", "tex": "2-Butanone", "units": "ug/L", "unicode": "2-Butanone", "fraction": "total"}, {"name": "2-chloroethyl vinyl ether", "tex": "2-Chloroethyl Vinyl Ether", "units": "ug/L", "unicode": "2-Chloroethyl Vinyl Ether", "fraction": "total"}, {"name": "2-chloronaphthalene", "tex": "2-Chloronaphthalene", "units": "ug/L", "unicode": "2-Chloronaphthalene", "fraction": "total"}, {"name": "2-chlorophenol", "tex": "2-Chlorophenol", "units": "ug/L", "unicode": "2-Chlorophenol", "fraction": "total"}, {"name": "2-chlorotoluene", "tex": "2-Chlorotoluene", "units": "ug/L", "unicode": "2-Chlorotoluene", "fraction": "total"}, {"name": "2-hexanone", "tex": "2-Hexanone", "units": "ug/L", "unicode": "2-Hexanone", "fraction": "total"}, {"name": "2-methylnaphthalene", "tex": "2-Methylnaphthalene", "units": "ug/L", "unicode": "2-Methylnaphthalene", "fraction": "total"}, {"name": "2-nitrophenol", "tex": "2-Nitrophenol", "units": "ug/L", "unicode": "2-Nitrophenol", "fraction": "total"}, {"name": "3,3'-dichlorobenzidine", "tex": "3,3'-Dichlorobenzidine", "units": "ug/L", "unicode": "3,3'-Dichlorobenzidine", "fraction": "total"}, {"name": "4,4'-ddd", "tex": "4,4'-DDD", "units": "ug/L", "unicode": "4,4'-DDD", "fraction": "total"}, {"name": "4,4'-dde", "tex": "4,4'-DDE", "units": "ug/L", "unicode": "4,4'-DDE", "fraction": "total"}, {"name": "4,4'-ddt", "tex": "4,4'-DDT", "units": "ug/L", "unicode": "4,4'-DDT", "fraction": "total"}, {"name": "4,6-dinitro-2-methylphenol", "tex": "4,6-Dinitro-2-methylphenol", "units": "ug/L", "unicode": "4,6-Dinitro-2-methylphenol", "fraction": "total"}, {"name": "4,6-dinitro-o-cresol", "tex": "4,6-Dinitro-o-cresol", "units": "ug/L", "unicode": "4,6-Dinitro-o-cresol", "fraction": "total"}, {"name": "4-bromophenyl phenyl ether", "tex": "4-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Bromophenyl Phenyl Ether", "fraction": "total"}, {"name": "4-chlorophenyl phenyl ether", "tex": "4-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Chlorophenyl Phenyl Ether", "fraction": "total"}, {"name": "4-chlorotoluene", "tex": "4-Chlorotoluene", "units": "ug/L", "unicode": "4-Chlorotoluene", "fraction": "total"}, {"name": "4-nitrophenol", "tex": "4-Nitrophenol", "units": "ug/L", "unicode": "4-Nitrophenol", "fraction": "total"}, {"name": "4-chloro-3-methylphenol", "tex": "4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", "fraction": "total"}, {"name": "4-chloro-3-methylphenol, dissolved", "tex": "Dissolved 4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", "fraction": "dissolved"}, {"name": "4-hydroxy-4-methyl-2-pentanone", "tex": "4-Hydroxy-4-Methyl-2-Pentanone", "units": "ug/L", "unicode": "4-Hydroxy-4-Methyl-2-Pentanone", "fraction": "total"}, {"name": "acenaphthene", "tex": "Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", "fraction": "total"}, {"name": "acenaphthene, dissolved", "tex": "Dissolved Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", "fraction": "dissolved"}, {"name": "acenaphthylene", "tex": "Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", "fraction": "total"}, {"name": "acenaphthylene, suspended", "tex": "Suspended Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", "fraction": "suspended"}, {"name": "acetone", "tex": "Acetone", "units": "ug/L", "unicode": "Acetone", "fraction": "total"}, {"name": "acrolein", "tex": "Acrolein", "units": "ug/L", "unicode": "Acrolein", "fraction": "total"}, {"name": "acrylonitrile", "tex": "Acrylonitrile", "units": "ug/L", "unicode": "Acrylonitrile", "fraction": "total"}, {"name": "alachlor", "tex": "Alachlor", "units": "ug/L", "unicode": "Alachlor", "fraction": "total"}, {"name": "aldrin", "tex": "Aldrin", "units": "ug/L", "unicode": "Aldrin", "fraction": "total"}, {"name": "alkalinity", "tex": "Alkalinity", "units": "mg/L", "unicode": "Alkalinity", "fraction": "total"}, {"name": "alkalinity, carbonate as caco3", "tex": "Alkalinity, Carbonate as CaCO$_{3}$", "units": "mg/L", "unicode": "Alkalinity, Carbonate as CaCO\u2083", "fraction": "total"}, {"name": "aluminum, dissolved", "tex": "Dissolved Aluminum", "units": "ug/L", "unicode": "Aluminum", "fraction": "dissolved"}, {"name": "aluminum, total", "tex": "Total Aluminum", "units": "ug/L", "unicode": "Aluminum", "fraction": "total"}, {"name": "anthracene", "tex": "Anthracene", "units": "ug/L", "unicode": "Anthracene", "fraction": "total"}, {"name": "anthracene, suspended", "tex": "Suspended Anthracene", "units": "ug/L", "unicode": "Anthracene", "fraction": "suspended"}, {"name": "antimony, dissolved", "tex": "Dissolved Antimony", "units": "ug/L", "unicode": "Antimony", "fraction": "dissolved"}, {"name": "antimony, total", "tex": "Total Antimony", "units": "ug/L", "unicode": "Antimony", "fraction": "total"}, {"name": "aroclor 1016", "tex": "Aroclor 1016", "units": "ug/L", "unicode": "Aroclor 1016", "fraction": "total"}, {"name": "aroclor 1221", "tex": "Aroclor 1221", "units": "ug/L", "unicode": "Aroclor 1221", "fraction": "total"}, {"name": "aroclor 1232", "tex": "Aroclor 1232", "units": "ug/L", "unicode": "Aroclor 1232", "fraction": "total"}, {"name": "aroclor 1242", "tex": "Aroclor 1242", "units": "ug/L", "unicode": "Aroclor 1242", "fraction": "total"}, {"name": "aroclor 1248", "tex": "Aroclor 1248", "units": "ug/L", "unicode": "Aroclor 1248", "fraction": "total"}, {"name": "aroclor 1254", "tex": "Aroclor 1254", "units": "ug/L", "unicode": "Aroclor 1254", "fraction": "total"}, {"name": "aroclor 1260", "tex": "Aroclor 1260", "units": "ug/L", "unicode": "Aroclor 1260", "fraction": "total"}, {"name": "arsenic, dissolved", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "dissolved"}, {"name": "arsenic, total", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "total"}, {"name": "dissolved arsenic", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "dissolved"}, {"name": "total arsenic", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "total"}, {"name": "atrazine", "tex": "Atrazine", "units": "ug/L", "unicode": "Atrazine", "fraction": "total"}, {"name": "bhc-alpha", "tex": "BHC-ALPHA", "units": "ug/L", "unicode": "BHC-ALPHA", "fraction": "total"}, {"name": "bhc-beta", "tex": "BHC-BETA", "units": "ug/L", "unicode": "BHC-BETA", "fraction": "total"}, {"name": "bhc-delta", "tex": "BHC-DELTA", "units": "ug/L", "unicode": "BHC-DELTA", "fraction": "total"}, {"name": "bod", "tex": "Biological Oxygen Demand", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "total"}, {"name": "bod, dissolved", "tex": "Biological Oxygen Demand (dissolved)", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "dissolved"}, {"name": "bod, non-standard conditions", "tex": "Biological Oxygen Demand (non-standard conditions)", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "total"}, {"name": "barium, dissolved", "tex": "Dissolved Barium", "units": "ug/L", "unicode": "Barium", "fraction": "dissolved"}, {"name": "barium, total", "tex": "Total Barium", "units": "ug/L", "unicode": "Barium", "fraction": "total"}, {"name": "benz[a]anthracene", "tex": "Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", "fraction": "total"}, {"name": "benz[a]anthracene, suspended", "tex": "Suspended Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", "fraction": "suspended"}, {"name": "benzene", "tex": "Benzene", "units": "ug/L", "unicode": "Benzene", "fraction": "total"}, {"name": "benzidine", "tex": "Benzidine", "units": "ug/L", "unicode": "Benzidine", "fraction": "total"}, {"name": "benzo(b)fluoranthene", "tex": "Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", "fraction": "total"}, {"name": "benzo(b)fluoranthene, suspended", "tex": "Suspended Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", "fraction": "suspended"}, {"name": "benzo[a]pyrene", "tex": "Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", "fraction": "total"}, {"name": "benzo[a]pyrene, suspended", "tex": "Suspended Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", "fraction": "suspended"}, {"name": "benzo[ghi]perylene", "tex": "Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", "fraction": "total"}, {"name": "benzo[ghi]perylene, suspended", "tex": "Suspended Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", "fraction": "suspended"}, {"name": "benzo[k]fluoranthene", "tex": "Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", "fraction": "total"}, {"name": "benzo[k]fluoranthene, suspended", "tex": "Suspended Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", "fraction": "suspended"}, {"name": "benzoic acid", "tex": "Benzoic acid", "units": "ug/L", "unicode": "Benzoic acid", "fraction": "total"}, {"name": "benzyl alcohol", "tex": "Benzyl Alcohol", "units": "ug/L", "unicode": "Benzyl Alcohol", "fraction": "total"}, {"name": "beryllium, dissolved", "tex": "Dissolved Beryllium", "units": "ug/L", "unicode": "Beryllium", "fraction": "dissolved"}, {"name": "beryllium, total", "tex": "Total Beryllium", "units": "ug/L", "unicode": "Beryllium", "fraction": "total"}, {"name": "biphenyl", "tex": "Biphenyl", "units": "ug/L", "unicode": "Biphenyl", "fraction": "total"}, {"name": "bis(2-chloro-1-methylethyl) ether", "tex": "Bis(2-chloro-1-methylethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloro-1-methylethyl) Ether", "fraction": "total"}, {"name": "bis(2-chloroethoxy)methane", "tex": "Bis(2-chloroethoxy)methane", "units": "ug/L", "unicode": "Bis(2-chloroethoxy)methane", "fraction": "total"}, {"name": "bis(2-chloroethyl) ether", "tex": "Bis(2-chloroethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroethyl) Ether", "fraction": "total"}, {"name": "bis(2-chloroisopropyl) ether", "tex": "Bis(2-chloroisopropyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroisopropyl) Ether", "fraction": "total"}, {"name": "bis(2-ethylhexyl) phthalate", "tex": "Bis(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "bis(2-ethylhexyl)phthalate", "tex": "Bis(2-ethylhexyl)Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "bis(n-octyl)phthalate", "tex": "Bis(n-octyl)phthalate", "units": "ug/L", "unicode": "Bis(n-octyl) Phthalate", "fraction": "total"}, {"name": "bromobenzene", "tex": "Bromobenzene", "units": "ug/L", "unicode": "Bromobenzene", "fraction": "total"}, {"name": "bromochloroiodomethane", "tex": "Bromochloroiodomethane", "units": "ug/L", "unicode": "Bromochloroiodomethane", "fraction": "total"}, {"name": "bromoform", "tex": "Bromoform", "units": "ug/L", "unicode": "Bromoform", "fraction": "total"}, {"name": "bromomethane", "tex": "Bromomethane", "units": "ug/L", "unicode": "Bromomethane", "fraction": "total"}, {"name": "butyl benzyl phthalate", "tex": "Butyl Benzyl Phthalate", "units": "ug/L", "unicode": "Butyl Benzyl Phthalate", "fraction": "total"}, {"name": "cbod", "tex": "Chemical-Biological Oxygen Demand", "units": "mg/L", "unicode": "Chemical-Biological Oxygen Demand", "fraction": "total"}, {"name": "cfc-11", "tex": "CFC-11", "units": "ug/L", "unicode": "CFC-11", "fraction": "total"}, {"name": "cfc-12", "tex": "CFC-12", "units": "ug/L", "unicode": "CFC-12", "fraction": "total"}, {"name": "cadmium, dissolved", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "dissolved"}, {"name": "cadmium, suspended", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "suspended"}, {"name": "cadmium, total", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "total"}, {"name": "dissolved cadmium", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "dissolved"}, {"name": "suspended cadmium", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "suspended"}, {"name": "total cadmium", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "total"}, {"name": "calcium as caco3, total", "tex": "Total Calcium as CaCO$_{3}$", "units": "mg/L", "unicode": "Calcium as CaCO\u2083", "fraction": "total"}, {"name": "calcium, dissolved", "tex": "Dissolved Calcium", "units": "mg/L", "unicode": "Calcium", "fraction": "dissolved"}, {"name": "calcium, total", "tex": "Total Calcium", "units": "mg/L", "unicode": "Calcium", "fraction": "total"}, {"name": "carbofuran", "tex": "Carbofuran", "units": "ug/L", "unicode": "Carbofuran", "fraction": "total"}, {"name": "carbon disulfide", "tex": "Carbon Disulfide", "units": "ug/L", "unicode": "Carbon Disulfide", "fraction": "total"}, {"name": "carbon fraction, particulate organic material", "tex": "Carbon Fraction, Particulate Organic Material", "units": "mg/L", "unicode": "Carbon, Organic", "fraction": "particulate"}, {"name": "carbon tetrachloride", "tex": "Carbon Tetrachloride", "units": "ug/L", "unicode": "Carbon Tetrachloride", "fraction": "total"}, {"name": "chemical oxygen demand", "tex": "Chemical Oxygen Demand", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, high level", "tex": "Chemical Oxygen Demand (high level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, low level", "tex": "Chemical Oxygen Demand (low level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, low level, filtered", "tex": "Chemical Oxygen Demand (low level, filtered)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "dissolved"}, {"name": "chemical oxygen demand, soluble", "tex": "Chemical Oxygen Demand (soluble)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "dissolved"}, {"name": "chlordane", "tex": "Chlordane", "units": "ug/L", "unicode": "Chlordane", "fraction": "total"}, {"name": "chloride, dissolved", "tex": "Dissolved Chloride", "units": "mg/L", "unicode": "Chloride", "fraction": "dissolved"}, {"name": "chloride, total", "tex": "Total Chloride", "units": "mg/L", "unicode": "Chloride", "fraction": "total"}, {"name": "chlorobenzene", "tex": "Chlorobenzene", "units": "ug/L", "unicode": "Chlorobenzene", "fraction": "total"}, {"name": "chlorodibromomethane", "tex": "Chlorodibromomethane", "units": "ug/L", "unicode": "Chlorodibromomethane", "fraction": "total"}, {"name": "chloroethane", "tex": "Chloroethane", "units": "ug/L", "unicode": "Chloroethane", "fraction": "total"}, {"name": "chloroform", "tex": "Chloroform", "units": "ug/L", "unicode": "Chloroform", "fraction": "total"}, {"name": "chloromethane", "tex": "Chloromethane", "units": "ug/L", "unicode": "Chloromethane", "fraction": "total"}, {"name": "chlorotoluene", "tex": "Chlorotoluene", "units": "ug/L", "unicode": "Chlorotoluene", "fraction": "total"}, {"name": "chlorpyrifos", "tex": "Chlorpyrifos", "units": "ug/L", "unicode": "Chlorpyrifos", "fraction": "total"}, {"name": "chromium(vi), dissolved", "tex": "Dissolved Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", "fraction": "dissolved"}, {"name": "chromium(vi), total", "tex": "Total Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", "fraction": "total"}, {"name": "chromium, dissolved", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "dissolved"}, {"name": "chromium, suspended", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "suspended"}, {"name": "chromium, total", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "total"}, {"name": "dissolved chromium", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "dissolved"}, {"name": "suspended chromium", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "suspended"}, {"name": "total chromium", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "total"}, {"name": "chrysene", "tex": "Chrysene", "units": "ug/L", "unicode": "Chrysene", "fraction": "total"}, {"name": "chrysene, suspended", "tex": "Suspended Chrysene", "units": "ug/L", "unicode": "Chrysene", "fraction": "suspended"}, {"name": "cobalt, total", "tex": "Total Cobalt", "units": "ug/L", "unicode": "Cobalt", "fraction": "total"}, {"name": "copper, dissolved", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", "fraction": "dissolved"}, {"name": "copper, suspended", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", "fraction": "suspended"}, {"name": "copper, total", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", "fraction": "total"}, {"name": "dissolved copper", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", "fraction": "dissolved"}, {"name": "suspended copper", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", "fraction": "suspended"}, {"name": "total copper", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", "fraction": "total"}, {"name": "cumene", "tex": "Cumene", "units": "ug/L", "unicode": "Cumene", "fraction": "total"}, {"name": "cyanazine", "tex": "Cyanazine", "units": "ug/L", "unicode": "Cyanazine", "fraction": "total"}, {"name": "cyanide", "tex": "Cyanide", "units": "mg/L", "unicode": "Cyanide", "fraction": "total"}, {"name": "daconil", "tex": "DACONIL", "units": "ug/L", "unicode": "DACONIL", "fraction": "total"}, {"name": "di(2-ethylhexyl) phthalate", "tex": "Di(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Di(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "di-n-octyl phthalate", "tex": "Di-n-octyl Phthalate", "units": "ug/L", "unicode": "Di-n-octyl Phthalate", "fraction": "total"}, {"name": "diazinon", "tex": "Diazinon", "units": "ug/L", "unicode": "Diazinon", "fraction": "total"}, {"name": "dibenz[a,h]anthracene", "tex": "Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", "fraction": "total"}, {"name": "dibenz[a,h]anthracene, dissolved", "tex": "Dissolved Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", "fraction": "dissolved"}, {"name": "dibenzofuran", "tex": "Dibenzofuran", "units": "ug/L", "unicode": "Dibenzofuran", "fraction": "total"}, {"name": "dibromomethane", "tex": "Dibromomethane", "units": "ug/L", "unicode": "Dibromomethane", "fraction": "total"}, {"name": "dibromodichloromethane", "tex": "Dibromodichloromethane", "units": "ug/L", "unicode": "Dibromodichloromethane", "fraction": "total"}, {"name": "dibutyl phthalate", "tex": "Dibutyl Phthalate", "units": "ug/L", "unicode": "Dibutyl Phthalate", "fraction": "total"}, {"name": "dichlorobromomethane", "tex": "Dichlorobromomethane", "units": "ug/L", "unicode": "Dichlorobromomethane", "fraction": "total"}, {"name": "dichlorodifluoromethane", "tex": "Dichlorodifluoromethane", "units": "ug/L", "unicode": "Dichlorodifluoromethane", "fraction": "total"}, {"name": "dichlorophenol", "tex": "Dichlorophenol", "units": "ug/L", "unicode": "Dichlorophenol", "fraction": "total"}, {"name": "dinitrophenol", "tex": "Dinitrophenol", "units": "ug/L", "unicode": "Dinitrophenol", "fraction": "total"}, {"name": "dieldrin", "tex": "Dieldrin", "units": "ug/L", "unicode": "Dieldrin", "fraction": "total"}, {"name": "diethyl phthalate", "tex": "Diethyl Phthalate", "units": "ug/L", "unicode": "Diethyl Phthalate", "fraction": "total"}, {"name": "dimethyl phthalate", "tex": "Dimethyl Phthalate", "units": "ug/L", "unicode": "Dimethyl Phthalate", "fraction": "total"}, {"name": "dimethylnaphthalene", "tex": "Dimethylnaphthalene", "units": "ug/L", "unicode": "Dimethylnaphthalene", "fraction": "total"}, {"name": "dissolved oxygen (do)", "tex": "Dissolved Oxygen (DO)", "units": "mg/L", "unicode": "Dissolved Oxygen (DO)", "fraction": "dissolved"}, {"name": "dro", "tex": "DRO", "units": "ug/L", "unicode": "DRO", "fraction": "total"}, {"name": "endosulfan i", "tex": "Endosulfan I", "units": "ug/L", "unicode": "Endosulfan I", "fraction": "total"}, {"name": "endosulfan i (alpha)", "tex": "Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", "fraction": "total"}, {"name": ".alpha.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", "fraction": "dissolved"}, {"name": "endosulfan ii", "tex": "Endosulfan II", "units": "ug/L", "unicode": "Endosulfan II", "fraction": "total"}, {"name": "endosulfan ii (beta)", "tex": "Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", "fraction": "total"}, {"name": ".beta.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", "fraction": "dissolved"}, {"name": "endosulfan sulfate", "tex": "Endosulfan sulfate", "units": "ug/L", "unicode": "Endosulfan sulfate", "fraction": "total"}, {"name": "endrin", "tex": "Endrin", "units": "ug/L", "unicode": "Endrin", "fraction": "total"}, {"name": "endrin aldehyde", "tex": "Endrin Aldehyde", "units": "ug/L", "unicode": "Endrin Aldehyde", "fraction": "total"}, {"name": "endrin ketone", "tex": "Endrin Ketone", "units": "ug/L", "unicode": "Endrin Ketone", "fraction": "total"}, {"name": "enterococcus", "tex": "Enterococcus", "units": "MPN/100 mL", "unicode": "Enterococcus", "fraction": "total"}, {"name": "escherichia coli", "tex": "Escherichia coli", "units": "MPN/100 mL", "unicode": "Escherichia coli", "fraction": "total"}, {"name": "ethyl methacrylate", "tex": "Ethyl Methacrylate", "units": "ug/L", "unicode": "Ethyl Methacrylate", "fraction": "total"}, {"name": "ethylbenzene", "tex": "Ethylbenzene", "units": "ug/L", "unicode": "Ethylbenzene", "fraction": "total"}, {"name": "ethylene dibromide", "tex": "Ethylene Dibromide", "units": "ug/L", "unicode": "Ethylene Dibromide", "fraction": "total"}, {"name": "fecal coliform", "tex": "Fecal Coliform", "units": "MPN/100 mL", "unicode": "Fecal Coliform", "fraction": "total"}, {"name": "fecal streptococcus group bacteria", "tex": "Fecal Streptococcus Group Bacteria", "units": "MPN/100 mL", "unicode": "Fecal Streptococcus Group Bacteria", "fraction": "total"}, {"name": "fluoranthene", "tex": "Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", "fraction": "total"}, {"name": "fluoranthene, suspended", "tex": "Suspended Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", "fraction": "suspended"}, {"name": "fluorene", "tex": "Fluorene", "units": "ug/L", "unicode": "Fluorene", "fraction": "total"}, {"name": "fluorene, suspended", "tex": "Suspended Fluorene", "units": "ug/L", "unicode": "Fluorene", "fraction": "suspended"}, {"name": "fluoride, dissolved", "tex": "Dissolved Fluoride", "units": "mg/L", "unicode": "Fluoride", "fraction": "dissolved"}, {"name": "fluoride, total", "tex": "Total Fluoride", "units": "mg/L", "unicode": "Fluoride", "fraction": "total"}, {"name": "glyphosate", "tex": "Glyphosate", "units": "ug/L", "unicode": "Glyphosate", "fraction": "total"}, {"name": "halon 1011", "tex": "Halon 1011", "units": "ug/L", "unicode": "Halon 1011", "fraction": "total"}, {"name": "hardness", "tex": "Hardness", "units": "mg/L", "unicode": "Hardness", "fraction": "total"}, {"name": "hardness, non-carbonate", "tex": "Hardness, non-carbonate", "units": "mg/L", "unicode": "Hardness, non-carbonate", "fraction": "total"}, {"name": "heptachlor", "tex": "Heptachlor", "units": "ug/L", "unicode": "Heptachlor", "fraction": "total"}, {"name": "heptachlor epoxide", "tex": "Heptachlor Epoxide", "units": "ug/L", "unicode": "Heptachlor Epoxide", "fraction": "total"}, {"name": "hexachlorobenzene", "tex": "Hexachlorobenzene", "units": "ug/L", "unicode": "Hexachlorobenzene", "fraction": "total"}, {"name": "hexachlorobutadiene", "tex": "Hexachlorobutadiene", "units": "ug/L", "unicode": "Hexachlorobutadiene", "fraction": "total"}, {"name": "hexachlorocyclopentadiene", "tex": "Hexachlorocyclopentadiene", "units": "ug/L", "unicode": "Hexachlorocyclopentadiene", "fraction": "total"}, {"name": "hexachloroethane", "tex": "Hexachloroethane", "units": "ug/L", "unicode": "Hexachloroethane", "fraction": "total"}, {"name": "hydrocarbons, total petroleum (tph)", "tex": "Hydrocarbons, Total Petroleum (TPH)", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", "fraction": "total"}, {"name": "total petroleum hydrocarbons", "tex": "Total Petroleum Hydrocarbons", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", "fraction": "total"}, {"name": "total petroleum hydrocarbons - diesel range", "tex": "Total Petroleum Hydrocarbons - Diesel range", "units": "ug/L", "unicode": "Organics, Diesel Range", "fraction": "total"}, {"name": "hydrocarbons, total petroleum, diesel range organics", "tex": "Hydrocarbons, Total Petroleum, diesel range Organics", "units": "ug/L", "unicode": "Organics, Diesel Range", "fraction": "total"}, {"name": "hydrocarbons, total petroleum, gasoline range organics", "tex": "Hydrocarbons, Total Petroleum, gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", "fraction": "total"}, {"name": "indeno[1,2,3-cd]pyrene", "tex": "Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", "fraction": "total"}, {"name": "indeno[1,2,3-cd]pyrene, suspended", "tex": "Suspended Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", "fraction": "suspended"}, {"name": "inorganic carbon, total", "tex": "Total Inorganic Carbon", "units": "mg/L", "unicode": "Carbon, Inorganic", "fraction": "total"}, {"name": "iodomethane", "tex": "Iodomethane", "units": "ug/L", "unicode": "Iodomethane", "fraction": "total"}, {"name": "iron, dissolved", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", "fraction": "dissolved"}, {"name": "iron, total", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", "fraction": "total"}, {"name": "dissolved iron", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", "fraction": "dissolved"}, {"name": "total iron", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", "fraction": "total"}, {"name": "isophorone", "tex": "Isophorone", "units": "ug/L", "unicode": "Isophorone", "fraction": "total"}, {"name": "isopropylbenzene", "tex": "Isopropylbenzene", "units": "ug/L", "unicode": "Isopropylbenzene", "fraction": "total"}, {"name": "kjeldahl nitrogen (tkn)", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "total"}, {"name": "total kjeldahl nitrogen", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "total"}, {"name": "kjeldahl nitrogen, dissolved", "tex": "Dissolved Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "dissolved"}, {"name": "kjeldahl nitrogen, suspended", "tex": "Suspended Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "suspended"}, {"name": "lead, dissolved", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", "fraction": "dissolved"}, {"name": "lead, suspended", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", "fraction": "suspended"}, {"name": "lead, total", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", "fraction": "total"}, {"name": "dissolved lead", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", "fraction": "dissolved"}, {"name": "suspended lead", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", "fraction": "suspended"}, {"name": "total lead", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", "fraction": "total"}, {"name": "lindane", "tex": "Lindane", "units": "ug/L", "unicode": "Lindane", "fraction": "total"}, {"name": "lithium, dissolved", "tex": "Dissolved Lithium", "units": "ug/L", "unicode": "Lithium", "fraction": "dissolved"}, {"name": "magnesium, dissolved", "tex": "Dissolved Magnesium", "units": "ug/L", "unicode": "Magnesium", "fraction": "dissolved"}, {"name": "magnesium, total", "tex": "Total Magnesium", "units": "ug/L", "unicode": "Magnesium", "fraction": "total"}, {"name": "malathion", "tex": "Malathion", "units": "ug/L", "unicode": "Malathion", "fraction": "total"}, {"name": "manganese, dissolved", "tex": "Dissolved Manganese", "units": "ug/L", "unicode": "Manganese", "fraction": "dissolved"}, {"name": "manganese, total", "tex": "Total Manganese", "units": "ug/L", "unicode": "Manganese", "fraction": "total"}, {"name": "mercury, dissolved", "tex": "Dissolved Mercury", "units": "ug/L", "unicode": "Mercury", "fraction": "dissolved"}, {"name": "mercury, total", "tex": "Total Mercury", "units": "ug/L", "unicode": "Mercury", "fraction": "total"}, {"name": "methoxychlor", "tex": "Methoxychlor", "units": "ug/L", "unicode": "Methoxychlor", "fraction": "total"}, {"name": "methyl mercury", "tex": "Methyl Mercury", "units": "ug/L", "unicode": "Methyl Mercury", "fraction": "total"}, {"name": "methyl bromide", "tex": "Methyl bromide", "units": "ug/L", "unicode": "Methyl bromide", "fraction": "total"}, {"name": "methyl ethyl ketone", "tex": "Methyl Ethyl Ketone", "units": "ug/L", "unicode": "Methyl Ethyl Ketone", "fraction": "total"}, {"name": "methyl isobutyl ketone", "tex": "Methyl Isobutyl Ketone", "units": "ug/L", "unicode": "Methyl Isobutyl Ketone", "fraction": "total"}, {"name": "methyl tert-butyl ether", "tex": "Methyl Tertiary Butyl Ether", "units": "ug/L", "unicode": "Methyl Tertiary Butyl Ether", "fraction": "total"}, {"name": "methylene blue active substances (mbas)", "tex": "Methylene Blue Active Substances (MBAS)", "units": "ug/L", "unicode": "Methylene Blue Active Substances", "fraction": "total"}, {"name": "methylene chloride", "tex": "Methylene Chloride", "units": "ug/L", "unicode": "Methylene Chloride", "fraction": "total"}, {"name": "methylnaphthalene", "tex": "Methylnaphthalene", "units": "ug/L", "unicode": "Methylnaphthalene", "fraction": "total"}, {"name": "molybdenum, total", "tex": "Total Molybdenum", "units": "ug/L", "unicode": "Molybdenum", "fraction": "total"}, {"name": "n-nitrosodi-n-propylamine", "tex": "N-Nitrosodi-n-Propylamine", "units": "ug/L", "unicode": "N-Nitrosodi-n-Propylamine", "fraction": "total"}, {"name": "n-nitrosodimethylamine", "tex": "N-Nitrosodimethylamine", "units": "ug/L", "unicode": "N-Nitrosodimethylamine", "fraction": "total"}, {"name": "n-nitrosodiphenylamine", "tex": "N-Nitrosodiphenylamine", "units": "ug/L", "unicode": "N-Nitrosodiphenylamine", "fraction": "total"}, {"name": "naphthalene", "tex": "Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "total"}, {"name": "naphthalene, dissolved", "tex": "Dissolved Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "dissolved"}, {"name": "naphthalene, suspended", "tex": "Suspended Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "suspended"}, {"name": "nickel, dissolved", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "dissolved"}, {"name": "nickel, total", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "total"}, {"name": "dissolved nickel", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "dissolved"}, {"name": "total nickel", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "total"}, {"name": "nitrobenzene", "tex": "Nitrobenzene", "units": "ug/L", "unicode": "Nitrobenzene", "fraction": "total"}, {"name": "nitrogen, nitrate (no3) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no2) + nitrate (no3) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) + Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no$_{2}$) + nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) + Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no2) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no$_{2}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) as N", "fraction": "total"}, {"name": "nitrogen, nox as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, no$_{x}$ as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, no\u2093 as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, total", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", "fraction": "total"}, {"name": "total nitrogen", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", "fraction": "total"}, {"name": "nitrogen, ammonia as n", "tex": "Nitrogen, Ammonia as N", "units": "mg/L", "unicode": "Nitrogen, Ammonia as N", "fraction": "total"}, {"name": "nitrogen, ammonium (nh4) as n", "tex": "Nitrogen, Ammonium (NH4) as N", "units": "mg/L", "unicode": "Nitrogen, Ammonium (NH\u2084) as N", "fraction": "total"}, {"name": "nitrogen, ammonium (nh4) as nh4", "tex": "Nitrogen, Ammonium (NH$_{4}$) as NH$_{4}$", "units": "mg/L", "unicode": "Ammonium (NH\u2084) as NH\u2084", "fraction": "total"}, {"name": "nitrogen, unionized ammonia (nh3) as n", "tex": "Nitrogen, Unionized Ammonia (NH$_{3}$) as N", "units": "mg/L", "unicode": "Unionized Ammonia (NH\u2083) as N", "fraction": "total"}, {"name": "nitrogen, ammonia (nh3) as nh3", "tex": "Nitrogen, Ammonia (NH$_{3}$) as NH3", "units": "mg/L", "unicode": "Nitrogen, Ammonia (NH\u2083) as NH\u2083", "fraction": "total"}, {"name": "oil range organics", "tex": "Oil Range Organics", "units": "ug/L", "unicode": "Organics, Oil Range", "fraction": "total"}, {"name": "oil and grease", "tex": "Oil and Grease", "units": "mg/L", "unicode": "Oil and Grease", "fraction": "total"}, {"name": "organic nitrogen, dissolved", "tex": "Dissolved Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", "fraction": "dissolved"}, {"name": "nitrogen, dissolved inorganic", "tex": "Nitrogen, Dissolved Inorganic", "units": "mg/L", "unicode": "Nitrogen, Inorganic", "fraction": "dissolved"}, {"name": "organic nitrogen, total", "tex": "Total Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", "fraction": "total"}, {"name": "organic carbon, dissolved", "tex": "Dissolved Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic", "fraction": "dissolved"}, {"name": "organic carbon, total", "tex": "Total Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic ", "fraction": "total"}, {"name": "oro", "tex": "ORO", "units": "ug/L", "unicode": "ORO", "fraction": "total"}, {"name": "oxidation reduction potential (orp)", "tex": "Oxidation Reduction Potential (ORP)", "units": "mV", "unicode": "Oxidation Reduction Potential (ORP)", "fraction": "total"}, {"name": "p-isopropyltoluene", "tex": "p-Isopropyltoluene", "units": "ug/L", "unicode": "p-Isopropyltoluene", "fraction": "total"}, {"name": "p,p'-dde", "tex": "p,p'-DDE", "units": "ug/L", "unicode": "p,p'-DDE", "fraction": "total"}, {"name": "pbp", "tex": "PBP", "units": "ug/L", "unicode": "PBP", "fraction": "total"}, {"name": "pentachlorophenol", "tex": "Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", "fraction": "total"}, {"name": "pentachlorophenol, dissolved", "tex": "Dissolved Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", "fraction": "dissolved"}, {"name": "phenanthrene", "tex": "Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "total"}, {"name": "phenanthrene, dissolved", "tex": "Dissolved Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "dissolved"}, {"name": "phenanthrene, suspended", "tex": "Suspended Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "suspended"}, {"name": "phenol", "tex": "Phenol", "units": "ug/L", "unicode": "Phenol", "fraction": "total"}, {"name": "phenols", "tex": "Phenols", "units": "ug/L", "unicode": "Phenols", "fraction": "total"}, {"name": "phosphate-phosphorus", "tex": "Phosphate-Phosphorus", "units": "mg/L", "unicode": "Phosphate-Phosphorus", "fraction": "total"}, {"name": "phosphorus as p, dissolved", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "dissolved"}, {"name": "dissolved phosphorus as p", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "dissolved"}, {"name": "phosphorus as p, suspended", "tex": "Suspended Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "suspended"}, {"name": "phosphorus as p, total", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "total"}, {"name": "total phosphorus as p", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "total"}, {"name": "phosphorus as po4, total", "tex": "Total Phosphorus as PO4", "units": "mg/L", "unicode": "Phosphorus as PO\u2084", "fraction": "total"}, {"name": "phosphorus, particulate organic", "tex": "Phosphorus, Particulate Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "particulate"}, {"name": "phosphorus, particulate", "tex": "Phosphorus, Particulate", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "particulate"}, {"name": "phosphorus, organic", "tex": "Phosphorus, Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "total"}, {"name": "phosphorus, soluble reactive (srp)", "tex": "Phosphorus, Soluble Reactive (SRP)", "units": "mg/L", "unicode": "Phosphorus, Soluble Reactive (SRP)", "fraction": "total"}, {"name": "phosphorus, organic as p, dissolved", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "dissolved"}, {"name": "dissolved phosphorus, organic as p", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "dissolved"}, {"name": "phosphorus, orthophosphate as p", "tex": "Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "total"}, {"name": "phosphorus, orthophosphate as p, dissolved", "tex": "Dissolved Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "dissolved"}, {"name": "phosphorus, orthophosphate as p, suspended", "tex": "Suspended Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "suspended"}, {"name": "phosphorus, orthophosphate as po4", "tex": "Phosphorus, Orthophosphate as PO$_{4}$", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as PO\u2084", "fraction": "total"}, {"name": "polycyclic aromatic hydrocarbons", "tex": "Polycyclic Aromatic Hydrocarbons", "units": "ug/L", "unicode": "Polycyclic Aromatic Hydrocarbons", "fraction": "total"}, {"name": "potassium, dissolved", "tex": "Dissolved Potassium", "units": "mg/L", "unicode": "Potassium", "fraction": "dissolved"}, {"name": "potassium, total", "tex": "Total Potassium", "units": "mg/L", "unicode": "Potassium", "fraction": "total"}, {"name": "prometryn", "tex": "Prometryn", "units": "ug/L", "unicode": "Prometryn", "fraction": "total"}, {"name": "pyrene", "tex": "Pyrene", "units": "ug/L", "unicode": "Pyrene", "fraction": "total"}, {"name": "pyrene, suspended", "tex": "Suspended Pyrene", "units": "ug/L", "unicode": "Pyrene", "fraction": "suspended"}, {"name": "relative toxicity (i 25% reduction)", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", "fraction": "total"}, {"name": "relative toxicity (i 25% reduction), filtered", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION, filtered)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", "fraction": "suspended"}, {"name": "ssc-total coarse fraction (>63um)", "tex": "SSC-Total Coarse Fraction ($>63$ \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Coarse Fraction (>63 \u00b5m)", "fraction": "total"}, {"name": "ssc-total fine fraction (<63um)", "tex": "SSC-Total Fine Fraction (<63 \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Fine Fraction (<63 \u00b5m)", "fraction": "total"}, {"name": "ssc-total particulate solids", "tex": "SSC-Total Particulate Solids", "units": "mg/L", "unicode": "SSC-Total Particulate Solids", "fraction": "total"}, {"name": "ssc <2000 microns", "tex": "SSC $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <2000 \u00b5m", "fraction": "total"}, {"name": "ssc <1000 microns", "tex": "SSC $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <1000 \u00b5m", "fraction": "total"}, {"name": "ssc <500 microns", "tex": "SSC $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <500 \u00b5m", "fraction": "total"}, {"name": "ssc <250 microns", "tex": "SSC $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <250 \u00b5m", "fraction": "total"}, {"name": "ssc <100 microns", "tex": "SSC $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <100 \u00b5m", "fraction": "total"}, {"name": "ssc <62.5 microns", "tex": "SSC $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <62.5 \u00b5m", "fraction": "total"}, {"name": "ssc <50 microns", "tex": "SSC $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <50 \u00b5m", "fraction": "total"}, {"name": "ssc <25 microns", "tex": "SSC $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <25 \u00b5m", "fraction": "total"}, {"name": "tvss <2000 microns", "tex": "TVSS $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <2000 \u00b5m", "fraction": "total"}, {"name": "tvss <1000 microns", "tex": "TVSS $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <1000 \u00b5m", "fraction": "total"}, {"name": "tvss <500 microns", "tex": "TVSS $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <500 \u00b5m", "fraction": "total"}, {"name": "tvss <250 microns", "tex": "TVSS $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <250 \u00b5m", "fraction": "total"}, {"name": "tvss <100 microns", "tex": "TVSS $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <100 \u00b5m", "fraction": "total"}, {"name": "tvss <62.5 microns", "tex": "TVSS $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <62.5 \u00b5m", "fraction": "total"}, {"name": "tvss <50 microns", "tex": "TVSS $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <50 \u00b5m", "fraction": "total"}, {"name": "tvss <25 microns", "tex": "TVSS $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <25 \u00b5m", "fraction": "total"}, {"name": "sand", "tex": "Sand", "units": "mg/L", "unicode": "Sand", "fraction": "total"}, {"name": "sec-butylbenzene", "tex": "Sec-Butylbenzene", "units": "ug/L", "unicode": "Sec-Butylbenzene", "fraction": "total"}, {"name": "selenium, dissolved", "tex": "Dissolved Selenium", "units": "ug/L", "unicode": "Selenium", "fraction": "dissolved"}, {"name": "selenium, total", "tex": "Total Selenium", "units": "ug/L", "unicode": "Selenium", "fraction": "total"}, {"name": "settleable solids", "tex": "Settleable Solids", "units": "mg/L", "unicode": "Settleable Solids", "fraction": "total"}, {"name": "silt", "tex": "Silt", "units": "mg/L", "unicode": "Silt", "fraction": "total"}, {"name": "silver, dissolved", "tex": "Dissolved Silver", "units": "ug/L", "unicode": "Silver", "fraction": "dissolved"}, {"name": "silver, total", "tex": "Total Silver", "units": "ug/L", "unicode": "Silver", "fraction": "total"}, {"name": "simazine", "tex": "Simazine", "units": "ug/L", "unicode": "Simazine", "fraction": "total"}, {"name": "sodium, dissolved", "tex": "Dissolved Sodium", "units": "mg/L", "unicode": "Sodium", "fraction": "dissolved"}, {"name": "sodium, total", "tex": "Total Sodium", "units": "mg/L", "unicode": "Sodium", "fraction": "total"}, {"name": "specific conductance", "tex": "Specific Conductance", "units": "umhos/cm", "unicode": "Specific Conductance", "fraction": "total"}, {"name": "styrene", "tex": "Styrene", "units": "ug/L", "unicode": "Styrene", "fraction": "total"}, {"name": "sulfate, dissolved", "tex": "Dissolved Sulfate", "units": "mg/L", "unicode": "Sulfate", "fraction": "dissolved"}, {"name": "sulfate, total", "tex": "Total Sulfate", "units": "mg/L", "unicode": "Sulfate", "fraction": "total"}, {"name": "sulfide, total", "tex": "Total Sulfide", "units": "mg/L", "unicode": "Sulfide", "fraction": "total"}, {"name": "surfactants", "tex": "Surfactants", "units": "ug/L", "unicode": "Surfactants", "fraction": "total"}, {"name": "suspended sediment concentration (ssc)", "tex": "Suspended Sediment Concentration", "units": "mg/L", "unicode": "Suspended Sediment Concentration", "fraction": "total"}, {"name": "temperature, water", "tex": "Temperature, water", "units": "deg C", "unicode": "Temperature, Water", "fraction": "total"}, {"name": "tetrachloroethane", "tex": "Tetrachloroethane", "units": "ug/L", "unicode": "Tetrachloroethane", "fraction": "total"}, {"name": "tetrachloroethylene", "tex": "Tetrachloroethylene", "units": "ug/L", "unicode": "Tetrachloroethylene", "fraction": "total"}, {"name": "thallium, dissolved", "tex": "Dissolved Thallium", "units": "ug/L", "unicode": "Thallium", "fraction": "dissolved"}, {"name": "thallium, total", "tex": "Total Thallium", "units": "ug/L", "unicode": "Thallium", "fraction": "total"}, {"name": "toluene", "tex": "Toluene", "units": "ug/L", "unicode": "Toluene", "fraction": "total"}, {"name": "total coliform", "tex": "Total Coliform", "units": "MPN/100 mL", "unicode": "Total Coliform", "fraction": "total"}, {"name": "total dissolved solids", "tex": "Total Dissolved Solids", "units": "mg/L", "unicode": "Total Dissolved Solids", "fraction": "total"}, {"name": "total solids", "tex": "Total Solids", "units": "mg/L", "unicode": "Total Solids", "fraction": "total"}, {"name": "total suspended solids", "tex": "Total Suspended Solids", "units": "mg/L", "unicode": "Total Suspended Solids", "fraction": "total"}, {"name": "total volatile solids", "tex": "Total Volatile Solids", "units": "mg/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "total volatile solids, filterable", "tex": "Total Volatile Solids (filterable)", "units": "mg/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "toxaphene", "tex": "Toxaphene", "units": "ug/L", "unicode": "Toxaphene", "fraction": "total"}, {"name": "tribromomethane", "tex": "Tribromomethane", "units": "ug/L", "unicode": "Tribromomethane", "fraction": "total"}, {"name": "trichloroethane", "tex": "Trichloroethane", "units": "ug/L", "unicode": "Trichloroethane", "fraction": "total"}, {"name": "trichloroethylene", "tex": "Trichloroethylene", "units": "ug/L", "unicode": "Trichloroethylene", "fraction": "total"}, {"name": "trichlorofuoromethane", "tex": "Trichlorofuoromethane", "units": "ug/L", "unicode": "Trichlorofuoromethane", "fraction": "total"}, {"name": "trichlorotrifluoroethane", "tex": "Trichlorotrifluoroethane", "units": "ug/L", "unicode": "Trichlorotrifluoroethane", "fraction": "total"}, {"name": "trihalomethanes", "tex": "Trihalomethanes", "units": "ug/L", "unicode": "Trihalomethanes", "fraction": "total"}, {"name": "true color", "tex": "True Color", "units": "ADMI Value", "unicode": "True Color", "fraction": "total"}, {"name": "true color, filtered", "tex": "Filtered True Color", "units": "ADMI Value", "unicode": "Filtered True Color", "fraction": "total"}, {"name": "turbidity", "tex": "Turbidity", "units": "NT", "unicode": "Turbidity", "fraction": "total"}, {"name": "turbidity, filtered", "tex": "Filtered Turbidity", "units": "NT", "unicode": "Filtered Turbidity", "fraction": "total"}, {"name": "vanadium, total", "tex": "Total Vanadium", "units": "ug/L", "unicode": "Vanadium", "fraction": "total"}, {"name": "vinyl acetate", "tex": "Vinyl Acetate", "units": "ug/L", "unicode": "Vinyl Acetate", "fraction": "total"}, {"name": "vinyl chloride", "tex": "Vinyl Chloride", "units": "ug/L", "unicode": "Vinyl Chloride", "fraction": "total"}, {"name": "xylenes, total", "tex": "Total Xylenes", "units": "ug/L", "unicode": "Total Xylenes", "fraction": "total"}, {"name": "zinc, dissolved", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "dissolved"}, {"name": "zinc, suspended", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "suspended"}, {"name": "zinc, total", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "total"}, {"name": "dissolved zinc", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "dissolved"}, {"name": "suspended zinc", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "suspended"}, {"name": "total zinc", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "total"}, {"name": "alpha-chlordane", "tex": "alpha-chlordane", "units": "ug/L", "unicode": "alpha-chlordane", "fraction": "total"}, {"name": "cis-1,2-dichloroethylene", "tex": "cis-1,2-Dichloroethylene", "units": "ug/L", "unicode": "cis-1,2-Dichloroethylene", "fraction": "total"}, {"name": "cis-1,3-dichloropropene", "tex": "cis-1,3-Dichloropropene", "units": "ug/L", "unicode": "cis-1,3-Dichloropropene", "fraction": "total"}, {"name": "di-n-butyl phthalate", "tex": "di-n-Butyl Phthalate", "units": "ug/L", "unicode": "di-n-Butyl Phthalate", "fraction": "total"}, {"name": "gamma-chlordane", "tex": "Gamma-Chlordane", "units": "ug/L", "unicode": "Gamma-Chlordane", "fraction": "total"}, {"name": "m-dichlorobenzene", "tex": "m-Dichlorobenzene", "units": "ug/L", "unicode": "m-Dichlorobenzene", "fraction": "total"}, {"name": "m-nitroaniline", "tex": "m-Nitroaniline", "units": "ug/L", "unicode": "m-Nitroaniline", "fraction": "total"}, {"name": "m-xylene", "tex": "m-Xylene", "units": "ug/L", "unicode": "m-Xylene", "fraction": "total"}, {"name": "n-butylbenzene", "tex": "n-Butylbenzene", "units": "ug/L", "unicode": "n-Butylbenzene", "fraction": "total"}, {"name": "n-propylbenzene", "tex": "n-Propylbenzene", "units": "ug/L", "unicode": "n-Propylbenzene", "fraction": "total"}, {"name": "o-chlorotoluene", "tex": "o-Chlorotoluene", "units": "ug/L", "unicode": "o-Chlorotoluene", "fraction": "total"}, {"name": "o-dichlorobenzene", "tex": "o-Dichlorobenzene", "units": "ug/L", "unicode": "o-Dichlorobenzene", "fraction": "total"}, {"name": "o-xylene", "tex": "o-Xylene", "units": "ug/L", "unicode": "o-Xylene", "fraction": "total"}, {"name": "p-bromophenyl phenyl ether", "tex": "p-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Bromophenyl Phenyl Ether", "fraction": "total"}, {"name": "p-chlorophenyl phenyl ether", "tex": "p-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Chlorophenyl Phenyl Ether", "fraction": "total"}, {"name": "p-chlorotoluene", "tex": "p-Chlorotoluene", "units": "ug/L", "unicode": "p-Chlorotoluene", "fraction": "total"}, {"name": "p-cymene", "tex": "p-Cymene", "units": "ug/L", "unicode": "p-Cymene", "fraction": "total"}, {"name": "p-dichlorobenzene", "tex": "p-Dichlorobenzene", "units": "ug/L", "unicode": "p-Dichlorobenzene", "fraction": "total"}, {"name": "p-nitrophenol", "tex": "p-Nitrophenol", "units": "ug/L", "unicode": "p-Nitrophenol", "fraction": "total"}, {"name": "p-xylene", "tex": "p-Xylene", "units": "ug/L", "unicode": "p-Xylene", "fraction": "total"}, {"name": "ph", "tex": "pH", "units": "S", "unicode": "pH", "fraction": "total"}, {"name": "protons", "tex": "Protons (Hydrogen Ions)", "units": "mg/L", "unicode": "Protons (Hydrogen Ions)", "fraction": "total"}, {"name": "tert-butylbenzene", "tex": "Tertiary Butylbenzene", "units": "ug/L", "unicode": "Tertiary Butylbenzene", "fraction": "total"}, {"name": "total petroleum hydrocarbons - motor oil range", "tex": "Total Petroleum Hydrocarbons (motor oil range)", "units": "ug/L", "unicode": "Organics, Motor Oil Range", "fraction": "total"}, {"name": "trans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylene", "fraction": "total"}, {"name": "trans-1,3-dichloropropene", "tex": "trans-1,3-Dichloropropene", "units": "ug/L", "unicode": "trans-1,3-Dichloropropene", "fraction": "total"}, {"name": "trans-1,4-dichloro-2-butene", "tex": "trans-1,4-Dichloro-2-butene", "units": "ug/L", "unicode": "trans-1,4-Dichloro-2-butene", "fraction": "total"}, {"name": "dibenzo[b,k]fluoranthene", "tex": "Dibenzo[b,k]fluoranthene", "units": "ug/L", "unicode": "Dibenzo[b,k]fluoranthene", "fraction": "total"}, {"name": "dichlobenil", "tex": "Dichlobenil", "units": "ug/L", "unicode": "Dichlobenil", "fraction": "total"}, {"name": "prometon", "tex": "Prometon", "units": "ug/L", "unicode": "Prometon", "fraction": "total"}, {"name": "total volatile solids, non-filterable", "tex": "Total Volatile Solids (non-filterable)", "units": "ug/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "benzo(b/j)fluoranthene", "tex": "Benzo(b/j)fluoranthene", "units": "ug/L", "unicode": "Benzo(b/j)fluoranthene", "fraction": "total"}, {"name": "bismuth", "tex": "Bismuth", "units": "ug/L", "unicode": "Bismuth", "fraction": "total"}, {"name": "boron", "tex": "Boron", "units": "ug/L", "unicode": "Boron", "fraction": "total"}, {"name": "lithium, total", "tex": "Lithium, Total", "units": "ug/L", "unicode": "Lithium", "fraction": "total"}, {"name": "silicon", "tex": "Silicon", "units": "ug/L", "unicode": "Silicon", "fraction": "total"}, {"name": "strontium", "tex": "Strontium", "units": "ug/L", "unicode": "Strontium", "fraction": "total"}, {"name": "tellurium", "tex": "Tellurium", "units": "ug/L", "unicode": "Tellurium", "fraction": "total"}, {"name": "tin, total", "tex": "Tin, Total", "units": "ug/L", "unicode": "Tin", "fraction": "total"}, {"name": "titanium, total", "tex": "Titanium, Total", "units": "ug/L", "unicode": "Titanium", "fraction": "total"}, {"name": "tungsten", "tex": "Tungsten", "units": "ug/L", "unicode": "Tungsten", "fraction": "total"}, {"name": "uranium-234/235/238", "tex": "Uranium-234/235/238", "units": "ug/L", "unicode": "Uranium", "fraction": "total"}, {"name": "uranium", "tex": "Uranium", "units": "ug/L", "unicode": "Uranium", "fraction": "total"}, {"name": "zirconium", "tex": "Zirconium", "units": "ug/L", "unicode": "Zirconium", "fraction": "total"}, {"name": "cesium", "tex": "Cesium", "units": "ug/L", "unicode": "Cesium", "fraction": "total"}, {"name": "rubidium", "tex": "Rubidium", "units": "ug/L", "unicode": "Rubidium", "fraction": "total"}, {"name": "1,2-dibromo-3-chloropropane", "tex": "1,2-Dibromo-3-Chloropropane", "units": "ug/L", "unicode": "1,2-Dibromo-3-Chloropropane", "fraction": "total"}, {"name": "trans-1,2-dichloroethylenetrans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", "fraction": "total"}, {"name": "2,4,5-t", "tex": "2,4,5-T", "units": "ug/L", "unicode": "2,4,5-T", "fraction": "total"}, {"name": "2,4-db", "tex": "2,4-DB", "units": "ug/L", "unicode": "2,4-DB", "fraction": "total"}, {"name": "dalapon", "tex": "Dalapon", "units": "ug/L", "unicode": "Dalapon", "fraction": "total"}, {"name": "dicamba", "tex": "Dicamba", "units": "ug/L", "unicode": "Dicamba", "fraction": "total"}, {"name": "dichlorprop", "tex": "Dichlorprop", "units": "ug/L", "unicode": "Dichlorprop", "fraction": "total"}, {"name": "mcpa", "tex": "MCPA", "units": "ug/L", "unicode": "MCPA", "fraction": "total"}, {"name": "mecoprop", "tex": "Mecoprop", "units": "ug/L", "unicode": "Mecoprop", "fraction": "total"}, {"name": "sulfur", "tex": "Sulfur", "units": "ug/L", "unicode": "Sulfur", "fraction": "total"}, {"name": "m,p-xylenes", "tex": "m,p-Xylenes", "units": "ug/L", "unicode": "m,p-Xylenes", "fraction": "total"}, {"name": "silica", "tex": "Silica", "units": "ug/L", "unicode": "Silica", "fraction": "total"}, {"name": "nitrogen, dissolved", "tex": "Nitrogen, Dissolved", "units": "ug/L", "unicode": "Nitrogen", "fraction": "dissolved"}, {"name": "nitrogen, particulate", "tex": "Nitrogen, Particulate", "units": "ug/L", "unicode": "Nitrogen", "fraction": "particulate"}, {"name": "meta & para xylene mix", "tex": "meta & para Xylene mix", "units": "ug/L", "unicode": "m,p-Xylenes", "fraction": "total"}, {"name": "temperature, air", "tex": "Temperature, air", "units": "deg C", "unicode": "Temperature, Air", "fraction": "total"}, {"name": "gasoline range organics", "tex": "Gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", "fraction": "total"}, {"name": "particle size, percent > 50 microns", "tex": "Particle Size, Percent > 50 microns", "units": "ug/L", "unicode": "Particle Size, Percent >50 \u00b5m", "fraction": "total"}, {"name": "chlorophyll a, uncorrected for pheophytin", "tex": "Chlorophyll A (uncorrected for pheophytin)", "units": "ug/L", "unicode": "Chlorophyll A (uncorrected for pheophytin)", "fraction": "total"}, {"name": "1-methylphenanthrene", "tex": "1-Methylphenanthrene", "units": "ug/L", "unicode": "1-Methylphenanthrene", "fraction": "total"}, {"name": "2,6-dimethylnaphthalene", "tex": "2,6-Dimethylnaphthalene", "units": "ug/L", "unicode": "2,6-Dimethylnaphthalene", "fraction": "total"}, {"name": "benzo[e]pyrene", "tex": "Benzo[e]pyrene", "units": "ug/L", "unicode": "Benzo[e]pyrene", "fraction": "total"}, {"name": "bifenthrin by nci", "tex": "Bifenthrin by NCI", "units": "ug/L", "unicode": "Bifenthrin by NCI", "fraction": "total"}, {"name": "cobalt, dissolved", "tex": "Cobalt, Dissolved", "units": "ug/L", "unicode": "Cobalt", "fraction": "dissolved"}, {"name": "cyfluthrin by nci", "tex": "Cyfluthrin by NCI", "units": "ug/L", "unicode": "Cyfluthrin by NCI", "fraction": "total"}, {"name": "cypermethrin", "tex": "Cypermethrin", "units": "ug/L", "unicode": "Cypermethrin", "fraction": "total"}, {"name": "dibenzothiophene", "tex": "Dibenzothiophene", "units": "ug/L", "unicode": "Dibenzothiophene", "fraction": "total"}, {"name": "esfenvalerate", "tex": "Esfenvalerate", "units": "ug/L", "unicode": "Esfenvalerate", "fraction": "total"}, {"name": "fenvalerate", "tex": "Fenvalerate", "units": "ug/L", "unicode": "Fenvalerate", "fraction": "total"}, {"name": "l-cyhalothrin by nci", "tex": "L-Cyhalothrin by NCI", "units": "ug/L", "unicode": "L-Cyhalothrin by NCI", "fraction": "total"}, {"name": "molybdenum, dissolved", "tex": "Molybdenum, Dissolved", "units": "ug/L", "unicode": "Molybdenum", "fraction": "dissolved"}, {"name": "permethrin", "tex": "Permethrin", "units": "ug/L", "unicode": "Permethrin", "fraction": "total"}, {"name": "tin, dissolved", "tex": "Tin, Dissolved", "units": "ug/L", "unicode": "Tin", "fraction": "dissolved"}, {"name": "titanium, dissolved", "tex": "Titanium, Dissolved", "units": "ug/L", "unicode": "Titanium", "fraction": "dissolved"}, {"name": "vanadium, dissolved", "tex": "Vanadium, Dissolved", "units": "ug/L", "unicode": "Vanadium", "fraction": "dissolved"}, {"name": "cypermethrin by nci", "tex": "Cypermethrin by NCI", "units": "ug/L", "unicode": "Cypermethrin by NCI", "fraction": "total"}, {"name": "bicarbonate", "tex": "Bicarbonate", "units": "ug/L", "unicode": "Bicarbonate", "fraction": "total"}, {"name": "Campylobacter spp.", "tex": "Campylobacter spp.", "units": "MPN/100 mL", "unicode": "Campylobacter spp.", "fraction": "total"}, {"name": "C. dubia % survival (100% sample)", "tex": "c. dubia % survival (100% sample)", "units": "%", "unicode": "c. dubia % survival (100% sample)", "fraction": "total"}, {"name": "C. dubia reproduction, % control (100% sample)", "tex": "C. dubia reproduction, % control (100% sample)", "units": "%", "unicode": "C. dubia reproduction, % control (100% sample)", "fraction": "total"}, {"name": "d8-acenaphthylene", "tex": "D8-Acenaphthylene", "units": "ug/L", "unicode": "D8-Acenaphthylene", "fraction": "total"}, {"name": "d10-anthracene", "tex": "D10-Anthracene", "units": "ug/L", "unicode": "D10-Anthracene", "fraction": "total"}, {"name": "d14-terphenyl (fs)", "tex": "D14-Terphenyl (FS)", "units": "ug/L", "unicode": "D14-Terphenyl (FS)", "fraction": "total"}, {"name": "particle size, % <0.21 um, >0.10 um", "tex": "Particle Size, % <0.21 um, >0.10 um", "units": "mg/L", "unicode": "Particle Size, % <0.21 \u00b5m, >0.10 \u00b5m", "fraction": "total"}, {"name": "particle size, d50", "tex": "Particle Size, D50", "units": "\u03bcm", "unicode": "Particle Size, D50", "fraction": "total"}, {"name": "% sand, very coarse (1000-2000um)", "tex": "Percent sand, very coarse (1000-2000 \\si[per-mode=symbol]{\\micro\\meter})", "units": "%", "unicode": "Percent sand, very coarse (1000-2000 \u00b5m)", "fraction": "total"}, {"name": "echinoderm fertilization (50% sample)", "tex": "Echinoderm fertilization (50% sample)", "units": "NS", "unicode": "Echinoderm fertilization (50% sample)", "fraction": "total"}] \ No newline at end of file diff --git a/pybmpdb/data/units.json b/pybmpdb/data/units.json new file mode 100644 index 0000000..d843d76 --- /dev/null +++ b/pybmpdb/data/units.json @@ -0,0 +1 @@ +[{"name": "%", "factor": 1, "tex": "\\si{\\percent}", "unicode": "%"}, {"name": "NS", "factor": 1, "tex": "NS", "unicode": "NS"}, {"name": "#/100mL", "factor": 1, "tex": "\\#\\SI[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "10/ml", "factor": 100, "tex": "\\SI[per-mode=symbol]{10}{\\per\\milli\\liter}", "unicode": "10/mL"}, {"name": "MPN/100 mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "MPN/L", "factor": 0.1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "MPN/100mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "CFU/100 mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "CFU/100 mL"}, {"name": "CFU/100mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "CFU/100 mL"}, {"name": "NT", "factor": 1, "tex": "NT", "unicode": "NT"}, {"name": "PC", "factor": 1, "tex": "PC", "unicode": "PC"}, {"name": "s", "factor": 1, "tex": "", "unicode": "S"}, {"name": "ml/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\liter\\per\\liter}", "unicode": "mL/L"}, {"name": "mV", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\volt}", "unicode": "mV"}, {"name": "kg/L", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\kilo\\gram\\per\\liter}", "unicode": "kg/L"}, {"name": "g/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\gram\\per\\liter}", "unicode": "g/L"}, {"name": "mg/L", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", "unicode": "mg/L"}, {"name": "ug/L", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", "unicode": "\u03bcg/L"}, {"name": "\u00b5g/L", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", "unicode": "\u03bcg/L"}, {"name": "ng/L", "factor": 1e-09, "tex": "\\si[per-mode=symbol]{\\nano\\gram\\per\\liter}", "unicode": "ng/L"}, {"name": "\u00b0C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "deg C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "degC", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "\u00b5mhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u03bcmhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "umhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "umho/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u03bcS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u00b5S/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "uS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "mS", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\milli\\siemens}", "unicode": "mS"}, {"name": "ADMI value", "factor": 1, "tex": "ADMI Value", "unicode": "ADMI Value"}, {"name": "kg", "factor": 1, "tex": "kg", "unicode": "kg"}, {"name": "m", "factor": 1, "tex": "\\si[per-mode=symbol]{meter}", "unicode": "m"}, {"name": "mm", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\meter}", "unicode": "mm"}, {"name": "um", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", "unicode": "\u03bcm"}, {"name": "\u03bcm", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", "unicode": "\u03bcm"}, {"name": "SU", "factor": 1, "tex": "SU", "unicode": "SU"}, {"name": "NTU", "factor": 1, "tex": "NTU", "unicode": "NTU"}, {"name": "PCU", "factor": 1, "tex": "PCU", "unicode": "PCU"}] \ No newline at end of file From 4909fa1e2933b910257076fbc2494d9033ed85f4 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 6 Dec 2017 09:23:18 -0800 Subject: [PATCH 06/48] add tests for info.py --- pybmpdb/info.py | 36 ++------------------ pybmpdb/tests/test_info.py | 69 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 33 deletions(-) create mode 100644 pybmpdb/tests/test_info.py diff --git a/pybmpdb/info.py b/pybmpdb/info.py index ee867d3..61392a3 100644 --- a/pybmpdb/info.py +++ b/pybmpdb/info.py @@ -10,6 +10,7 @@ def _loader(fname): with open(resource_filename('pybmpdb.data', fname), 'r') as f: return json.load(f) + def _find_by_name(value_string, list_of_dicts, key='name'): # get the parameter's entry in the lookup list of dicts _entry = list(filter( @@ -17,12 +18,9 @@ def _find_by_name(value_string, list_of_dicts, key='name'): list_of_dicts )) - if len(_entry) > 1: - msg = 'too many ({}) entries found for {}' + if len(_entry) != 1: + msg = 'Found ({}) entries found for {}. Expected 1.' raise ValueError(msg.format(len(_entry), value_string)) - elif len(_entry) < 1: - msg = 'no entries found for {}' - raise ValueError(msg.format(value_string)) return _entry[0] @@ -78,33 +76,5 @@ def getConversion(param): return getNormalization(p['units']) -def addParameter(**kwargs): - if kwargs.get('tex') is None: - kwargs['tex'] = kwargs['name'] - - if kwargs.get('unicode') is None: - kwargs['unicode'] = kwargs['name'] - - if kwargs.get('fraction') is None: - kwargs['fraction'] = 'Total' - - parameters.append(kwargs) - return parameters - - -def addUnit(**kwargs): - if kwargs.get('tex') is None: - kwargs['tex'] = kwargs['name'] - - if kwargs.get('unicode') is None: - kwargs['unicode'] = kwargs['name'] - - if kwargs.get('factor') is None: - kwargs['factor'] = 1 - - units.append(kwargs) - return units - - parameters = _loader('parameters.json') units = _loader('units.json') \ No newline at end of file diff --git a/pybmpdb/tests/test_info.py b/pybmpdb/tests/test_info.py new file mode 100644 index 0000000..0526236 --- /dev/null +++ b/pybmpdb/tests/test_info.py @@ -0,0 +1,69 @@ +import pytest +from wqio.tests import helpers +from unittest.mock import patch + +from pybmpdb import info + + +@pytest.mark.parametrize(('filename', 'error'), [ + ('parameters.json', None), + ('units.json', None), + ('junks.json', FileNotFoundError) +]) +def test__loader_smoke(filename, error): + with helpers.raises(error): + info._loader(filename) + + +@pytest.mark.parametrize(('value', 'expected', 'error'), [ + ('ug/L', {"name": "ug/L", "factor": 1}, None), + ('mg/L', None, ValueError), + ('MPN/100 mL', None, ValueError), +]) +def test__find_by_name(value, expected, error): + source = [ + {"name": "MPN/100 mL", "factor": 1}, + {"name": "MPN/100 mL", "factor": 1}, + {"name": "ug/L", "factor": 1}, + ] + with helpers.raises(error): + result = info._find_by_name(value, source) + assert result == expected + + +@patch.object(info, 'units') +@patch.object(info, 'parameters') +@patch.object(info, '_find_by_name', return_value={'name': 'Lead', 'units': 'mg/L'}) +def test_getUnitsFromParam(_find_by_name, parameters, units): + assert info.getUnitsFromParam('Lead') == 'Lead' + _find_by_name.assert_any_call('mg/L', units) + _find_by_name.assert_any_call('Lead', parameters) + + +@patch.object(info, 'units') +@patch.object(info, '_find_by_name') +def test_getUnits(_find_by_name, units): + _ = info.getUnits('mg/L') + _find_by_name.assert_called_once_with('mg/L', units) + + +@patch.object(info, 'units') +@patch.object(info, '_find_by_name', return_value={'factor': 10}) +@pytest.mark.parametrize(('value', 'expected'), [ + (None, 1), + ('mg/L', 10) +]) +def test_getNormalization(_find_by_name, units, value, expected): + result = info.getNormalization(value) + assert result == expected + if value: + _find_by_name.assert_called_once_with(value, units) + + +@patch.object(info, 'parameters') +@patch.object(info, 'getNormalization') +@patch.object(info, '_find_by_name', return_value={'units': 'mg/L'}) +def test_getConversion(_find_by_name, getNormalization, parameters): + result = info.getConversion('Lead') + _find_by_name.assert_called_once_with('Lead', parameters) + getNormalization.assert_called_once_with('mg/L') \ No newline at end of file From 3fc8449f98b869962789a5f638eb8c911c57e0b2 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 6 Dec 2017 09:23:48 -0800 Subject: [PATCH 07/48] enable pep8 checks on all py file --- pybmpdb/dataAccess.py | 28 ++++++++++++++++------------ pybmpdb/info.py | 2 +- pybmpdb/summary.py | 17 ++++++++--------- pybmpdb/tests/__init__.py | 2 +- pybmpdb/tests/test_info.py | 2 +- pybmpdb/utils.py | 36 +----------------------------------- 6 files changed, 28 insertions(+), 59 deletions(-) diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index 6b2941f..740f6c5 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -135,17 +135,21 @@ def load_from_access(dbfile, sqlquery=None, dbtable=None): dbfile : str Path to the Access database. sqlquery : str, optional - SQL (JET) query to run to + SQL (JET) query to run. + + Returns + ------- + bmpdata : pandas.DataFrame """ - driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' + driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' if not sqlquery: if dbtable: sqlquery = "select * from {}".format(dbtable) else: dbtable = 'bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014' sqlquery = get_default_query().format(dbtable) - + return get_data(sqlquery, dbfile, driver=driver) @@ -201,14 +205,12 @@ def prepare_data(raw_df): .assign(station=lambda df: df['station'].str.lower()) .assign(sampletype=lambda df: _process_sampletype(df, 'sampletype')) .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) - .assign(units=lambda df: df['units'].map( - lambda u: info.getUnits(u, attr='unicode') - )) + .assign(units=lambda df: df['units'].map(lambda u: info.getUnits(u, attr='unicode'))) .assign(_parameter=lambda df: df['parameter'].str.lower().str.strip()) .assign(fraction=lambda df: df['fraction'].str.lower().str.strip()) .replace({'category': biofilters}) .pipe(wqio.utils.normalize_units, units_norm, target_units, paramcol='_parameter', - rescol='res', unitcol='units', napolicy='raise') + rescol='res', unitcol='units', napolicy='raise') .drop(drop_columns, axis=1) .query("res > 0") .groupby(by=_row_headers) @@ -265,7 +267,7 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn transformed = ( df.query("{} in @existingparams".format(paramlevel)) - .pipe(utils.refresh_index) + .pipe(utils.refresh_index) .unstack(level=paramlevel) .pipe(wqio.utils.assign_multilevel_column, qualfxn, 'qual', newparam) .pipe(wqio.utils.assign_multilevel_column, resfxn, 'res', newparam) @@ -288,8 +290,10 @@ def to_DataCollection(df, **kwargs): # pragma: no cover selection_dict = wqio.validate.at_least_empty_dict(selection_dict) othergroups = kwargs.pop('othergroups', ['category', 'units']) pairgroups = kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) - return (df.reset_index() - .pipe(wqio.DataCollection, rescol='res', qualcol='qual', ndval=['ND'], - stationcol='station', paramcol='parameter', othergroups=othergroups, - pairgroups=pairgroups, **kwargs) + dc = ( + df.reset_index() + .pipe(wqio.DataCollection, rescol='res', qualcol='qual', ndval=['ND'], + stationcol='station', paramcol='parameter', othergroups=othergroups, + pairgroups=pairgroups, **kwargs) ) + return dc diff --git a/pybmpdb/info.py b/pybmpdb/info.py index 61392a3..fe936a5 100644 --- a/pybmpdb/info.py +++ b/pybmpdb/info.py @@ -77,4 +77,4 @@ def getConversion(param): parameters = _loader('parameters.json') -units = _loader('units.json') \ No newline at end of file +units = _loader('units.json') diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 75b471d..ac487df 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -35,7 +35,7 @@ def filterlocation(location, count=5, column='bmp'): def _pick_non_null(dataframe, maincol, preferred, secondary): return numpy.where( - ~dataframe[(maincol, preferred)].isnull(), + ~dataframe[(maincol, preferred)].isnull(), dataframe[(maincol, preferred)], dataframe[(maincol, secondary)], ) @@ -54,7 +54,7 @@ def best_col(df, mainstation, backupstation, valcol): ) return values - orig_index = dataframe.index.names + orig_index = dataframe.index.names data = ( dataframe .pipe(utils.refresh_index) @@ -94,7 +94,6 @@ def _pick_best_sampletype(dataframe): ) xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, 'grab') - data = ( xtab.loc[:, xtab.columns.map(lambda c: c[1] != 'unknown')] .stack(level=['sampletype']) @@ -150,9 +149,9 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, # merge Wetland Basins and Retention ponds, keeping # the original records WBRP_combo = 'Wetland Basin/Retention Pond' - - df = wqio.utils.redefine_index_level(df, 'category', WBRP_combo, dropold=False, - criteria=lambda row: row[_cats] in grab_categories) + + df = wqio.utils.redefine_index_level(df, 'category', WBRP_combo, dropold=False, + criteria=lambda row: row[_cats] in grab_categories) grab_categories.append(WBRP_combo) if combine_nox: @@ -171,8 +170,8 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, ) PFC = 'Permeable Friction Course' - df = wqio.utils.redefine_index_level(df, 'category', PFC, dropold=True, - criteria=lambda row: row[_cats] == 'PF') + df = wqio.utils.redefine_index_level(df, 'category', PFC, dropold=True, + criteria=lambda row: row[_cats] == 'PF') # all data should be compisite data, but grabs are allowed # for bacteria at all BMPs, and all parameter groups at @@ -819,7 +818,7 @@ def categorical_boxplots(dc, outpath='.'): ax.yaxis.grid(True, which='major', color='0.5', linestyle='-') ax.yaxis.grid(False, which='minor') wqio.viz.rotateTickLabels(ax, 45, 'x') - ax.set_xlim(left=1, right=bmppositions.max()+1) + ax.set_xlim(left=1, right=bmppositions.max() + 1) if infl_proxy is not None: ax.legend( (infl_proxy, effl_proxy), diff --git a/pybmpdb/tests/__init__.py b/pybmpdb/tests/__init__.py index d6ab040..c36a0b9 100644 --- a/pybmpdb/tests/__init__.py +++ b/pybmpdb/tests/__init__.py @@ -9,6 +9,6 @@ def test(*args): except ImportError: raise ImportError("pytest required run tests") - options = [resource_filename('pybmpdb', 'tests')] + options = [resource_filename('pybmpdb', '')] options.extend(list(args)) return pytest.main(options) diff --git a/pybmpdb/tests/test_info.py b/pybmpdb/tests/test_info.py index 0526236..6f20803 100644 --- a/pybmpdb/tests/test_info.py +++ b/pybmpdb/tests/test_info.py @@ -66,4 +66,4 @@ def test_getNormalization(_find_by_name, units, value, expected): def test_getConversion(_find_by_name, getNormalization, parameters): result = info.getConversion('Lead') _find_by_name.assert_called_once_with('Lead', parameters) - getNormalization.assert_called_once_with('mg/L') \ No newline at end of file + getNormalization.assert_called_once_with('mg/L') diff --git a/pybmpdb/utils.py b/pybmpdb/utils.py index dd04901..c119a18 100644 --- a/pybmpdb/utils.py +++ b/pybmpdb/utils.py @@ -23,7 +23,7 @@ def refresh_index(df): deeply nested indexes """ index_names = df.index.names - return df.reset_index().set_index(index_names) + return df.reset_index().set_index(index_names) def get_level_position(df, levelname): @@ -32,40 +32,6 @@ def get_level_position(df, levelname): return ri[0] -def makeBoxplotLegend(filename='bmp/tex/boxplotlegend', figsize=4, **kwargs): - """ Creates an explanatory diagram for boxplots. - - Parameters - ---------- - filename : string - File name and path (without extension) where the figure will be - saved. - figsize : float or int - Size of the figure in inches. - kwargs : keyword arguments - Keyword arguments passed directly to `_boxplot_legend` - - Returns - ------- - None - - """ - raise NotImplementedError - ## setup the figure - #fig, ax = plt.subplots(figsize=(figsize, figsize)) - - ## call the helper function that does the heavy lifting - #figutils.boxplot_legend(ax, **kwargs) - - ## optimize the figure's layout - #fig.tight_layout() - - ## save and close - #fig.savefig(filename + '.pdf', transparent=True, dpi=300) - #fig.savefig(filename + '.png', transparent=True, dpi=300) - #plt.close(fig) - - def sanitizeTex(texstring): """ Cleans up overly eager LaTeX renderings from pandas. From 024d53a11cd756a984ad5df71a52a0eb10df80a6 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 6 Dec 2017 09:24:00 -0800 Subject: [PATCH 08/48] beautify json data --- pybmpdb/data/parameters.json | 3538 +++++++++++++++++++++++++++++++++- pybmpdb/data/units.json | 243 ++- 2 files changed, 3779 insertions(+), 2 deletions(-) diff --git a/pybmpdb/data/parameters.json b/pybmpdb/data/parameters.json index 76005f6..cd0f09e 100644 --- a/pybmpdb/data/parameters.json +++ b/pybmpdb/data/parameters.json @@ -1 +1,3537 @@ -[{"name": "1,1,1,2-tetrachloroethane", "tex": "1,1,1,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,1,2-Tetrachloroethane", "fraction": "total"}, {"name": "1,1,1-trichloroethane", "tex": "1,1,1-Trichloroethane", "units": "ug/L", "unicode": "1,1,1-Trichloroethane", "fraction": "total"}, {"name": "1,1,2,2-tetrachloroethane", "tex": "1,1,2,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,2,2-Tetrachloroethane", "fraction": "total"}, {"name": "1,1,2-trichloroethane", "tex": "1,1,2-Trichloroethane", "units": "ug/L", "unicode": "1,1,2-Trichloroethane", "fraction": "total"}, {"name": "1,1-dichloroethane", "tex": "1,1-Dichloroethane", "units": "ug/L", "unicode": "1,1-Dichloroethane", "fraction": "total"}, {"name": "1,1-dichloroethylene", "tex": "1,1-Dichloroethylene", "units": "ug/L", "unicode": "1,1-Dichloroethylene", "fraction": "total"}, {"name": "1,1-dichloropropene", "tex": "1,1-Dichloropropene", "units": "ug/L", "unicode": "1,1-Dichloropropene", "fraction": "total"}, {"name": "1,2,3-trichlorobenzene", "tex": "1,2,3-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,3-Trichlorobenzene", "fraction": "total"}, {"name": "1,2,3-trichloropropane", "tex": "1,2,3-Trichloropropane", "units": "ug/L", "unicode": "1,2,3-Trichloropropane", "fraction": "total"}, {"name": "1,2,4-trichlorobenzene", "tex": "1,2,4-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,4-Trichlorobenzene", "fraction": "total"}, {"name": "1,2,4-trimethylbenzene", "tex": "1,2,4-Trimethylbenzene", "units": "ug/L", "unicode": "1,2,4-Trimethylbenzene", "fraction": "total"}, {"name": "1,2-benzanthracene", "tex": "1,2-Benzanthracene", "units": "ug/L", "unicode": "1,2-Benzanthracene", "fraction": "total"}, {"name": "1,2-dibromoethane", "tex": "1,2-Dibromoethane", "units": "ug/L", "unicode": "1,2-Dibromoethane", "fraction": "total"}, {"name": "1,2-dichlorobenzene", "tex": "1,2-Dichlorobenzene", "units": "ug/L", "unicode": "1,2-Dichlorobenzene", "fraction": "total"}, {"name": "1,2-dichloroethane", "tex": "1,2-Dichloroethane", "units": "ug/L", "unicode": "1,2-Dichloroethane", "fraction": "total"}, {"name": "1,2-dichloropropane", "tex": "1,2-Dichloropropane", "units": "ug/L", "unicode": "1,2-Dichloropropane", "fraction": "total"}, {"name": "1,2-diphenylhydrazine", "tex": "1,2-Diphenylhydrazine", "units": "ug/L", "unicode": "1,2-Diphenylhydrazine", "fraction": "total"}, {"name": "1,3,5-trimethylbenzene", "tex": "1,3,5-Trimethylbenzene", "units": "ug/L", "unicode": "1,3,5-Trimethylbenzene", "fraction": "total"}, {"name": "1,3-dichlorobenzene", "tex": "1,3-Dichlorobenzene", "units": "ug/L", "unicode": "1,3-Dichlorobenzene", "fraction": "total"}, {"name": "1,3-dichloropropane", "tex": "1,3-Dichloropropane", "units": "ug/L", "unicode": "1,3-Dichloropropane", "fraction": "total"}, {"name": "1,4-dichlorobenzene", "tex": "1,4-Dichlorobenzene", "units": "ug/L", "unicode": "1,4-Dichlorobenzene", "fraction": "total"}, {"name": "1-chlorohexane", "tex": "1-Chlorohexane", "units": "ug/L", "unicode": "1-Chlorohexane", "fraction": "total"}, {"name": "1-methylnaphthalene", "tex": "1-Methylnaphthalene", "units": "ug/L", "unicode": "1-Methylnaphthalene", "fraction": "total"}, {"name": "2,2-dichloropropane", "tex": "2,2-Dichloropropane", "units": "ug/L", "unicode": "2,2-Dichloropropane", "fraction": "total"}, {"name": "2,4'-ddd", "tex": "2,4'-DDD", "units": "ug/L", "unicode": "2,4'-DDD", "fraction": "total"}, {"name": "2,4'-dde", "tex": "2,4'-DDE", "units": "ug/L", "unicode": "2,4'-DDE", "fraction": "total"}, {"name": "2,4'-ddt", "tex": "2,4'-DDT", "units": "ug/L", "unicode": "2,4'-DDT", "fraction": "total"}, {"name": "2,4,5-tp-silvex", "tex": "2,4,5-TP-SILVEX", "units": "ug/L", "unicode": "2,4,5-TP-Silvex", "fraction": "total"}, {"name": "2,4,5-trichlorophenol", "tex": "2,4,5-Trichlorophenol", "units": "ug/L", "unicode": "2,4,5-Trichlorophenol", "fraction": "total"}, {"name": "2,4,6-trichlorophenol", "tex": "2,4,6-Trichlorophenol", "units": "ug/L", "unicode": "2,4,6-Trichlorophenol", "fraction": "total"}, {"name": "2,4-d", "tex": "2,4-D", "units": "ug/L", "unicode": "2,4-D", "fraction": "total"}, {"name": "2,4-dichlorophenol", "tex": "2,4-Dichlorophenol", "units": "ug/L", "unicode": "2,4-Dichlorophenol", "fraction": "total"}, {"name": "2,4-dinitrophenol", "tex": "2,4-Dinitrophenol", "units": "ug/L", "unicode": "2,4-Dinitrophenol", "fraction": "total"}, {"name": "2,4-dinitrotoluene", "tex": "2,4-Dinitrotoluene", "units": "ug/L", "unicode": "2,4-Dinitrotoluene", "fraction": "total"}, {"name": "2,4-dimethylphenol", "tex": "2,4-Dimethylphenol", "units": "ug/L", "unicode": "2,4-Dimethylphenol", "fraction": "total"}, {"name": "2,6-dinitrotoluene", "tex": "2,6-Dinitrotoluene", "units": "ug/L", "unicode": "2,6-Dinitrotoluene", "fraction": "total"}, {"name": "2-butanone", "tex": "2-Butanone", "units": "ug/L", "unicode": "2-Butanone", "fraction": "total"}, {"name": "2-chloroethyl vinyl ether", "tex": "2-Chloroethyl Vinyl Ether", "units": "ug/L", "unicode": "2-Chloroethyl Vinyl Ether", "fraction": "total"}, {"name": "2-chloronaphthalene", "tex": "2-Chloronaphthalene", "units": "ug/L", "unicode": "2-Chloronaphthalene", "fraction": "total"}, {"name": "2-chlorophenol", "tex": "2-Chlorophenol", "units": "ug/L", "unicode": "2-Chlorophenol", "fraction": "total"}, {"name": "2-chlorotoluene", "tex": "2-Chlorotoluene", "units": "ug/L", "unicode": "2-Chlorotoluene", "fraction": "total"}, {"name": "2-hexanone", "tex": "2-Hexanone", "units": "ug/L", "unicode": "2-Hexanone", "fraction": "total"}, {"name": "2-methylnaphthalene", "tex": "2-Methylnaphthalene", "units": "ug/L", "unicode": "2-Methylnaphthalene", "fraction": "total"}, {"name": "2-nitrophenol", "tex": "2-Nitrophenol", "units": "ug/L", "unicode": "2-Nitrophenol", "fraction": "total"}, {"name": "3,3'-dichlorobenzidine", "tex": "3,3'-Dichlorobenzidine", "units": "ug/L", "unicode": "3,3'-Dichlorobenzidine", "fraction": "total"}, {"name": "4,4'-ddd", "tex": "4,4'-DDD", "units": "ug/L", "unicode": "4,4'-DDD", "fraction": "total"}, {"name": "4,4'-dde", "tex": "4,4'-DDE", "units": "ug/L", "unicode": "4,4'-DDE", "fraction": "total"}, {"name": "4,4'-ddt", "tex": "4,4'-DDT", "units": "ug/L", "unicode": "4,4'-DDT", "fraction": "total"}, {"name": "4,6-dinitro-2-methylphenol", "tex": "4,6-Dinitro-2-methylphenol", "units": "ug/L", "unicode": "4,6-Dinitro-2-methylphenol", "fraction": "total"}, {"name": "4,6-dinitro-o-cresol", "tex": "4,6-Dinitro-o-cresol", "units": "ug/L", "unicode": "4,6-Dinitro-o-cresol", "fraction": "total"}, {"name": "4-bromophenyl phenyl ether", "tex": "4-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Bromophenyl Phenyl Ether", "fraction": "total"}, {"name": "4-chlorophenyl phenyl ether", "tex": "4-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Chlorophenyl Phenyl Ether", "fraction": "total"}, {"name": "4-chlorotoluene", "tex": "4-Chlorotoluene", "units": "ug/L", "unicode": "4-Chlorotoluene", "fraction": "total"}, {"name": "4-nitrophenol", "tex": "4-Nitrophenol", "units": "ug/L", "unicode": "4-Nitrophenol", "fraction": "total"}, {"name": "4-chloro-3-methylphenol", "tex": "4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", "fraction": "total"}, {"name": "4-chloro-3-methylphenol, dissolved", "tex": "Dissolved 4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", "fraction": "dissolved"}, {"name": "4-hydroxy-4-methyl-2-pentanone", "tex": "4-Hydroxy-4-Methyl-2-Pentanone", "units": "ug/L", "unicode": "4-Hydroxy-4-Methyl-2-Pentanone", "fraction": "total"}, {"name": "acenaphthene", "tex": "Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", "fraction": "total"}, {"name": "acenaphthene, dissolved", "tex": "Dissolved Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", "fraction": "dissolved"}, {"name": "acenaphthylene", "tex": "Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", "fraction": "total"}, {"name": "acenaphthylene, suspended", "tex": "Suspended Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", "fraction": "suspended"}, {"name": "acetone", "tex": "Acetone", "units": "ug/L", "unicode": "Acetone", "fraction": "total"}, {"name": "acrolein", "tex": "Acrolein", "units": "ug/L", "unicode": "Acrolein", "fraction": "total"}, {"name": "acrylonitrile", "tex": "Acrylonitrile", "units": "ug/L", "unicode": "Acrylonitrile", "fraction": "total"}, {"name": "alachlor", "tex": "Alachlor", "units": "ug/L", "unicode": "Alachlor", "fraction": "total"}, {"name": "aldrin", "tex": "Aldrin", "units": "ug/L", "unicode": "Aldrin", "fraction": "total"}, {"name": "alkalinity", "tex": "Alkalinity", "units": "mg/L", "unicode": "Alkalinity", "fraction": "total"}, {"name": "alkalinity, carbonate as caco3", "tex": "Alkalinity, Carbonate as CaCO$_{3}$", "units": "mg/L", "unicode": "Alkalinity, Carbonate as CaCO\u2083", "fraction": "total"}, {"name": "aluminum, dissolved", "tex": "Dissolved Aluminum", "units": "ug/L", "unicode": "Aluminum", "fraction": "dissolved"}, {"name": "aluminum, total", "tex": "Total Aluminum", "units": "ug/L", "unicode": "Aluminum", "fraction": "total"}, {"name": "anthracene", "tex": "Anthracene", "units": "ug/L", "unicode": "Anthracene", "fraction": "total"}, {"name": "anthracene, suspended", "tex": "Suspended Anthracene", "units": "ug/L", "unicode": "Anthracene", "fraction": "suspended"}, {"name": "antimony, dissolved", "tex": "Dissolved Antimony", "units": "ug/L", "unicode": "Antimony", "fraction": "dissolved"}, {"name": "antimony, total", "tex": "Total Antimony", "units": "ug/L", "unicode": "Antimony", "fraction": "total"}, {"name": "aroclor 1016", "tex": "Aroclor 1016", "units": "ug/L", "unicode": "Aroclor 1016", "fraction": "total"}, {"name": "aroclor 1221", "tex": "Aroclor 1221", "units": "ug/L", "unicode": "Aroclor 1221", "fraction": "total"}, {"name": "aroclor 1232", "tex": "Aroclor 1232", "units": "ug/L", "unicode": "Aroclor 1232", "fraction": "total"}, {"name": "aroclor 1242", "tex": "Aroclor 1242", "units": "ug/L", "unicode": "Aroclor 1242", "fraction": "total"}, {"name": "aroclor 1248", "tex": "Aroclor 1248", "units": "ug/L", "unicode": "Aroclor 1248", "fraction": "total"}, {"name": "aroclor 1254", "tex": "Aroclor 1254", "units": "ug/L", "unicode": "Aroclor 1254", "fraction": "total"}, {"name": "aroclor 1260", "tex": "Aroclor 1260", "units": "ug/L", "unicode": "Aroclor 1260", "fraction": "total"}, {"name": "arsenic, dissolved", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "dissolved"}, {"name": "arsenic, total", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "total"}, {"name": "dissolved arsenic", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "dissolved"}, {"name": "total arsenic", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", "fraction": "total"}, {"name": "atrazine", "tex": "Atrazine", "units": "ug/L", "unicode": "Atrazine", "fraction": "total"}, {"name": "bhc-alpha", "tex": "BHC-ALPHA", "units": "ug/L", "unicode": "BHC-ALPHA", "fraction": "total"}, {"name": "bhc-beta", "tex": "BHC-BETA", "units": "ug/L", "unicode": "BHC-BETA", "fraction": "total"}, {"name": "bhc-delta", "tex": "BHC-DELTA", "units": "ug/L", "unicode": "BHC-DELTA", "fraction": "total"}, {"name": "bod", "tex": "Biological Oxygen Demand", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "total"}, {"name": "bod, dissolved", "tex": "Biological Oxygen Demand (dissolved)", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "dissolved"}, {"name": "bod, non-standard conditions", "tex": "Biological Oxygen Demand (non-standard conditions)", "units": "mg/L", "unicode": "Biological Oxygen Demand", "fraction": "total"}, {"name": "barium, dissolved", "tex": "Dissolved Barium", "units": "ug/L", "unicode": "Barium", "fraction": "dissolved"}, {"name": "barium, total", "tex": "Total Barium", "units": "ug/L", "unicode": "Barium", "fraction": "total"}, {"name": "benz[a]anthracene", "tex": "Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", "fraction": "total"}, {"name": "benz[a]anthracene, suspended", "tex": "Suspended Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", "fraction": "suspended"}, {"name": "benzene", "tex": "Benzene", "units": "ug/L", "unicode": "Benzene", "fraction": "total"}, {"name": "benzidine", "tex": "Benzidine", "units": "ug/L", "unicode": "Benzidine", "fraction": "total"}, {"name": "benzo(b)fluoranthene", "tex": "Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", "fraction": "total"}, {"name": "benzo(b)fluoranthene, suspended", "tex": "Suspended Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", "fraction": "suspended"}, {"name": "benzo[a]pyrene", "tex": "Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", "fraction": "total"}, {"name": "benzo[a]pyrene, suspended", "tex": "Suspended Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", "fraction": "suspended"}, {"name": "benzo[ghi]perylene", "tex": "Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", "fraction": "total"}, {"name": "benzo[ghi]perylene, suspended", "tex": "Suspended Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", "fraction": "suspended"}, {"name": "benzo[k]fluoranthene", "tex": "Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", "fraction": "total"}, {"name": "benzo[k]fluoranthene, suspended", "tex": "Suspended Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", "fraction": "suspended"}, {"name": "benzoic acid", "tex": "Benzoic acid", "units": "ug/L", "unicode": "Benzoic acid", "fraction": "total"}, {"name": "benzyl alcohol", "tex": "Benzyl Alcohol", "units": "ug/L", "unicode": "Benzyl Alcohol", "fraction": "total"}, {"name": "beryllium, dissolved", "tex": "Dissolved Beryllium", "units": "ug/L", "unicode": "Beryllium", "fraction": "dissolved"}, {"name": "beryllium, total", "tex": "Total Beryllium", "units": "ug/L", "unicode": "Beryllium", "fraction": "total"}, {"name": "biphenyl", "tex": "Biphenyl", "units": "ug/L", "unicode": "Biphenyl", "fraction": "total"}, {"name": "bis(2-chloro-1-methylethyl) ether", "tex": "Bis(2-chloro-1-methylethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloro-1-methylethyl) Ether", "fraction": "total"}, {"name": "bis(2-chloroethoxy)methane", "tex": "Bis(2-chloroethoxy)methane", "units": "ug/L", "unicode": "Bis(2-chloroethoxy)methane", "fraction": "total"}, {"name": "bis(2-chloroethyl) ether", "tex": "Bis(2-chloroethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroethyl) Ether", "fraction": "total"}, {"name": "bis(2-chloroisopropyl) ether", "tex": "Bis(2-chloroisopropyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroisopropyl) Ether", "fraction": "total"}, {"name": "bis(2-ethylhexyl) phthalate", "tex": "Bis(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "bis(2-ethylhexyl)phthalate", "tex": "Bis(2-ethylhexyl)Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "bis(n-octyl)phthalate", "tex": "Bis(n-octyl)phthalate", "units": "ug/L", "unicode": "Bis(n-octyl) Phthalate", "fraction": "total"}, {"name": "bromobenzene", "tex": "Bromobenzene", "units": "ug/L", "unicode": "Bromobenzene", "fraction": "total"}, {"name": "bromochloroiodomethane", "tex": "Bromochloroiodomethane", "units": "ug/L", "unicode": "Bromochloroiodomethane", "fraction": "total"}, {"name": "bromoform", "tex": "Bromoform", "units": "ug/L", "unicode": "Bromoform", "fraction": "total"}, {"name": "bromomethane", "tex": "Bromomethane", "units": "ug/L", "unicode": "Bromomethane", "fraction": "total"}, {"name": "butyl benzyl phthalate", "tex": "Butyl Benzyl Phthalate", "units": "ug/L", "unicode": "Butyl Benzyl Phthalate", "fraction": "total"}, {"name": "cbod", "tex": "Chemical-Biological Oxygen Demand", "units": "mg/L", "unicode": "Chemical-Biological Oxygen Demand", "fraction": "total"}, {"name": "cfc-11", "tex": "CFC-11", "units": "ug/L", "unicode": "CFC-11", "fraction": "total"}, {"name": "cfc-12", "tex": "CFC-12", "units": "ug/L", "unicode": "CFC-12", "fraction": "total"}, {"name": "cadmium, dissolved", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "dissolved"}, {"name": "cadmium, suspended", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "suspended"}, {"name": "cadmium, total", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "total"}, {"name": "dissolved cadmium", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "dissolved"}, {"name": "suspended cadmium", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "suspended"}, {"name": "total cadmium", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", "fraction": "total"}, {"name": "calcium as caco3, total", "tex": "Total Calcium as CaCO$_{3}$", "units": "mg/L", "unicode": "Calcium as CaCO\u2083", "fraction": "total"}, {"name": "calcium, dissolved", "tex": "Dissolved Calcium", "units": "mg/L", "unicode": "Calcium", "fraction": "dissolved"}, {"name": "calcium, total", "tex": "Total Calcium", "units": "mg/L", "unicode": "Calcium", "fraction": "total"}, {"name": "carbofuran", "tex": "Carbofuran", "units": "ug/L", "unicode": "Carbofuran", "fraction": "total"}, {"name": "carbon disulfide", "tex": "Carbon Disulfide", "units": "ug/L", "unicode": "Carbon Disulfide", "fraction": "total"}, {"name": "carbon fraction, particulate organic material", "tex": "Carbon Fraction, Particulate Organic Material", "units": "mg/L", "unicode": "Carbon, Organic", "fraction": "particulate"}, {"name": "carbon tetrachloride", "tex": "Carbon Tetrachloride", "units": "ug/L", "unicode": "Carbon Tetrachloride", "fraction": "total"}, {"name": "chemical oxygen demand", "tex": "Chemical Oxygen Demand", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, high level", "tex": "Chemical Oxygen Demand (high level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, low level", "tex": "Chemical Oxygen Demand (low level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "total"}, {"name": "chemical oxygen demand, low level, filtered", "tex": "Chemical Oxygen Demand (low level, filtered)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "dissolved"}, {"name": "chemical oxygen demand, soluble", "tex": "Chemical Oxygen Demand (soluble)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", "fraction": "dissolved"}, {"name": "chlordane", "tex": "Chlordane", "units": "ug/L", "unicode": "Chlordane", "fraction": "total"}, {"name": "chloride, dissolved", "tex": "Dissolved Chloride", "units": "mg/L", "unicode": "Chloride", "fraction": "dissolved"}, {"name": "chloride, total", "tex": "Total Chloride", "units": "mg/L", "unicode": "Chloride", "fraction": "total"}, {"name": "chlorobenzene", "tex": "Chlorobenzene", "units": "ug/L", "unicode": "Chlorobenzene", "fraction": "total"}, {"name": "chlorodibromomethane", "tex": "Chlorodibromomethane", "units": "ug/L", "unicode": "Chlorodibromomethane", "fraction": "total"}, {"name": "chloroethane", "tex": "Chloroethane", "units": "ug/L", "unicode": "Chloroethane", "fraction": "total"}, {"name": "chloroform", "tex": "Chloroform", "units": "ug/L", "unicode": "Chloroform", "fraction": "total"}, {"name": "chloromethane", "tex": "Chloromethane", "units": "ug/L", "unicode": "Chloromethane", "fraction": "total"}, {"name": "chlorotoluene", "tex": "Chlorotoluene", "units": "ug/L", "unicode": "Chlorotoluene", "fraction": "total"}, {"name": "chlorpyrifos", "tex": "Chlorpyrifos", "units": "ug/L", "unicode": "Chlorpyrifos", "fraction": "total"}, {"name": "chromium(vi), dissolved", "tex": "Dissolved Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", "fraction": "dissolved"}, {"name": "chromium(vi), total", "tex": "Total Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", "fraction": "total"}, {"name": "chromium, dissolved", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "dissolved"}, {"name": "chromium, suspended", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "suspended"}, {"name": "chromium, total", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "total"}, {"name": "dissolved chromium", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "dissolved"}, {"name": "suspended chromium", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "suspended"}, {"name": "total chromium", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", "fraction": "total"}, {"name": "chrysene", "tex": "Chrysene", "units": "ug/L", "unicode": "Chrysene", "fraction": "total"}, {"name": "chrysene, suspended", "tex": "Suspended Chrysene", "units": "ug/L", "unicode": "Chrysene", "fraction": "suspended"}, {"name": "cobalt, total", "tex": "Total Cobalt", "units": "ug/L", "unicode": "Cobalt", "fraction": "total"}, {"name": "copper, dissolved", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", "fraction": "dissolved"}, {"name": "copper, suspended", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", "fraction": "suspended"}, {"name": "copper, total", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", "fraction": "total"}, {"name": "dissolved copper", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", "fraction": "dissolved"}, {"name": "suspended copper", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", "fraction": "suspended"}, {"name": "total copper", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", "fraction": "total"}, {"name": "cumene", "tex": "Cumene", "units": "ug/L", "unicode": "Cumene", "fraction": "total"}, {"name": "cyanazine", "tex": "Cyanazine", "units": "ug/L", "unicode": "Cyanazine", "fraction": "total"}, {"name": "cyanide", "tex": "Cyanide", "units": "mg/L", "unicode": "Cyanide", "fraction": "total"}, {"name": "daconil", "tex": "DACONIL", "units": "ug/L", "unicode": "DACONIL", "fraction": "total"}, {"name": "di(2-ethylhexyl) phthalate", "tex": "Di(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Di(2-ethylhexyl) Phthalate", "fraction": "total"}, {"name": "di-n-octyl phthalate", "tex": "Di-n-octyl Phthalate", "units": "ug/L", "unicode": "Di-n-octyl Phthalate", "fraction": "total"}, {"name": "diazinon", "tex": "Diazinon", "units": "ug/L", "unicode": "Diazinon", "fraction": "total"}, {"name": "dibenz[a,h]anthracene", "tex": "Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", "fraction": "total"}, {"name": "dibenz[a,h]anthracene, dissolved", "tex": "Dissolved Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", "fraction": "dissolved"}, {"name": "dibenzofuran", "tex": "Dibenzofuran", "units": "ug/L", "unicode": "Dibenzofuran", "fraction": "total"}, {"name": "dibromomethane", "tex": "Dibromomethane", "units": "ug/L", "unicode": "Dibromomethane", "fraction": "total"}, {"name": "dibromodichloromethane", "tex": "Dibromodichloromethane", "units": "ug/L", "unicode": "Dibromodichloromethane", "fraction": "total"}, {"name": "dibutyl phthalate", "tex": "Dibutyl Phthalate", "units": "ug/L", "unicode": "Dibutyl Phthalate", "fraction": "total"}, {"name": "dichlorobromomethane", "tex": "Dichlorobromomethane", "units": "ug/L", "unicode": "Dichlorobromomethane", "fraction": "total"}, {"name": "dichlorodifluoromethane", "tex": "Dichlorodifluoromethane", "units": "ug/L", "unicode": "Dichlorodifluoromethane", "fraction": "total"}, {"name": "dichlorophenol", "tex": "Dichlorophenol", "units": "ug/L", "unicode": "Dichlorophenol", "fraction": "total"}, {"name": "dinitrophenol", "tex": "Dinitrophenol", "units": "ug/L", "unicode": "Dinitrophenol", "fraction": "total"}, {"name": "dieldrin", "tex": "Dieldrin", "units": "ug/L", "unicode": "Dieldrin", "fraction": "total"}, {"name": "diethyl phthalate", "tex": "Diethyl Phthalate", "units": "ug/L", "unicode": "Diethyl Phthalate", "fraction": "total"}, {"name": "dimethyl phthalate", "tex": "Dimethyl Phthalate", "units": "ug/L", "unicode": "Dimethyl Phthalate", "fraction": "total"}, {"name": "dimethylnaphthalene", "tex": "Dimethylnaphthalene", "units": "ug/L", "unicode": "Dimethylnaphthalene", "fraction": "total"}, {"name": "dissolved oxygen (do)", "tex": "Dissolved Oxygen (DO)", "units": "mg/L", "unicode": "Dissolved Oxygen (DO)", "fraction": "dissolved"}, {"name": "dro", "tex": "DRO", "units": "ug/L", "unicode": "DRO", "fraction": "total"}, {"name": "endosulfan i", "tex": "Endosulfan I", "units": "ug/L", "unicode": "Endosulfan I", "fraction": "total"}, {"name": "endosulfan i (alpha)", "tex": "Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", "fraction": "total"}, {"name": ".alpha.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", "fraction": "dissolved"}, {"name": "endosulfan ii", "tex": "Endosulfan II", "units": "ug/L", "unicode": "Endosulfan II", "fraction": "total"}, {"name": "endosulfan ii (beta)", "tex": "Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", "fraction": "total"}, {"name": ".beta.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", "fraction": "dissolved"}, {"name": "endosulfan sulfate", "tex": "Endosulfan sulfate", "units": "ug/L", "unicode": "Endosulfan sulfate", "fraction": "total"}, {"name": "endrin", "tex": "Endrin", "units": "ug/L", "unicode": "Endrin", "fraction": "total"}, {"name": "endrin aldehyde", "tex": "Endrin Aldehyde", "units": "ug/L", "unicode": "Endrin Aldehyde", "fraction": "total"}, {"name": "endrin ketone", "tex": "Endrin Ketone", "units": "ug/L", "unicode": "Endrin Ketone", "fraction": "total"}, {"name": "enterococcus", "tex": "Enterococcus", "units": "MPN/100 mL", "unicode": "Enterococcus", "fraction": "total"}, {"name": "escherichia coli", "tex": "Escherichia coli", "units": "MPN/100 mL", "unicode": "Escherichia coli", "fraction": "total"}, {"name": "ethyl methacrylate", "tex": "Ethyl Methacrylate", "units": "ug/L", "unicode": "Ethyl Methacrylate", "fraction": "total"}, {"name": "ethylbenzene", "tex": "Ethylbenzene", "units": "ug/L", "unicode": "Ethylbenzene", "fraction": "total"}, {"name": "ethylene dibromide", "tex": "Ethylene Dibromide", "units": "ug/L", "unicode": "Ethylene Dibromide", "fraction": "total"}, {"name": "fecal coliform", "tex": "Fecal Coliform", "units": "MPN/100 mL", "unicode": "Fecal Coliform", "fraction": "total"}, {"name": "fecal streptococcus group bacteria", "tex": "Fecal Streptococcus Group Bacteria", "units": "MPN/100 mL", "unicode": "Fecal Streptococcus Group Bacteria", "fraction": "total"}, {"name": "fluoranthene", "tex": "Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", "fraction": "total"}, {"name": "fluoranthene, suspended", "tex": "Suspended Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", "fraction": "suspended"}, {"name": "fluorene", "tex": "Fluorene", "units": "ug/L", "unicode": "Fluorene", "fraction": "total"}, {"name": "fluorene, suspended", "tex": "Suspended Fluorene", "units": "ug/L", "unicode": "Fluorene", "fraction": "suspended"}, {"name": "fluoride, dissolved", "tex": "Dissolved Fluoride", "units": "mg/L", "unicode": "Fluoride", "fraction": "dissolved"}, {"name": "fluoride, total", "tex": "Total Fluoride", "units": "mg/L", "unicode": "Fluoride", "fraction": "total"}, {"name": "glyphosate", "tex": "Glyphosate", "units": "ug/L", "unicode": "Glyphosate", "fraction": "total"}, {"name": "halon 1011", "tex": "Halon 1011", "units": "ug/L", "unicode": "Halon 1011", "fraction": "total"}, {"name": "hardness", "tex": "Hardness", "units": "mg/L", "unicode": "Hardness", "fraction": "total"}, {"name": "hardness, non-carbonate", "tex": "Hardness, non-carbonate", "units": "mg/L", "unicode": "Hardness, non-carbonate", "fraction": "total"}, {"name": "heptachlor", "tex": "Heptachlor", "units": "ug/L", "unicode": "Heptachlor", "fraction": "total"}, {"name": "heptachlor epoxide", "tex": "Heptachlor Epoxide", "units": "ug/L", "unicode": "Heptachlor Epoxide", "fraction": "total"}, {"name": "hexachlorobenzene", "tex": "Hexachlorobenzene", "units": "ug/L", "unicode": "Hexachlorobenzene", "fraction": "total"}, {"name": "hexachlorobutadiene", "tex": "Hexachlorobutadiene", "units": "ug/L", "unicode": "Hexachlorobutadiene", "fraction": "total"}, {"name": "hexachlorocyclopentadiene", "tex": "Hexachlorocyclopentadiene", "units": "ug/L", "unicode": "Hexachlorocyclopentadiene", "fraction": "total"}, {"name": "hexachloroethane", "tex": "Hexachloroethane", "units": "ug/L", "unicode": "Hexachloroethane", "fraction": "total"}, {"name": "hydrocarbons, total petroleum (tph)", "tex": "Hydrocarbons, Total Petroleum (TPH)", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", "fraction": "total"}, {"name": "total petroleum hydrocarbons", "tex": "Total Petroleum Hydrocarbons", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", "fraction": "total"}, {"name": "total petroleum hydrocarbons - diesel range", "tex": "Total Petroleum Hydrocarbons - Diesel range", "units": "ug/L", "unicode": "Organics, Diesel Range", "fraction": "total"}, {"name": "hydrocarbons, total petroleum, diesel range organics", "tex": "Hydrocarbons, Total Petroleum, diesel range Organics", "units": "ug/L", "unicode": "Organics, Diesel Range", "fraction": "total"}, {"name": "hydrocarbons, total petroleum, gasoline range organics", "tex": "Hydrocarbons, Total Petroleum, gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", "fraction": "total"}, {"name": "indeno[1,2,3-cd]pyrene", "tex": "Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", "fraction": "total"}, {"name": "indeno[1,2,3-cd]pyrene, suspended", "tex": "Suspended Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", "fraction": "suspended"}, {"name": "inorganic carbon, total", "tex": "Total Inorganic Carbon", "units": "mg/L", "unicode": "Carbon, Inorganic", "fraction": "total"}, {"name": "iodomethane", "tex": "Iodomethane", "units": "ug/L", "unicode": "Iodomethane", "fraction": "total"}, {"name": "iron, dissolved", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", "fraction": "dissolved"}, {"name": "iron, total", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", "fraction": "total"}, {"name": "dissolved iron", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", "fraction": "dissolved"}, {"name": "total iron", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", "fraction": "total"}, {"name": "isophorone", "tex": "Isophorone", "units": "ug/L", "unicode": "Isophorone", "fraction": "total"}, {"name": "isopropylbenzene", "tex": "Isopropylbenzene", "units": "ug/L", "unicode": "Isopropylbenzene", "fraction": "total"}, {"name": "kjeldahl nitrogen (tkn)", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "total"}, {"name": "total kjeldahl nitrogen", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "total"}, {"name": "kjeldahl nitrogen, dissolved", "tex": "Dissolved Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "dissolved"}, {"name": "kjeldahl nitrogen, suspended", "tex": "Suspended Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", "fraction": "suspended"}, {"name": "lead, dissolved", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", "fraction": "dissolved"}, {"name": "lead, suspended", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", "fraction": "suspended"}, {"name": "lead, total", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", "fraction": "total"}, {"name": "dissolved lead", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", "fraction": "dissolved"}, {"name": "suspended lead", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", "fraction": "suspended"}, {"name": "total lead", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", "fraction": "total"}, {"name": "lindane", "tex": "Lindane", "units": "ug/L", "unicode": "Lindane", "fraction": "total"}, {"name": "lithium, dissolved", "tex": "Dissolved Lithium", "units": "ug/L", "unicode": "Lithium", "fraction": "dissolved"}, {"name": "magnesium, dissolved", "tex": "Dissolved Magnesium", "units": "ug/L", "unicode": "Magnesium", "fraction": "dissolved"}, {"name": "magnesium, total", "tex": "Total Magnesium", "units": "ug/L", "unicode": "Magnesium", "fraction": "total"}, {"name": "malathion", "tex": "Malathion", "units": "ug/L", "unicode": "Malathion", "fraction": "total"}, {"name": "manganese, dissolved", "tex": "Dissolved Manganese", "units": "ug/L", "unicode": "Manganese", "fraction": "dissolved"}, {"name": "manganese, total", "tex": "Total Manganese", "units": "ug/L", "unicode": "Manganese", "fraction": "total"}, {"name": "mercury, dissolved", "tex": "Dissolved Mercury", "units": "ug/L", "unicode": "Mercury", "fraction": "dissolved"}, {"name": "mercury, total", "tex": "Total Mercury", "units": "ug/L", "unicode": "Mercury", "fraction": "total"}, {"name": "methoxychlor", "tex": "Methoxychlor", "units": "ug/L", "unicode": "Methoxychlor", "fraction": "total"}, {"name": "methyl mercury", "tex": "Methyl Mercury", "units": "ug/L", "unicode": "Methyl Mercury", "fraction": "total"}, {"name": "methyl bromide", "tex": "Methyl bromide", "units": "ug/L", "unicode": "Methyl bromide", "fraction": "total"}, {"name": "methyl ethyl ketone", "tex": "Methyl Ethyl Ketone", "units": "ug/L", "unicode": "Methyl Ethyl Ketone", "fraction": "total"}, {"name": "methyl isobutyl ketone", "tex": "Methyl Isobutyl Ketone", "units": "ug/L", "unicode": "Methyl Isobutyl Ketone", "fraction": "total"}, {"name": "methyl tert-butyl ether", "tex": "Methyl Tertiary Butyl Ether", "units": "ug/L", "unicode": "Methyl Tertiary Butyl Ether", "fraction": "total"}, {"name": "methylene blue active substances (mbas)", "tex": "Methylene Blue Active Substances (MBAS)", "units": "ug/L", "unicode": "Methylene Blue Active Substances", "fraction": "total"}, {"name": "methylene chloride", "tex": "Methylene Chloride", "units": "ug/L", "unicode": "Methylene Chloride", "fraction": "total"}, {"name": "methylnaphthalene", "tex": "Methylnaphthalene", "units": "ug/L", "unicode": "Methylnaphthalene", "fraction": "total"}, {"name": "molybdenum, total", "tex": "Total Molybdenum", "units": "ug/L", "unicode": "Molybdenum", "fraction": "total"}, {"name": "n-nitrosodi-n-propylamine", "tex": "N-Nitrosodi-n-Propylamine", "units": "ug/L", "unicode": "N-Nitrosodi-n-Propylamine", "fraction": "total"}, {"name": "n-nitrosodimethylamine", "tex": "N-Nitrosodimethylamine", "units": "ug/L", "unicode": "N-Nitrosodimethylamine", "fraction": "total"}, {"name": "n-nitrosodiphenylamine", "tex": "N-Nitrosodiphenylamine", "units": "ug/L", "unicode": "N-Nitrosodiphenylamine", "fraction": "total"}, {"name": "naphthalene", "tex": "Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "total"}, {"name": "naphthalene, dissolved", "tex": "Dissolved Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "dissolved"}, {"name": "naphthalene, suspended", "tex": "Suspended Naphthalene", "units": "ug/L", "unicode": "Naphthalene", "fraction": "suspended"}, {"name": "nickel, dissolved", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "dissolved"}, {"name": "nickel, total", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "total"}, {"name": "dissolved nickel", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "dissolved"}, {"name": "total nickel", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", "fraction": "total"}, {"name": "nitrobenzene", "tex": "Nitrobenzene", "units": "ug/L", "unicode": "Nitrobenzene", "fraction": "total"}, {"name": "nitrogen, nitrate (no3) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no2) + nitrate (no3) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) + Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no$_{2}$) + nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) + Nitrate (NO\u2083) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no2) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) as N", "fraction": "total"}, {"name": "nitrogen, nitrite (no$_{2}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO\u2082) as N", "fraction": "total"}, {"name": "nitrogen, nox as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, no$_{x}$ as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, no\u2093 as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NO\u2093 as N", "fraction": "total"}, {"name": "nitrogen, total", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", "fraction": "total"}, {"name": "total nitrogen", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", "fraction": "total"}, {"name": "nitrogen, ammonia as n", "tex": "Nitrogen, Ammonia as N", "units": "mg/L", "unicode": "Nitrogen, Ammonia as N", "fraction": "total"}, {"name": "nitrogen, ammonium (nh4) as n", "tex": "Nitrogen, Ammonium (NH4) as N", "units": "mg/L", "unicode": "Nitrogen, Ammonium (NH\u2084) as N", "fraction": "total"}, {"name": "nitrogen, ammonium (nh4) as nh4", "tex": "Nitrogen, Ammonium (NH$_{4}$) as NH$_{4}$", "units": "mg/L", "unicode": "Ammonium (NH\u2084) as NH\u2084", "fraction": "total"}, {"name": "nitrogen, unionized ammonia (nh3) as n", "tex": "Nitrogen, Unionized Ammonia (NH$_{3}$) as N", "units": "mg/L", "unicode": "Unionized Ammonia (NH\u2083) as N", "fraction": "total"}, {"name": "nitrogen, ammonia (nh3) as nh3", "tex": "Nitrogen, Ammonia (NH$_{3}$) as NH3", "units": "mg/L", "unicode": "Nitrogen, Ammonia (NH\u2083) as NH\u2083", "fraction": "total"}, {"name": "oil range organics", "tex": "Oil Range Organics", "units": "ug/L", "unicode": "Organics, Oil Range", "fraction": "total"}, {"name": "oil and grease", "tex": "Oil and Grease", "units": "mg/L", "unicode": "Oil and Grease", "fraction": "total"}, {"name": "organic nitrogen, dissolved", "tex": "Dissolved Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", "fraction": "dissolved"}, {"name": "nitrogen, dissolved inorganic", "tex": "Nitrogen, Dissolved Inorganic", "units": "mg/L", "unicode": "Nitrogen, Inorganic", "fraction": "dissolved"}, {"name": "organic nitrogen, total", "tex": "Total Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", "fraction": "total"}, {"name": "organic carbon, dissolved", "tex": "Dissolved Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic", "fraction": "dissolved"}, {"name": "organic carbon, total", "tex": "Total Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic ", "fraction": "total"}, {"name": "oro", "tex": "ORO", "units": "ug/L", "unicode": "ORO", "fraction": "total"}, {"name": "oxidation reduction potential (orp)", "tex": "Oxidation Reduction Potential (ORP)", "units": "mV", "unicode": "Oxidation Reduction Potential (ORP)", "fraction": "total"}, {"name": "p-isopropyltoluene", "tex": "p-Isopropyltoluene", "units": "ug/L", "unicode": "p-Isopropyltoluene", "fraction": "total"}, {"name": "p,p'-dde", "tex": "p,p'-DDE", "units": "ug/L", "unicode": "p,p'-DDE", "fraction": "total"}, {"name": "pbp", "tex": "PBP", "units": "ug/L", "unicode": "PBP", "fraction": "total"}, {"name": "pentachlorophenol", "tex": "Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", "fraction": "total"}, {"name": "pentachlorophenol, dissolved", "tex": "Dissolved Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", "fraction": "dissolved"}, {"name": "phenanthrene", "tex": "Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "total"}, {"name": "phenanthrene, dissolved", "tex": "Dissolved Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "dissolved"}, {"name": "phenanthrene, suspended", "tex": "Suspended Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", "fraction": "suspended"}, {"name": "phenol", "tex": "Phenol", "units": "ug/L", "unicode": "Phenol", "fraction": "total"}, {"name": "phenols", "tex": "Phenols", "units": "ug/L", "unicode": "Phenols", "fraction": "total"}, {"name": "phosphate-phosphorus", "tex": "Phosphate-Phosphorus", "units": "mg/L", "unicode": "Phosphate-Phosphorus", "fraction": "total"}, {"name": "phosphorus as p, dissolved", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "dissolved"}, {"name": "dissolved phosphorus as p", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "dissolved"}, {"name": "phosphorus as p, suspended", "tex": "Suspended Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "suspended"}, {"name": "phosphorus as p, total", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "total"}, {"name": "total phosphorus as p", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "total"}, {"name": "phosphorus as po4, total", "tex": "Total Phosphorus as PO4", "units": "mg/L", "unicode": "Phosphorus as PO\u2084", "fraction": "total"}, {"name": "phosphorus, particulate organic", "tex": "Phosphorus, Particulate Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "particulate"}, {"name": "phosphorus, particulate", "tex": "Phosphorus, Particulate", "units": "mg/L", "unicode": "Phosphorus as P", "fraction": "particulate"}, {"name": "phosphorus, organic", "tex": "Phosphorus, Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "total"}, {"name": "phosphorus, soluble reactive (srp)", "tex": "Phosphorus, Soluble Reactive (SRP)", "units": "mg/L", "unicode": "Phosphorus, Soluble Reactive (SRP)", "fraction": "total"}, {"name": "phosphorus, organic as p, dissolved", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "dissolved"}, {"name": "dissolved phosphorus, organic as p", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", "fraction": "dissolved"}, {"name": "phosphorus, orthophosphate as p", "tex": "Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "total"}, {"name": "phosphorus, orthophosphate as p, dissolved", "tex": "Dissolved Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "dissolved"}, {"name": "phosphorus, orthophosphate as p, suspended", "tex": "Suspended Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", "fraction": "suspended"}, {"name": "phosphorus, orthophosphate as po4", "tex": "Phosphorus, Orthophosphate as PO$_{4}$", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as PO\u2084", "fraction": "total"}, {"name": "polycyclic aromatic hydrocarbons", "tex": "Polycyclic Aromatic Hydrocarbons", "units": "ug/L", "unicode": "Polycyclic Aromatic Hydrocarbons", "fraction": "total"}, {"name": "potassium, dissolved", "tex": "Dissolved Potassium", "units": "mg/L", "unicode": "Potassium", "fraction": "dissolved"}, {"name": "potassium, total", "tex": "Total Potassium", "units": "mg/L", "unicode": "Potassium", "fraction": "total"}, {"name": "prometryn", "tex": "Prometryn", "units": "ug/L", "unicode": "Prometryn", "fraction": "total"}, {"name": "pyrene", "tex": "Pyrene", "units": "ug/L", "unicode": "Pyrene", "fraction": "total"}, {"name": "pyrene, suspended", "tex": "Suspended Pyrene", "units": "ug/L", "unicode": "Pyrene", "fraction": "suspended"}, {"name": "relative toxicity (i 25% reduction)", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", "fraction": "total"}, {"name": "relative toxicity (i 25% reduction), filtered", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION, filtered)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", "fraction": "suspended"}, {"name": "ssc-total coarse fraction (>63um)", "tex": "SSC-Total Coarse Fraction ($>63$ \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Coarse Fraction (>63 \u00b5m)", "fraction": "total"}, {"name": "ssc-total fine fraction (<63um)", "tex": "SSC-Total Fine Fraction (<63 \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Fine Fraction (<63 \u00b5m)", "fraction": "total"}, {"name": "ssc-total particulate solids", "tex": "SSC-Total Particulate Solids", "units": "mg/L", "unicode": "SSC-Total Particulate Solids", "fraction": "total"}, {"name": "ssc <2000 microns", "tex": "SSC $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <2000 \u00b5m", "fraction": "total"}, {"name": "ssc <1000 microns", "tex": "SSC $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <1000 \u00b5m", "fraction": "total"}, {"name": "ssc <500 microns", "tex": "SSC $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <500 \u00b5m", "fraction": "total"}, {"name": "ssc <250 microns", "tex": "SSC $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <250 \u00b5m", "fraction": "total"}, {"name": "ssc <100 microns", "tex": "SSC $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <100 \u00b5m", "fraction": "total"}, {"name": "ssc <62.5 microns", "tex": "SSC $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <62.5 \u00b5m", "fraction": "total"}, {"name": "ssc <50 microns", "tex": "SSC $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <50 \u00b5m", "fraction": "total"}, {"name": "ssc <25 microns", "tex": "SSC $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <25 \u00b5m", "fraction": "total"}, {"name": "tvss <2000 microns", "tex": "TVSS $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <2000 \u00b5m", "fraction": "total"}, {"name": "tvss <1000 microns", "tex": "TVSS $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <1000 \u00b5m", "fraction": "total"}, {"name": "tvss <500 microns", "tex": "TVSS $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <500 \u00b5m", "fraction": "total"}, {"name": "tvss <250 microns", "tex": "TVSS $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <250 \u00b5m", "fraction": "total"}, {"name": "tvss <100 microns", "tex": "TVSS $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <100 \u00b5m", "fraction": "total"}, {"name": "tvss <62.5 microns", "tex": "TVSS $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <62.5 \u00b5m", "fraction": "total"}, {"name": "tvss <50 microns", "tex": "TVSS $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <50 \u00b5m", "fraction": "total"}, {"name": "tvss <25 microns", "tex": "TVSS $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <25 \u00b5m", "fraction": "total"}, {"name": "sand", "tex": "Sand", "units": "mg/L", "unicode": "Sand", "fraction": "total"}, {"name": "sec-butylbenzene", "tex": "Sec-Butylbenzene", "units": "ug/L", "unicode": "Sec-Butylbenzene", "fraction": "total"}, {"name": "selenium, dissolved", "tex": "Dissolved Selenium", "units": "ug/L", "unicode": "Selenium", "fraction": "dissolved"}, {"name": "selenium, total", "tex": "Total Selenium", "units": "ug/L", "unicode": "Selenium", "fraction": "total"}, {"name": "settleable solids", "tex": "Settleable Solids", "units": "mg/L", "unicode": "Settleable Solids", "fraction": "total"}, {"name": "silt", "tex": "Silt", "units": "mg/L", "unicode": "Silt", "fraction": "total"}, {"name": "silver, dissolved", "tex": "Dissolved Silver", "units": "ug/L", "unicode": "Silver", "fraction": "dissolved"}, {"name": "silver, total", "tex": "Total Silver", "units": "ug/L", "unicode": "Silver", "fraction": "total"}, {"name": "simazine", "tex": "Simazine", "units": "ug/L", "unicode": "Simazine", "fraction": "total"}, {"name": "sodium, dissolved", "tex": "Dissolved Sodium", "units": "mg/L", "unicode": "Sodium", "fraction": "dissolved"}, {"name": "sodium, total", "tex": "Total Sodium", "units": "mg/L", "unicode": "Sodium", "fraction": "total"}, {"name": "specific conductance", "tex": "Specific Conductance", "units": "umhos/cm", "unicode": "Specific Conductance", "fraction": "total"}, {"name": "styrene", "tex": "Styrene", "units": "ug/L", "unicode": "Styrene", "fraction": "total"}, {"name": "sulfate, dissolved", "tex": "Dissolved Sulfate", "units": "mg/L", "unicode": "Sulfate", "fraction": "dissolved"}, {"name": "sulfate, total", "tex": "Total Sulfate", "units": "mg/L", "unicode": "Sulfate", "fraction": "total"}, {"name": "sulfide, total", "tex": "Total Sulfide", "units": "mg/L", "unicode": "Sulfide", "fraction": "total"}, {"name": "surfactants", "tex": "Surfactants", "units": "ug/L", "unicode": "Surfactants", "fraction": "total"}, {"name": "suspended sediment concentration (ssc)", "tex": "Suspended Sediment Concentration", "units": "mg/L", "unicode": "Suspended Sediment Concentration", "fraction": "total"}, {"name": "temperature, water", "tex": "Temperature, water", "units": "deg C", "unicode": "Temperature, Water", "fraction": "total"}, {"name": "tetrachloroethane", "tex": "Tetrachloroethane", "units": "ug/L", "unicode": "Tetrachloroethane", "fraction": "total"}, {"name": "tetrachloroethylene", "tex": "Tetrachloroethylene", "units": "ug/L", "unicode": "Tetrachloroethylene", "fraction": "total"}, {"name": "thallium, dissolved", "tex": "Dissolved Thallium", "units": "ug/L", "unicode": "Thallium", "fraction": "dissolved"}, {"name": "thallium, total", "tex": "Total Thallium", "units": "ug/L", "unicode": "Thallium", "fraction": "total"}, {"name": "toluene", "tex": "Toluene", "units": "ug/L", "unicode": "Toluene", "fraction": "total"}, {"name": "total coliform", "tex": "Total Coliform", "units": "MPN/100 mL", "unicode": "Total Coliform", "fraction": "total"}, {"name": "total dissolved solids", "tex": "Total Dissolved Solids", "units": "mg/L", "unicode": "Total Dissolved Solids", "fraction": "total"}, {"name": "total solids", "tex": "Total Solids", "units": "mg/L", "unicode": "Total Solids", "fraction": "total"}, {"name": "total suspended solids", "tex": "Total Suspended Solids", "units": "mg/L", "unicode": "Total Suspended Solids", "fraction": "total"}, {"name": "total volatile solids", "tex": "Total Volatile Solids", "units": "mg/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "total volatile solids, filterable", "tex": "Total Volatile Solids (filterable)", "units": "mg/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "toxaphene", "tex": "Toxaphene", "units": "ug/L", "unicode": "Toxaphene", "fraction": "total"}, {"name": "tribromomethane", "tex": "Tribromomethane", "units": "ug/L", "unicode": "Tribromomethane", "fraction": "total"}, {"name": "trichloroethane", "tex": "Trichloroethane", "units": "ug/L", "unicode": "Trichloroethane", "fraction": "total"}, {"name": "trichloroethylene", "tex": "Trichloroethylene", "units": "ug/L", "unicode": "Trichloroethylene", "fraction": "total"}, {"name": "trichlorofuoromethane", "tex": "Trichlorofuoromethane", "units": "ug/L", "unicode": "Trichlorofuoromethane", "fraction": "total"}, {"name": "trichlorotrifluoroethane", "tex": "Trichlorotrifluoroethane", "units": "ug/L", "unicode": "Trichlorotrifluoroethane", "fraction": "total"}, {"name": "trihalomethanes", "tex": "Trihalomethanes", "units": "ug/L", "unicode": "Trihalomethanes", "fraction": "total"}, {"name": "true color", "tex": "True Color", "units": "ADMI Value", "unicode": "True Color", "fraction": "total"}, {"name": "true color, filtered", "tex": "Filtered True Color", "units": "ADMI Value", "unicode": "Filtered True Color", "fraction": "total"}, {"name": "turbidity", "tex": "Turbidity", "units": "NT", "unicode": "Turbidity", "fraction": "total"}, {"name": "turbidity, filtered", "tex": "Filtered Turbidity", "units": "NT", "unicode": "Filtered Turbidity", "fraction": "total"}, {"name": "vanadium, total", "tex": "Total Vanadium", "units": "ug/L", "unicode": "Vanadium", "fraction": "total"}, {"name": "vinyl acetate", "tex": "Vinyl Acetate", "units": "ug/L", "unicode": "Vinyl Acetate", "fraction": "total"}, {"name": "vinyl chloride", "tex": "Vinyl Chloride", "units": "ug/L", "unicode": "Vinyl Chloride", "fraction": "total"}, {"name": "xylenes, total", "tex": "Total Xylenes", "units": "ug/L", "unicode": "Total Xylenes", "fraction": "total"}, {"name": "zinc, dissolved", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "dissolved"}, {"name": "zinc, suspended", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "suspended"}, {"name": "zinc, total", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "total"}, {"name": "dissolved zinc", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "dissolved"}, {"name": "suspended zinc", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "suspended"}, {"name": "total zinc", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", "fraction": "total"}, {"name": "alpha-chlordane", "tex": "alpha-chlordane", "units": "ug/L", "unicode": "alpha-chlordane", "fraction": "total"}, {"name": "cis-1,2-dichloroethylene", "tex": "cis-1,2-Dichloroethylene", "units": "ug/L", "unicode": "cis-1,2-Dichloroethylene", "fraction": "total"}, {"name": "cis-1,3-dichloropropene", "tex": "cis-1,3-Dichloropropene", "units": "ug/L", "unicode": "cis-1,3-Dichloropropene", "fraction": "total"}, {"name": "di-n-butyl phthalate", "tex": "di-n-Butyl Phthalate", "units": "ug/L", "unicode": "di-n-Butyl Phthalate", "fraction": "total"}, {"name": "gamma-chlordane", "tex": "Gamma-Chlordane", "units": "ug/L", "unicode": "Gamma-Chlordane", "fraction": "total"}, {"name": "m-dichlorobenzene", "tex": "m-Dichlorobenzene", "units": "ug/L", "unicode": "m-Dichlorobenzene", "fraction": "total"}, {"name": "m-nitroaniline", "tex": "m-Nitroaniline", "units": "ug/L", "unicode": "m-Nitroaniline", "fraction": "total"}, {"name": "m-xylene", "tex": "m-Xylene", "units": "ug/L", "unicode": "m-Xylene", "fraction": "total"}, {"name": "n-butylbenzene", "tex": "n-Butylbenzene", "units": "ug/L", "unicode": "n-Butylbenzene", "fraction": "total"}, {"name": "n-propylbenzene", "tex": "n-Propylbenzene", "units": "ug/L", "unicode": "n-Propylbenzene", "fraction": "total"}, {"name": "o-chlorotoluene", "tex": "o-Chlorotoluene", "units": "ug/L", "unicode": "o-Chlorotoluene", "fraction": "total"}, {"name": "o-dichlorobenzene", "tex": "o-Dichlorobenzene", "units": "ug/L", "unicode": "o-Dichlorobenzene", "fraction": "total"}, {"name": "o-xylene", "tex": "o-Xylene", "units": "ug/L", "unicode": "o-Xylene", "fraction": "total"}, {"name": "p-bromophenyl phenyl ether", "tex": "p-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Bromophenyl Phenyl Ether", "fraction": "total"}, {"name": "p-chlorophenyl phenyl ether", "tex": "p-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Chlorophenyl Phenyl Ether", "fraction": "total"}, {"name": "p-chlorotoluene", "tex": "p-Chlorotoluene", "units": "ug/L", "unicode": "p-Chlorotoluene", "fraction": "total"}, {"name": "p-cymene", "tex": "p-Cymene", "units": "ug/L", "unicode": "p-Cymene", "fraction": "total"}, {"name": "p-dichlorobenzene", "tex": "p-Dichlorobenzene", "units": "ug/L", "unicode": "p-Dichlorobenzene", "fraction": "total"}, {"name": "p-nitrophenol", "tex": "p-Nitrophenol", "units": "ug/L", "unicode": "p-Nitrophenol", "fraction": "total"}, {"name": "p-xylene", "tex": "p-Xylene", "units": "ug/L", "unicode": "p-Xylene", "fraction": "total"}, {"name": "ph", "tex": "pH", "units": "S", "unicode": "pH", "fraction": "total"}, {"name": "protons", "tex": "Protons (Hydrogen Ions)", "units": "mg/L", "unicode": "Protons (Hydrogen Ions)", "fraction": "total"}, {"name": "tert-butylbenzene", "tex": "Tertiary Butylbenzene", "units": "ug/L", "unicode": "Tertiary Butylbenzene", "fraction": "total"}, {"name": "total petroleum hydrocarbons - motor oil range", "tex": "Total Petroleum Hydrocarbons (motor oil range)", "units": "ug/L", "unicode": "Organics, Motor Oil Range", "fraction": "total"}, {"name": "trans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylene", "fraction": "total"}, {"name": "trans-1,3-dichloropropene", "tex": "trans-1,3-Dichloropropene", "units": "ug/L", "unicode": "trans-1,3-Dichloropropene", "fraction": "total"}, {"name": "trans-1,4-dichloro-2-butene", "tex": "trans-1,4-Dichloro-2-butene", "units": "ug/L", "unicode": "trans-1,4-Dichloro-2-butene", "fraction": "total"}, {"name": "dibenzo[b,k]fluoranthene", "tex": "Dibenzo[b,k]fluoranthene", "units": "ug/L", "unicode": "Dibenzo[b,k]fluoranthene", "fraction": "total"}, {"name": "dichlobenil", "tex": "Dichlobenil", "units": "ug/L", "unicode": "Dichlobenil", "fraction": "total"}, {"name": "prometon", "tex": "Prometon", "units": "ug/L", "unicode": "Prometon", "fraction": "total"}, {"name": "total volatile solids, non-filterable", "tex": "Total Volatile Solids (non-filterable)", "units": "ug/L", "unicode": "Total Volatile Solids", "fraction": "total"}, {"name": "benzo(b/j)fluoranthene", "tex": "Benzo(b/j)fluoranthene", "units": "ug/L", "unicode": "Benzo(b/j)fluoranthene", "fraction": "total"}, {"name": "bismuth", "tex": "Bismuth", "units": "ug/L", "unicode": "Bismuth", "fraction": "total"}, {"name": "boron", "tex": "Boron", "units": "ug/L", "unicode": "Boron", "fraction": "total"}, {"name": "lithium, total", "tex": "Lithium, Total", "units": "ug/L", "unicode": "Lithium", "fraction": "total"}, {"name": "silicon", "tex": "Silicon", "units": "ug/L", "unicode": "Silicon", "fraction": "total"}, {"name": "strontium", "tex": "Strontium", "units": "ug/L", "unicode": "Strontium", "fraction": "total"}, {"name": "tellurium", "tex": "Tellurium", "units": "ug/L", "unicode": "Tellurium", "fraction": "total"}, {"name": "tin, total", "tex": "Tin, Total", "units": "ug/L", "unicode": "Tin", "fraction": "total"}, {"name": "titanium, total", "tex": "Titanium, Total", "units": "ug/L", "unicode": "Titanium", "fraction": "total"}, {"name": "tungsten", "tex": "Tungsten", "units": "ug/L", "unicode": "Tungsten", "fraction": "total"}, {"name": "uranium-234/235/238", "tex": "Uranium-234/235/238", "units": "ug/L", "unicode": "Uranium", "fraction": "total"}, {"name": "uranium", "tex": "Uranium", "units": "ug/L", "unicode": "Uranium", "fraction": "total"}, {"name": "zirconium", "tex": "Zirconium", "units": "ug/L", "unicode": "Zirconium", "fraction": "total"}, {"name": "cesium", "tex": "Cesium", "units": "ug/L", "unicode": "Cesium", "fraction": "total"}, {"name": "rubidium", "tex": "Rubidium", "units": "ug/L", "unicode": "Rubidium", "fraction": "total"}, {"name": "1,2-dibromo-3-chloropropane", "tex": "1,2-Dibromo-3-Chloropropane", "units": "ug/L", "unicode": "1,2-Dibromo-3-Chloropropane", "fraction": "total"}, {"name": "trans-1,2-dichloroethylenetrans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", "fraction": "total"}, {"name": "2,4,5-t", "tex": "2,4,5-T", "units": "ug/L", "unicode": "2,4,5-T", "fraction": "total"}, {"name": "2,4-db", "tex": "2,4-DB", "units": "ug/L", "unicode": "2,4-DB", "fraction": "total"}, {"name": "dalapon", "tex": "Dalapon", "units": "ug/L", "unicode": "Dalapon", "fraction": "total"}, {"name": "dicamba", "tex": "Dicamba", "units": "ug/L", "unicode": "Dicamba", "fraction": "total"}, {"name": "dichlorprop", "tex": "Dichlorprop", "units": "ug/L", "unicode": "Dichlorprop", "fraction": "total"}, {"name": "mcpa", "tex": "MCPA", "units": "ug/L", "unicode": "MCPA", "fraction": "total"}, {"name": "mecoprop", "tex": "Mecoprop", "units": "ug/L", "unicode": "Mecoprop", "fraction": "total"}, {"name": "sulfur", "tex": "Sulfur", "units": "ug/L", "unicode": "Sulfur", "fraction": "total"}, {"name": "m,p-xylenes", "tex": "m,p-Xylenes", "units": "ug/L", "unicode": "m,p-Xylenes", "fraction": "total"}, {"name": "silica", "tex": "Silica", "units": "ug/L", "unicode": "Silica", "fraction": "total"}, {"name": "nitrogen, dissolved", "tex": "Nitrogen, Dissolved", "units": "ug/L", "unicode": "Nitrogen", "fraction": "dissolved"}, {"name": "nitrogen, particulate", "tex": "Nitrogen, Particulate", "units": "ug/L", "unicode": "Nitrogen", "fraction": "particulate"}, {"name": "meta & para xylene mix", "tex": "meta & para Xylene mix", "units": "ug/L", "unicode": "m,p-Xylenes", "fraction": "total"}, {"name": "temperature, air", "tex": "Temperature, air", "units": "deg C", "unicode": "Temperature, Air", "fraction": "total"}, {"name": "gasoline range organics", "tex": "Gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", "fraction": "total"}, {"name": "particle size, percent > 50 microns", "tex": "Particle Size, Percent > 50 microns", "units": "ug/L", "unicode": "Particle Size, Percent >50 \u00b5m", "fraction": "total"}, {"name": "chlorophyll a, uncorrected for pheophytin", "tex": "Chlorophyll A (uncorrected for pheophytin)", "units": "ug/L", "unicode": "Chlorophyll A (uncorrected for pheophytin)", "fraction": "total"}, {"name": "1-methylphenanthrene", "tex": "1-Methylphenanthrene", "units": "ug/L", "unicode": "1-Methylphenanthrene", "fraction": "total"}, {"name": "2,6-dimethylnaphthalene", "tex": "2,6-Dimethylnaphthalene", "units": "ug/L", "unicode": "2,6-Dimethylnaphthalene", "fraction": "total"}, {"name": "benzo[e]pyrene", "tex": "Benzo[e]pyrene", "units": "ug/L", "unicode": "Benzo[e]pyrene", "fraction": "total"}, {"name": "bifenthrin by nci", "tex": "Bifenthrin by NCI", "units": "ug/L", "unicode": "Bifenthrin by NCI", "fraction": "total"}, {"name": "cobalt, dissolved", "tex": "Cobalt, Dissolved", "units": "ug/L", "unicode": "Cobalt", "fraction": "dissolved"}, {"name": "cyfluthrin by nci", "tex": "Cyfluthrin by NCI", "units": "ug/L", "unicode": "Cyfluthrin by NCI", "fraction": "total"}, {"name": "cypermethrin", "tex": "Cypermethrin", "units": "ug/L", "unicode": "Cypermethrin", "fraction": "total"}, {"name": "dibenzothiophene", "tex": "Dibenzothiophene", "units": "ug/L", "unicode": "Dibenzothiophene", "fraction": "total"}, {"name": "esfenvalerate", "tex": "Esfenvalerate", "units": "ug/L", "unicode": "Esfenvalerate", "fraction": "total"}, {"name": "fenvalerate", "tex": "Fenvalerate", "units": "ug/L", "unicode": "Fenvalerate", "fraction": "total"}, {"name": "l-cyhalothrin by nci", "tex": "L-Cyhalothrin by NCI", "units": "ug/L", "unicode": "L-Cyhalothrin by NCI", "fraction": "total"}, {"name": "molybdenum, dissolved", "tex": "Molybdenum, Dissolved", "units": "ug/L", "unicode": "Molybdenum", "fraction": "dissolved"}, {"name": "permethrin", "tex": "Permethrin", "units": "ug/L", "unicode": "Permethrin", "fraction": "total"}, {"name": "tin, dissolved", "tex": "Tin, Dissolved", "units": "ug/L", "unicode": "Tin", "fraction": "dissolved"}, {"name": "titanium, dissolved", "tex": "Titanium, Dissolved", "units": "ug/L", "unicode": "Titanium", "fraction": "dissolved"}, {"name": "vanadium, dissolved", "tex": "Vanadium, Dissolved", "units": "ug/L", "unicode": "Vanadium", "fraction": "dissolved"}, {"name": "cypermethrin by nci", "tex": "Cypermethrin by NCI", "units": "ug/L", "unicode": "Cypermethrin by NCI", "fraction": "total"}, {"name": "bicarbonate", "tex": "Bicarbonate", "units": "ug/L", "unicode": "Bicarbonate", "fraction": "total"}, {"name": "Campylobacter spp.", "tex": "Campylobacter spp.", "units": "MPN/100 mL", "unicode": "Campylobacter spp.", "fraction": "total"}, {"name": "C. dubia % survival (100% sample)", "tex": "c. dubia % survival (100% sample)", "units": "%", "unicode": "c. dubia % survival (100% sample)", "fraction": "total"}, {"name": "C. dubia reproduction, % control (100% sample)", "tex": "C. dubia reproduction, % control (100% sample)", "units": "%", "unicode": "C. dubia reproduction, % control (100% sample)", "fraction": "total"}, {"name": "d8-acenaphthylene", "tex": "D8-Acenaphthylene", "units": "ug/L", "unicode": "D8-Acenaphthylene", "fraction": "total"}, {"name": "d10-anthracene", "tex": "D10-Anthracene", "units": "ug/L", "unicode": "D10-Anthracene", "fraction": "total"}, {"name": "d14-terphenyl (fs)", "tex": "D14-Terphenyl (FS)", "units": "ug/L", "unicode": "D14-Terphenyl (FS)", "fraction": "total"}, {"name": "particle size, % <0.21 um, >0.10 um", "tex": "Particle Size, % <0.21 um, >0.10 um", "units": "mg/L", "unicode": "Particle Size, % <0.21 \u00b5m, >0.10 \u00b5m", "fraction": "total"}, {"name": "particle size, d50", "tex": "Particle Size, D50", "units": "\u03bcm", "unicode": "Particle Size, D50", "fraction": "total"}, {"name": "% sand, very coarse (1000-2000um)", "tex": "Percent sand, very coarse (1000-2000 \\si[per-mode=symbol]{\\micro\\meter})", "units": "%", "unicode": "Percent sand, very coarse (1000-2000 \u00b5m)", "fraction": "total"}, {"name": "echinoderm fertilization (50% sample)", "tex": "Echinoderm fertilization (50% sample)", "units": "NS", "unicode": "Echinoderm fertilization (50% sample)", "fraction": "total"}] \ No newline at end of file +[ + { + "name": "1,1,1,2-tetrachloroethane", + "tex": "1,1,1,2-Tetrachloroethane", + "units": "ug/L", + "unicode": "1,1,1,2-Tetrachloroethane", + "fraction": "total" + }, + { + "name": "1,1,1-trichloroethane", + "tex": "1,1,1-Trichloroethane", + "units": "ug/L", + "unicode": "1,1,1-Trichloroethane", + "fraction": "total" + }, + { + "name": "1,1,2,2-tetrachloroethane", + "tex": "1,1,2,2-Tetrachloroethane", + "units": "ug/L", + "unicode": "1,1,2,2-Tetrachloroethane", + "fraction": "total" + }, + { + "name": "1,1,2-trichloroethane", + "tex": "1,1,2-Trichloroethane", + "units": "ug/L", + "unicode": "1,1,2-Trichloroethane", + "fraction": "total" + }, + { + "name": "1,1-dichloroethane", + "tex": "1,1-Dichloroethane", + "units": "ug/L", + "unicode": "1,1-Dichloroethane", + "fraction": "total" + }, + { + "name": "1,1-dichloroethylene", + "tex": "1,1-Dichloroethylene", + "units": "ug/L", + "unicode": "1,1-Dichloroethylene", + "fraction": "total" + }, + { + "name": "1,1-dichloropropene", + "tex": "1,1-Dichloropropene", + "units": "ug/L", + "unicode": "1,1-Dichloropropene", + "fraction": "total" + }, + { + "name": "1,2,3-trichlorobenzene", + "tex": "1,2,3-Trichlorobenzene", + "units": "ug/L", + "unicode": "1,2,3-Trichlorobenzene", + "fraction": "total" + }, + { + "name": "1,2,3-trichloropropane", + "tex": "1,2,3-Trichloropropane", + "units": "ug/L", + "unicode": "1,2,3-Trichloropropane", + "fraction": "total" + }, + { + "name": "1,2,4-trichlorobenzene", + "tex": "1,2,4-Trichlorobenzene", + "units": "ug/L", + "unicode": "1,2,4-Trichlorobenzene", + "fraction": "total" + }, + { + "name": "1,2,4-trimethylbenzene", + "tex": "1,2,4-Trimethylbenzene", + "units": "ug/L", + "unicode": "1,2,4-Trimethylbenzene", + "fraction": "total" + }, + { + "name": "1,2-benzanthracene", + "tex": "1,2-Benzanthracene", + "units": "ug/L", + "unicode": "1,2-Benzanthracene", + "fraction": "total" + }, + { + "name": "1,2-dibromoethane", + "tex": "1,2-Dibromoethane", + "units": "ug/L", + "unicode": "1,2-Dibromoethane", + "fraction": "total" + }, + { + "name": "1,2-dichlorobenzene", + "tex": "1,2-Dichlorobenzene", + "units": "ug/L", + "unicode": "1,2-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "1,2-dichloroethane", + "tex": "1,2-Dichloroethane", + "units": "ug/L", + "unicode": "1,2-Dichloroethane", + "fraction": "total" + }, + { + "name": "1,2-dichloropropane", + "tex": "1,2-Dichloropropane", + "units": "ug/L", + "unicode": "1,2-Dichloropropane", + "fraction": "total" + }, + { + "name": "1,2-diphenylhydrazine", + "tex": "1,2-Diphenylhydrazine", + "units": "ug/L", + "unicode": "1,2-Diphenylhydrazine", + "fraction": "total" + }, + { + "name": "1,3,5-trimethylbenzene", + "tex": "1,3,5-Trimethylbenzene", + "units": "ug/L", + "unicode": "1,3,5-Trimethylbenzene", + "fraction": "total" + }, + { + "name": "1,3-dichlorobenzene", + "tex": "1,3-Dichlorobenzene", + "units": "ug/L", + "unicode": "1,3-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "1,3-dichloropropane", + "tex": "1,3-Dichloropropane", + "units": "ug/L", + "unicode": "1,3-Dichloropropane", + "fraction": "total" + }, + { + "name": "1,4-dichlorobenzene", + "tex": "1,4-Dichlorobenzene", + "units": "ug/L", + "unicode": "1,4-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "1-chlorohexane", + "tex": "1-Chlorohexane", + "units": "ug/L", + "unicode": "1-Chlorohexane", + "fraction": "total" + }, + { + "name": "1-methylnaphthalene", + "tex": "1-Methylnaphthalene", + "units": "ug/L", + "unicode": "1-Methylnaphthalene", + "fraction": "total" + }, + { + "name": "2,2-dichloropropane", + "tex": "2,2-Dichloropropane", + "units": "ug/L", + "unicode": "2,2-Dichloropropane", + "fraction": "total" + }, + { + "name": "2,4'-ddd", + "tex": "2,4'-DDD", + "units": "ug/L", + "unicode": "2,4'-DDD", + "fraction": "total" + }, + { + "name": "2,4'-dde", + "tex": "2,4'-DDE", + "units": "ug/L", + "unicode": "2,4'-DDE", + "fraction": "total" + }, + { + "name": "2,4'-ddt", + "tex": "2,4'-DDT", + "units": "ug/L", + "unicode": "2,4'-DDT", + "fraction": "total" + }, + { + "name": "2,4,5-tp-silvex", + "tex": "2,4,5-TP-SILVEX", + "units": "ug/L", + "unicode": "2,4,5-TP-Silvex", + "fraction": "total" + }, + { + "name": "2,4,5-trichlorophenol", + "tex": "2,4,5-Trichlorophenol", + "units": "ug/L", + "unicode": "2,4,5-Trichlorophenol", + "fraction": "total" + }, + { + "name": "2,4,6-trichlorophenol", + "tex": "2,4,6-Trichlorophenol", + "units": "ug/L", + "unicode": "2,4,6-Trichlorophenol", + "fraction": "total" + }, + { + "name": "2,4-d", + "tex": "2,4-D", + "units": "ug/L", + "unicode": "2,4-D", + "fraction": "total" + }, + { + "name": "2,4-dichlorophenol", + "tex": "2,4-Dichlorophenol", + "units": "ug/L", + "unicode": "2,4-Dichlorophenol", + "fraction": "total" + }, + { + "name": "2,4-dinitrophenol", + "tex": "2,4-Dinitrophenol", + "units": "ug/L", + "unicode": "2,4-Dinitrophenol", + "fraction": "total" + }, + { + "name": "2,4-dinitrotoluene", + "tex": "2,4-Dinitrotoluene", + "units": "ug/L", + "unicode": "2,4-Dinitrotoluene", + "fraction": "total" + }, + { + "name": "2,4-dimethylphenol", + "tex": "2,4-Dimethylphenol", + "units": "ug/L", + "unicode": "2,4-Dimethylphenol", + "fraction": "total" + }, + { + "name": "2,6-dinitrotoluene", + "tex": "2,6-Dinitrotoluene", + "units": "ug/L", + "unicode": "2,6-Dinitrotoluene", + "fraction": "total" + }, + { + "name": "2-butanone", + "tex": "2-Butanone", + "units": "ug/L", + "unicode": "2-Butanone", + "fraction": "total" + }, + { + "name": "2-chloroethyl vinyl ether", + "tex": "2-Chloroethyl Vinyl Ether", + "units": "ug/L", + "unicode": "2-Chloroethyl Vinyl Ether", + "fraction": "total" + }, + { + "name": "2-chloronaphthalene", + "tex": "2-Chloronaphthalene", + "units": "ug/L", + "unicode": "2-Chloronaphthalene", + "fraction": "total" + }, + { + "name": "2-chlorophenol", + "tex": "2-Chlorophenol", + "units": "ug/L", + "unicode": "2-Chlorophenol", + "fraction": "total" + }, + { + "name": "2-chlorotoluene", + "tex": "2-Chlorotoluene", + "units": "ug/L", + "unicode": "2-Chlorotoluene", + "fraction": "total" + }, + { + "name": "2-hexanone", + "tex": "2-Hexanone", + "units": "ug/L", + "unicode": "2-Hexanone", + "fraction": "total" + }, + { + "name": "2-methylnaphthalene", + "tex": "2-Methylnaphthalene", + "units": "ug/L", + "unicode": "2-Methylnaphthalene", + "fraction": "total" + }, + { + "name": "2-nitrophenol", + "tex": "2-Nitrophenol", + "units": "ug/L", + "unicode": "2-Nitrophenol", + "fraction": "total" + }, + { + "name": "3,3'-dichlorobenzidine", + "tex": "3,3'-Dichlorobenzidine", + "units": "ug/L", + "unicode": "3,3'-Dichlorobenzidine", + "fraction": "total" + }, + { + "name": "4,4'-ddd", + "tex": "4,4'-DDD", + "units": "ug/L", + "unicode": "4,4'-DDD", + "fraction": "total" + }, + { + "name": "4,4'-dde", + "tex": "4,4'-DDE", + "units": "ug/L", + "unicode": "4,4'-DDE", + "fraction": "total" + }, + { + "name": "4,4'-ddt", + "tex": "4,4'-DDT", + "units": "ug/L", + "unicode": "4,4'-DDT", + "fraction": "total" + }, + { + "name": "4,6-dinitro-2-methylphenol", + "tex": "4,6-Dinitro-2-methylphenol", + "units": "ug/L", + "unicode": "4,6-Dinitro-2-methylphenol", + "fraction": "total" + }, + { + "name": "4,6-dinitro-o-cresol", + "tex": "4,6-Dinitro-o-cresol", + "units": "ug/L", + "unicode": "4,6-Dinitro-o-cresol", + "fraction": "total" + }, + { + "name": "4-bromophenyl phenyl ether", + "tex": "4-Bromophenyl Phenyl Ether", + "units": "ug/L", + "unicode": "4-Bromophenyl Phenyl Ether", + "fraction": "total" + }, + { + "name": "4-chlorophenyl phenyl ether", + "tex": "4-Chlorophenyl Phenyl Ether", + "units": "ug/L", + "unicode": "4-Chlorophenyl Phenyl Ether", + "fraction": "total" + }, + { + "name": "4-chlorotoluene", + "tex": "4-Chlorotoluene", + "units": "ug/L", + "unicode": "4-Chlorotoluene", + "fraction": "total" + }, + { + "name": "4-nitrophenol", + "tex": "4-Nitrophenol", + "units": "ug/L", + "unicode": "4-Nitrophenol", + "fraction": "total" + }, + { + "name": "4-chloro-3-methylphenol", + "tex": "4-Chloro-3-Methylphenol", + "units": "ug/L", + "unicode": "4-Chloro-3-Methylphenol", + "fraction": "total" + }, + { + "name": "4-chloro-3-methylphenol, dissolved", + "tex": "Dissolved 4-Chloro-3-Methylphenol", + "units": "ug/L", + "unicode": "4-Chloro-3-Methylphenol", + "fraction": "dissolved" + }, + { + "name": "4-hydroxy-4-methyl-2-pentanone", + "tex": "4-Hydroxy-4-Methyl-2-Pentanone", + "units": "ug/L", + "unicode": "4-Hydroxy-4-Methyl-2-Pentanone", + "fraction": "total" + }, + { + "name": "acenaphthene", + "tex": "Acenaphthene", + "units": "ug/L", + "unicode": "Acenaphthene", + "fraction": "total" + }, + { + "name": "acenaphthene, dissolved", + "tex": "Dissolved Acenaphthene", + "units": "ug/L", + "unicode": "Acenaphthene", + "fraction": "dissolved" + }, + { + "name": "acenaphthylene", + "tex": "Acenaphthylene", + "units": "ug/L", + "unicode": "Acenaphthylene", + "fraction": "total" + }, + { + "name": "acenaphthylene, suspended", + "tex": "Suspended Acenaphthylene", + "units": "ug/L", + "unicode": "Acenaphthylene", + "fraction": "suspended" + }, + { + "name": "acetone", + "tex": "Acetone", + "units": "ug/L", + "unicode": "Acetone", + "fraction": "total" + }, + { + "name": "acrolein", + "tex": "Acrolein", + "units": "ug/L", + "unicode": "Acrolein", + "fraction": "total" + }, + { + "name": "acrylonitrile", + "tex": "Acrylonitrile", + "units": "ug/L", + "unicode": "Acrylonitrile", + "fraction": "total" + }, + { + "name": "alachlor", + "tex": "Alachlor", + "units": "ug/L", + "unicode": "Alachlor", + "fraction": "total" + }, + { + "name": "aldrin", + "tex": "Aldrin", + "units": "ug/L", + "unicode": "Aldrin", + "fraction": "total" + }, + { + "name": "alkalinity", + "tex": "Alkalinity", + "units": "mg/L", + "unicode": "Alkalinity", + "fraction": "total" + }, + { + "name": "alkalinity, carbonate as caco3", + "tex": "Alkalinity, Carbonate as CaCO$_{3}$", + "units": "mg/L", + "unicode": "Alkalinity, Carbonate as CaCO₃", + "fraction": "total" + }, + { + "name": "aluminum, dissolved", + "tex": "Dissolved Aluminum", + "units": "ug/L", + "unicode": "Aluminum", + "fraction": "dissolved" + }, + { + "name": "aluminum, total", + "tex": "Total Aluminum", + "units": "ug/L", + "unicode": "Aluminum", + "fraction": "total" + }, + { + "name": "anthracene", + "tex": "Anthracene", + "units": "ug/L", + "unicode": "Anthracene", + "fraction": "total" + }, + { + "name": "anthracene, suspended", + "tex": "Suspended Anthracene", + "units": "ug/L", + "unicode": "Anthracene", + "fraction": "suspended" + }, + { + "name": "antimony, dissolved", + "tex": "Dissolved Antimony", + "units": "ug/L", + "unicode": "Antimony", + "fraction": "dissolved" + }, + { + "name": "antimony, total", + "tex": "Total Antimony", + "units": "ug/L", + "unicode": "Antimony", + "fraction": "total" + }, + { + "name": "aroclor 1016", + "tex": "Aroclor 1016", + "units": "ug/L", + "unicode": "Aroclor 1016", + "fraction": "total" + }, + { + "name": "aroclor 1221", + "tex": "Aroclor 1221", + "units": "ug/L", + "unicode": "Aroclor 1221", + "fraction": "total" + }, + { + "name": "aroclor 1232", + "tex": "Aroclor 1232", + "units": "ug/L", + "unicode": "Aroclor 1232", + "fraction": "total" + }, + { + "name": "aroclor 1242", + "tex": "Aroclor 1242", + "units": "ug/L", + "unicode": "Aroclor 1242", + "fraction": "total" + }, + { + "name": "aroclor 1248", + "tex": "Aroclor 1248", + "units": "ug/L", + "unicode": "Aroclor 1248", + "fraction": "total" + }, + { + "name": "aroclor 1254", + "tex": "Aroclor 1254", + "units": "ug/L", + "unicode": "Aroclor 1254", + "fraction": "total" + }, + { + "name": "aroclor 1260", + "tex": "Aroclor 1260", + "units": "ug/L", + "unicode": "Aroclor 1260", + "fraction": "total" + }, + { + "name": "arsenic, dissolved", + "tex": "Dissolved Arsenic", + "units": "ug/L", + "unicode": "Arsenic", + "fraction": "dissolved" + }, + { + "name": "arsenic, total", + "tex": "Total Arsenic", + "units": "ug/L", + "unicode": "Arsenic", + "fraction": "total" + }, + { + "name": "dissolved arsenic", + "tex": "Dissolved Arsenic", + "units": "ug/L", + "unicode": "Arsenic", + "fraction": "dissolved" + }, + { + "name": "total arsenic", + "tex": "Total Arsenic", + "units": "ug/L", + "unicode": "Arsenic", + "fraction": "total" + }, + { + "name": "atrazine", + "tex": "Atrazine", + "units": "ug/L", + "unicode": "Atrazine", + "fraction": "total" + }, + { + "name": "bhc-alpha", + "tex": "BHC-ALPHA", + "units": "ug/L", + "unicode": "BHC-ALPHA", + "fraction": "total" + }, + { + "name": "bhc-beta", + "tex": "BHC-BETA", + "units": "ug/L", + "unicode": "BHC-BETA", + "fraction": "total" + }, + { + "name": "bhc-delta", + "tex": "BHC-DELTA", + "units": "ug/L", + "unicode": "BHC-DELTA", + "fraction": "total" + }, + { + "name": "bod", + "tex": "Biological Oxygen Demand", + "units": "mg/L", + "unicode": "Biological Oxygen Demand", + "fraction": "total" + }, + { + "name": "bod, dissolved", + "tex": "Biological Oxygen Demand (dissolved)", + "units": "mg/L", + "unicode": "Biological Oxygen Demand", + "fraction": "dissolved" + }, + { + "name": "bod, non-standard conditions", + "tex": "Biological Oxygen Demand (non-standard conditions)", + "units": "mg/L", + "unicode": "Biological Oxygen Demand", + "fraction": "total" + }, + { + "name": "barium, dissolved", + "tex": "Dissolved Barium", + "units": "ug/L", + "unicode": "Barium", + "fraction": "dissolved" + }, + { + "name": "barium, total", + "tex": "Total Barium", + "units": "ug/L", + "unicode": "Barium", + "fraction": "total" + }, + { + "name": "benz[a]anthracene", + "tex": "Benz[a]anthracene", + "units": "ug/L", + "unicode": "Benz[a]anthracene", + "fraction": "total" + }, + { + "name": "benz[a]anthracene, suspended", + "tex": "Suspended Benz[a]anthracene", + "units": "ug/L", + "unicode": "Benz[a]anthracene", + "fraction": "suspended" + }, + { + "name": "benzene", + "tex": "Benzene", + "units": "ug/L", + "unicode": "Benzene", + "fraction": "total" + }, + { + "name": "benzidine", + "tex": "Benzidine", + "units": "ug/L", + "unicode": "Benzidine", + "fraction": "total" + }, + { + "name": "benzo(b)fluoranthene", + "tex": "Benzo(b)fluoranthene", + "units": "ug/L", + "unicode": "Benzo(b)fluoranthene", + "fraction": "total" + }, + { + "name": "benzo(b)fluoranthene, suspended", + "tex": "Suspended Benzo(b)fluoranthene", + "units": "ug/L", + "unicode": "Benzo(b)fluoranthene", + "fraction": "suspended" + }, + { + "name": "benzo[a]pyrene", + "tex": "Benzo[a]pyrene", + "units": "ug/L", + "unicode": "Benzo[a]pyrene", + "fraction": "total" + }, + { + "name": "benzo[a]pyrene, suspended", + "tex": "Suspended Benzo[a]pyrene", + "units": "ug/L", + "unicode": "Benzo[a]pyrene", + "fraction": "suspended" + }, + { + "name": "benzo[ghi]perylene", + "tex": "Benzo[ghi]perylene", + "units": "ug/L", + "unicode": "Benzo[ghi]perylene", + "fraction": "total" + }, + { + "name": "benzo[ghi]perylene, suspended", + "tex": "Suspended Benzo[ghi]perylene", + "units": "ug/L", + "unicode": "Benzo[ghi]perylene", + "fraction": "suspended" + }, + { + "name": "benzo[k]fluoranthene", + "tex": "Benzo[k]fluoranthene", + "units": "ug/L", + "unicode": "Benzo[k]fluoranthene", + "fraction": "total" + }, + { + "name": "benzo[k]fluoranthene, suspended", + "tex": "Suspended Benzo[k]fluoranthene", + "units": "ug/L", + "unicode": "Benzo[k]fluoranthene", + "fraction": "suspended" + }, + { + "name": "benzoic acid", + "tex": "Benzoic acid", + "units": "ug/L", + "unicode": "Benzoic acid", + "fraction": "total" + }, + { + "name": "benzyl alcohol", + "tex": "Benzyl Alcohol", + "units": "ug/L", + "unicode": "Benzyl Alcohol", + "fraction": "total" + }, + { + "name": "beryllium, dissolved", + "tex": "Dissolved Beryllium", + "units": "ug/L", + "unicode": "Beryllium", + "fraction": "dissolved" + }, + { + "name": "beryllium, total", + "tex": "Total Beryllium", + "units": "ug/L", + "unicode": "Beryllium", + "fraction": "total" + }, + { + "name": "biphenyl", + "tex": "Biphenyl", + "units": "ug/L", + "unicode": "Biphenyl", + "fraction": "total" + }, + { + "name": "bis(2-chloro-1-methylethyl) ether", + "tex": "Bis(2-chloro-1-methylethyl) Ether", + "units": "ug/L", + "unicode": "Bis(2-chloro-1-methylethyl) Ether", + "fraction": "total" + }, + { + "name": "bis(2-chloroethoxy)methane", + "tex": "Bis(2-chloroethoxy)methane", + "units": "ug/L", + "unicode": "Bis(2-chloroethoxy)methane", + "fraction": "total" + }, + { + "name": "bis(2-chloroethyl) ether", + "tex": "Bis(2-chloroethyl) Ether", + "units": "ug/L", + "unicode": "Bis(2-chloroethyl) Ether", + "fraction": "total" + }, + { + "name": "bis(2-chloroisopropyl) ether", + "tex": "Bis(2-chloroisopropyl) Ether", + "units": "ug/L", + "unicode": "Bis(2-chloroisopropyl) Ether", + "fraction": "total" + }, + { + "name": "bis(2-ethylhexyl) phthalate", + "tex": "Bis(2-ethylhexyl) Phthalate", + "units": "ug/L", + "unicode": "Bis(2-ethylhexyl) Phthalate", + "fraction": "total" + }, + { + "name": "bis(2-ethylhexyl)phthalate", + "tex": "Bis(2-ethylhexyl)Phthalate", + "units": "ug/L", + "unicode": "Bis(2-ethylhexyl) Phthalate", + "fraction": "total" + }, + { + "name": "bis(n-octyl)phthalate", + "tex": "Bis(n-octyl)phthalate", + "units": "ug/L", + "unicode": "Bis(n-octyl) Phthalate", + "fraction": "total" + }, + { + "name": "bromobenzene", + "tex": "Bromobenzene", + "units": "ug/L", + "unicode": "Bromobenzene", + "fraction": "total" + }, + { + "name": "bromochloroiodomethane", + "tex": "Bromochloroiodomethane", + "units": "ug/L", + "unicode": "Bromochloroiodomethane", + "fraction": "total" + }, + { + "name": "bromoform", + "tex": "Bromoform", + "units": "ug/L", + "unicode": "Bromoform", + "fraction": "total" + }, + { + "name": "bromomethane", + "tex": "Bromomethane", + "units": "ug/L", + "unicode": "Bromomethane", + "fraction": "total" + }, + { + "name": "butyl benzyl phthalate", + "tex": "Butyl Benzyl Phthalate", + "units": "ug/L", + "unicode": "Butyl Benzyl Phthalate", + "fraction": "total" + }, + { + "name": "cbod", + "tex": "Chemical-Biological Oxygen Demand", + "units": "mg/L", + "unicode": "Chemical-Biological Oxygen Demand", + "fraction": "total" + }, + { + "name": "cfc-11", + "tex": "CFC-11", + "units": "ug/L", + "unicode": "CFC-11", + "fraction": "total" + }, + { + "name": "cfc-12", + "tex": "CFC-12", + "units": "ug/L", + "unicode": "CFC-12", + "fraction": "total" + }, + { + "name": "cadmium, dissolved", + "tex": "Dissolved Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "dissolved" + }, + { + "name": "cadmium, suspended", + "tex": "Suspended Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "suspended" + }, + { + "name": "cadmium, total", + "tex": "Total Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "total" + }, + { + "name": "dissolved cadmium", + "tex": "Dissolved Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "dissolved" + }, + { + "name": "suspended cadmium", + "tex": "Suspended Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "suspended" + }, + { + "name": "total cadmium", + "tex": "Total Cadmium", + "units": "ug/L", + "unicode": "Cadmium", + "fraction": "total" + }, + { + "name": "calcium as caco3, total", + "tex": "Total Calcium as CaCO$_{3}$", + "units": "mg/L", + "unicode": "Calcium as CaCO₃", + "fraction": "total" + }, + { + "name": "calcium, dissolved", + "tex": "Dissolved Calcium", + "units": "mg/L", + "unicode": "Calcium", + "fraction": "dissolved" + }, + { + "name": "calcium, total", + "tex": "Total Calcium", + "units": "mg/L", + "unicode": "Calcium", + "fraction": "total" + }, + { + "name": "carbofuran", + "tex": "Carbofuran", + "units": "ug/L", + "unicode": "Carbofuran", + "fraction": "total" + }, + { + "name": "carbon disulfide", + "tex": "Carbon Disulfide", + "units": "ug/L", + "unicode": "Carbon Disulfide", + "fraction": "total" + }, + { + "name": "carbon fraction, particulate organic material", + "tex": "Carbon Fraction, Particulate Organic Material", + "units": "mg/L", + "unicode": "Carbon, Organic", + "fraction": "particulate" + }, + { + "name": "carbon tetrachloride", + "tex": "Carbon Tetrachloride", + "units": "ug/L", + "unicode": "Carbon Tetrachloride", + "fraction": "total" + }, + { + "name": "chemical oxygen demand", + "tex": "Chemical Oxygen Demand", + "units": "mg/L", + "unicode": "Chemical Oxygen Demand", + "fraction": "total" + }, + { + "name": "chemical oxygen demand, high level", + "tex": "Chemical Oxygen Demand (high level)", + "units": "mg/L", + "unicode": "Chemical Oxygen Demand", + "fraction": "total" + }, + { + "name": "chemical oxygen demand, low level", + "tex": "Chemical Oxygen Demand (low level)", + "units": "mg/L", + "unicode": "Chemical Oxygen Demand", + "fraction": "total" + }, + { + "name": "chemical oxygen demand, low level, filtered", + "tex": "Chemical Oxygen Demand (low level, filtered)", + "units": "mg/L", + "unicode": "Chemical Oxygen Demand", + "fraction": "dissolved" + }, + { + "name": "chemical oxygen demand, soluble", + "tex": "Chemical Oxygen Demand (soluble)", + "units": "mg/L", + "unicode": "Chemical Oxygen Demand", + "fraction": "dissolved" + }, + { + "name": "chlordane", + "tex": "Chlordane", + "units": "ug/L", + "unicode": "Chlordane", + "fraction": "total" + }, + { + "name": "chloride, dissolved", + "tex": "Dissolved Chloride", + "units": "mg/L", + "unicode": "Chloride", + "fraction": "dissolved" + }, + { + "name": "chloride, total", + "tex": "Total Chloride", + "units": "mg/L", + "unicode": "Chloride", + "fraction": "total" + }, + { + "name": "chlorobenzene", + "tex": "Chlorobenzene", + "units": "ug/L", + "unicode": "Chlorobenzene", + "fraction": "total" + }, + { + "name": "chlorodibromomethane", + "tex": "Chlorodibromomethane", + "units": "ug/L", + "unicode": "Chlorodibromomethane", + "fraction": "total" + }, + { + "name": "chloroethane", + "tex": "Chloroethane", + "units": "ug/L", + "unicode": "Chloroethane", + "fraction": "total" + }, + { + "name": "chloroform", + "tex": "Chloroform", + "units": "ug/L", + "unicode": "Chloroform", + "fraction": "total" + }, + { + "name": "chloromethane", + "tex": "Chloromethane", + "units": "ug/L", + "unicode": "Chloromethane", + "fraction": "total" + }, + { + "name": "chlorotoluene", + "tex": "Chlorotoluene", + "units": "ug/L", + "unicode": "Chlorotoluene", + "fraction": "total" + }, + { + "name": "chlorpyrifos", + "tex": "Chlorpyrifos", + "units": "ug/L", + "unicode": "Chlorpyrifos", + "fraction": "total" + }, + { + "name": "chromium(vi), dissolved", + "tex": "Dissolved Chromium(VI)", + "units": "ug/L", + "unicode": "Chromium(VI)", + "fraction": "dissolved" + }, + { + "name": "chromium(vi), total", + "tex": "Total Chromium(VI)", + "units": "ug/L", + "unicode": "Chromium(VI)", + "fraction": "total" + }, + { + "name": "chromium, dissolved", + "tex": "Dissolved Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "dissolved" + }, + { + "name": "chromium, suspended", + "tex": "Suspended Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "suspended" + }, + { + "name": "chromium, total", + "tex": "Total Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "total" + }, + { + "name": "dissolved chromium", + "tex": "Dissolved Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "dissolved" + }, + { + "name": "suspended chromium", + "tex": "Suspended Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "suspended" + }, + { + "name": "total chromium", + "tex": "Total Chromium", + "units": "ug/L", + "unicode": "Chromium", + "fraction": "total" + }, + { + "name": "chrysene", + "tex": "Chrysene", + "units": "ug/L", + "unicode": "Chrysene", + "fraction": "total" + }, + { + "name": "chrysene, suspended", + "tex": "Suspended Chrysene", + "units": "ug/L", + "unicode": "Chrysene", + "fraction": "suspended" + }, + { + "name": "cobalt, total", + "tex": "Total Cobalt", + "units": "ug/L", + "unicode": "Cobalt", + "fraction": "total" + }, + { + "name": "copper, dissolved", + "tex": "Dissolved Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "dissolved" + }, + { + "name": "copper, suspended", + "tex": "Suspended Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "suspended" + }, + { + "name": "copper, total", + "tex": "Total Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "total" + }, + { + "name": "dissolved copper", + "tex": "Dissolved Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "dissolved" + }, + { + "name": "suspended copper", + "tex": "Suspended Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "suspended" + }, + { + "name": "total copper", + "tex": "Total Copper", + "units": "ug/L", + "unicode": "Copper", + "fraction": "total" + }, + { + "name": "cumene", + "tex": "Cumene", + "units": "ug/L", + "unicode": "Cumene", + "fraction": "total" + }, + { + "name": "cyanazine", + "tex": "Cyanazine", + "units": "ug/L", + "unicode": "Cyanazine", + "fraction": "total" + }, + { + "name": "cyanide", + "tex": "Cyanide", + "units": "mg/L", + "unicode": "Cyanide", + "fraction": "total" + }, + { + "name": "daconil", + "tex": "DACONIL", + "units": "ug/L", + "unicode": "DACONIL", + "fraction": "total" + }, + { + "name": "di(2-ethylhexyl) phthalate", + "tex": "Di(2-ethylhexyl) Phthalate", + "units": "ug/L", + "unicode": "Di(2-ethylhexyl) Phthalate", + "fraction": "total" + }, + { + "name": "di-n-octyl phthalate", + "tex": "Di-n-octyl Phthalate", + "units": "ug/L", + "unicode": "Di-n-octyl Phthalate", + "fraction": "total" + }, + { + "name": "diazinon", + "tex": "Diazinon", + "units": "ug/L", + "unicode": "Diazinon", + "fraction": "total" + }, + { + "name": "dibenz[a,h]anthracene", + "tex": "Dibenz[a,h]anthracene", + "units": "ug/L", + "unicode": "Dibenz[a,h]anthracene", + "fraction": "total" + }, + { + "name": "dibenz[a,h]anthracene, dissolved", + "tex": "Dissolved Dibenz[a,h]anthracene", + "units": "ug/L", + "unicode": "Dibenz[a,h]anthracene", + "fraction": "dissolved" + }, + { + "name": "dibenzofuran", + "tex": "Dibenzofuran", + "units": "ug/L", + "unicode": "Dibenzofuran", + "fraction": "total" + }, + { + "name": "dibromomethane", + "tex": "Dibromomethane", + "units": "ug/L", + "unicode": "Dibromomethane", + "fraction": "total" + }, + { + "name": "dibromodichloromethane", + "tex": "Dibromodichloromethane", + "units": "ug/L", + "unicode": "Dibromodichloromethane", + "fraction": "total" + }, + { + "name": "dibutyl phthalate", + "tex": "Dibutyl Phthalate", + "units": "ug/L", + "unicode": "Dibutyl Phthalate", + "fraction": "total" + }, + { + "name": "dichlorobromomethane", + "tex": "Dichlorobromomethane", + "units": "ug/L", + "unicode": "Dichlorobromomethane", + "fraction": "total" + }, + { + "name": "dichlorodifluoromethane", + "tex": "Dichlorodifluoromethane", + "units": "ug/L", + "unicode": "Dichlorodifluoromethane", + "fraction": "total" + }, + { + "name": "dichlorophenol", + "tex": "Dichlorophenol", + "units": "ug/L", + "unicode": "Dichlorophenol", + "fraction": "total" + }, + { + "name": "dinitrophenol", + "tex": "Dinitrophenol", + "units": "ug/L", + "unicode": "Dinitrophenol", + "fraction": "total" + }, + { + "name": "dieldrin", + "tex": "Dieldrin", + "units": "ug/L", + "unicode": "Dieldrin", + "fraction": "total" + }, + { + "name": "diethyl phthalate", + "tex": "Diethyl Phthalate", + "units": "ug/L", + "unicode": "Diethyl Phthalate", + "fraction": "total" + }, + { + "name": "dimethyl phthalate", + "tex": "Dimethyl Phthalate", + "units": "ug/L", + "unicode": "Dimethyl Phthalate", + "fraction": "total" + }, + { + "name": "dimethylnaphthalene", + "tex": "Dimethylnaphthalene", + "units": "ug/L", + "unicode": "Dimethylnaphthalene", + "fraction": "total" + }, + { + "name": "dissolved oxygen (do)", + "tex": "Dissolved Oxygen (DO)", + "units": "mg/L", + "unicode": "Dissolved Oxygen (DO)", + "fraction": "dissolved" + }, + { + "name": "dro", + "tex": "DRO", + "units": "ug/L", + "unicode": "DRO", + "fraction": "total" + }, + { + "name": "endosulfan i", + "tex": "Endosulfan I", + "units": "ug/L", + "unicode": "Endosulfan I", + "fraction": "total" + }, + { + "name": "endosulfan i (alpha)", + "tex": "Endosulfan I (alpha)", + "units": "ug/L", + "unicode": "Endosulfan I (alpha)", + "fraction": "total" + }, + { + "name": ".alpha.-endosulfan, dissolved", + "tex": "Dissolved, Endosulfan I (alpha)", + "units": "ug/L", + "unicode": "Endosulfan I (alpha)", + "fraction": "dissolved" + }, + { + "name": "endosulfan ii", + "tex": "Endosulfan II", + "units": "ug/L", + "unicode": "Endosulfan II", + "fraction": "total" + }, + { + "name": "endosulfan ii (beta)", + "tex": "Endosulfan II (beta)", + "units": "ug/L", + "unicode": "Endosulfan II (beta)", + "fraction": "total" + }, + { + "name": ".beta.-endosulfan, dissolved", + "tex": "Dissolved, Endosulfan II (beta)", + "units": "ug/L", + "unicode": "Endosulfan II (beta)", + "fraction": "dissolved" + }, + { + "name": "endosulfan sulfate", + "tex": "Endosulfan sulfate", + "units": "ug/L", + "unicode": "Endosulfan sulfate", + "fraction": "total" + }, + { + "name": "endrin", + "tex": "Endrin", + "units": "ug/L", + "unicode": "Endrin", + "fraction": "total" + }, + { + "name": "endrin aldehyde", + "tex": "Endrin Aldehyde", + "units": "ug/L", + "unicode": "Endrin Aldehyde", + "fraction": "total" + }, + { + "name": "endrin ketone", + "tex": "Endrin Ketone", + "units": "ug/L", + "unicode": "Endrin Ketone", + "fraction": "total" + }, + { + "name": "enterococcus", + "tex": "Enterococcus", + "units": "MPN/100 mL", + "unicode": "Enterococcus", + "fraction": "total" + }, + { + "name": "escherichia coli", + "tex": "Escherichia coli", + "units": "MPN/100 mL", + "unicode": "Escherichia coli", + "fraction": "total" + }, + { + "name": "ethyl methacrylate", + "tex": "Ethyl Methacrylate", + "units": "ug/L", + "unicode": "Ethyl Methacrylate", + "fraction": "total" + }, + { + "name": "ethylbenzene", + "tex": "Ethylbenzene", + "units": "ug/L", + "unicode": "Ethylbenzene", + "fraction": "total" + }, + { + "name": "ethylene dibromide", + "tex": "Ethylene Dibromide", + "units": "ug/L", + "unicode": "Ethylene Dibromide", + "fraction": "total" + }, + { + "name": "fecal coliform", + "tex": "Fecal Coliform", + "units": "MPN/100 mL", + "unicode": "Fecal Coliform", + "fraction": "total" + }, + { + "name": "fecal streptococcus group bacteria", + "tex": "Fecal Streptococcus Group Bacteria", + "units": "MPN/100 mL", + "unicode": "Fecal Streptococcus Group Bacteria", + "fraction": "total" + }, + { + "name": "fluoranthene", + "tex": "Fluoranthene", + "units": "ug/L", + "unicode": "Fluoranthene", + "fraction": "total" + }, + { + "name": "fluoranthene, suspended", + "tex": "Suspended Fluoranthene", + "units": "ug/L", + "unicode": "Fluoranthene", + "fraction": "suspended" + }, + { + "name": "fluorene", + "tex": "Fluorene", + "units": "ug/L", + "unicode": "Fluorene", + "fraction": "total" + }, + { + "name": "fluorene, suspended", + "tex": "Suspended Fluorene", + "units": "ug/L", + "unicode": "Fluorene", + "fraction": "suspended" + }, + { + "name": "fluoride, dissolved", + "tex": "Dissolved Fluoride", + "units": "mg/L", + "unicode": "Fluoride", + "fraction": "dissolved" + }, + { + "name": "fluoride, total", + "tex": "Total Fluoride", + "units": "mg/L", + "unicode": "Fluoride", + "fraction": "total" + }, + { + "name": "glyphosate", + "tex": "Glyphosate", + "units": "ug/L", + "unicode": "Glyphosate", + "fraction": "total" + }, + { + "name": "halon 1011", + "tex": "Halon 1011", + "units": "ug/L", + "unicode": "Halon 1011", + "fraction": "total" + }, + { + "name": "hardness", + "tex": "Hardness", + "units": "mg/L", + "unicode": "Hardness", + "fraction": "total" + }, + { + "name": "hardness, non-carbonate", + "tex": "Hardness, non-carbonate", + "units": "mg/L", + "unicode": "Hardness, non-carbonate", + "fraction": "total" + }, + { + "name": "heptachlor", + "tex": "Heptachlor", + "units": "ug/L", + "unicode": "Heptachlor", + "fraction": "total" + }, + { + "name": "heptachlor epoxide", + "tex": "Heptachlor Epoxide", + "units": "ug/L", + "unicode": "Heptachlor Epoxide", + "fraction": "total" + }, + { + "name": "hexachlorobenzene", + "tex": "Hexachlorobenzene", + "units": "ug/L", + "unicode": "Hexachlorobenzene", + "fraction": "total" + }, + { + "name": "hexachlorobutadiene", + "tex": "Hexachlorobutadiene", + "units": "ug/L", + "unicode": "Hexachlorobutadiene", + "fraction": "total" + }, + { + "name": "hexachlorocyclopentadiene", + "tex": "Hexachlorocyclopentadiene", + "units": "ug/L", + "unicode": "Hexachlorocyclopentadiene", + "fraction": "total" + }, + { + "name": "hexachloroethane", + "tex": "Hexachloroethane", + "units": "ug/L", + "unicode": "Hexachloroethane", + "fraction": "total" + }, + { + "name": "hydrocarbons, total petroleum (tph)", + "tex": "Hydrocarbons, Total Petroleum (TPH)", + "units": "ug/L", + "unicode": "Total Petroleum Hydrocarbons", + "fraction": "total" + }, + { + "name": "total petroleum hydrocarbons", + "tex": "Total Petroleum Hydrocarbons", + "units": "ug/L", + "unicode": "Total Petroleum Hydrocarbons", + "fraction": "total" + }, + { + "name": "total petroleum hydrocarbons - diesel range", + "tex": "Total Petroleum Hydrocarbons - Diesel range", + "units": "ug/L", + "unicode": "Organics, Diesel Range", + "fraction": "total" + }, + { + "name": "hydrocarbons, total petroleum, diesel range organics", + "tex": "Hydrocarbons, Total Petroleum, diesel range Organics", + "units": "ug/L", + "unicode": "Organics, Diesel Range", + "fraction": "total" + }, + { + "name": "hydrocarbons, total petroleum, gasoline range organics", + "tex": "Hydrocarbons, Total Petroleum, gasoline range organics", + "units": "ug/L", + "unicode": "Organics, Gasoline Range", + "fraction": "total" + }, + { + "name": "indeno[1,2,3-cd]pyrene", + "tex": "Indeno[1,2,3-cd]pyrene", + "units": "ug/L", + "unicode": "Indeno[1,2,3-cd]pyrene", + "fraction": "total" + }, + { + "name": "indeno[1,2,3-cd]pyrene, suspended", + "tex": "Suspended Indeno[1,2,3-cd]pyrene", + "units": "ug/L", + "unicode": "Indeno[1,2,3-cd]pyrene", + "fraction": "suspended" + }, + { + "name": "inorganic carbon, total", + "tex": "Total Inorganic Carbon", + "units": "mg/L", + "unicode": "Carbon, Inorganic", + "fraction": "total" + }, + { + "name": "iodomethane", + "tex": "Iodomethane", + "units": "ug/L", + "unicode": "Iodomethane", + "fraction": "total" + }, + { + "name": "iron, dissolved", + "tex": "Dissolved Iron", + "units": "ug/L", + "unicode": "Iron", + "fraction": "dissolved" + }, + { + "name": "iron, total", + "tex": "Total Iron", + "units": "ug/L", + "unicode": "Iron", + "fraction": "total" + }, + { + "name": "dissolved iron", + "tex": "Dissolved Iron", + "units": "ug/L", + "unicode": "Iron", + "fraction": "dissolved" + }, + { + "name": "total iron", + "tex": "Total Iron", + "units": "ug/L", + "unicode": "Iron", + "fraction": "total" + }, + { + "name": "isophorone", + "tex": "Isophorone", + "units": "ug/L", + "unicode": "Isophorone", + "fraction": "total" + }, + { + "name": "isopropylbenzene", + "tex": "Isopropylbenzene", + "units": "ug/L", + "unicode": "Isopropylbenzene", + "fraction": "total" + }, + { + "name": "kjeldahl nitrogen (tkn)", + "tex": "Total Kjeldahl Nitrogen", + "units": "mg/L", + "unicode": "Kjeldahl Nitrogen", + "fraction": "total" + }, + { + "name": "total kjeldahl nitrogen", + "tex": "Total Kjeldahl Nitrogen", + "units": "mg/L", + "unicode": "Kjeldahl Nitrogen", + "fraction": "total" + }, + { + "name": "kjeldahl nitrogen, dissolved", + "tex": "Dissolved Kjeldahl Nitrogen", + "units": "mg/L", + "unicode": "Kjeldahl Nitrogen", + "fraction": "dissolved" + }, + { + "name": "kjeldahl nitrogen, suspended", + "tex": "Suspended Kjeldahl Nitrogen", + "units": "mg/L", + "unicode": "Kjeldahl Nitrogen", + "fraction": "suspended" + }, + { + "name": "lead, dissolved", + "tex": "Dissolved Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "dissolved" + }, + { + "name": "lead, suspended", + "tex": "Suspended Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "suspended" + }, + { + "name": "lead, total", + "tex": "Total Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "total" + }, + { + "name": "dissolved lead", + "tex": "Dissolved Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "dissolved" + }, + { + "name": "suspended lead", + "tex": "Suspended Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "suspended" + }, + { + "name": "total lead", + "tex": "Total Lead", + "units": "ug/L", + "unicode": "Lead", + "fraction": "total" + }, + { + "name": "lindane", + "tex": "Lindane", + "units": "ug/L", + "unicode": "Lindane", + "fraction": "total" + }, + { + "name": "lithium, dissolved", + "tex": "Dissolved Lithium", + "units": "ug/L", + "unicode": "Lithium", + "fraction": "dissolved" + }, + { + "name": "magnesium, dissolved", + "tex": "Dissolved Magnesium", + "units": "ug/L", + "unicode": "Magnesium", + "fraction": "dissolved" + }, + { + "name": "magnesium, total", + "tex": "Total Magnesium", + "units": "ug/L", + "unicode": "Magnesium", + "fraction": "total" + }, + { + "name": "malathion", + "tex": "Malathion", + "units": "ug/L", + "unicode": "Malathion", + "fraction": "total" + }, + { + "name": "manganese, dissolved", + "tex": "Dissolved Manganese", + "units": "ug/L", + "unicode": "Manganese", + "fraction": "dissolved" + }, + { + "name": "manganese, total", + "tex": "Total Manganese", + "units": "ug/L", + "unicode": "Manganese", + "fraction": "total" + }, + { + "name": "mercury, dissolved", + "tex": "Dissolved Mercury", + "units": "ug/L", + "unicode": "Mercury", + "fraction": "dissolved" + }, + { + "name": "mercury, total", + "tex": "Total Mercury", + "units": "ug/L", + "unicode": "Mercury", + "fraction": "total" + }, + { + "name": "methoxychlor", + "tex": "Methoxychlor", + "units": "ug/L", + "unicode": "Methoxychlor", + "fraction": "total" + }, + { + "name": "methyl mercury", + "tex": "Methyl Mercury", + "units": "ug/L", + "unicode": "Methyl Mercury", + "fraction": "total" + }, + { + "name": "methyl bromide", + "tex": "Methyl bromide", + "units": "ug/L", + "unicode": "Methyl bromide", + "fraction": "total" + }, + { + "name": "methyl ethyl ketone", + "tex": "Methyl Ethyl Ketone", + "units": "ug/L", + "unicode": "Methyl Ethyl Ketone", + "fraction": "total" + }, + { + "name": "methyl isobutyl ketone", + "tex": "Methyl Isobutyl Ketone", + "units": "ug/L", + "unicode": "Methyl Isobutyl Ketone", + "fraction": "total" + }, + { + "name": "methyl tert-butyl ether", + "tex": "Methyl Tertiary Butyl Ether", + "units": "ug/L", + "unicode": "Methyl Tertiary Butyl Ether", + "fraction": "total" + }, + { + "name": "methylene blue active substances (mbas)", + "tex": "Methylene Blue Active Substances (MBAS)", + "units": "ug/L", + "unicode": "Methylene Blue Active Substances", + "fraction": "total" + }, + { + "name": "methylene chloride", + "tex": "Methylene Chloride", + "units": "ug/L", + "unicode": "Methylene Chloride", + "fraction": "total" + }, + { + "name": "methylnaphthalene", + "tex": "Methylnaphthalene", + "units": "ug/L", + "unicode": "Methylnaphthalene", + "fraction": "total" + }, + { + "name": "molybdenum, total", + "tex": "Total Molybdenum", + "units": "ug/L", + "unicode": "Molybdenum", + "fraction": "total" + }, + { + "name": "n-nitrosodi-n-propylamine", + "tex": "N-Nitrosodi-n-Propylamine", + "units": "ug/L", + "unicode": "N-Nitrosodi-n-Propylamine", + "fraction": "total" + }, + { + "name": "n-nitrosodimethylamine", + "tex": "N-Nitrosodimethylamine", + "units": "ug/L", + "unicode": "N-Nitrosodimethylamine", + "fraction": "total" + }, + { + "name": "n-nitrosodiphenylamine", + "tex": "N-Nitrosodiphenylamine", + "units": "ug/L", + "unicode": "N-Nitrosodiphenylamine", + "fraction": "total" + }, + { + "name": "naphthalene", + "tex": "Naphthalene", + "units": "ug/L", + "unicode": "Naphthalene", + "fraction": "total" + }, + { + "name": "naphthalene, dissolved", + "tex": "Dissolved Naphthalene", + "units": "ug/L", + "unicode": "Naphthalene", + "fraction": "dissolved" + }, + { + "name": "naphthalene, suspended", + "tex": "Suspended Naphthalene", + "units": "ug/L", + "unicode": "Naphthalene", + "fraction": "suspended" + }, + { + "name": "nickel, dissolved", + "tex": "Dissolved Nickel", + "units": "ug/L", + "unicode": "Nickel", + "fraction": "dissolved" + }, + { + "name": "nickel, total", + "tex": "Total Nickel", + "units": "ug/L", + "unicode": "Nickel", + "fraction": "total" + }, + { + "name": "dissolved nickel", + "tex": "Dissolved Nickel", + "units": "ug/L", + "unicode": "Nickel", + "fraction": "dissolved" + }, + { + "name": "total nickel", + "tex": "Total Nickel", + "units": "ug/L", + "unicode": "Nickel", + "fraction": "total" + }, + { + "name": "nitrobenzene", + "tex": "Nitrobenzene", + "units": "ug/L", + "unicode": "Nitrobenzene", + "fraction": "total" + }, + { + "name": "nitrogen, nitrate (no3) as n", + "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrate (NO₃) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nitrate (no$_{3}$) as n", + "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrate (NO₃) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nitrite (no2) + nitrate (no3) as n", + "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nitrite (no$_{2}$) + nitrate (no$_{3}$) as n", + "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nitrite (no2) as n", + "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrite (NO₂) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nitrite (no$_{2}$) as n", + "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", + "units": "mg/L", + "unicode": "Nitrogen, Nitrite (NO₂) as N", + "fraction": "total" + }, + { + "name": "nitrogen, nox as n", + "tex": "Nitrogen, NO$_{x}$ as N", + "units": "mg/L", + "unicode": "Nitrogen, NOₓ as N", + "fraction": "total" + }, + { + "name": "nitrogen, no$_{x}$ as n", + "tex": "Nitrogen, NO$_{x}$ as N", + "units": "mg/L", + "unicode": "Nitrogen, NOₓ as N", + "fraction": "total" + }, + { + "name": "nitrogen, noₓ as n", + "tex": "Nitrogen, NO$_{x}$ as N", + "units": "mg/L", + "unicode": "Nitrogen, NOₓ as N", + "fraction": "total" + }, + { + "name": "nitrogen, total", + "tex": "Total Nitrogen", + "units": "mg/L", + "unicode": "Nitrogen", + "fraction": "total" + }, + { + "name": "total nitrogen", + "tex": "Total Nitrogen", + "units": "mg/L", + "unicode": "Nitrogen", + "fraction": "total" + }, + { + "name": "nitrogen, ammonia as n", + "tex": "Nitrogen, Ammonia as N", + "units": "mg/L", + "unicode": "Nitrogen, Ammonia as N", + "fraction": "total" + }, + { + "name": "nitrogen, ammonium (nh4) as n", + "tex": "Nitrogen, Ammonium (NH4) as N", + "units": "mg/L", + "unicode": "Nitrogen, Ammonium (NH₄) as N", + "fraction": "total" + }, + { + "name": "nitrogen, ammonium (nh4) as nh4", + "tex": "Nitrogen, Ammonium (NH$_{4}$) as NH$_{4}$", + "units": "mg/L", + "unicode": "Ammonium (NH₄) as NH₄", + "fraction": "total" + }, + { + "name": "nitrogen, unionized ammonia (nh3) as n", + "tex": "Nitrogen, Unionized Ammonia (NH$_{3}$) as N", + "units": "mg/L", + "unicode": "Unionized Ammonia (NH₃) as N", + "fraction": "total" + }, + { + "name": "nitrogen, ammonia (nh3) as nh3", + "tex": "Nitrogen, Ammonia (NH$_{3}$) as NH3", + "units": "mg/L", + "unicode": "Nitrogen, Ammonia (NH₃) as NH₃", + "fraction": "total" + }, + { + "name": "oil range organics", + "tex": "Oil Range Organics", + "units": "ug/L", + "unicode": "Organics, Oil Range", + "fraction": "total" + }, + { + "name": "oil and grease", + "tex": "Oil and Grease", + "units": "mg/L", + "unicode": "Oil and Grease", + "fraction": "total" + }, + { + "name": "organic nitrogen, dissolved", + "tex": "Dissolved Organic Nitrogen", + "units": "mg/L", + "unicode": "Nitrogen, Organic", + "fraction": "dissolved" + }, + { + "name": "nitrogen, dissolved inorganic", + "tex": "Nitrogen, Dissolved Inorganic", + "units": "mg/L", + "unicode": "Nitrogen, Inorganic", + "fraction": "dissolved" + }, + { + "name": "organic nitrogen, total", + "tex": "Total Organic Nitrogen", + "units": "mg/L", + "unicode": "Nitrogen, Organic", + "fraction": "total" + }, + { + "name": "organic carbon, dissolved", + "tex": "Dissolved Organic Carbon", + "units": "mg/L", + "unicode": "Carbon, Organic", + "fraction": "dissolved" + }, + { + "name": "organic carbon, total", + "tex": "Total Organic Carbon", + "units": "mg/L", + "unicode": "Carbon, Organic ", + "fraction": "total" + }, + { + "name": "oro", + "tex": "ORO", + "units": "ug/L", + "unicode": "ORO", + "fraction": "total" + }, + { + "name": "oxidation reduction potential (orp)", + "tex": "Oxidation Reduction Potential (ORP)", + "units": "mV", + "unicode": "Oxidation Reduction Potential (ORP)", + "fraction": "total" + }, + { + "name": "p-isopropyltoluene", + "tex": "p-Isopropyltoluene", + "units": "ug/L", + "unicode": "p-Isopropyltoluene", + "fraction": "total" + }, + { + "name": "p,p'-dde", + "tex": "p,p'-DDE", + "units": "ug/L", + "unicode": "p,p'-DDE", + "fraction": "total" + }, + { + "name": "pbp", + "tex": "PBP", + "units": "ug/L", + "unicode": "PBP", + "fraction": "total" + }, + { + "name": "pentachlorophenol", + "tex": "Pentachlorophenol", + "units": "ug/L", + "unicode": "Pentachlorophenol", + "fraction": "total" + }, + { + "name": "pentachlorophenol, dissolved", + "tex": "Dissolved Pentachlorophenol", + "units": "ug/L", + "unicode": "Pentachlorophenol", + "fraction": "dissolved" + }, + { + "name": "phenanthrene", + "tex": "Phenanthrene", + "units": "ug/L", + "unicode": "Phenanthrene", + "fraction": "total" + }, + { + "name": "phenanthrene, dissolved", + "tex": "Dissolved Phenanthrene", + "units": "ug/L", + "unicode": "Phenanthrene", + "fraction": "dissolved" + }, + { + "name": "phenanthrene, suspended", + "tex": "Suspended Phenanthrene", + "units": "ug/L", + "unicode": "Phenanthrene", + "fraction": "suspended" + }, + { + "name": "phenol", + "tex": "Phenol", + "units": "ug/L", + "unicode": "Phenol", + "fraction": "total" + }, + { + "name": "phenols", + "tex": "Phenols", + "units": "ug/L", + "unicode": "Phenols", + "fraction": "total" + }, + { + "name": "phosphate-phosphorus", + "tex": "Phosphate-Phosphorus", + "units": "mg/L", + "unicode": "Phosphate-Phosphorus", + "fraction": "total" + }, + { + "name": "phosphorus as p, dissolved", + "tex": "Dissolved Phosphorus as P", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "dissolved" + }, + { + "name": "dissolved phosphorus as p", + "tex": "Dissolved Phosphorus as P", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "dissolved" + }, + { + "name": "phosphorus as p, suspended", + "tex": "Suspended Phosphorus as P", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "suspended" + }, + { + "name": "phosphorus as p, total", + "tex": "Total Phosphorus as P", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "total" + }, + { + "name": "total phosphorus as p", + "tex": "Total Phosphorus as P", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "total" + }, + { + "name": "phosphorus as po4, total", + "tex": "Total Phosphorus as PO4", + "units": "mg/L", + "unicode": "Phosphorus as PO₄", + "fraction": "total" + }, + { + "name": "phosphorus, particulate organic", + "tex": "Phosphorus, Particulate Organic", + "units": "mg/L", + "unicode": "Phosphorus, Organic", + "fraction": "particulate" + }, + { + "name": "phosphorus, particulate", + "tex": "Phosphorus, Particulate", + "units": "mg/L", + "unicode": "Phosphorus as P", + "fraction": "particulate" + }, + { + "name": "phosphorus, organic", + "tex": "Phosphorus, Organic", + "units": "mg/L", + "unicode": "Phosphorus, Organic", + "fraction": "total" + }, + { + "name": "phosphorus, soluble reactive (srp)", + "tex": "Phosphorus, Soluble Reactive (SRP)", + "units": "mg/L", + "unicode": "Phosphorus, Soluble Reactive (SRP)", + "fraction": "total" + }, + { + "name": "phosphorus, organic as p, dissolved", + "tex": "Dissolved Phosphorus, organic as P", + "units": "mg/L", + "unicode": "Phosphorus, Organic", + "fraction": "dissolved" + }, + { + "name": "dissolved phosphorus, organic as p", + "tex": "Dissolved Phosphorus, organic as P", + "units": "mg/L", + "unicode": "Phosphorus, Organic", + "fraction": "dissolved" + }, + { + "name": "phosphorus, orthophosphate as p", + "tex": "Phosphorus, Orthophosphate as P", + "units": "mg/L", + "unicode": "Phosphorus, Orthophosphate as P", + "fraction": "total" + }, + { + "name": "phosphorus, orthophosphate as p, dissolved", + "tex": "Dissolved Phosphorus, Orthophosphate as P", + "units": "mg/L", + "unicode": "Phosphorus, Orthophosphate as P", + "fraction": "dissolved" + }, + { + "name": "phosphorus, orthophosphate as p, suspended", + "tex": "Suspended Phosphorus, Orthophosphate as P", + "units": "mg/L", + "unicode": "Phosphorus, Orthophosphate as P", + "fraction": "suspended" + }, + { + "name": "phosphorus, orthophosphate as po4", + "tex": "Phosphorus, Orthophosphate as PO$_{4}$", + "units": "mg/L", + "unicode": "Phosphorus, Orthophosphate as PO₄", + "fraction": "total" + }, + { + "name": "polycyclic aromatic hydrocarbons", + "tex": "Polycyclic Aromatic Hydrocarbons", + "units": "ug/L", + "unicode": "Polycyclic Aromatic Hydrocarbons", + "fraction": "total" + }, + { + "name": "potassium, dissolved", + "tex": "Dissolved Potassium", + "units": "mg/L", + "unicode": "Potassium", + "fraction": "dissolved" + }, + { + "name": "potassium, total", + "tex": "Total Potassium", + "units": "mg/L", + "unicode": "Potassium", + "fraction": "total" + }, + { + "name": "prometryn", + "tex": "Prometryn", + "units": "ug/L", + "unicode": "Prometryn", + "fraction": "total" + }, + { + "name": "pyrene", + "tex": "Pyrene", + "units": "ug/L", + "unicode": "Pyrene", + "fraction": "total" + }, + { + "name": "pyrene, suspended", + "tex": "Suspended Pyrene", + "units": "ug/L", + "unicode": "Pyrene", + "fraction": "suspended" + }, + { + "name": "relative toxicity (i 25% reduction)", + "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION)", + "units": "%", + "unicode": "Relative Toxicity (I 25% Reduction)", + "fraction": "total" + }, + { + "name": "relative toxicity (i 25% reduction), filtered", + "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION, filtered)", + "units": "%", + "unicode": "Relative Toxicity (I 25% Reduction)", + "fraction": "suspended" + }, + { + "name": "ssc-total coarse fraction (>63um)", + "tex": "SSC-Total Coarse Fraction ($>63$ \\si[per-mode=symbol]{\\micro\\meter})", + "units": "mg/L", + "unicode": "SSC-Total Coarse Fraction (>63 µm)", + "fraction": "total" + }, + { + "name": "ssc-total fine fraction (<63um)", + "tex": "SSC-Total Fine Fraction (<63 \\si[per-mode=symbol]{\\micro\\meter})", + "units": "mg/L", + "unicode": "SSC-Total Fine Fraction (<63 µm)", + "fraction": "total" + }, + { + "name": "ssc-total particulate solids", + "tex": "SSC-Total Particulate Solids", + "units": "mg/L", + "unicode": "SSC-Total Particulate Solids", + "fraction": "total" + }, + { + "name": "ssc <2000 microns", + "tex": "SSC $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <2000 µm", + "fraction": "total" + }, + { + "name": "ssc <1000 microns", + "tex": "SSC $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <1000 µm", + "fraction": "total" + }, + { + "name": "ssc <500 microns", + "tex": "SSC $<500$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <500 µm", + "fraction": "total" + }, + { + "name": "ssc <250 microns", + "tex": "SSC $<250$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <250 µm", + "fraction": "total" + }, + { + "name": "ssc <100 microns", + "tex": "SSC $<100$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <100 µm", + "fraction": "total" + }, + { + "name": "ssc <62.5 microns", + "tex": "SSC $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <62.5 µm", + "fraction": "total" + }, + { + "name": "ssc <50 microns", + "tex": "SSC $<50$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <50 µm", + "fraction": "total" + }, + { + "name": "ssc <25 microns", + "tex": "SSC $<25$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "SSC <25 µm", + "fraction": "total" + }, + { + "name": "tvss <2000 microns", + "tex": "TVSS $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <2000 µm", + "fraction": "total" + }, + { + "name": "tvss <1000 microns", + "tex": "TVSS $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <1000 µm", + "fraction": "total" + }, + { + "name": "tvss <500 microns", + "tex": "TVSS $<500$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <500 µm", + "fraction": "total" + }, + { + "name": "tvss <250 microns", + "tex": "TVSS $<250$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <250 µm", + "fraction": "total" + }, + { + "name": "tvss <100 microns", + "tex": "TVSS $<100$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <100 µm", + "fraction": "total" + }, + { + "name": "tvss <62.5 microns", + "tex": "TVSS $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <62.5 µm", + "fraction": "total" + }, + { + "name": "tvss <50 microns", + "tex": "TVSS $<50$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <50 µm", + "fraction": "total" + }, + { + "name": "tvss <25 microns", + "tex": "TVSS $<25$ \\si[per-mode=symbol]{\\micro\\meter}", + "units": "mg/L", + "unicode": "TVSS <25 µm", + "fraction": "total" + }, + { + "name": "sand", + "tex": "Sand", + "units": "mg/L", + "unicode": "Sand", + "fraction": "total" + }, + { + "name": "sec-butylbenzene", + "tex": "Sec-Butylbenzene", + "units": "ug/L", + "unicode": "Sec-Butylbenzene", + "fraction": "total" + }, + { + "name": "selenium, dissolved", + "tex": "Dissolved Selenium", + "units": "ug/L", + "unicode": "Selenium", + "fraction": "dissolved" + }, + { + "name": "selenium, total", + "tex": "Total Selenium", + "units": "ug/L", + "unicode": "Selenium", + "fraction": "total" + }, + { + "name": "settleable solids", + "tex": "Settleable Solids", + "units": "mg/L", + "unicode": "Settleable Solids", + "fraction": "total" + }, + { + "name": "silt", + "tex": "Silt", + "units": "mg/L", + "unicode": "Silt", + "fraction": "total" + }, + { + "name": "silver, dissolved", + "tex": "Dissolved Silver", + "units": "ug/L", + "unicode": "Silver", + "fraction": "dissolved" + }, + { + "name": "silver, total", + "tex": "Total Silver", + "units": "ug/L", + "unicode": "Silver", + "fraction": "total" + }, + { + "name": "simazine", + "tex": "Simazine", + "units": "ug/L", + "unicode": "Simazine", + "fraction": "total" + }, + { + "name": "sodium, dissolved", + "tex": "Dissolved Sodium", + "units": "mg/L", + "unicode": "Sodium", + "fraction": "dissolved" + }, + { + "name": "sodium, total", + "tex": "Total Sodium", + "units": "mg/L", + "unicode": "Sodium", + "fraction": "total" + }, + { + "name": "specific conductance", + "tex": "Specific Conductance", + "units": "umhos/cm", + "unicode": "Specific Conductance", + "fraction": "total" + }, + { + "name": "styrene", + "tex": "Styrene", + "units": "ug/L", + "unicode": "Styrene", + "fraction": "total" + }, + { + "name": "sulfate, dissolved", + "tex": "Dissolved Sulfate", + "units": "mg/L", + "unicode": "Sulfate", + "fraction": "dissolved" + }, + { + "name": "sulfate, total", + "tex": "Total Sulfate", + "units": "mg/L", + "unicode": "Sulfate", + "fraction": "total" + }, + { + "name": "sulfide, total", + "tex": "Total Sulfide", + "units": "mg/L", + "unicode": "Sulfide", + "fraction": "total" + }, + { + "name": "surfactants", + "tex": "Surfactants", + "units": "ug/L", + "unicode": "Surfactants", + "fraction": "total" + }, + { + "name": "suspended sediment concentration (ssc)", + "tex": "Suspended Sediment Concentration", + "units": "mg/L", + "unicode": "Suspended Sediment Concentration", + "fraction": "total" + }, + { + "name": "temperature, water", + "tex": "Temperature, water", + "units": "deg C", + "unicode": "Temperature, Water", + "fraction": "total" + }, + { + "name": "tetrachloroethane", + "tex": "Tetrachloroethane", + "units": "ug/L", + "unicode": "Tetrachloroethane", + "fraction": "total" + }, + { + "name": "tetrachloroethylene", + "tex": "Tetrachloroethylene", + "units": "ug/L", + "unicode": "Tetrachloroethylene", + "fraction": "total" + }, + { + "name": "thallium, dissolved", + "tex": "Dissolved Thallium", + "units": "ug/L", + "unicode": "Thallium", + "fraction": "dissolved" + }, + { + "name": "thallium, total", + "tex": "Total Thallium", + "units": "ug/L", + "unicode": "Thallium", + "fraction": "total" + }, + { + "name": "toluene", + "tex": "Toluene", + "units": "ug/L", + "unicode": "Toluene", + "fraction": "total" + }, + { + "name": "total coliform", + "tex": "Total Coliform", + "units": "MPN/100 mL", + "unicode": "Total Coliform", + "fraction": "total" + }, + { + "name": "total dissolved solids", + "tex": "Total Dissolved Solids", + "units": "mg/L", + "unicode": "Total Dissolved Solids", + "fraction": "total" + }, + { + "name": "total solids", + "tex": "Total Solids", + "units": "mg/L", + "unicode": "Total Solids", + "fraction": "total" + }, + { + "name": "total suspended solids", + "tex": "Total Suspended Solids", + "units": "mg/L", + "unicode": "Total Suspended Solids", + "fraction": "total" + }, + { + "name": "total volatile solids", + "tex": "Total Volatile Solids", + "units": "mg/L", + "unicode": "Total Volatile Solids", + "fraction": "total" + }, + { + "name": "total volatile solids, filterable", + "tex": "Total Volatile Solids (filterable)", + "units": "mg/L", + "unicode": "Total Volatile Solids", + "fraction": "total" + }, + { + "name": "toxaphene", + "tex": "Toxaphene", + "units": "ug/L", + "unicode": "Toxaphene", + "fraction": "total" + }, + { + "name": "tribromomethane", + "tex": "Tribromomethane", + "units": "ug/L", + "unicode": "Tribromomethane", + "fraction": "total" + }, + { + "name": "trichloroethane", + "tex": "Trichloroethane", + "units": "ug/L", + "unicode": "Trichloroethane", + "fraction": "total" + }, + { + "name": "trichloroethylene", + "tex": "Trichloroethylene", + "units": "ug/L", + "unicode": "Trichloroethylene", + "fraction": "total" + }, + { + "name": "trichlorofuoromethane", + "tex": "Trichlorofuoromethane", + "units": "ug/L", + "unicode": "Trichlorofuoromethane", + "fraction": "total" + }, + { + "name": "trichlorotrifluoroethane", + "tex": "Trichlorotrifluoroethane", + "units": "ug/L", + "unicode": "Trichlorotrifluoroethane", + "fraction": "total" + }, + { + "name": "trihalomethanes", + "tex": "Trihalomethanes", + "units": "ug/L", + "unicode": "Trihalomethanes", + "fraction": "total" + }, + { + "name": "true color", + "tex": "True Color", + "units": "ADMI Value", + "unicode": "True Color", + "fraction": "total" + }, + { + "name": "true color, filtered", + "tex": "Filtered True Color", + "units": "ADMI Value", + "unicode": "Filtered True Color", + "fraction": "total" + }, + { + "name": "turbidity", + "tex": "Turbidity", + "units": "NT", + "unicode": "Turbidity", + "fraction": "total" + }, + { + "name": "turbidity, filtered", + "tex": "Filtered Turbidity", + "units": "NT", + "unicode": "Filtered Turbidity", + "fraction": "total" + }, + { + "name": "vanadium, total", + "tex": "Total Vanadium", + "units": "ug/L", + "unicode": "Vanadium", + "fraction": "total" + }, + { + "name": "vinyl acetate", + "tex": "Vinyl Acetate", + "units": "ug/L", + "unicode": "Vinyl Acetate", + "fraction": "total" + }, + { + "name": "vinyl chloride", + "tex": "Vinyl Chloride", + "units": "ug/L", + "unicode": "Vinyl Chloride", + "fraction": "total" + }, + { + "name": "xylenes, total", + "tex": "Total Xylenes", + "units": "ug/L", + "unicode": "Total Xylenes", + "fraction": "total" + }, + { + "name": "zinc, dissolved", + "tex": "Dissolved Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "dissolved" + }, + { + "name": "zinc, suspended", + "tex": "Suspended Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "suspended" + }, + { + "name": "zinc, total", + "tex": "Total Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "total" + }, + { + "name": "dissolved zinc", + "tex": "Dissolved Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "dissolved" + }, + { + "name": "suspended zinc", + "tex": "Suspended Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "suspended" + }, + { + "name": "total zinc", + "tex": "Total Zinc", + "units": "ug/L", + "unicode": "Zinc", + "fraction": "total" + }, + { + "name": "alpha-chlordane", + "tex": "alpha-chlordane", + "units": "ug/L", + "unicode": "alpha-chlordane", + "fraction": "total" + }, + { + "name": "cis-1,2-dichloroethylene", + "tex": "cis-1,2-Dichloroethylene", + "units": "ug/L", + "unicode": "cis-1,2-Dichloroethylene", + "fraction": "total" + }, + { + "name": "cis-1,3-dichloropropene", + "tex": "cis-1,3-Dichloropropene", + "units": "ug/L", + "unicode": "cis-1,3-Dichloropropene", + "fraction": "total" + }, + { + "name": "di-n-butyl phthalate", + "tex": "di-n-Butyl Phthalate", + "units": "ug/L", + "unicode": "di-n-Butyl Phthalate", + "fraction": "total" + }, + { + "name": "gamma-chlordane", + "tex": "Gamma-Chlordane", + "units": "ug/L", + "unicode": "Gamma-Chlordane", + "fraction": "total" + }, + { + "name": "m-dichlorobenzene", + "tex": "m-Dichlorobenzene", + "units": "ug/L", + "unicode": "m-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "m-nitroaniline", + "tex": "m-Nitroaniline", + "units": "ug/L", + "unicode": "m-Nitroaniline", + "fraction": "total" + }, + { + "name": "m-xylene", + "tex": "m-Xylene", + "units": "ug/L", + "unicode": "m-Xylene", + "fraction": "total" + }, + { + "name": "n-butylbenzene", + "tex": "n-Butylbenzene", + "units": "ug/L", + "unicode": "n-Butylbenzene", + "fraction": "total" + }, + { + "name": "n-propylbenzene", + "tex": "n-Propylbenzene", + "units": "ug/L", + "unicode": "n-Propylbenzene", + "fraction": "total" + }, + { + "name": "o-chlorotoluene", + "tex": "o-Chlorotoluene", + "units": "ug/L", + "unicode": "o-Chlorotoluene", + "fraction": "total" + }, + { + "name": "o-dichlorobenzene", + "tex": "o-Dichlorobenzene", + "units": "ug/L", + "unicode": "o-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "o-xylene", + "tex": "o-Xylene", + "units": "ug/L", + "unicode": "o-Xylene", + "fraction": "total" + }, + { + "name": "p-bromophenyl phenyl ether", + "tex": "p-Bromophenyl Phenyl Ether", + "units": "ug/L", + "unicode": "p-Bromophenyl Phenyl Ether", + "fraction": "total" + }, + { + "name": "p-chlorophenyl phenyl ether", + "tex": "p-Chlorophenyl Phenyl Ether", + "units": "ug/L", + "unicode": "p-Chlorophenyl Phenyl Ether", + "fraction": "total" + }, + { + "name": "p-chlorotoluene", + "tex": "p-Chlorotoluene", + "units": "ug/L", + "unicode": "p-Chlorotoluene", + "fraction": "total" + }, + { + "name": "p-cymene", + "tex": "p-Cymene", + "units": "ug/L", + "unicode": "p-Cymene", + "fraction": "total" + }, + { + "name": "p-dichlorobenzene", + "tex": "p-Dichlorobenzene", + "units": "ug/L", + "unicode": "p-Dichlorobenzene", + "fraction": "total" + }, + { + "name": "p-nitrophenol", + "tex": "p-Nitrophenol", + "units": "ug/L", + "unicode": "p-Nitrophenol", + "fraction": "total" + }, + { + "name": "p-xylene", + "tex": "p-Xylene", + "units": "ug/L", + "unicode": "p-Xylene", + "fraction": "total" + }, + { + "name": "ph", + "tex": "pH", + "units": "S", + "unicode": "pH", + "fraction": "total" + }, + { + "name": "protons", + "tex": "Protons (Hydrogen Ions)", + "units": "mg/L", + "unicode": "Protons (Hydrogen Ions)", + "fraction": "total" + }, + { + "name": "tert-butylbenzene", + "tex": "Tertiary Butylbenzene", + "units": "ug/L", + "unicode": "Tertiary Butylbenzene", + "fraction": "total" + }, + { + "name": "total petroleum hydrocarbons - motor oil range", + "tex": "Total Petroleum Hydrocarbons (motor oil range)", + "units": "ug/L", + "unicode": "Organics, Motor Oil Range", + "fraction": "total" + }, + { + "name": "trans-1,2-dichloroethylene", + "tex": "trans-1,2-Dichloroethylene", + "units": "ug/L", + "unicode": "trans-1,2-Dichloroethylene", + "fraction": "total" + }, + { + "name": "trans-1,3-dichloropropene", + "tex": "trans-1,3-Dichloropropene", + "units": "ug/L", + "unicode": "trans-1,3-Dichloropropene", + "fraction": "total" + }, + { + "name": "trans-1,4-dichloro-2-butene", + "tex": "trans-1,4-Dichloro-2-butene", + "units": "ug/L", + "unicode": "trans-1,4-Dichloro-2-butene", + "fraction": "total" + }, + { + "name": "dibenzo[b,k]fluoranthene", + "tex": "Dibenzo[b,k]fluoranthene", + "units": "ug/L", + "unicode": "Dibenzo[b,k]fluoranthene", + "fraction": "total" + }, + { + "name": "dichlobenil", + "tex": "Dichlobenil", + "units": "ug/L", + "unicode": "Dichlobenil", + "fraction": "total" + }, + { + "name": "prometon", + "tex": "Prometon", + "units": "ug/L", + "unicode": "Prometon", + "fraction": "total" + }, + { + "name": "total volatile solids, non-filterable", + "tex": "Total Volatile Solids (non-filterable)", + "units": "ug/L", + "unicode": "Total Volatile Solids", + "fraction": "total" + }, + { + "name": "benzo(b/j)fluoranthene", + "tex": "Benzo(b/j)fluoranthene", + "units": "ug/L", + "unicode": "Benzo(b/j)fluoranthene", + "fraction": "total" + }, + { + "name": "bismuth", + "tex": "Bismuth", + "units": "ug/L", + "unicode": "Bismuth", + "fraction": "total" + }, + { + "name": "boron", + "tex": "Boron", + "units": "ug/L", + "unicode": "Boron", + "fraction": "total" + }, + { + "name": "lithium, total", + "tex": "Lithium, Total", + "units": "ug/L", + "unicode": "Lithium", + "fraction": "total" + }, + { + "name": "silicon", + "tex": "Silicon", + "units": "ug/L", + "unicode": "Silicon", + "fraction": "total" + }, + { + "name": "strontium", + "tex": "Strontium", + "units": "ug/L", + "unicode": "Strontium", + "fraction": "total" + }, + { + "name": "tellurium", + "tex": "Tellurium", + "units": "ug/L", + "unicode": "Tellurium", + "fraction": "total" + }, + { + "name": "tin, total", + "tex": "Tin, Total", + "units": "ug/L", + "unicode": "Tin", + "fraction": "total" + }, + { + "name": "titanium, total", + "tex": "Titanium, Total", + "units": "ug/L", + "unicode": "Titanium", + "fraction": "total" + }, + { + "name": "tungsten", + "tex": "Tungsten", + "units": "ug/L", + "unicode": "Tungsten", + "fraction": "total" + }, + { + "name": "uranium-234/235/238", + "tex": "Uranium-234/235/238", + "units": "ug/L", + "unicode": "Uranium", + "fraction": "total" + }, + { + "name": "uranium", + "tex": "Uranium", + "units": "ug/L", + "unicode": "Uranium", + "fraction": "total" + }, + { + "name": "zirconium", + "tex": "Zirconium", + "units": "ug/L", + "unicode": "Zirconium", + "fraction": "total" + }, + { + "name": "cesium", + "tex": "Cesium", + "units": "ug/L", + "unicode": "Cesium", + "fraction": "total" + }, + { + "name": "rubidium", + "tex": "Rubidium", + "units": "ug/L", + "unicode": "Rubidium", + "fraction": "total" + }, + { + "name": "1,2-dibromo-3-chloropropane", + "tex": "1,2-Dibromo-3-Chloropropane", + "units": "ug/L", + "unicode": "1,2-Dibromo-3-Chloropropane", + "fraction": "total" + }, + { + "name": "trans-1,2-dichloroethylenetrans-1,2-dichloroethylene", + "tex": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", + "units": "ug/L", + "unicode": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", + "fraction": "total" + }, + { + "name": "2,4,5-t", + "tex": "2,4,5-T", + "units": "ug/L", + "unicode": "2,4,5-T", + "fraction": "total" + }, + { + "name": "2,4-db", + "tex": "2,4-DB", + "units": "ug/L", + "unicode": "2,4-DB", + "fraction": "total" + }, + { + "name": "dalapon", + "tex": "Dalapon", + "units": "ug/L", + "unicode": "Dalapon", + "fraction": "total" + }, + { + "name": "dicamba", + "tex": "Dicamba", + "units": "ug/L", + "unicode": "Dicamba", + "fraction": "total" + }, + { + "name": "dichlorprop", + "tex": "Dichlorprop", + "units": "ug/L", + "unicode": "Dichlorprop", + "fraction": "total" + }, + { + "name": "mcpa", + "tex": "MCPA", + "units": "ug/L", + "unicode": "MCPA", + "fraction": "total" + }, + { + "name": "mecoprop", + "tex": "Mecoprop", + "units": "ug/L", + "unicode": "Mecoprop", + "fraction": "total" + }, + { + "name": "sulfur", + "tex": "Sulfur", + "units": "ug/L", + "unicode": "Sulfur", + "fraction": "total" + }, + { + "name": "m,p-xylenes", + "tex": "m,p-Xylenes", + "units": "ug/L", + "unicode": "m,p-Xylenes", + "fraction": "total" + }, + { + "name": "silica", + "tex": "Silica", + "units": "ug/L", + "unicode": "Silica", + "fraction": "total" + }, + { + "name": "nitrogen, dissolved", + "tex": "Nitrogen, Dissolved", + "units": "ug/L", + "unicode": "Nitrogen", + "fraction": "dissolved" + }, + { + "name": "nitrogen, particulate", + "tex": "Nitrogen, Particulate", + "units": "ug/L", + "unicode": "Nitrogen", + "fraction": "particulate" + }, + { + "name": "meta & para xylene mix", + "tex": "meta & para Xylene mix", + "units": "ug/L", + "unicode": "m,p-Xylenes", + "fraction": "total" + }, + { + "name": "temperature, air", + "tex": "Temperature, air", + "units": "deg C", + "unicode": "Temperature, Air", + "fraction": "total" + }, + { + "name": "gasoline range organics", + "tex": "Gasoline range organics", + "units": "ug/L", + "unicode": "Organics, Gasoline Range", + "fraction": "total" + }, + { + "name": "particle size, percent > 50 microns", + "tex": "Particle Size, Percent > 50 microns", + "units": "ug/L", + "unicode": "Particle Size, Percent >50 µm", + "fraction": "total" + }, + { + "name": "chlorophyll a, uncorrected for pheophytin", + "tex": "Chlorophyll A (uncorrected for pheophytin)", + "units": "ug/L", + "unicode": "Chlorophyll A (uncorrected for pheophytin)", + "fraction": "total" + }, + { + "name": "1-methylphenanthrene", + "tex": "1-Methylphenanthrene", + "units": "ug/L", + "unicode": "1-Methylphenanthrene", + "fraction": "total" + }, + { + "name": "2,6-dimethylnaphthalene", + "tex": "2,6-Dimethylnaphthalene", + "units": "ug/L", + "unicode": "2,6-Dimethylnaphthalene", + "fraction": "total" + }, + { + "name": "benzo[e]pyrene", + "tex": "Benzo[e]pyrene", + "units": "ug/L", + "unicode": "Benzo[e]pyrene", + "fraction": "total" + }, + { + "name": "bifenthrin by nci", + "tex": "Bifenthrin by NCI", + "units": "ug/L", + "unicode": "Bifenthrin by NCI", + "fraction": "total" + }, + { + "name": "cobalt, dissolved", + "tex": "Cobalt, Dissolved", + "units": "ug/L", + "unicode": "Cobalt", + "fraction": "dissolved" + }, + { + "name": "cyfluthrin by nci", + "tex": "Cyfluthrin by NCI", + "units": "ug/L", + "unicode": "Cyfluthrin by NCI", + "fraction": "total" + }, + { + "name": "cypermethrin", + "tex": "Cypermethrin", + "units": "ug/L", + "unicode": "Cypermethrin", + "fraction": "total" + }, + { + "name": "dibenzothiophene", + "tex": "Dibenzothiophene", + "units": "ug/L", + "unicode": "Dibenzothiophene", + "fraction": "total" + }, + { + "name": "esfenvalerate", + "tex": "Esfenvalerate", + "units": "ug/L", + "unicode": "Esfenvalerate", + "fraction": "total" + }, + { + "name": "fenvalerate", + "tex": "Fenvalerate", + "units": "ug/L", + "unicode": "Fenvalerate", + "fraction": "total" + }, + { + "name": "l-cyhalothrin by nci", + "tex": "L-Cyhalothrin by NCI", + "units": "ug/L", + "unicode": "L-Cyhalothrin by NCI", + "fraction": "total" + }, + { + "name": "molybdenum, dissolved", + "tex": "Molybdenum, Dissolved", + "units": "ug/L", + "unicode": "Molybdenum", + "fraction": "dissolved" + }, + { + "name": "permethrin", + "tex": "Permethrin", + "units": "ug/L", + "unicode": "Permethrin", + "fraction": "total" + }, + { + "name": "tin, dissolved", + "tex": "Tin, Dissolved", + "units": "ug/L", + "unicode": "Tin", + "fraction": "dissolved" + }, + { + "name": "titanium, dissolved", + "tex": "Titanium, Dissolved", + "units": "ug/L", + "unicode": "Titanium", + "fraction": "dissolved" + }, + { + "name": "vanadium, dissolved", + "tex": "Vanadium, Dissolved", + "units": "ug/L", + "unicode": "Vanadium", + "fraction": "dissolved" + }, + { + "name": "cypermethrin by nci", + "tex": "Cypermethrin by NCI", + "units": "ug/L", + "unicode": "Cypermethrin by NCI", + "fraction": "total" + }, + { + "name": "bicarbonate", + "tex": "Bicarbonate", + "units": "ug/L", + "unicode": "Bicarbonate", + "fraction": "total" + }, + { + "name": "Campylobacter spp.", + "tex": "Campylobacter spp.", + "units": "MPN/100 mL", + "unicode": "Campylobacter spp.", + "fraction": "total" + }, + { + "name": "C. dubia % survival (100% sample)", + "tex": "c. dubia % survival (100% sample)", + "units": "%", + "unicode": "c. dubia % survival (100% sample)", + "fraction": "total" + }, + { + "name": "C. dubia reproduction, % control (100% sample)", + "tex": "C. dubia reproduction, % control (100% sample)", + "units": "%", + "unicode": "C. dubia reproduction, % control (100% sample)", + "fraction": "total" + }, + { + "name": "d8-acenaphthylene", + "tex": "D8-Acenaphthylene", + "units": "ug/L", + "unicode": "D8-Acenaphthylene", + "fraction": "total" + }, + { + "name": "d10-anthracene", + "tex": "D10-Anthracene", + "units": "ug/L", + "unicode": "D10-Anthracene", + "fraction": "total" + }, + { + "name": "d14-terphenyl (fs)", + "tex": "D14-Terphenyl (FS)", + "units": "ug/L", + "unicode": "D14-Terphenyl (FS)", + "fraction": "total" + }, + { + "name": "particle size, % <0.21 um, >0.10 um", + "tex": "Particle Size, % <0.21 um, >0.10 um", + "units": "mg/L", + "unicode": "Particle Size, % <0.21 µm, >0.10 µm", + "fraction": "total" + }, + { + "name": "particle size, d50", + "tex": "Particle Size, D50", + "units": "μm", + "unicode": "Particle Size, D50", + "fraction": "total" + }, + { + "name": "% sand, very coarse (1000-2000um)", + "tex": "Percent sand, very coarse (1000-2000 \\si[per-mode=symbol]{\\micro\\meter})", + "units": "%", + "unicode": "Percent sand, very coarse (1000-2000 µm)", + "fraction": "total" + }, + { + "name": "echinoderm fertilization (50% sample)", + "tex": "Echinoderm fertilization (50% sample)", + "units": "NS", + "unicode": "Echinoderm fertilization (50% sample)", + "fraction": "total" + } +] \ No newline at end of file diff --git a/pybmpdb/data/units.json b/pybmpdb/data/units.json index d843d76..4df9b93 100644 --- a/pybmpdb/data/units.json +++ b/pybmpdb/data/units.json @@ -1 +1,242 @@ -[{"name": "%", "factor": 1, "tex": "\\si{\\percent}", "unicode": "%"}, {"name": "NS", "factor": 1, "tex": "NS", "unicode": "NS"}, {"name": "#/100mL", "factor": 1, "tex": "\\#\\SI[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "10/ml", "factor": 100, "tex": "\\SI[per-mode=symbol]{10}{\\per\\milli\\liter}", "unicode": "10/mL"}, {"name": "MPN/100 mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "MPN/L", "factor": 0.1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "MPN/100mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL"}, {"name": "CFU/100 mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "CFU/100 mL"}, {"name": "CFU/100mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "CFU/100 mL"}, {"name": "NT", "factor": 1, "tex": "NT", "unicode": "NT"}, {"name": "PC", "factor": 1, "tex": "PC", "unicode": "PC"}, {"name": "s", "factor": 1, "tex": "", "unicode": "S"}, {"name": "ml/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\liter\\per\\liter}", "unicode": "mL/L"}, {"name": "mV", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\volt}", "unicode": "mV"}, {"name": "kg/L", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\kilo\\gram\\per\\liter}", "unicode": "kg/L"}, {"name": "g/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\gram\\per\\liter}", "unicode": "g/L"}, {"name": "mg/L", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", "unicode": "mg/L"}, {"name": "ug/L", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", "unicode": "\u03bcg/L"}, {"name": "\u00b5g/L", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", "unicode": "\u03bcg/L"}, {"name": "ng/L", "factor": 1e-09, "tex": "\\si[per-mode=symbol]{\\nano\\gram\\per\\liter}", "unicode": "ng/L"}, {"name": "\u00b0C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "deg C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "degC", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "\u00b0C"}, {"name": "\u00b5mhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u03bcmhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "umhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "umho/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u03bcS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "\u00b5S/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "uS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", "unicode": "\u03bcS/cm"}, {"name": "mS", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\milli\\siemens}", "unicode": "mS"}, {"name": "ADMI value", "factor": 1, "tex": "ADMI Value", "unicode": "ADMI Value"}, {"name": "kg", "factor": 1, "tex": "kg", "unicode": "kg"}, {"name": "m", "factor": 1, "tex": "\\si[per-mode=symbol]{meter}", "unicode": "m"}, {"name": "mm", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\meter}", "unicode": "mm"}, {"name": "um", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", "unicode": "\u03bcm"}, {"name": "\u03bcm", "factor": 1e-06, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", "unicode": "\u03bcm"}, {"name": "SU", "factor": 1, "tex": "SU", "unicode": "SU"}, {"name": "NTU", "factor": 1, "tex": "NTU", "unicode": "NTU"}, {"name": "PCU", "factor": 1, "tex": "PCU", "unicode": "PCU"}] \ No newline at end of file +[ + { + "name": "%", + "factor": 1, + "tex": "\\si{\\percent}", + "unicode": "%" + }, + { + "name": "NS", + "factor": 1, + "tex": "NS", + "unicode": "NS" + }, + { + "name": "#/100mL", + "factor": 1, + "tex": "\\#\\SI[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "MPN/100 mL" + }, + { + "name": "10/ml", + "factor": 100, + "tex": "\\SI[per-mode=symbol]{10}{\\per\\milli\\liter}", + "unicode": "10/mL" + }, + { + "name": "MPN/100 mL", + "factor": 1, + "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "MPN/100 mL" + }, + { + "name": "MPN/L", + "factor": 0.1, + "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "MPN/100 mL" + }, + { + "name": "MPN/100mL", + "factor": 1, + "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "MPN/100 mL" + }, + { + "name": "CFU/100 mL", + "factor": 1, + "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "CFU/100 mL" + }, + { + "name": "CFU/100mL", + "factor": 1, + "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "CFU/100 mL" + }, + { + "name": "NT", + "factor": 1, + "tex": "NT", + "unicode": "NT" + }, + { + "name": "PC", + "factor": 1, + "tex": "PC", + "unicode": "PC" + }, + { + "name": "s", + "factor": 1, + "tex": "", + "unicode": "S" + }, + { + "name": "ml/L", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\milli\\liter\\per\\liter}", + "unicode": "mL/L" + }, + { + "name": "mV", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\milli\\volt}", + "unicode": "mV" + }, + { + "name": "kg/L", + "factor": 1000, + "tex": "\\si[per-mode=symbol]{\\kilo\\gram\\per\\liter}", + "unicode": "kg/L" + }, + { + "name": "g/L", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\gram\\per\\liter}", + "unicode": "g/L" + }, + { + "name": "mg/L", + "factor": 0.001, + "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", + "unicode": "mg/L" + }, + { + "name": "ug/L", + "factor": 0.000001, + "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", + "unicode": "μg/L" + }, + { + "name": "µg/L", + "factor": 0.000001, + "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", + "unicode": "μg/L" + }, + { + "name": "ng/L", + "factor": 1e-9, + "tex": "\\si[per-mode=symbol]{\\nano\\gram\\per\\liter}", + "unicode": "ng/L" + }, + { + "name": "°C", + "factor": 1, + "tex": "\\si{\\degreeCelsius}", + "unicode": "°C" + }, + { + "name": "deg C", + "factor": 1, + "tex": "\\si{\\degreeCelsius}", + "unicode": "°C" + }, + { + "name": "degC", + "factor": 1, + "tex": "\\si{\\degreeCelsius}", + "unicode": "°C" + }, + { + "name": "µmhos/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "μmhos/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "umhos/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "umho/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "μS/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "µS/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "uS/cm", + "factor": 1, + "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", + "unicode": "μS/cm" + }, + { + "name": "mS", + "factor": 1000, + "tex": "\\si[per-mode=symbol]{\\milli\\siemens}", + "unicode": "mS" + }, + { + "name": "ADMI value", + "factor": 1, + "tex": "ADMI Value", + "unicode": "ADMI Value" + }, + { + "name": "kg", + "factor": 1, + "tex": "kg", + "unicode": "kg" + }, + { + "name": "m", + "factor": 1, + "tex": "\\si[per-mode=symbol]{meter}", + "unicode": "m" + }, + { + "name": "mm", + "factor": 0.001, + "tex": "\\si[per-mode=symbol]{\\milli\\meter}", + "unicode": "mm" + }, + { + "name": "um", + "factor": 0.000001, + "tex": "\\si[per-mode=symbol]{\\micro\\meter}", + "unicode": "μm" + }, + { + "name": "μm", + "factor": 0.000001, + "tex": "\\si[per-mode=symbol]{\\micro\\meter}", + "unicode": "μm" + }, + { + "name": "SU", + "factor": 1, + "tex": "SU", + "unicode": "SU" + }, + { + "name": "NTU", + "factor": 1, + "tex": "NTU", + "unicode": "NTU" + }, + { + "name": "PCU", + "factor": 1, + "tex": "PCU", + "unicode": "PCU" + } +] \ No newline at end of file From dc0f806f31d17a601c43677f9c34323aed073ad1 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 7 Dec 2017 15:48:22 -0800 Subject: [PATCH 09/48] put parameter and unit data back into python files std lib JSON parser wasn't handling mu and micro well --- .../{data/parameters.json => _parameters.py} | 4 +- pybmpdb/{data/units.json => _units.py} | 16 +++- pybmpdb/dataAccess.py | 82 +++++++++++++++++-- pybmpdb/info.py | 12 +-- pybmpdb/tests/test_info.py | 10 --- 5 files changed, 94 insertions(+), 30 deletions(-) rename pybmpdb/{data/parameters.json => _parameters.py} (99%) rename pybmpdb/{data/units.json => _units.py} (94%) diff --git a/pybmpdb/data/parameters.json b/pybmpdb/_parameters.py similarity index 99% rename from pybmpdb/data/parameters.json rename to pybmpdb/_parameters.py index cd0f09e..1a25345 100644 --- a/pybmpdb/data/parameters.json +++ b/pybmpdb/_parameters.py @@ -1,4 +1,4 @@ -[ +parameters = [ { "name": "1,1,1,2-tetrachloroethane", "tex": "1,1,1,2-Tetrachloroethane", @@ -3534,4 +3534,4 @@ "unicode": "Echinoderm fertilization (50% sample)", "fraction": "total" } -] \ No newline at end of file +] diff --git a/pybmpdb/data/units.json b/pybmpdb/_units.py similarity index 94% rename from pybmpdb/data/units.json rename to pybmpdb/_units.py index 4df9b93..64e2fdc 100644 --- a/pybmpdb/data/units.json +++ b/pybmpdb/_units.py @@ -1,4 +1,4 @@ -[ +units = [ { "name": "%", "factor": 1, @@ -105,13 +105,21 @@ "name": "ug/L", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", - "unicode": "μg/L" + "unicode": "µg/L" }, { + "meta": "converts greek letter to the micro sign", + "name": "μg/L", + "factor": 0.000001, + "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", + "unicode": "µg/L" + }, + { + "meta": "no-op entry for the micro sign", "name": "µg/L", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", - "unicode": "μg/L" + "unicode": "µg/L" }, { "name": "ng/L", @@ -239,4 +247,4 @@ "tex": "PCU", "unicode": "PCU" } -] \ No newline at end of file +] diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index 740f6c5..de63582 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -26,9 +26,47 @@ ] -def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, nd_correction=2): - if quals is None: - quals = ['U', 'UK', 'UA', 'UC', 'K'] +def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, + nd_correction=2): + """ Determines the scaling factor to be applied to the water quality result + based on the result qualifiers in the BMP Database. + + Parameters + ---------- + df : pandas.DataFrame + qualcol : str, optional (default = 'qual') + The column in *df* that contain the qualifiers. + rescol : str, optional (default = 'res') + The column in *df* that contain the results. + dlcol : str, optional (default = 'DL') + The column in *df* that contain the detection limts. + quals : list of str, optional. + A list of qualifiers that signify that a result is non-detect. Falls + back to ``['U', 'UK', 'UA', 'UC', 'K']`` when not provided. + nd_correction : float, optional (default = 2.0) + The factor by which non-detect results will be multiplied. + + Returns + ------- + factors : numpy.array + + Notes + ----- + The underlying assumption here is that the BMP Database reports non-detects + at half of their detection limit. So we need to double the reported value + to get the upper limit of the result for ROS/Kaplan-Meier imputation. + + Also note that there are some weird cases where UJ-flagged data should be + given a different. This occurs when the reported result is greater than the + reported DL. Lastly, UJ-flagged data where the result is less than the DL + should be scaled by the ratio of the result to the DL, such that + result * factor = DL. + + """ + + quals = wqio.validate.at_least_empty_list(quals) + if not quals: + quals.extend(['U', 'UK', 'UA', 'UC', 'K']) normal_ND = [df[qualcol].isin(quals), float(nd_correction)] weird_UJ = [(df[qualcol] == 'UJ') & (df[rescol] < df[dlcol]), df[dlcol] / df[rescol]] @@ -36,8 +74,41 @@ def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=None): - if quals is None: - quals = ['U', 'UA', 'UI', 'UC', 'UK', 'K'] + """ Determines final qualifier to be applied to the water quality result + based on the result qualifiers in the BMP Database. Non-detects get "ND", + detected values get "=". + + Parameters + ---------- + df : pandas.DataFrame + qualcol : str, optional (default = 'qual') + The column in *df* that contain the qualifiers. + rescol : str, optional (default = 'res') + The column in *df* that contain the results. + dlcol : str, optional (default = 'DL') + The column in *df* that contain the detection limts. + quals : list of str, optional. + A list of qualifiers that signify that a result is non-detect. Falls + back to ``['U', 'UA', 'UI', 'UC', 'UK', 'K']`` when not provided. + + Returns + ------- + qualifiers : numpy.array + + See also + -------- + _handle_ND_factors + + Notes + ----- + Same basic premise as _handle_ND_factors, but different qualifiers count + as ND compared to what we used to determine the ND-scaling factors. + + """ + + quals = wqio.validate.at_least_empty_list(quals) + if not quals: + quals.extend(['U', 'UA', 'UI', 'UC', 'UK', 'K']) is_ND = df[qualcol].isin(quals) | ((df[qualcol] == 'UJ') & (df[rescol] <= df[dlcol])) return numpy.where(is_ND, 'ND', '=') @@ -140,6 +211,7 @@ def load_from_access(dbfile, sqlquery=None, dbtable=None): Returns ------- bmpdata : pandas.DataFrame + """ driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' diff --git a/pybmpdb/info.py b/pybmpdb/info.py index fe936a5..931f029 100644 --- a/pybmpdb/info.py +++ b/pybmpdb/info.py @@ -1,16 +1,14 @@ import json from pkg_resources import resource_filename +from ._parameters import parameters +from ._units import units + __all__ = ['getUnits', 'getTexParam', 'getTexUnit', 'getNormalization', 'getConversion'] -def _loader(fname): - with open(resource_filename('pybmpdb.data', fname), 'r') as f: - return json.load(f) - - def _find_by_name(value_string, list_of_dicts, key='name'): # get the parameter's entry in the lookup list of dicts _entry = list(filter( @@ -74,7 +72,3 @@ def getConversion(param): p = _find_by_name(param, parameters) return getNormalization(p['units']) - - -parameters = _loader('parameters.json') -units = _loader('units.json') diff --git a/pybmpdb/tests/test_info.py b/pybmpdb/tests/test_info.py index 6f20803..d633292 100644 --- a/pybmpdb/tests/test_info.py +++ b/pybmpdb/tests/test_info.py @@ -5,16 +5,6 @@ from pybmpdb import info -@pytest.mark.parametrize(('filename', 'error'), [ - ('parameters.json', None), - ('units.json', None), - ('junks.json', FileNotFoundError) -]) -def test__loader_smoke(filename, error): - with helpers.raises(error): - info._loader(filename) - - @pytest.mark.parametrize(('value', 'expected', 'error'), [ ('ug/L', {"name": "ug/L", "factor": 1}, None), ('mg/L', None, ValueError), From 916c658152c9739a8a74dfa222b9616f63ccc680 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 11 Dec 2017 16:19:59 -0800 Subject: [PATCH 10/48] remove tests classes for summary + some cleanup --- pybmpdb/summary.py | 10 +- pybmpdb/tests/test_summary.py | 810 ++++++++++++++++------------------ 2 files changed, 389 insertions(+), 431 deletions(-) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index ac487df..4933cfd 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -35,7 +35,7 @@ def filterlocation(location, count=5, column='bmp'): def _pick_non_null(dataframe, maincol, preferred, secondary): return numpy.where( - ~dataframe[(maincol, preferred)].isnull(), + dataframe[(maincol, preferred)].notnull(), dataframe[(maincol, preferred)], dataframe[(maincol, secondary)], ) @@ -82,10 +82,7 @@ def best_col(df, mainstation, backupstation, valcol): def _pick_best_sampletype(dataframe): orig_cols = dataframe.columns - xtab = ( - dataframe.pipe(utils.refresh_index) - .unstack(level='sampletype') - ) + xtab = dataframe.pipe(utils.refresh_index).unstack(level='sampletype') for col in orig_cols: grabvalues = numpy.where( xtab[(col, 'composite')].isnull(), @@ -161,7 +158,8 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, 'Nitrogen, Nitrate (NO3) as N' ] - picker = partial(_pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1]) + picker = partial(_pick_non_null, preferred=nitro_components[0], + secondary=nitro_components[1]) nitro_combined = 'Nitrogen, NOx as N' df = dataAccess.transform_parameters( df, nitro_components, nitro_combined, 'mg/L', diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 412365e..8a96f17 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -2,6 +2,8 @@ import os from io import StringIO from pkg_resources import resource_filename +from textwrap import dedent +from tempfile import TemporaryDirectory from unittest import mock import pytest @@ -76,6 +78,7 @@ def __init__(self, infl_include, effl_include): 'parameter': mock_parameter(), 'category': 'testbmp' } + self.scenario = (infl_include, effl_include) def scatterplot(self, *args, **kwargs): return mock_figure() @@ -84,444 +87,135 @@ def statplot(self, *args, **kwargs): return mock_figure() -class _base_DatasetSummary_Mixin(object): +@pytest.fixture(params=[ + (True, True), + (True, False), + (False, False), + (False, True) +]) +def dset_sum(request): + ds = mock_dataset(request.param[0], request.param[1]) + return summary.DatasetSummary(ds, 'Metals', 'testfigpath') - def main_setup(self): - self.known_paramgroup = 'Metals' - self.known_bmp = 'testbmp' - self.known_latex_file_name = 'metalstestbmpcarbondioxide' - self.ds_sum = summary.DatasetSummary(self.ds, self.known_paramgroup, 'testfigpath') - self.known_latex_input_tt = r"""\subsection{testbmp} - \begin{table}[h!] - \caption{test table title} - \centering - \begin{tabular}{l l l l l} - \toprule - \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ - \toprule - Count & 25 & 25 \\ - \midrule - Number of NDs & 5 & 5 \\ - \midrule - Min; Max & 0.123; 123 & 0.123; 123 \\ - \midrule - Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ - \midrule - Standard Deviation & 4.56 & 4.56 \\ - \midrule - Log. Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ - \midrule - Log. Standard Deviation & 4.56 & 4.56 \\ - \midrule - Geo. Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ - \midrule - Coeff. of Variation & 5.61 & 5.61 \\ - \midrule - Skewness & 6.12 & 6.12 \\ - \midrule - Median & 1.23 & 1.23 \\ - %% - (95\% confidence interval) & (0.235; 2.23) & (0.235; 2.23) \\ - \midrule - Quartiles & 0.612; 2.35 & 0.612; 2.35 \\ - \toprule - Number of Pairs & \multicolumn{2}{c} {22} \\ - \midrule - Wilcoxon p-value & \multicolumn{2}{c} {$<0.001$} \\ - \midrule - Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ - \bottomrule - \end{tabular} - \end{table} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} - \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} - \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage""" + '\n' - - self.known_latex_input_ff = '' - self.known_latex_input_ft = r"""\subsection{testbmp} - \begin{table}[h!] - \caption{test table title} - \centering - \begin{tabular}{l l l l l} - \toprule - \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ - \toprule - Count & NA & 25 \\ - \midrule - Number of NDs & NA & 5 \\ - \midrule - Min; Max & NA & 0.123; 123 \\ - \midrule - Mean & NA & 12.3 \\ - %% - (95\% confidence interval) & NA & (11.3; 13.3) \\ - \midrule - Standard Deviation & NA & 4.56 \\ - \midrule - Log. Mean & NA & 12.3 \\ - %% - (95\% confidence interval) & NA & (11.3; 13.3) \\ - \midrule - Log. Standard Deviation & NA & 4.56 \\ - \midrule - Geo. Mean & NA & 12.3 \\ - %% - (95\% confidence interval) & NA & (11.3; 13.3) \\ - \midrule - Coeff. of Variation & NA & 5.61 \\ - \midrule - Skewness & NA & 6.12 \\ - \midrule - Median & NA & 1.23 \\ - %% - (95\% confidence interval) & NA & (0.235; 2.23) \\ - \midrule - Quartiles & NA & 0.612; 2.35 \\ - \toprule - Number of Pairs & \multicolumn{2}{c} {NA} \\ - \midrule - Wilcoxon p-value & \multicolumn{2}{c} {NA} \\ - \midrule - Mann-Whitney p-value & \multicolumn{2}{c} {NA} \\ - \bottomrule - \end{tabular} - \end{table} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} - \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} - \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage""" + '\n' - - def test_paramgroup(self): - assert isinstance(self.ds_sum.paramgroup, str) - assert self.ds_sum.paramgroup == self.known_paramgroup - def test_ds(self): - assert isinstance(self.ds_sum.ds, mock_dataset) +def test_DatasetSummary_paramgroup(dset_sum): + assert dset_sum.paramgroup == 'Metals' - def test_parameter(self): - assert isinstance(self.ds_sum.parameter, mock_parameter) - def test_bmp(self): - assert isinstance(self.ds_sum.bmp, str) - assert self.ds_sum.bmp == self.known_bmp +def test_DatasetSummary_ds(dset_sum): + assert isinstance(dset_sum.ds, mock_dataset) - def test_latex_file_name(self): - assert isinstance(self.ds_sum.latex_file_name, str) - assert self.ds_sum.latex_file_name == self.known_latex_file_name - def test__tex_table_row_basic(self): - r = self.ds_sum._tex_table_row('The Medians', 'median') - assert r == self.known_r_basic +def test_DatasetSummary_parameter(dset_sum): + assert dset_sum.parameter is dset_sum.ds.definition['parameter'] - def test__tex_table_row_forceint(self): - r = self.ds_sum._tex_table_row('Counts', 'N', forceint=True, - sigfigs=1) - assert r == self.known_r_forceint - def test__tex_table_row_advanced(self): - r = self.ds_sum._tex_table_row('Mean CI', 'mean_conf_interval', rule='top', - twoval=True, ci=True, sigfigs=2) - assert r == self.known_r_advanced +def test_DatasetSummary_bmp(dset_sum): + assert dset_sum.bmp is dset_sum.ds.definition['category'] - def test__text_table_row_twoattrs(self): - r = self.ds_sum._tex_table_row('Quartiles', ['pctl25', 'pctl75'], twoval=True) - assert r == self.known_r_twoattrs - def test__make_tex_figure(self): - fig = self.ds_sum._make_tex_figure('testfig.png', 'test caption') - known_fig = r""" - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfig.png} - \caption{test caption} - \end{figure} \clearpage""" + '\n' - assert fig == known_fig - - def test_makeTexInput(self): - if self.scenario == 'TT': - known_tstring = self.known_latex_input_tt - elif self.scenario == 'FT': - known_tstring = self.known_latex_input_ft - else: - known_tstring = self.known_latex_input_ff - - tstring = self.ds_sum.makeTexInput('test table title') - - helpers.assert_bigstring_equal( - tstring, - known_tstring, - '{}_out_test.test'.format(self.scenario), - '{}_out_known.test'.format(self.scenario) - ) +def test_DatasetSummary_latex_file_name(dset_sum): + assert dset_sum.latex_file_name == 'metalstestbmpcarbondioxide' -class Test_DatasetSummary_TT(_base_DatasetSummary_Mixin): - def setup(self): - self.scenario = 'TT' - self.ds = mock_dataset(True, True) - self.known_r_basic = r''' +def test_DatasetSummary__tex_table_row_basic(dset_sum): + expected = { + (True, True): r''' \midrule - The Medians & 1.23 & 1.23 \\''' - - self.known_r_advanced = r''' - \toprule - Mean CI & (11; 13) & (11; 13) \\''' - - self.known_r_twoattrs = r''' + The Medians & 1.23 & 1.23 \\''', + (True, False): r''' \midrule - Quartiles & 0.612; 2.35 & 0.612; 2.35 \\''' - - self.known_r_forceint = r''' + The Medians & 1.23 & NA \\''', + (False, True): r''' \midrule - Counts & 25 & 25 \\''' + The Medians & NA & 1.23 \\''', + (False, False): r''' + \midrule + The Medians & NA & NA \\''' + } + result_row = dset_sum._tex_table_row('The Medians', 'median') + assert result_row == expected[dset_sum.ds.scenario] - self.main_setup() - def test__make_tex_table(self): - table = self.ds_sum._make_tex_table('test title') - known_table = r""" - \begin{table}[h!] - \caption{test title} - \centering - \begin{tabular}{l l l l l} - \toprule - \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ - \toprule - Count & 25 & 25 \\ - \midrule - Number of NDs & 5 & 5 \\ - \midrule - Min; Max & 0.123; 123 & 0.123; 123 \\ - \midrule - Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ +def test_DatasetSummary__tex_table_row_forceint(dset_sum): + expected = { + (True, True): r''' \midrule - Standard Deviation & 4.56 & 4.56 \\ - \midrule - Log. Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ - \midrule - Log. Standard Deviation & 4.56 & 4.56 \\ - \midrule - Geo. Mean & 12.3 & 12.3 \\ - %% - (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ - \midrule - Coeff. of Variation & 5.61 & 5.61 \\ - \midrule - Skewness & 6.12 & 6.12 \\ + Counts & 25 & 25 \\''', + (True, False): r''' \midrule - Median & 1.23 & 1.23 \\ - %% - (95\% confidence interval) & (0.235; 2.23) & (0.235; 2.23) \\ - \midrule - Quartiles & 0.612; 2.35 & 0.612; 2.35 \\ - \toprule - Number of Pairs & \multicolumn{2}{c} {22} \\ + Counts & 25 & NA \\''', + (False, True): r''' \midrule - Wilcoxon p-value & \multicolumn{2}{c} {$<0.001$} \\ + Counts & NA & 25 \\''', + (False, False): r''' \midrule - Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ - \bottomrule - \end{tabular} - \end{table}""" + '\n' - try: - assert (table == known_table) - except: - with open('make_tex_table_res.test', 'w') as f: - f.write(table) - with open('make_tex_table_exp.test', 'w') as f: - f.write(known_table) - raise - - -class Test_DatasetSummary_TF(_base_DatasetSummary_Mixin): - def setup(self): - self.scenario = 'TF' - self.ds = mock_dataset(True, False) - self.main_setup() - self.known_r_basic = r''' - \midrule - The Medians & 1.23 & NA \\''' - - self.known_r_advanced = r''' - \toprule - Mean CI & (11; 13) & NA \\''' + Counts & NA & NA \\''' + } + result_row = dset_sum._tex_table_row('Counts', 'N', forceint=True, sigfigs=1) + assert result_row == expected[dset_sum.ds.scenario] - self.known_r_twoattrs = r''' - \midrule - Quartiles & 0.612; 2.35 & NA \\''' - self.known_r_forceint = r''' - \midrule - Counts & 25 & NA \\''' +def test_DatasetSummary__tex_table_row_advanced(dset_sum): + expected = { + (True, True): r''' + \toprule + Mean CI & (11; 13) & (11; 13) \\''', + (True, False): r''' + \toprule + Mean CI & (11; 13) & NA \\''', + (False, True): r''' + \toprule + Mean CI & NA & (11; 13) \\''', + (False, False): r''' + \toprule + Mean CI & NA & NA \\''', + } + result_row = dset_sum._tex_table_row('Mean CI', 'mean_conf_interval', rule='top', + twoval=True, ci=True, sigfigs=2) + assert result_row == expected[dset_sum.ds.scenario] -class Test_DatasetSummary_FT(_base_DatasetSummary_Mixin): - def setup(self): - self.scenario = 'FT' - self.ds = mock_dataset(False, True) - self.main_setup() - self.known_r_basic = r''' +def test_DatasetSummary__text_table_row_twoattrs(dset_sum): + expected = { + (True, True): r''' \midrule - The Medians & NA & 1.23 \\''' - - self.known_r_advanced = r''' - \toprule - Mean CI & NA & (11; 13) \\''' - - self.known_r_twoattrs = r''' + Quartiles & 0.612; 2.35 & 0.612; 2.35 \\''', + (True, False): r''' \midrule - Quartiles & NA & 0.612; 2.35 \\''' - - self.known_r_forceint = r''' + Quartiles & 0.612; 2.35 & NA \\''', + (False, True): r''' \midrule - Counts & NA & 25 \\''' - - -class Test_DatasetSummary_FF(_base_DatasetSummary_Mixin): - def setup(self): - self.scenario = 'FF' - self.ds = mock_dataset(False, False) - self.main_setup() - self.known_r_basic = r''' + Quartiles & NA & 0.612; 2.35 \\''', + (False, False): r''' \midrule - The Medians & NA & NA \\''' + Quartiles & NA & NA \\''', + } + result_row = dset_sum._tex_table_row('Quartiles', ['pctl25', 'pctl75'], twoval=True) + assert result_row == expected[dset_sum.ds.scenario] - self.known_r_advanced = r''' - \toprule - Mean CI & NA & NA \\''' - self.known_r_twoattrs = r''' - \midrule - Quartiles & NA & NA \\''' +def test_DatasetSummary__make_tex_figure(dset_sum): + fig = dset_sum._make_tex_figure('testfig.png', 'test caption') + known_fig = r""" + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfig.png} + \caption{test caption} + \end{figure} \clearpage""" + '\n' + assert fig == known_fig - self.known_r_forceint = r''' - \midrule - Counts & NA & NA \\''' +def test_DatasetSummary_makeTexInput(dset_sum, expected_latext_input): + result = dset_sum.makeTexInput('test table title') + helpers.assert_bigstring_equal(result, expected_latext_input[dset_sum.ds.scenario]) -class Test_CategoricalSummary(object): - def setup(self): - includes = [ - (True, True), - (True, False), - (True, True), - (False, False), - (False, True) - ] - self.datasets = [mock_dataset(*inc) for inc in includes] - self.known_paramgroup = 'Metals' - self.known_dataset_count = 3 - self.csum = summary.CategoricalSummary( - self.datasets, - self.known_paramgroup, - 'basepath', - 'testfigpath' - ) - self.known_latex_input_content = input_file_string - self.known_latex_report_content = ( - '\\begin{document}test report title\n' - '\\input{testpath.tex}\n' - '\\end{document}\n' - ) - - self.test_templatefile = 'testtemplate.tex' - with open(self.test_templatefile, 'w') as f: - f.write('\\begin{document}__VARTITLE') - def teardown(self): - os.remove(self.test_templatefile) - - def test_datasets(self): - for ds in self.csum.datasets: - assert isinstance(ds, mock_dataset) - - assert self.known_dataset_count == len(self.csum.datasets) - - def test_paramgroup(self): - assert isinstance(self.csum.paramgroup, str) - assert self.csum.paramgroup == self.known_paramgroup - - @pytest.mark.skipif(PYTHON2, reason='legacy python') - def test__make_input_file_IO(self): - with StringIO() as inputIO: - self.csum._make_input_file_IO(inputIO) - input_string = inputIO.getvalue() - - helpers.assert_bigstring_equal( - input_string, - self.known_latex_input_content, - 'test__make_input_file_IO_res.tex', - 'test__make_input_file_IO_exp.test' - ) - - @pytest.mark.skipif(PYTHON2, reason='legacy python') - def test__make_report_IO(self): - with StringIO() as reportIO: - with open(self.test_templatefile, 'r') as templateIO: - self.csum._make_report_IO( - templateIO, 'testpath.tex', reportIO, 'test report title' - ) - - helpers.assert_bigstring_equal( - reportIO.getvalue(), - self.known_latex_report_content, - 'test_reportIO.tex', - 'test_reportIO_expected.tex' - ) - - @pytest.mark.skipif(PYTHON2, reason='legacy python') - def test_makeReport(self): - templatepath = get_tex_file('draft_template.tex') - inputpath = get_tex_file('inputs_{}.tex'.format(self.csum.paramgroup.lower())) - reportpath = get_tex_file('report_{}.tex'.format(self.csum.paramgroup.lower())) - self.csum.makeReport( - self.test_templatefile, - 'testpath.tex', - reportpath, - 'test report title', - regenfigs=False - ) - - with open(reportpath, 'r') as rp: - helpers.assert_bigstring_equal( - rp.read(), - self.known_latex_report_content, - 'test_report.tex', - 'test_report_expected.tex' - ) - - -input_file_string = r'''\section{Carbon Dioxide} -\subsection{testbmp} +def test_DatasetSummary__make_tex_table(dset_sum): + if dset_sum.ds.scenario == (True, True): + expected = r""" \begin{table}[h!] - \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \caption{test title} \centering \begin{tabular}{l l l l l} \toprule @@ -566,23 +260,21 @@ def test_makeReport(self): Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ \bottomrule \end{tabular} - \end{table} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} - \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} - - \begin{figure}[hb] % FIGURE - \centering - \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} - \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage -\clearpage -\subsection{testbmp} + \end{table}""" + '\n' + result = dset_sum._make_tex_table('test title') + helpers.assert_bigstring_equal(result, expected) + else: + pass + + +@pytest.fixture +def expected_latext_input(): + return { + (False, False): '', + (True, False): '', + (True, True): r"""\subsection{testbmp} \begin{table}[h!] - \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \caption{test table title} \centering \begin{tabular}{l l l l l} \toprule @@ -639,11 +331,10 @@ def test_makeReport(self): \centering \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage -\clearpage -\subsection{testbmp} + \end{figure} \clearpage""" + '\n', + (False, True): r"""\subsection{testbmp} \begin{table}[h!] - \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \caption{test table title} \centering \begin{tabular}{l l l l l} \toprule @@ -700,9 +391,278 @@ def test_makeReport(self): \centering \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage -\clearpage -''' + \end{figure} \clearpage""" + '\n' + } + + +@pytest.fixture +def cat_sum(): + includes = [ + (True, True), + (True, False), + (True, True), + (False, False), + (False, True) + ] + cs = summary.CategoricalSummary( + [mock_dataset(*inc) for inc in includes], + 'Metals', + 'basepath', + 'testfigpath' + ) + return cs + + +@pytest.fixture +def expected_latex_report(): + report = dedent("""\ + \\begin{document}test report title + \\input{testpath.tex} + \\end{document} + """) + return report + + +@ pytest.fixture +def temp_template(): + with TemporaryDirectory() as datadir: + filename = os.path.join(datadir, 'testtemplate.tex') + with open(filename, 'w') as f: + f.write('\\begin{document}__VARTITLE') + + yield filename + + +def test_CategoricalSummary_datasets(cat_sum): + for ds in cat_sum.datasets: + assert isinstance(ds, mock_dataset) + + assert len(cat_sum.datasets) == 3 + + +def test_CategoricalSummary_paramgroup(cat_sum): + assert isinstance(cat_sum.paramgroup, str) + assert cat_sum.paramgroup == 'Metals' + + +def test_CategoricalSummary__make_input_file_IO(cat_sum, expected_latext_content): + with StringIO() as inputIO: + cat_sum._make_input_file_IO(inputIO) + input_string = inputIO.getvalue() + + helpers.assert_bigstring_equal(input_string, expected_latext_content) + + +def test_CategoricalSummary__make_report_IO(cat_sum, expected_latex_report, temp_template): + with StringIO() as report, open(temp_template, 'r') as template: + cat_sum._make_report_IO(template, 'testpath.tex', report, 'test report title') + helpers.assert_bigstring_equal(report.getvalue(), expected_latex_report) + + +def test_CategoricalSummary_makeReport(cat_sum, expected_latex_report, temp_template): + templatepath = get_tex_file('draft_template.tex') + inputpath = get_tex_file('inputs_{}.tex'.format(cat_sum.paramgroup.lower())) + reportpath = get_tex_file('report_{}.tex'.format(cat_sum.paramgroup.lower())) + cat_sum.makeReport( + temp_template, + 'testpath.tex', + reportpath, + 'test report title', + regenfigs=False + ) + + with open(reportpath, 'r') as rp: + helpers.assert_bigstring_equal(rp.read(), expected_latex_report) + + +@pytest.fixture +def expected_latext_content(): + content = dedent(r""" \section{Carbon Dioxide} + \subsection{testbmp} + \begin{table}[h!] + \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \centering + \begin{tabular}{l l l l l} + \toprule + \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ + \toprule + Count & 25 & 25 \\ + \midrule + Number of NDs & 5 & 5 \\ + \midrule + Min; Max & 0.123; 123 & 0.123; 123 \\ + \midrule + Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Standard Deviation & 4.56 & 4.56 \\ + \midrule + Log. Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Log. Standard Deviation & 4.56 & 4.56 \\ + \midrule + Geo. Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Coeff. of Variation & 5.61 & 5.61 \\ + \midrule + Skewness & 6.12 & 6.12 \\ + \midrule + Median & 1.23 & 1.23 \\ + %% + (95\% confidence interval) & (0.235; 2.23) & (0.235; 2.23) \\ + \midrule + Quartiles & 0.612; 2.35 & 0.612; 2.35 \\ + \toprule + Number of Pairs & \multicolumn{2}{c} {22} \\ + \midrule + Wilcoxon p-value & \multicolumn{2}{c} {$<0.001$} \\ + \midrule + Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ + \bottomrule + \end{tabular} + \end{table} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} + \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} + \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} \clearpage + \clearpage + \subsection{testbmp} + \begin{table}[h!] + \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \centering + \begin{tabular}{l l l l l} + \toprule + \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ + \toprule + Count & 25 & 25 \\ + \midrule + Number of NDs & 5 & 5 \\ + \midrule + Min; Max & 0.123; 123 & 0.123; 123 \\ + \midrule + Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Standard Deviation & 4.56 & 4.56 \\ + \midrule + Log. Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Log. Standard Deviation & 4.56 & 4.56 \\ + \midrule + Geo. Mean & 12.3 & 12.3 \\ + %% + (95\% confidence interval) & (11.3; 13.3) & (11.3; 13.3) \\ + \midrule + Coeff. of Variation & 5.61 & 5.61 \\ + \midrule + Skewness & 6.12 & 6.12 \\ + \midrule + Median & 1.23 & 1.23 \\ + %% + (95\% confidence interval) & (0.235; 2.23) & (0.235; 2.23) \\ + \midrule + Quartiles & 0.612; 2.35 & 0.612; 2.35 \\ + \toprule + Number of Pairs & \multicolumn{2}{c} {22} \\ + \midrule + Wilcoxon p-value & \multicolumn{2}{c} {$<0.001$} \\ + \midrule + Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ + \bottomrule + \end{tabular} + \end{table} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} + \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} + \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} \clearpage + \clearpage + \subsection{testbmp} + \begin{table}[h!] + \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} + \centering + \begin{tabular}{l l l l l} + \toprule + \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\ + \toprule + Count & NA & 25 \\ + \midrule + Number of NDs & NA & 5 \\ + \midrule + Min; Max & NA & 0.123; 123 \\ + \midrule + Mean & NA & 12.3 \\ + %% + (95\% confidence interval) & NA & (11.3; 13.3) \\ + \midrule + Standard Deviation & NA & 4.56 \\ + \midrule + Log. Mean & NA & 12.3 \\ + %% + (95\% confidence interval) & NA & (11.3; 13.3) \\ + \midrule + Log. Standard Deviation & NA & 4.56 \\ + \midrule + Geo. Mean & NA & 12.3 \\ + %% + (95\% confidence interval) & NA & (11.3; 13.3) \\ + \midrule + Coeff. of Variation & NA & 5.61 \\ + \midrule + Skewness & NA & 6.12 \\ + \midrule + Median & NA & 1.23 \\ + %% + (95\% confidence interval) & NA & (0.235; 2.23) \\ + \midrule + Quartiles & NA & 0.612; 2.35 \\ + \toprule + Number of Pairs & \multicolumn{2}{c} {NA} \\ + \midrule + Wilcoxon p-value & \multicolumn{2}{c} {NA} \\ + \midrule + Mann-Whitney p-value & \multicolumn{2}{c} {NA} \\ + \bottomrule + \end{tabular} + \end{table} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/statplot/metalstestbmpcarbondioxidestats.pdf} + \caption{Box and Probability Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} + + \begin{figure}[hb] % FIGURE + \centering + \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} + \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} + \end{figure} \clearpage + \clearpage + """) + return content def _do_filter_test(index_cols, infilename, outfilename, fxn, *args): From 1dd798486646ab0c75df085583aab7699f417bed Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 11 Dec 2017 16:31:16 -0800 Subject: [PATCH 11/48] generate remaining files in temp dirs --- pybmpdb/tests/test_summary.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 8a96f17..00d1e1a 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -462,17 +462,19 @@ def test_CategoricalSummary__make_report_IO(cat_sum, expected_latex_report, temp def test_CategoricalSummary_makeReport(cat_sum, expected_latex_report, temp_template): templatepath = get_tex_file('draft_template.tex') inputpath = get_tex_file('inputs_{}.tex'.format(cat_sum.paramgroup.lower())) - reportpath = get_tex_file('report_{}.tex'.format(cat_sum.paramgroup.lower())) - cat_sum.makeReport( - temp_template, - 'testpath.tex', - reportpath, - 'test report title', - regenfigs=False - ) - - with open(reportpath, 'r') as rp: - helpers.assert_bigstring_equal(rp.read(), expected_latex_report) + with TemporaryDirectory() as tmpdir: + reportpath = os.path.join(tmpdir, 'report_{}.tex'.format(cat_sum.paramgroup.lower())) + testpath = os.path.join(tmpdir, 'testpath.tex'.format(cat_sum.paramgroup.lower())) + cat_sum.makeReport( + temp_template, + testpath, + reportpath, + 'test report title', + regenfigs=False + ) + + with open(reportpath, 'r') as rp: + helpers.assert_bigstring_equal(rp.read(), expected_latex_report) @pytest.fixture From 99a120922d40dbf3d0da0a1d25f933c4e6ec804f Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 11 Dec 2017 17:01:20 -0800 Subject: [PATCH 12/48] last test class from utils --- pybmpdb/tests/test_utils.py | 216 ++++++++++++++++++------------------ 1 file changed, 109 insertions(+), 107 deletions(-) diff --git a/pybmpdb/tests/test_utils.py b/pybmpdb/tests/test_utils.py index bd4f761..3e09eea 100644 --- a/pybmpdb/tests/test_utils.py +++ b/pybmpdb/tests/test_utils.py @@ -4,6 +4,7 @@ from textwrap import dedent from io import StringIO from pkg_resources import resource_filename +from tempfile import TemporaryDirectory from unittest import mock import pytest @@ -112,25 +113,10 @@ def test_makeTexTable_allOptions(): assert known == test -class Test_makeLongLandscapeTexTable(object): - def setup(self): - self.maxDiff = None - dfdict = { - 'W': { - 'a': 0.84386963791251501, - 'b': -0.22109837444207142, - }, - 'X': { - 'a': 0.70049867715201963, - 'b': 1.4764939161054218, - }, - 'Y': { - 'a': -1.3477794473987552, - 'b': -1.1939220296611821, - }, - } - self.df = pandas.DataFrame.from_dict(dfdict) - self.known_nofootnote = dedent(r""" +@pytest.fixture +def long_landscape_tables(): + tables = { + None: dedent(r""" \begin{landscape} \centering \rowcolors{1}{CVCWhite}{CVCLightGrey} @@ -168,9 +154,8 @@ def setup(self): \end{landscape} \clearpage - """) - - self.known_withfootnote = dedent(r""" + """), + 'test note': dedent(r""" \begin{landscape} \centering \rowcolors{1}{CVCWhite}{CVCLightGrey} @@ -209,14 +194,31 @@ def setup(self): test note \clearpage """) - - def test_makeLongLandscapeTexTable_noFootnote(self): - test = utils.makeLongLandscapeTexTable(self.df, 'test caption', 'label') - assert self.known_nofootnote == test - - def test_makeLongLandscapeTexTable_Footnote(self): - test = utils.makeLongLandscapeTexTable(self.df, 'test caption', 'label', 'test note') - assert self.known_withfootnote == test + } + return tables + + +@pytest.mark.parametrize('footnote', ['test note', None]) +def test_makeLongLandscapeTexTable(footnote, long_landscape_tables): + dfdict = { + 'W': { + 'a': 0.84386963791251501, + 'b': -0.22109837444207142, + }, + 'X': { + 'a': 0.70049867715201963, + 'b': 1.4764939161054218, + }, + 'Y': { + 'a': -1.3477794473987552, + 'b': -1.1939220296611821, + }, + } + df = pandas.DataFrame.from_dict(dfdict) + result = utils.makeLongLandscapeTexTable(df, 'test caption', 'label', + footnotetext=footnote) + expected = long_landscape_tables[footnote] + helpers.assert_bigstring_equal(result, expected) def test_makeTexFigure(): @@ -238,88 +240,88 @@ def test_processFilename(): assert endname == utils.processFilename(startname) -class Test_LaTeXDirectory(object): - def setup(self): - self.origdir = os.getcwd() - self.deepdir = os.path.join(os.getcwd(), 'test1', 'test2', 'test3') - self.deepfile = os.path.join(self.deepdir, 'f.tex') - tex_content = dedent(r""" - \documentclass[12pt]{article} - \usepackage{lingmacros} - \usepackage{tree-dvips} - \begin{document} - - \section*{Notes for My Paper} - - Don't forget to include examples of topicalization. - They look like this: - - {\small - \enumsentence{Topicalization from sentential subject:\\ - \shortex{7}{a John$_i$ [a & kltukl & [el & - {\bf l-}oltoir & er & ngii$_i$ & a Mary]]} - { & {\bf R-}clear & {\sc comp} & - {\bf IR}.{\sc 3s}-love & P & him & } - {John, (it's) clear that Mary loves (him).}} - } - - \subsection*{How to handle topicalization} - - I'll just assume a tree structure like (\ex{1}). - - {\small - \enumsentence{Structure of A$'$ Projections:\\ [2ex] - \begin{tabular}[t]{cccc} - & \node{i}{CP}\\ [2ex] - \node{ii}{Spec} & &\node{iii}{C$'$}\\ [2ex] - &\node{iv}{C} & & \node{v}{SAgrP} - \end{tabular} - \nodeconnect{i}{ii} - \nodeconnect{i}{iii} - \nodeconnect{iii}{iv} - \nodeconnect{iii}{v} - } - } - - \subsection*{Mood} - - Mood changes when there is a topic, as well as when - there is WH-movement. \emph{Irrealis} is the mood when - there is a non-subject topic or WH-phrase in Comp. - \emph{Realis} is the mood when there is a subject topic - or WH-phrase. - - \end{document} - """) +@pytest.fixture +def deep_dir(latex_content): + with TemporaryDirectory() as td: + dd = os.path.join(td, 'test1', 'test2', 'test3') + os.makedirs(dd) + with open(os.path.join(dd, 'f.tex'), 'w') as f: + f.write(latex_content) + yield dd + + +@pytest.fixture +def latex_content(): + return dedent(r""" + \documentclass[12pt]{article} + \usepackage{lingmacros} + \usepackage{tree-dvips} + \begin{document} + + \section*{Notes for My Paper} + + Don't forget to include examples of topicalization. + They look like this: + + {\small + \enumsentence{Topicalization from sentential subject:\\ + \shortex{7}{a John$_i$ [a & kltukl & [el & + {\bf l-}oltoir & er & ngii$_i$ & a Mary]]} + { & {\bf R-}clear & {\sc comp} & + {\bf IR}.{\sc 3s}-love & P & him & } + {John, (it's) clear that Mary loves (him).}} + } + + \subsection*{How to handle topicalization} + + I'll just assume a tree structure like (\ex{1}). + + {\small + \enumsentence{Structure of A$'$ Projections:\\ [2ex] + \begin{tabular}[t]{cccc} + & \node{i}{CP}\\ [2ex] + \node{ii}{Spec} & &\node{iii}{C$'$}\\ [2ex] + &\node{iv}{C} & & \node{v}{SAgrP} + \end{tabular} + \nodeconnect{i}{ii} + \nodeconnect{i}{iii} + \nodeconnect{iii}{iv} + \nodeconnect{iii}{v} + } + } + + \subsection*{Mood} + + Mood changes when there is a topic, as well as when + there is WH-movement. \emph{Irrealis} is the mood when + there is a non-subject topic or WH-phrase in Comp. + \emph{Realis} is the mood when there is a subject topic + or WH-phrase. + + \end{document} + """) + - if os.path.exists(self.deepdir): - self.teardown() +def test_LaTeXDirectory_folder_only(deep_dir): + origdir = os.getcwd() + with utils.LaTeXDirectory(deep_dir): + assert os.getcwd() == deep_dir - os.makedirs(self.deepdir) - with open(self.deepfile, 'w') as dfile: - dfile.write(tex_content) + assert os.getcwd() == origdir - def teardown(self): - allfiles = glob.glob(os.path.join(self.deepdir, "f.*")) - for af in allfiles: - os.remove(af) - os.removedirs(self.deepdir) - def test_dir(self): - assert os.getcwd() == self.origdir - with utils.LaTeXDirectory(self.deepdir): - assert os.getcwd() == self.deepdir +def test_LaTeXDirectory_file(deep_dir): + origdir = os.getcwd() + deep_file = os.path.join(deep_dir, 'f.tex') + with utils.LaTeXDirectory(deep_file): + assert os.getcwd() == deep_dir - assert os.getcwd() == self.origdir + assert os.getcwd() == origdir - def test_file(self): - assert os.getcwd() == self.origdir - with utils.LaTeXDirectory(self.deepfile): - assert os.getcwd() == self.deepdir - assert os.getcwd() == self.origdir +@pytest.mark.skipif(helpers.checkdep_tex() is None, reason='No LaTeX') +def test_compile_smoke(deep_dir, latex_content): + deep_file = os.path.join(deep_dir, 'f.tex') - @pytest.mark.skipif(helpers.checkdep_tex() is None, reason='No LaTeX') - def test_compile_smoke(self): - with utils.LaTeXDirectory(self.deepfile) as latex: - latex.compile(self.deepfile) + with utils.LaTeXDirectory(deep_file) as latex: + latex.compile(deep_file) From 606c53dfb52ee0041f1007140e4c8671f207a1df Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 11 Dec 2017 17:16:12 -0800 Subject: [PATCH 13/48] do all the conda stuff at the same time --- .travis.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2e32dae..4ea9708 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,11 +17,8 @@ before_install: - conda update --yes conda install: - - conda create --yes -n test python=$TRAVIS_PYTHON_VERSION + - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest pytest-pep8 - source activate test - - conda install --yes requests pyyaml mpl-probscale --channel=conda-forge - - conda install --yes --channel=conda-forge numpy scipy matplotlib statsmodels seaborn mpl-probscale - - conda install --yes coverage docopt pytest pytest-pep8 --channel=conda-forge - pip install git+https://github.com/Geosyntec/wqio.git - pip install codecov - pip install . --no-deps @@ -31,7 +28,6 @@ script: after_success: - if [ ${COVERAGE} = true ]; then - coverage report -m; codecov; fi From 8846fa65cf65584f670d79239fe6a581b93c012d Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 12 Dec 2017 10:35:56 -0800 Subject: [PATCH 14/48] fix coverage controller --- .travis_coveragerc => .coveragerc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .travis_coveragerc => .coveragerc (100%) diff --git a/.travis_coveragerc b/.coveragerc similarity index 100% rename from .travis_coveragerc rename to .coveragerc From 4843814bfcc8bd7a31c6a99a332927b9b1535375 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 28 Dec 2017 09:00:08 -0800 Subject: [PATCH 15/48] use pandas combine_first and cleanup some var names --- pybmpdb/summary.py | 88 +++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 4933cfd..61ce44a 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -33,56 +33,46 @@ def filterlocation(location, count=5, column='bmp'): ) >= count -def _pick_non_null(dataframe, maincol, preferred, secondary): - return numpy.where( - dataframe[(maincol, preferred)].notnull(), - dataframe[(maincol, preferred)], - dataframe[(maincol, secondary)], - ) +def _pick_non_null(df, maincol, preferred, secondary): + return df[(maincol, preferred)].combine_first(df[(maincol, secondary)]) -def _pick_best_station(dataframe): +def _pick_best_station(df): def best_col(df, mainstation, backupstation, valcol): for sta in [mainstation, backupstation]: if (sta, valcol) not in df.columns: df = wqio.utils.assign_multilevel_column(df, numpy.nan, sta, valcol) - values = numpy.where( - df[(mainstation, valcol)].isnull(), - df[(backupstation, valcol)], - df[(mainstation, valcol)] - ) - return values + return df[(mainstation, valcol)].combine_first(df[(backupstation, valcol)]) - orig_index = dataframe.index.names + orig_index = df.index.names data = ( - dataframe - .pipe(utils.refresh_index) - .unstack(level='station') - .pipe(wqio.utils.swap_column_levels, 0, 1) - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'res'), - 'final_outflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'qual'), - 'final_outflow', 'qual') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'res'), - 'final_inflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'qual'), - 'final_inflow', 'qual') - .loc[:, lambda df: df.columns.map(lambda c: 'final_' in c[0])] - .rename(columns=lambda col: col.replace('final_', '')) - .stack(level='station') + df.pipe(utils.refresh_index) + .unstack(level='station') + .pipe(wqio.utils.swap_column_levels, 0, 1) + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'outflow', 'subsurface', 'res'), + 'final_outflow', 'res') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'outflow', 'subsurface', 'qual'), + 'final_outflow', 'qual') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'inflow', 'reference outflow', 'res'), + 'final_inflow', 'res') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'inflow', 'reference outflow', 'qual'), + 'final_inflow', 'qual') + .loc[:, lambda df: df.columns.map(lambda c: 'final_' in c[0])] + .rename(columns=lambda col: col.replace('final_', '')) + .stack(level='station') ) return data -def _pick_best_sampletype(dataframe): - orig_cols = dataframe.columns - xtab = dataframe.pipe(utils.refresh_index).unstack(level='sampletype') +def _pick_best_sampletype(df): + orig_cols = df.columns + xtab = df.pipe(utils.refresh_index).unstack(level='sampletype') for col in orig_cols: grabvalues = numpy.where( xtab[(col, 'composite')].isnull(), @@ -98,37 +88,39 @@ def _pick_best_sampletype(dataframe): return data -def _filter_onesided_BMPs(dataframe, execute=True): +def _filter_onesided_BMPs(df, execute=True): grouplevels = ['site', 'bmp', 'parameter', 'category'] pivotlevel = 'station' if execute: data = ( - dataframe.unstack(level=pivotlevel) - .groupby(level=grouplevels) - .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) - .stack(level=pivotlevel) + df.unstack(level=pivotlevel) + .groupby(level=grouplevels) + .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) + .stack(level=pivotlevel) ) else: - data = dataframe.copy() + data = df.copy() return data -def _filter_by_storm_count(dataframe, minstorms): +def _filter_by_storm_count(df, minstorms): # filter out all monitoring stations with less than /N/ storms grouplevels = ['site', 'bmp', 'parameter', 'station'] - data = dataframe.groupby(level=grouplevels).filter( - lambda g: g.count()['res'] >= minstorms + data = ( + df.groupby(level=grouplevels) + .filter(lambda g: g.count()['res'] >= minstorms) ) return data -def _filter_by_BMP_count(dataframe, minbmps): +def _filter_by_BMP_count(df, minbmps): grouplevels = ['category', 'parameter', 'station'] - data = dataframe.groupby(level=grouplevels).filter( - lambda g: g.index.get_level_values('bmp').unique().shape[0] >= minbmps + data = ( + df.groupby(level=grouplevels) + .filter(lambda g: g.index.get_level_values('bmp').unique().shape[0] >= minbmps) ) return data From e1a52754d0cf4ef02c68f0a5c64e5cec42e81112 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 28 Dec 2017 09:00:37 -0800 Subject: [PATCH 16/48] add generate_vstascks.py --- generate_vstasks.py | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 generate_vstasks.py diff --git a/generate_vstasks.py b/generate_vstasks.py new file mode 100644 index 0000000..a7e1634 --- /dev/null +++ b/generate_vstasks.py @@ -0,0 +1,61 @@ +import sys +import os + + +TEMPLATE = """\ +{{ + "version": "0.1.0", + "isShellCommand": false, + "args": [], + "showOutput": "always", + "echoCommand": false, + "suppressTaskName": false, + "tasks": [ + {{ + "taskName": "test", + "command": "{pyexec:s}", + "args": [ + "check_{modulename:s}.py", + "--cov", + "--pep8" + ] + }}, + {{ + "taskName": "notebooks", + "options": {{ + "cwd": "${{workspaceRoot}}/docs/tutorial" + }}, + "command": "{pyexec:s}", + "args": ["make.py"] + }}, + {{ + "taskName": "docs", + "options": {{ + "cwd": "${{workspaceRoot}}/docs" + }}, + "command": "make.bat", + "args": ["html"] + }} + ] +}} +""" + + +if __name__ == '__main__': + dirname = ".vscode" + filename = "tasks.json" + + filepath = os.path.join(dirname, filename) + if not os.path.exists(dirname): + os.makedirs(dirname) + + if len(sys.argv) < 2: + name = os.path.split(os.getcwd())[-1] + else: + name = sys.argv[1] + + python = '/'.join(sys.executable.split(os.path.sep)) + config = TEMPLATE.format(pyexec=python, modulename=name) + + with open(filepath, 'w') as configfile: + configfile.write(config) From 22dd1f298e19bf00db605652151436c8e56c67fb Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 22 Feb 2018 14:59:59 -0800 Subject: [PATCH 17/48] update build recipes --- conda.recipe/dev/meta.yaml | 9 +-------- conda.recipe/release/meta.yaml | 11 ++--------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/conda.recipe/dev/meta.yaml b/conda.recipe/dev/meta.yaml index c06d1a8..2a74e4a 100644 --- a/conda.recipe/dev/meta.yaml +++ b/conda.recipe/dev/meta.yaml @@ -10,7 +10,7 @@ source: # - fix.patch build: - number: 3 + number: 4 script: python setup.py install requirements: @@ -40,13 +40,6 @@ test: imports: - pybmpdb - requires: - - pytest - - wqio - - commands: - - python -c "import sys, pybmpdb; sys.exit(pybmpdb.test())" - about: home: https://github.com/Geosyntec/pybmpdb.git license: BSD License diff --git a/conda.recipe/release/meta.yaml b/conda.recipe/release/meta.yaml index cce2dcc..efac701 100644 --- a/conda.recipe/release/meta.yaml +++ b/conda.recipe/release/meta.yaml @@ -1,10 +1,10 @@ package: name: pybmpdb - version: "0.1.2" + version: "0.2.0" source: git_url: https://github.com/Geosyntec/pybmpdb.git - git_tag: v0.1.2 + git_tag: v0.2.0 # patches: # List any patch files here # - fix.patch @@ -40,13 +40,6 @@ test: imports: - pybmpdb - requires: - - pytest - - wqio - - commands: - - python -c "import sys, pybmpdb; sys.exit(pybmpdb.test())" - about: home: https://github.com/Geosyntec/pybmpdb.git license: BSD License From 93cb8bb202c9ffd30a580dc8f68757f5378445fa Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 1 Aug 2018 11:05:30 -0700 Subject: [PATCH 18/48] add full data prep workflow in readme [ci skip] clean up classifiers --- readme.md | 64 ++++++++++++++++++++++++++++++++++++++++++++----------- setup.py | 6 ++---- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index ffe4d6a..ffa3103 100644 --- a/readme.md +++ b/readme.md @@ -8,19 +8,57 @@ The data file provided with this package is, for all intents and purposes, "unprepared". To load and prepare the data according to the procedure employed in the official analyses, use the `pybmp.summary.getSummaryData` function. -In short, `pybmp.summary.getSummaryData` does the following: +In short, `pybmp.prepare_data` does the following: + + 1. Fill null result qualifiers with the "detected" qualifier ("=") + 1. Strip leaading and trailing whitespace from the remaining result qualifers + 1. Correct non-detect results to be 100% of the detection limit + 1. Normalize values in the `initialscreen`, `wqscreen`, and `catscreen` columns to either 'yes', 'no', or 'unknown' + 1. Make values in the `station` column to all lower case + 1. Normalize the `sampletype` column to either 'grab', 'composite', or 'unknown' + 1. Clean up the sample dates and times + 1. Makes of the pollutant names and fractions (e.g., dissolved, total) lower case + 1. Remove "Biofilter - " from "Biofileter - Grass Strip" and "Biofilter - Grass Swale" + 1. Assign the final `units` column as the preferred unit for each analyter per [the parameters dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_parameters.py) + 1. Normalize the results based on their original units and final units per the [the units dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_units.py) + 1. Remove duplicate values by selecting the maximum result, most restrictive qualifier, and first sample date based the following index columns: + 1. 'category' + 1. 'epazone' + 1. 'state' + 1. 'site' + 1. 'bmp' + 1. 'station' + 1. 'storm' + 1. 'sampletype' + 1. 'watertype' + 1. 'paramgroup' + 1. 'units' + 1. 'parameter' + 1. 'fraction' + 1. 'initialscreen' + 1. 'wqscreen' + 1. 'catscreen' + 1. 'balanced' + 1. 'bmptype' + 1. 'pdf_id' + 1. 'ws_id' + 1. 'site_id' + 1. 'bmp_id' + +Then `pybmpdb.prep_for_summary` will: - 1. Load the raw data - 1. Select NO3 and NO2+NO3 data, combine into NOx, append to main dataset 1. Select RP and WB data, combine into RP/WB, append to main dataset - 1. Remove data with “unknown” as a sample type - 1. Select all data where sample type is “composite”, set aside as the “final” dataset - 1. Select all grab data for WB, RP, and paramgroup = “Biological”, append to “final” dataset + 1. Select NO3 and NO2+NO3 data, combine into NOx, append to main dataset + 1. Remove data with "unknown" as a sample type + 1. Select all data where sample type is "composite", set aside as the "final" dataset + 1. Select all grab data for WB & RP BMP categories and biological parameters, append to "final" dataset + 1. Rename "PF" BMPs to "Permeable Friction Course" 1. Then with that final dataset, go through each event and: - 1. Select (prefer) composite samples when both composite and grab samples exist - 1. Fall back to subsurface samples if an outflow sample is not available (reclassify as outflow) - 1. Fall back to reference samples in an inflow sample is not available (reclassify as inflow) - 1. Group by site ID, bmp ID, parameter, monitoring station and remove groups with fewer than 3 samples - 1. Group by bmp category, parameter, monitoring station and remove groups with fewer than 3 unique BMP IDs - 1. Pivot the monitoring stations into columns, then Group by site ID, bmp ID, parameter, & bmp category. Finally then remove all groups that are missing either outflow or inflow data entirely. - + 1. Select (prefer) composite samples when both composite and grab samples exist + 1. Fall back to subsurface samples if an outflow sample is not available (reclassify as outflow) + 1. Fall back to reference samples in an inflow sample is not available (reclassify as inflow) + 1. Group by site ID, bmp ID, parameter, monitoring station and remove groups with fewer than 3 samples + 1. Group by bmp category, parameter, monitoring station and remove groups with fewer than 3 unique BMP IDs + 1. Pivot the monitoring stations into columns + 1. Group by site ID, bmp ID, parameter, & bmp category. + 1. Finally, remove all groups that are missing either outflow or inflow data entirely. diff --git a/setup.py b/setup.py index bfb717b..0ac3e99 100644 --- a/setup.py +++ b/setup.py @@ -14,25 +14,23 @@ def getDataFiles(folder): return files - DESCRIPTION = "pybmpdb: Analyze data from the International Stormwater BMP Database" LONG_DESCRIPTION = DESCRIPTION NAME = "pybmpdb" -VERSION = "0.2.x" +VERSION = "0.2.0" AUTHOR = "Paul Hobson (Geosyntec Consultants)" AUTHOR_EMAIL = "phobson@geosyntec.com" URL = "https://github.com/Geosyntec/pybmpdb" DOWNLOAD_URL = "https://github.com/Geosyntec/pybmpdb/archive/master.zip" LICENSE = "BSD 3-clause" PACKAGES = find_packages(exclude=[]) -PLATFORMS = "Python 3.4 and later." +PLATFORMS = "Python 3.5 and later." CLASSIFIERS = [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Intended Audience :: Science/Research", "Topic :: Software Development :: Libraries :: Python Modules", - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', ] From e6519f0f1aed06ca1d6242839eb30b425725d4a0 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 1 Aug 2018 11:50:36 -0700 Subject: [PATCH 19/48] update to new pandas APIs --- pybmpdb/dataAccess.py | 8 ++++++-- pybmpdb/utils.py | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pybmpdb/dataAccess.py b/pybmpdb/dataAccess.py index de63582..1d723d8 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/dataAccess.py @@ -235,7 +235,7 @@ def prepare_data(raw_df): 'station', 'storm', 'sampletype', 'watertype', 'paramgroup', 'units', 'parameter', 'fraction', 'initialscreen', 'wqscreen', 'catscreen', 'balanced', - 'bmptype', 'pdf_id', 'site_id', 'bmp_id', + 'bmptype', 'pdf_id', 'ws_id', 'site_id', 'bmp_id', ] units_norm = { @@ -355,7 +355,11 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn criteria=None, dropold=True) # return the *full* dataset (preserving original params) - return pandas.concat([df.reset_index(), transformed.reset_index()]).set_index(index_name_cache) + result = pandas.concat([ + df.reset_index(), + transformed.reset_index() + ], sort=False).set_index(index_name_cache) + return result def to_DataCollection(df, **kwargs): # pragma: no cover diff --git a/pybmpdb/utils.py b/pybmpdb/utils.py index c119a18..20ee3d6 100644 --- a/pybmpdb/utils.py +++ b/pybmpdb/utils.py @@ -22,8 +22,10 @@ def refresh_index(df): """ gets around weird pandas block manager bugs that rise with deeply nested indexes """ - index_names = df.index.names - return df.reset_index().set_index(index_names) + if isinstance(df.index, pandas.MultiIndex): + return df.reset_index().set_index(df.index.names) + else: + return df def get_level_position(df, levelname): From 137601abaae275b8ecefcf1a0c34392d7e70e744 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 1 Aug 2018 11:50:57 -0700 Subject: [PATCH 20/48] update conda recipe --- conda.recipe/release/meta.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/conda.recipe/release/meta.yaml b/conda.recipe/release/meta.yaml index efac701..926f67a 100644 --- a/conda.recipe/release/meta.yaml +++ b/conda.recipe/release/meta.yaml @@ -19,8 +19,12 @@ requirements: - setuptools - pandas - numexpr - - seaborn - pyodbc + - seaborn + - statsmodels + - openpyxl + - xlrd + - six - wqio run: From aefe5e7d0636bcba3fad818be1a30b5c84ab5f87 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 1 Aug 2018 11:51:40 -0700 Subject: [PATCH 21/48] pin pytest, numpy in travis --- .gitignore | 1 + .travis.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 06cb1c0..8a4e4b9 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,7 @@ pybmpdb/*/tests/*.xlsx .coverage pybmpdb.egg-info/* result_images/* +.pytest_cache # scratch files # ################# diff --git a/.travis.yml b/.travis.yml index 4ea9708..fea8ab4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ before_install: - conda update --yes conda install: - - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest pytest-pep8 + - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy=1.15 scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest=3.5 pytest-pep8 - source activate test - pip install git+https://github.com/Geosyntec/wqio.git - pip install codecov From 5606257faf970c7a2c67ebb4c0b2c30159455508 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 1 Aug 2018 12:23:48 -0700 Subject: [PATCH 22/48] check no-op case in refresh_index --- pybmpdb/tests/test_utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pybmpdb/tests/test_utils.py b/pybmpdb/tests/test_utils.py index 3e09eea..9b10724 100644 --- a/pybmpdb/tests/test_utils.py +++ b/pybmpdb/tests/test_utils.py @@ -33,6 +33,9 @@ def test_refresh_index(): ) pdtest.assert_frame_equal(df, utils.refresh_index(df)) + dfr = df.reset_index() + assert dfr is utils.refresh_index(dfr) + def test_get_level_position(): idx = pandas.MultiIndex.from_product([ From 34635ed7f48f732392de6bbad82d02b9871d0071 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 6 Aug 2018 15:16:20 -0700 Subject: [PATCH 23/48] add NSQD loader --- pybmpdb/nsqd.py | 42 + pybmpdb/tests/_data/nsqdata.csv | 3865 +++++++++++++++++++++++++++++++ pybmpdb/tests/test_nsqd.py | 42 + 3 files changed, 3949 insertions(+) create mode 100644 pybmpdb/nsqd.py create mode 100644 pybmpdb/tests/_data/nsqdata.csv create mode 100644 pybmpdb/tests/test_nsqd.py diff --git a/pybmpdb/nsqd.py b/pybmpdb/nsqd.py new file mode 100644 index 0000000..702244e --- /dev/null +++ b/pybmpdb/nsqd.py @@ -0,0 +1,42 @@ +from pathlib import Path + +import pandas +from engarde import checks + +import wqio + + +__all__ = ['NSQData', 'load_data'] + + +class NSQData(object): + """ Class representing the National Stormwater Quality Dataset. + + Parameters + ---------- + datapath : string, optional. + Optional path the file to read. If not provided, the bundeled + data will be used. + + """ + + def __init__(self, datapath=None): + # read my heavily modified version of the database + self.datapath = Path(datapath or wqio.download('nsqd')) + self._data = None + + @property + def data(self): + if self._data is None: + self._data = pandas.read_csv(self.datapath) + return self._data + + def to_DataCollection(self, *args, **kwargs): + return wqio.DataCollection(self.data, *args, **kwargs) + + +def load_data(datapath=None, as_dataframe=False, **kwargs): + nsqd = NSQData(datapath=datapath) + if as_dataframe: + return nsqd.data + return nsqd.to_DataCollection(**kwargs) \ No newline at end of file diff --git a/pybmpdb/tests/_data/nsqdata.csv b/pybmpdb/tests/_data/nsqdata.csv new file mode 100644 index 0000000..8bf21c3 --- /dev/null +++ b/pybmpdb/tests/_data/nsqdata.csv @@ -0,0 +1,3865 @@ +epa_rain_zone,state,location_code,station_name,jurisdiction_county,jurisdiction_city,primary_landuse,secondary_landuse,percent_impervious,start_date,days since last rain,precipitation_depth_(in),season,parameter,fraction,units,res,qual,drainage_area_acres,latitude,longitude +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,,11/27/2001,,0.2,FA,Copper,Total,ug/L,50,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,11/27/2001,,0.2,FA,Copper,Total,ug/L,50,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,,1/19/2002,,1.6,WI,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,1/19/2002,,1.6,WI,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,4/22/2002,,0.17,SP,Copper,Total,ug/L,50,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,8/9/2002,,0.32,SU,Copper,Total,ug/L,20,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,5/5/2003,,0.6,SP,Copper,Total,ug/L,60,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/27/2003,,0.4,SU,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/23/2003,,0.45,WI,Copper,Total,ug/L,40,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/7/2004,,0.3,SU,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/7/2004,,0.4,FA,Copper,Total,ug/L,30,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/22/2004,,0.38,WI,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/7/2005,,1.3,SP,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,4/6/2005,,0.4,SP,Copper,Total,ug/L,30,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/8/2005,,0.5,WI,Copper,Total,ug/L,30,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/9/2006,,1.3,SP,Copper,Total,ug/L,30,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/12/2006,,0.75,FA,Copper,Total,ug/L,30,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/19/2007,,0.5,SU,Copper,Total,ug/L,950,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/11/2007,,0.3,FA,Copper,Total,ug/L,40,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/19/2008,,0.4,SP,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,5/15/2008,,1.35,SP,Copper,Total,ug/L,20,<,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,8/12/2008,,1.9,SU,Copper,Total,ug/L,20,=,336,33.53472222,86.79083333 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,11/27/2001,,0.23,FA,Copper,Total,ug/L,80,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,11/27/2001,,0.23,FA,Copper,Total,ug/L,80,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/20/2002,,0.22,SP,Copper,Total,ug/L,40,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/20/2002,,0.22,SP,Copper,Total,ug/L,40,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,5/9/2002,,0.35,SP,Copper,Total,ug/L,50,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,8/28/2002,,0.3,SU,Copper,Total,ug/L,20,<,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/11/2003,,0.5,SU,Copper,Total,ug/L,50,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,7/22/2003,,0.65,SU,Copper,Total,ug/L,60,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,12/23/2003,,0.39,WI,Copper,Total,ug/L,110,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/7/2004,,0.21,SU,Copper,Total,ug/L,50,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,9/7/2004,,0.32,FA,Copper,Total,ug/L,40,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,10/19/2004,,0.8,FA,Copper,Total,ug/L,80,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/22/2005,,0.62,SP,Copper,Total,ug/L,70,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,5/20/2005,,1.1,SP,Copper,Total,ug/L,120,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,2/2/2006,,0.15,WI,Copper,Total,ug/L,110,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,9/18/2006,,0.4,FA,Copper,Total,ug/L,40,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/19/2007,,0.2,SU,Copper,Total,ug/L,20,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,12/20/2007,,0.28,WI,Copper,Total,ug/L,20,=,750,33.52916667,86.83805556 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,,9/19/2001,,0.25,FA,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,9/19/2001,,0.25,FA,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,,1/19/2002,,1.65,WI,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,1/19/2002,,1.65,WI,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,4/12/2002,,0.2,SP,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,8/28/2002,,0.25,SU,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,4/24/2003,,0.59,SP,Copper,Total,ug/L,20,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,6/30/2003,,0.5,SU,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,10/17/2003,,0.59,FA,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,12/22/2004,,0.15,WI,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,5/20/2005,,,SP,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,9/18/2006,,,FA,Copper,Total,ug/L,30,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,2/21/2008,,,WI,Copper,Total,ug/L,20,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,9/19/2001,,0.25,FA,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,9/20/2001,,0.25,FA,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,1/19/2002,,1.65,WI,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,1/19/2002,,1.65,WI,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,4/12/2002,,0.2,SP,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,8/14/2002,,0.15,SU,Copper,Total,ug/L,50,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,4/24/2003,,0.59,SP,Copper,Total,ug/L,30,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,6/30/2003,,0.5,SU,Copper,Total,ug/L,20,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,10/17/2003,,0.59,FA,Copper,Total,ug/L,30,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,12/22/2004,,0.15,WI,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,3/27/2006,,,SP,Copper,Total,ug/L,20,<,1047,33.50972222,86.82611111 +3,AL,ALJCC005,C005,Jefferson_County,City_of_Birmingham,RE_MIX,UNK,47.17,10/19/2004,,0.25,FA,Copper,Total,ug/L,20,<,1663,, +3,AL,ALJCC005,C005,Jefferson_County,City_of_Birmingham,RE_MIX,UNK,47.17,1/13/2005,,0.6,WI,Copper,Total,ug/L,20,<,1663,, +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,,8/31/2001,,0.3,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/31/2001,,0.3,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,,3/9/2002,,0.12,SP,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,3/9/2002,,0.12,SP,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/13/2002,,0.23,FA,Copper,Total,ug/L,20,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/27/2003,,0.65,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/12/2003,,0.23,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,10/10/2003,,0.15,FA,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/7/2004,,,SU,Copper,Total,ug/L,60,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/7/2004,,0.5,FA,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,10/19/2004,,0.19,FA,Copper,Total,ug/L,90,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,1/13/2005,,0.6,WI,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/6/2005,,0.36,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,12/8/2005,,0.5,WI,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,2/2/2006,,0.3,WI,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,4/26/2006,,0.2,SP,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/12/2006,,0.95,FA,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/11/2007,,0.2,FA,Copper,Total,ug/L,20,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,12/20/2007,,0.3,WI,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,3/19/2008,,0.42,SP,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,5/15/2008,,1.6,SP,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/12/2008,,0.35,SU,Copper,Total,ug/L,20,<,112,33.46722222,86.80861111 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,,8/31/2001,,0.1,SU,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,8/31/2001,,0.1,SU,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,,3/9/2002,,0.15,SP,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,3/9/2002,,0.15,SP,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,5/29/2002,,1.55,SP,Copper,Total,ug/L,20,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/13/2002,,0.31,FA,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,6/11/2003,,0.42,SU,Copper,Total,ug/L,20,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,10/17/2003,,0.22,FA,Copper,Total,ug/L,30,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,6/14/2004,,0.3,SU,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/7/2004,,0.34,FA,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,12/5/2004,,0.5,WI,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,1/13/2005,,0.85,WI,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,4/6/2005,,0.45,SP,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,3/9/2006,,1,SP,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/18/2006,,0.28,FA,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,2/21/2008,,0.5,WI,Copper,Total,ug/L,20,<,167,33.43527778,86.77555556 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/17/2001,,0.32,WI,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/17/2001,,0.32,WI,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,5/29/2002,,1.8,SP,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,9/25/2002,,0.55,FA,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,6/11/2003,,0.5,SU,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,7/31/2003,,0.15,SU,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/13/2003,,0.3,WI,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,6/14/2004,,0.15,SU,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/5/2004,,,WI,Copper,Total,ug/L,20,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,3/22/2005,,1.2,SP,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,7/6/2005,,0.4,SU,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,9/12/2006,,1.25,FA,Copper,Total,ug/L,20,<,244,33.37472222,86.80333333 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,5/31/2012,9.165416667,0.27,SP,Copper,Total,ug/L,30,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/11/2012,0.859583333,0.29,SU,Copper,Total,ug/L,9,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/21/2012,2.686666667,1.78,SU,Copper,Total,ug/L,9,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/3/2012,3.510416667,0.18,SU,Copper,Total,ug/L,7,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/13/2012,6.452083333,1.01,SU,Copper,Total,ug/L,47,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,10/14/2012,14.90083333,1.01,FA,Copper,Total,ug/L,6,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,10/18/2012,3.12,1.17,FA,Copper,Total,ug/L,11,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,11/27/2012,14.79166667,0.32,FA,Copper,Total,ug/L,6,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,12/8/2012,3.445833333,0.09,WI,Copper,Total,ug/L,9,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,12/28/2012,2.667916667,0.73,WI,Copper,Total,ug/L,11,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,1/30/2013,4.13,1.59,WI,Copper,Total,ug/L,181,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,2/10/2013,3.295833333,2.44,WI,Copper,Total,ug/L,31,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,2/21/2013,2.3575,2.29,WI,Copper,Total,ug/L,8,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/5/2013,7.309583333,0.23,SP,Copper,Total,ug/L,8,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/11/2013,5.50125,2.32,SP,Copper,Total,ug/L,9,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/22/2013,3.635416667,0.41,SP,Copper,Total,ug/L,7,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/30/2013,6.529166667,0.78,SP,Copper,Total,ug/L,6,=,0.9,33.21388889,87.57138889 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,3/6/2000,,0.63,SP,Copper,Total,ug/L,6.1,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,6/29/2000,,1.1,SU,Copper,Total,ug/L,4.5,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,8/5/2000,,0.3,SU,Copper,Total,ug/L,3.4,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,1/8/2001,,0.25,WI,Copper,Total,ug/L,1.4,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,6/25/2001,,0.1,SU,Copper,Total,ug/L,5.4,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,12/4/2001,29,0.21,WI,Copper,Total,ug/L,7.7,=,103,32.25027222,110.9385806 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,3/6/2000,,0.79,SP,Copper,Total,ug/L,2,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,6/22/2000,,0.15,SU,Copper,Total,ug/L,10,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,1/8/2001,,0.36,WI,Copper,Total,ug/L,1.4,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,6/21/2001,,0.15,SU,Copper,Total,ug/L,4.9,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,7/3/2001,12,0.56,SU,Copper,Total,ug/L,6.8,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,12/4/2001,,0.28,WI,Copper,Total,ug/L,2.6,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,1/2/2000,,0.13,WI,Copper,Total,ug/L,4.1,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,6/27/2000,,0.31,SU,Copper,Total,ug/L,2.6,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,10/19/2000,,0.33,FA,Copper,Total,ug/L,6.5,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,6/20/2001,,0.26,SU,Copper,Total,ug/L,6.8,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,12/4/2001,29,0.12,WI,Copper,Total,ug/L,3.9,=,29,32.20511389,110.9180556 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,3/6/2000,,0.59,SP,Copper,Total,ug/L,9.6,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,6/19/2000,,0.3,SU,Copper,Total,ug/L,23,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,10/19/2000,,0.65,FA,Copper,Total,ug/L,13,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,6/22/2001,,0.35,SU,Copper,Total,ug/L,17,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,12/11/2001,,0.25,WI,Copper,Total,ug/L,9.6,=,83,32.21348889,110.9534 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,10/28/2000,2,0.39,FA,Copper,Total,ug/L,17,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2000,1,0.21,WI,Copper,Total,ug/L,14.5,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/7/2001,24,0.491,WI,Copper,Total,ug/L,25,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/23/2001,11,0.26,WI,Copper,Total,ug/L,30,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/25/2001,1,0.821,WI,Copper,Total,ug/L,22,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/17/2001,5,0.621,WI,Copper,Total,ug/L,12,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/3/2001,1,0.851,SP,Copper,Total,ug/L,13,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,4/20/2001,11,0.51,SP,Copper,Total,ug/L,21,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/10/2001,41,0.695,FA,Copper,Total,ug/L,26,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/28/2001,5,1.764,FA,Copper,Total,ug/L,6.8,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2001,7,0.96,WI,Copper,Total,ug/L,29,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/19/2001,2,0.665,WI,Copper,Total,ug/L,27,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/26/2002,24,0.404,WI,Copper,Total,ug/L,13,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/16/2002,21,0.189,WI,Copper,Total,ug/L,17,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/19/2002,2,0.443,WI,Copper,Total,ug/L,24,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/6/2002,14,0.416,SP,Copper,Total,ug/L,37,=,1.61,38.20638889,122.1380556 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.571,WI,Copper,Total,ug/L,27.188,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/20/2001,13.2,0.32,SP,Copper,Total,ug/L,44.245,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.6,1.861,FA,Copper,Total,ug/L,70,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.1,0.47,WI,Copper,Total,ug/L,83,=,3.16,34.15972222,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/10/2001,14.19999981,0.701,WI,Copper,Total,ug/L,46.078,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.5,1.191,SP,Copper,Total,ug/L,56.585,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/12/2001,13,0.47,FA,Copper,Total,ug/L,111,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.69999981,1.981,FA,Copper,Total,ug/L,111,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/14/2001,19.70000076,0.14,WI,Copper,Total,ug/L,166,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,1.251,WI,Copper,Total,ug/L,82,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Copper,Total,ug/L,163,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.09,SP,Copper,Total,ug/L,209,=,4.18,34.1,118.48 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/19/2001,5.300000191,1.191,WI,Copper,Total,ug/L,20.363,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.45,WI,Copper,Total,ug/L,32.011,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/4/2001,4,0.2,SP,Copper,Total,ug/L,33.4,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.60000038,1.001,SP,Copper,Total,ug/L,32.261,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,10/30/2001,192.3000031,0.11,FA,Copper,Total,ug/L,209,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.60000038,1.171,FA,Copper,Total,ug/L,53,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/20/2001,6.300000191,0.48,WI,Copper,Total,ug/L,59,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,0.971,WI,Copper,Total,ug/L,66,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Copper,Total,ug/L,63,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.41,SP,Copper,Total,ug/L,244,=,0.96,34.04972222,118.4397222 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/16/2000,,0.28,WI,Copper,Total,ug/L,210,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/20/2000,,1.690000099,WI,Copper,Total,ug/L,800,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/17/2000,,0.420000009,SP,Copper,Total,ug/L,71,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/8/2001,,0.430000035,WI,Copper,Total,ug/L,120,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/10/2001,,1.690000099,WI,Copper,Total,ug/L,66,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/10/2001,,0.600000029,WI,Copper,Total,ug/L,66,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/26/2001,,1.539999894,WI,Copper,Total,ug/L,72,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/12/2001,,0.380000017,WI,Copper,Total,ug/L,43,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/25/2001,,1.450000072,WI,Copper,Total,ug/L,77,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,3/6/2001,,0.600000029,SP,Copper,Total,ug/L,35,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/7/2001,,0.610000055,SP,Copper,Total,ug/L,200,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/20/2001,,0.219999993,SP,Copper,Total,ug/L,62,=,4.2,33.08485833,117.3000361 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,2/20/2000,,0.589999965,WI,Copper,Total,ug/L,8.300000191,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,3/5/2000,,0.480000015,SP,Copper,Total,ug/L,19,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,4/17/2000,,1.059999916,SP,Copper,Total,ug/L,40,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,1/26/2001,,1.609999889,WI,Copper,Total,ug/L,32,=,4.6,33.12630278,117.3249833 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/25/2000,,0.780000011,WI,Copper,Total,ug/L,46,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/16/2000,,0.450000012,WI,Copper,Total,ug/L,28,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/20/2000,,,WI,Copper,Total,ug/L,81,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,3/4/2000,,0.51999997,SP,Copper,Total,ug/L,19,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/17/2000,,1.63999993,SP,Copper,Total,ug/L,23,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,10/26/2000,,2.839999762,FA,Copper,Total,ug/L,28,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/10/2001,,1.119999998,WI,Copper,Total,ug/L,43,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/26/2001,,1.220000109,WI,Copper,Total,ug/L,31,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/23/2001,,0.86000007,WI,Copper,Total,ug/L,33,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,3/6/2001,,0.480000015,SP,Copper,Total,ug/L,51,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/7/2001,,0.51999997,SP,Copper,Total,ug/L,46,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/20/2001,,0.169999994,SP,Copper,Total,ug/L,36,=,5.3,32.92908333,117.2375361 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/28/2000,,,WI,Copper,Total,ug/L,6.6,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/12/2000,,,WI,Copper,Total,ug/L,6.5,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/15/2000,,,WI,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/17/2000,,,WI,Copper,Total,ug/L,5.5,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/22/2000,,,WI,Copper,Total,ug/L,17.7,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/25/2000,,,WI,Copper,Total,ug/L,6.9,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/29/2000,,,WI,Copper,Total,ug/L,8.3,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/7/2000,,,SP,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/9/2000,,,SP,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,11/1/2000,,,FA,Copper,Total,ug/L,6.88,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/16/2001,,,WI,Copper,Total,ug/L,5.86,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/25/2001,,,WI,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/14/2001,,,WI,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/20/2001,,,WI,Copper,Total,ug/L,6,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/28/2001,,,WI,Copper,Total,ug/L,5.18,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/6/2001,,,SP,Copper,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Copper,Total,ug/L,24.6,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Copper,Total,ug/L,38,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Copper,Total,ug/L,17,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Copper,Total,ug/L,10.1,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Copper,Total,ug/L,10.5,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Copper,Total,ug/L,8.9,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Copper,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Copper,Total,ug/L,8.9,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Copper,Total,ug/L,24.3,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Copper,Total,ug/L,21.6,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Copper,Total,ug/L,11.4,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Copper,Total,ug/L,12.7,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Copper,Total,ug/L,10.6,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Copper,Total,ug/L,8.59,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Copper,Total,ug/L,10.5,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Copper,Total,ug/L,5.92,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Copper,Total,ug/L,34.8,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Copper,Total,ug/L,36.8,=,120.4,34.16720833,118.2796833 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/26/2000,,,WI,Copper,Total,ug/L,41.4,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/1/2000,,,WI,Copper,Total,ug/L,61.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/11/2000,,,WI,Copper,Total,ug/L,41.7,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2000,,,WI,Copper,Total,ug/L,27.1,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/17/2000,,,WI,Copper,Total,ug/L,28,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/22/2000,,,WI,Copper,Total,ug/L,29.9,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/24/2000,,,WI,Copper,Total,ug/L,22.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/29/2000,,,WI,Copper,Total,ug/L,35.4,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/6/2000,,,SP,Copper,Total,ug/L,25.7,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/8/2000,,,SP,Copper,Total,ug/L,18.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/12/2000,,,FA,Copper,Total,ug/L,122,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/28/2000,,,FA,Copper,Total,ug/L,59.6,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/31/2000,,,FA,Copper,Total,ug/L,55.8,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/4/2001,,,WI,Copper,Total,ug/L,186,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/17/2001,,,WI,Copper,Total,ug/L,32.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/25/2001,,,WI,Copper,Total,ug/L,50.4,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/30/2001,,,WI,Copper,Total,ug/L,26,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2001,,,WI,Copper,Total,ug/L,35.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/20/2001,,,WI,Copper,Total,ug/L,33.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/28/2001,,,WI,Copper,Total,ug/L,22.8,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/7/2001,,,SP,Copper,Total,ug/L,21,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,4/11/2001,,,SP,Copper,Total,ug/L,63.7,=,902,33.92917222,118.3708111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/5/2000,,,WI,Copper,Total,ug/L,39.7,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/26/2000,,,WI,Copper,Total,ug/L,17.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2000,,,WI,Copper,Total,ug/L,20.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/12/2000,,,WI,Copper,Total,ug/L,21.9,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/15/2000,,,WI,Copper,Total,ug/L,10.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/17/2000,,,WI,Copper,Total,ug/L,11,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/22/2000,,,WI,Copper,Total,ug/L,12.3,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/24/2000,,,WI,Copper,Total,ug/L,8.6,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/29/2000,,,WI,Copper,Total,ug/L,23.2,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2000,,,SP,Copper,Total,ug/L,5.3,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/9/2000,,,SP,Copper,Total,ug/L,7.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/12/2000,,,FA,Copper,Total,ug/L,13.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/28/2000,,,FA,Copper,Total,ug/L,16.7,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/30/2000,,,FA,Copper,Total,ug/L,10.6,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/4/2001,,,WI,Copper,Total,ug/L,63.2,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/11/2001,,,WI,Copper,Total,ug/L,13.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/25/2001,,,WI,Copper,Total,ug/L,16.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2001,,,WI,Copper,Total,ug/L,13.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/14/2001,,,WI,Copper,Total,ug/L,10.6,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/20/2001,,,WI,Copper,Total,ug/L,14.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2001,,,SP,Copper,Total,ug/L,9.08,=,684,33.82801944,118.2411111 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/26/2000,,,WI,Copper,Total,ug/L,12.1,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/1/2000,,,WI,Copper,Total,ug/L,17.7,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/11/2000,,,WI,Copper,Total,ug/L,13.1,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2000,,,WI,Copper,Total,ug/L,11.1,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/17/2000,,,WI,Copper,Total,ug/L,14.1,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/22/2000,,,WI,Copper,Total,ug/L,12.1,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/24/2000,,,WI,Copper,Total,ug/L,12.9,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/29/2000,,,WI,Copper,Total,ug/L,10.7,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/6/2000,,,SP,Copper,Total,ug/L,10.9,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2000,,,SP,Copper,Total,ug/L,12.2,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/12/2000,,,FA,Copper,Total,ug/L,37.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/28/2000,,,FA,Copper,Total,ug/L,13.8,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/31/2000,,,FA,Copper,Total,ug/L,13.2,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/9/2001,,,WI,Copper,Total,ug/L,30.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/10/2001,,,WI,Copper,Total,ug/L,11.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/25/2001,,,WI,Copper,Total,ug/L,13.5,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/29/2001,,,WI,Copper,Total,ug/L,11.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2001,,,WI,Copper,Total,ug/L,19.5,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/20/2001,,,WI,Copper,Total,ug/L,11.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/28/2001,,,WI,Copper,Total,ug/L,8.93,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2001,,,SP,Copper,Total,ug/L,12,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,4/11/2001,,,SP,Copper,Total,ug/L,7.64,=,262,34.23739444,118.5264361 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/28/2000,,,WI,Copper,Total,ug/L,15.1,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/1/2000,,,WI,Copper,Total,ug/L,13.7,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/12/2000,,,WI,Copper,Total,ug/L,13.2,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/15/2000,,,WI,Copper,Total,ug/L,10,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/17/2000,,,WI,Copper,Total,ug/L,8.6,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/22/2000,,,WI,Copper,Total,ug/L,7.3,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/25/2000,,,WI,Copper,Total,ug/L,5.4,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/29/2000,,,WI,Copper,Total,ug/L,15.6,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2000,,,SP,Copper,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/9/2000,,,SP,Copper,Total,ug/L,6.2,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/12/2000,,,FA,Copper,Total,ug/L,16.2,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/28/2000,,,FA,Copper,Total,ug/L,14.2,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/31/2000,,,FA,Copper,Total,ug/L,17.1,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/16/2001,,,WI,Copper,Total,ug/L,10.6,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/25/2001,,,WI,Copper,Total,ug/L,11.9,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/14/2001,,,WI,Copper,Total,ug/L,10.8,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/20/2001,,,WI,Copper,Total,ug/L,12.1,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/28/2001,,,WI,Copper,Total,ug/L,9.38,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2001,,,SP,Copper,Total,ug/L,8.47,=,214.5,34.12700278,118.0494944 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Copper,Total,ug/L,14.6,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Copper,Total,ug/L,15.3,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Copper,Total,ug/L,12.9,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Copper,Total,ug/L,7.1,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Copper,Total,ug/L,6.8,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Copper,Total,ug/L,6.7,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Copper,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/29/2000,,,WI,Copper,Total,ug/L,7.5,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Copper,Total,ug/L,8.6,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Copper,Total,ug/L,26.2,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Copper,Total,ug/L,18.3,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/9/2001,,,WI,Copper,Total,ug/L,46.9,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Copper,Total,ug/L,8.86,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Copper,Total,ug/L,19.5,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Copper,Total,ug/L,13.1,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Copper,Total,ug/L,9.78,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Copper,Total,ug/L,11.7,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Copper,Total,ug/L,10.2,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Copper,Total,ug/L,17.5,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Copper,Total,ug/L,22.6,=,130.8,34.14795278,118.2711417 +9,CO,COCSA002,Chestnut_Street_at_Douglas_Creek,El_Paso_County,City_of_Colorado_Springs,ID_MIX,OP,37.5,7/29/2002,5,0.23,SU,Copper,Total,ug/L,37,=,105.6,38.89638889,104.835 +9,CO,CODEWAWA,Denver_Wastewater_Building,Denver,Denver,IS,,100,8/8/2008,,1.15,SU,Copper,Total,ug/L,31.7,=,0.192,39.72091944,105.0106 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,9/26/2002,,0.4,FA,Copper,Total,ug/L,1.95,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/6/2002,,0.2,FA,Copper,Total,ug/L,0.54,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,3/6/2004,,0.38,SP,Copper,Total,ug/L,2.08,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,4/1/2004,,0.3,SP,Copper,Total,ug/L,2.18,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/4/2004,,0.55,FA,Copper,Total,ug/L,2.22,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,4/1/2005,,0.5,SP,Copper,Total,ug/L,1.16,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/21/2005,,0.3,FA,Copper,Total,ug/L,1.34,=,1.5,39.64769167,75.71034167 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,10/15/2002,,0.1,FA,Copper,Total,ug/L,2.9,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,3/19/2003,,0.2,SP,Copper,Total,ug/L,1.92,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,3/16/2004,,0.28,SP,Copper,Total,ug/L,2.93,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,4/12/2004,,0.36,SP,Copper,Total,ug/L,2.65,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,11/12/2004,,0.3,FA,Copper,Total,ug/L,1.87,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,8/16/2005,,,SU,Copper,Total,ug/L,2.71,=,50,39.71732778,75.594875 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,9/26/2002,,,FA,Copper,Total,ug/L,1.17,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/6/2002,,0.4,FA,Copper,Total,ug/L,0.72,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,3/6/2004,,0.4,SP,Copper,Total,ug/L,1.63,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,4/1/2004,,0.2,SP,Copper,Total,ug/L,1.05,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/4/2004,,0.5,FA,Copper,Total,ug/L,0.81,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,4/1/2005,,0.4,SP,Copper,Total,ug/L,0.78,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/21/2005,,0.3,FA,Copper,Total,ug/L,0.92,=,10,39.67864722,75.65260556 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,9/26/2002,,0.4,FA,Copper,Total,ug/L,1.03,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/6/2002,,0.35,FA,Copper,Total,ug/L,0.33,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,3/6/2004,,0.45,SP,Copper,Total,ug/L,0.77,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,3/31/2004,,0.23,SP,Copper,Total,ug/L,0.55,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/4/2004,,0.5,FA,Copper,Total,ug/L,0.39,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,4/1/2005,,0.4,SP,Copper,Total,ug/L,0.36,=,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/21/2005,,0.3,FA,Copper,Total,ug/L,0.4,=,28,39.65923611,75.67537778 +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,10/15/2002,,0.2,FA,Copper,Total,ug/L,2.4,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,3/19/2003,,0.45,SP,Copper,Total,ug/L,4.38,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,3/16/2004,,0.28,SP,Copper,Total,ug/L,5.25,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,4/12/2004,,0.1,SP,Copper,Total,ug/L,3.35,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,11/12/2004,,0.25,FA,Copper,Total,ug/L,2.21,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,4/8/2005,,,SP,Copper,Total,ug/L,1.8,=,15,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,3/18/2000,,,SP,Copper,Total,ug/L,20,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,9/15/2000,,,FA,Copper,Total,ug/L,3.9,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,1/22/2001,,,WI,Copper,Total,ug/L,3.9,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,9/26/2001,,,FA,Copper,Total,ug/L,4,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,2/23/2002,,,WI,Copper,Total,ug/L,5.4,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,8/20/2002,,,SU,Copper,Total,ug/L,3.9,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,12/4/2002,,,WI,Copper,Total,ug/L,3.9,=,2,, +3,FL,FLBCST02,Broward_Co_Site_2,Broward_County,Broward_County,RE,,,8/14/2003,,,SU,Copper,Total,ug/L,3.9,=,2,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,3/18/2000,,,SP,Copper,Total,ug/L,3.9,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,9/15/2000,,,FA,Copper,Total,ug/L,3.9,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,5/23/2001,,,SP,Copper,Total,ug/L,3.9,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,2/21/2002,,,WI,Copper,Total,ug/L,10.3,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,8/20/2002,,,SU,Copper,Total,ug/L,3.9,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,4/30/2003,,,SP,Copper,Total,ug/L,60.7,=,3.57,, +3,FL,FLBCST05,Broward_Co_Site_5,Broward_County,Broward_County,RE,,,8/14/2003,,,SU,Copper,Total,ug/L,3.9,=,3.57,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,3/18/2000,,,SP,Copper,Total,ug/L,53.1,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,9/15/2000,,,FA,Copper,Total,ug/L,3.9,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,1/22/2001,,,WI,Copper,Total,ug/L,3.9,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,9/24/2001,,,FA,Copper,Total,ug/L,15.5,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,2/23/2002,,,WI,Copper,Total,ug/L,3.9,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,7/1/2002,,,SU,Copper,Total,ug/L,3.9,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,12/4/2002,,,WI,Copper,Total,ug/L,7.4,=,4,, +3,FL,FLBCST06,Broward_Co_Site_6,Broward_County,Broward_County,CO,,,8/14/2003,,,SU,Copper,Total,ug/L,3.9,=,4,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,9/15/2000,,,FA,Copper,Total,ug/L,3.9,=,26.2,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,7/23/2001,,,SU,Copper,Total,ug/L,3.9,=,26.2,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,6/13/2002,,,SU,Copper,Total,ug/L,3.9,=,26.2,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,8/20/2002,,,SU,Copper,Total,ug/L,9.8,=,26.2,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,5/29/2003,,,SP,Copper,Total,ug/L,3.9,=,26.2,, +3,FL,FLBCST07,Broward_Co_Site_7,Broward_County,Broward_County,ID,,,11/6/2003,,,FA,Copper,Total,ug/L,3.9,=,26.2,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,9/15/2000,,,FA,Copper,Total,ug/L,3.9,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,1/22/2001,,,WI,Copper,Total,ug/L,13,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,9/24/2001,,,FA,Copper,Total,ug/L,22.1,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,2/21/2002,,,WI,Copper,Total,ug/L,13.4,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,7/1/2002,,,SU,Copper,Total,ug/L,3.9,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,4/30/2003,,,SP,Copper,Total,ug/L,7.7,=,1.5,, +3,FL,FLBCST8R,Broward_Co_Site_8R,Broward_County,Broward_County,FW,,,8/14/2003,,,SU,Copper,Total,ug/L,3.9,=,1.5,, +3,GA,GACLCOSI,Southridge_Industrial_Park,Clayton_County,Clayton_County,ID,,,3/19/2000,3,1.61,SP,Copper,Total,ug/L,20,<,18,33.61446944,84.42238056 +3,GA,GACLCOTR,Tara_Road,Clayton_County,Clayton_County,RE,,,3/16/2000,,1.08,SP,Copper,Total,ug/L,30,=,125,33.45825,84.38065 +3,GA,GACOC1A2,Cobb_Long_Term_1_Pebble_Creek_Lot989,Cobb_County,Cobb_County,RE_MIX,CO,,2/28/2000,,,WI,Copper,Total,ug/L,20,<,63.6,33.91703056,84.458025 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,8/24/2000,,,SU,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,10/6/2000,,,FA,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,1/20/2001,,,WI,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,1/30/2001,,,WI,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,3/12/2001,,,SP,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,3/19/2001,,,SP,Copper,Total,ug/L,20,<,7590.4,33.97925556,84.45189722 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/11/2000,,,SP,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,8/20/2000,,,SU,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,11/9/2000,,,FA,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/1/2001,,,SP,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/12/2001,,,SP,Copper,Total,ug/L,20,<,2947,34.03171111,84.51861389 +3,GA,GADKCOTD,Truman_Drive,Dekalb_County,Dekalb_County,ID,,,2/14/2000,,0.84,WI,Copper,Total,ug/L,10,<,115,33.7144,84.176 +3,GA,GADKCOTD,Truman_Drive,Dekalb_County,Dekalb_County,ID,,,6/6/2000,,0.22,SU,Copper,Total,ug/L,20,=,115,33.7144,84.176 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,3/4/2000,,,SP,Copper,Total,ug/L,5,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,6/19/2000,,,SU,Copper,Total,ug/L,5,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,11/26/2000,,,FA,Copper,Total,ug/L,20,=,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,1/19/2001,,,WI,Copper,Total,ug/L,5,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,3/13/2001,,,SP,Copper,Total,ug/L,5,=,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,4/25/2001,,,SP,Copper,Total,ug/L,5,<,10339,34.0161,84.211 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,3/4/2000,,,SP,Copper,Total,ug/L,6,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,3/13/2000,,,SP,Copper,Total,ug/L,5,<,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,6/19/2000,,,SU,Copper,Total,ug/L,11,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,11/26/2000,,,FA,Copper,Total,ug/L,29,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,4/25/2001,,,SP,Copper,Total,ug/L,5,<,3915,33.7265,84.5889 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,3/4/2000,,,SP,Copper,Total,ug/L,10,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,7/6/2000,,,SU,Copper,Total,ug/L,10,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,11/26/2000,,,FA,Copper,Total,ug/L,48,=,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,1/19/2001,,,WI,Copper,Total,ug/L,5,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,3/13/2001,,,SP,Copper,Total,ug/L,5,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,4/25/2001,,,SP,Copper,Total,ug/L,5,<,6257,33.8859,84.4272 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/13/2000,,0.35,SP,Copper,Total,ug/L,140,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,9/1/2000,,0.25,FA,Copper,Total,ug/L,10,<,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,10/20/2000,,0.43,FA,Copper,Total,ug/L,20,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/11/2001,,0.48,SP,Copper,Total,ug/L,12.9,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/19/2001,,0.03,SP,Copper,Total,ug/L,19.2,=,14,43.62178889,116.2239806 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/13/2000,,0.35,SP,Copper,Total,ug/L,10,<,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,9/1/2000,,0.25,FA,Copper,Total,ug/L,10,=,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/11/2001,,0.48,SP,Copper,Total,ug/L,6.3,=,105,43.66441944,116.2583333 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/13/2000,,0.35,SP,Copper,Total,ug/L,20,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,9/1/2000,,0.25,FA,Copper,Total,ug/L,10,<,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,10/20/2000,,0.43,FA,Copper,Total,ug/L,30,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/11/2001,,0.48,SP,Copper,Total,ug/L,18.7,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/19/2001,,0.03,SP,Copper,Total,ug/L,25,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,7/30/2001,,0.03,SU,Copper,Total,ug/L,24.1,=,17,43.60499167,116.3076806 +8,ID,IDADA004,Production_Avenue_Site,Ada_County_Highway_District,Boise_City,ID_MIX,CO,,4/11/2001,,0.48,SP,Copper,Total,ug/L,17.4,=,18,43.54694444,116.1885556 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Copper,Total,ug/L,23,=,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Copper,Total,ug/L,20,=,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,6/26/2003,,,SU,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Copper,Total,ug/L,20,=,35.89,39.78056111,85.98268056 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Copper,Total,ug/L,20,=,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,6/26/2003,,,SU,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Copper,Total,ug/L,20,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Copper,Total,ug/L,20,<,,, +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,2/3/2000,,,WI,Copper,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,5/17/2000,,,SP,Copper,Total,ug/L,22,=,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,1/29/2001,,,WI,Copper,Total,ug/L,25,=,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,2/22/2001,,,WI,Copper,Total,ug/L,25,=,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,12/5/2003,,,WI,Copper,Total,ug/L,20,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,2/3/2000,,,WI,Copper,Total,ug/L,73,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,5/17/2000,,,SP,Copper,Total,ug/L,31,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,1/29/2001,,,WI,Copper,Total,ug/L,41,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,2/22/2001,,,WI,Copper,Total,ug/L,41,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,5/25/2001,,,SP,Copper,Total,ug/L,22,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,12/5/2003,,,WI,Copper,Total,ug/L,20,<,22.81,39.81661944,86.00280833 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,2/3/2000,,,WI,Copper,Total,ug/L,21,=,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,5/17/2000,,,SP,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,1/29/2001,,,WI,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,2/3/2000,,,WI,Copper,Total,ug/L,24,=,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,5/17/2000,,,SP,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,9/20/2000,,,FA,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,1/29/2001,,,WI,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,2/22/2001,,,WI,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,5/25/2001,,,SP,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,10/1/2001,,,FA,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,10/14/2003,,,FA,Copper,Total,ug/L,20,<,13.41,39.76257222,85.97841667 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,5/26/2000,,,SP,Copper,Total,ug/L,58,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/20/2000,,,FA,Copper,Total,ug/L,80,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,2/8/2001,,,WI,Copper,Total,ug/L,84,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,5/29/2001,,,SP,Copper,Total,ug/L,18,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/15/2001,,,FA,Copper,Total,ug/L,7,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,3/8/2002,,,SP,Copper,Total,ug/L,11,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,6/4/2002,,,SU,Copper,Total,ug/L,42,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,6/11/2002,,,SU,Copper,Total,ug/L,11,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/13/2002,,,FA,Copper,Total,ug/L,23,=,38,39.01311111,95.72527778 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,2/22/2000,,,WI,Copper,Total,ug/L,103,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,5/26/2000,,,SP,Copper,Total,ug/L,59,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/20/2000,,,FA,Copper,Total,ug/L,35,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,2/8/2001,,0.16,WI,Copper,Total,ug/L,51,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,5/29/2001,,1.42,SP,Copper,Total,ug/L,18,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/15/2001,,3.11,FA,Copper,Total,ug/L,7,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,11/23/2001,,0.68,FA,Copper,Total,ug/L,17,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,3/8/2002,,0.39,SP,Copper,Total,ug/L,58,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,6/4/2002,,,SU,Copper,Total,ug/L,20,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/13/2002,,0.68,FA,Copper,Total,ug/L,36,=,18.5,39.02327778,95.76416667 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/22/2000,,,WI,Copper,Total,ug/L,246,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/26/2000,,,SP,Copper,Total,ug/L,104,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/20/2000,,0.01,FA,Copper,Total,ug/L,175,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/8/2001,,0.27,WI,Copper,Total,ug/L,216,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/30/2001,,,SP,Copper,Total,ug/L,140,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/23/2001,,,FA,Copper,Total,ug/L,60,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/19/2002,,,WI,Copper,Total,ug/L,384,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/23/2002,,,SP,Copper,Total,ug/L,53,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/13/2002,,0.41,FA,Copper,Total,ug/L,5,=,218,39.06597222,95.675 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,5/26/2000,,,SP,Copper,Total,ug/L,1360,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,9/20/2000,,,FA,Copper,Total,ug/L,60,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,2/8/2001,,,WI,Copper,Total,ug/L,382,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,9/22/2001,,,FA,Copper,Total,ug/L,350,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,11/23/2001,,,FA,Copper,Total,ug/L,190,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,2/19/2002,,,WI,Copper,Total,ug/L,47,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,6/4/2002,,,SU,Copper,Total,ug/L,118,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,8/16/2002,,0.31,SU,Copper,Total,ug/L,692,=,39.5,39.06097222,95.66041667 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,2/22/2000,,,WI,Copper,Total,ug/L,22,=,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,6/13/2000,,,SU,Copper,Total,ug/L,2,<,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,10/5/2000,,,FA,Copper,Total,ug/L,20,<,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,1/28/2001,,,WI,Copper,Total,ug/L,10,<,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,4/10/2001,,,SP,Copper,Total,ug/L,27.9,=,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,6/20/2001,,,SU,Copper,Total,ug/L,19.3,=,36,37.68711111,97.25272222 +9,KA,KAWIHUNT,Huntington,Sedwick_County,City_of_Wichita,RE,,50,10/5/2001,,,FA,Copper,Total,ug/L,13.6,=,36,37.68711111,97.25272222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,2/22/2000,,,WI,Copper,Total,ug/L,44,=,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,6/13/2000,,,SU,Copper,Total,ug/L,15,=,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,10/5/2000,,,FA,Copper,Total,ug/L,20,<,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,1/28/2001,,,WI,Copper,Total,ug/L,27.9,=,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,4/10/2001,,,SP,Copper,Total,ug/L,10.6,=,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,6/20/2001,,,SU,Copper,Total,ug/L,23.7,=,30,37.66813889,97.34522222 +9,KA,KAWIMCLE,McLean,Sedwick_County,City_of_Wichita,ID,,65,10/5/2001,,,FA,Copper,Total,ug/L,92.2,=,30,37.66813889,97.34522222 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,2/22/2000,,,WI,Copper,Total,ug/L,17,=,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,6/13/2000,,,SU,Copper,Total,ug/L,2,<,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,10/5/2000,,,FA,Copper,Total,ug/L,20,<,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,1/28/2001,,,WI,Copper,Total,ug/L,10,<,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,4/10/2001,,,SP,Copper,Total,ug/L,18.4,=,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,6/20/2001,,,SU,Copper,Total,ug/L,10,<,250,37.64452778,97.33425 +9,KA,KAWISBWY,Broadway,Sedwick_County,City_of_Wichita,RE_MIX,CO,60,10/5/2001,,,FA,Copper,Total,ug/L,10,<,250,37.64452778,97.33425 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,2/22/2000,,,WI,Copper,Total,ug/L,16,=,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,6/13/2000,,,SU,Copper,Total,ug/L,2,<,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,10/5/2000,,,FA,Copper,Total,ug/L,20,<,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,1/28/2001,,,WI,Copper,Total,ug/L,10,<,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,4/10/2001,,,SP,Copper,Total,ug/L,18.6,=,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,6/20/2001,,,SU,Copper,Total,ug/L,14.8,=,40,37.682,97.25038889 +9,KA,KAWITOWN,Towne_East,Sedwick_County,City_of_Wichita,CO,,90,10/5/2001,,,FA,Copper,Total,ug/L,10,<,40,37.682,97.25038889 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/12/2008,,,FA,Copper,Total,ug/L,1.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,10/13/2008,,,FA,Copper,Total,ug/L,9.9,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,10/15/2008,,,FA,Copper,Total,ug/L,5.6,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,10/21/2008,,,FA,Copper,Total,ug/L,5.9,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,11/5/2008,,,FA,Copper,Total,ug/L,9.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,3/7/2009,,,SP,Copper,Total,ug/L,48.1,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,3/10/2009,,,SP,Copper,Total,ug/L,7.3,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,3/24/2009,,,SP,Copper,Total,ug/L,12.3,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,6/9/2009,,,SU,Copper,Total,ug/L,3.7,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,6/15/2009,,,SU,Copper,Total,ug/L,2.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,6/24/2009,,,SU,Copper,Total,ug/L,3.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/3/2009,,,SU,Copper,Total,ug/L,4.5,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,8/17/2009,,,SU,Copper,Total,ug/L,3.9,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/21/2009,,,FA,Copper,Total,ug/L,7.1,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,10/29/2009,,,FA,Copper,Total,ug/L,2.8,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/5/2010,,,SU,Copper,Total,ug/L,11,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/11/2010,,,SU,Copper,Total,ug/L,7.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/20/2010,,,SU,Copper,Total,ug/L,6.6,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/24/2010,,,SU,Copper,Total,ug/L,15,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,7/29/2010,,,SU,Copper,Total,ug/L,11.3,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,8/20/2010,,,SU,Copper,Total,ug/L,7.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/1/2010,,,FA,Copper,Total,ug/L,6.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/13/2010,,,FA,Copper,Total,ug/L,4.4,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/15/2010,,,FA,Copper,Total,ug/L,3.1,=,0.26,38.97197778,94.67614722 +4,KS,KSJO87ME,87th_Metcalf_BMP,Johnson,Overland Park,RE_MIX,OP,50,9/15/2010,,,FA,Copper,Total,ug/L,2,=,0.26,38.97197778,94.67614722 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/24/2012,,,SP,Copper,Total,ug/L,26.2,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,6/11/2012,,,SU,Copper,Total,ug/L,11.7,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,6/21/2012,,,SU,Copper,Total,ug/L,11.8,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/7/2012,,,FA,Copper,Total,ug/L,16.4,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/13/2012,,,FA,Copper,Total,ug/L,8.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,10/13/2012,,,FA,Copper,Total,ug/L,6.1,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,4/27/2013,,,SP,Copper,Total,ug/L,5.8,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/1/2013,,,SP,Copper,Total,ug/L,20.6,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/2/2013,,,SP,Copper,Total,ug/L,4.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/19/2013,,,SP,Copper,Total,ug/L,18.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/27/2013,,,SP,Copper,Total,ug/L,5.2,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/30/2013,,,SP,Copper,Total,ug/L,5.2,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,5/31/2013,,,SP,Copper,Total,ug/L,4.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,6/15/2013,,,SU,Copper,Total,ug/L,8,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,6/17/2013,,,SU,Copper,Total,ug/L,4.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,7/29/2013,,,SU,Copper,Total,ug/L,25.8,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,8/2/2013,,,SU,Copper,Total,ug/L,9.1,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,8/4/2013,,,SU,Copper,Total,ug/L,7.1,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,8/6/2013,,,SU,Copper,Total,ug/L,12.5,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,8/7/2013,,,SU,Copper,Total,ug/L,7.6,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,8/12/2013,,,SU,Copper,Total,ug/L,7.8,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/1/2013,,,FA,Copper,Total,ug/L,9.4,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/15/2013,,,FA,Copper,Total,ug/L,13.4,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/17/2013,,,FA,Copper,Total,ug/L,6,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/19/2013,,,FA,Copper,Total,ug/L,3.3,=,2,39.02426667,94.78172778 +4,KS,KSJOBR3B,SJC_Bio_Ret_3B,Johnson,Shawnee,CO,,72,9/28/2013,,,FA,Copper,Total,ug/L,3.7,=,2,39.02426667,94.78172778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/24/2012,,,SP,Copper,Total,ug/L,2.7,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,6/11/2012,,,SU,Copper,Total,ug/L,4.6,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,6/21/2012,,,SU,Copper,Total,ug/L,2.7,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/31/2012,,,SU,Copper,Total,ug/L,16.5,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/7/2012,,,FA,Copper,Total,ug/L,11.6,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/13/2012,,,FA,Copper,Total,ug/L,6.3,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/26/2012,,,FA,Copper,Total,ug/L,8.4,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,10/13/2012,,,FA,Copper,Total,ug/L,12.8,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,10/25/2012,,,FA,Copper,Total,ug/L,10.8,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,4/17/2013,,,SP,Copper,Total,ug/L,9.9,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,4/23/2013,,,SP,Copper,Total,ug/L,5.2,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,4/26/2013,,,SP,Copper,Total,ug/L,6.3,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/1/2013,,,SP,Copper,Total,ug/L,4.1,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/2/2013,,,SP,Copper,Total,ug/L,3.7,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/3/2013,,,SP,Copper,Total,ug/L,4.8,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/19/2013,,,SP,Copper,Total,ug/L,8.2,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/27/2013,,,SP,Copper,Total,ug/L,3.8,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/29/2013,,,SP,Copper,Total,ug/L,4.2,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,5/31/2013,,,SP,Copper,Total,ug/L,4.9,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,6/8/2013,,,SU,Copper,Total,ug/L,6.6,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,6/15/2013,,,SU,Copper,Total,ug/L,3,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,6/17/2013,,,SU,Copper,Total,ug/L,6.5,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,7/26/2013,,,SU,Copper,Total,ug/L,27.4,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,7/29/2013,,,SU,Copper,Total,ug/L,9.4,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/2/2013,,,SU,Copper,Total,ug/L,29.2,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/4/2013,,,SU,Copper,Total,ug/L,16.8,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/6/2013,,,SU,Copper,Total,ug/L,10,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/7/2013,,,SU,Copper,Total,ug/L,2.2,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,8/12/2013,,,SU,Copper,Total,ug/L,3.5,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/1/2013,,,FA,Copper,Total,ug/L,10.7,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/15/2013,,,FA,Copper,Total,ug/L,8.6,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/17/2013,,,FA,Copper,Total,ug/L,3.4,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/19/2013,,,FA,Copper,Total,ug/L,3,=,0.6,39.02329167,94.78097778 +4,KS,KSJOBRT6,SJC_Bio_Ret_6,Johnson,Shawnee,CO,,42,9/28/2013,,,FA,Copper,Total,ug/L,1.6,=,0.6,39.02329167,94.78097778 +4,KS,KSJOEDRY,SJC_Ext_Dry,Johnson,Shawnee,IS,,30,7/7/2011,,,SU,Copper,Total,ug/L,5.3,=,6.94,39.02283611,94.78179167 +4,KS,KSJOEDRY,SJC_Ext_Dry,Johnson,Shawnee,IS,,30,8/15/2011,,,SU,Copper,Total,ug/L,4.2,=,6.94,39.02283611,94.78179167 +4,KS,KSJOEDRY,SJC_Ext_Dry,Johnson,Shawnee,IS,,30,9/17/2011,,,FA,Copper,Total,ug/L,4.3,=,6.94,39.02283611,94.78179167 +4,KS,KSJOEDRY,SJC_Ext_Dry,Johnson,Shawnee,IS,,30,11/2/2011,,,FA,Copper,Total,ug/L,2.4,=,6.94,39.02283611,94.78179167 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/24/2011,,,SP,Copper,Total,ug/L,2.4,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,6/27/2011,,,SU,Copper,Total,ug/L,4.3,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/18/2011,,,SU,Copper,Total,ug/L,2.1,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/20/2011,,,SU,Copper,Total,ug/L,3.1,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,11/7/2011,,,FA,Copper,Total,ug/L,11.9,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/24/2012,,,SP,Copper,Total,ug/L,5.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,6/11/2012,,,SU,Copper,Total,ug/L,6.7,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/31/2012,,,SU,Copper,Total,ug/L,1.2,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,9/7/2012,,,FA,Copper,Total,ug/L,5.8,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,10/13/2012,,,FA,Copper,Total,ug/L,4.1,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,4/17/2013,,,SP,Copper,Total,ug/L,5.7,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,4/23/2013,,,SP,Copper,Total,ug/L,3.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,4/26/2013,,,SP,Copper,Total,ug/L,3.1,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/2/2013,,,SP,Copper,Total,ug/L,4.5,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/19/2013,,,SP,Copper,Total,ug/L,7.9,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/27/2013,,,SP,Copper,Total,ug/L,3.7,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/29/2013,,,SP,Copper,Total,ug/L,4.8,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,5/31/2013,,,SP,Copper,Total,ug/L,4.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,6/9/2013,,,SU,Copper,Total,ug/L,3.1,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,6/15/2013,,,SU,Copper,Total,ug/L,3.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,6/17/2013,,,SU,Copper,Total,ug/L,2.5,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,7/29/2013,,,SU,Copper,Total,ug/L,2.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/2/2013,,,SU,Copper,Total,ug/L,2.2,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/4/2013,,,SU,Copper,Total,ug/L,2.2,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/6/2013,,,SU,Copper,Total,ug/L,1.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/7/2013,,,SU,Copper,Total,ug/L,2.3,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,8/12/2013,,,SU,Copper,Total,ug/L,4.5,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,9/1/2013,,,FA,Copper,Total,ug/L,1.9,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,9/17/2013,,,FA,Copper,Total,ug/L,2,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,9/19/2013,,,FA,Copper,Total,ug/L,3.6,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHANC,SMNW_Hancor,Johnson,Shawnee,IS,,62,9/28/2013,,,FA,Copper,Total,ug/L,2.5,=,11.07,39.00569167,94.73475833 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/12/2008,,,FA,Copper,Total,ug/L,0.5,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/24/2008,,,FA,Copper,Total,ug/L,4.8,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,10/6/2008,,,FA,Copper,Total,ug/L,7.9,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,11/5/2008,,,FA,Copper,Total,ug/L,24.2,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,3/7/2009,,,SP,Copper,Total,ug/L,7.2,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,3/10/2009,,,SP,Copper,Total,ug/L,3.7,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,3/23/2009,,,SP,Copper,Total,ug/L,3,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,4/26/2009,,,SP,Copper,Total,ug/L,3.7,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,5/8/2009,,,SP,Copper,Total,ug/L,2.3,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,5/15/2009,,,SP,Copper,Total,ug/L,2.4,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,6/9/2009,,,SU,Copper,Total,ug/L,5.8,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,6/15/2009,,,SU,Copper,Total,ug/L,1,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/3/2009,,,SU,Copper,Total,ug/L,2.4,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/20/2009,,,SU,Copper,Total,ug/L,6.1,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,8/16/2009,,,SU,Copper,Total,ug/L,3.6,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,8/19/2009,,,SU,Copper,Total,ug/L,1,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,8/19/2009,,,SU,Copper,Total,ug/L,1.6,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,10/1/2009,,,FA,Copper,Total,ug/L,4.3,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,10/25/2009,,,FA,Copper,Total,ug/L,2.4,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,10/29/2009,,,FA,Copper,Total,ug/L,2.1,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,11/14/2009,,,FA,Copper,Total,ug/L,2.9,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/8/2010,,,SU,Copper,Total,ug/L,4.8,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/11/2010,,,SU,Copper,Total,ug/L,2.5,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/20/2010,,,SU,Copper,Total,ug/L,4.2,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,7/24/2010,,,SU,Copper,Total,ug/L,5,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,8/20/2010,,,SU,Copper,Total,ug/L,4.7,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/1/2010,,,FA,Copper,Total,ug/L,1.8,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/13/2010,,,FA,Copper,Total,ug/L,2.2,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/15/2010,,,FA,Copper,Total,ug/L,2.3,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,9/15/2010,,,FA,Copper,Total,ug/L,3,=,0.75,38.85563056,94.69164167 +4,KS,KSJOHIGH,Highland_View,Johnson,Overland Park,CO_MIX,OP,,11/7/2011,,,FA,Copper,Total,ug/L,3.6,=,0.75,38.85563056,94.69164167 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/20/2010,,,SU,Copper,Total,ug/L,4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/24/2010,,,SU,Copper,Total,ug/L,8.1,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/29/2010,,,SU,Copper,Total,ug/L,19.1,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/20/2010,,,SU,Copper,Total,ug/L,9.5,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,9/13/2010,,,FA,Copper,Total,ug/L,5.7,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,9/15/2010,,,FA,Copper,Total,ug/L,6.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/12/2011,,,SU,Copper,Total,ug/L,3.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/15/2011,,,SU,Copper,Total,ug/L,2.8,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/18/2011,,,SU,Copper,Total,ug/L,2.3,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,5/25/2012,,,SP,Copper,Total,ug/L,13.2,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,6/11/2012,,,SU,Copper,Total,ug/L,23.4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,6/21/2012,,,SU,Copper,Total,ug/L,8.4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/26/2012,,,SU,Copper,Total,ug/L,12.7,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/8/2012,,,SU,Copper,Total,ug/L,14.8,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/26/2012,,,SU,Copper,Total,ug/L,5.4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/31/2012,,,SU,Copper,Total,ug/L,1.5,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,9/7/2012,,,FA,Copper,Total,ug/L,4.1,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,4/17/2013,,,SP,Copper,Total,ug/L,28.3,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,4/27/2013,,,SP,Copper,Total,ug/L,28.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,5/27/2013,,,SP,Copper,Total,ug/L,10.2,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,5/30/2013,,,SP,Copper,Total,ug/L,50.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,5/31/2013,,,SP,Copper,Total,ug/L,13.9,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,6/5/2013,,,SU,Copper,Total,ug/L,14.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,6/9/2013,,,SU,Copper,Total,ug/L,9.2,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,6/15/2013,,,SU,Copper,Total,ug/L,11,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/25/2013,,,SU,Copper,Total,ug/L,7.7,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,7/29/2013,,,SU,Copper,Total,ug/L,5.4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/2/2013,,,SU,Copper,Total,ug/L,7.1,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/6/2013,,,SU,Copper,Total,ug/L,8.6,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/7/2013,,,SU,Copper,Total,ug/L,15.4,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,8/12/2013,,,SU,Copper,Total,ug/L,14.3,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPRC,OP_Recycling_Center,Johnson,Overland Park,ID,,85,9/1/2013,,,FA,Copper,Total,ug/L,5.7,=,0.46,38.91155556,94.67979722 +4,KS,KSJOOPSC,OP_Soccer_Complex,Johnson,Overland Park,IS_MIX,OP,80,6/27/2011,,,SU,Copper,Total,ug/L,3.3,=,3.98,38.88199722,94.70530278 +4,KS,KSJOOPSC,OP_Soccer_Complex,Johnson,Overland Park,IS_MIX,OP,80,8/5/2011,,,SU,Copper,Total,ug/L,10.3,=,3.98,38.88199722,94.70530278 +4,KS,KSJOOPSC,OP_Soccer_Complex,Johnson,Overland Park,IS_MIX,OP,80,8/18/2011,,,SU,Copper,Total,ug/L,3.4,=,3.98,38.88199722,94.70530278 +4,KS,KSJOOPSC,OP_Soccer_Complex,Johnson,Overland Park,IS_MIX,OP,80,11/7/2011,,,FA,Copper,Total,ug/L,4.6,=,3.98,38.88199722,94.70530278 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,6/2/2001,,0.85,SU,Copper,Total,ug/L,93,=,3.3,42.37619444,71.05944444 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,6/11/2001,,0.2,SU,Copper,Total,ug/L,190,=,3.3,42.37619444,71.05944444 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,7/17/2001,,0.1,SU,Copper,Total,ug/L,200,=,3.3,42.37619444,71.05944444 +1,MA,MABOA007,Wesley_G_Ross_6G108,Suffollk_County,City_of_Boston,OP,,,9/25/2001,,0.39,FA,Copper,Total,ug/L,10,=,11.5,42.26375,71.11119444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/11/2003,,2.35,SP,Copper,Total,ug/L,2.7,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/22/2003,,0.59,SP,Copper,Total,ug/L,3.8,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/26/2003,,0.82,SP,Copper,Total,ug/L,3,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/25/2004,,0.97,SP,Copper,Total,ug/L,2,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,5/3/2004,,1.01,SP,Copper,Total,ug/L,3,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,7/24/2004,,1.44,SU,Copper,Total,ug/L,2,=,19,42.23788889,71.12944444 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,4/25/2002,,0.88,SP,Copper,Total,ug/L,0.8,<,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,4/28/2002,,0.36,SP,Copper,Total,ug/L,8.15,=,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,9/27/2002,,0.56,FA,Copper,Total,ug/L,4,<,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,10/16/2002,,0.99,FA,Copper,Total,ug/L,4,<,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,10/26/2002,,0.85,FA,Copper,Total,ug/L,4,<,12,42.26228611,71.11066389 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,3/3/2002,,0.56,SP,Copper,Total,ug/L,9.2,=,2.1,42.37619444,71.05944444 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,4/25/2002,,0.8,SP,Copper,Total,ug/L,6.9,=,2.1,42.37619444,71.05944444 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,4/28/2002,,0.21,SP,Copper,Total,ug/L,1.3,=,2.1,42.37619444,71.05944444 +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,2,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,50,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,20,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,15,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,16,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,18,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,24,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,22,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,13,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,30,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,13,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,19,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,15,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,32,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,11,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,11/10/2000,,1.52,FA,Copper,Total,ug/L,16,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,25,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,20,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,10,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,160,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,5,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,15,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,10,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,27.2,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,25,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,96,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,19,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,35,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,32,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,32,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,24,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,24,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,23,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,30,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,14,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,50,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,12,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,15,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,200,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,16,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,18,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,20,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,10,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,20,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,10,<,,, +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,32,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,66,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,86,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,11/10/2001,,1.52,FA,Copper,Total,ug/L,164,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,75,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,116,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,93,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,66,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,99,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,370,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,82,=,,42.30584167,71.80199722 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,120,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,2,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,10,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,24,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,11/10/2001,,1.52,FA,Copper,Total,ug/L,10,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,18,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,10,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,10,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,17,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,4,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,10,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,10,=,,42.28590278,71.86085556 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Copper,Total,ug/L,41,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Copper,Total,ug/L,50,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Copper,Total,ug/L,50,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Copper,Total,ug/L,24,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,11/10/2001,,1.52,FA,Copper,Total,ug/L,62,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Copper,Total,ug/L,39,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,10,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Copper,Total,ug/L,5,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Copper,Total,ug/L,41,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Copper,Total,ug/L,20,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Copper,Total,ug/L,19,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Copper,Total,ug/L,21,=,,42.25284444,71.82796944 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/4/2000,,0.86,WI,Copper,Total,ug/L,16.99,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/11/2000,,0.08,SP,Copper,Total,ug/L,36.53,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/16/2000,5,0.54,SP,Copper,Total,ug/L,14.03,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/20/2000,4,0.2,SP,Copper,Total,ug/L,6.08,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/10/2000,,0.35,SP,Copper,Total,ug/L,25,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/13/2000,,0.05,SU,Copper,Total,ug/L,21.19,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/3/2000,,0.28,SU,Copper,Total,ug/L,8.18,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/19/2000,,0.6,SU,Copper,Total,ug/L,6.83,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/18/2000,,0.08,SU,Copper,Total,ug/L,13.49,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/6/2000,,0.09,FA,Copper,Total,ug/L,14.38,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/9/2000,,0.14,FA,Copper,Total,ug/L,26.61,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/14/2000,,0.45,FA,Copper,Total,ug/L,13.38,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/12/2001,,,SP,Copper,Total,ug/L,11.97,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/20/2001,,,SP,Copper,Total,ug/L,7.36,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/29/2001,,,SP,Copper,Total,ug/L,9.29,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/19/2001,,,SP,Copper,Total,ug/L,29.21,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/1/2001,,,SU,Copper,Total,ug/L,9.34,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/26/2001,,,SU,Copper,Total,ug/L,14.5,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/10/2001,,,SU,Copper,Total,ug/L,24.88,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/19/2001,,,SU,Copper,Total,ug/L,24.44,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/10/2001,,,FA,Copper,Total,ug/L,11.74,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/14/2001,,,FA,Copper,Total,ug/L,11.51,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,12/17/2001,,,WI,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/24/2002,,,WI,Copper,Total,ug/L,35.33,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,2/7/2002,,,WI,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/2/2002,,,SP,Copper,Total,ug/L,20.3,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/12/2002,,,SP,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,4/9/2002,,,SP,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/13/2002,,,SU,Copper,Total,ug/L,19.73,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/28/2002,,,SU,Copper,Total,ug/L,16.54,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/26/2002,,,FA,Copper,Total,ug/L,9.06,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/10/2002,,,FA,Copper,Total,ug/L,11.03,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/15/2002,,,FA,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/26/2002,,,FA,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/5/2002,,,FA,Copper,Total,ug/L,11.42,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/1/2003,,,WI,Copper,Total,ug/L,10,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/29/2003,,,WI,Copper,Total,ug/L,30.32,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/5/2003,,,SP,Copper,Total,ug/L,30.72,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/3/2003,,,SU,Copper,Total,ug/L,11.11,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/11/2003,,,SU,Copper,Total,ug/L,11.01,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/17/2003,,,SU,Copper,Total,ug/L,6.76,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/18/2003,,,SU,Copper,Total,ug/L,15.06,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/28/2003,,,SU,Copper,Total,ug/L,18.09,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/12/2003,,,FA,Copper,Total,ug/L,10.49,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/14/2003,,,FA,Copper,Total,ug/L,11.03,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/26/2003,,,FA,Copper,Total,ug/L,18.68,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/5/2003,,,FA,Copper,Total,ug/L,10.6,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/24/2003,,,FA,Copper,Total,ug/L,17.69,=,25,38.97540833,76.53745556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,1/4/2000,,0.08,WI,Copper,Total,ug/L,75.16,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,1/10/2000,,0.03,WI,Copper,Total,ug/L,31.24,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/19/2000,,,SP,Copper,Total,ug/L,23.59,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/6/2000,,0.1,SU,Copper,Total,ug/L,57.51,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/12/2001,,0.02,SP,Copper,Total,ug/L,23.59,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/20/2001,,0.03,SP,Copper,Total,ug/L,16.85,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/29/2001,,0.02,SP,Copper,Total,ug/L,10.16,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/22/2001,,0.02,SP,Copper,Total,ug/L,11.53,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/1/2001,,0.03,SU,Copper,Total,ug/L,24.67,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/10/2001,,0.47,SU,Copper,Total,ug/L,19.47,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/27/2001,,0.05,SU,Copper,Total,ug/L,35.33,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/10/2001,,0.12,FA,Copper,Total,ug/L,26.18,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,12/17/2001,,0.01,WI,Copper,Total,ug/L,17.71,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/19/2002,,0.01,SP,Copper,Total,ug/L,15.38,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/26/2002,,0.11,SP,Copper,Total,ug/L,38.55,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/17/2002,,0.03,SP,Copper,Total,ug/L,38.09,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/27/2002,,0.15,SU,Copper,Total,ug/L,63.31,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/24/2002,,0.03,SU,Copper,Total,ug/L,45.64,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,8/28/2002,,0.06,SU,Copper,Total,ug/L,24,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/26/2002,,0.06,FA,Copper,Total,ug/L,16.96,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/20/2003,,0.03,SP,Copper,Total,ug/L,13.17,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,4/7/2003,,0.04,SP,Copper,Total,ug/L,39.92,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/16/2003,,0.1,SP,Copper,Total,ug/L,20.56,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/3/2003,,0.05,SU,Copper,Total,ug/L,28.63,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/2/2003,,0.05,SU,Copper,Total,ug/L,38.96,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,8/26/2003,,0.16,SU,Copper,Total,ug/L,65.74,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/22/2003,,0.14,FA,Copper,Total,ug/L,11.95,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,10/14/2003,,0.03,FA,Copper,Total,ug/L,17.84,=,4,39.41384167,76.60060556 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,1/10/2000,,,WI,Copper,Total,ug/L,44.99,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/1/2000,,,WI,Copper,Total,ug/L,82.06,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/9/2000,,,WI,Copper,Total,ug/L,48.25,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/10/2000,,,WI,Copper,Total,ug/L,63.74,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/21/2000,,,SP,Copper,Total,ug/L,35.54,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,4/20/2000,,,SP,Copper,Total,ug/L,16.92,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,11/14/2000,,,FA,Copper,Total,ug/L,22.78,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,1/19/2001,,,WI,Copper,Total,ug/L,54.98,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/5/2001,,,WI,Copper,Total,ug/L,42.76,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/12/2002,,0.32,SP,Copper,Total,ug/L,7.7,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/19/2002,,0.94,SP,Copper,Total,ug/L,36.6,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,4/9/2002,,0.13,SP,Copper,Total,ug/L,60.9,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,9/26/2002,,1.74,FA,Copper,Total,ug/L,53.1,=,47,39.45053056,76.62084167 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/11/2000,11,0.22,SP,Copper,Total,ug/L,45,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/16/2000,4,0.94,SP,Copper,Total,ug/L,22,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/19/2000,2,0.14,SP,Copper,Total,ug/L,24,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/22/2000,3,0.37,SP,Copper,Total,ug/L,16,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/24/2000,2,0.13,SP,Copper,Total,ug/L,60,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,6/25/2000,3,0.58,SU,Copper,Total,ug/L,25,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/14/2000,7,3.03,SU,Copper,Total,ug/L,22,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,8/14/2000,5,0.22,SU,Copper,Total,ug/L,21,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/19/2000,3,,FA,Copper,Total,ug/L,18,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/19/2000,3,,FA,Copper,Total,ug/L,18,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/14/2000,4,0.31,FA,Copper,Total,ug/L,21,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/26/2000,12,0.53,FA,Copper,Total,ug/L,14,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,12/14/2000,4,0.62,WI,Copper,Total,ug/L,23,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,1/30/2001,,0.79,WI,Copper,Total,ug/L,27,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,2/16/2001,,0.64,WI,Copper,Total,ug/L,16.4,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/12/2001,,0.47,SP,Copper,Total,ug/L,17.6,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/21/2001,,0.32,SP,Copper,Total,ug/L,40.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/22/2001,,0.72,SP,Copper,Total,ug/L,111.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/18/2001,,0.47,SU,Copper,Total,ug/L,48.8,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/18/2001,,0.2,SU,Copper,Total,ug/L,32,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/20/2001,,0.16,FA,Copper,Total,ug/L,40.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/25/2001,,0.85,FA,Copper,Total,ug/L,30.3,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,12/17/2001,,0.14,WI,Copper,Total,ug/L,11.4,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/2/2002,,1.22,SP,Copper,Total,ug/L,16.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/2/2002,,0.76,SP,Copper,Total,ug/L,24.4,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/23/2002,,0.84,SU,Copper,Total,ug/L,35.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,8/28/2002,,1.1,SU,Copper,Total,ug/L,18.6,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/15/2002,,1.67,FA,Copper,Total,ug/L,10.6,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/29/2002,,0.43,FA,Copper,Total,ug/L,12,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,2/4/2003,,0.41,WI,Copper,Total,ug/L,55.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/6/2003,,0.52,SP,Copper,Total,ug/L,23.4,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,4/10/2003,,0.3,SP,Copper,Total,ug/L,15.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/16/2003,,2.61,SP,Copper,Total,ug/L,16,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/22/2003,,0.91,SU,Copper,Total,ug/L,22,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/14/2003,,1.72,FA,Copper,Total,ug/L,13,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/6/2003,,0.19,FA,Copper,Total,ug/L,18,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,4/1/2004,,0.9,SP,Copper,Total,ug/L,14,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,6/5/2004,,0.41,SU,Copper,Total,ug/L,16,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/27/2004,,0.55,SU,Copper,Total,ug/L,23,=,104,39.3366,76.53863611 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,8/27/2000,,1.72,SU,Copper,Total,ug/L,29.0398,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,11/25/2000,,0.44,FA,Copper,Total,ug/L,4.6185,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/13/2001,,0.55,SP,Copper,Total,ug/L,30.6,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/1/2001,,0.27,SU,Copper,Total,ug/L,6.3,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/24/2001,,2.25,FA,Copper,Total,ug/L,11.5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/2/2002,,0.55,SP,Copper,Total,ug/L,13.1,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/10/2002,,0.16,SP,Copper,Total,ug/L,23.4,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,4/28/2002,,0.94,SP,Copper,Total,ug/L,36.6,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/6/2002,,1.02,SU,Copper,Total,ug/L,38.88,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,8/28/2002,,1.24,SU,Copper,Total,ug/L,8.74,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/23/2002,,0.48,FA,Copper,Total,ug/L,19.2,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,10/16/2002,,0.85,FA,Copper,Total,ug/L,17.11,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,10/29/2002,,0.53,FA,Copper,Total,ug/L,12.84,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/16/2003,,0.94,SP,Copper,Total,ug/L,9.54,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/3/2003,,1.28,SU,Copper,Total,ug/L,10.81,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/1/2003,,0.569999993,FA,Copper,Total,ug/L,3.33,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,4/26/2004,,0.75,SP,Copper,Total,ug/L,8.8,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/2/2004,,0.689999998,SP,Copper,Total,ug/L,11.72,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,7/7/2004,,1.31,SU,Copper,Total,ug/L,8.6,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/28/2004,,1.67,FA,Copper,Total,ug/L,6.1,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/23/2005,,1.3,SP,Copper,Total,ug/L,9.68,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/24/2005,,0.18,SP,Copper,Total,ug/L,4.7,=,206,39.60497222,76.99821944 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,2/5/2003,,0.270000011,WI,Copper,Total,ug/L,7.29,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,3/21/2003,,1.519999981,SP,Copper,Total,ug/L,8.64,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,4/8/2003,,0.670000017,SP,Copper,Total,ug/L,3.38,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,6/4/2003,,2.230000019,SU,Copper,Total,ug/L,2.22,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,7/3/2003,,0.620000005,SU,Copper,Total,ug/L,5.25,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,9/14/2003,,1.220000029,FA,Copper,Total,ug/L,2,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,9/23/2003,,2.539999962,FA,Copper,Total,ug/L,4.98,=,30,39.33823056,77.34871111 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/11/2000,,0.31,SP,Copper,Total,ug/L,24,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/16/2000,,0.56,SP,Copper,Total,ug/L,6,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/27/2000,,1.11,SP,Copper,Total,ug/L,8,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,5/19/2000,,0.03,SP,Copper,Total,ug/L,9,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,6/28/2000,,0.8,SU,Copper,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,7/19/2000,,0.2,SU,Copper,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,8/18/2000,,0.31,SU,Copper,Total,ug/L,6,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,9/19/2000,,0.46,FA,Copper,Total,ug/L,3,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,12/16/2000,,0.93,WI,Copper,Total,ug/L,11,=,69.7,39.53,76.37 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/11/2000,,0.31,SP,Copper,Total,ug/L,24,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/16/2000,,0.56,SP,Copper,Total,ug/L,6,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/27/2000,,1.11,SP,Copper,Total,ug/L,8,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/19/2000,,0.03,SP,Copper,Total,ug/L,9,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/28/2000,,0.8,SU,Copper,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/19/2000,,0.2,SU,Copper,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/18/2000,,0.31,SU,Copper,Total,ug/L,6,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/19/2000,,0.46,FA,Copper,Total,ug/L,3,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/16/2000,,0.93,WI,Copper,Total,ug/L,11,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,1/19/2001,,0.4,WI,Copper,Total,ug/L,8,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/13/2001,,0.52,SP,Copper,Total,ug/L,3,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/21/2001,,1.58,SP,Copper,Total,ug/L,12,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/22/2001,,0.39,SP,Copper,Total,ug/L,8,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/12/2001,,1.31,SU,Copper,Total,ug/L,10,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/10/2001,,,SU,Copper,Total,ug/L,14,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/18/2001,,,SU,Copper,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/30/2001,,0.24,SU,Copper,Total,ug/L,10,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/14/2001,,0.52,FA,Copper,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/14/2001,,0.23,WI,Copper,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/17/2001,,0.47,WI,Copper,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,1/24/2002,,0.37,WI,Copper,Total,ug/L,8,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/2/2002,,1.41,SP,Copper,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/13/2002,,0.16,SP,Copper,Total,ug/L,7,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/20/2002,,,SP,Copper,Total,ug/L,8,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/2/2002,,1.11,SP,Copper,Total,ug/L,3,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/9/2002,,0.06,SP,Copper,Total,ug/L,12,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/6/2002,,0.25,SU,Copper,Total,ug/L,11,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/28/2002,,0.06,SU,Copper,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/26/2002,,1.81,FA,Copper,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/11/2002,,1.79,WI,Copper,Total,ug/L,7,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,2/4/2003,,0.32,WI,Copper,Total,ug/L,11,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/20/2003,,2.07,SP,Copper,Total,ug/L,10,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/16/2003,,0.22,SP,Copper,Total,ug/L,9,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/26/2003,,0.06,SU,Copper,Total,ug/L,6,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/4/2003,,1.32,FA,Copper,Total,ug/L,5,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/15/2003,,0.65,FA,Copper,Total,ug/L,6,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/5/2003,,0.23,FA,Copper,Total,ug/L,5,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/12/2003,,0.81,FA,Copper,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/19/2003,,1.76,FA,Copper,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/24/2003,,0.17,FA,Copper,Total,ug/L,7,=,69.7,39.5382,76.37551389 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,2/27/2000,,0.75,WI,Copper,Total,ug/L,13,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,1/19/2001,,1.61,WI,Copper,Total,ug/L,6,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Copper,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/22/2001,,1.28,SP,Copper,Total,ug/L,3,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/29/2001,,1.57,SP,Copper,Total,ug/L,3,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/12/2001,,0.51,SP,Copper,Total,ug/L,3,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,6/16/2001,,1.02,SU,Copper,Total,ug/L,2,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/25/2001,,0.15,FA,Copper,Total,ug/L,4,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/24/2001,,0.28,FA,Copper,Total,ug/L,2.7,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/8/2001,,0.59,WI,Copper,Total,ug/L,13.1,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/12/2002,,0.45,SP,Copper,Total,ug/L,2.4,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/21/2002,,0.94,SP,Copper,Total,ug/L,2.97,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/11/2002,,0.2,SP,Copper,Total,ug/L,2.57,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,5/3/2002,,1.09,SP,Copper,Total,ug/L,5.57,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/27/2002,,1.79,FA,Copper,Total,ug/L,2,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,10/17/2002,,1.73,FA,Copper,Total,ug/L,2,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/6/2002,,0.61,FA,Copper,Total,ug/L,2.63,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/12/2002,,1.03,WI,Copper,Total,ug/L,2.8,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/26/2004,,0.9,SP,Copper,Total,ug/L,6.4,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,6/11/2004,,0.5,SU,Copper,Total,ug/L,2.43,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,7/4/2004,,0.28,SU,Copper,Total,ug/L,13,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,7/12/2004,,0.09,SU,Copper,Total,ug/L,5.1,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/8/2004,,0.37,FA,Copper,Total,ug/L,2.5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/17/2004,,1.52,FA,Copper,Total,ug/L,7.43,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/28/2004,,1.81,FA,Copper,Total,ug/L,6.83,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,10/13/2004,,0.34,FA,Copper,Total,ug/L,3.15,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/4/2004,,1.12,FA,Copper,Total,ug/L,4.15,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/7/2004,,0.43,WI,Copper,Total,ug/L,4.5,=,31,39.2704,76.87065556 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,2/27/2000,,0.75,WI,Copper,Total,ug/L,11,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/19/2001,,1.61,WI,Copper,Total,ug/L,6,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Copper,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Copper,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/22/2001,,1.54,SP,Copper,Total,ug/L,4,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/29/2001,,1.77,SP,Copper,Total,ug/L,4.3,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/12/2001,,0.2,SP,Copper,Total,ug/L,6,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,6/16/2001,,1.02,SU,Copper,Total,ug/L,2.1,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/25/2001,,0.15,FA,Copper,Total,ug/L,6.2,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,11/24/2001,,0.28,FA,Copper,Total,ug/L,17,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/8/2001,,0.59,WI,Copper,Total,ug/L,6.2,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2002,,0.17,WI,Copper,Total,ug/L,2.6,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/12/2002,,0.45,SP,Copper,Total,ug/L,3.3,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/21/2002,,0.94,SP,Copper,Total,ug/L,4.03,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/11/2002,,0.17,SP,Copper,Total,ug/L,4.67,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,5/3/2002,,1.1,SP,Copper,Total,ug/L,8.17,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/27/2002,,1.79,FA,Copper,Total,ug/L,2,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,10/17/2002,,1.73,FA,Copper,Total,ug/L,2,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,11/6/2002,,0.61,FA,Copper,Total,ug/L,4.5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/12/2002,,1.03,WI,Copper,Total,ug/L,7.8,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/26/2004,,0.89,SP,Copper,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,7/4/2004,,0.28,SU,Copper,Total,ug/L,10,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,7/12/2004,,0.07,SU,Copper,Total,ug/L,5.5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/8/2004,,0.43,FA,Copper,Total,ug/L,3.1,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/17/2004,,1.53,FA,Copper,Total,ug/L,3.9,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/28/2004,,1.55,FA,Copper,Total,ug/L,4.4,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,10/13/2004,,0.44,FA,Copper,Total,ug/L,4.65,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/7/2004,,0.44,WI,Copper,Total,ug/L,2.73,=,14,39.27138056,76.85293611 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/4/2000,,0.2,WI,Copper,Total,ug/L,36.45,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/21/2000,,0.38,SU,Copper,Total,ug/L,540.54,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,11/25/2000,,0.03,FA,Copper,Total,ug/L,20,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/19/2001,,0.02,WI,Copper,Total,ug/L,72.31,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/30/2001,,0.07,WI,Copper,Total,ug/L,49.61,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,3/12/2001,,0.09,SP,Copper,Total,ug/L,26.71,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,3/20/2001,,0.04,SP,Copper,Total,ug/L,20,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,5/19/2001,,0.04,SP,Copper,Total,ug/L,35.65,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/6/2001,,0.02,SU,Copper,Total,ug/L,29.57,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/22/2001,,0.7,SU,Copper,Total,ug/L,12.16,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,8/10/2001,,0.04,SU,Copper,Total,ug/L,29.11,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,9/14/2001,,0.05,FA,Copper,Total,ug/L,23.94,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,9/24/2001,,1.5,FA,Copper,Total,ug/L,5.9,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,10/14/2001,,0.05,FA,Copper,Total,ug/L,21.07,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/4/2000,,0.2,WI,Copper,Total,ug/L,25.08,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/21/2000,,0.13,SU,Copper,Total,ug/L,13.05,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,11/25/2000,,0.03,FA,Copper,Total,ug/L,10,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/19/2001,,0.03,WI,Copper,Total,ug/L,15,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/30/2001,,0.08,WI,Copper,Total,ug/L,30.93,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,3/12/2001,,0.1,SP,Copper,Total,ug/L,17.94,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,3/20/2001,,0.06,SP,Copper,Total,ug/L,10,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,5/19/2001,,0.05,SP,Copper,Total,ug/L,15.16,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/6/2001,,0.02,SU,Copper,Total,ug/L,10,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/22/2001,,0.72,SU,Copper,Total,ug/L,11.05,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,8/10/2001,,0.05,SU,Copper,Total,ug/L,7.33,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,9/14/2001,,0.05,FA,Copper,Total,ug/L,14.07,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,9/24/2001,,1.5,FA,Copper,Total,ug/L,9.58,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,10/14/2001,,0.08,FA,Copper,Total,ug/L,10.58,=,20,39.18178611,76.89982222 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,1/10/2000,,0.55,WI,Copper,Total,ug/L,12.83,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,2/18/2000,,0.57,WI,Copper,Total,ug/L,3.72,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/11/2000,,0.63,SP,Copper,Total,ug/L,6.26,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,4/25/2000,,0.17,SP,Copper,Total,ug/L,7.94,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,6/6/2000,,0.42,SU,Copper,Total,ug/L,2,<,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,6/22/2000,,0.69,SU,Copper,Total,ug/L,2.56,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,7/10/2000,,0.45,SU,Copper,Total,ug/L,2.42,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,9/25/2000,,2.71,FA,Copper,Total,ug/L,5.59,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,1/19/2001,,1.6,WI,Copper,Total,ug/L,4.575510142,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/12/2001,,0.33,SP,Copper,Total,ug/L,4.661642343,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/30/2001,,1.6,SP,Copper,Total,ug/L,,=,13.36,39.08950833,76.99637778 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,5/3/2002,,0.83,SP,Copper,Total,ug/L,28.35,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/28/2002,,0.38,SU,Copper,Total,ug/L,39.04,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,8/30/2002,,2.34,SU,Copper,Total,ug/L,169.2,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/12/2002,,1.75,FA,Copper,Total,ug/L,28.54,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/29/2002,,1.19,FA,Copper,Total,ug/L,26.76,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,12/12/2002,,0.65,WI,Copper,Total,ug/L,37.61,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,2/23/2003,,2.51,WI,Copper,Total,ug/L,45.64,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,3/21/2003,,1.74,SP,Copper,Total,ug/L,36.76,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,5/16/2003,,1.93,SP,Copper,Total,ug/L,25.95,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/8/2003,,1.85,SU,Copper,Total,ug/L,17.93,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/19/2003,,0.43,SU,Copper,Total,ug/L,33.36,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,7/3/2003,,0.82,SU,Copper,Total,ug/L,26.19,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,9/13/2003,,1.35,FA,Copper,Total,ug/L,59.95,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,9/24/2003,,2.54,FA,Copper,Total,ug/L,20.4,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/15/2003,,1.38,FA,Copper,Total,ug/L,35.11,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,11/20/2003,,1.76,FA,Copper,Total,ug/L,10.8,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,12/11/2003,,1.26,WI,Copper,Total,ug/L,19.71,=,223,39.04543056,76.98160278 +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/9/2000,,,SU,Copper,Total,ug/L,3,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,9/19/2000,,,FA,Copper,Total,ug/L,3,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/9/2000,,,FA,Copper,Total,ug/L,12.53,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/25/2000,,,FA,Copper,Total,ug/L,3.5,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,1/19/2001,,,WI,Copper,Total,ug/L,8.11,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/15/2001,,,SP,Copper,Total,ug/L,6.93,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/20/2001,,,SP,Copper,Total,ug/L,7.98,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/1/2001,,,SU,Copper,Total,ug/L,16.15,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,7/26/2001,,,SU,Copper,Total,ug/L,18.35,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/30/2001,,,SU,Copper,Total,ug/L,4.33,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,12/8/2001,,,WI,Copper,Total,ug/L,5.99,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,12/17/2001,,,WI,Copper,Total,ug/L,3.33,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,1/6/2002,,,WI,Copper,Total,ug/L,9.36,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/12/2002,,,SP,Copper,Total,ug/L,5.67,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/19/2002,,,SP,Copper,Total,ug/L,6.96,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/19/2002,,,SP,Copper,Total,ug/L,28.02,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/2/2002,,,SP,Copper,Total,ug/L,6,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/27/2002,,,SU,Copper,Total,ug/L,3,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,7/9/2002,,,SU,Copper,Total,ug/L,6.66,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/15/2002,,,SU,Copper,Total,ug/L,4,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/28/2002,,,SU,Copper,Total,ug/L,9.53,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,9/20/2002,,,FA,Copper,Total,ug/L,4,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,9/26/2002,,,FA,Copper,Total,ug/L,8.32,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/5/2002,,,FA,Copper,Total,ug/L,7.82,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/16/2002,,,FA,Copper,Total,ug/L,9.26,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,12/13/2002,,,WI,Copper,Total,ug/L,8.73,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,2/4/2003,,,WI,Copper,Total,ug/L,13.49,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/20/2003,,,SP,Copper,Total,ug/L,15.84,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/25/2003,,,SP,Copper,Total,ug/L,11.1,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/21/2003,,,SP,Copper,Total,ug/L,13.61,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/3/2003,,,SU,Copper,Total,ug/L,3,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,7/23/2003,,,SU,Copper,Total,ug/L,19,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/26/2003,,,SU,Copper,Total,ug/L,6,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,10/14/2003,,,FA,Copper,Total,ug/L,13,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/5/2003,,,FA,Copper,Total,ug/L,18,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,12/10/2003,,,WI,Copper,Total,ug/L,14,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,2/6/2004,,,WI,Copper,Total,ug/L,11,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/16/2004,,,SP,Copper,Total,ug/L,6,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/27/2004,,,SP,Copper,Total,ug/L,60,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/25/2004,,,SP,Copper,Total,ug/L,32,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/22/2004,,,SU,Copper,Total,ug/L,5,=,,, +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/4/2000,,1.25,WI,Copper,Total,ug/L,15,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/18/2000,,0.52,WI,Copper,Total,ug/L,9,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/21/2000,,1.75,SP,Copper,Total,ug/L,8,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,4/17/2000,,0.92,SP,Copper,Total,ug/L,40,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/28/2000,,0.55,SP,Copper,Total,ug/L,280,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/15/2000,,0.99,SU,Copper,Total,ug/L,37,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/15/2000,,1.28,SU,Copper,Total,ug/L,30,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,8/7/2000,,0.41,SU,Copper,Total,ug/L,41,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,9/25/2000,,1.85,FA,Copper,Total,ug/L,5,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/10/2000,,0.225,FA,Copper,Total,ug/L,22.67,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/19/2001,,1.325,WI,Copper,Total,ug/L,8.89,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/16/2001,,0.435,WI,Copper,Total,ug/L,9.68,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/21/2001,,2.08,SP,Copper,Total,ug/L,12.3,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/22/2001,,1.31,SP,Copper,Total,ug/L,23.52,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/7/2001,,1.5,SU,Copper,Total,ug/L,23.73,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/4/2001,,1.93,SU,Copper,Total,ug/L,13.07,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,9/21/2001,,1.035,FA,Copper,Total,ug/L,12.24,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,10/16/2001,,,FA,Copper,Total,ug/L,16.36,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/8/2001,,0.42,WI,Copper,Total,ug/L,15.9,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/6/2002,,0.45,WI,Copper,Total,ug/L,17.51,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/13/2002,,,SP,Copper,Total,ug/L,14.62,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/20/2002,,,SP,Copper,Total,ug/L,15.88,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/2/2002,,,SP,Copper,Total,ug/L,45.7,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,10/10/2002,,0.29,FA,Copper,Total,ug/L,30.67,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/12/2002,,0.67,FA,Copper,Total,ug/L,30.21,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/20/2002,,0.97,WI,Copper,Total,ug/L,36.7,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/21/2003,,2.74,WI,Copper,Total,ug/L,39.89,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/20/2003,,1.95,SP,Copper,Total,ug/L,19.96,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/21/2003,,0.68,SP,Copper,Total,ug/L,23.47,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/19/2003,,2.12,SU,Copper,Total,ug/L,21.34,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/5/2003,,1.2,FA,Copper,Total,ug/L,34.3,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/19/2003,,1.57,FA,Copper,Total,ug/L,16.5,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/17/2003,,0.34,WI,Copper,Total,ug/L,16.1,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/6/2004,,1.69,WI,Copper,Total,ug/L,25.6,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/6/2004,,0.85,SP,Copper,Total,ug/L,20.6,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/16/2004,,0.37,SP,Copper,Total,ug/L,23.7,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/5/2004,,0.89,SU,Copper,Total,ug/L,15.6,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/17/2004,,0.71,SU,Copper,Total,ug/L,26.9,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/22/2004,,0.75,SU,Copper,Total,ug/L,11.1,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,8/12/2004,,0.6,SU,Copper,Total,ug/L,16.3,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,9/17/2004,,0.78,FA,Copper,Total,ug/L,12,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/4/2004,,1.71,FA,Copper,Total,ug/L,31.06,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/7/2004,,0.34,WI,Copper,Total,ug/L,16.97,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/9/2004,,0.55,WI,Copper,Total,ug/L,18.44,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/14/2005,,0.53,WI,Copper,Total,ug/L,53.31,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/28/2005,,1.51,SP,Copper,Total,ug/L,20,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/19/2005,,2.87,SP,Copper,Total,ug/L,26.24,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/7/2005,,0.24,SU,Copper,Total,ug/L,35.08,=,57.3,38.92066667,76.89455833 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,1/4/2000,,0.11,WI,Copper,Total,ug/L,75.16,=,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,1/10/2000,,0.37,WI,Copper,Total,ug/L,31.24,=,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,5/19/2000,,0.12,SP,Copper,Total,ug/L,23.59,=,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,6/6/2000,,0.12,SU,Copper,Total,ug/L,57.51,=,4,39.414225,76.59298889 +2,MD,MDSHDTPS,Pindell_School_Road,MD_State_Highway,-,RE,,,1/4/2000,,0.4,WI,Copper,Total,ug/L,36.45,=,20,39.17875,76.88006389 +2,MD,MDSHDTPS,Pindell_School_Road,MD_State_Highway,-,RE,,,6/21/2000,,0.41,SU,Copper,Total,ug/L,259.68,=,20,39.17875,76.88006389 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,1/30/2001,>8hrs,,WI,Copper,Total,ug/L,94.9,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/9/2001,>8hrs,,SP,Copper,Total,ug/L,103,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/15/2001,>8hrs,,SP,Copper,Total,ug/L,28.5,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,4/10/2001,>8hrs,1.72,SP,Copper,Total,ug/L,13.4,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/13/2002,>8hrs,,SP,Copper,Total,ug/L,30.9,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,4/5/2002,>8hrs,,SP,Copper,Total,ug/L,21.6,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,5/7/2002,>8hrs,1.46,SP,Copper,Total,ug/L,15.4,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,5/8/2002,>8hrs,1.46,SP,Copper,Total,ug/L,17.1,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,6/6/2002,>8hrs,0.63,SU,Copper,Total,ug/L,7.37,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,7/24/2002,>8hrs,1.06,SU,Copper,Total,ug/L,65.2,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,8/16/2002,>8hrs,1.92,SU,Copper,Total,ug/L,17,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,8/20/2002,>8hrs,2.52,SU,Copper,Total,ug/L,17.8,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,9/25/2002,>8hrs,0.85,FA,Copper,Total,ug/L,16.6,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,10/4/2002,>8hrs,1.62,FA,Copper,Total,ug/L,12.3,=,143,44.92255833,93.29663889 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,5/6/2001,,0.92,SP,Copper,Total,ug/L,1.5,<,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,5/10/2001,,0.23,SP,Copper,Total,ug/L,1.5,<,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,6/11/2001,,0.69,SU,Copper,Total,ug/L,29.5,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,7/17/2001,,0.46,SU,Copper,Total,ug/L,42.9,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,7/22/2001,,0.69,SU,Copper,Total,ug/L,10.1,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,8/17/2001,,1.4,SU,Copper,Total,ug/L,13.5,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,9/7/2001,,1.61,FA,Copper,Total,ug/L,12.3,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,9/9/2001,,0.31,FA,Copper,Total,ug/L,22.4,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,10/9/2001,,0.19,FA,Copper,Total,ug/L,17.9,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,10/13/2001,,0.34,FA,Copper,Total,ug/L,9.82,=,143,44.9231,93.2856 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,5/6/2001,,0.92,SP,Copper,Total,ug/L,3.1,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,5/20/2001,,1.18,SP,Copper,Total,ug/L,7.35,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,6/5/2001,,0.49,SU,Copper,Total,ug/L,7.11,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,7/17/2001,,0.46,SU,Copper,Total,ug/L,25.8,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,7/22/2001,,0.69,SU,Copper,Total,ug/L,5,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,8/1/2001,,0.22,SU,Copper,Total,ug/L,9.15,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,9/7/2001,,1.61,FA,Copper,Total,ug/L,7.28,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,10/9/2001,,0.19,FA,Copper,Total,ug/L,17.5,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,10/13/2001,,0.34,FA,Copper,Total,ug/L,6.3,=,95,44.9794,93.0189 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,5/20/2001,,1.18,SP,Copper,Total,ug/L,7.5,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,5/21/2001,,1.32,SP,Copper,Total,ug/L,21,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,6/5/2001,,0.49,SU,Copper,Total,ug/L,12.5,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,7/17/2001,,0.46,SU,Copper,Total,ug/L,30.7,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,7/22/2001,,0.69,SU,Copper,Total,ug/L,12.7,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,8/1/2001,,0.22,SU,Copper,Total,ug/L,15.2,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,9/7/2001,,1.61,FA,Copper,Total,ug/L,8.05,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,10/13/2001,,0.34,FA,Copper,Total,ug/L,9.47,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,10/15/2001,,,FA,Copper,Total,ug/L,9.71,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,11/12/2001,,0.27,FA,Copper,Total,ug/L,18.6,=,80,44.9694,93.1891 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,5/6/2001,,0.92,SP,Copper,Total,ug/L,2,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,5/20/2001,,1.18,SP,Copper,Total,ug/L,20.3,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,6/5/2001,,0.49,SU,Copper,Total,ug/L,25.2,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,8/17/2001,,1.4,SU,Copper,Total,ug/L,12.6,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,8/29/2001,,0.31,SU,Copper,Total,ug/L,30.8,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,9/7/2001,,1.61,FA,Copper,Total,ug/L,17.2,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,10/13/2001,,0.34,FA,Copper,Total,ug/L,13.6,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,11/12/2001,,0.27,FA,Copper,Total,ug/L,34.7,=,63,44.9594,93.1188 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,5/20/2001,,1.18,SP,Copper,Total,ug/L,14.5,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,5/21/2001,,1.32,SP,Copper,Total,ug/L,5.7,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,6/5/2001,,0.49,SU,Copper,Total,ug/L,11.1,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,7/17/2001,,0.46,SU,Copper,Total,ug/L,48.6,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,7/22/2001,,0.69,SU,Copper,Total,ug/L,10.8,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,8/17/2001,,1.4,SU,Copper,Total,ug/L,12.1,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,8/29/2001,,0.49,SU,Copper,Total,ug/L,30.6,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,10/9/2001,,0.19,FA,Copper,Total,ug/L,18.6,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,10/13/2001,,0.34,FA,Copper,Total,ug/L,10.3,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,11/12/2001,,0.27,FA,Copper,Total,ug/L,25.8,=,100,44.9501,93.227 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/9/2001,>8hrs,,SP,Copper,Total,ug/L,120,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/15/2001,>8hrs,,SP,Copper,Total,ug/L,53.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,4/10/2001,>8hrs,1.72,SP,Copper,Total,ug/L,16.4,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,5/20/2001,>8hrs,1.18,SP,Copper,Total,ug/L,14.5,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,5/21/2001,>8hrs,1.32,SP,Copper,Total,ug/L,5.7,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/5/2001,>8hrs,0.49,SU,Copper,Total,ug/L,11.1,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/17/2001,>8hrs,0.46,SU,Copper,Total,ug/L,48.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/23/2001,>8hrs,0.11,SU,Copper,Total,ug/L,10.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/17/2001,>8hrs,1.4,SU,Copper,Total,ug/L,12.1,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/29/2001,>8hrs,0.49,SU,Copper,Total,ug/L,30.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/9/2001,>8hrs,0.19,FA,Copper,Total,ug/L,18.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/13/2001,>8hrs,0.34,FA,Copper,Total,ug/L,10.3,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,11/12/2001,>8hrs,0.27,FA,Copper,Total,ug/L,25.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/19/2002,>8hrs,,SP,Copper,Total,ug/L,17.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,4/4/2002,>8hrs,,SP,Copper,Total,ug/L,28.5,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/2/2002,>8hrs,0.38,SU,Copper,Total,ug/L,4.91,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/6/2002,>8hrs,0.63,SU,Copper,Total,ug/L,20.9,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/19/2002,>8hrs,0.6,SU,Copper,Total,ug/L,3,<,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/24/2002,>8hrs,0.62,SU,Copper,Total,ug/L,3,<,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/10/2002,>8hrs,1.86,SU,Copper,Total,ug/L,3,<,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/16/2002,>8hrs,1.92,SU,Copper,Total,ug/L,21.7,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/20/2002,>8hrs,2.52,SU,Copper,Total,ug/L,18,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,9/5/2002,>8hrs,2.6,FA,Copper,Total,ug/L,22,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/8/2002,>8hrs,0.49,FA,Copper,Total,ug/L,14.2,=,113,44.95922222,93.24363889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,3/15/2001,>8hrs,,SP,Copper,Total,ug/L,47.3,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,4/10/2001,>8hrs,1.72,SP,Copper,Total,ug/L,17.1,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,3/12/2002,>8hrs,,SP,Copper,Total,ug/L,49.7,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,4/5/2002,>8hrs,,SP,Copper,Total,ug/L,40,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,5/5/2002,>8hrs,0.62,SP,Copper,Total,ug/L,68.1,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,5/7/2002,>8hrs,1.46,SP,Copper,Total,ug/L,753,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,6/3/2002,>8hrs,0.7,SU,Copper,Total,ug/L,9.52,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,7/10/2002,>8hrs,1.86,SU,Copper,Total,ug/L,3,<,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,8/16/2002,>8hrs,1.92,SU,Copper,Total,ug/L,24.1,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,9/5/2002,>8hrs,2.6,FA,Copper,Total,ug/L,22.4,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,10/7/2002,>8hrs,0.18,FA,Copper,Total,ug/L,16.3,=,63,44.95758889,93.12003889 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,3/15/2001,>8hrs,,SP,Copper,Total,ug/L,35.3,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,4/10/2001,>8hrs,1.72,SP,Copper,Total,ug/L,6.96,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/1/2001,>8hrs,0.44,SP,Copper,Total,ug/L,2.95,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,3/12/2002,>8hrs,,SP,Copper,Total,ug/L,28.5,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,4/5/2002,>8hrs,,SP,Copper,Total,ug/L,13.2,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/5/2002,>8hrs,0.62,SP,Copper,Total,ug/L,74.3,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/7/2002,>8hrs,1.46,SP,Copper,Total,ug/L,37.4,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,6/3/2002,>8hrs,0.7,SU,Copper,Total,ug/L,3,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,7/10/2002,>8hrs,1.86,SU,Copper,Total,ug/L,3,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,8/16/2002,>8hrs,1.92,SU,Copper,Total,ug/L,15.8,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,8/20/2002,>8hrs,2.52,SU,Copper,Total,ug/L,24.2,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,9/5/2002,>8hrs,2.6,FA,Copper,Total,ug/L,9.51,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,10/7/2002,>8hrs,0.18,FA,Copper,Total,ug/L,11.1,=,95,44.97933056,93.017675 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,3/15/2001,>8hrs,,SP,Copper,Total,ug/L,5,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,4/10/2001,>8hrs,1.72,SP,Copper,Total,ug/L,13,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,3/12/2002,>8hrs,,SP,Copper,Total,ug/L,41.3,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,4/5/2002,>8hrs,,SP,Copper,Total,ug/L,37.1,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,5/5/2002,>8hrs,0.62,SP,Copper,Total,ug/L,76.6,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,5/7/2002,>8hrs,1.46,SP,Copper,Total,ug/L,8.14,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,6/3/2002,>8hrs,0.7,SU,Copper,Total,ug/L,16.4,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,7/10/2002,>8hrs,1.86,SU,Copper,Total,ug/L,3,<,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,7/24/2002,>8hrs,1.06,SU,Copper,Total,ug/L,251,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,8/16/2002,>8hrs,1.92,SU,Copper,Total,ug/L,22.6,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,8/20/2002,>8hrs,2.52,SU,Copper,Total,ug/L,23,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,9/5/2002,>8hrs,2.6,FA,Copper,Total,ug/L,16.5,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,10/7/2002,>8hrs,0.18,FA,Copper,Total,ug/L,8.16,=,80,44.96772222,93.18919167 +2,NC,NCRASIT1,I40_400ft_east_S_State_Street,-,City_of_Raleigh,OP_MIX,RE,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,10,=,21,, +2,NC,NCRASIT2,Williamson_Drive_Pineview_Street,-,City_of_Raleigh,RE,,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,18,=,42,, +2,NC,NCRASIT3,I40_Dandridge_Drive_Bunche_Drive,-,City_of_Raleigh,RE,,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,17,=,110,, +2,NC,NCRASIT4,Williamson_Drive_Wade_Avenue,-,City_of_Raleigh,CO_MIX,RE,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,12,=,30,, +2,NC,NCRASIT5,Pylon_Drive_100ft_North_Hutton_Street,-,City_of_Raleigh,ID_MIX,OP,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,10,=,32,, +2,NC,NCRASIT6,South_Wilmington_Street_City_Farm_Road,-,City_of_Raleigh,ID_MIX,RE,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,11,=,58,, +2,NC,NCRASIT7,50ft_east_N_West_Street_Peace_Street_Dortch_Street,-,City_of_Raleigh,CO_MIX,RE,,3/16/2000,4,1.3,SP,Copper,Total,ug/L,33,=,467,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,4/13/2000,,,SP,Copper,Total,ug/L,7.760000229,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/26/2000,,0.529999958,SP,Copper,Total,ug/L,6.690000057,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/31/2000,,0.559999999,SP,Copper,Total,ug/L,8.289999962,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,10/10/2000,,0.399999994,FA,Copper,Total,ug/L,11.30000019,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,3/1/2001,,0.060000002,SP,Copper,Total,ug/L,7.900000095,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/14/2001,,0.07,SP,Copper,Total,ug/L,5.400000095,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/16/2001,,0.720000004,SP,Copper,Total,ug/L,11.60000038,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/13/2002,,0.210000004,SP,Copper,Total,ug/L,20.20000076,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/28/2002,,,SP,Copper,Total,ug/L,3.119999886,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,6/17/2002,,0.439999986,SU,Copper,Total,ug/L,6.010000229,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,11/16/2002,,2.008999952,FA,Copper,Total,ug/L,5.690000057,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,12/12/2002,,0.314999978,WI,Copper,Total,ug/L,3.029999971,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,4/23/2003,,,SP,Copper,Total,ug/L,3.420000076,=,26.57,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,2/23/2002,,,WI,Copper,Total,ug/L,99.5,=,12.4,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,3/6/2002,,,SP,Copper,Total,ug/L,23.5,=,12.4,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,3/19/2002,,,SP,Copper,Total,ug/L,18,=,12.4,, +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,4/1/2000,3,0.16,SP,Copper,Total,ug/L,12,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,10/15/2000,8,1.13,FA,Copper,Total,ug/L,24,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,10/28/2000,6,1.02,FA,Copper,Total,ug/L,5,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,1/27/2001,9,1.21,WI,Copper,Total,ug/L,4,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,3/8/2001,5,0.98,SP,Copper,Total,ug/L,3,=,38.8,32.67822222,97.13461111 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,4/30/2000,3,0.68,SP,Copper,Total,ug/L,20,=,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,10/15/2000,8,0.88,FA,Copper,Total,ug/L,18,=,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,1/27/2001,7,1.28,WI,Copper,Total,ug/L,4,<,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,3/8/2001,5,0.96,SP,Copper,Total,ug/L,4,=,160.6,32.78236111,97.1165 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,1/7/2000,20,0.32,WI,Copper,Total,ug/L,27,=,49.5,32.77,96.89027778 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,1/27/2001,9,1.07,WI,Copper,Total,ug/L,7,=,49.5,32.77,96.89027778 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,3/8/2001,5,0.71,SP,Copper,Total,ug/L,14,=,49.5,32.77,96.89027778 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/27/2000,18,0.25,WI,Copper,Total,ug/L,10,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,4/11/2000,9,0.36,SP,Copper,Total,ug/L,25,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,10/15/2000,33,1.4,FA,Copper,Total,ug/L,32,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,10/29/2000,5,0.67,FA,Copper,Total,ug/L,33,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/10/2001,12,0.32,WI,Copper,Total,ug/L,21,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/28/2001,10,0.88,WI,Copper,Total,ug/L,10,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/8/2001,5,0.51,SP,Copper,Total,ug/L,16,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/24/2001,10,0.21,SP,Copper,Total,ug/L,18,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/27/2001,3,0.51,SP,Copper,Total,ug/L,10,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,4/11/2000,9,0.77,SP,Copper,Total,ug/L,21,=,59.1,32.93305556,96.80305556 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,10/15/2000,8,1.54,FA,Copper,Total,ug/L,14,=,59.1,32.93305556,96.80305556 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,4/11/2001,14,0.74,SP,Copper,Total,ug/L,10,<,59.1,32.93305556,96.80305556 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,10/15/2000,8,1.27,FA,Copper,Total,ug/L,41,=,38.9,32.66061111,96.76361111 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,1/27/2001,16,0.75,WI,Copper,Total,ug/L,9,=,38.9,32.66061111,96.76361111 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,3/8/2001,5,0.61,SP,Copper,Total,ug/L,8,=,38.9,32.66061111,96.76361111 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,10/29/2000,7,1.42,FA,Copper,Total,ug/L,29,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,11/12/2000,3,1.27,FA,Copper,Total,ug/L,9,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,1/27/2001,9,0.24,WI,Copper,Total,ug/L,6,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,2/9/2001,11,0.28,WI,Copper,Total,ug/L,26,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,2/27/2001,3,0.22,WI,Copper,Total,ug/L,8,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,3/8/2001,5,0.79,SP,Copper,Total,ug/L,8,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,10/6/2000,12,0.24,FA,Copper,Total,ug/L,26,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,10/20/2000,4,0.23,FA,Copper,Total,ug/L,40,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,11/12/2000,3,0.14,FA,Copper,Total,ug/L,23,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,3/8/2001,5,0.45,SP,Copper,Total,ug/L,20,=,12.05,32.92388889,96.81916667 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,3/7/2000,7,0.34,SP,Copper,Total,ug/L,9,=,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,11/12/2000,3,0.52,FA,Copper,Total,ug/L,6,=,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,1/27/2001,9,0.29,WI,Copper,Total,ug/L,4,=,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,3/8/2001,5,0.81,SP,Copper,Total,ug/L,3,=,151.6,32.825,97.34422222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,4/1/2000,2,0.35,SP,Copper,Total,ug/L,37,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,1/27/2001,5,0.75,WI,Copper,Total,ug/L,18,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,3/8/2001,5,0.7,SP,Copper,Total,ug/L,13,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,3/10/2000,7,0.36,SP,Copper,Total,ug/L,10,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,10/28/2000,5,1.07,FA,Copper,Total,ug/L,9,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,11/1/2000,3,0.39,FA,Copper,Total,ug/L,12,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,3/8/2001,5,0.8,SP,Copper,Total,ug/L,3,=,150.8,32.74597222,97.23894444 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/16/2000,5,0.17,SP,Copper,Total,ug/L,22,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,4/27/2000,10,0.23,SP,Copper,Total,ug/L,23,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,5/19/2000,44,1.36,SP,Copper,Total,ug/L,32,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,11/12/2000,3,0.85,FA,Copper,Total,ug/L,9,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,11/16/2000,3,0.21,FA,Copper,Total,ug/L,10,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,1/10/2001,12,0.3,WI,Copper,Total,ug/L,6,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,1/27/2001,9,0.18,WI,Copper,Total,ug/L,12,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/8/2001,5,0.71,SP,Copper,Total,ug/L,9,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/24/2001,10,0.95,SP,Copper,Total,ug/L,6,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/27/2001,3,0.88,SP,Copper,Total,ug/L,20,<,268,32.91555556,96.63583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,3/28/2000,6,0.89,SP,Copper,Total,ug/L,23,=,33.9,32.89236111,96.67583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,11/12/2000,3,0.52,FA,Copper,Total,ug/L,7,=,33.9,32.89236111,96.67583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,3/27/2001,3,0.96,SP,Copper,Total,ug/L,20,<,33.9,32.89236111,96.67583333 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,6/9/2000,,0.46,SU,Copper,Total,ug/L,9.7,=,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,10/7/2000,,0.16,FA,Copper,Total,ug/L,9.2,=,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,1/10/2001,,0.13,WI,Copper,Total,ug/L,5,<,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,3/27/2001,,3.7,SP,Copper,Total,ug/L,12.6,=,560,29.78477778,95.154 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,7/23/2000,,0.18,SU,Copper,Total,ug/L,14,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,10/29/2000,,0.98,FA,Copper,Total,ug/L,10.1,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,2/9/2001,,0.1,WI,Copper,Total,ug/L,22.8,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,4/16/2001,,0.88,SP,Copper,Total,ug/L,35,=,95,30.03097222,95.43994444 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,1/27/2000,,0.74,WI,Copper,Total,ug/L,10,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,6/26/2000,,0.39,SU,Copper,Total,ug/L,28.1,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,8/22/2000,,0.19,SU,Copper,Total,ug/L,33.6,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,1/26/2001,,0.02,WI,Copper,Total,ug/L,15.6,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,6/22/2001,,0.27,SU,Copper,Total,ug/L,7.5,=,32,29.92727778,95.58713889 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,1/27/2000,,0.28,WI,Copper,Total,ug/L,9.2,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,3/14/2000,,0.2,SP,Copper,Total,ug/L,14.7,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,11/12/2000,,2.07,FA,Copper,Total,ug/L,12.1,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,1/7/2001,,0.16,WI,Copper,Total,ug/L,5,<,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,3/8/2001,,0.38,SP,Copper,Total,ug/L,37.6,=,99,29.61791667,95.0525 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,3/14/2000,,0.97,SP,Copper,Total,ug/L,19,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,8/8/2000,,0.55,SU,Copper,Total,ug/L,43,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,1/10/2001,,1.75,WI,Copper,Total,ug/L,20,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,5/31/2001,,0.1,SP,Copper,Total,ug/L,21,=,232,29.7435,95.53466667 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,3/14/2000,,0.75,SP,Copper,Total,ug/L,15,=,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,11/1/2000,,0.75,FA,Copper,Total,ug/L,10,<,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,1/10/2001,,1.65,WI,Copper,Total,ug/L,10,<,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,3/27/2001,,6.42,SP,Copper,Total,ug/L,10,<,65,29.78883333,95.43263889 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,3/14/2000,,0.67,SP,Copper,Total,ug/L,11,=,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,9/21/2000,,0.23,FA,Copper,Total,ug/L,16,=,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,2/9/2001,,0.2,WI,Copper,Total,ug/L,19,=,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,7/19/2001,,0.1,SU,Copper,Total,ug/L,29,=,38,29.80404444,95.43444444 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,4/11/2000,9,0.53,SP,Copper,Total,ug/L,4,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,10/15/2000,8,0.93,FA,Copper,Total,ug/L,13,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,1/27/2001,9,0.29,WI,Copper,Total,ug/L,8,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,3/24/2001,10,0.79,SP,Copper,Total,ug/L,4,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,4/11/2000,9,1.01,SP,Copper,Total,ug/L,6,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,4/30/2000,2,1.11,SP,Copper,Total,ug/L,12,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,5/19/2000,9,0.66,SP,Copper,Total,ug/L,41,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,6/14/2000,2,0.4,SU,Copper,Total,ug/L,13,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,10/15/2000,8,0.78,FA,Copper,Total,ug/L,27,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/10/2001,14,0.42,WI,Copper,Total,ug/L,5,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/16/2001,4,0.22,WI,Copper,Total,ug/L,14,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/27/2001,9,0.25,WI,Copper,Total,ug/L,7,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/9/2001,11,0.28,WI,Copper,Total,ug/L,12,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/13/2001,4,0.31,WI,Copper,Total,ug/L,5,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/23/2001,7,0.23,WI,Copper,Total,ug/L,9,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/27/2001,3,0.47,WI,Copper,Total,ug/L,6,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/8/2001,5,0.55,SP,Copper,Total,ug/L,5,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/24/2001,10,1.19,SP,Copper,Total,ug/L,2,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/27/2001,3,0.84,SP,Copper,Total,ug/L,20,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,5/28/2001,16,1.17,SP,Copper,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,4/11/2000,13,0.49,SP,Copper,Total,ug/L,7,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/10/2001,9,0.48,WI,Copper,Total,ug/L,22,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/16/2001,3,0.94,WI,Copper,Total,ug/L,12,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/27/2001,9,1.32,WI,Copper,Total,ug/L,5,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,3/8/2001,5,0.72,SP,Copper,Total,ug/L,6,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,3/24/2001,10,1.23,SP,Copper,Total,ug/L,2,<,45.9,32.80472222,96.62777778 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/7/2000,20,0.32,WI,Copper,Total,ug/L,5,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,2/22/2000,22,1.04,WI,Copper,Total,ug/L,10,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,4/11/2000,13,1.29,SP,Copper,Total,ug/L,4,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,5/19/2000,14,1.68,SP,Copper,Total,ug/L,8,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,6/14/2000,2,0.43,SU,Copper,Total,ug/L,6,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,11/12/2000,3,0.43,FA,Copper,Total,ug/L,4,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/10/2001,8,0.21,WI,Copper,Total,ug/L,8,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/16/2001,4,0.34,WI,Copper,Total,ug/L,3,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/27/2001,9,0.18,WI,Copper,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,2/9/2001,10,0.33,WI,Copper,Total,ug/L,7,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,3/8/2001,5,0.66,SP,Copper,Total,ug/L,2,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,3/24/2001,10,1.42,SP,Copper,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,4/11/2001,14,0.84,SP,Copper,Total,ug/L,10,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,4/11/2000,9,0.61,SP,Copper,Total,ug/L,230,=,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,10/29/2000,6,1.51,FA,Copper,Total,ug/L,6,=,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,11/12/2000,3,0.62,FA,Copper,Total,ug/L,10,=,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,5/4/2001,11,0.63,SP,Copper,Total,ug/L,16,=,22.7,33.02722222,96.71286111 +5,TX,TXTCA001,Deer_Creek_TH904,TXDOT_Tarrant_County,-,FW_MIX,OP,27,10/29/2000,6,1.52,FA,Copper,Total,ug/L,14,=,63.13,32.58833333,97.31888889 +5,TX,TXTCA001,Deer_Creek_TH904,TXDOT_Tarrant_County,-,FW_MIX,OP,27,3/8/2001,5,1.05,SP,Copper,Total,ug/L,7,=,63.13,32.58833333,97.31888889 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,2/27/2000,,0.78,WI,Copper,Total,ug/L,13.7,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,3/21/2000,,1.99,SP,Copper,Total,ug/L,14.8,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,9/19/2000,,0.85,FA,Copper,Total,ug/L,5,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,9/25/2000,,2.14,FA,Copper,Total,ug/L,57,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,11/14/2000,,0.26,FA,Copper,Total,ug/L,39,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,1/19/2001,,1.41,WI,Copper,Total,ug/L,19,=,24.7,38.896225,77.081425 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,1/10/2000,,0.68,WI,Copper,Total,ug/L,0.45,<,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,3/16/2000,,0.39,SP,Copper,Total,ug/L,9.9,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,9/19/2000,,0.85,FA,Copper,Total,ug/L,2,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,9/25/2000,,2.14,FA,Copper,Total,ug/L,25,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,1/8/2001,,0.2,WI,Copper,Total,ug/L,20,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,3/4/2001,,0.35,SP,Copper,Total,ug/L,10,=,38.7,38.902525,77.15361111 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,2/18/2000,,0.58,WI,Copper,Total,ug/L,11.2,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,4/8/2000,,0.88,SP,Copper,Total,ug/L,9.7,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,8/18/2000,,0.08,SU,Copper,Total,ug/L,23,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,11/9/2000,,0.45,FA,Copper,Total,ug/L,62,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,1/19/2001,,1.41,WI,Copper,Total,ug/L,24,=,14,38.84287778,77.09034444 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,1/4/2000,,1.22,WI,Copper,Total,ug/L,5.8,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,2/14/2000,,0.11,WI,Copper,Total,ug/L,13.4,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,3/12/2000,,0.2,SP,Copper,Total,ug/L,7.1,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,4/4/2000,,0.45,SP,Copper,Total,ug/L,10.1,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,6/6/2000,,0.45,SU,Copper,Total,ug/L,7.69,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,1/19/2001,,1.41,WI,Copper,Total,ug/L,16,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,3/4/2001,,0.35,SP,Copper,Total,ug/L,15,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,6/1/2001,,0.52,SU,Copper,Total,ug/L,6,=,36,38.8443,77.09254722 +2,VA,VAARSICV,CV,-,Arlington,RE,,,9/24/2001,,,FA,Copper,Total,ug/L,29,=,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,10/6/2001,,,FA,Copper,Total,ug/L,60,=,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,3/2/2002,,,SP,Copper,Total,ug/L,80,=,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,3/19/2002,,,SP,Copper,Total,ug/L,23,=,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,6/6/2002,,,SU,Copper,Total,ug/L,45,=,24.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,9/24/2001,,,FA,Copper,Total,ug/L,5,=,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,10/6/2001,,,FA,Copper,Total,ug/L,17,=,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,1/11/2002,,,WI,Copper,Total,ug/L,10,=,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,2/7/2002,,,WI,Copper,Total,ug/L,9,=,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,6/6/2002,,,SU,Copper,Total,ug/L,14,=,38.7,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,7/18/2001,,,SU,Copper,Total,ug/L,45,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,8/10/2001,,,SU,Copper,Total,ug/L,30,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,3/2/2002,,,SP,Copper,Total,ug/L,16,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,3/19/2002,,,SP,Copper,Total,ug/L,10,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,6/6/2002,,,SU,Copper,Total,ug/L,33,=,14,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,6/1/2001,,,SU,Copper,Total,ug/L,6,=,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,9/24/2001,,,FA,Copper,Total,ug/L,16,=,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,3/2/2002,,,SP,Copper,Total,ug/L,8,=,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,3/26/2002,,,SP,Copper,Total,ug/L,11,=,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,6/6/2002,,,SU,Copper,Total,ug/L,20,=,36,, +2,VA,VACHAHIL,Hillsdale_Drive_Detention_Basin_Inflow,Albemarle_County,Charlottesville,RE_MIX,CO,42,7/18/2000,,0.199999997,SU,Copper,Total,ug/L,1.000000047,=,73.8,, +2,VA,VACHAHIL,Hillsdale_Drive_Detention_Basin_Inflow,Albemarle_County,Charlottesville,RE_MIX,CO,42,9/14/2000,,0.120000004,FA,Copper,Total,ug/L,25.00000037,=,73.8,, +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,6/27/2000,,0.89,SU,Copper,Total,ug/L,8,=,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,1/8/2001,,0.09,WI,Copper,Total,ug/L,35,=,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,12/10/2001,,0.24,WI,Copper,Total,ug/L,11,=,60,37.49479444,77.52904444 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,6/27/2000,,0.74,SU,Copper,Total,ug/L,6,=,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,1/8/2001,,0.07,WI,Copper,Total,ug/L,6,=,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,12/10/2001,,0.38,WI,Copper,Total,ug/L,9,=,10,37.40009722,77.65236944 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,6/27/2000,,0.56,SU,Copper,Total,ug/L,7,=,10,37.37954167,77.52731389 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,1/8/2001,,0.08,WI,Copper,Total,ug/L,8,=,10,37.37954167,77.52731389 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,6/27/2000,,1.25,SU,Copper,Total,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,1/8/2001,,0.19,WI,Copper,Total,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,6/27/2000,,0.41,SU,Copper,Total,ug/L,5,<,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,1/8/2001,,0.65,WI,Copper,Total,ug/L,5,=,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,12/10/2001,,0.2,WI,Copper,Total,ug/L,8,=,55.6,37.48011944,77.46317222 +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,1/5/2000,,,WI,Copper,Total,ug/L,1.03,=,130,, +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,9/19/2000,,,FA,Copper,Total,ug/L,0.2,<,130,, +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,2/13/2001,,,WI,Copper,Total,ug/L,1.45,=,130,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,3/17/2000,,,SP,Copper,Total,ug/L,0.2,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,4/25/2000,,,SP,Copper,Total,ug/L,0.2,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,9/19/2000,,,FA,Copper,Total,ug/L,0.2,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,1/20/2001,,,WI,Copper,Total,ug/L,1.26,=,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,2/13/2001,,,WI,Copper,Total,ug/L,0.2,<,16,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,8/27/2000,,,SU,Copper,Total,ug/L,0.2,<,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,9/18/2000,,,FA,Copper,Total,ug/L,0.2,<,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,1/18/2001,,,WI,Copper,Total,ug/L,0.2,<,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,2/13/2001,,,WI,Copper,Total,ug/L,1.26,=,28,, +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,2/13/2001,,,WI,Copper,Total,ug/L,0.2,<,188,36.7527,76.2079 +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,3/4/2001,,,SP,Copper,Total,ug/L,0.2,<,188,36.7527,76.2079 +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,3/21/2001,,,SP,Copper,Total,ug/L,0.2,<,188,36.7527,76.2079 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,3/21/2000,,,SP,Copper,Total,ug/L,0.2,<,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,9/19/2000,,,FA,Copper,Total,ug/L,0.2,<,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,1/8/2001,,,WI,Copper,Total,ug/L,0.2,<,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,1/30/2001,,,WI,Copper,Total,ug/L,1.21,=,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,2/22/2001,,,WI,Copper,Total,ug/L,1.24,=,32,36.7119,76.2425 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,3/21/2000,3.85,1.23,SP,Copper,Total,ug/L,21,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,3/25/2000,3.47,0.26,SP,Copper,Total,ug/L,33,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,8/1/2000,3.79,0.62,SU,Copper,Total,ug/L,30,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF6,Fairview_Park_Drive,Fairfax_County,-,CO,,,11/10/2000,44.5,0.28,FA,Copper,Total,ug/L,5,=,213.4,38.8643,77.2144 +2,VA,VAFFCOF7,Lakeview_Drive,Fairfax_County,-,RE_MIX,UNK,,9/19/2000,16.75,1.33,FA,Copper,Total,ug/L,8,=,49.9,38.8459,77.1667 +2,VA,VAFFCOF7,Lakeview_Drive,Fairfax_County,-,RE_MIX,UNK,,11/29/2000,3.38,0.13,FA,Copper,Total,ug/L,8,=,49.9,38.8459,77.1667 +2,VA,VAFFCOF9,Rock_Ridge_Road,Fairfax_County,-,RE,,,9/2/2000,4,0.98,FA,Copper,Total,ug/L,8,=,63.8,38.7655,77.146 +2,VA,VAFFOF11,Prosperity_Avenue,Fairfax_County,-,ID,,,8/1/2000,3.75,0.45,SU,Copper,Total,ug/L,16,=,37.9,38.8783,77.2388 +2,VA,VAFFOF11,Prosperity_Avenue,Fairfax_County,-,ID,,,11/29/2000,3.38,0.1,FA,Copper,Total,ug/L,34,=,37.9,38.8783,77.2388 +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,1/4/2000,,,WI,Copper,Total,ug/L,2.95,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,2/12/2000,,,WI,Copper,Total,ug/L,1.72,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,4/3/2000,,,SP,Copper,Total,ug/L,1.22,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,6/19/2000,,,SU,Copper,Total,ug/L,0.2,<,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,7/20/2000,,,SU,Copper,Total,ug/L,1.33,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,12/14/2000,,,WI,Copper,Total,ug/L,1.46,=,134,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,4/3/2000,,,SP,Copper,Total,ug/L,0.2,<,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,4/25/2000,,,SP,Copper,Total,ug/L,0.2,<,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,7/19/2000,,,SU,Copper,Total,ug/L,0.2,<,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,11/19/2000,,,FA,Copper,Total,ug/L,2.47,=,115,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,4/3/2000,,,SP,Copper,Total,ug/L,0.2,<,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,4/15/2000,,,SP,Copper,Total,ug/L,0.2,<,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,7/19/2000,,,SU,Copper,Total,ug/L,1.21,=,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,12/14/2000,,,WI,Copper,Total,ug/L,0.2,<,18,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,4/25/2000,,,SP,Copper,Total,ug/L,2.78,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,6/19/2000,,,SU,Copper,Total,ug/L,4.07,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,7/19/2000,,,SU,Copper,Total,ug/L,5.19,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,12/14/2000,,,WI,Copper,Total,ug/L,3.56,=,47,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,1/4/2000,,,WI,Copper,Total,ug/L,0.2,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,4/25/2000,,,SP,Copper,Total,ug/L,0.2,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,6/19/2000,,,SU,Copper,Total,ug/L,0.2,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,7/19/2000,,,SU,Copper,Total,ug/L,0.2,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,12/14/2000,,,WI,Copper,Total,ug/L,0.2,<,35,, +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/12/2000,13,0.29,WI,Copper,Total,ug/L,92.2,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/12/2000,,,WI,Copper,Total,ug/L,9.22,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,5/21/2000,,,SP,Copper,Total,ug/L,3,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,9/15/2000,,,FA,Copper,Total,ug/L,0.2,<,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,1/8/2001,,,WI,Copper,Total,ug/L,1.1,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/22/2001,,,WI,Copper,Total,ug/L,5.7,=,43,36.86495,76.28491111 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,6/19/2000,,,SU,Copper,Total,ug/L,2.9,=,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,9/15/2000,,,FA,Copper,Total,ug/L,0.2,<,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,3/2/2001,,,SP,Copper,Total,ug/L,0.2,<,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,3/21/2001,,,SP,Copper,Total,ug/L,0.2,<,97,36.93791944,76.23315833 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,5/21/2000,,,SP,Copper,Total,ug/L,0.2,<,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,6/19/2000,,,SU,Copper,Total,ug/L,3.1,=,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,1/8/2001,,,WI,Copper,Total,ug/L,4,=,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,2/22/2001,,,WI,Copper,Total,ug/L,1.9,=,27,36.9169,76.2298 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,5/20/2000,,,SP,Copper,Total,ug/L,3,=,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,6/19/2000,,,SU,Copper,Total,ug/L,0.2,<,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,1/8/2001,,,WI,Copper,Total,ug/L,5.1,=,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,2/22/2001,,,WI,Copper,Total,ug/L,1,<,43,36.8484,76.2098 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/18/2000,4,0.36,WI,Copper,Total,ug/L,5.49,=,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/18/2000,,,WI,Copper,Total,ug/L,1,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,5/21/2000,,,SP,Copper,Total,ug/L,2.1,=,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,6/19/2000,,,SU,Copper,Total,ug/L,0.2,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/22/2001,,,WI,Copper,Total,ug/L,1,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,5/21/2001,,,SP,Copper,Total,ug/L,0.2,<,39,36.87776111,76.23321111 +2,VA,VANNGLEN,Glendale_Road_NN1,-,Newport News,RE,,,3/28/2000,,,SP,Copper,Total,ug/L,1,<,75,, +2,VA,VANNGLEN,Glendale_Road_NN1,-,Newport News,RE,,,7/14/2000,,,SU,Copper,Total,ug/L,7.4,=,75,, +2,VA,VANNMALL,Patrick_Henry_Mall_NN3,-,Newport News,CO,,,3/28/2000,,,SP,Copper,Total,ug/L,1,<,24,, +2,VA,VANNOYN4,Oyster_Point_Park_Jefferson_Ave_NN4,-,Newport News,UNK,,,6/6/2000,,,SU,Copper,Total,ug/L,1,<,294,, +2,VA,VANNOYN4,Oyster_Point_Park_Jefferson_Ave_NN4,-,Newport News,UNK,,,1/30/2001,,,WI,Copper,Total,ug/L,1.27,=,294,, +2,VA,VANNSNN2,Shields_Road_NN2,-,Newport News,RE_MIX,UNK,,3/28/2000,,,SP,Copper,Total,ug/L,1,<,397,, +2,VA,VANNSNN2,Shields_Road_NN2,-,Newport News,RE_MIX,UNK,,1/30/2001,,,WI,Copper,Total,ug/L,1,<,397,, +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,3/28/2000,,,SP,Copper,Total,ug/L,1,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,6/6/2000,,,SU,Copper,Total,ug/L,1,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,6/14/2000,,,SU,Copper,Total,ug/L,1.23,=,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,8/18/2000,,,SU,Copper,Total,ug/L,1,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,2/22/2001,,,WI,Copper,Total,ug/L,1,<,83,37.0833,76.4671 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,6/19/2000,,,SU,Copper,Total,ug/L,1.22,=,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,7/15/2000,,,SU,Copper,Total,ug/L,1.08,=,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,12/14/2000,,,WI,Copper,Total,ug/L,0.2,<,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,2/22/2001,,,WI,Copper,Total,ug/L,0.2,<,27.2,36.8096,76.3175 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,4/25/2000,,,SP,Copper,Total,ug/L,0.2,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,6/4/2000,,,SU,Copper,Total,ug/L,0.2,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,9/18/2000,,,FA,Copper,Total,ug/L,0.2,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,11/17/2000,,,FA,Copper,Total,ug/L,0.2,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,4/25/2000,,,SP,Copper,Total,ug/L,1.19,=,46,36.8603,76.3879 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,7/15/2000,,,SU,Copper,Total,ug/L,1.49,=,46,36.8603,76.3879 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,12/14/2000,,,WI,Copper,Total,ug/L,1.66,=,46,36.8603,76.3879 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,1/4/2000,,,WI,Copper,Total,ug/L,0.2,<,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,4/25/2000,,,SP,Copper,Total,ug/L,0.2,<,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,7/15/2000,,,SU,Copper,Total,ug/L,1.14,=,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,12/14/2000,,,WI,Copper,Total,ug/L,0.2,<,35.3,36.8852,76.3829 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/4/2000,,,SU,Copper,Total,ug/L,0.2,<,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/15/2000,,,SU,Copper,Total,ug/L,0.2,<,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/19/2000,,,SU,Copper,Total,ug/L,0.2,<,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,12/14/2000,,,WI,Copper,Total,ug/L,0.2,<,53.5,36.89048056,76.39178056 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,2/12/2000,,,WI,Copper,Total,ug/L,0.2,<,63,36.82451667,76.09079722 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,3/21/2000,,,SP,Copper,Total,ug/L,0.2,<,63,36.82451667,76.09079722 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,7/15/2000,,,SU,Copper,Total,ug/L,0.2,<,63,36.82451667,76.09079722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,2/12/2000,,,WI,Copper,Total,ug/L,0.2,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,3/17/2000,,,SP,Copper,Total,ug/L,0.2,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,9/19/2000,,,FA,Copper,Total,ug/L,0.2,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,12/11/2000,,,WI,Copper,Total,ug/L,0.2,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,3/16/2001,,,SP,Copper,Total,ug/L,0.2,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,2/12/2000,,,WI,Copper,Total,ug/L,2.61,=,63,36.8739,76.1387 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,7/15/2000,,,SU,Copper,Total,ug/L,2.31,=,63,36.8739,76.1387 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,1/30/2001,,,WI,Copper,Total,ug/L,3.04,=,63,36.8739,76.1387 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,2/18/2000,,,WI,Copper,Total,ug/L,0.2,<,29,36.82088611,76.06472778 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,7/19/2000,,,SU,Copper,Total,ug/L,1.04,=,29,36.82088611,76.06472778 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,1/30/2001,,,WI,Copper,Total,ug/L,0.2,<,29,36.82088611,76.06472778 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,2/18/2000,,,WI,Copper,Total,ug/L,0.2,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,3/17/2000,,,SP,Copper,Total,ug/L,0.2,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,7/15/2000,,,SU,Copper,Total,ug/L,0.2,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,12/11/2000,,,WI,Copper,Total,ug/L,0.2,<,882,36.81683611,76.11573056 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,,11/27/2001,,0.2,FA,Lead,Total,ug/L,31,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,11/27/2001,,0.2,FA,Lead,Total,ug/L,31,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,,1/19/2002,,1.6,WI,Lead,Total,ug/L,60,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,1/19/2002,,1.6,WI,Lead,Total,ug/L,60,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,4/22/2002,,0.17,SP,Lead,Total,ug/L,22,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,8/9/2002,,0.32,SU,Lead,Total,ug/L,42,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,5/5/2003,,0.6,SP,Lead,Total,ug/L,58,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/27/2003,,0.4,SU,Lead,Total,ug/L,19,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/23/2003,,0.45,WI,Lead,Total,ug/L,41,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/7/2004,,0.3,SU,Lead,Total,ug/L,13,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/7/2004,,0.4,FA,Lead,Total,ug/L,9,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/22/2004,,0.38,WI,Lead,Total,ug/L,14,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/7/2005,,1.3,SP,Lead,Total,ug/L,33,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,4/6/2005,,0.4,SP,Lead,Total,ug/L,25,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,12/8/2005,,0.5,WI,Lead,Total,ug/L,31,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/9/2006,,1.3,SP,Lead,Total,ug/L,17,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/12/2006,,0.75,FA,Lead,Total,ug/L,22,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,6/19/2007,,0.5,SU,Lead,Total,ug/L,32,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,9/11/2007,,0.3,FA,Lead,Total,ug/L,19,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,3/19/2008,,0.4,SP,Lead,Total,ug/L,14,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,5/15/2008,,1.35,SP,Lead,Total,ug/L,23,=,336,33.53472222,86.79083333 +3,AL,ALJCC001,C001,Jefferson_County,City_of_Birmingham,ID_MIX,FW,71.9,8/12/2008,,1.9,SU,Lead,Total,ug/L,12,=,336,33.53472222,86.79083333 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,11/27/2001,,0.23,FA,Lead,Total,ug/L,31,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,11/27/2001,,0.23,FA,Lead,Total,ug/L,31,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/20/2002,,0.22,SP,Lead,Total,ug/L,34,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/20/2002,,0.22,SP,Lead,Total,ug/L,34,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,5/9/2002,,0.35,SP,Lead,Total,ug/L,17,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,8/28/2002,,0.3,SU,Lead,Total,ug/L,12,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/11/2003,,0.5,SU,Lead,Total,ug/L,18,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,7/22/2003,,0.65,SU,Lead,Total,ug/L,18,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,12/23/2003,,0.39,WI,Lead,Total,ug/L,38,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/7/2004,,0.21,SU,Lead,Total,ug/L,18,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,9/7/2004,,0.32,FA,Lead,Total,ug/L,5,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,10/19/2004,,0.8,FA,Lead,Total,ug/L,19,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,3/22/2005,,0.62,SP,Lead,Total,ug/L,26,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,5/20/2005,,1.1,SP,Lead,Total,ug/L,45,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,2/2/2006,,0.15,WI,Lead,Total,ug/L,20,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,9/18/2006,,0.4,FA,Lead,Total,ug/L,13,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,6/19/2007,,0.2,SU,Lead,Total,ug/L,33,=,750,33.52916667,86.83805556 +3,AL,ALJCC002,C002,Jefferson_County,City_of_Birmingham,ID_MIX,RE,68.36,12/20/2007,,0.28,WI,Lead,Total,ug/L,13,=,750,33.52916667,86.83805556 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,,9/19/2001,,0.25,FA,Lead,Total,ug/L,6,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,9/19/2001,,0.25,FA,Lead,Total,ug/L,10,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,,1/19/2002,,1.65,WI,Lead,Total,ug/L,20,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,1/19/2002,,1.65,WI,Lead,Total,ug/L,17,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,4/12/2002,,0.2,SP,Lead,Total,ug/L,32,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,8/28/2002,,0.25,SU,Lead,Total,ug/L,11,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,4/24/2003,,0.59,SP,Lead,Total,ug/L,25,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,6/30/2003,,0.5,SU,Lead,Total,ug/L,22,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,10/17/2003,,0.59,FA,Lead,Total,ug/L,19,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,12/22/2004,,0.15,WI,Lead,Total,ug/L,3,<,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,5/20/2005,,,SP,Lead,Total,ug/L,19,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,9/18/2006,,,FA,Lead,Total,ug/L,13,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004L,C004L,Jefferson_County,City_of_Birmingham,CO_MIX,ID,72.26,2/21/2008,,,WI,Lead,Total,ug/L,4,=,2564,33.50944444,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,9/19/2001,,0.25,FA,Lead,Total,ug/L,6,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,9/20/2001,,0.25,FA,Lead,Total,ug/L,10,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,1/19/2002,,1.65,WI,Lead,Total,ug/L,17,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,1/19/2002,,1.65,WI,Lead,Total,ug/L,20,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,4/12/2002,,0.2,SP,Lead,Total,ug/L,32,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,8/14/2002,,0.15,SU,Lead,Total,ug/L,32,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,4/24/2003,,0.59,SP,Lead,Total,ug/L,25,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,6/30/2003,,0.5,SU,Lead,Total,ug/L,19,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,10/17/2003,,0.59,FA,Lead,Total,ug/L,42,=,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,12/22/2004,,0.15,WI,Lead,Total,ug/L,3,<,1047,33.50972222,86.82611111 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,3/27/2006,,,SP,Lead,Total,ug/L,3,<,1047,33.50972222,86.82611111 +3,AL,ALJCC005,C005,Jefferson_County,City_of_Birmingham,RE_MIX,UNK,47.17,10/19/2004,,0.25,FA,Lead,Total,ug/L,3,<,1663,, +3,AL,ALJCC005,C005,Jefferson_County,City_of_Birmingham,RE_MIX,UNK,47.17,1/13/2005,,0.6,WI,Lead,Total,ug/L,6,=,1663,, +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,,8/31/2001,,0.3,SU,Lead,Total,ug/L,18,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/31/2001,,0.3,SU,Lead,Total,ug/L,18,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,,3/9/2002,,0.12,SP,Lead,Total,ug/L,6,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,3/9/2002,,0.12,SP,Lead,Total,ug/L,6,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/13/2002,,0.23,FA,Lead,Total,ug/L,7,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/27/2003,,0.65,SU,Lead,Total,ug/L,12,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/12/2003,,0.23,SU,Lead,Total,ug/L,13,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,10/10/2003,,0.15,FA,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/7/2004,,,SU,Lead,Total,ug/L,6,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/7/2004,,0.5,FA,Lead,Total,ug/L,4,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,10/19/2004,,0.19,FA,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,1/13/2005,,0.6,WI,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,6/6/2005,,0.36,SU,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,12/8/2005,,0.5,WI,Lead,Total,ug/L,6,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,2/2/2006,,0.3,WI,Lead,Total,ug/L,3,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,4/26/2006,,0.2,SP,Lead,Total,ug/L,8,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/12/2006,,0.95,FA,Lead,Total,ug/L,11,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,9/11/2007,,0.2,FA,Lead,Total,ug/L,5,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,12/20/2007,,0.3,WI,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,3/19/2008,,0.42,SP,Lead,Total,ug/L,30,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,5/15/2008,,1.6,SP,Lead,Total,ug/L,5,=,112,33.46722222,86.80861111 +3,AL,ALJCC009,C009,Jefferson_County,City_of_Homewood,RE,,34.84,8/12/2008,,0.35,SU,Lead,Total,ug/L,3,<,112,33.46722222,86.80861111 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,,8/31/2001,,0.1,SU,Lead,Total,ug/L,8,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,8/31/2001,,0.1,SU,Lead,Total,ug/L,8,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,,3/9/2002,,0.15,SP,Lead,Total,ug/L,6,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,3/9/2002,,0.15,SP,Lead,Total,ug/L,6,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,5/29/2002,,1.55,SP,Lead,Total,ug/L,9,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/13/2002,,0.31,FA,Lead,Total,ug/L,3,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,6/11/2003,,0.42,SU,Lead,Total,ug/L,3,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,10/17/2003,,0.22,FA,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,6/14/2004,,0.3,SU,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/7/2004,,0.34,FA,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,12/5/2004,,0.5,WI,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,1/13/2005,,0.85,WI,Lead,Total,ug/L,3,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,4/6/2005,,0.45,SP,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,3/9/2006,,1,SP,Lead,Total,ug/L,7,=,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,9/18/2006,,0.28,FA,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC010,C010,Jefferson_County,City_of_Vestavia_Hills,RE_MIX,OP,25.67,2/21/2008,,0.5,WI,Lead,Total,ug/L,3,<,167,33.43527778,86.77555556 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/17/2001,,0.32,WI,Lead,Total,ug/L,7,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/17/2001,,0.32,WI,Lead,Total,ug/L,7,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,5/29/2002,,1.8,SP,Lead,Total,ug/L,3,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,9/25/2002,,0.55,FA,Lead,Total,ug/L,3,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,6/11/2003,,0.5,SU,Lead,Total,ug/L,3,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,7/31/2003,,0.15,SU,Lead,Total,ug/L,3,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/13/2003,,0.3,WI,Lead,Total,ug/L,6,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,6/14/2004,,0.15,SU,Lead,Total,ug/L,3,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,12/5/2004,,,WI,Lead,Total,ug/L,3,<,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,3/22/2005,,1.2,SP,Lead,Total,ug/L,6,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,7/6/2005,,0.4,SU,Lead,Total,ug/L,4,=,244,33.37472222,86.80333333 +3,AL,ALJCC012,C012,Jefferson_County,City_of_Hoover,CO_MIX,RE,81.61,9/12/2006,,1.25,FA,Lead,Total,ug/L,5,=,244,33.37472222,86.80333333 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/16/2010,,0.78,SU,Lead,Total,ug/L,13,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/14/2010,,0.81,SU,Lead,Total,ug/L,11,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,5/31/2012,9.165416667,0.27,SP,Lead,Total,ug/L,51,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/11/2012,0.859583333,0.29,SU,Lead,Total,ug/L,5,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/21/2012,2.686666667,1.78,SU,Lead,Total,ug/L,11,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/3/2012,3.510416667,0.18,SU,Lead,Total,ug/L,7,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/13/2012,6.452083333,1.01,SU,Lead,Total,ug/L,22,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,1/13/2013,1.152916667,2.15,WI,Lead,Total,ug/L,8,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,1/30/2013,4.13,1.59,WI,Lead,Total,ug/L,46,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,2/21/2013,2.3575,2.29,WI,Lead,Total,ug/L,6,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/5/2013,7.309583333,0.23,SP,Lead,Total,ug/L,8,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/11/2013,5.50125,2.32,SP,Lead,Total,ug/L,8,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/22/2013,3.635416667,0.41,SP,Lead,Total,ug/L,6,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/30/2013,6.529166667,0.78,SP,Lead,Total,ug/L,10,=,0.9,33.21388889,87.57138889 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,3/6/2000,,0.63,SP,Lead,Total,ug/L,50,<,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,6/29/2000,,1.1,SU,Lead,Total,ug/L,130,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,8/5/2000,,0.3,SU,Lead,Total,ug/L,50,<,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,1/8/2001,,0.25,WI,Lead,Total,ug/L,50,<,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,6/25/2001,,0.1,SU,Lead,Total,ug/L,22,=,103,32.25027222,110.9385806 +6,AZ,AZTUA001,Grant_Road_and_Wilson_Avenue,Pima_County,City_of_Tucson ,RE_MIX,CO,,12/4/2001,29,0.21,WI,Lead,Total,ug/L,43,=,103,32.25027222,110.9385806 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,3/6/2000,,0.79,SP,Lead,Total,ug/L,50,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,6/22/2000,,0.15,SU,Lead,Total,ug/L,50,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,1/8/2001,,0.36,WI,Lead,Total,ug/L,50,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,6/21/2001,,0.15,SU,Lead,Total,ug/L,10,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,7/3/2001,12,0.56,SU,Lead,Total,ug/L,64,=,48.3,32.27141111,110.9015 +6,AZ,AZTUA002,Greenlee_Road,Pima_County,City_of_Tucson ,RE,,,12/4/2001,,0.28,WI,Lead,Total,ug/L,10,<,48.3,32.27141111,110.9015 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,1/2/2000,,0.13,WI,Lead,Total,ug/L,30,<,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,6/27/2000,,0.31,SU,Lead,Total,ug/L,53,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,10/19/2000,,0.33,FA,Lead,Total,ug/L,77,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,6/20/2001,,0.26,SU,Lead,Total,ug/L,32,=,29,32.20511389,110.9180556 +6,AZ,AZTUA003,El_Con_Mall,Pima_County,City_of_Tucson ,CO,,,12/4/2001,29,0.12,WI,Lead,Total,ug/L,10,=,29,32.20511389,110.9180556 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,3/6/2000,,0.59,SP,Lead,Total,ug/L,50,<,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,6/19/2000,,0.3,SU,Lead,Total,ug/L,123,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,10/19/2000,,0.65,FA,Lead,Total,ug/L,84,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,6/22/2001,,0.35,SU,Lead,Total,ug/L,87,=,83,32.21348889,110.9534 +6,AZ,AZTUA004,17th_Street,Pima_County,City_of_Tucson ,ID,,,12/11/2001,,0.25,WI,Lead,Total,ug/L,34,=,83,32.21348889,110.9534 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,12/9/2001,4,0.118,WI,Lead,Total,ug/L,21.1,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,2/7/2002,12,0.496,WI,Lead,Total,ug/L,19.1,=,0.69,38.5975,121.2786111 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,10/28/2000,2,0.39,FA,Lead,Total,ug/L,4.6,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2000,1,0.21,WI,Lead,Total,ug/L,4.7,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/7/2001,24,0.491,WI,Lead,Total,ug/L,11,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/23/2001,11,0.26,WI,Lead,Total,ug/L,7.5,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/25/2001,1,0.821,WI,Lead,Total,ug/L,9.4,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/17/2001,5,0.621,WI,Lead,Total,ug/L,3.8,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/3/2001,1,0.851,SP,Lead,Total,ug/L,5.4,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,4/20/2001,11,0.51,SP,Lead,Total,ug/L,4.8,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/10/2001,41,0.695,FA,Lead,Total,ug/L,5.9,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/28/2001,5,1.764,FA,Lead,Total,ug/L,1.6,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2001,7,0.96,WI,Lead,Total,ug/L,14,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/19/2001,2,0.665,WI,Lead,Total,ug/L,12,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/26/2002,24,0.404,WI,Lead,Total,ug/L,3,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/16/2002,21,0.189,WI,Lead,Total,ug/L,4.8,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/19/2002,2,0.443,WI,Lead,Total,ug/L,10,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/6/2002,14,0.416,SP,Lead,Total,ug/L,14,=,1.61,38.20638889,122.1380556 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,1/23/2001,12.9,0.941,WI,Lead,Total,ug/L,16.9,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,2/11/2001,16.2,0.751,WI,Lead,Total,ug/L,18.5,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,10/30/2001,,0.39,FA,Lead,Total,ug/L,39.3,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,2/16/2002,20.4,0.6,WI,Lead,Total,ug/L,22.2,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,3/6/2002,16.8,0.25,SP,Lead,Total,ug/L,24,=,0.44,36.77583333,119.79 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.571,WI,Lead,Total,ug/L,24.6,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/20/2001,13.2,0.32,SP,Lead,Total,ug/L,9.6,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.6,1.861,FA,Lead,Total,ug/L,9,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.1,0.47,WI,Lead,Total,ug/L,5,=,3.16,34.15972222,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/10/2001,14.19999981,0.701,WI,Lead,Total,ug/L,26.307,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.5,1.191,SP,Lead,Total,ug/L,21.2,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/12/2001,13,0.47,FA,Lead,Total,ug/L,50,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.69999981,1.981,FA,Lead,Total,ug/L,76,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/14/2001,19.70000076,0.14,WI,Lead,Total,ug/L,46,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,1.251,WI,Lead,Total,ug/L,19,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Lead,Total,ug/L,18,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.09,SP,Lead,Total,ug/L,28,=,4.18,34.1,118.48 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/19/2001,5.300000191,1.191,WI,Lead,Total,ug/L,31.94,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.45,WI,Lead,Total,ug/L,52.6,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/4/2001,4,0.2,SP,Lead,Total,ug/L,40.1,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.60000038,1.001,SP,Lead,Total,ug/L,24,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,10/30/2001,192.3000031,0.11,FA,Lead,Total,ug/L,24,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.60000038,1.171,FA,Lead,Total,ug/L,40,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/20/2001,6.300000191,0.48,WI,Lead,Total,ug/L,49,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,0.971,WI,Lead,Total,ug/L,27,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Lead,Total,ug/L,29,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.41,SP,Lead,Total,ug/L,57,=,0.96,34.04972222,118.4397222 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/16/2000,,0.28,WI,Lead,Total,ug/L,660,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/20/2000,,1.690000099,WI,Lead,Total,ug/L,310,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,3/4/2000,,,SP,Lead,Total,ug/L,17,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/17/2000,,0.420000009,SP,Lead,Total,ug/L,270,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/8/2001,,0.430000035,WI,Lead,Total,ug/L,190,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/10/2001,,1.690000099,WI,Lead,Total,ug/L,250,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/10/2001,,0.600000029,WI,Lead,Total,ug/L,250,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,1/26/2001,,1.539999894,WI,Lead,Total,ug/L,330,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/12/2001,,0.380000017,WI,Lead,Total,ug/L,150,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,2/25/2001,,1.450000072,WI,Lead,Total,ug/L,290,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,3/6/2001,,0.600000029,SP,Lead,Total,ug/L,450,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/7/2001,,0.610000055,SP,Lead,Total,ug/L,320,=,4.2,33.08485833,117.3000361 +6,CA,CAFWLACO,I-5_La_Costa_east_30I,San_Diego_County,City_of_Encinitas,FW,,48,4/20/2001,,0.219999993,SP,Lead,Total,ug/L,100,=,4.2,33.08485833,117.3000361 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,2/20/2000,,0.589999965,WI,Lead,Total,ug/L,7.599999905,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,3/5/2000,,0.480000015,SP,Lead,Total,ug/L,36,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,4/17/2000,,1.059999916,SP,Lead,Total,ug/L,39,=,4.6,33.12630278,117.3249833 +6,CA,CAFWPALO,I-5_North_of_Palomar_Airport_Road_I1,San_Diego_County,City_of_Carlsbad,FW,,90,1/26/2001,,1.609999889,WI,Lead,Total,ug/L,61,=,4.6,33.12630278,117.3249833 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/25/2000,,0.780000011,WI,Lead,Total,ug/L,15,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/16/2000,,0.450000012,WI,Lead,Total,ug/L,15,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/20/2000,,,WI,Lead,Total,ug/L,120,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,3/4/2000,,0.51999997,SP,Lead,Total,ug/L,25,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/17/2000,,1.63999993,SP,Lead,Total,ug/L,17,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,10/26/2000,,2.839999762,FA,Lead,Total,ug/L,19,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/10/2001,,1.119999998,WI,Lead,Total,ug/L,53,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,1/26/2001,,1.220000109,WI,Lead,Total,ug/L,47,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,2/23/2001,,0.86000007,WI,Lead,Total,ug/L,57,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,3/6/2001,,0.480000015,SP,Lead,Total,ug/L,66,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/7/2001,,0.51999997,SP,Lead,Total,ug/L,38,=,5.3,32.92908333,117.2375361 +6,CA,CAFWSR56,I-5_SR-56_27I,San_Diego_County,City_of_San_Diego,FW,,69,4/20/2001,,0.169999994,SP,Lead,Total,ug/L,17,=,5.3,32.92908333,117.2375361 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/28/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/12/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/22/2000,,,WI,Lead,Total,ug/L,6,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/25/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/29/2000,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/7/2000,,,SP,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/9/2000,,,SP,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,11/1/2000,,,FA,Lead,Total,ug/L,5.05,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/16/2001,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/25/2001,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/14/2001,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/6/2001,,,SP,Lead,Total,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Lead,Total,ug/L,5.3,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Lead,Total,ug/L,7.41,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Lead,Total,ug/L,14.8,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Lead,Total,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/26/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/1/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/11/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/24/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/29/2000,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/6/2000,,,SP,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/8/2000,,,SP,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/12/2000,,,FA,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/28/2000,,,FA,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/31/2000,,,FA,Lead,Total,ug/L,11.9,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/4/2001,,,WI,Lead,Total,ug/L,38.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/17/2001,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/25/2001,,,WI,Lead,Total,ug/L,5.25,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/30/2001,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2001,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/7/2001,,,SP,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,4/11/2001,,,SP,Lead,Total,ug/L,5,<,902,33.92917222,118.3708111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/5/2000,,,WI,Lead,Total,ug/L,7.9,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/26/2000,,,WI,Lead,Total,ug/L,11.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2000,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/12/2000,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/17/2000,,,WI,Lead,Total,ug/L,5.4,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/24/2000,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/29/2000,,,WI,Lead,Total,ug/L,5.19,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2000,,,SP,Lead,Total,ug/L,5.28,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/9/2000,,,SP,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/12/2000,,,FA,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/28/2000,,,FA,Lead,Total,ug/L,5.16,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/30/2000,,,FA,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/4/2001,,,WI,Lead,Total,ug/L,54.2,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/11/2001,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/25/2001,,,WI,Lead,Total,ug/L,6.15,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2001,,,WI,Lead,Total,ug/L,9.32,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/14/2001,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2001,,,SP,Lead,Total,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/26/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/1/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/11/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/24/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/29/2000,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/6/2000,,,SP,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2000,,,SP,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/12/2000,,,FA,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/28/2000,,,FA,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/31/2000,,,FA,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/9/2001,,,WI,Lead,Total,ug/L,5.24,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/10/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/25/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/29/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2001,,,SP,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,4/11/2001,,,SP,Lead,Total,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/28/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/1/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/12/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/25/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/29/2000,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2000,,,SP,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/9/2000,,,SP,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/12/2000,,,FA,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/28/2000,,,FA,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/31/2000,,,FA,Lead,Total,ug/L,7.96,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/16/2001,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/25/2001,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/14/2001,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2001,,,SP,Lead,Total,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/29/2000,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Lead,Total,ug/L,13.5,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/9/2001,,,WI,Lead,Total,ug/L,16.1,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Lead,Total,ug/L,5,<,130.8,34.14795278,118.2711417 +9,CO,COCSA002,Chestnut_Street_at_Douglas_Creek,El_Paso_County,City_of_Colorado_Springs,ID_MIX,OP,37.5,7/29/2002,5,0.23,SU,Lead,Total,ug/L,290,=,105.6,38.89638889,104.835 +9,CO,CODEWAWA,Denver_Wastewater_Building,Denver,Denver,IS,,100,8/8/2008,,1.15,SU,Lead,Total,ug/L,28.3,=,0.192,39.72091944,105.0106 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,9/26/2002,,0.4,FA,Lead,Total,ug/L,1.19,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/6/2002,,0.2,FA,Lead,Total,ug/L,0.89,<,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,3/6/2004,,0.38,SP,Lead,Total,ug/L,1.24,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,4/1/2004,,0.3,SP,Lead,Total,ug/L,1.53,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/4/2004,,0.55,FA,Lead,Total,ug/L,1.26,=,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,4/1/2005,,0.5,SP,Lead,Total,ug/L,1,<,1.5,39.64769167,75.71034167 +2,DE,DENCALDR,Albe_Drive,New_Castle_County,-,ID,,,11/21/2005,,0.3,FA,Lead,Total,ug/L,0.94,=,1.5,39.64769167,75.71034167 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,10/15/2002,,0.1,FA,Lead,Total,ug/L,1.6,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,3/19/2003,,0.2,SP,Lead,Total,ug/L,1.6,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,3/16/2004,,0.28,SP,Lead,Total,ug/L,1.12,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,4/12/2004,,0.36,SP,Lead,Total,ug/L,1.26,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,11/12/2004,,0.3,FA,Lead,Total,ug/L,1.5,=,50,39.71732778,75.594875 +2,DE,DENCBAPA,Banning_Park,New_Castle_County,-,RE,,,8/16/2005,,,SU,Lead,Total,ug/L,1.4,=,50,39.71732778,75.594875 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,9/26/2002,,,FA,Lead,Total,ug/L,0.89,<,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/6/2002,,0.4,FA,Lead,Total,ug/L,0.89,<,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,3/6/2004,,0.4,SP,Lead,Total,ug/L,1.71,=,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,4/1/2004,,0.2,SP,Lead,Total,ug/L,0.93,<,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/4/2004,,0.5,FA,Lead,Total,ug/L,1,<,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,4/1/2005,,0.4,SP,Lead,Total,ug/L,1,<,10,39.67864722,75.65260556 +2,DE,DENCCHMA,Christiana_Mall,New_Castle_County,-,CO,,,11/21/2005,,0.3,FA,Lead,Total,ug/L,0.84,<,10,39.67864722,75.65260556 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,9/26/2002,,0.4,FA,Lead,Total,ug/L,0.89,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/6/2002,,0.35,FA,Lead,Total,ug/L,0.89,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,3/6/2004,,0.45,SP,Lead,Total,ug/L,0.93,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,3/31/2004,,0.23,SP,Lead,Total,ug/L,0.93,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/4/2004,,0.5,FA,Lead,Total,ug/L,1,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,4/1/2005,,0.4,SP,Lead,Total,ug/L,1,<,28,39.65923611,75.67537778 +2,DE,DENCDADR,Dawes_Drive,New_Castle_County,-,RE,,,11/21/2005,,0.3,FA,Lead,Total,ug/L,0.84,<,28,39.65923611,75.67537778 +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,10/15/2002,,0.2,FA,Lead,Total,ug/L,0.89,<,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,3/19/2003,,0.45,SP,Lead,Total,ug/L,1.84,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,3/16/2004,,0.28,SP,Lead,Total,ug/L,2.26,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,4/12/2004,,0.1,SP,Lead,Total,ug/L,2.07,=,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,11/12/2004,,0.25,FA,Lead,Total,ug/L,1,<,15,, +2,DE,DENCIN95,I-95,New_Castle_County,-,FW,,,4/8/2005,,,SP,Lead,Total,ug/L,1,<,15,, +3,GA,GACLCOSI,Southridge_Industrial_Park,Clayton_County,Clayton_County,ID,,,3/19/2000,3,1.61,SP,Lead,Total,ug/L,15,=,18,33.61446944,84.42238056 +3,GA,GACLCOTR,Tara_Road,Clayton_County,Clayton_County,RE,,,3/16/2000,,1.08,SP,Lead,Total,ug/L,100,=,125,33.45825,84.38065 +3,GA,GACOC1A2,Cobb_Long_Term_1_Pebble_Creek_Lot989,Cobb_County,Cobb_County,RE_MIX,CO,,2/28/2000,,,WI,Lead,Total,ug/L,25,<,63.6,33.91703056,84.458025 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,8/24/2000,,,SU,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,10/6/2000,,,FA,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,1/20/2001,,,WI,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,1/30/2001,,,WI,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,3/12/2001,,,SP,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOC1A3,Cobb_Long_Term_1_Sewell_Mill_Creek_Roswell_Road,Cobb_County,Cobb_County,RE,,,3/19/2001,,,SP,Lead,Total,ug/L,25,<,7590.4,33.97925556,84.45189722 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/11/2000,,,SP,Lead,Total,ug/L,10,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,8/20/2000,,,SU,Lead,Total,ug/L,25,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,11/9/2000,,,FA,Lead,Total,ug/L,25,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,2/22/2001,,,WI,Lead,Total,ug/L,25,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/1/2001,,,SP,Lead,Total,ug/L,25,<,2947,34.03171111,84.51861389 +3,GA,GACOCOL2,Cobb_Long_Term_2_Worley_Rd_Noonday_Creek,Cobb_County,Cobb_County,RE_MIX,CO,,3/12/2001,,,SP,Lead,Total,ug/L,25,<,2947,34.03171111,84.51861389 +3,GA,GADKCOTD,Truman_Drive,Dekalb_County,Dekalb_County,ID,,,2/14/2000,,0.84,WI,Lead,Total,ug/L,10,<,115,33.7144,84.176 +3,GA,GADKCOTD,Truman_Drive,Dekalb_County,Dekalb_County,ID,,,6/6/2000,,0.22,SU,Lead,Total,ug/L,10,<,115,33.7144,84.176 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,3/4/2000,,,SP,Lead,Total,ug/L,10,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,6/19/2000,,,SU,Lead,Total,ug/L,4,=,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,11/26/2000,,,FA,Lead,Total,ug/L,14,=,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,1/19/2001,,,WI,Lead,Total,ug/L,4,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,3/13/2001,,,SP,Lead,Total,ug/L,4,<,10339,34.0161,84.211 +3,GA,GAFUCOS1,Johns_Creek_Buice_Road,Fulton_County,Fulton_County,RE_MIX,UNK,,4/25/2001,,,SP,Lead,Total,ug/L,4,<,10339,34.0161,84.211 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,3/4/2000,,,SP,Lead,Total,ug/L,10,<,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,3/13/2000,,,SP,Lead,Total,ug/L,8,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,6/19/2000,,,SU,Lead,Total,ug/L,16,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,11/26/2000,,,FA,Lead,Total,ug/L,15,=,3915,33.7265,84.5889 +3,GA,GAFUCOS2,Boat_Road_Blvd_Grange_Blvd,Fulton_County,Fulton_County,ID_MIX,UNK,,4/25/2001,,,SP,Lead,Total,ug/L,7,=,3915,33.7265,84.5889 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,3/4/2000,,,SP,Lead,Total,ug/L,10,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,7/6/2000,,,SU,Lead,Total,ug/L,5,=,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,11/26/2000,,,FA,Lead,Total,ug/L,11,=,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,1/19/2001,,,WI,Lead,Total,ug/L,4,<,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,3/13/2001,,,SP,Lead,Total,ug/L,17,=,6257,33.8859,84.4272 +3,GA,GAFUCOS3,Long_Island_Creek_Northside_Drive,Fulton_County,Fulton_County,RE_MIX,UNK,,4/25/2001,,,SP,Lead,Total,ug/L,4,<,6257,33.8859,84.4272 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/13/2000,,0.35,SP,Lead,Total,ug/L,236,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,9/1/2000,,0.25,FA,Lead,Total,ug/L,7,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,10/20/2000,,0.43,FA,Lead,Total,ug/L,49,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/11/2001,,0.48,SP,Lead,Total,ug/L,31.6,=,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/19/2001,,0.03,SP,Lead,Total,ug/L,12.6,=,14,43.62178889,116.2239806 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/13/2000,,0.35,SP,Lead,Total,ug/L,2,<,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,9/1/2000,,0.25,FA,Lead,Total,ug/L,2,<,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/11/2001,,0.48,SP,Lead,Total,ug/L,6.7,=,105,43.66441944,116.2583333 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/13/2000,,0.35,SP,Lead,Total,ug/L,27,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,9/1/2000,,0.25,FA,Lead,Total,ug/L,2,<,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,10/20/2000,,0.43,FA,Lead,Total,ug/L,36,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/11/2001,,0.48,SP,Lead,Total,ug/L,48.2,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,4/19/2001,,0.03,SP,Lead,Total,ug/L,13.8,=,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,7/30/2001,,0.03,SU,Lead,Total,ug/L,2.9,=,17,43.60499167,116.3076806 +8,ID,IDADA004,Production_Avenue_Site,Ada_County_Highway_District,Boise_City,ID_MIX,CO,,4/11/2001,,0.48,SP,Lead,Total,ug/L,35.6,=,18,43.54694444,116.1885556 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Lead,Total,ug/L,49,=,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Lead,Total,ug/L,49,=,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,6/26/2003,,,SU,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC1,Basin_C1_control,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Lead,Total,ug/L,40,<,35.89,39.78056111,85.98268056 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Lead,Total,ug/L,44,=,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,6/26/2003,,,SU,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC2,Basin_C2_test,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Lead,Total,ug/L,40,<,33.86,39.77548056,85.98390556 +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,2/3/2000,,,WI,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,1/29/2001,,,WI,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,2/22/2001,,,WI,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,,, +1,IN,ININBAC3,Basin_C3,Marion_County,Indianapolis,CO,,,12/5/2003,,,WI,Lead,Total,ug/L,40,<,,, +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,2/3/2000,,,WI,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,1/29/2001,,,WI,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,2/22/2001,,,WI,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI1,Basin_I1_control,Marion_County,Indianapolis,ID,,,12/5/2003,,,WI,Lead,Total,ug/L,40,<,33.6,39.80000833,86.04191667 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,2/3/2000,,,WI,Lead,Total,ug/L,111,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,1/29/2001,,,WI,Lead,Total,ug/L,60,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,2/22/2001,,,WI,Lead,Total,ug/L,60,=,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAI2,Basin_I2_test,Marion_County,Indianapolis,ID,,,12/5/2003,,,WI,Lead,Total,ug/L,40,<,22.81,39.81661944,86.00280833 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,2/3/2000,,,WI,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,1/29/2001,,,WI,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,2/22/2001,,,WI,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR1,Basin_R1_control,Marion_County,Indianapolis,RE,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,8.36,39.75716944,85.97535278 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,2/3/2000,,,WI,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,5/17/2000,,,SP,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,9/20/2000,,,FA,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,1/29/2001,,,WI,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,2/22/2001,,,WI,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,5/25/2001,,,SP,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,10/1/2001,,,FA,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +1,IN,ININBAR2,Basin_R2_test,Marion_County,Indianapolis,RE,,,10/14/2003,,,FA,Lead,Total,ug/L,40,<,13.41,39.76257222,85.97841667 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,5/26/2000,,,SP,Lead,Total,ug/L,38,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/20/2000,,,FA,Lead,Total,ug/L,4,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,2/8/2001,,,WI,Lead,Total,ug/L,219,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,5/29/2001,,,SP,Lead,Total,ug/L,17,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/15/2001,,,FA,Lead,Total,ug/L,13,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,3/8/2002,,,SP,Lead,Total,ug/L,66,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,6/4/2002,,,SU,Lead,Total,ug/L,25,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,6/11/2002,,,SU,Lead,Total,ug/L,9,=,38,39.01311111,95.72527778 +4,KA,KATOATWO,Atwood,Shawnee_County,City_of_Topeka,RE,,55,9/13/2002,,,FA,Lead,Total,ug/L,16,=,38,39.01311111,95.72527778 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,2/22/2000,,,WI,Lead,Total,ug/L,22,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,5/26/2000,,,SP,Lead,Total,ug/L,23,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/20/2000,,,FA,Lead,Total,ug/L,21,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,2/8/2001,,0.16,WI,Lead,Total,ug/L,33,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,5/29/2001,,1.42,SP,Lead,Total,ug/L,14,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/15/2001,,3.11,FA,Lead,Total,ug/L,4,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,11/23/2001,,0.68,FA,Lead,Total,ug/L,14,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,3/8/2002,,0.39,SP,Lead,Total,ug/L,38,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,6/4/2002,,,SU,Lead,Total,ug/L,1,=,18.5,39.02327778,95.76416667 +4,KA,KATOBROO,Brookfield,Shawnee_County,City_of_Topeka,RE,,25,9/13/2002,,0.68,FA,Lead,Total,ug/L,3,=,18.5,39.02327778,95.76416667 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/22/2000,,,WI,Lead,Total,ug/L,213,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/26/2000,,,SP,Lead,Total,ug/L,121,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/20/2000,,0.01,FA,Lead,Total,ug/L,15,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/8/2001,,0.27,WI,Lead,Total,ug/L,219,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/30/2001,,,SP,Lead,Total,ug/L,80,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/23/2001,,,FA,Lead,Total,ug/L,80,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,2/19/2002,,,WI,Lead,Total,ug/L,152,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,5/23/2002,,,SP,Lead,Total,ug/L,20,=,218,39.06597222,95.675 +4,KA,KATOJACK,Jackson,Shawnee_County,City_of_Topeka,CO,,65,9/13/2002,,0.41,FA,Lead,Total,ug/L,1,=,218,39.06597222,95.675 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,5/26/2000,,,SP,Lead,Total,ug/L,1200,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,9/20/2000,,,FA,Lead,Total,ug/L,25,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,2/8/2001,,,WI,Lead,Total,ug/L,382,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,9/22/2001,,,FA,Lead,Total,ug/L,390,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,11/23/2001,,,FA,Lead,Total,ug/L,260,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,2/19/2002,,,WI,Lead,Total,ug/L,64,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,6/4/2002,,,SU,Lead,Total,ug/L,103,=,39.5,39.06097222,95.66041667 +4,KA,KATOSTFE,SantaFe,Shawnee_County,City_of_Topeka,ID,,75,8/16/2002,,0.31,SU,Lead,Total,ug/L,408,=,39.5,39.06097222,95.66041667 +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,49,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,38,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,24,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,20,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,15,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,50,=,,, +1,MA,MAWOBEBR,Beaver_Brook,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,18,=,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,11/10/2000,,1.52,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,15,<,,, +1,MA,MAWOBRST,Brookdale_Street,Worcester_County,Worcester,RE,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,180,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,18,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,11/10/2001,,1.52,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,84,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,34,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,40,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,24,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,18,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,68,=,,, +1,MA,MAWOCAST,Camp_Street,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,31,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,28,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,49,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,23,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,20,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,1.5,<,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,39,=,,, +1,MA,MAWOMIBR,Middle_Brook,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,17,<,,, +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,20,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,11/10/2001,,1.52,FA,Lead,Total,ug/L,20,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,50,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,26,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,174,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,19,=,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,15,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,15,<,,42.30584167,71.80199722 +1,MA,MAWONBST,New_Bond_Street,Worcester_County,Worcester,ID,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,200,=,,42.30584167,71.80199722 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,50,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,20,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,30,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,11/10/2001,,1.52,FA,Lead,Total,ug/L,20,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,22,=,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,15,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,15,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,15,<,,42.28590278,71.86085556 +1,MA,MAWOOLST,Olean_Street,Worcester_County,Worcester,RE,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,26,=,,42.28590278,71.86085556 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,3/28/2000,,1.09,SP,Lead,Total,ug/L,71,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/27/2000,,2.1,SU,Lead,Total,ug/L,50,<,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/20/2001,,0.82,FA,Lead,Total,ug/L,25,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/25/2001,,1.37,FA,Lead,Total,ug/L,41,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,11/10/2001,,1.52,FA,Lead,Total,ug/L,46,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,3/26/2002,,1.16,SP,Lead,Total,ug/L,43,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,7/23/2002,,1.14,SU,Lead,Total,ug/L,15,<,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,11/6/2002,,0.64,FA,Lead,Total,ug/L,28,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,6/18/2003,,0.36,SU,Lead,Total,ug/L,24,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/23/2003,,1.03,FA,Lead,Total,ug/L,53,=,,42.25284444,71.82796944 +1,MA,MAWOPAMA,Park_Ave_and_Maywood_St,Worcester_County,Worcester,UNK,,,9/28/2003,,0.26,FA,Lead,Total,ug/L,40,=,,42.25284444,71.82796944 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/4/2000,,0.86,WI,Lead,Total,ug/L,5,<,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/11/2000,,0.08,SP,Lead,Total,ug/L,33.95,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/16/2000,5,0.54,SP,Lead,Total,ug/L,18.29,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/20/2000,4,0.2,SP,Lead,Total,ug/L,5.88,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/10/2000,,0.35,SP,Lead,Total,ug/L,26.47,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/13/2000,,0.05,SU,Lead,Total,ug/L,9.9,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/3/2000,,0.28,SU,Lead,Total,ug/L,6.26,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/19/2000,,0.6,SU,Lead,Total,ug/L,9.55,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/18/2000,,0.08,SU,Lead,Total,ug/L,9.48,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/6/2000,,0.09,FA,Lead,Total,ug/L,11.22,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/9/2000,,0.14,FA,Lead,Total,ug/L,14.3,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/14/2000,,0.45,FA,Lead,Total,ug/L,5.18,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/12/2001,,,SP,Lead,Total,ug/L,7.12,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/20/2001,,,SP,Lead,Total,ug/L,9.53,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/29/2001,,,SP,Lead,Total,ug/L,6.27,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/19/2001,,,SP,Lead,Total,ug/L,12.76,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/1/2001,,,SU,Lead,Total,ug/L,11.4,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/26/2001,,,SU,Lead,Total,ug/L,10.29,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/10/2001,,,SU,Lead,Total,ug/L,21.31,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/19/2001,,,SU,Lead,Total,ug/L,17.87,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/10/2001,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/14/2001,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,12/17/2001,,,WI,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/24/2002,,,WI,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,2/7/2002,,,WI,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/2/2002,,,SP,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,3/12/2002,,,SP,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,4/9/2002,,,SP,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/13/2002,,,SU,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,8/28/2002,,,SU,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/26/2002,,,FA,Lead,Total,ug/L,66.13,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/10/2002,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/15/2002,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/26/2002,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/5/2002,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/1/2003,,,WI,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,1/29/2003,,,WI,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,5/5/2003,,,SP,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/3/2003,,,SU,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/11/2003,,,SU,Lead,Total,ug/L,54.81,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,6/17/2003,,,SU,Lead,Total,ug/L,3.76,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/18/2003,,,SU,Lead,Total,ug/L,11.69,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,7/28/2003,,,SU,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,9/12/2003,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/14/2003,,,FA,Lead,Total,ug/L,22.47,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,10/26/2003,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/5/2003,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDAACOPP,Parole_Plaza_PP,Anne_Arundel_County,Annapolis_Neck,CO,,,11/24/2003,,,FA,Lead,Total,ug/L,100,=,25,38.97540833,76.53745556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,1/4/2000,,0.08,WI,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,1/10/2000,,0.03,WI,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/19/2000,,,SP,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/6/2000,,0.1,SU,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/12/2001,,0.02,SP,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/20/2001,,0.03,SP,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/29/2001,,0.02,SP,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/22/2001,,0.02,SP,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/1/2001,,0.03,SU,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/10/2001,,0.47,SU,Lead,Total,ug/L,100,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/27/2001,,0.05,SU,Lead,Total,ug/L,20.65,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/10/2001,,0.12,FA,Lead,Total,ug/L,15.89,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,12/17/2001,,0.01,WI,Lead,Total,ug/L,5.31,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/19/2002,,0.01,SP,Lead,Total,ug/L,5.24,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/26/2002,,0.11,SP,Lead,Total,ug/L,36.03,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/17/2002,,0.03,SP,Lead,Total,ug/L,16.33,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/27/2002,,0.15,SU,Lead,Total,ug/L,26.87,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/24/2002,,0.03,SU,Lead,Total,ug/L,14.05,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,8/28/2002,,0.06,SU,Lead,Total,ug/L,6.78,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/26/2002,,0.06,FA,Lead,Total,ug/L,7.11,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,3/20/2003,,0.03,SP,Lead,Total,ug/L,15.48,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,4/7/2003,,0.04,SP,Lead,Total,ug/L,14.74,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,5/16/2003,,0.1,SP,Lead,Total,ug/L,14.18,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,6/3/2003,,0.05,SU,Lead,Total,ug/L,9.55,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,7/2/2003,,0.05,SU,Lead,Total,ug/L,8.28,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,8/26/2003,,0.16,SU,Lead,Total,ug/L,27.82,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,9/22/2003,,0.14,FA,Lead,Total,ug/L,5.66,=,4,39.41384167,76.60060556 +2,MD,MDBCDUVR,Dulaney_Valley_Road_DV1FF_695_Baltimore_Beltway_interchange,Baltimore_County,City_of_Baltimore,FW,,,10/14/2003,,0.03,FA,Lead,Total,ug/L,8.54,=,4,39.41384167,76.60060556 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,1/10/2000,,,WI,Lead,Total,ug/L,3.11,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/1/2000,,,WI,Lead,Total,ug/L,1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/9/2000,,,WI,Lead,Total,ug/L,1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/10/2000,,,WI,Lead,Total,ug/L,1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/21/2000,,,SP,Lead,Total,ug/L,5.18,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,4/20/2000,,,SP,Lead,Total,ug/L,1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,11/14/2000,,,FA,Lead,Total,ug/L,1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,1/19/2001,,,WI,Lead,Total,ug/L,19.34,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,2/5/2001,,,WI,Lead,Total,ug/L,4.03,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/12/2002,,0.32,SP,Lead,Total,ug/L,1.1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,3/19/2002,,0.94,SP,Lead,Total,ug/L,7.5,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,4/9/2002,,0.13,SP,Lead,Total,ug/L,5.1,=,47,39.45053056,76.62084167 +2,MD,MDBCSPBO,Spring_Branch_Outfall_SB3,Baltimore_County,Timonlum,RE,,25,9/26/2002,,1.74,FA,Lead,Total,ug/L,8.5,=,47,39.45053056,76.62084167 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/11/2000,11,0.22,SP,Lead,Total,ug/L,52,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/16/2000,4,0.94,SP,Lead,Total,ug/L,17,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/19/2000,2,0.14,SP,Lead,Total,ug/L,11,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/22/2000,3,0.37,SP,Lead,Total,ug/L,13,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/24/2000,2,0.13,SP,Lead,Total,ug/L,13,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,6/25/2000,3,0.58,SU,Lead,Total,ug/L,17,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/14/2000,7,3.03,SU,Lead,Total,ug/L,24,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,8/14/2000,5,0.22,SU,Lead,Total,ug/L,8.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/19/2000,3,,FA,Lead,Total,ug/L,4.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/19/2000,3,,FA,Lead,Total,ug/L,4.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/14/2000,4,0.31,FA,Lead,Total,ug/L,12,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/26/2000,12,0.53,FA,Lead,Total,ug/L,7,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,12/14/2000,4,0.62,WI,Lead,Total,ug/L,10.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,1/30/2001,,0.79,WI,Lead,Total,ug/L,20,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,2/16/2001,,0.64,WI,Lead,Total,ug/L,15.1,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/12/2001,,0.47,SP,Lead,Total,ug/L,13.3,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/21/2001,,0.32,SP,Lead,Total,ug/L,31.6,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/22/2001,,0.72,SP,Lead,Total,ug/L,157.9,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/18/2001,,0.47,SU,Lead,Total,ug/L,31.3,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/18/2001,,0.2,SU,Lead,Total,ug/L,13.8,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,9/20/2001,,0.16,FA,Lead,Total,ug/L,17.27,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/25/2001,,0.85,FA,Lead,Total,ug/L,27.9,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,12/17/2001,,0.14,WI,Lead,Total,ug/L,4.21,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/2/2002,,1.22,SP,Lead,Total,ug/L,13.3,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/2/2002,,0.76,SP,Lead,Total,ug/L,21.7,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/23/2002,,0.84,SU,Lead,Total,ug/L,27.9,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,8/28/2002,,1.1,SU,Lead,Total,ug/L,8.05,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/15/2002,,1.67,FA,Lead,Total,ug/L,9.43,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/29/2002,,0.43,FA,Lead,Total,ug/L,6.97,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,2/4/2003,,0.41,WI,Lead,Total,ug/L,87.8,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,3/6/2003,,0.52,SP,Lead,Total,ug/L,35.5,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,4/10/2003,,0.3,SP,Lead,Total,ug/L,13.6,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,5/16/2003,,2.61,SP,Lead,Total,ug/L,13,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/22/2003,,0.91,SU,Lead,Total,ug/L,23,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,10/14/2003,,1.72,FA,Lead,Total,ug/L,14,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,11/6/2003,,0.19,FA,Lead,Total,ug/L,8.9,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,4/1/2004,,0.9,SP,Lead,Total,ug/L,13,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,6/5/2004,,0.41,SU,Lead,Total,ug/L,10,=,104,39.3366,76.53863611 +2,MD,MDBCTYHA,Hamilton_Avenue,Harford_County,City_of_Baltimore,RE_MIX,CO,,7/27/2004,,0.55,SU,Lead,Total,ug/L,34,=,104,39.3366,76.53863611 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,8/27/2000,,1.72,SU,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/25/2000,,0.83,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,11/25/2000,,0.44,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,1/20/2001,,0.95,WI,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/13/2001,,0.55,SP,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/1/2001,,0.27,SU,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/24/2001,,2.25,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/2/2002,,0.55,SP,Lead,Total,ug/L,5.11,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/10/2002,,0.16,SP,Lead,Total,ug/L,5.7,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,4/28/2002,,0.94,SP,Lead,Total,ug/L,9.35,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/6/2002,,1.02,SU,Lead,Total,ug/L,8.81,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,8/28/2002,,1.24,SU,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/23/2002,,0.48,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,10/16/2002,,0.85,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,10/29/2002,,0.53,FA,Lead,Total,ug/L,5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/16/2003,,0.94,SP,Lead,Total,ug/L,5.11,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,6/3/2003,,1.28,SU,Lead,Total,ug/L,5.7,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/1/2003,,0.569999993,FA,Lead,Total,ug/L,6.45,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,4/26/2004,,0.75,SP,Lead,Total,ug/L,2.16,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/2/2004,,0.689999998,SP,Lead,Total,ug/L,2,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,7/7/2004,,1.31,SU,Lead,Total,ug/L,10.5,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,9/28/2004,,1.67,FA,Lead,Total,ug/L,2,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,3/23/2005,,1.3,SP,Lead,Total,ug/L,3.8,=,206,39.60497222,76.99821944 +2,MD,MDCCAIBC,Air_Business_Center,Carroll_County,Westminster,ID,,,5/24/2005,,0.18,SP,Lead,Total,ug/L,2,=,206,39.60497222,76.99821944 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,2/5/2003,,0.270000011,WI,Lead,Total,ug/L,6.98,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,3/21/2003,,1.519999981,SP,Lead,Total,ug/L,5,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,4/8/2003,,0.670000017,SP,Lead,Total,ug/L,2,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,6/4/2003,,2.230000019,SU,Lead,Total,ug/L,2,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,7/3/2003,,0.620000005,SU,Lead,Total,ug/L,3.76,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,9/14/2003,,1.220000029,FA,Lead,Total,ug/L,2,=,30,39.33823056,77.34871111 +2,MD,MDFCPONR,Pond_R,Frederick_County,Urbana,RE,,,9/23/2003,,2.539999962,FA,Lead,Total,ug/L,2.27,=,30,39.33823056,77.34871111 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/11/2000,,0.31,SP,Lead,Total,ug/L,6,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/16/2000,,0.56,SP,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,3/27/2000,,1.11,SP,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,5/19/2000,,0.03,SP,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,6/28/2000,,0.8,SU,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,7/19/2000,,0.2,SU,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,8/18/2000,,0.31,SU,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,9/19/2000,,0.46,FA,Lead,Total,ug/L,1,=,69.7,39.53,76.37 +2,MD,MDHACOBP,Brentwood_Park_Woodland_Hills,Harford_County,Bel_Air_North,RE_MIX,OP,,12/16/2000,,0.93,WI,Lead,Total,ug/L,2,=,69.7,39.53,76.37 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/11/2000,,0.31,SP,Lead,Total,ug/L,6,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/16/2000,,0.56,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/27/2000,,1.11,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/19/2000,,0.03,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/28/2000,,0.8,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/19/2000,,0.2,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/18/2000,,0.31,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/19/2000,,0.46,FA,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/16/2000,,0.93,WI,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,1/19/2001,,0.4,WI,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/13/2001,,0.52,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/21/2001,,1.58,SP,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/22/2001,,0.39,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/12/2001,,1.31,SU,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/10/2001,,,SU,Lead,Total,ug/L,4,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,7/18/2001,,,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/30/2001,,0.24,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/14/2001,,0.52,FA,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/14/2001,,0.23,WI,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/17/2001,,0.47,WI,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,1/24/2002,,0.37,WI,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/2/2002,,1.41,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/13/2002,,0.16,SP,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/20/2002,,,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/2/2002,,1.11,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/9/2002,,0.06,SP,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,6/6/2002,,0.25,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/28/2002,,0.06,SU,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/26/2002,,1.81,FA,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,12/11/2002,,1.79,WI,Lead,Total,ug/L,1,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,2/4/2003,,0.32,WI,Lead,Total,ug/L,3,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,3/20/2003,,2.07,SP,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,5/16/2003,,0.22,SP,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,8/26/2003,,0.06,SU,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/4/2003,,1.32,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,9/15/2003,,0.65,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/5/2003,,0.23,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/12/2003,,0.81,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/19/2003,,1.76,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBREN,Brentwood_Park_and_Woodland_Hills_Subdivisions,Harford_County,Bel_Air_North,RE_MIX,OP,,11/24/2003,,0.17,FA,Lead,Total,ug/L,2,=,69.7,39.5382,76.37551389 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,2/27/2000,,0.75,WI,Lead,Total,ug/L,24,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,1/19/2001,,1.61,WI,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/22/2001,,1.28,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/29/2001,,1.57,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/12/2001,,0.51,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,6/16/2001,,1.02,SU,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/25/2001,,0.15,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/24/2001,,0.28,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/8/2001,,0.59,WI,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,1/30/2002,,0.17,WI,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/12/2002,,0.45,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,3/21/2002,,0.94,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/11/2002,,0.2,SP,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,5/3/2002,,1.09,SP,Lead,Total,ug/L,5.53,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/27/2002,,1.79,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,10/17/2002,,1.73,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/6/2002,,0.61,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/12/2002,,1.03,WI,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,4/26/2004,,0.9,SP,Lead,Total,ug/L,5.8,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,6/11/2004,,0.5,SU,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,7/4/2004,,0.28,SU,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,7/12/2004,,0.09,SU,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/8/2004,,0.37,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/17/2004,,1.52,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,9/28/2004,,1.81,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,10/13/2004,,0.34,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,11/4/2004,,1.12,FA,Lead,Total,ug/L,5,=,31,39.2704,76.87065556 +2,MD,MDHCBURN,Burnside_Drive,Howard_County,Ellicott City,RE,,,12/7/2004,,0.43,WI,Lead,Total,ug/L,2,=,31,39.2704,76.87065556 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,2/27/2000,,0.75,WI,Lead,Total,ug/L,24,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/19/2001,,1.61,WI,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2001,,0.61,WI,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/22/2001,,1.54,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/29/2001,,1.77,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/12/2001,,0.2,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,6/16/2001,,1.02,SU,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/25/2001,,0.15,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,11/24/2001,,0.28,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/8/2001,,0.59,WI,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,1/30/2002,,0.17,WI,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/12/2002,,0.45,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,3/21/2002,,0.94,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/11/2002,,0.17,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,5/3/2002,,1.1,SP,Lead,Total,ug/L,6.67,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/27/2002,,1.79,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,10/17/2002,,1.73,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,11/6/2002,,0.61,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/12/2002,,1.03,WI,Lead,Total,ug/L,5.3,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,4/26/2004,,0.89,SP,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,7/4/2004,,0.28,SU,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,7/12/2004,,0.07,SU,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/8/2004,,0.43,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/17/2004,,1.53,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,9/28/2004,,1.55,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,10/13/2004,,0.44,FA,Lead,Total,ug/L,5,=,14,39.27138056,76.85293611 +2,MD,MDHCCARR,Carrigan_Drive,Howard_County,Ellicott City,RE,,,12/7/2004,,0.44,WI,Lead,Total,ug/L,2,=,14,39.27138056,76.85293611 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/4/2000,,0.2,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/21/2000,,0.38,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,11/25/2000,,0.03,FA,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/19/2001,,0.02,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,1/30/2001,,0.07,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,3/12/2001,,0.09,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,3/20/2001,,0.04,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,5/19/2001,,0.04,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/6/2001,,0.02,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,6/22/2001,,0.7,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,8/10/2001,,0.04,SU,Lead,Total,ug/L,6.33,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,9/14/2001,,0.05,FA,Lead,Total,ug/L,7.79,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,9/24/2001,,1.5,FA,Lead,Total,ug/L,5,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH1,Pindell_School_Road_at_the_interchange_with_MD_32_PS1,Howard_County,Clarksville,FW,,,10/14/2001,,0.05,FA,Lead,Total,ug/L,7.67,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/4/2000,,0.2,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/21/2000,,0.13,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,11/25/2000,,0.03,FA,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/19/2001,,0.03,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,1/30/2001,,0.08,WI,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,3/12/2001,,0.1,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,3/20/2001,,0.06,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,5/19/2001,,0.05,SP,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/6/2001,,0.02,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,6/22/2001,,0.72,SU,Lead,Total,ug/L,100,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,8/10/2001,,0.05,SU,Lead,Total,ug/L,5,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,9/14/2001,,0.05,FA,Lead,Total,ug/L,5.5,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,9/24/2001,,1.5,FA,Lead,Total,ug/L,5.02,=,20,39.18178611,76.89982222 +2,MD,MDHCPSH2,Pindell_School_Road_at_the_interchange_with_MD_32_PS2,Howard_County,Clarksville,FW,,,10/14/2001,,0.08,FA,Lead,Total,ug/L,6.59,=,20,39.18178611,76.89982222 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,1/10/2000,,0.55,WI,Lead,Total,ug/L,5,<,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,2/18/2000,,0.57,WI,Lead,Total,ug/L,2,<,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/11/2000,,0.63,SP,Lead,Total,ug/L,2,<,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,4/25/2000,,0.17,SP,Lead,Total,ug/L,3.75,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,6/6/2000,,0.42,SU,Lead,Total,ug/L,2,<,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,6/22/2000,,0.69,SU,Lead,Total,ug/L,24.85,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,7/10/2000,,0.45,SU,Lead,Total,ug/L,5.43,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,9/25/2000,,2.71,FA,Lead,Total,ug/L,4.87,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,1/19/2001,,1.6,WI,Lead,Total,ug/L,2,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/12/2001,,0.33,SP,Lead,Total,ug/L,2,=,13.36,39.08950833,76.99637778 +2,MD,MDMCCODE,DPWT_Colesville_Road_Maintenance_Depot,Montgomery_County,Cloverly,ID,,,3/30/2001,,1.6,SP,Lead,Total,ug/L,,=,13.36,39.08950833,76.99637778 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,5/3/2002,,0.83,SP,Lead,Total,ug/L,10.2,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/28/2002,,0.38,SU,Lead,Total,ug/L,16.27,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,8/30/2002,,2.34,SU,Lead,Total,ug/L,1.83,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/12/2002,,1.75,FA,Lead,Total,ug/L,2.97,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/29/2002,,1.19,FA,Lead,Total,ug/L,3.81,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,12/12/2002,,0.65,WI,Lead,Total,ug/L,12.66,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,2/23/2003,,2.51,WI,Lead,Total,ug/L,25.56,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,3/21/2003,,1.74,SP,Lead,Total,ug/L,11.61,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,5/16/2003,,1.93,SP,Lead,Total,ug/L,12.09,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/8/2003,,1.85,SU,Lead,Total,ug/L,5.09,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,6/19/2003,,0.43,SU,Lead,Total,ug/L,6.65,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,7/3/2003,,0.82,SU,Lead,Total,ug/L,4.71,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,9/13/2003,,1.35,FA,Lead,Total,ug/L,4.65,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,9/24/2003,,2.54,FA,Lead,Total,ug/L,5.67,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,10/15/2003,,1.38,FA,Lead,Total,ug/L,17.63,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,11/20/2003,,1.76,FA,Lead,Total,ug/L,6.56,=,223,39.04543056,76.98160278 +2,MD,MDMCSTAL,Stewart_April_Lane,Montgomery_County,White_Oak,RE,,,12/11/2003,,1.26,WI,Lead,Total,ug/L,12.43,=,223,39.04543056,76.98160278 +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/19/2002,,,SP,Lead,Total,ug/L,26.75,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/19/2002,,,SP,Lead,Total,ug/L,29.85,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/2/2002,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,2/4/2003,,,WI,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/20/2003,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/25/2003,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/21/2003,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/3/2003,,,SU,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,7/23/2003,,,SU,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,8/26/2003,,,SU,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,10/14/2003,,,FA,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,11/5/2003,,,FA,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,12/10/2003,,,WI,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,2/6/2004,,,WI,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,3/16/2004,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,4/27/2004,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,5/25/2004,,,SP,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSI96,96.5,Charles_County,-,RE,,,6/22/2004,,,SU,Lead,Total,ug/L,24,=,,, +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/4/2000,,1.25,WI,Lead,Total,ug/L,28,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/18/2000,,0.52,WI,Lead,Total,ug/L,10,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/21/2000,,1.75,SP,Lead,Total,ug/L,14,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,4/17/2000,,0.92,SP,Lead,Total,ug/L,120,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/28/2000,,0.55,SP,Lead,Total,ug/L,60,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/15/2000,,0.99,SU,Lead,Total,ug/L,83,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/15/2000,,1.28,SU,Lead,Total,ug/L,74,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,8/7/2000,,0.41,SU,Lead,Total,ug/L,110,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,9/25/2000,,1.85,FA,Lead,Total,ug/L,5,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/10/2000,,0.225,FA,Lead,Total,ug/L,178.67,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/19/2001,,1.325,WI,Lead,Total,ug/L,9.6,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/16/2001,,0.435,WI,Lead,Total,ug/L,8.02,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/21/2001,,2.08,SP,Lead,Total,ug/L,12.99,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/22/2001,,1.31,SP,Lead,Total,ug/L,25.97,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/7/2001,,1.5,SU,Lead,Total,ug/L,41.53,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/4/2001,,1.93,SU,Lead,Total,ug/L,18.59,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,10/16/2001,,,FA,Lead,Total,ug/L,6.01,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/8/2001,,0.42,WI,Lead,Total,ug/L,3.51,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,1/6/2002,,0.45,WI,Lead,Total,ug/L,7.49,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/13/2002,,,SP,Lead,Total,ug/L,3.38,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/20/2002,,,SP,Lead,Total,ug/L,7.74,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/2/2002,,,SP,Lead,Total,ug/L,95.75,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,10/10/2002,,0.29,FA,Lead,Total,ug/L,3.88,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/12/2002,,0.67,FA,Lead,Total,ug/L,6.88,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/20/2002,,0.97,WI,Lead,Total,ug/L,23.3,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/21/2003,,2.74,WI,Lead,Total,ug/L,3.55,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/20/2003,,1.95,SP,Lead,Total,ug/L,5.36,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/21/2003,,0.68,SP,Lead,Total,ug/L,4.39,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/19/2003,,2.12,SU,Lead,Total,ug/L,5.46,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/5/2003,,1.2,FA,Lead,Total,ug/L,32.04,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/19/2003,,1.57,FA,Lead,Total,ug/L,7.08,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/17/2003,,0.34,WI,Lead,Total,ug/L,3.85,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/6/2004,,1.69,WI,Lead,Total,ug/L,7.36,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/6/2004,,0.85,SP,Lead,Total,ug/L,8.9,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/16/2004,,0.37,SP,Lead,Total,ug/L,13.33,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/5/2004,,0.89,SU,Lead,Total,ug/L,5.6,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,6/17/2004,,0.71,SU,Lead,Total,ug/L,6.84,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/22/2004,,0.75,SU,Lead,Total,ug/L,2.03,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,8/12/2004,,0.6,SU,Lead,Total,ug/L,11.29,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,9/17/2004,,0.78,FA,Lead,Total,ug/L,5.15,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,11/4/2004,,1.71,FA,Lead,Total,ug/L,3.09,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/7/2004,,0.34,WI,Lead,Total,ug/L,2.22,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,12/9/2004,,0.55,WI,Lead,Total,ug/L,4.46,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,2/14/2005,,0.53,WI,Lead,Total,ug/L,32.79,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,3/28/2005,,1.51,SP,Lead,Total,ug/L,2.3,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,5/19/2005,,2.87,SP,Lead,Total,ug/L,9.16,=,57.3,38.92066667,76.89455833 +2,MD,MDPGSIT2,Flagstaff_Street_S2,Prince_Georges_County,Landover,RE,,,7/7/2005,,0.24,SU,Lead,Total,ug/L,14.96,=,57.3,38.92066667,76.89455833 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,1/4/2000,,0.11,WI,Lead,Total,ug/L,5,<,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,1/10/2000,,0.37,WI,Lead,Total,ug/L,5,<,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,5/19/2000,,0.12,SP,Lead,Total,ug/L,5,<,4,39.414225,76.59298889 +2,MD,MDSHDTDV,Dulaney_Valley_Road,MD_State_Highway,-,UNK,,,6/6/2000,,0.12,SU,Lead,Total,ug/L,91.7,=,4,39.414225,76.59298889 +2,MD,MDSHDTPS,Pindell_School_Road,MD_State_Highway,-,RE,,,1/4/2000,,0.4,WI,Lead,Total,ug/L,5,<,20,39.17875,76.88006389 +2,MD,MDSHDTPS,Pindell_School_Road,MD_State_Highway,-,RE,,,6/21/2000,,0.41,SU,Lead,Total,ug/L,5,<,20,39.17875,76.88006389 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,1/30/2001,>8hrs,,WI,Lead,Total,ug/L,16.8,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/9/2001,>8hrs,,SP,Lead,Total,ug/L,47.5,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/15/2001,>8hrs,,SP,Lead,Total,ug/L,27,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,4/10/2001,>8hrs,1.72,SP,Lead,Total,ug/L,16.6,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,3/13/2002,>8hrs,,SP,Lead,Total,ug/L,31,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,4/5/2002,>8hrs,,SP,Lead,Total,ug/L,17.2,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,5/7/2002,>8hrs,1.46,SP,Lead,Total,ug/L,25.2,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,5/8/2002,>8hrs,1.46,SP,Lead,Total,ug/L,49.1,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,6/6/2002,>8hrs,0.63,SU,Lead,Total,ug/L,6.4,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,7/24/2002,>8hrs,1.06,SU,Lead,Total,ug/L,38.5,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,8/16/2002,>8hrs,1.92,SU,Lead,Total,ug/L,14.5,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,8/20/2002,>8hrs,2.52,SU,Lead,Total,ug/L,10.7,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,9/25/2002,>8hrs,0.85,FA,Lead,Total,ug/L,8.4,=,143,44.92255833,93.29663889 +1,MN,MNMIHAPK,Site1_Harriet_Pkwy_44th_St,Hennepin_County,Minneapolis,RE,,,10/4/2002,>8hrs,1.62,FA,Lead,Total,ug/L,5,<,143,44.92255833,93.29663889 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,5/6/2001,,0.92,SP,Lead,Total,ug/L,70.8,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,5/10/2001,,0.23,SP,Lead,Total,ug/L,33.2,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,6/11/2001,,0.69,SU,Lead,Total,ug/L,102,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,7/17/2001,,0.46,SU,Lead,Total,ug/L,88.6,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,7/22/2001,,0.69,SU,Lead,Total,ug/L,22.6,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,8/17/2001,,1.4,SU,Lead,Total,ug/L,28,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,9/7/2001,,1.61,FA,Lead,Total,ug/L,37.9,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,9/9/2001,,0.31,FA,Lead,Total,ug/L,51,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,10/9/2001,,0.19,FA,Lead,Total,ug/L,8.9,=,143,44.9231,93.2856 +1,MN,MNMISD01,E_Harriet_Pkwy_W44_St,-,City_of_Minneapolis,RE,,,10/13/2001,,0.34,FA,Lead,Total,ug/L,9.8,=,143,44.9231,93.2856 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,5/6/2001,,0.92,SP,Lead,Total,ug/L,12.1,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,5/20/2001,,1.18,SP,Lead,Total,ug/L,5,<,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,6/5/2001,,0.49,SU,Lead,Total,ug/L,5,<,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,7/17/2001,,0.46,SU,Lead,Total,ug/L,27.4,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,7/22/2001,,0.69,SU,Lead,Total,ug/L,5,<,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,8/1/2001,,0.22,SU,Lead,Total,ug/L,13.3,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,9/7/2001,,1.61,FA,Lead,Total,ug/L,20.4,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,10/9/2001,,0.19,FA,Lead,Total,ug/L,6.3,=,95,44.9794,93.0189 +1,MN,MNMISD02,Luella_St_Orange_Ave,-,City_of_Minneapolis,RE,,,10/13/2001,,0.34,FA,Lead,Total,ug/L,5.2,=,95,44.9794,93.0189 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,5/20/2001,,1.18,SP,Lead,Total,ug/L,5.5,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,5/21/2001,,1.32,SP,Lead,Total,ug/L,5.16,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,6/5/2001,,0.49,SU,Lead,Total,ug/L,6.6,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,7/17/2001,,0.46,SU,Lead,Total,ug/L,9.37,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,7/22/2001,,0.69,SU,Lead,Total,ug/L,11,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,8/1/2001,,0.22,SU,Lead,Total,ug/L,12.5,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,9/7/2001,,1.61,FA,Lead,Total,ug/L,7.99,=,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,10/13/2001,,0.34,FA,Lead,Total,ug/L,5,<,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,10/15/2001,,,FA,Lead,Total,ug/L,5,<,80,44.9694,93.1891 +1,MN,MNMISD03,Vandalia_st,-,City_of_Minneapolis,ID,,,11/12/2001,,0.27,FA,Lead,Total,ug/L,11.8,=,80,44.9694,93.1891 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,5/6/2001,,0.92,SP,Lead,Total,ug/L,86,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,5/20/2001,,1.18,SP,Lead,Total,ug/L,31.5,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,6/5/2001,,0.49,SU,Lead,Total,ug/L,29.1,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,8/17/2001,,1.4,SU,Lead,Total,ug/L,22.6,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,8/29/2001,,0.31,SU,Lead,Total,ug/L,32.8,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,9/7/2001,,1.61,FA,Lead,Total,ug/L,22.9,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,10/13/2001,,0.34,FA,Lead,Total,ug/L,10.7,=,63,44.9594,93.1188 +1,MN,MNMISD04,Charles_Ave,-,City_of_Minneapolis,RE_MIX,CO,,11/12/2001,,0.27,FA,Lead,Total,ug/L,16,=,63,44.9594,93.1188 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,5/20/2001,,1.18,SP,Lead,Total,ug/L,19.9,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,5/21/2001,,1.32,SP,Lead,Total,ug/L,8.5,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,6/5/2001,,0.49,SU,Lead,Total,ug/L,6.58,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,7/17/2001,,0.46,SU,Lead,Total,ug/L,69.6,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,7/22/2001,,0.69,SU,Lead,Total,ug/L,17.9,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,8/17/2001,,1.4,SU,Lead,Total,ug/L,11.9,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,8/29/2001,,0.49,SU,Lead,Total,ug/L,36.5,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,10/9/2001,,0.19,FA,Lead,Total,ug/L,17.8,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,10/13/2001,,0.34,FA,Lead,Total,ug/L,11.1,=,100,44.9501,93.227 +1,MN,MNMISD05,E_29_St_31_Ave_S,-,City_of_Minneapolis,RE_MIX,CO,,11/12/2001,,0.27,FA,Lead,Total,ug/L,16,=,100,44.9501,93.227 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/9/2001,>8hrs,,SP,Lead,Total,ug/L,69.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/15/2001,>8hrs,,SP,Lead,Total,ug/L,48.1,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,4/10/2001,>8hrs,1.72,SP,Lead,Total,ug/L,24.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,5/20/2001,>8hrs,1.18,SP,Lead,Total,ug/L,19.9,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,5/21/2001,>8hrs,1.32,SP,Lead,Total,ug/L,8.5,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/5/2001,>8hrs,0.49,SU,Lead,Total,ug/L,6.58,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/17/2001,>8hrs,0.46,SU,Lead,Total,ug/L,69.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/23/2001,>8hrs,0.11,SU,Lead,Total,ug/L,17.9,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/17/2001,>8hrs,1.4,SU,Lead,Total,ug/L,11.9,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/29/2001,>8hrs,0.49,SU,Lead,Total,ug/L,36.5,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/9/2001,>8hrs,0.19,FA,Lead,Total,ug/L,17.8,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/13/2001,>8hrs,0.34,FA,Lead,Total,ug/L,11.1,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,11/12/2001,>8hrs,0.27,FA,Lead,Total,ug/L,16,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,3/19/2002,>8hrs,,SP,Lead,Total,ug/L,11.7,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,4/4/2002,>8hrs,,SP,Lead,Total,ug/L,21.7,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/2/2002,>8hrs,0.38,SU,Lead,Total,ug/L,8.6,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/6/2002,>8hrs,0.63,SU,Lead,Total,ug/L,11.1,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/19/2002,>8hrs,0.6,SU,Lead,Total,ug/L,5,<,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,6/24/2002,>8hrs,0.62,SU,Lead,Total,ug/L,5,<,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,7/10/2002,>8hrs,1.86,SU,Lead,Total,ug/L,6.2,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/16/2002,>8hrs,1.92,SU,Lead,Total,ug/L,21.7,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,8/20/2002,>8hrs,2.52,SU,Lead,Total,ug/L,12,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,9/5/2002,>8hrs,2.6,FA,Lead,Total,ug/L,25.2,=,113,44.95922222,93.24363889 +1,MN,MNMISNAV,Site5a_Snelling_ave_S_and_E_24th_St,Hennepin_County,City_of_Minneapolis,RE_MIX,ID,,10/8/2002,>8hrs,0.49,FA,Lead,Total,ug/L,16.5,=,113,44.95922222,93.24363889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,3/15/2001,>8hrs,,SP,Lead,Total,ug/L,68.8,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,4/10/2001,>8hrs,1.72,SP,Lead,Total,ug/L,29.1,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,3/12/2002,>8hrs,,SP,Lead,Total,ug/L,43.9,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,4/5/2002,>8hrs,,SP,Lead,Total,ug/L,47.4,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,5/5/2002,>8hrs,0.62,SP,Lead,Total,ug/L,104,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,5/7/2002,>8hrs,1.46,SP,Lead,Total,ug/L,123,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,6/3/2002,>8hrs,0.7,SU,Lead,Total,ug/L,15.5,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,7/10/2002,>8hrs,1.86,SU,Lead,Total,ug/L,8.35,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,8/16/2002,>8hrs,1.92,SU,Lead,Total,ug/L,21.5,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,9/5/2002,>8hrs,2.6,FA,Lead,Total,ug/L,32,=,63,44.95758889,93.12003889 +1,MN,MNSPCHAV,Site4_Charles_ave_Mackubin_to_Arundel_St,Ramsey_County,St_Paul,RE_MIX,CO,,10/7/2002,>8hrs,0.18,FA,Lead,Total,ug/L,18,=,63,44.95758889,93.12003889 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,3/15/2001,>8hrs,,SP,Lead,Total,ug/L,49.3,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,4/10/2001,>8hrs,1.72,SP,Lead,Total,ug/L,5,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/1/2001,>8hrs,0.44,SP,Lead,Total,ug/L,34.4,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,3/12/2002,>8hrs,,SP,Lead,Total,ug/L,9,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,4/5/2002,>8hrs,,SP,Lead,Total,ug/L,5.78,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/5/2002,>8hrs,0.62,SP,Lead,Total,ug/L,52.7,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,5/7/2002,>8hrs,1.46,SP,Lead,Total,ug/L,32.2,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,6/3/2002,>8hrs,0.7,SU,Lead,Total,ug/L,5,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,7/10/2002,>8hrs,1.86,SU,Lead,Total,ug/L,5,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,8/16/2002,>8hrs,1.92,SU,Lead,Total,ug/L,4.8,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,8/20/2002,>8hrs,2.52,SU,Lead,Total,ug/L,5,<,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,9/5/2002,>8hrs,2.6,FA,Lead,Total,ug/L,14.8,=,95,44.97933056,93.017675 +1,MN,MNSPLUOR,Site2_Luella_St_at_Orange_ave,Ramsey_County,St_Paul,RE,,,10/7/2002,>8hrs,0.18,FA,Lead,Total,ug/L,5,<,95,44.97933056,93.017675 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,3/15/2001,>8hrs,,SP,Lead,Total,ug/L,10.5,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,4/10/2001,>8hrs,1.72,SP,Lead,Total,ug/L,13.5,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,3/12/2002,>8hrs,,SP,Lead,Total,ug/L,27.9,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,4/5/2002,>8hrs,,SP,Lead,Total,ug/L,19.7,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,5/5/2002,>8hrs,0.62,SP,Lead,Total,ug/L,44.3,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,5/7/2002,>8hrs,1.46,SP,Lead,Total,ug/L,5.5,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,6/3/2002,>8hrs,0.7,SU,Lead,Total,ug/L,8.2,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,7/10/2002,>8hrs,1.86,SU,Lead,Total,ug/L,5,<,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,7/24/2002,>8hrs,1.06,SU,Lead,Total,ug/L,13.1,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,8/16/2002,>8hrs,1.92,SU,Lead,Total,ug/L,7.7,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,8/20/2002,>8hrs,2.52,SU,Lead,Total,ug/L,7.1,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,9/5/2002,>8hrs,2.6,FA,Lead,Total,ug/L,10.6,=,80,44.96772222,93.18919167 +1,MN,MNSPVAST,Site3_Vandalia_St_350_ft_S_of_Capp_Rd,Ramsey_County,St_Paul,ID,,,10/7/2002,>8hrs,0.18,FA,Lead,Total,ug/L,5,<,80,44.96772222,93.18919167 +2,NC,NCRASIT1,I40_400ft_east_S_State_Street,-,City_of_Raleigh,OP_MIX,RE,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,5,=,21,, +2,NC,NCRASIT2,Williamson_Drive_Pineview_Street,-,City_of_Raleigh,RE,,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,34,=,42,, +2,NC,NCRASIT3,I40_Dandridge_Drive_Bunche_Drive,-,City_of_Raleigh,RE,,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,14,=,110,, +2,NC,NCRASIT4,Williamson_Drive_Wade_Avenue,-,City_of_Raleigh,CO_MIX,RE,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,22,=,30,, +2,NC,NCRASIT5,Pylon_Drive_100ft_North_Hutton_Street,-,City_of_Raleigh,ID_MIX,OP,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,9,=,32,, +2,NC,NCRASIT6,South_Wilmington_Street_City_Farm_Road,-,City_of_Raleigh,ID_MIX,RE,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,19,=,58,, +2,NC,NCRASIT7,50ft_east_N_West_Street_Peace_Street_Dortch_Street,-,City_of_Raleigh,CO_MIX,RE,,3/16/2000,4,1.3,SP,Lead,Total,ug/L,25,=,467,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,4/13/2000,,,SP,Lead,Total,ug/L,3.220000029,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/26/2000,,0.529999958,SP,Lead,Total,ug/L,1.409999967,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/31/2000,,0.559999999,SP,Lead,Total,ug/L,2.529999971,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,10/10/2000,,0.399999994,FA,Lead,Total,ug/L,4.71999979,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,3/1/2001,,0.060000002,SP,Lead,Total,ug/L,2.730000019,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/14/2001,,0.07,SP,Lead,Total,ug/L,1.669999957,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/16/2001,,0.720000004,SP,Lead,Total,ug/L,4.800000191,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/13/2002,,0.210000004,SP,Lead,Total,ug/L,8.770000458,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,5/28/2002,,,SP,Lead,Total,ug/L,0.74000001,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,6/17/2002,,0.439999986,SU,Lead,Total,ug/L,1.539999962,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,11/16/2002,,2.008999952,FA,Lead,Total,ug/L,1.799999952,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,12/12/2002,,0.314999978,WI,Lead,Total,ug/L,0.639999986,=,26.57,, +7,OR,ORPOLEHI,Lexington_Hills_Detention_Pond_PondInlet,-,Portland,UNK_MIX,RE,32.90000153,4/23/2003,,,SP,Lead,Total,ug/L,0.629999995,=,26.57,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,2/23/2002,,,WI,Lead,Total,ug/L,123,=,12.4,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,3/6/2002,,,SP,Lead,Total,ug/L,20.5,=,12.4,, +7,OR,ORPOWIPO,Whitaker_Ponds_PRF_SED1,-,Portland,ID,,,3/19/2002,,,SP,Lead,Total,ug/L,13.30000019,=,12.4,, +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,3/19/2000,,,SP,Lead,Total,ug/L,7,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,4/11/2000,,,SP,Lead,Total,ug/L,8,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,4/17/2000,,0.09,SP,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,4/24/2000,,0.89,SP,Lead,Total,ug/L,7,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,4/28/2000,,0.31,SP,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,5/3/2000,,0.14,SP,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,5/23/2000,,0.16,SP,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/15/2000,,0.17,SU,Lead,Total,ug/L,12,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/17/2000,,0.15,SU,Lead,Total,ug/L,13,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/22/2000,,0.72,SU,Lead,Total,ug/L,17,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,7/31/2000,,0.47,SU,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,8/10/2000,,0.33,SU,Lead,Total,ug/L,14,=,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/6/2001,,0.31,SU,Lead,Total,ug/L,77,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/25/2001,,0.41,SU,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYAP,Acker_Place,-,City_of_Knoxville,ID_MIX,OP,44,6/30/2001,,0.19,SU,Lead,Total,ug/L,7,<,582.4,35.94861111,84.01666667 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,1/3/2000,,1.02,WI,Lead,Total,ug/L,18,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,1/9/2000,,1.06,WI,Lead,Total,ug/L,10,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,1/17/2000,,0.68,WI,Lead,Total,ug/L,1,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,1/20/2000,,0.35,WI,Lead,Total,ug/L,2,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,2/11/2000,,0.88,WI,Lead,Total,ug/L,16,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,5/4/2000,,0.66,SP,Lead,Total,ug/L,7,<,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,5/10/2000,,,SP,Lead,Total,ug/L,7,<,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,5/23/2000,,0.19,SP,Lead,Total,ug/L,7,<,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,6/5/2000,,0.45,SU,Lead,Total,ug/L,24,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,8/10/2000,,0.85,SU,Lead,Total,ug/L,57,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,9/20/2000,,0.53,FA,Lead,Total,ug/L,7,<,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,11/8/2000,,0.78,FA,Lead,Total,ug/L,26,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,11/16/2000,,0.48,FA,Lead,Total,ug/L,27,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,12/13/2000,,0.85,WI,Lead,Total,ug/L,7,<,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,12/16/2000,,0.84,WI,Lead,Total,ug/L,47,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,2/13/2001,,0.49,WI,Lead,Total,ug/L,29,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,3/12/2001,,0.51,SP,Lead,Total,ug/L,54,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,5/6/2001,,0.31,SP,Lead,Total,ug/L,7,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYFC,First_Creek,-,City_of_Knoxville,RE_MIX,FW,40,6/7/2001,,0.19,SU,Lead,Total,ug/L,13,=,2880,36.03444444,83.93472222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,1/17/2000,,0.55,WI,Lead,Total,ug/L,10,=,352,35.9625,83.99222222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,1/20/2000,,0.32,WI,Lead,Total,ug/L,10,=,352,35.9625,83.99222222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,2/11/2000,,0.7,WI,Lead,Total,ug/L,2,<,352,35.9625,83.99222222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,3/27/2000,,0.6,SP,Lead,Total,ug/L,10,=,352,35.9625,83.99222222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,4/2/2000,,0.96,SP,Lead,Total,ug/L,10,=,352,35.9625,83.99222222 +2,TN,TNKXTYTC,Third_Creek,-,City_of_Knoxville,OP_MIX,ID,34,4/11/2000,,0.4,SP,Lead,Total,ug/L,7,<,352,35.9625,83.99222222 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,1/3/2000,,1.02,WI,Lead,Total,ug/L,5,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,1/9/2000,,1.08,WI,Lead,Total,ug/L,7,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,2/11/2000,,0.86,WI,Lead,Total,ug/L,5,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,2/27/2000,,0.45,WI,Lead,Total,ug/L,2,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,3/27/2000,,0.72,SP,Lead,Total,ug/L,15,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,4/2/2000,,0.21,SP,Lead,Total,ug/L,7,=,364.8,35.92944444,84.02805556 +2,TN,TNKXTYWE,Wellington_Drive,-,City_of_Knoxville,CO_MIX,RE,60,5/3/2000,,0.28,SP,Lead,Total,ug/L,1,<,364.8,35.92944444,84.02805556 +4,TN,TNMET207,207_Walnut_Grove,-,City_of_Memphis,OP,,,6/21/2000,,,SU,Lead,Total,ug/L,50,<,157,35.13277778,89.81916667 +4,TN,TNMET207,207_Walnut_Grove,-,City_of_Memphis,OP,,,11/6/2000,,,FA,Lead,Total,ug/L,50,<,157,35.13277778,89.81916667 +4,TN,TNMET207,207_Walnut_Grove,-,City_of_Memphis,OP,,,1/29/2001,,,WI,Lead,Total,ug/L,50,<,157,35.13277778,89.81916667 +4,TN,TNMET207,207_Walnut_Grove,-,City_of_Memphis,OP,,,2/13/2001,,,WI,Lead,Total,ug/L,50,<,157,35.13277778,89.81916667 +4,TN,TNMET207,207_Walnut_Grove,-,City_of_Memphis,OP,,,4/23/2001,,,SP,Lead,Total,ug/L,50,<,157,35.13277778,89.81916667 +4,TN,TNMET211,211_Warford,-,City_of_Memphis,ID,,,1/11/2000,,,WI,Lead,Total,ug/L,50,<,45,35.16944444,89.95666667 +4,TN,TNMET211,211_Warford,-,City_of_Memphis,ID,,,6/26/2000,,,SU,Lead,Total,ug/L,50,<,45,35.16944444,89.95666667 +4,TN,TNMET211,211_Warford,-,City_of_Memphis,ID,,,1/29/2001,,,WI,Lead,Total,ug/L,50,<,45,35.16944444,89.95666667 +4,TN,TNMET211,211_Warford,-,City_of_Memphis,ID,,,4/23/2001,,,SP,Lead,Total,ug/L,50,<,45,35.16944444,89.95666667 +4,TN,TNMET231,231_Raleigh_Lagrange,-,City_of_Memphis,RE,,,1/11/2000,,,WI,Lead,Total,ug/L,50,<,26,35.1875,89.87583333 +4,TN,TNMET231,231_Raleigh_Lagrange,-,City_of_Memphis,RE,,,6/26/2000,,,SU,Lead,Total,ug/L,50,<,26,35.1875,89.87583333 +4,TN,TNMET231,231_Raleigh_Lagrange,-,City_of_Memphis,RE,,,1/29/2001,,,WI,Lead,Total,ug/L,50,<,26,35.1875,89.87583333 +4,TN,TNMET231,231_Raleigh_Lagrange,-,City_of_Memphis,RE,,,4/23/2001,,,SP,Lead,Total,ug/L,50,<,26,35.1875,89.87583333 +4,TN,TNMET260,260_Austin_Peay,-,City_of_Memphis,CO_MIX,RE,,7/20/2000,,,SU,Lead,Total,ug/L,50,<,294,35.21305556,89.91527778 +4,TN,TNMET260,260_Austin_Peay,-,City_of_Memphis,CO_MIX,RE,,11/2/2000,,,FA,Lead,Total,ug/L,50,<,294,35.21305556,89.91527778 +4,TN,TNMET260,260_Austin_Peay,-,City_of_Memphis,CO_MIX,RE,,1/29/2001,,,WI,Lead,Total,ug/L,50,<,294,35.21305556,89.91527778 +4,TN,TNMET260,260_Austin_Peay,-,City_of_Memphis,CO_MIX,RE,,5/17/2001,,,SP,Lead,Total,ug/L,50,<,294,35.21305556,89.91527778 +4,TN,TNMET410,410_Whitehaven,-,City_of_Memphis,RE,,,6/21/2000,,,SU,Lead,Total,ug/L,50,<,154,35.02638889,90.04861111 +4,TN,TNMET410,410_Whitehaven,-,City_of_Memphis,RE,,,11/2/2000,,,FA,Lead,Total,ug/L,50,<,154,35.02638889,90.04861111 +4,TN,TNMET410,410_Whitehaven,-,City_of_Memphis,RE,,,1/11/2001,,,WI,Lead,Total,ug/L,50,<,154,35.02638889,90.04861111 +4,TN,TNMET410,410_Whitehaven,-,City_of_Memphis,RE,,,4/23/2001,,,SP,Lead,Total,ug/L,50,<,154,35.02638889,90.04861111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,4/1/2000,3,0.16,SP,Lead,Total,ug/L,16,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,10/15/2000,8,1.13,FA,Lead,Total,ug/L,120,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,10/28/2000,6,1.02,FA,Lead,Total,ug/L,18,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,1/27/2001,9,1.21,WI,Lead,Total,ug/L,34,=,38.8,32.67822222,97.13461111 +5,TX,TXARA001,The_Parks_mall_AC603,-,City_of_Arlington,CO,,76.2,3/8/2001,5,0.98,SP,Lead,Total,ug/L,4,<,38.8,32.67822222,97.13461111 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,4/30/2000,3,0.68,SP,Lead,Total,ug/L,10,<,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,10/15/2000,8,0.88,FA,Lead,Total,ug/L,10,=,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,1/27/2001,7,1.28,WI,Lead,Total,ug/L,7,=,160.6,32.78236111,97.1165 +5,TX,TXARA002,R_Legacy_PK_AR602,-,City_of_Arlington,RE,,47.4,3/8/2001,5,0.96,SP,Lead,Total,ug/L,4,<,160.6,32.78236111,97.1165 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,1/7/2000,20,0.32,WI,Lead,Total,ug/L,48,=,49.5,32.77,96.89027778 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,1/27/2001,9,1.07,WI,Lead,Total,ug/L,8,=,49.5,32.77,96.89027778 +5,TX,TXDAA002,Bastille_St_325,-,City_of_Dallas,ID,,80,3/8/2001,5,0.71,SP,Lead,Total,ug/L,14,=,49.5,32.77,96.89027778 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/27/2000,18,0.25,WI,Lead,Total,ug/L,5,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,4/11/2000,9,0.36,SP,Lead,Total,ug/L,20,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,10/15/2000,33,1.4,FA,Lead,Total,ug/L,40,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,10/29/2000,5,0.67,FA,Lead,Total,ug/L,22,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/10/2001,12,0.32,WI,Lead,Total,ug/L,30,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,1/28/2001,10,0.88,WI,Lead,Total,ug/L,15,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/8/2001,5,0.51,SP,Lead,Total,ug/L,21,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/24/2001,10,0.21,SP,Lead,Total,ug/L,21,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA003,Knights_Branch_34,-,City_of_Dallas,RE_MIX,ID,,3/27/2001,3,0.51,SP,Lead,Total,ug/L,5,=,486.7,32.82769444,96.83361111 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,4/11/2000,9,0.77,SP,Lead,Total,ug/L,10,=,59.1,32.93305556,96.80305556 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,10/15/2000,8,1.54,FA,Lead,Total,ug/L,10,<,59.1,32.93305556,96.80305556 +5,TX,TXDAA004,White_Rock_Creek_86,-,City_of_Dallas,CO,,84.5,4/11/2001,14,0.74,SP,Lead,Total,ug/L,4,<,59.1,32.93305556,96.80305556 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,10/15/2000,8,1.27,FA,Lead,Total,ug/L,50,=,38.9,32.66061111,96.76361111 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,1/27/2001,16,0.75,WI,Lead,Total,ug/L,12,=,38.9,32.66061111,96.76361111 +5,TX,TXDAA006,Newton_Creek_189,-,City_of_Dallas,RE_MIX,OP,44.9,3/8/2001,5,0.61,SP,Lead,Total,ug/L,7,=,38.9,32.66061111,96.76361111 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,10/29/2000,7,1.42,FA,Lead,Total,ug/L,61,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,11/12/2000,3,1.27,FA,Lead,Total,ug/L,10,<,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,1/27/2001,9,0.24,WI,Lead,Total,ug/L,8,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,2/9/2001,11,0.28,WI,Lead,Total,ug/L,57,=,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,2/27/2001,3,0.22,WI,Lead,Total,ug/L,10,<,115.36,32.67055556,96.99972222 +5,TX,TXDCA001,Mountain_Creek_DH902,-,TXDOT_Dallas,OP_MIX,FW,10,3/8/2001,5,0.79,SP,Lead,Total,ug/L,4,<,115.36,32.67055556,96.99972222 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,10/6/2000,12,0.24,FA,Lead,Total,ug/L,5,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,10/20/2000,4,0.23,FA,Lead,Total,ug/L,20,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,11/12/2000,3,0.14,FA,Lead,Total,ug/L,20,=,12.05,32.92388889,96.81916667 +5,TX,TXDCA002,Bachman_Branch_DH901,-,TXDOT_Dallas,OP_MIX,FW,33,3/8/2001,5,0.45,SP,Lead,Total,ug/L,4,<,12.05,32.92388889,96.81916667 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,3/7/2000,7,0.34,SP,Lead,Total,ug/L,10,<,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,11/12/2000,3,0.52,FA,Lead,Total,ug/L,10,<,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,1/27/2001,9,0.29,WI,Lead,Total,ug/L,4,<,151.6,32.825,97.34422222 +5,TX,TXFWA002,Pylon_St_PY1,-,City_of_Fort_Worth,OP_MIX,ID,27.7,3/8/2001,5,0.81,SP,Lead,Total,ug/L,4,<,151.6,32.825,97.34422222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,4/1/2000,2,0.35,SP,Lead,Total,ug/L,46,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,1/27/2001,5,0.75,WI,Lead,Total,ug/L,22,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA004,Dry_Branch_CRA1,-,City_of_Fort_Worth,ID,,79.3,3/8/2001,5,0.7,SP,Lead,Total,ug/L,14,=,73.7,32.80586111,97.31622222 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,3/10/2000,7,0.36,SP,Lead,Total,ug/L,13,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,10/28/2000,5,1.07,FA,Lead,Total,ug/L,7,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,11/1/2000,3,0.39,FA,Lead,Total,ug/L,6,=,150.8,32.74597222,97.23894444 +5,TX,TXFWA005,Estrn_Hills_HS_EH1,-,City_of_Fort_Worth,RE_MIX,CO,61.4,3/8/2001,5,0.8,SP,Lead,Total,ug/L,4,<,150.8,32.74597222,97.23894444 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/16/2000,5,0.17,SP,Lead,Total,ug/L,38,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,4/27/2000,10,0.23,SP,Lead,Total,ug/L,20,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,5/19/2000,44,1.36,SP,Lead,Total,ug/L,72,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,11/12/2000,3,0.85,FA,Lead,Total,ug/L,30,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,11/16/2000,3,0.21,FA,Lead,Total,ug/L,10,<,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,1/10/2001,12,0.3,WI,Lead,Total,ug/L,10,<,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,1/27/2001,9,0.18,WI,Lead,Total,ug/L,13,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/8/2001,5,0.71,SP,Lead,Total,ug/L,11,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/24/2001,10,0.95,SP,Lead,Total,ug/L,9,=,268,32.91555556,96.63583333 +5,TX,TXGAA001,Mills_Branch_Tributary_GM404,-,City_of_Garland,RE_MIX,CO,,3/27/2001,3,0.88,SP,Lead,Total,ug/L,10,<,268,32.91555556,96.63583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,3/28/2000,6,0.89,SP,Lead,Total,ug/L,15,=,33.9,32.89236111,96.67583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,11/12/2000,3,0.52,FA,Lead,Total,ug/L,10,<,33.9,32.89236111,96.67583333 +5,TX,TXGAA002,Trib_to_Duck_Creek_GI401,-,City_of_Garland,ID_MIX,OP,67.3,3/27/2001,3,0.96,SP,Lead,Total,ug/L,10,<,33.9,32.89236111,96.67583333 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,6/9/2000,,0.46,SU,Lead,Total,ug/L,4.3,=,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,10/7/2000,,0.16,FA,Lead,Total,ug/L,3.4,=,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,1/10/2001,,0.13,WI,Lead,Total,ug/L,13.3,=,560,29.78477778,95.154 +4,TX,TXHCA001,Overbluff,Harris_County,-,RE,,,3/27/2001,,3.7,SP,Lead,Total,ug/L,14.3,=,560,29.78477778,95.154 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,7/23/2000,,0.18,SU,Lead,Total,ug/L,4.8,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,10/29/2000,,0.98,FA,Lead,Total,ug/L,3.7,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,2/9/2001,,0.1,WI,Lead,Total,ug/L,15,=,95,30.03097222,95.43994444 +4,TX,TXHCA002,Cypress_Trace_Station,Harris_County,-,RE_MIX,OP,65,4/16/2001,,0.88,SP,Lead,Total,ug/L,15.9,=,95,30.03097222,95.43994444 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,1/27/2000,,0.74,WI,Lead,Total,ug/L,17.7,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,6/26/2000,,0.39,SU,Lead,Total,ug/L,6.9,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,8/22/2000,,0.19,SU,Lead,Total,ug/L,31,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,1/26/2001,,0.02,WI,Lead,Total,ug/L,11.5,=,32,29.92727778,95.58713889 +4,TX,TXHCA003,Steeplechase,Harris_County,-,CO,,,6/22/2001,,0.27,SU,Lead,Total,ug/L,6.1,=,32,29.92727778,95.58713889 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,1/27/2000,,0.28,WI,Lead,Total,ug/L,3.7,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,3/14/2000,,0.2,SP,Lead,Total,ug/L,11.8,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,11/12/2000,,2.07,FA,Lead,Total,ug/L,2.8,=,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,1/7/2001,,0.16,WI,Lead,Total,ug/L,10,<,99,29.61791667,95.0525 +4,TX,TXHCA004,Bayport,Harris_County,-,ID,,71.25,3/8/2001,,0.38,SP,Lead,Total,ug/L,27.8,=,99,29.61791667,95.0525 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,3/14/2000,,0.97,SP,Lead,Total,ug/L,14,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,8/8/2000,,0.55,SU,Lead,Total,ug/L,7,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,1/10/2001,,1.75,WI,Lead,Total,ug/L,13,=,232,29.7435,95.53466667 +4,TX,TXHOA002,Eleventh_Street,-,City_of_Houston,ID,,76.5,5/31/2001,,0.1,SP,Lead,Total,ug/L,8,=,232,29.7435,95.53466667 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,3/14/2000,,0.75,SP,Lead,Total,ug/L,7,=,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,11/1/2000,,0.75,FA,Lead,Total,ug/L,4,=,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,1/10/2001,,1.65,WI,Lead,Total,ug/L,3,<,65,29.78883333,95.43263889 +4,TX,TXHOA003,Lazybrook,-,City_of_Houston,RE,,45,3/27/2001,,6.42,SP,Lead,Total,ug/L,15,=,65,29.78883333,95.43263889 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,3/14/2000,,0.67,SP,Lead,Total,ug/L,4,=,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,9/21/2000,,0.23,FA,Lead,Total,ug/L,3,<,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,2/9/2001,,0.2,WI,Lead,Total,ug/L,6,=,38,29.80404444,95.43444444 +4,TX,TXHOA005,Tanglewilde,-,City_of_Houston,RE,,65,7/19/2001,,0.1,SU,Lead,Total,ug/L,20,=,38,29.80404444,95.43444444 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,4/11/2000,9,0.53,SP,Lead,Total,ug/L,10,<,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,10/15/2000,8,0.93,FA,Lead,Total,ug/L,20,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,1/27/2001,9,0.29,WI,Lead,Total,ug/L,15,=,65.3,32.78552778,96.97697222 +5,TX,TXIRA001,Bear_Cr_IR501,-,City_of_Irving,RE,,41.9,3/24/2001,10,0.79,SP,Lead,Total,ug/L,4,<,65.3,32.78552778,96.97697222 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,4/11/2000,9,1.01,SP,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,4/30/2000,2,1.11,SP,Lead,Total,ug/L,20,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,5/19/2000,9,0.66,SP,Lead,Total,ug/L,22,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,6/14/2000,2,0.4,SU,Lead,Total,ug/L,26,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,10/15/2000,8,0.78,FA,Lead,Total,ug/L,30,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/10/2001,14,0.42,WI,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/16/2001,4,0.22,WI,Lead,Total,ug/L,11,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,1/27/2001,9,0.25,WI,Lead,Total,ug/L,6,=,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/9/2001,11,0.28,WI,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/13/2001,4,0.31,WI,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/23/2001,7,0.23,WI,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,2/27/2001,3,0.47,WI,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/8/2001,5,0.55,SP,Lead,Total,ug/L,4,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/24/2001,10,1.19,SP,Lead,Total,ug/L,4,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,3/27/2001,3,0.84,SP,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXIRA002,Cottonwood_Branch_Trib_IM504,-,City_of_Irving,ID_MIX,RE,,5/28/2001,16,1.17,SP,Lead,Total,ug/L,10,<,127.7,32.86888889,96.98527778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,4/11/2000,13,0.49,SP,Lead,Total,ug/L,10,<,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/10/2001,9,0.48,WI,Lead,Total,ug/L,20,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/16/2001,3,0.94,WI,Lead,Total,ug/L,23,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,1/27/2001,9,1.32,WI,Lead,Total,ug/L,7,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,3/8/2001,5,0.72,SP,Lead,Total,ug/L,6,=,45.9,32.80472222,96.62777778 +5,TX,TXMEA001,South_mesquite_I635__MC801,-,City_of_Mesquite,CO_MIX,FW,89.4,3/24/2001,10,1.23,SP,Lead,Total,ug/L,2,=,45.9,32.80472222,96.62777778 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/7/2000,20,0.32,WI,Lead,Total,ug/L,5,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,2/22/2000,22,1.04,WI,Lead,Total,ug/L,12,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,4/11/2000,13,1.29,SP,Lead,Total,ug/L,10,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,5/19/2000,14,1.68,SP,Lead,Total,ug/L,4,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,6/14/2000,2,0.43,SU,Lead,Total,ug/L,7,=,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,11/12/2000,3,0.43,FA,Lead,Total,ug/L,10,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/10/2001,8,0.21,WI,Lead,Total,ug/L,10,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/16/2001,4,0.34,WI,Lead,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,1/27/2001,9,0.18,WI,Lead,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,2/9/2001,10,0.33,WI,Lead,Total,ug/L,10,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,3/8/2001,5,0.66,SP,Lead,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,3/24/2001,10,1.42,SP,Lead,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA002,Beck_Brach_PU704,-,City_of_Plano,OP,,,4/11/2001,14,0.84,SP,Lead,Total,ug/L,4,<,73.5,33.00277778,96.66833333 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,4/11/2000,9,0.61,SP,Lead,Total,ug/L,10,=,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,10/29/2000,6,1.51,FA,Lead,Total,ug/L,4,<,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,11/12/2000,3,0.62,FA,Lead,Total,ug/L,10,<,22.7,33.02722222,96.71286111 +5,TX,TXPLA003,Spring_Creek_PC702,-,City_of_Plano,CO_MIX,OP,73.5,5/4/2001,11,0.63,SP,Lead,Total,ug/L,10,<,22.7,33.02722222,96.71286111 +5,TX,TXTCA001,Deer_Creek_TH904,TXDOT_Tarrant_County,-,FW_MIX,OP,27,10/29/2000,6,1.52,FA,Lead,Total,ug/L,25,=,63.13,32.58833333,97.31888889 +5,TX,TXTCA001,Deer_Creek_TH904,TXDOT_Tarrant_County,-,FW_MIX,OP,27,3/8/2001,5,1.05,SP,Lead,Total,ug/L,9,=,63.13,32.58833333,97.31888889 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,2/27/2000,,0.78,WI,Lead,Total,ug/L,1.6,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,3/21/2000,,1.99,SP,Lead,Total,ug/L,0.8,=,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,9/19/2000,,0.85,FA,Lead,Total,ug/L,5,<,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,9/25/2000,,2.14,FA,Lead,Total,ug/L,5,<,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,11/14/2000,,0.26,FA,Lead,Total,ug/L,5,<,24.7,38.896225,77.081425 +2,VA,VAARLCV2,Colonial_Village_CV2,-,Arlington,RE,,35,1/19/2001,,1.41,WI,Lead,Total,ug/L,5,<,24.7,38.896225,77.081425 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,1/10/2000,,0.68,WI,Lead,Total,ug/L,0.65,<,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,3/16/2000,,0.39,SP,Lead,Total,ug/L,1.7,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,9/19/2000,,0.85,FA,Lead,Total,ug/L,5,<,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,9/25/2000,,2.14,FA,Lead,Total,ug/L,5,<,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,1/8/2001,,0.2,WI,Lead,Total,ug/L,6,=,38.7,38.902525,77.15361111 +2,VA,VAARLLP1,Little_Pimmet_LP1,-,Arlington,RE,,35,3/4/2001,,0.35,SP,Lead,Total,ug/L,5,<,38.7,38.902525,77.15361111 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,2/18/2000,,0.58,WI,Lead,Total,ug/L,2.4,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,4/8/2000,,0.88,SP,Lead,Total,ug/L,2,=,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,8/18/2000,,0.08,SU,Lead,Total,ug/L,5,<,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,11/9/2000,,0.45,FA,Lead,Total,ug/L,5,<,14,38.84287778,77.09034444 +2,VA,VAARLRS3,Randolph_Street_RS3,-,Arlington,CO,,74,1/19/2001,,1.41,WI,Lead,Total,ug/L,5,<,14,38.84287778,77.09034444 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,1/4/2000,,1.22,WI,Lead,Total,ug/L,1.7,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,2/14/2000,,0.11,WI,Lead,Total,ug/L,1,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,3/12/2000,,0.2,SP,Lead,Total,ug/L,1.5,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,4/4/2000,,0.45,SP,Lead,Total,ug/L,1.6,<,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,6/6/2000,,0.45,SU,Lead,Total,ug/L,1.5,<,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,1/19/2001,,1.41,WI,Lead,Total,ug/L,8,=,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,3/4/2001,,0.35,SP,Lead,Total,ug/L,5,<,36,38.8443,77.09254722 +2,VA,VAARLTC4,Trades_Center_TC4,-,Arlington,ID,,39,6/1/2001,,0.52,SU,Lead,Total,ug/L,5,<,36,38.8443,77.09254722 +2,VA,VAARSICV,CV,-,Arlington,RE,,,9/24/2001,,,FA,Lead,Total,ug/L,5,<,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,10/6/2001,,,FA,Lead,Total,ug/L,5,<,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,3/2/2002,,,SP,Lead,Total,ug/L,5,<,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,3/19/2002,,,SP,Lead,Total,ug/L,5,<,24.7,, +2,VA,VAARSICV,CV,-,Arlington,RE,,,6/6/2002,,,SU,Lead,Total,ug/L,5,<,24.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,9/24/2001,,,FA,Lead,Total,ug/L,5,<,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,10/6/2001,,,FA,Lead,Total,ug/L,5,<,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,1/11/2002,,,WI,Lead,Total,ug/L,5,<,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,2/7/2002,,,WI,Lead,Total,ug/L,5,<,38.7,, +2,VA,VAARSILP,LP,-,Arlington,RE,,,6/6/2002,,,SU,Lead,Total,ug/L,5,<,38.7,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,7/18/2001,,,SU,Lead,Total,ug/L,6,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,8/10/2001,,,SU,Lead,Total,ug/L,6,=,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,3/2/2002,,,SP,Lead,Total,ug/L,5,<,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,3/19/2002,,,SP,Lead,Total,ug/L,5,<,14,, +2,VA,VAARSIRS,RS,-,Arlington,CO,,,6/6/2002,,,SU,Lead,Total,ug/L,5,<,14,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,6/1/2001,,,SU,Lead,Total,ug/L,5,<,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,9/24/2001,,,FA,Lead,Total,ug/L,5,<,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,3/2/2002,,,SP,Lead,Total,ug/L,5,<,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,3/26/2002,,,SP,Lead,Total,ug/L,8,=,36,, +2,VA,VAARSITC,TC,-,Arlington,ID,,,6/6/2002,,,SU,Lead,Total,ug/L,5,<,36,, +2,VA,VACHAHIL,Hillsdale_Drive_Detention_Basin_Inflow,Albemarle_County,Charlottesville,RE_MIX,CO,42,7/18/2000,,0.199999997,SU,Lead,Total,ug/L,0.500000024,=,73.8,, +2,VA,VACHAHIL,Hillsdale_Drive_Detention_Basin_Inflow,Albemarle_County,Charlottesville,RE_MIX,CO,42,9/14/2000,,0.120000004,FA,Lead,Total,ug/L,100.0000015,=,73.8,, +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,6/27/2000,,0.89,SU,Lead,Total,ug/L,16,=,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,1/8/2001,,0.09,WI,Lead,Total,ug/L,15,=,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,12/10/2001,,0.24,WI,Lead,Total,ug/L,15,=,60,37.49479444,77.52904444 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,6/27/2000,,0.74,SU,Lead,Total,ug/L,13,=,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,1/8/2001,,0.07,WI,Lead,Total,ug/L,5,<,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,12/10/2001,,0.38,WI,Lead,Total,ug/L,5,<,10,37.40009722,77.65236944 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,6/27/2000,,0.56,SU,Lead,Total,ug/L,10,=,10,37.37954167,77.52731389 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,1/8/2001,,0.08,WI,Lead,Total,ug/L,5,<,10,37.37954167,77.52731389 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,6/27/2000,,1.25,SU,Lead,Total,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,1/8/2001,,0.19,WI,Lead,Total,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,6/27/2000,,0.41,SU,Lead,Total,ug/L,5,<,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,1/8/2001,,0.65,WI,Lead,Total,ug/L,11,=,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,12/10/2001,,0.2,WI,Lead,Total,ug/L,5,<,55.6,37.48011944,77.46317222 +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,1/5/2000,,,WI,Lead,Total,ug/L,0.65,=,130,, +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,9/19/2000,,,FA,Lead,Total,ug/L,1.03,=,130,, +2,VA,VACHEBRI,Briarfield_Drive_C1A,-,Chesapeake,RE,,,2/13/2001,,,WI,Lead,Total,ug/L,0.8,=,130,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,3/17/2000,,,SP,Lead,Total,ug/L,0.3,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,4/25/2000,,,SP,Lead,Total,ug/L,0.3,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,9/19/2000,,,FA,Lead,Total,ug/L,0.3,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,1/20/2001,,,WI,Lead,Total,ug/L,0.3,<,16,, +2,VA,VACHECAIP,Cavalier_Industrial_Park_C5,-,Chesapeake,ID,,,2/13/2001,,,WI,Lead,Total,ug/L,0.3,<,16,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,8/27/2000,,,SU,Lead,Total,ug/L,0.67,=,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,9/18/2000,,,FA,Lead,Total,ug/L,0.3,<,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,1/18/2001,,,WI,Lead,Total,ug/L,0.77,=,28,, +2,VA,VACHWOC4,Woodford_Square_Along_Battlefield_Blvd_C4,-,Chesapeake,CO,,,2/13/2001,,,WI,Lead,Total,ug/L,0.3,<,28,, +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,2/13/2001,,,WI,Lead,Total,ug/L,0.3,<,188,36.7527,76.2079 +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,3/4/2001,,,SP,Lead,Total,ug/L,0.3,<,188,36.7527,76.2079 +2,VA,VACPTYC2,Hunningdon_Lakes_C2,-,Chesapeake,RE_MIX,WA,25,3/21/2001,,,SP,Lead,Total,ug/L,0.3,<,188,36.7527,76.2079 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,3/21/2000,,,SP,Lead,Total,ug/L,0.99,=,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,9/19/2000,,,FA,Lead,Total,ug/L,0.99,=,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,1/8/2001,,,WI,Lead,Total,ug/L,0.98,=,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,1/30/2001,,,WI,Lead,Total,ug/L,0.3,<,32,36.7119,76.2425 +2,VA,VACPTYC3,Horse_Run_Ditch_C3,-,Chesapeake,RE,,50,2/22/2001,,,WI,Lead,Total,ug/L,1.12,=,32,36.7119,76.2425 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,3/21/2000,3.85,1.23,SP,Lead,Total,ug/L,9,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,3/25/2000,3.47,0.26,SP,Lead,Total,ug/L,9,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF2,Sunset_Hills_Road,Fairfax_County,-,ID,,,8/1/2000,3.79,0.62,SU,Lead,Total,ug/L,1,=,20.1,38.9454,77.3285 +2,VA,VAFFCOF6,Fairview_Park_Drive,Fairfax_County,-,CO,,,11/10/2000,44.5,0.28,FA,Lead,Total,ug/L,1,<,213.4,38.8643,77.2144 +2,VA,VAFFCOF7,Lakeview_Drive,Fairfax_County,-,RE_MIX,UNK,,9/19/2000,16.75,1.33,FA,Lead,Total,ug/L,5,=,49.9,38.8459,77.1667 +2,VA,VAFFCOF7,Lakeview_Drive,Fairfax_County,-,RE_MIX,UNK,,11/29/2000,3.38,0.13,FA,Lead,Total,ug/L,1,=,49.9,38.8459,77.1667 +2,VA,VAFFCOF9,Rock_Ridge_Road,Fairfax_County,-,RE,,,9/2/2000,4,0.98,FA,Lead,Total,ug/L,1,=,63.8,38.7655,77.146 +2,VA,VAFFOF11,Prosperity_Avenue,Fairfax_County,-,ID,,,8/1/2000,3.75,0.45,SU,Lead,Total,ug/L,2,=,37.9,38.8783,77.2388 +2,VA,VAFFOF11,Prosperity_Avenue,Fairfax_County,-,ID,,,11/29/2000,3.38,0.1,FA,Lead,Total,ug/L,7,=,37.9,38.8783,77.2388 +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,1/4/2000,,,WI,Lead,Total,ug/L,2.63,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,2/12/2000,,,WI,Lead,Total,ug/L,0.88,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,4/3/2000,,,SP,Lead,Total,ug/L,0.3,<,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,6/19/2000,,,SU,Lead,Total,ug/L,0.85,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,7/20/2000,,,SU,Lead,Total,ug/L,2.66,=,134,, +2,VA,VAHABAYA,Bay_Avenue_H4,-,Hampton,RE,,,12/14/2000,,,WI,Lead,Total,ug/L,0.91,=,134,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,4/3/2000,,,SP,Lead,Total,ug/L,0.75,=,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,4/25/2000,,,SP,Lead,Total,ug/L,0.69,=,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,7/19/2000,,,SU,Lead,Total,ug/L,0.77,=,115,, +2,VA,VAHACOH1,Commerce_Drive_H1,-,Hampton,CO,,,11/19/2000,,,FA,Lead,Total,ug/L,0.3,<,115,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,4/3/2000,,,SP,Lead,Total,ug/L,0.3,<,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,4/15/2000,,,SP,Lead,Total,ug/L,0.3,<,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,7/19/2000,,,SU,Lead,Total,ug/L,0.3,<,18,, +2,VA,VAHAHAH3,Hampton_Club_H3,-,Hampton,RE,,,12/14/2000,,,WI,Lead,Total,ug/L,0.3,<,18,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,4/25/2000,,,SP,Lead,Total,ug/L,0.89,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,6/19/2000,,,SU,Lead,Total,ug/L,1.42,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,7/19/2000,,,SU,Lead,Total,ug/L,2.1,=,47,, +2,VA,VAHAMIH2,Mingee_Drive_H2,-,Hampton,ID,,,12/14/2000,,,WI,Lead,Total,ug/L,1.02,=,47,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,1/4/2000,,,WI,Lead,Total,ug/L,0.89,=,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,4/25/2000,,,SP,Lead,Total,ug/L,0.3,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,6/19/2000,,,SU,Lead,Total,ug/L,0.3,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,7/19/2000,,,SU,Lead,Total,ug/L,0.3,<,35,, +2,VA,VAHAWIH5,Willow_Oaks_Boulevard_H5,-,Hampton,RE,,,12/14/2000,,,WI,Lead,Total,ug/L,0.3,<,35,, +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/12/2000,13,0.29,WI,Lead,Total,ug/L,146,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/12/2000,,,WI,Lead,Total,ug/L,14.6,=,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,5/21/2000,,,SP,Lead,Total,ug/L,0.5,<,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,9/15/2000,,,FA,Lead,Total,ug/L,0.5,<,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,1/8/2001,,,WI,Lead,Total,ug/L,0.5,<,43,36.86495,76.28491111 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/22/2001,,,WI,Lead,Total,ug/L,4.55,=,43,36.86495,76.28491111 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,6/19/2000,,,SU,Lead,Total,ug/L,3.87,=,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,9/15/2000,,,FA,Lead,Total,ug/L,0.5,<,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,3/2/2001,,,SP,Lead,Total,ug/L,0.5,<,97,36.93791944,76.23315833 +2,VA,VANFTYN2,Modoc_Avenue_N2,-,Norfolk,RE,,25,3/21/2001,,,SP,Lead,Total,ug/L,0.5,<,97,36.93791944,76.23315833 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,5/21/2000,,,SP,Lead,Total,ug/L,0.5,<,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,6/19/2000,,,SU,Lead,Total,ug/L,0.5,<,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,1/8/2001,,,WI,Lead,Total,ug/L,0.5,<,27,36.9169,76.2298 +2,VA,VANFTYN3,Liitle_Creek_Road_N3,-,Norfolk,RE,,37,2/22/2001,,,WI,Lead,Total,ug/L,2.38,=,27,36.9169,76.2298 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,5/20/2000,,,SP,Lead,Total,ug/L,4.46,=,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,6/19/2000,,,SU,Lead,Total,ug/L,0.3,<,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,1/8/2001,,,WI,Lead,Total,ug/L,0.5,<,43,36.8484,76.2098 +2,VA,VANFTYN4,Military_Circle_N4,-,Norfolk,CO,,70,2/22/2001,,,WI,Lead,Total,ug/L,0.69,=,43,36.8484,76.2098 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/18/2000,4,0.36,WI,Lead,Total,ug/L,3.6,=,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/18/2000,,,WI,Lead,Total,ug/L,0.5,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,5/21/2000,,,SP,Lead,Total,ug/L,0.3,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,6/19/2000,,,SU,Lead,Total,ug/L,0.5,<,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/22/2001,,,WI,Lead,Total,ug/L,0.8,=,39,36.87776111,76.23321111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,5/21/2001,,,SP,Lead,Total,ug/L,0.59,=,39,36.87776111,76.23321111 +2,VA,VANNGLEN,Glendale_Road_NN1,-,Newport News,RE,,,3/28/2000,,,SP,Lead,Total,ug/L,1,=,75,, +2,VA,VANNGLEN,Glendale_Road_NN1,-,Newport News,RE,,,7/14/2000,,,SU,Lead,Total,ug/L,11.7,=,75,, +2,VA,VANNMALL,Patrick_Henry_Mall_NN3,-,Newport News,CO,,,3/28/2000,,,SP,Lead,Total,ug/L,0.73,=,24,, +2,VA,VANNOYN4,Oyster_Point_Park_Jefferson_Ave_NN4,-,Newport News,UNK,,,6/6/2000,,,SU,Lead,Total,ug/L,0.78,=,294,, +2,VA,VANNOYN4,Oyster_Point_Park_Jefferson_Ave_NN4,-,Newport News,UNK,,,1/30/2001,,,WI,Lead,Total,ug/L,1.16,=,294,, +2,VA,VANNSNN2,Shields_Road_NN2,-,Newport News,RE_MIX,UNK,,3/28/2000,,,SP,Lead,Total,ug/L,0.5,<,397,, +2,VA,VANNSNN2,Shields_Road_NN2,-,Newport News,RE_MIX,UNK,,1/30/2001,,,WI,Lead,Total,ug/L,0.5,<,397,, +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,3/28/2000,,,SP,Lead,Total,ug/L,0.5,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,6/6/2000,,,SU,Lead,Total,ug/L,0.5,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,6/14/2000,,,SU,Lead,Total,ug/L,0.5,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,8/18/2000,,,SU,Lead,Total,ug/L,0.5,<,83,37.0833,76.4671 +2,VA,VANNTNN5,Oyster_Point_Park_Thimble_Shoals_Blvd_NN5,-,Newport_News,CO_MIX,RE,62,2/22/2001,,,WI,Lead,Total,ug/L,1.01,=,83,37.0833,76.4671 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,6/19/2000,,,SU,Lead,Total,ug/L,0.3,<,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,7/15/2000,,,SU,Lead,Total,ug/L,0.98,=,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,12/14/2000,,,WI,Lead,Total,ug/L,0.3,<,27.2,36.8096,76.3175 +2,VA,VAPMTYP1,Cradock_Shopping_Center_P1,-,Portsmouth,CO,,68,2/22/2001,,,WI,Lead,Total,ug/L,0.87,=,27.2,36.8096,76.3175 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,4/25/2000,,,SP,Lead,Total,ug/L,0.64,=,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,6/4/2000,,,SU,Lead,Total,ug/L,0.3,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,9/18/2000,,,FA,Lead,Total,ug/L,0.3,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP2,West_Park_Homes_P2,-,Portsmouth,RE,,36,11/17/2000,,,FA,Lead,Total,ug/L,0.3,<,101.1,36.8151,76.3828 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,4/25/2000,,,SP,Lead,Total,ug/L,0.8,=,46,36.8603,76.3879 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,7/15/2000,,,SU,Lead,Total,ug/L,1.2,=,46,36.8603,76.3879 +2,VA,VAPMTYP3,Church_Land_Shopping_Center_P3,-,Portsmouth,RE_MIX,CO,,12/14/2000,,,WI,Lead,Total,ug/L,0.73,=,46,36.8603,76.3879 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,1/4/2000,,,WI,Lead,Total,ug/L,0.57,=,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,4/25/2000,,,SP,Lead,Total,ug/L,0.52,=,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,7/15/2000,,,SU,Lead,Total,ug/L,0.7,=,35.3,36.8852,76.3829 +2,VA,VAPMTYP4,Edgefield_Apartments_P4,-,Portsmouth,RE,,39,12/14/2000,,,WI,Lead,Total,ug/L,0.3,<,35.3,36.8852,76.3829 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/4/2000,,,SU,Lead,Total,ug/L,0.3,<,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/15/2000,,,SU,Lead,Total,ug/L,0.52,=,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,6/19/2000,,,SU,Lead,Total,ug/L,0.3,<,53.5,36.89048056,76.39178056 +2,VA,VAPMTYP5,South_Hampton_P5,-,Portsmouth,RE,,,12/14/2000,,,WI,Lead,Total,ug/L,0.3,<,53.5,36.89048056,76.39178056 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,2/12/2000,,,WI,Lead,Total,ug/L,0.3,<,63,36.82451667,76.09079722 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,3/21/2000,,,SP,Lead,Total,ug/L,0.52,=,63,36.82451667,76.09079722 +2,VA,VAVBTYV1,Bow_Creek_V1,-,Virginia_Beach,RE,,29,7/15/2000,,,SU,Lead,Total,ug/L,0.55,=,63,36.82451667,76.09079722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,2/12/2000,,,WI,Lead,Total,ug/L,0.3,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,3/17/2000,,,SP,Lead,Total,ug/L,0.3,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,9/19/2000,,,FA,Lead,Total,ug/L,0.3,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,12/11/2000,,,WI,Lead,Total,ug/L,0.3,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV2,Salem_Road_V2,-,Virginia_Beach,RE,,29,3/16/2001,,,SP,Lead,Total,ug/L,0.3,<,260,36.77466944,76.12239722 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,2/12/2000,,,WI,Lead,Total,ug/L,1.3,=,63,36.8739,76.1387 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,7/15/2000,,,SU,Lead,Total,ug/L,2.38,=,63,36.8739,76.1387 +2,VA,VAVBTYV3,Haygood_V3,-,Virginia_Beach,UNK,,25,1/30/2001,,,WI,Lead,Total,ug/L,1.8,=,63,36.8739,76.1387 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,2/18/2000,,,WI,Lead,Total,ug/L,1.11,=,29,36.82088611,76.06472778 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,7/19/2000,,,SU,Lead,Total,ug/L,1.26,=,29,36.82088611,76.06472778 +2,VA,VAVBTYV4,Viking_Drive_V4,-,Virginia_Beach,ID,,55,1/30/2001,,,WI,Lead,Total,ug/L,1.51,=,29,36.82088611,76.06472778 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,2/18/2000,,,WI,Lead,Total,ug/L,0.3,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,3/17/2000,,,SP,Lead,Total,ug/L,0.3,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,7/15/2000,,,SU,Lead,Total,ug/L,0.3,<,882,36.81683611,76.11573056 +2,VA,VAVBTYV5,Holland_Road_V5,-,Virginia_Beach,UNK,,47,12/11/2000,,,WI,Lead,Total,ug/L,0.3,<,882,36.81683611,76.11573056 +3,AL,ALJCC004R,C004R,Jefferson_County,City_of_Birmingham,CO_MIX,RE,74.19,3/27/2006,,,SP,Iron as Fe,Total,ug/L,270,=,1047,33.50972222,86.82611111 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/28/2000,,,WI,Iron as Fe,Total,ug/L,1020,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/12/2000,,,WI,Iron as Fe,Total,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,1170,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,1400,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/25/2000,,,WI,Iron as Fe,Total,ug/L,1040,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,280,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/7/2000,,,SP,Iron as Fe,Total,ug/L,370,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/9/2000,,,SP,Iron as Fe,Total,ug/L,230,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,11/1/2000,,,FA,Iron as Fe,Total,ug/L,890,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/16/2001,,,WI,Iron as Fe,Total,ug/L,470,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,120,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/14/2001,,,WI,Iron as Fe,Total,ug/L,260,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/6/2001,,,SP,Iron as Fe,Total,ug/L,470,=,3313,34.17616389,117.9878889 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Iron as Fe,Total,ug/L,410,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,550,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Iron as Fe,Total,ug/L,160,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,120,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Iron as Fe,Total,ug/L,580,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Iron as Fe,Total,ug/L,350,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,280,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Iron as Fe,Total,ug/L,270,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Iron as Fe,Total,ug/L,260,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,260,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Iron as Fe,Total,ug/L,150,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Iron as Fe,Total,ug/L,349,=,120.4,34.16720833,118.2796833 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/26/2000,,,WI,Iron as Fe,Total,ug/L,600,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,530,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/11/2000,,,WI,Iron as Fe,Total,ug/L,200,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,390,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,310,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/24/2000,,,WI,Iron as Fe,Total,ug/L,590,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,460,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/6/2000,,,SP,Iron as Fe,Total,ug/L,300,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/8/2000,,,SP,Iron as Fe,Total,ug/L,470,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/12/2000,,,FA,Iron as Fe,Total,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,310,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/31/2000,,,FA,Iron as Fe,Total,ug/L,430,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/4/2001,,,WI,Iron as Fe,Total,ug/L,6540,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/17/2001,,,WI,Iron as Fe,Total,ug/L,910,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,530,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/30/2001,,,WI,Iron as Fe,Total,ug/L,260,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2001,,,WI,Iron as Fe,Total,ug/L,260,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,230,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,240,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/7/2001,,,SP,Iron as Fe,Total,ug/L,260,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,4/11/2001,,,SP,Iron as Fe,Total,ug/L,426,=,902,33.92917222,118.3708111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/5/2000,,,WI,Iron as Fe,Total,ug/L,660,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/26/2000,,,WI,Iron as Fe,Total,ug/L,910,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,570,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/12/2000,,,WI,Iron as Fe,Total,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/24/2000,,,WI,Iron as Fe,Total,ug/L,1160,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,320,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2000,,,SP,Iron as Fe,Total,ug/L,490,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/9/2000,,,SP,Iron as Fe,Total,ug/L,670,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/12/2000,,,FA,Iron as Fe,Total,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,270,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/30/2000,,,FA,Iron as Fe,Total,ug/L,350,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/4/2001,,,WI,Iron as Fe,Total,ug/L,14300,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/11/2001,,,WI,Iron as Fe,Total,ug/L,1050,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,320,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2001,,,WI,Iron as Fe,Total,ug/L,1890,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/14/2001,,,WI,Iron as Fe,Total,ug/L,200,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,470,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2001,,,SP,Iron as Fe,Total,ug/L,440,=,684,33.82801944,118.2411111 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/26/2000,,,WI,Iron as Fe,Total,ug/L,600,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,430,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/11/2000,,,WI,Iron as Fe,Total,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,570,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/24/2000,,,WI,Iron as Fe,Total,ug/L,1900,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,650,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/6/2000,,,SP,Iron as Fe,Total,ug/L,350,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2000,,,SP,Iron as Fe,Total,ug/L,1250,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/12/2000,,,FA,Iron as Fe,Total,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,430,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/31/2000,,,FA,Iron as Fe,Total,ug/L,610,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/9/2001,,,WI,Iron as Fe,Total,ug/L,1230,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/10/2001,,,WI,Iron as Fe,Total,ug/L,550,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,720,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/29/2001,,,WI,Iron as Fe,Total,ug/L,1850,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2001,,,WI,Iron as Fe,Total,ug/L,320,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,310,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,720,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2001,,,SP,Iron as Fe,Total,ug/L,570,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,4/11/2001,,,SP,Iron as Fe,Total,ug/L,318,=,262,34.23739444,118.5264361 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/28/2000,,,WI,Iron as Fe,Total,ug/L,350,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,540,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/12/2000,,,WI,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/25/2000,,,WI,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,130,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2000,,,SP,Iron as Fe,Total,ug/L,300,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/9/2000,,,SP,Iron as Fe,Total,ug/L,100,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/12/2000,,,FA,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/31/2000,,,FA,Iron as Fe,Total,ug/L,470,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/16/2001,,,WI,Iron as Fe,Total,ug/L,440,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,320,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/14/2001,,,WI,Iron as Fe,Total,ug/L,100,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,100,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,180,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2001,,,SP,Iron as Fe,Total,ug/L,200,=,214.5,34.12700278,118.0494944 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Iron as Fe,Total,ug/L,250,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Iron as Fe,Total,ug/L,470,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/29/2000,,,WI,Iron as Fe,Total,ug/L,170,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Iron as Fe,Total,ug/L,240,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Iron as Fe,Total,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Iron as Fe,Total,ug/L,370,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/9/2001,,,WI,Iron as Fe,Total,ug/L,1890,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Iron as Fe,Total,ug/L,300,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Iron as Fe,Total,ug/L,230,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Iron as Fe,Total,ug/L,120,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Iron as Fe,Total,ug/L,120,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Iron as Fe,Total,ug/L,230,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Iron as Fe,Total,ug/L,300,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Iron as Fe,Total,ug/L,240,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Iron as Fe,Total,ug/L,683,=,130.8,34.14795278,118.2711417 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/14/2010,,0.81,SU,Copper,Dissolved,ug/L,20,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,9/26/2010,,0.26,FA,Copper,Dissolved,ug/L,80,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,10/28/2010,,0.51,FA,Copper,Dissolved,ug/L,50,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,7/21/2012,2.686666667,1.78,SU,Copper,Dissolved,ug/L,6,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,8/13/2012,6.452083333,1.01,SU,Copper,Dissolved,ug/L,10,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,1/30/2013,4.13,1.59,WI,Copper,Dissolved,ug/L,18,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,2/10/2013,3.295833333,2.44,WI,Copper,Dissolved,ug/L,11,=,0.9,33.21388889,87.57138889 +3,AL,ALTUBAMA,Riverwalk_Parking_Lot_near_Bama_Belle,Tuscaloosa,City_of_Tuscaloosa,CO,,68,3/22/2013,3.635416667,0.41,SP,Copper,Dissolved,ug/L,7,=,0.9,33.21388889,87.57138889 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,1/23/2001,12,0.47,WI,Copper,Dissolved,ug/L,21.8,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,2/9/2001,11,1.821,WI,Copper,Dissolved,ug/L,11.5,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,2/19/2001,7,0.971,WI,Copper,Dissolved,ug/L,6.16,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,3/3/2001,1,1.411,SP,Copper,Dissolved,ug/L,18.7,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,3/24/2001,19,0.36,SP,Copper,Dissolved,ug/L,11.7,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,11/24/2001,3,0.993,FA,Copper,Dissolved,ug/L,5.32,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,12/9/2001,4,0.118,WI,Copper,Dissolved,ug/L,10.9,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,12/13/2001,4,0.914,WI,Copper,Dissolved,ug/L,5.33,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,1/1/2002,3,1.485,WI,Copper,Dissolved,ug/L,5.44,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,1/26/2002,20,0.705,WI,Copper,Dissolved,ug/L,9.88,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,2/7/2002,12,0.496,WI,Copper,Dissolved,ug/L,14.4,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,2/16/2002,12,0.859,WI,Copper,Dissolved,ug/L,5.09,=,0.69,38.5975,121.2786111 +6,CA,CACTA001,3_07_Sacramento,Sacramento_County,Caltrans,FW,,95,3/10/2002,3,0.65,SP,Copper,Dissolved,ug/L,3.58,=,0.69,38.5975,121.2786111 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,10/28/2000,2,0.39,FA,Copper,Dissolved,ug/L,12,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2000,1,0.21,WI,Copper,Dissolved,ug/L,9.2,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/7/2001,24,0.491,WI,Copper,Dissolved,ug/L,10,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/23/2001,11,0.26,WI,Copper,Dissolved,ug/L,11,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/25/2001,1,0.821,WI,Copper,Dissolved,ug/L,6.9,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/17/2001,5,0.621,WI,Copper,Dissolved,ug/L,6.8,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/3/2001,1,0.851,SP,Copper,Dissolved,ug/L,4.7,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,4/20/2001,11,0.51,SP,Copper,Dissolved,ug/L,15,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/10/2001,41,0.695,FA,Copper,Dissolved,ug/L,16,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,11/28/2001,5,1.764,FA,Copper,Dissolved,ug/L,5.1,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/13/2001,7,0.96,WI,Copper,Dissolved,ug/L,5.3,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,12/19/2001,2,0.665,WI,Copper,Dissolved,ug/L,6.5,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,1/26/2002,24,0.404,WI,Copper,Dissolved,ug/L,9,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/16/2002,21,0.189,WI,Copper,Dissolved,ug/L,8.2,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,2/19/2002,2,0.443,WI,Copper,Dissolved,ug/L,9.5,=,1.61,38.20638889,122.1380556 +6,CA,CACTA002,4_35_Solano,Solano_County,Caltrans,FW,,100,3/6/2002,14,0.416,SP,Copper,Dissolved,ug/L,11,=,1.61,38.20638889,122.1380556 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,1/23/2001,12.9,0.791,WI,Copper,Dissolved,ug/L,10.5,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,1/25/2001,1.4,0.39,WI,Copper,Dissolved,ug/L,9.17,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,2/11/2001,15.7,0.671,WI,Copper,Dissolved,ug/L,8.37,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,3/4/2001,8.2,1.021,SP,Copper,Dissolved,ug/L,5.16,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,4/6/2001,32.2,0.71,SP,Copper,Dissolved,ug/L,13.6,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,4/20/2001,12.9,0.43,SP,Copper,Dissolved,ug/L,8.56,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,10/30/2001,,0.34,FA,Copper,Dissolved,ug/L,32.6,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,12/14/2001,10.5,0.18,WI,Copper,Dissolved,ug/L,10.4,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,3/6/2002,16.8,0.3,SP,Copper,Dissolved,ug/L,17,=,1.85,36.75083333,119.7925 +6,CA,CACTA003,6_205_Fresno,Fresno_County,Caltrans,FW,,70,3/23/2002,5.8,0.41,SP,Copper,Dissolved,ug/L,9.06,=,1.85,36.75083333,119.7925 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,1/23/2001,12.9,0.941,WI,Copper,Dissolved,ug/L,11.9,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,1/25/2001,1.4,0.39,WI,Copper,Dissolved,ug/L,8.7,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,2/11/2001,16.2,0.751,WI,Copper,Dissolved,ug/L,15.6,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,3/4/2001,8.2,1.061,SP,Copper,Dissolved,ug/L,6.59,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,4/6/2001,32.2,0.71,SP,Copper,Dissolved,ug/L,34.4,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,4/20/2001,12.9,0.35,SP,Copper,Dissolved,ug/L,7.97,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,10/30/2001,,0.39,FA,Copper,Dissolved,ug/L,44.2,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,1/27/2002,23.7,0.1,WI,Copper,Dissolved,ug/L,27.1,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,2/16/2002,20.4,0.6,WI,Copper,Dissolved,ug/L,6.87,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,3/6/2002,16.8,0.25,SP,Copper,Dissolved,ug/L,26.1,=,0.44,36.77583333,119.79 +6,CA,CACTA004,6_209_Fresno,Fresno_County,Caltrans,FW,,70,3/23/2002,5.8,0.42,SP,Copper,Dissolved,ug/L,9.93,=,0.44,36.77583333,119.79 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.571,WI,Copper,Dissolved,ug/L,5.088,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/20/2001,13.2,0.32,SP,Copper,Dissolved,ug/L,27.345,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.6,1.861,FA,Copper,Dissolved,ug/L,54,=,3.16,34.15972222,118.48 +6,CA,CACTA008,7_201_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.1,0.47,WI,Copper,Dissolved,ug/L,67,=,3.16,34.15972222,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/10/2001,14.19999981,0.701,WI,Copper,Dissolved,ug/L,20.551,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.5,1.191,SP,Copper,Dissolved,ug/L,25.785,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/12/2001,13,0.47,FA,Copper,Dissolved,ug/L,77,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.69999981,1.981,FA,Copper,Dissolved,ug/L,36,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/14/2001,19.70000076,0.14,WI,Copper,Dissolved,ug/L,104,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,1.251,WI,Copper,Dissolved,ug/L,43,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Copper,Dissolved,ug/L,125,=,4.18,34.1,118.48 +6,CA,CACTA009,7_202_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.09,SP,Copper,Dissolved,ug/L,167,=,4.18,34.1,118.48 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/19/2001,5.300000191,1.191,WI,Copper,Dissolved,ug/L,6.979,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/24/2001,1,0.45,WI,Copper,Dissolved,ug/L,5.411,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/4/2001,4,0.2,SP,Copper,Dissolved,ug/L,9,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,4/6/2001,31.60000038,1.001,SP,Copper,Dissolved,ug/L,16.161,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,10/30/2001,192.3000031,0.11,FA,Copper,Dissolved,ug/L,182,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,11/24/2001,11.60000038,1.171,FA,Copper,Dissolved,ug/L,25,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,12/20/2001,6.300000191,0.48,WI,Copper,Dissolved,ug/L,23,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,1/27/2002,27.10000038,0.971,WI,Copper,Dissolved,ug/L,40,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,2/17/2002,20.29999924,0.29,WI,Copper,Dissolved,ug/L,34,=,0.96,34.04972222,118.4397222 +6,CA,CACTA010,7_203_Los_Angeles,Los_Angeles_County,Caltrans,FW,,80,3/17/2002,10.69999981,0.41,SP,Copper,Dissolved,ug/L,195,=,0.96,34.04972222,118.4397222 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/28/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/12/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/17/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/25/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/29/2000,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/7/2000,,,SP,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/9/2000,,,SP,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,11/1/2000,,,FA,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/16/2001,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/25/2001,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/14/2001,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/20/2001,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/28/2001,,,WI,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/6/2001,,,SP,Copper,Dissolved,ug/L,5,<,3313,34.17616389,117.9878889 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Copper,Dissolved,ug/L,24.6,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Copper,Dissolved,ug/L,32.5,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Copper,Dissolved,ug/L,11.5,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Copper,Dissolved,ug/L,23.9,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Copper,Dissolved,ug/L,6.97,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Copper,Dissolved,ug/L,9.69,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Copper,Dissolved,ug/L,8.68,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Copper,Dissolved,ug/L,7.26,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Copper,Dissolved,ug/L,5.8,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Copper,Dissolved,ug/L,7.76,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Copper,Dissolved,ug/L,5,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Copper,Dissolved,ug/L,34.2,=,120.4,34.16720833,118.2796833 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/26/2000,,,WI,Copper,Dissolved,ug/L,34.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/1/2000,,,WI,Copper,Dissolved,ug/L,47.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/11/2000,,,WI,Copper,Dissolved,ug/L,29.1,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2000,,,WI,Copper,Dissolved,ug/L,12.1,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/17/2000,,,WI,Copper,Dissolved,ug/L,19.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/22/2000,,,WI,Copper,Dissolved,ug/L,18.9,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/24/2000,,,WI,Copper,Dissolved,ug/L,12.3,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/29/2000,,,WI,Copper,Dissolved,ug/L,29.4,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/6/2000,,,SP,Copper,Dissolved,ug/L,24.1,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/8/2000,,,SP,Copper,Dissolved,ug/L,9.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/12/2000,,,FA,Copper,Dissolved,ug/L,103,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/28/2000,,,FA,Copper,Dissolved,ug/L,58.6,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/31/2000,,,FA,Copper,Dissolved,ug/L,28.5,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/4/2001,,,WI,Copper,Dissolved,ug/L,58.7,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/17/2001,,,WI,Copper,Dissolved,ug/L,32.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/25/2001,,,WI,Copper,Dissolved,ug/L,44,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/30/2001,,,WI,Copper,Dissolved,ug/L,21.6,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2001,,,WI,Copper,Dissolved,ug/L,30.7,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/20/2001,,,WI,Copper,Dissolved,ug/L,28.2,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/28/2001,,,WI,Copper,Dissolved,ug/L,16,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/7/2001,,,SP,Copper,Dissolved,ug/L,16.4,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,4/11/2001,,,SP,Copper,Dissolved,ug/L,60.8,=,902,33.92917222,118.3708111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/5/2000,,,WI,Copper,Dissolved,ug/L,39.7,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/26/2000,,,WI,Copper,Dissolved,ug/L,13.7,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2000,,,WI,Copper,Dissolved,ug/L,14.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/12/2000,,,WI,Copper,Dissolved,ug/L,12.8,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/17/2000,,,WI,Copper,Dissolved,ug/L,5.4,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5.6,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/24/2000,,,WI,Copper,Dissolved,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/29/2000,,,WI,Copper,Dissolved,ug/L,16.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2000,,,SP,Copper,Dissolved,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/9/2000,,,SP,Copper,Dissolved,ug/L,5,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/12/2000,,,FA,Copper,Dissolved,ug/L,12,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/28/2000,,,FA,Copper,Dissolved,ug/L,12.4,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/30/2000,,,FA,Copper,Dissolved,ug/L,5.36,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/4/2001,,,WI,Copper,Dissolved,ug/L,9.33,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/11/2001,,,WI,Copper,Dissolved,ug/L,10.3,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/25/2001,,,WI,Copper,Dissolved,ug/L,12.1,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2001,,,WI,Copper,Dissolved,ug/L,6.48,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/14/2001,,,WI,Copper,Dissolved,ug/L,7.85,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/20/2001,,,WI,Copper,Dissolved,ug/L,7.32,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2001,,,SP,Copper,Dissolved,ug/L,5.45,=,684,33.82801944,118.2411111 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/26/2000,,,WI,Copper,Dissolved,ug/L,10.8,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/1/2000,,,WI,Copper,Dissolved,ug/L,12.5,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/11/2000,,,WI,Copper,Dissolved,ug/L,7.7,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/17/2000,,,WI,Copper,Dissolved,ug/L,7.8,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5.5,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/24/2000,,,WI,Copper,Dissolved,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/29/2000,,,WI,Copper,Dissolved,ug/L,6.5,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/6/2000,,,SP,Copper,Dissolved,ug/L,5.8,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2000,,,SP,Copper,Dissolved,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/12/2000,,,FA,Copper,Dissolved,ug/L,37.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/28/2000,,,FA,Copper,Dissolved,ug/L,7.86,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/31/2000,,,FA,Copper,Dissolved,ug/L,9.89,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/9/2001,,,WI,Copper,Dissolved,ug/L,18.7,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/10/2001,,,WI,Copper,Dissolved,ug/L,10.4,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/25/2001,,,WI,Copper,Dissolved,ug/L,10.9,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/29/2001,,,WI,Copper,Dissolved,ug/L,6.3,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2001,,,WI,Copper,Dissolved,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/20/2001,,,WI,Copper,Dissolved,ug/L,8.64,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/28/2001,,,WI,Copper,Dissolved,ug/L,5.73,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2001,,,SP,Copper,Dissolved,ug/L,5.85,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,4/11/2001,,,SP,Copper,Dissolved,ug/L,5,<,262,34.23739444,118.5264361 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/28/2000,,,WI,Copper,Dissolved,ug/L,11,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/1/2000,,,WI,Copper,Dissolved,ug/L,9.8,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/12/2000,,,WI,Copper,Dissolved,ug/L,8,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/17/2000,,,WI,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/25/2000,,,WI,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/29/2000,,,WI,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2000,,,SP,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/9/2000,,,SP,Copper,Dissolved,ug/L,5,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/12/2000,,,FA,Copper,Dissolved,ug/L,13.1,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/28/2000,,,FA,Copper,Dissolved,ug/L,11.2,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/31/2000,,,FA,Copper,Dissolved,ug/L,10.7,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/16/2001,,,WI,Copper,Dissolved,ug/L,8.93,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/25/2001,,,WI,Copper,Dissolved,ug/L,7.22,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/14/2001,,,WI,Copper,Dissolved,ug/L,7.28,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/20/2001,,,WI,Copper,Dissolved,ug/L,9.24,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/28/2001,,,WI,Copper,Dissolved,ug/L,5.22,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2001,,,SP,Copper,Dissolved,ug/L,6.47,=,214.5,34.12700278,118.0494944 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Copper,Dissolved,ug/L,10,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Copper,Dissolved,ug/L,12.4,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Copper,Dissolved,ug/L,12.2,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/29/2000,,,WI,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Copper,Dissolved,ug/L,5,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Copper,Dissolved,ug/L,22.7,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Copper,Dissolved,ug/L,9.98,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/9/2001,,,WI,Copper,Dissolved,ug/L,16.6,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Copper,Dissolved,ug/L,7.23,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Copper,Dissolved,ug/L,15.1,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Copper,Dissolved,ug/L,9.02,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Copper,Dissolved,ug/L,6.33,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Copper,Dissolved,ug/L,8.31,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Copper,Dissolved,ug/L,5.88,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Copper,Dissolved,ug/L,15.2,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Copper,Dissolved,ug/L,6.95,=,130.8,34.14795278,118.2711417 +9,CO,CODEWAWA,Denver_Wastewater_Building,Denver,Denver,IS,,100,8/8/2008,,1.15,SU,Copper,Dissolved,ug/L,5.5,=,0.192,39.72091944,105.0106 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/13/2000,,0.35,SP,Copper,Dissolved,ug/L,10,<,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,10/20/2000,,0.43,FA,Copper,Dissolved,ug/L,10,<,14,43.62178889,116.2239806 +8,ID,IDADA001,Koppels_Site,Ada_County_Highway_District,Boise_City,CO_MIX,FW,,4/19/2001,,0.03,SP,Copper,Dissolved,ug/L,12.1,=,14,43.62178889,116.2239806 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/13/2000,,0.35,SP,Copper,Dissolved,ug/L,10,<,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,10/20/2000,,0.43,FA,Copper,Dissolved,ug/L,10,<,105,43.66441944,116.2583333 +8,ID,IDADA002,Lucky_Drive_Site,Ada_County_Highway_District,Boise_City,RE,,,4/11/2001,,0.48,SP,Copper,Dissolved,ug/L,2.4,=,105,43.66441944,116.2583333 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,10/20/2000,,0.43,FA,Copper,Dissolved,ug/L,10,<,17,43.60499167,116.3076806 +8,ID,IDADA003,Franklin_Road_Site,Ada_County_Highway_District,Boise_City,RE_MIX,FW,,7/30/2001,,0.03,SU,Copper,Dissolved,ug/L,26.6,=,17,43.60499167,116.3076806 +8,ID,IDADA004,Production_Avenue_Site,Ada_County_Highway_District,Boise_City,ID_MIX,CO,,4/11/2001,,0.48,SP,Copper,Dissolved,ug/L,4,=,18,43.54694444,116.1885556 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,6/2/2001,,0.85,SU,Copper,Dissolved,ug/L,48,=,3.3,42.37619444,71.05944444 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,6/11/2001,,0.2,SU,Copper,Dissolved,ug/L,160,=,3.3,42.37619444,71.05944444 +1,MA,MABOA006,Mount_Vernon_26K099,Suffollk_County,City_of_Boston,RE,,74,7/17/2001,,0.1,SU,Copper,Dissolved,ug/L,150,=,3.3,42.37619444,71.05944444 +1,MA,MABOA007,Wesley_G_Ross_6G108,Suffollk_County,City_of_Boston,OP,,,9/25/2001,,0.39,FA,Copper,Dissolved,ug/L,10,<,11.5,42.26375,71.11119444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/11/2003,,2.35,SP,Copper,Dissolved,ug/L,0.31,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/22/2003,,0.59,SP,Copper,Dissolved,ug/L,0.97,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/26/2003,,0.82,SP,Copper,Dissolved,ug/L,1.2,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,4/25/2004,,0.97,SP,Copper,Dissolved,ug/L,1,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,5/3/2004,,1.01,SP,Copper,Dissolved,ug/L,2,=,19,42.23788889,71.12944444 +1,MA,MABOF208,5F208_HydeParkAve_Hyde_Park,Suffollk_County,City_of_Boston,RE_MIX,IS,,7/24/2004,,1.44,SU,Copper,Dissolved,ug/L,1,=,19,42.23788889,71.12944444 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,4/25/2002,,0.88,SP,Copper,Dissolved,ug/L,0.09,=,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,4/28/2002,,0.36,SP,Copper,Dissolved,ug/L,1.7,=,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,9/27/2002,,0.56,FA,Copper,Dissolved,ug/L,10,<,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,10/16/2002,,0.99,FA,Copper,Dissolved,ug/L,4,<,12,42.26228611,71.11066389 +1,MA,MABOG243,7G243_WesleyGRoss_Hyde_Park,Suffollk_County,City_of_Boston,OP,,,10/26/2002,,0.85,FA,Copper,Dissolved,ug/L,4,<,12,42.26228611,71.11066389 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,3/3/2002,,0.56,SP,Copper,Dissolved,ug/L,18,=,2.1,42.37619444,71.05944444 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,4/25/2002,,0.8,SP,Copper,Dissolved,ug/L,1.1,=,2.1,42.37619444,71.05944444 +1,MA,MABOK397,27K397_Mount_Vernon_St_Charlestown,Suffollk_County,City_of_Boston,RE,,,4/28/2002,,0.21,SP,Copper,Dissolved,ug/L,5.4,=,2.1,42.37619444,71.05944444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,6/27/2000,,0.89,SU,Copper,Dissolved,ug/L,5,<,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,1/8/2001,,0.09,WI,Copper,Dissolved,ug/L,11,=,60,37.49479444,77.52904444 +2,VA,VACHCCC4,CoverLeaf_Mall_CC4,Chesterfield_County,-,CO,,80,12/10/2001,,0.24,WI,Copper,Dissolved,ug/L,9,=,60,37.49479444,77.52904444 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,6/27/2000,,0.74,SU,Copper,Dissolved,ug/L,7,=,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,1/8/2001,,0.07,WI,Copper,Dissolved,ug/L,9,=,10,37.40009722,77.65236944 +2,VA,VACHCCC5,Buck_Rub_Drive_CC5,Chesterfield_County,-,RE,,50,12/10/2001,,0.38,WI,Copper,Dissolved,ug/L,6,=,10,37.40009722,77.65236944 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,6/27/2000,,0.56,SU,Copper,Dissolved,ug/L,2.5,=,10,37.37954167,77.52731389 +2,VA,VACHCN1A,Gates_bluff_1A,Chesterfield_County,-,RE,,10,1/8/2001,,0.08,WI,Copper,Dissolved,ug/L,7,=,10,37.37954167,77.52731389 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,6/27/2000,,1.25,SU,Copper,Dissolved,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCN2A,Helmsley_road_2A,Chesterfield_County,-,RE,,20,1/8/2001,,0.19,WI,Copper,Dissolved,ug/L,5,<,60,37.53152778,77.667725 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,6/27/2000,,0.41,SU,Copper,Dissolved,ug/L,5,<,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,1/8/2001,,0.65,WI,Copper,Dissolved,ug/L,6,=,55.6,37.48011944,77.46317222 +2,VA,VACHCOF5,Laurel_oak_road_OF5,Chesterfield_County,-,RE,,50,12/10/2001,,0.2,WI,Copper,Dissolved,ug/L,10,=,55.6,37.48011944,77.46317222 +2,VA,VANFTYN1,Armisted_Avenue_N1,-,Norfolk,CO_MIX,ID,47,2/12/2000,13,0.29,WI,Copper,Dissolved,ug/L,18.17,=,43,36.86495,76.28491111 +2,VA,VANFTYN5,Sewels_Point_N5,-,Norfolk,RE,,25,2/18/2000,4,0.36,WI,Copper,Dissolved,ug/L,5,<,39,36.87776111,76.23321111 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/28/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/12/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,460,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,320,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/25/2000,,,WI,Iron as Fe,Dissolved,ug/L,970,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,210,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/7/2000,,,SP,Iron as Fe,Dissolved,ug/L,300,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/9/2000,,,SP,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,11/1/2000,,,FA,Iron as Fe,Dissolved,ug/L,360,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/16/2001,,,WI,Iron as Fe,Dissolved,ug/L,260,=,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/14/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,3313,34.17616389,117.9878889 +6,CA,CALACS11,Sawpit_Creek_at_Monrovia_Cr,Los_Angeles_County,City_of_Monrovia,OP,,,3/6/2001,,,SP,Iron as Fe,Dissolved,ug/L,340,=,3313,34.17616389,117.9878889 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Iron as Fe,Dissolved,ug/L,240,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,230,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Iron as Fe,Dissolved,ug/L,160,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Iron as Fe,Dissolved,ug/L,230,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Iron as Fe,Dissolved,ug/L,130,=,120.4,34.16720833,118.2796833 +6,CA,CALACS18,Project_620_at_Glenwood_Rd_Bruce_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Iron as Fe,Dissolved,ug/L,199,=,120.4,34.16720833,118.2796833 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/26/2000,,,WI,Iron as Fe,Dissolved,ug/L,160,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,150,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/11/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,120,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,140,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/24/2000,,,WI,Iron as Fe,Dissolved,ug/L,320,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,170,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/6/2000,,,SP,Iron as Fe,Dissolved,ug/L,240,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/8/2000,,,SP,Iron as Fe,Dissolved,ug/L,230,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/12/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,10/31/2000,,,FA,Iron as Fe,Dissolved,ug/L,120,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/4/2001,,,WI,Iron as Fe,Dissolved,ug/L,200,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/17/2001,,,WI,Iron as Fe,Dissolved,ug/L,370,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,380,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,1/30/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/15/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,190,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,3/7/2001,,,SP,Iron as Fe,Dissolved,ug/L,110,=,902,33.92917222,118.3708111 +6,CA,CALACS23,Dominguez_Channel_at_116th_St_and_Isis Ave,Los_Angeles_County,Unincorporated_Los_Angeles_County,FW_MIX,ID,,4/11/2001,,,SP,Iron as Fe,Dissolved,ug/L,257,=,902,33.92917222,118.3708111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/5/2000,,,WI,Iron as Fe,Dissolved,ug/L,450,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/26/2000,,,WI,Iron as Fe,Dissolved,ug/L,270,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,260,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/12/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/24/2000,,,WI,Iron as Fe,Dissolved,ug/L,940,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,230,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2000,,,SP,Iron as Fe,Dissolved,ug/L,420,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/9/2000,,,SP,Iron as Fe,Dissolved,ug/L,440,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/12/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,10/30/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/4/2001,,,WI,Iron as Fe,Dissolved,ug/L,380,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/11/2001,,,WI,Iron as Fe,Dissolved,ug/L,430,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/1/2001,,,WI,Iron as Fe,Dissolved,ug/L,690,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/14/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,280,=,684,33.82801944,118.2411111 +6,CA,CALACS24,Project_1202_at_Wilmington_Ave_and_220th_St,Los_Angeles_County,City_of_Carson,ID_MIX,UNK,,3/6/2001,,,SP,Iron as Fe,Dissolved,ug/L,250,=,684,33.82801944,118.2411111 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/26/2000,,,WI,Iron as Fe,Dissolved,ug/L,310,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,270,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/11/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,320,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/24/2000,,,WI,Iron as Fe,Dissolved,ug/L,1700,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,340,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/6/2000,,,SP,Iron as Fe,Dissolved,ug/L,270,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2000,,,SP,Iron as Fe,Dissolved,ug/L,930,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/12/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,10/31/2000,,,FA,Iron as Fe,Dissolved,ug/L,280,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/9/2001,,,WI,Iron as Fe,Dissolved,ug/L,250,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/10/2001,,,WI,Iron as Fe,Dissolved,ug/L,230,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,1/29/2001,,,WI,Iron as Fe,Dissolved,ug/L,420,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/15/2001,,,WI,Iron as Fe,Dissolved,ug/L,210,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,260,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,190,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,3/8/2001,,,SP,Iron as Fe,Dissolved,ug/L,430,=,262,34.23739444,118.5264361 +6,CA,CALACS25,Project_474_at_Nordoff_St_Near_California_State_University,Los_Angeles_County,City_of_Los_Angeles,IS,,,4/11/2001,,,SP,Iron as Fe,Dissolved,ug/L,192,=,262,34.23739444,118.5264361 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/28/2000,,,WI,Iron as Fe,Dissolved,ug/L,170,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,130,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/12/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/25/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2000,,,SP,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/9/2000,,,SP,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/12/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,10/31/2000,,,FA,Iron as Fe,Dissolved,ug/L,170,=,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/16/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/14/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS26,Project_404_at_La_Cadena_Ave_and_West_Duarte_Rd,Los_Angeles_County,City_of_Arcadia,RE_MIX,CO,,3/6/2001,,,SP,Iron as Fe,Dissolved,ug/L,100,<,214.5,34.12700278,118.0494944 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/28/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/1/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/11/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/17/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/22/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/25/2000,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/29/2000,,,WI,Iron as Fe,Dissolved,ug/L,111,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/9/2000,,,SP,Iron as Fe,Dissolved,ug/L,170,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,10/28/2000,,,FA,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,11/1/2000,,,FA,Iron as Fe,Dissolved,ug/L,170,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/9/2001,,,WI,Iron as Fe,Dissolved,ug/L,350,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/16/2001,,,WI,Iron as Fe,Dissolved,ug/L,220,=,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/25/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,1/29/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/15/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/20/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,2/28/2001,,,WI,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,3/8/2001,,,SP,Iron as Fe,Dissolved,ug/L,100,<,130.8,34.14795278,118.2711417 +6,CA,CALACS27,Project_156_at_Concord_St_near_W_Wilson_Ave,Los_Angeles_County,City_of_Glendale,RE,,,4/11/2001,,,SP,Iron as Fe,Dissolved,ug/L,634,=,130.8,34.14795278,118.2711417 +9,CO,CODEWAWA,Denver_Wastewater_Building,Denver,Denver,IS,,100,8/8/2008,,1.15,SU,Iron as Fe,Dissolved,ug/L,0.15,=,0.192,39.72091944,105.0106 diff --git a/pybmpdb/tests/test_nsqd.py b/pybmpdb/tests/test_nsqd.py new file mode 100644 index 0000000..bf1cf79 --- /dev/null +++ b/pybmpdb/tests/test_nsqd.py @@ -0,0 +1,42 @@ +from pkg_resources import resource_filename + +import numpy as np +import pandas + +import pytest +import numpy.testing as nptest + +import pybmpdb +from pybmpdb import nsqd + + +class Test_NSQData: + def setup(self): + self.testfile = resource_filename('pybmpdb.tests._data', 'nsqdata.csv') + + self.data = nsqd.NSQData(datapath=self.testfile) + self.known_landuses = np.array([ + 'Commercial', 'Freeway', 'Industrial', 'Institutional', + 'Open Space', 'Residential', 'Unknown' + ]) + + self.known_columns = [ + 'epa_rain_zone', 'state', 'location_code', 'station_name', + 'jurisdiction_county', 'jurisdiction_city', 'primary_landuse', + 'secondary_landuse', 'percent_impervious', 'start_date', + 'days since last rain', 'precipitation_depth_(in)', 'season', + 'parameter', 'fraction', 'units', 'res', 'qual', + 'drainage_area_acres', 'latitude', 'longitude', + ] + + self.known_commerical_copper_shape = (329, 22) + + def test_data(self): + assert (hasattr(self.data, 'data')) + assert isinstance(self.data.data, pandas.DataFrame) + assert (self.data.data.columns.tolist() == self.known_columns) + + def test_data_season(self): + known_seasons = ['FA', 'SP', 'SU', 'WI'] + seasons = sorted(self.data.data['season'].unique().tolist()) + assert (seasons == known_seasons) From 20360df4fdf3a187487f442e2426b8c968bac8f7 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 6 Aug 2018 15:30:59 -0700 Subject: [PATCH 24/48] add engarde to travis list --- .travis.yml | 2 +- pybmpdb/nsqd.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fea8ab4..ea2ee91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ before_install: - conda update --yes conda install: - - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy=1.15 scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest=3.5 pytest-pep8 + - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy=1.15 scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest=3.5 pytest-pep8 engarde - source activate test - pip install git+https://github.com/Geosyntec/wqio.git - pip install codecov diff --git a/pybmpdb/nsqd.py b/pybmpdb/nsqd.py index 702244e..8d20457 100644 --- a/pybmpdb/nsqd.py +++ b/pybmpdb/nsqd.py @@ -39,4 +39,4 @@ def load_data(datapath=None, as_dataframe=False, **kwargs): nsqd = NSQData(datapath=datapath) if as_dataframe: return nsqd.data - return nsqd.to_DataCollection(**kwargs) \ No newline at end of file + return nsqd.to_DataCollection(**kwargs) diff --git a/setup.py b/setup.py index 0ac3e99..b601ad9 100644 --- a/setup.py +++ b/setup.py @@ -34,7 +34,7 @@ def getDataFiles(folder): 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', ] -INSTALL_REQUIRES = ['wqio', 'numpy', 'matplotlib', 'pandas', 'statsmodels', 'openpyxl', 'seaborn'] +INSTALL_REQUIRES = ['wqio', 'numpy', 'matplotlib', 'pandas', 'statsmodels', 'openpyxl', 'seaborn', 'engarde'] PACKAGE_DATA = { 'pybmpdb.data': ['*.csv', '*.sql'], 'pybmpdb.tests._data': ['bmpdata*'], From e4e2ea2349b620fe22fc4baa07b57b5390a7fe57 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Mon, 6 Aug 2018 16:45:29 -0700 Subject: [PATCH 25/48] rename dataAccess to bmpdb --- pybmpdb/__init__.py | 3 +- pybmpdb/{dataAccess.py => bmpdb.py} | 9 ------ pybmpdb/summary.py | 4 +-- .../{test_dataAccess.py => test_bmpdb.py} | 30 +++++++++---------- 4 files changed, 19 insertions(+), 27 deletions(-) rename pybmpdb/{dataAccess.py => bmpdb.py} (94%) rename pybmpdb/tests/{test_dataAccess.py => test_bmpdb.py} (80%) diff --git a/pybmpdb/__init__.py b/pybmpdb/__init__.py index 8d14bff..8f23c5d 100644 --- a/pybmpdb/__init__.py +++ b/pybmpdb/__init__.py @@ -1,4 +1,5 @@ -from .dataAccess import * +from .bmpdb import * from .summary import * +from . import nsqd from .tests import test diff --git a/pybmpdb/dataAccess.py b/pybmpdb/bmpdb.py similarity index 94% rename from pybmpdb/dataAccess.py rename to pybmpdb/bmpdb.py index 1d723d8..598c94a 100644 --- a/pybmpdb/dataAccess.py +++ b/pybmpdb/bmpdb.py @@ -323,15 +323,6 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn ------- transformed : pandas.DataFrame - Example - ------- - >>> csvpath = 'bmp/data/data_pybmpdb.csv' - >>> db = bmp.dataAccess.Database(file=csvpath) - >>> db.transformParameters(['pH'], 'protons', - ... lambda x, junk: wqio.utils.pH2concentration(x[('res', 'pH')]), - ... lambda x, junk: x[('qual', 'pH')], 'mg/L' - ... ) - """ index_name_cache = df.index.names diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 61ce44a..96fcc9b 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -14,7 +14,7 @@ import wqio -from . import dataAccess, info, utils +from . import bmpdb, info, utils def filterlocation(location, count=5, column='bmp'): @@ -153,7 +153,7 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, picker = partial(_pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1]) nitro_combined = 'Nitrogen, NOx as N' - df = dataAccess.transform_parameters( + df = bmpdb.transform_parameters( df, nitro_components, nitro_combined, 'mg/L', partial(picker, maincol='res'), partial(picker, maincol='qual') diff --git a/pybmpdb/tests/test_dataAccess.py b/pybmpdb/tests/test_bmpdb.py similarity index 80% rename from pybmpdb/tests/test_dataAccess.py rename to pybmpdb/tests/test_bmpdb.py index 4892a9c..1047190 100644 --- a/pybmpdb/tests/test_dataAccess.py +++ b/pybmpdb/tests/test_bmpdb.py @@ -19,7 +19,7 @@ except ImportError: pyodbc = None -from pybmpdb import dataAccess +from pybmpdb import bmpdb import wqio @@ -50,12 +50,12 @@ def df_for_quals(): def test__handle_ND_factors(df_for_quals): expected = numpy.array([2, 2, 2, 2, 2, 3, 2, 1, 1, 1]) - result = dataAccess._handle_ND_factors(df_for_quals) + result = bmpdb._handle_ND_factors(df_for_quals) nptest.assert_array_equal(result, expected) def test__handle_ND_qualifiers(df_for_quals): - result = dataAccess._handle_ND_qualifiers(df_for_quals) + result = bmpdb._handle_ND_qualifiers(df_for_quals) expected = numpy.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', 'ND', '=']) nptest.assert_array_equal(result, expected) @@ -65,7 +65,7 @@ def test__process_screening(): 'screen': ['Yes', 'INC', 'No', 'eXC', 'junk'] }) expected = numpy.array(['yes', 'yes', 'no', 'no', 'invalid']) - result = dataAccess._process_screening(df, 'screen') + result = bmpdb._process_screening(df, 'screen') nptest.assert_array_equal(result, expected) @@ -74,37 +74,37 @@ def test__process_sampletype(): 'sampletype': ['SRL GraB asdf', 'SeL cOMPositE df', 'jeL LSDR as'] }) expected = numpy.array(['grab', 'composite', 'unknown']) - result = dataAccess._process_sampletype(df, 'sampletype') + result = bmpdb._process_sampletype(df, 'sampletype') nptest.assert_array_equal(result, expected) def test__check_levelnames(): - dataAccess._check_levelnames(['epazone', 'category']) + bmpdb._check_levelnames(['epazone', 'category']) with pytest.raises(ValueError): - dataAccess._check_levelnames(['site', 'junk']) + bmpdb._check_levelnames(['site', 'junk']) @pytest.mark.skipif('NO_ACCESS') def test_db_connection(): dbfile = get_data_file('bmpdata.accdb') try: - cnn = dataAccess.db_connection(dbfile) + cnn = bmpdb.db_connection(dbfile) assert isinstance(cnn, pyodbc.Connection) cnn.close() except: raise -@patch.object(dataAccess, 'db_connection') +@patch.object(bmpdb, 'db_connection') @patch.object(pandas, 'read_sql', return_value=1) def test_get_data(mock_sql, mock_cnn): - dataAccess.get_data('select * from table', 'test.mdb') + bmpdb.get_data('select * from table', 'test.mdb') mock_sql.assert_called_once_with('select * from table', mock_cnn().__enter__()) -@patch.object(dataAccess, 'get_default_query', return_value='select * from [{}]') -@patch.object(dataAccess, 'get_data') +@patch.object(bmpdb, 'get_default_query', return_value='select * from [{}]') +@patch.object(bmpdb, 'get_data') @pytest.mark.parametrize(('sql', 'table', 'expected_sql'), [ (None, None, 'select * from [bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014]'), ('select * from bmp_data', None, 'select * from bmp_data'), @@ -113,7 +113,7 @@ def test_get_data(mock_sql, mock_cnn): ]) def test_load_from_access(get_data, get_dq, sql, table, expected_sql): dbfile = 'test.mdb' - _ = dataAccess.load_from_access(dbfile, sqlquery=sql, dbtable=table) + _ = bmpdb.load_from_access(dbfile, sqlquery=sql, dbtable=table) get_data.assert_called_once_with( expected_sql, dbfile, @@ -123,7 +123,7 @@ def test_load_from_access(get_data, get_dq, sql, table, expected_sql): @patch.object(pandas, 'read_csv') def test_load_from_csv(read_csv): - dataAccess.load_from_csv('bmp.csv') + bmpdb.load_from_csv('bmp.csv') read_csv.assert_called_once_with('bmp.csv', parse_dates=['sampledate'], encoding='utf-8') @@ -152,7 +152,7 @@ def test_transform_parameters(): old_params = ['A', 'B'] new_param = 'C' - result = dataAccess.transform_parameters( + result = bmpdb.transform_parameters( df, old_params, new_param, 'ug/L', lambda x: 1000 * x['res'].sum(axis=1), lambda x: x[('qual', 'B')], From 30ecfe4ec5fbab09901d416da948e4ad49a16882 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 5 Sep 2018 11:03:28 -0700 Subject: [PATCH 26/48] reflect that we take the avg of dups, not max --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ffa3103..f85f966 100644 --- a/readme.md +++ b/readme.md @@ -21,7 +21,7 @@ In short, `pybmp.prepare_data` does the following: 1. Remove "Biofilter - " from "Biofileter - Grass Strip" and "Biofilter - Grass Swale" 1. Assign the final `units` column as the preferred unit for each analyter per [the parameters dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_parameters.py) 1. Normalize the results based on their original units and final units per the [the units dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_units.py) - 1. Remove duplicate values by selecting the maximum result, most restrictive qualifier, and first sample date based the following index columns: + 1. Remove duplicate values by selecting the mean result, most restrictive qualifier, and first sample date based the following index columns: 1. 'category' 1. 'epazone' 1. 'state' From be4a72fe621b40fc6ac3f9e8c3df41a6c7e3e123 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 25 Oct 2018 18:05:05 -0700 Subject: [PATCH 27/48] add new units and parameters --- pybmpdb/_parameters.py | 241 +++++++++++++++++++++++++++++++++++++++++ pybmpdb/_units.py | 18 +++ 2 files changed, 259 insertions(+) diff --git a/pybmpdb/_parameters.py b/pybmpdb/_parameters.py index 1a25345..4c6cc99 100644 --- a/pybmpdb/_parameters.py +++ b/pybmpdb/_parameters.py @@ -685,6 +685,13 @@ "unicode": "Benzidine", "fraction": "total" }, + { + "name": "benzofluoranthene", + "tex": "Benzofluoranthene", + "units": "ug/L", + "unicode": "Benzofluoranthene", + "fraction": "total" + }, { "name": "benzo(b)fluoranthene", "tex": "Benzo(b)fluoranthene", @@ -1441,6 +1448,20 @@ "unicode": "Escherichia coli", "fraction": "total" }, + { + "name": "male specific coliphage", + "tex": "Male Specific Coliphage", + "units": "PFU/100 mL", + "unicode": "Male Specific Coliphage", + "fraction": "total" + }, + { + "name": "somatic coliphage", + "tex": "Somatic Coliphage", + "units": "PFU/100 mL", + "unicode": "Somatic Coliphage", + "fraction": "total" + }, { "name": "ethyl methacrylate", "tex": "Ethyl Methacrylate", @@ -1721,6 +1742,13 @@ "unicode": "Kjeldahl Nitrogen", "fraction": "suspended" }, + { + "name": "Kjeldahl Phosphate (TKP)", + "tex": "Total Kjeldahl Phosphate", + "units":"mg/L", + "unicode": "Kjeldahl Phosphate", + "fraction": "total" + }, { "name": "lead, dissolved", "tex": "Dissolved Lead", @@ -2701,6 +2729,20 @@ "unicode": "Total Coliform", "fraction": "total" }, + { + "name": "salmonella", + "tex": "Salmonella", + "units": "MPN/100 mL", + "unicode": "Salmonella", + "fraction": "total" + }, + { + "name": "C. perfringens spores", + "tex": "C. perfringens Spores", + "units": "MPN/100 mL", + "unicode": "C. perfringens Spores", + "fraction": "total" + }, { "name": "total dissolved solids", "tex": "Total Dissolved Solids", @@ -3331,6 +3373,205 @@ "unicode": "Particle Size, Percent >50 µm", "fraction": "total" }, + { + "name": "Particle Size, % <0.34 um, >0.21 um", + "tex": "Particle Size, % between 0.34 and 0.21 micros", + "units": "%", + "unicode": "Particle Size, % between 0.34 and 0.21 micros", + "fraction": "total" + }, +# 'Particle Concentration ', +# 'C. perfringens spores ', +# 'Salmonella ', + { + "name": "Particle Size, % <0.43 um, >0.34 um", + "tex": "Particle Size, % between 0.43 and 0.34 microns", + "units": "%", + "unicode": "Particle Size, % between 0.43 and 0.34 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <0.66 um, >0.43 um", + "tex": "Particle Size, % between 0.66 and 0.43 microns", + "units": "%", + "unicode": "Particle Size, % between 0.66 and 0.43 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <1.01 um, >0.66 um", + "tex": "Particle Size, % between 1.01 and 0.66 microns", + "units": "%", + "unicode": "Particle Size, % between 1.01 and 0.66 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <1.69 um, >1.01 um", + "tex": "Particle Size, % between 1.69 and 1.01 microns", + "units": "%", + "unicode": "Particle Size, % between 1.69 and 1.01 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <10.5 um, >7.46 um", + "tex": "Particle Size, % between 10.5 and 7.46 microns", + "units": "%", + "unicode": "Particle Size, % between 10.5 and 7.46 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <1000 um, >42.2 um", + "tex": "Particle Size, % between 1000 and 42.2 microns", + "units": "%", + "unicode": "Particle Size, % between 1000 and 42.2 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <1000 um, >62 um, sum", + "tex": "Particle Size, % between 1000 and 62 um, smicrons", + "units": "%", + "unicode": "Particle Size, % between 1000 and 62 um, smicrons", + "fraction": "total" + }, + { + "name": "Particle Size, % <1000 um, >704 um", + "tex": "Particle Size, % between 1000 and 704 microns", + "units": "%", + "unicode": "Particle Size, % between 1000 and 704 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <125 um, >88 um", + "tex": "Particle Size, % between 125 and 88 microns", + "units": "%", + "unicode": "Particle Size, % between 125 and 88 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <14.9 um, >10.5 um", + "tex": "Particle Size, % between 14.9 and 10.5 microns", + "units": "%", + "unicode": "Particle Size, % between 14.9 and 10.5 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <176 um, >125 um", + "tex": "Particle Size, % between 176 and 125 microns", + "units": "%", + "unicode": "Particle Size, % between 176 and 125 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <2.63 um, >0.10 um, sum", + "tex": "Particle Size, % between 2.63 and 0.10 um, smicrons", + "units": "%", + "unicode": "Particle Size, % between 2.63 and 0.10 um, smicrons", + "fraction": "total" + }, + { + "name": "Particle Size, % <2.63 um, >1.69 um", + "tex": "Particle Size, % between 2.63 and 1.69 microns", + "units": "%", + "unicode": "Particle Size, % between 2.63 and 1.69 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <21.1 um, >14.9 um", + "tex": "Particle Size, % between 21.1 and 14.9 microns", + "units": "%", + "unicode": "Particle Size, % between 21.1 and 14.9 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <250 um, >176 um", + "tex": "Particle Size, % between 250 and 176 microns", + "units": "%", + "unicode": "Particle Size, % between 250 and 176 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <29.8 um, >21.1 um", + "tex": "Particle Size, % between 29.8 and 21.1 microns", + "units": "%", + "unicode": "Particle Size, % between 29.8 and 21.1 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <3.73 um, >2.63 um", + "tex": "Particle Size, % between 3.73 and 2.63 microns", + "units": "%", + "unicode": "Particle Size, % between 3.73 and 2.63 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <352 um, >250 um", + "tex": "Particle Size, % between 352 and 250 microns", + "units": "%", + "unicode": "Particle Size, % between 352 and 250 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <42.2 um", + "tex": "Particle Size, % <42.2 micros", + "units": "%", + "unicode": "Particle Size, % <42.2 micros", + "fraction": "total" + }, + { + "name": "Particle Size, % <42.2 um, >29.8 um", + "tex": "Particle Size, % between 42.2 and 29.8 microns", + "units": "%", + "unicode": "Particle Size, % between 42.2 and 29.8 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <5.27 um, >3.73 um", + "tex": "Particle Size, % between 5.27 and 3.73 microns", + "units": "%", + "unicode": "Particle Size, % between 5.27 and 3.73 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <500 um, >352 um", + "tex": "Particle Size, % between 500 and 352 microns", + "units": "%", + "unicode": "Particle Size, % between 500 and 352 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <62 um, >2.63 um, sum", + "tex": "Particle Size, % between 62 and 2.63 um, smicrons", + "units": "%", + "unicode": "Particle Size, % between 62 and 2.63 um, smicrons", + "fraction": "total" + }, + { + "name": "Particle Size, % <62 um, >42.2 um", + "tex": "Particle Size, % between 62 and 42.2 microns", + "units": "%", + "unicode": "Particle Size, % between 62 and 42.2 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <7.46 um, >5.27 um", + "tex": "Particle Size, % between 7.46 and 5.27 microns", + "units": "%", + "unicode": "Particle Size, % between 7.46 and 5.27 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <704 um, >500 um", + "tex": "Particle Size, % between 704 and 500 microns", + "units": "%", + "unicode": "Particle Size, % between 704 and 500 microns", + "fraction": "total" + }, + { + "name": "Particle Size, % <88 um, >62 um", + "tex": "Particle Size, % between 88 and 62 microns", + "units": "%", + "unicode": "Particle Size, % between 88 and 62 microns", + "fraction": "total" + }, { "name": "chlorophyll a, uncorrected for pheophytin", "tex": "Chlorophyll A (uncorrected for pheophytin)", diff --git a/pybmpdb/_units.py b/pybmpdb/_units.py index 64e2fdc..6e5d9d9 100644 --- a/pybmpdb/_units.py +++ b/pybmpdb/_units.py @@ -35,6 +35,12 @@ "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "MPN/100 mL" }, + { + "name": "MPN/1L", + "factor": 0.1, + "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "MPN/100 mL" + }, { "name": "MPN/100mL", "factor": 1, @@ -53,6 +59,12 @@ "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", "unicode": "CFU/100 mL" }, + { + "name": "PFU/100 mL", + "factor": 1, + "tex": "PFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", + "unicode": "PFU/100 mL" + }, { "name": "NT", "factor": 1, @@ -101,6 +113,12 @@ "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", "unicode": "mg/L" }, + { + "name": "mg CaCO3/L", + "factor": 0.001, + "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", + "unicode": "mg CaCO₃/L" + }, { "name": "ug/L", "factor": 0.000001, From 04dd9e7936392ccf0ed3a336199040734e6fa4c5 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 30 Oct 2018 14:42:39 -0700 Subject: [PATCH 28/48] clean up old comments --- pybmpdb/bmpdb.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 598c94a..0acd386 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -8,6 +8,7 @@ import numpy import pandas +from engarde import checks from . import info, utils @@ -117,7 +118,7 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No def _process_screening(df, screencol): yes = df[screencol].str.lower().isin(['inc', 'yes']) no = df[screencol].str.lower().isin(['exc', 'no']) - return numpy.select([yes, no], ['yes', 'no'], 'invalid') + return wqio.utils.selector('invalid', [yes, 'yes'], [no, 'no']) def _process_sampletype(df, sampletype): @@ -257,13 +258,15 @@ def prepare_data(raw_df): 'category': 'category' } + expected_rows = raw_df.loc[:, 'wq_value'].groupby(lambda x: x > 0).count().loc[True] + biofilters = { 'Biofilter - Grass Swale': 'Grass Swale', 'Biofilter - Grass Strip': 'Grass Strip', } drop_columns = ['ms', '_parameter'] - data = ( + prepped = ( raw_df .fillna({'wq_qual': '='}) .rename(columns=rename_columns) @@ -279,17 +282,19 @@ def prepare_data(raw_df): .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) .assign(units=lambda df: df['units'].map(lambda u: info.getUnits(u, attr='unicode'))) .assign(_parameter=lambda df: df['parameter'].str.lower().str.strip()) - .assign(fraction=lambda df: df['fraction'].str.lower().str.strip()) + .assign(fraction=lambda df: numpy.where(df['_parameter'].str.lower().str.contains('dissolved'), 'dissolved', 'total')) .replace({'category': biofilters}) .pipe(wqio.utils.normalize_units, units_norm, target_units, paramcol='_parameter', rescol='res', unitcol='units', napolicy='raise') .drop(drop_columns, axis=1) .query("res > 0") + .pipe(checks.none_missing, columns=_row_headers) .groupby(by=_row_headers) .agg({'res': 'mean', 'qual': 'min', 'sampledatetime': 'min'}) .set_index('sampledatetime', append=True) + .pipe(checks.unique_index) ) - return data + return prepped def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn, @@ -354,7 +359,6 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn def to_DataCollection(df, **kwargs): # pragma: no cover - selection_dict = wqio.validate.at_least_empty_dict(selection_dict) othergroups = kwargs.pop('othergroups', ['category', 'units']) pairgroups = kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) dc = ( From 4668fc69bbe40f28df95a1580ba31ac0d0fa6f45 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 30 Oct 2018 14:45:03 -0700 Subject: [PATCH 29/48] moved website data generate to repo, clean up --- pybmpdb/summary.py | 210 +++++++++++++++++---------------------------- 1 file changed, 78 insertions(+), 132 deletions(-) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 96fcc9b..fa5e8f4 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -11,10 +11,15 @@ from statsmodels.tools.decorators import ( resettable_cache, cache_readonly ) +from engarde import checks import wqio from . import bmpdb, info, utils +try: + from tqdm import tqdm +except ImportError: + tdqm = wqio.utils.misc.no_op def filterlocation(location, count=5, column='bmp'): @@ -127,10 +132,12 @@ def _filter_by_BMP_count(df, minbmps): def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, removegrabs=True, grab_categories=None, combine_WB_RP=True, - excludedbmps=None, excludedparams=None, balancedonly=True): + excludedbmps=None, excludedparams=None, balancedonly=True, + fixPFCs=True): _cats = utils.get_level_position(df, 'category') grab_categories = wqio.validate.at_least_empty_list(grab_categories) + summarizable = df.copy() if not grab_categories: grab_categories = ['Retention Pond', 'Wetland Basin'] @@ -139,8 +146,15 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, # the original records WBRP_combo = 'Wetland Basin/Retention Pond' - df = wqio.utils.redefine_index_level(df, 'category', WBRP_combo, dropold=False, - criteria=lambda row: row[_cats] in grab_categories) + summarizable = ( + summarizable.pipe( + wqio.utils.redefine_index_level, + 'category', + WBRP_combo, + dropold=False, + criteria=lambda row: row[_cats] in ['Retention Pond', 'Wetland Basin'] + ).pipe(checks.verify_any, lambda df: df.index.get_level_values('category') == WBRP_combo) + ) grab_categories.append(WBRP_combo) if combine_nox: @@ -149,19 +163,32 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', 'Nitrogen, Nitrate (NO3) as N' ] + nitro_combined = 'Nitrogen, NOx as N' picker = partial(_pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1]) - nitro_combined = 'Nitrogen, NOx as N' - df = bmpdb.transform_parameters( - df, nitro_components, nitro_combined, 'mg/L', - partial(picker, maincol='res'), - partial(picker, maincol='qual') + + summarizable = ( + summarizable.pipe( + bmpdb.transform_parameters, + nitro_components, + nitro_combined, + 'mg/L', + partial(picker, maincol='res'), + partial(picker, maincol='qual') + ).pipe(checks.verify_any, lambda df: df.index.get_level_values('parameter') == nitro_combined) ) - PFC = 'Permeable Friction Course' - df = wqio.utils.redefine_index_level(df, 'category', PFC, dropold=True, - criteria=lambda row: row[_cats] == 'PF') + if fixPFCs: + summarizable = ( + summarizable.pipe( + wqio.utils.redefine_index_level, + 'category', + 'Permeable Friction Course', + dropold=True, + criteria=lambda row: row[_cats] == 'PF' + ).pipe(checks.verify_any, lambda df: df.index.get_level_values('category') == PFC) + ) # all data should be compisite data, but grabs are allowed # for bacteria at all BMPs, and all parameter groups at @@ -173,22 +200,23 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, "(((category in @grab_categories) | (paramgroup == 'Biological')) & " " (sampletype != 'unknown'))" ) - df = df.query(querytxt) + summarizable = summarizable.query(querytxt) excludedbmps = wqio.validate.at_least_empty_list(excludedbmps) excludedparams = wqio.validate.at_least_empty_list(excludedparams) - df = ( - df.query("bmp not in @excludedbmps") - .query("parameter not in @excludedparams") - .pipe(_pick_best_sampletype) - .pipe(_pick_best_station) - .pipe(_filter_onesided_BMPs, execute=balancedonly) - .pipe(_filter_by_storm_count, minstorms) - .pipe(_filter_by_BMP_count, minbmps) + summarizable = ( + summarizable + .query("bmp not in @excludedbmps") + .query("parameter not in @excludedparams") + .pipe(_pick_best_sampletype) + .pipe(_pick_best_station) + .pipe(_filter_onesided_BMPs, execute=balancedonly) + .pipe(_filter_by_storm_count, minstorms) + .pipe(_filter_by_BMP_count, minbmps) ) - return df + return summarizable def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): @@ -199,64 +227,6 @@ def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): return wqio.utils.selector('=', ND_neither, ND_in, ND_out, ND_both) -def website_data(df): - # Capitalize some words/phrases - cap_old = ['composite', 'grab', 'unknown', 'ZZ'] - cap_new = ['Composite', 'Grab', 'Unknown', 'ZZ - Unknown'] - - # flag the manufactured devices to be excluded from the - # category-level analysis - _cache_of_index_names = df.index.names - dont_use = ['Manufactured Device'] - df = ( - df.reset_index() - .assign(use=lambda df: numpy.where(df['category'].isin(dont_use), 'no', 'yes')) - .replace(cap_old, cap_new) - .set_index(_cache_of_index_names) - ) - - # To rename columns - bmp_dict = { - 'sampledatetime': 'date', - 'res': 'value' - } - - # Extra columns for flat data - columns_to_drop = [ - 'epazone', - 'storm', - 'watertype', - 'paramgroup', - 'wqscreen', - 'catscreen', - 'balanced', - 'WQID' - ] - - flat = ( - df.reset_index() - .drop(columns_to_drop, axis=1) - .rename(columns=bmp_dict) - .assign(date=lambda df: pandas.to_datetime(df['date']).dt.strftime('%Y-%m-%d')) - ) - - xtab = ( - df.set_index('use', append=True) - .reset_index(level='sampledatetime') - .assign(sampledatetime=lambda df: pandas.to_datetime(df['sampledatetime'])) - .unstack(level='station') - .assign(date=lambda df: df['sampledatetime'].min(axis=1)) - .drop('sampledatetime', axis=1) - .pipe(wqio.utils.flatten_columns) - .dropna(subset=['res_inflow', 'res_outflow']) - .rename(columns={'date_': 'sampledatetime'}) - .assign(pair=lambda df: paired_qual(df)) - .reset_index() - ) - - return flat, xtab - - def setMPLStyle(serif=False): if serif: fontfamily = 'serif' @@ -834,57 +804,33 @@ def _get_fmt(paramgroup): return lambda x: '{:.2f}'.format(x) -def categorical_stats(datacollection): - diff_marks = { - True: '◆', - False: '◇', - None: '◇', - } - stat_dict = {} - for ds in datacollection.datasets('inflow', 'outflow'): - pgroup = ds.definition['paramgroup'] - paramunit = '{} ({})'.format(ds.definition['parameter'], ds.definition['units']) - key = (paramunit, pgroup, ds.definition['category']) - fmt = _get_fmt(pgroup) - - stat_dict[key] = {} - for n, loc in zip(['In', 'Out'], [ds.influent, ds.effluent]): - if loc is not None: - medians = [loc.median] + loc.median_conf_interval.tolist() - stat_dict[key][('EMCs', n)] = loc.N - stat_dict[key][('BMPs', n)] = loc.raw_data.reset_index()['bmp'].unique().shape[0] - stat_dict[key][('25th', n)] = fmt(loc.pctl25) - stat_dict[key][('Median', n)] = '{} ({}, {})'.format(*map(fmt, medians)) - stat_dict[key][('75th', n)] = fmt(loc.pctl75) - else: - stat_dict[key][('EMCs', n)] = 0 - stat_dict[key][('BMPs', n)] = 0 - stat_dict[key][('25th', n)] = None - stat_dict[key][('Median', n)] = None - stat_dict[key][('75th', n)] = None - - if ds.influent is not None and ds.effluent is not None: - truth_array = [ - not ds.medianCIsOverlap if ds.medianCIsOverlap is not None else False, - ds.mannwhitney_p <= 0.05 if ds.mannwhitney_p is not None else False, - ds.wilcoxon_p <= 0.05 if ds.wilcoxon_p is not None else False, - ] - stat_dict[key][('Median', 'Difference')] = ''.join(map(diff_marks.get, truth_array)) - else: - stat_dict[key][('Median', 'Difference')] = None - - final_cols = [ - ('BMPs', 'In'), ('BMPs', 'Out'), - ('EMCs', 'In'), ('EMCs', 'Out'), - ('25th', 'In'), ('25th', 'Out'), - ('Median', 'In'), ('Median', 'Out'), ('Median', 'Difference'), - ('75th', 'In'), ('75th', 'Out'), - ] - index_names = ['paramunit', 'paramgroup', 'BMP Category'] - stat_df = ( - pandas.DataFrame(stat_dict) - .transpose() - .reindex(columns=final_cols) - .rename_axis(index_names, axis='index') +def categorical_stats(dc, simple=False): + return ( + dc.data + .loc[:, dc.groupcols + ['bmp_id']] + .drop_duplicates() + .groupby(dc.groupcols) + .size() + .unstack(level='station') + .fillna(0).astype(int) + .pipe(wqio.utils.add_column_level, 'BMPs', 'result') + .swaplevel(axis='columns') + .join(dc.count.fillna(0).astype(int)) + .join(dc.percentile(25).round(2)) + .join(dc.median.round(2)) + .join(dc.percentile(75).round(2)) + .pipe(wqio.utils.flatten_columns) + .assign(diff_medianci=~wqio.utils.checkIntervalOverlap( + dc.median['inflow'], dc.median['outflow'], axis=1, oneway=False) + ) + .assign(diff_mannwhitney=(dc.mann_whitney['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) + .assign(diff_wilcoxon=(dc.wilcoxon['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) + .assign(diff_symbol=lambda df: + wqio.utils.symbolize_bools( + df.loc[:, lambda df: df.columns.map(lambda c: c.startswith('diff'))], + true_symbol='◆', false_symbol='◇', other_symbol='✖', join_char=' ' + ) + ) + .pipe(wqio.utils.expand_columns, sep='_', names=['result', 'value']) + .swaplevel(axis='columns') ) - return stat_df From 03e19b9fe6d2b84fe8908ee99d87f5e928c6fcd2 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 30 Oct 2018 15:18:13 -0700 Subject: [PATCH 30/48] update testing infrastructure --- .travis.yml | 11 ++++++++--- check_pybmpdb.py | 13 +++++++++++-- codecov.yml | 28 ++++++++++++++++++++++++++++ pybmpdb/__init__.py | 2 +- pybmpdb/_parameters.py | 5 +---- pybmpdb/reports.py | 3 ++- pybmpdb/summary.py | 10 ++++------ pybmpdb/tests/__init__.py | 30 ++++++++++++++++++++++++------ pybmpdb/utils.py | 4 ++-- 9 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 codecov.yml diff --git a/.travis.yml b/.travis.yml index ea2ee91..d38dba7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,13 @@ language: python matrix: include: - - python: 3.5 + - python: 3.7 + language: python + sudo: required + dist: xenial env: - COVERAGE=false + - ARGS="" - python: 3.6 env: - COVERAGE=true @@ -17,14 +21,15 @@ before_install: - conda update --yes conda install: - - conda create --yes --channel=conda-forge -n test python=$TRAVIS_PYTHON_VERSION numpy=1.15 scipy matplotlib statsmodels seaborn mpl-probscale requests pyyaml coverage docopt pytest=3.5 pytest-pep8 engarde + - conda create --name=test python=$TRAVIS_PYTHON_VERSION nomkl --channel=conda-forge --yes - source activate test + - conda install numpy scipy pandas matplotlib statsmodels seaborn mpl-probscale engarde pytest pytest-cov pytest-mpl pytest-pep8 coverage docopt requests pyyaml tqdm --channel=conda-forge --yes - pip install git+https://github.com/Geosyntec/wqio.git - pip install codecov - pip install . --no-deps script: - - coverage run --source pybmpdb check_pybmpdb.py --verbose --pep8 + - coverage run --source pybmpdb check_pybmpdb.py --verbose --strict after_success: - if [ ${COVERAGE} = true ]; then diff --git a/check_pybmpdb.py b/check_pybmpdb.py index ca86802..a158d1b 100644 --- a/check_pybmpdb.py +++ b/check_pybmpdb.py @@ -1,7 +1,16 @@ import sys import matplotlib +from matplotlib import style + matplotlib.use('agg') +style.use('classic') import pybmpdb -status = pybmpdb.test(*sys.argv[1:]) -sys.exit(status) \ No newline at end of file + +if '--strict' in sys.argv: + sys.argv.remove('--strict') + tester = pybmpdb.teststrict +else: + tester = pybmpdb.test + +sys.exit(tester(*sys.argv[1:])) diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..423134f --- /dev/null +++ b/codecov.yml @@ -0,0 +1,28 @@ +comment: true + +codecov: + notify: + require_ci_to_pass: no + +coverage: + status: + patch: + default: + target: 85% + if_no_uploads: error + if_not_found: success + if_ci_failed: failure + project: + default: false + library: + target: auto + if_no_uploads: error + if_not_found: success + if_ci_failed: failure + paths: '!pybmpdb/tests/.*' + tests: + target: auto + if_no_uploads: error + if_not_found: success + if_ci_failed: failure + paths: 'pybmpdb/tests/.*' diff --git a/pybmpdb/__init__.py b/pybmpdb/__init__.py index 8f23c5d..af946ce 100644 --- a/pybmpdb/__init__.py +++ b/pybmpdb/__init__.py @@ -2,4 +2,4 @@ from .summary import * from . import nsqd -from .tests import test +from .tests import test, teststrict diff --git a/pybmpdb/_parameters.py b/pybmpdb/_parameters.py index 4c6cc99..5ddcdae 100644 --- a/pybmpdb/_parameters.py +++ b/pybmpdb/_parameters.py @@ -1745,7 +1745,7 @@ { "name": "Kjeldahl Phosphate (TKP)", "tex": "Total Kjeldahl Phosphate", - "units":"mg/L", + "units": "mg/L", "unicode": "Kjeldahl Phosphate", "fraction": "total" }, @@ -3380,9 +3380,6 @@ "unicode": "Particle Size, % between 0.34 and 0.21 micros", "fraction": "total" }, -# 'Particle Concentration ', -# 'C. perfringens spores ', -# 'Salmonella ', { "name": "Particle Size, % <0.43 um, >0.34 um", "tex": "Particle Size, % between 0.43 and 0.34 microns", diff --git a/pybmpdb/reports.py b/pybmpdb/reports.py index 9df69c8..37c089f 100644 --- a/pybmpdb/reports.py +++ b/pybmpdb/reports.py @@ -1,6 +1,7 @@ -import summary import os +from pybmpdb import summary + def test_run(): report = Report() diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index fa5e8f4..404effe 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -825,12 +825,10 @@ def categorical_stats(dc, simple=False): ) .assign(diff_mannwhitney=(dc.mann_whitney['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) .assign(diff_wilcoxon=(dc.wilcoxon['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) - .assign(diff_symbol=lambda df: - wqio.utils.symbolize_bools( - df.loc[:, lambda df: df.columns.map(lambda c: c.startswith('diff'))], - true_symbol='◆', false_symbol='◇', other_symbol='✖', join_char=' ' - ) - ) + .assign(diff_symbol=lambda df: wqio.utils.symbolize_bools( + df.loc[:, lambda df: df.columns.map(lambda c: c.startswith('diff'))], + true_symbol='◆', false_symbol='◇', other_symbol='✖', join_char=' ' + )) .pipe(wqio.utils.expand_columns, sep='_', names=['result', 'value']) .swaplevel(axis='columns') ) diff --git a/pybmpdb/tests/__init__.py b/pybmpdb/tests/__init__.py index c36a0b9..d5a4143 100644 --- a/pybmpdb/tests/__init__.py +++ b/pybmpdb/tests/__init__.py @@ -1,14 +1,32 @@ from pkg_resources import resource_filename +import warnings -import pybmpdb +from wqio.tests.helpers import requires +try: + import pytest +except ImportError: + pytest = None -def test(*args): - try: - import pytest - except ImportError: - raise ImportError("pytest required run tests") +@requires(pytest, 'pytest') +def test(*args): options = [resource_filename('pybmpdb', '')] options.extend(list(args)) return pytest.main(options) + + +@requires(pytest, 'pytest') +def teststrict(*args): + options = [ + '--pep8', '--doctest-modules', + *list(args) + ] + return test(*list(set(options))) + + +@requires(pytest, 'pytest') +def test_nowarnings(*args): + with warnings.catch_warnings(): + warnings.simplefilter('error') + return teststrict(*args) diff --git a/pybmpdb/utils.py b/pybmpdb/utils.py index 20ee3d6..0c04a4e 100644 --- a/pybmpdb/utils.py +++ b/pybmpdb/utils.py @@ -384,8 +384,8 @@ def processFilename(filename): Example ------- - >>> processFilename('FigureBenzon/Inzo_1') - FigureBenzonInzo1 + >>> processFilename('FigureBenzo/Inzo_1') + 'FigureBenzoInzo1' """ From d6b985fa72c378b99d3b5a02ae1cc9a76cc5faaf Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 31 Oct 2018 15:28:09 -0700 Subject: [PATCH 31/48] restore PFC constant --- pybmpdb/summary.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 404effe..24289c1 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -179,12 +179,13 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, ).pipe(checks.verify_any, lambda df: df.index.get_level_values('parameter') == nitro_combined) ) + PFC = 'Permeable Friction Course' if fixPFCs: summarizable = ( summarizable.pipe( wqio.utils.redefine_index_level, 'category', - 'Permeable Friction Course', + PFC, dropold=True, criteria=lambda row: row[_cats] == 'PF' ).pipe(checks.verify_any, lambda df: df.index.get_level_values('category') == PFC) From f04d4c6d91a98b2fd44ad2aa4bd6444b0365b70c Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 31 Oct 2018 17:13:15 -0700 Subject: [PATCH 32/48] clean up prep_for_summary --- pybmpdb/summary.py | 176 +++++++++++++++++++++++++++------------------ 1 file changed, 108 insertions(+), 68 deletions(-) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 24289c1..a3883d9 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -93,20 +93,19 @@ def _pick_best_sampletype(df): return data -def _filter_onesided_BMPs(df, execute=True): +def _maybe_filter_onesided_BMPs(df, balanced_only): grouplevels = ['site', 'bmp', 'parameter', 'category'] pivotlevel = 'station' - if execute: - data = ( + if balanced_only: + return ( df.unstack(level=pivotlevel) .groupby(level=grouplevels) .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) .stack(level=pivotlevel) ) else: - data = df.copy() - return data + return df def _filter_by_storm_count(df, minstorms): @@ -130,33 +129,26 @@ def _filter_by_BMP_count(df, minbmps): return data -def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, - removegrabs=True, grab_categories=None, combine_WB_RP=True, - excludedbmps=None, excludedparams=None, balancedonly=True, - fixPFCs=True): - - _cats = utils.get_level_position(df, 'category') - grab_categories = wqio.validate.at_least_empty_list(grab_categories) - summarizable = df.copy() - if not grab_categories: - grab_categories = ['Retention Pond', 'Wetland Basin'] - +def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): if combine_WB_RP: # merge Wetland Basins and Retention ponds, keeping # the original records - WBRP_combo = 'Wetland Basin/Retention Pond' - - summarizable = ( - summarizable.pipe( - wqio.utils.redefine_index_level, - 'category', - WBRP_combo, - dropold=False, - criteria=lambda row: row[_cats] in ['Retention Pond', 'Wetland Basin'] - ).pipe(checks.verify_any, lambda df: df.index.get_level_values('category') == WBRP_combo) + wbrp_indiv = ['Retention Pond', 'Wetland Basin'] + wbrp_combo = 'Wetland Basin/Retention Pond' + level_pos = utils.get_level_position(df, catlevel) + return wqio.utils.redefine_index_level( + df, catlevel, wbrp_combo, dropold=False, + criteria=lambda row: row[level_pos] in wbrp_indiv + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(catlevel) == wbrp_combo ) - grab_categories.append(WBRP_combo) + else: + return df + +def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', + qualcol='qual', finalunits='mg/L'): if combine_nox: # combine NO3+NO2 and NO3 into NOx nitro_components = [ @@ -168,56 +160,104 @@ def prep_for_summary(df, minstorms=3, minbmps=3, useTex=False, combine_nox=True, picker = partial(_pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1]) - summarizable = ( - summarizable.pipe( - bmpdb.transform_parameters, - nitro_components, - nitro_combined, - 'mg/L', - partial(picker, maincol='res'), - partial(picker, maincol='qual') - ).pipe(checks.verify_any, lambda df: df.index.get_level_values('parameter') == nitro_combined) + return bmpdb.transform_parameters( + df, nitro_components, nitro_combined, finalunits, + partial(picker, maincol=rescol), partial(picker, maincol=qualcol) + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(paramlevel) == nitro_combined ) - PFC = 'Permeable Friction Course' - if fixPFCs: - summarizable = ( - summarizable.pipe( - wqio.utils.redefine_index_level, - 'category', - PFC, - dropold=True, - criteria=lambda row: row[_cats] == 'PF' - ).pipe(checks.verify_any, lambda df: df.index.get_level_values('category') == PFC) + +def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): + if fix_PFCs: + PFC = 'Permeable Friction Course' + type_level_pos = utils.get_level_position(df, typelevel) + return wqio.utils.redefine_index_level( + df, catlevel, PFC, dropold=True, criteria=lambda row: row[type_level_pos] == 'PF' + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(catlevel) == PFC ) + else: + return df + - # all data should be compisite data, but grabs are allowed - # for bacteria at all BMPs, and all parameter groups at - # retention ponds and wetland basins. Samples of an unknown - # type are excluded - if removegrabs: +def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps): + if remove_grabs: querytxt = ( "(sampletype == 'composite') | " - "(((category in @grab_categories) | (paramgroup == 'Biological')) & " + "(((category in @grab_ok_bmps) | (paramgroup == 'Biological')) & " " (sampletype != 'unknown'))" ) - summarizable = summarizable.query(querytxt) - - excludedbmps = wqio.validate.at_least_empty_list(excludedbmps) - excludedparams = wqio.validate.at_least_empty_list(excludedparams) - - summarizable = ( - summarizable - .query("bmp not in @excludedbmps") - .query("parameter not in @excludedparams") - .pipe(_pick_best_sampletype) - .pipe(_pick_best_station) - .pipe(_filter_onesided_BMPs, execute=balancedonly) - .pipe(_filter_by_storm_count, minstorms) - .pipe(_filter_by_BMP_count, minbmps) - ) + return df.query(querytxt) + else: + return df + + +def prep_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, + remove_grabs=True, grab_ok_bmps='default', balanced_only=True, + fix_PFCs=True, excluded_bmps=None, excluded_params=None): + """ Prepare data for categorical summaries + + Parameter + --------- + df : pandas.DataFrame + minstorms : int (default = 3) + Minimum number of storms (monitoring events) for a BMP study to be included + minbmps : int (default = 3) + Minimum number of BMP studies for a parameter to be included + combine_nox : bool (default = True) + Toggles combining NO3 and NO2+NO3 into as new parameter NOx, giving + preference to NO2+NO3 when both parameters are observed for an event. + The underlying assuption is that NO2 concentrations are typically much + smaller than NO3, thus NO2+NO3 ~ NO3. + combine_WB_RP : bool (default = True) + Toggles combining Retention Pond and Wetland Basin data into a new + BMP category: Retention Pond/Wetland Basin. + remove_grabs : bool (default = True) + Toggles removing grab samples from the dataset except for: + * biological parameters + * BMPs categories that are whitelisted via *grab_ok_bmps + grab_ok_bmps : sequence of str, optional + BMP categories for which grab data should be included. By default, this + inclues Retention Ponds, Wetland Basins, and the combined + Retention Pond/Wetland Basin category created when *combine_WB_RP* is + True. + balanced_only : bool (default = True) + Toggles removing BMP studies which have only influent or effluent data, + exclusively. + fix_PFCs : bool (default = True) + Makes correction to the category of Permeable Friction Course BMPs + excluded_bmps, excluded_params : sequence of str, optional + List of BMPs studies and parameters to exclude from the data. + + Returns + ------- + summarizable : pandas.DataFrame + + """ + + if grab_ok_bmps == 'default': + grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] + + grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) + excluded_bmps = wqio.validate.at_least_empty_list(excluded_bmps) + excluded_params = wqio.validate.at_least_empty_list(excluded_params) - return summarizable + return ( + df.pipe(_maybe_combine_WB_RP, combine_WB_RP) + .pipe(_maybe_combine_nox, combine_nox) + .pipe(_maybe_fix_PFCs, fix_PFCs) + .pipe(_maybe_remove_grabs, remove_grabs, grab_ok_bmps) + .query("bmp not in @excluded_bmps") + .query("parameter not in @excluded_params") + .pipe(_pick_best_sampletype) + .pipe(_pick_best_station) + .pipe(_maybe_filter_onesided_BMPs, balanced_only) + .pipe(_filter_by_storm_count, minstorms) + .pipe(_filter_by_BMP_count, minbmps) + ) def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): From d7e86639912e9920996d87507180393fd6178e58 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 31 Oct 2018 17:37:11 -0700 Subject: [PATCH 33/48] clean up summary tests --- pybmpdb/tests/test_summary.py | 70 +++++++---------------------------- 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 00d1e1a..5bbeb20 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -667,7 +667,19 @@ def expected_latext_content(): return content -def _do_filter_test(index_cols, infilename, outfilename, fxn, *args): +@pytest.mark.parametrize(('fxn', 'args', 'index_cols', 'infilename', 'outfilename'), [ + (summary._pick_best_station, [], ['site', 'bmp', 'storm', 'parameter', 'station'], + 'test_pick_station_input.csv', 'test_pick_station_output.csv'), + (summary._pick_best_sampletype, [], ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'], + 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv'), + (summary._maybe_filter_onesided_BMPs, [True], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], + 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), + (summary._filter_by_storm_count, [6], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], + 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv'), + (summary._filter_by_BMP_count, [4], ['category', 'site', 'bmp', 'parameter', 'station'], + 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv',), +]) +def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): infile = get_data_file(infilename) outfile = get_data_file(outfilename) @@ -688,62 +700,6 @@ def test__pick_non_null(): nptest.assert_array_equal(result, expected) -def test__pick_best_station(): - index_cols = ['site', 'bmp', 'storm', 'parameter', 'station'] - _do_filter_test( - index_cols, - 'test_pick_station_input.csv', - 'test_pick_station_output.csv', - summary._pick_best_station - ) - - -def test__pick_best_sampletype(): - index_cols = ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'] - - _do_filter_test( - index_cols, - 'test_pick_sampletype_input.csv', - 'test_pick_sampletype_output.csv', - summary._pick_best_sampletype - ) - - -def test__filter_onesided_BMPs(): - index_cols = ['category', 'site', 'bmp', 'storm', 'parameter', 'station'] - - _do_filter_test( - index_cols, - 'test_filter_onesidedbmps_input.csv', - 'test_filter_onesidedbmps_output.csv', - summary._filter_onesided_BMPs - ) - - -def test__filter_by_storm_count(): - index_cols = ['category', 'site', 'bmp', 'storm', 'parameter', 'station'] - - _do_filter_test( - index_cols, - 'test_filter_bmp-storm_counts_input.csv', - 'test_filter_storm_counts_output.csv', - summary._filter_by_storm_count, - 6 - ) - - -def test__filter_by_BMP_count(): - index_cols = ['category', 'site', 'bmp', 'parameter', 'station'] - - _do_filter_test( - index_cols, - 'test_filter_bmp-storm_counts_input.csv', - 'test_filter_bmp_counts_output.csv', - summary._filter_by_BMP_count, - 4 - ) - - def test_paired_qual(): df = pandas.DataFrame({ 'in_qual': ['=', '=', 'ND', 'ND'], From 4dac16d146c61be3322efd8f2e9c7750d1c92d24 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 1 Nov 2018 16:49:34 -0700 Subject: [PATCH 34/48] tests for components of the summary prep --- pybmpdb/summary.py | 19 +++++----- pybmpdb/tests/_data/test_NOx_output.csv | 21 +++++++++++ pybmpdb/tests/_data/test_PFCs_input.csv | 13 +++++++ pybmpdb/tests/_data/test_PFCs_output.csv | 13 +++++++ pybmpdb/tests/_data/test_WBRP_NOx_input.csv | 13 +++++++ pybmpdb/tests/_data/test_WBRP_output.csv | 25 +++++++++++++ pybmpdb/tests/_data/test_grabsample_input.csv | 13 +++++++ .../tests/_data/test_grabsample_output.csv | 10 ++++++ pybmpdb/tests/test_summary.py | 36 ++++++++++++++----- 9 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 pybmpdb/tests/_data/test_NOx_output.csv create mode 100644 pybmpdb/tests/_data/test_PFCs_input.csv create mode 100644 pybmpdb/tests/_data/test_PFCs_output.csv create mode 100644 pybmpdb/tests/_data/test_WBRP_NOx_input.csv create mode 100644 pybmpdb/tests/_data/test_WBRP_output.csv create mode 100644 pybmpdb/tests/_data/test_grabsample_input.csv create mode 100644 pybmpdb/tests/_data/test_grabsample_output.csv diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index a3883d9..accab4d 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -167,6 +167,8 @@ def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', checks.verify_any, lambda df: df.index.get_level_values(paramlevel) == nitro_combined ) + else: + return df def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): @@ -174,7 +176,8 @@ def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): PFC = 'Permeable Friction Course' type_level_pos = utils.get_level_position(df, typelevel) return wqio.utils.redefine_index_level( - df, catlevel, PFC, dropold=True, criteria=lambda row: row[type_level_pos] == 'PF' + df, catlevel, PFC, dropold=True, + criteria=lambda row: row[type_level_pos] == 'PF' ).pipe( checks.verify_any, lambda df: df.index.get_level_values(catlevel) == PFC @@ -183,7 +186,11 @@ def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): return df -def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps): +def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): + if grab_ok_bmps == 'default': + grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] + + grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) if remove_grabs: querytxt = ( "(sampletype == 'composite') | " @@ -217,8 +224,8 @@ def prep_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP BMP category: Retention Pond/Wetland Basin. remove_grabs : bool (default = True) Toggles removing grab samples from the dataset except for: - * biological parameters - * BMPs categories that are whitelisted via *grab_ok_bmps + - biological parameters + - BMPs categories that are whitelisted via *grab_ok_bmps* grab_ok_bmps : sequence of str, optional BMP categories for which grab data should be included. By default, this inclues Retention Ponds, Wetland Basins, and the combined @@ -238,10 +245,6 @@ def prep_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP """ - if grab_ok_bmps == 'default': - grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] - - grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) excluded_bmps = wqio.validate.at_least_empty_list(excluded_bmps) excluded_params = wqio.validate.at_least_empty_list(excluded_params) diff --git a/pybmpdb/tests/_data/test_NOx_output.csv b/pybmpdb/tests/_data/test_NOx_output.csv new file mode 100644 index 0000000..40d114d --- /dev/null +++ b/pybmpdb/tests/_data/test_NOx_output.csv @@ -0,0 +1,21 @@ +bmp,category,storm,units,parameter,res,qual +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",10.0,= +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",8.0,< +A,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",12.0,= +A,Wetland Basin,3,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",14.0,= +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",16.0,< +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",17.0,< +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",18.0,= +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",19.0,= +C,Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",20.0,< +D,Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",22.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",23.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",24.0,= +A,Wetland Basin,1,mg/L,"Nitrogen, NOx as N",10.0,= +A,Wetland Basin,2,mg/L,"Nitrogen, NOx as N",12.0,= +A,Wetland Basin,3,mg/L,"Nitrogen, NOx as N",14.0,= +B,Wetland Basin,1,mg/L,"Nitrogen, NOx as N",16.0,< +B,Wetland Basin,2,mg/L,"Nitrogen, NOx as N",18.0,= +C,Retention Pond,1,mg/L,"Nitrogen, NOx as N",20.0,< +D,Retention Pond,1,mg/L,"Nitrogen, NOx as N",22.0,= +D,Retention Pond,2,mg/L,"Nitrogen, NOx as N",24.0,= diff --git a/pybmpdb/tests/_data/test_PFCs_input.csv b/pybmpdb/tests/_data/test_PFCs_input.csv new file mode 100644 index 0000000..fd915f4 --- /dev/null +++ b/pybmpdb/tests/_data/test_PFCs_input.csv @@ -0,0 +1,13 @@ +bmp,category,bmptype,storm,parameter,res,qual +A,Wetland Basin,WB,1,Cu,10,= +A,Wetland Basin,WB,1,Zn,8,< +A,Wetland Basin,WB,2,Cu,12,= +A,Wetland Basin,WB,3,Zn,14,= +B,Wetland Basin,WB,1,Cu,16,< +B,Wetland Basin,WB,1,Zn,17,< +B,Wetland Basin,PF,2,Cu,18,= +B,Wetland Basin,PF,2,Zn,19,= +C,Retention Pond,RP,1,Cu,20,< +D,Retention Pond,RP,1,Zn,22,= +D,Retention Pond,RP,2,Cu,23,= +D,Retention Pond,PF,2,Zn,24,= diff --git a/pybmpdb/tests/_data/test_PFCs_output.csv b/pybmpdb/tests/_data/test_PFCs_output.csv new file mode 100644 index 0000000..30c79d2 --- /dev/null +++ b/pybmpdb/tests/_data/test_PFCs_output.csv @@ -0,0 +1,13 @@ +bmp,category,bmptype,storm,parameter,res,qual +A,Wetland Basin,WB,1,Cu,10,= +A,Wetland Basin,WB,1,Zn,8,< +A,Wetland Basin,WB,2,Cu,12,= +A,Wetland Basin,WB,3,Zn,14,= +B,Wetland Basin,WB,1,Cu,16,< +B,Wetland Basin,WB,1,Zn,17,< +B,Permeable Friction Course,PF,2,Cu,18,= +B,Permeable Friction Course,PF,2,Zn,19,= +C,Retention Pond,RP,1,Cu,20,< +D,Retention Pond,RP,1,Zn,22,= +D,Retention Pond,RP,2,Cu,23,= +D,Permeable Friction Course,PF,2,Zn,24,= diff --git a/pybmpdb/tests/_data/test_WBRP_NOx_input.csv b/pybmpdb/tests/_data/test_WBRP_NOx_input.csv new file mode 100644 index 0000000..7986e12 --- /dev/null +++ b/pybmpdb/tests/_data/test_WBRP_NOx_input.csv @@ -0,0 +1,13 @@ +bmp,category,storm,units,parameter,res,qual +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",10.0,= +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",8.0,< +A,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",12.0,= +A,Wetland Basin,3,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",14.0,= +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",16.0,< +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",17.0,< +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",18.0,= +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",19.0,= +C,Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",20.0,< +D,Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",22.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",23.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",24.0,= diff --git a/pybmpdb/tests/_data/test_WBRP_output.csv b/pybmpdb/tests/_data/test_WBRP_output.csv new file mode 100644 index 0000000..8e95d61 --- /dev/null +++ b/pybmpdb/tests/_data/test_WBRP_output.csv @@ -0,0 +1,25 @@ +bmp,category,storm,units,parameter,res,qual +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",10.0,= +A,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",8.0,< +A,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",12.0,= +A,Wetland Basin,3,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",14.0,= +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",16.0,< +B,Wetland Basin,1,mg/L,"Nitrogen, Nitrate (NO3) as N",17.0,< +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",18.0,= +B,Wetland Basin,2,mg/L,"Nitrogen, Nitrate (NO3) as N",19.0,= +C,Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",20.0,< +D,Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",22.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",23.0,= +D,Retention Pond,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",24.0,= +A,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",10.0,= +A,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",8.0,< +A,Wetland Basin/Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",12.0,= +A,Wetland Basin/Retention Pond,3,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",14.0,= +B,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",16.0,< +B,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",17.0,< +B,Wetland Basin/Retention Pond,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",18.0,= +B,Wetland Basin/Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",19.0,= +C,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",20.0,< +D,Wetland Basin/Retention Pond,1,mg/L,"Nitrogen, Nitrate (NO3) as N",22.0,= +D,Wetland Basin/Retention Pond,2,mg/L,"Nitrogen, Nitrate (NO3) as N",23.0,= +D,Wetland Basin/Retention Pond,2,mg/L,"Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N",24.0,= diff --git a/pybmpdb/tests/_data/test_grabsample_input.csv b/pybmpdb/tests/_data/test_grabsample_input.csv new file mode 100644 index 0000000..bb84d2a --- /dev/null +++ b/pybmpdb/tests/_data/test_grabsample_input.csv @@ -0,0 +1,13 @@ +bmp,category,paramgroup,sampletype,storm,res,qual +A,Bioretention,metals,composite,1,10.0,= +A,Bioretention,metals,grab,1,8.0,< +A,Bioretention,metals,composite,2,12.0,= +A,Bioretention,metals,grab,3,14.0,= +B,Retention Pond,metals,composite,1,16.0,< +B,Retention Pond,metals,grab,1,17.0,< +B,Retention Pond,metals,grab,2,18.0,= +C,Wetland Basin,metals,grab,1,20.0,< +D,Bioretention,metals,composite,1,22.0,= +D,Bioretention,metals,unknown,2,23.0,= +D,Bioretention,metals,composite,2,24.0,= +D,Bioretention,Biological,composite,3,26.0,= diff --git a/pybmpdb/tests/_data/test_grabsample_output.csv b/pybmpdb/tests/_data/test_grabsample_output.csv new file mode 100644 index 0000000..60d3cf0 --- /dev/null +++ b/pybmpdb/tests/_data/test_grabsample_output.csv @@ -0,0 +1,10 @@ +bmp,category,paramgroup,sampletype,storm,res,qual +A,Bioretention,metals,composite,1,10.0,= +A,Bioretention,metals,composite,2,12.0,= +B,Retention Pond,metals,composite,1,16.0,< +B,Retention Pond,metals,grab,1,17.0,< +B,Retention Pond,metals,grab,2,18.0,= +C,Wetland Basin,metals,grab,1,20.0,< +D,Bioretention,metals,composite,1,22.0,= +D,Bioretention,metals,composite,2,24.0,= +D,Bioretention,Biological,composite,3,26.0,= diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 5bbeb20..5871a19 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -14,8 +14,10 @@ import numpy from matplotlib import pyplot import pandas +from engarde import checks -from pybmpdb import summary +import wqio +from pybmpdb import summary, utils, bmpdb mock_figure = mock.Mock(spec=pyplot.Figure) @@ -672,24 +674,42 @@ def expected_latext_content(): 'test_pick_station_input.csv', 'test_pick_station_output.csv'), (summary._pick_best_sampletype, [], ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'], 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv'), - (summary._maybe_filter_onesided_BMPs, [True], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], - 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), (summary._filter_by_storm_count, [6], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv'), (summary._filter_by_BMP_count, [4], ['category', 'site', 'bmp', 'parameter', 'station'], 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv',), ]) def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): - infile = get_data_file(infilename) - outfile = get_data_file(outfilename) - - input_df = pandas.read_csv(infile, index_col=index_cols) - expected_df = pandas.read_csv(outfile, index_col=index_cols).sort_index() + input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) + expected_df = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() test_df = fxn(input_df, *args).sort_index() pdtest.assert_frame_equal(expected_df.reset_index(), test_df.reset_index()) +@pytest.mark.parametrize('doit', [True, False]) +@pytest.mark.parametrize(('fxn', 'index_cols', 'infilename', 'outfilename'), [ + (summary._maybe_filter_onesided_BMPs, ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], + 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), + (summary._maybe_combine_nox, ['bmp', 'category', 'storm', 'units', 'parameter'], + 'test_WBRP_NOx_input.csv', 'test_NOx_output.csv'), + (summary._maybe_combine_WB_RP, ['bmp', 'category', 'storm', 'units', 'parameter'], + 'test_WBRP_NOx_input.csv', 'test_WBRP_output.csv'), + (summary._maybe_fix_PFCs, ['bmp', 'category', 'bmptype', 'storm', 'parameter'], + 'test_PFCs_input.csv', 'test_PFCs_output.csv'), + (summary._maybe_remove_grabs, ['bmp', 'category', 'sampletype', 'storm'], + 'test_grabsample_input.csv', 'test_grabsample_output.csv') +]) +def test__maybe_filter_functions(fxn, doit, index_cols, infilename, outfilename): + input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) + result = fxn(input_df, doit).sort_index() + if doit: + expected = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() + else: + expected = input_df.copy().sort_index() + pdtest.assert_frame_equal(result, expected) + + def test__pick_non_null(): df = pandas.DataFrame({ ('res', 'this'): [1.0, numpy.nan, 2.0, numpy.nan], From f06a3363c0f7272120911c8d237a18315e1c3f39 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Fri, 2 Nov 2018 11:40:28 -0700 Subject: [PATCH 35/48] move data prep stuff out of summary and clean up NSQD (#45) move data prep stuff out of summary and clean up NSQD --- pybmpdb/bmpdb.py | 461 ++++++++++++++++++++++++---------- pybmpdb/nsqd.py | 46 ++-- pybmpdb/summary.py | 288 +-------------------- pybmpdb/tests/test_bmpdb.py | 119 +++++---- pybmpdb/tests/test_nsqd.py | 47 ++-- pybmpdb/tests/test_summary.py | 61 ----- pybmpdb/utils.py | 43 ++++ 7 files changed, 479 insertions(+), 586 deletions(-) diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 0acd386..683f433 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -1,5 +1,7 @@ import os from pkg_resources import resource_filename +from functools import partial +from pathlib import Path try: import pyodbc @@ -16,14 +18,9 @@ __all__ = [ - 'db_connection', - 'get_default_query', - 'get_data', - 'load_from_access', - 'load_from_csv', - 'prepare_data', + 'load_data', 'transform_parameters', - 'to_DataCollection' + 'paired_qual', ] @@ -139,98 +136,245 @@ def _check_levelnames(levels): raise ValueError(msg) -def db_connection(dbfile, driver=None): - """ Connect to an Access database with pyodbc +def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn, + indexMods=None, paramlevel='parameter'): + """ Apply an arbitrary transformation to a parameter in the data Parameters - dbfile : str - Path to the Access database file - driver : str, optional - Database driver to be used by pyodbc. Defaults to - "{Microsoft Access Driver (*.mdb, *.accdb)}" + ---------- + df : pandas.DataFrame + existingparams : list of strings + List of the existing parameters that will be used to compute + the new values + newparam : string + Name of the new parameter to be generated + newunits : string + Units of the newly computed values + resfxn : callable + Function (or lambda) that will determine the result of + ``newparam`` based on the values of ``existingparams``. + Function must assume to be operating on a row of + ``self.data`` with the elements of ``existingparams`` stored + as columns. + qualfxn : function + Same as ``resfxn``, but for determining the final qualifier + of the ``newparam`` results. + indexMods : dict, optional (keys = index level names) + Dictionary of index level name whose values are the new + values of those levels where ``parameter == newparam``. Returns ------- - connection + transformed : pandas.DataFrame """ - if driver is None: - driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' + index_name_cache = df.index.names + existingparams = wqio.validate.at_least_empty_list(existingparams) - connection_string = r'Driver={};DBQ={}'.format(driver, os.path.abspath(dbfile)) - try: - cnn = pyodbc.connect(connection_string) - return cnn - except: - msg = "Unable to connect to {} using {}" - raise RuntimeError(msg.format(dbfile, driver)) + transformed = ( + df.query("{} in @existingparams".format(paramlevel)) + .pipe(utils.refresh_index) + .unstack(level=paramlevel) + .pipe(wqio.utils.assign_multilevel_column, qualfxn, 'qual', newparam) + .pipe(wqio.utils.assign_multilevel_column, resfxn, 'res', newparam) + .xs(newparam, level=paramlevel, axis='columns', drop_level=False) + .stack(level=paramlevel) + ) + indexMods = wqio.validate.at_least_empty_dict(indexMods, units=newunits) + # add the units into indexMod, apply all changes + indexMods['units'] = newunits + for levelname, value in indexMods.items(): + transformed = wqio.utils.redefine_index_level(transformed, levelname, value, + criteria=None, dropold=True) -def get_default_query(): # pragma: no cover - """ Loads the default BMP Database query packaged with pybmpdb. - """ + # return the *full* dataset (preserving original params) + result = pandas.concat([ + df.reset_index(), + transformed.reset_index() + ], sort=False).set_index(index_name_cache) + return result - sqlfile = resource_filename('pybmpdb.data', 'default.sql') - with open(sqlfile, 'r') as sql: - sqlquery = sql.read() - return sqlquery +def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): + ND_neither = [(df[qualin] == '=') & (df[qualout] == '='), 'Pair'] + ND_in = [(df[qualin] == 'ND') & (df[qualout] == '='), 'Influent ND'] + ND_out = [(df[qualin] == '=') & (df[qualout] == 'ND'), 'Effluent ND'] + ND_both = [(df[qualin] == 'ND') & (df[qualout] == 'ND'), 'Both ND'] + return wqio.utils.selector('=', ND_neither, ND_in, ND_out, ND_both) + + +def _pick_non_null(df, maincol, preferred, secondary): + return df[(maincol, preferred)].combine_first(df[(maincol, secondary)]) + + +def _pick_best_station(df): + def best_col(df, mainstation, backupstation, valcol): + for sta in [mainstation, backupstation]: + if (sta, valcol) not in df.columns: + df = wqio.utils.assign_multilevel_column(df, numpy.nan, sta, valcol) + + return df[(mainstation, valcol)].combine_first(df[(backupstation, valcol)]) + + orig_index = df.index.names + data = ( + df.pipe(utils.refresh_index) + .unstack(level='station') + .pipe(wqio.utils.swap_column_levels, 0, 1) + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'outflow', 'subsurface', 'res'), + 'final_outflow', 'res') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'outflow', 'subsurface', 'qual'), + 'final_outflow', 'qual') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'inflow', 'reference outflow', 'res'), + 'final_inflow', 'res') + .pipe(wqio.utils.assign_multilevel_column, + lambda df: best_col(df, 'inflow', 'reference outflow', 'qual'), + 'final_inflow', 'qual') + .loc[:, lambda df: df.columns.map(lambda c: 'final_' in c[0])] + .rename(columns=lambda col: col.replace('final_', '')) + .stack(level='station') + ) -def get_data(cmd, dbfile, driver=None): - """ Fetch data from an Access database + return data - Parameters - ---------- - cmd : str - SQL (JET) query to run - dbfile : str - Path to the database file - driver : str, optional - Database driver for `pyodbc` - Returns - ------- - query_data : pandas.DataFrame +def _pick_best_sampletype(df): + orig_cols = df.columns + xtab = df.pipe(utils.refresh_index).unstack(level='sampletype') + for col in orig_cols: + grabvalues = numpy.where( + xtab[(col, 'composite')].isnull(), + xtab[(col, 'grab')], + numpy.nan + ) + xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, 'grab') - """ + data = ( + xtab.loc[:, xtab.columns.map(lambda c: c[1] != 'unknown')] + .stack(level=['sampletype']) + ) + return data - with db_connection(dbfile, driver=driver) as cnn: - return pandas.read_sql(cmd, cnn) +def _maybe_filter_onesided_BMPs(df, balanced_only): + grouplevels = ['site', 'bmp', 'parameter', 'category'] + pivotlevel = 'station' -def load_from_access(dbfile, sqlquery=None, dbtable=None): - """ Load BMP performance data from the Access database + if balanced_only: + return ( + df.unstack(level=pivotlevel) + .groupby(level=grouplevels) + .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) + .stack(level=pivotlevel) + ) + else: + return df - Parameters - ---------- - dbfile : str - Path to the Access database. - sqlquery : str, optional - SQL (JET) query to run. - Returns - ------- - bmpdata : pandas.DataFrame - - """ +def _filter_by_storm_count(df, minstorms): + # filter out all monitoring stations with less than /N/ storms + grouplevels = ['site', 'bmp', 'parameter', 'station'] - driver = r'{Microsoft Access Driver (*.mdb, *.accdb)}' - if not sqlquery: - if dbtable: - sqlquery = "select * from {}".format(dbtable) - else: - dbtable = 'bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014' - sqlquery = get_default_query().format(dbtable) + data = ( + df.groupby(level=grouplevels) + .filter(lambda g: g.count()['res'] >= minstorms) + ) + return data - return get_data(sqlquery, dbfile, driver=driver) +def _filter_by_BMP_count(df, minbmps): + grouplevels = ['category', 'parameter', 'station'] -def load_from_csv(csvfile): + data = ( + df.groupby(level=grouplevels) + .filter(lambda g: g.index.get_level_values('bmp').unique().shape[0] >= minbmps) + ) + return data + + +def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): + if combine_WB_RP: + # merge Wetland Basins and Retention ponds, keeping + # the original records + wbrp_indiv = ['Retention Pond', 'Wetland Basin'] + wbrp_combo = 'Wetland Basin/Retention Pond' + level_pos = utils.get_level_position(df, catlevel) + return wqio.utils.redefine_index_level( + df, catlevel, wbrp_combo, dropold=False, + criteria=lambda row: row[level_pos] in wbrp_indiv + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(catlevel) == wbrp_combo + ) + else: + return df + + +def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', + qualcol='qual', finalunits='mg/L'): + if combine_nox: + # combine NO3+NO2 and NO3 into NOx + nitro_components = [ + 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', + 'Nitrogen, Nitrate (NO3) as N' + ] + nitro_combined = 'Nitrogen, NOx as N' + + picker = partial(_pick_non_null, preferred=nitro_components[0], + secondary=nitro_components[1]) + + return transform_parameters( + df, nitro_components, nitro_combined, finalunits, + partial(picker, maincol=rescol), partial(picker, maincol=qualcol) + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(paramlevel) == nitro_combined + ) + else: + return df + + +def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): + if fix_PFCs: + PFC = 'Permeable Friction Course' + type_level_pos = utils.get_level_position(df, typelevel) + return wqio.utils.redefine_index_level( + df, catlevel, PFC, dropold=True, + criteria=lambda row: row[type_level_pos] == 'PF' + ).pipe( + checks.verify_any, + lambda df: df.index.get_level_values(catlevel) == PFC + ) + else: + return df + + +def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): + if grab_ok_bmps == 'default': + grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] + + grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) + if remove_grabs: + querytxt = ( + "(sampletype == 'composite') | " + "(((category in @grab_ok_bmps) | (paramgroup == 'Biological')) & " + " (sampletype != 'unknown'))" + ) + return df.query(querytxt) + else: + return df + + +def _load_raw_data(csvfile=None): + csvfile = Path(csvfile or wqio.download('bmpdata')) return pandas.read_csv(csvfile, parse_dates=['sampledate'], encoding='utf-8') -def prepare_data(raw_df): +def _clean_raw_data(raw_df): _row_headers = [ 'category', 'epazone', 'state', 'site', 'bmp', 'station', 'storm', 'sampletype', 'watertype', @@ -297,74 +441,137 @@ def prepare_data(raw_df): return prepped -def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn, - indexMods=None, paramlevel='parameter'): - """ Apply an arbitrary transformation to a parameter in the data +def _prepare_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, + remove_grabs=True, grab_ok_bmps='default', balanced_only=True, + fix_PFCs=True, excluded_bmps=None, excluded_params=None): + """ Prepare data for categorical summaries - Parameters - ---------- + Parameter + --------- df : pandas.DataFrame - existingparams : list of strings - List of the existing parameters that will be used to compute - the new values - newparam : string - Name of the new parameter to be generated - newunits : string - Units of the newly computed values - resfxn : callable - Function (or lambda) that will determine the result of - ``newparam`` based on the values of ``existingparams``. - Function must assume to be operating on a row of - ``self.data`` with the elements of ``existingparams`` stored - as columns. - qualfxn : function - Same as ``resfxn``, but for determining the final qualifier - of the ``newparam`` results. - indexMods : dict, optional (keys = index level names) - Dictionary of index level name whose values are the new - values of those levels where ``parameter == newparam``. + minstorms : int (default = 3) + Minimum number of storms (monitoring events) for a BMP study to be included + minbmps : int (default = 3) + Minimum number of BMP studies for a parameter to be included + combine_nox : bool (default = True) + Toggles combining NO3 and NO2+NO3 into as new parameter NOx, giving + preference to NO2+NO3 when both parameters are observed for an event. + The underlying assuption is that NO2 concentrations are typically much + smaller than NO3, thus NO2+NO3 ~ NO3. + combine_WB_RP : bool (default = True) + Toggles combining Retention Pond and Wetland Basin data into a new + BMP category: Retention Pond/Wetland Basin. + remove_grabs : bool (default = True) + Toggles removing grab samples from the dataset except for: + - biological parameters + - BMPs categories that are whitelisted via *grab_ok_bmps* + grab_ok_bmps : sequence of str, optional + BMP categories for which grab data should be included. By default, this + inclues Retention Ponds, Wetland Basins, and the combined + Retention Pond/Wetland Basin category created when *combine_WB_RP* is + True. + balanced_only : bool (default = True) + Toggles removing BMP studies which have only influent or effluent data, + exclusively. + fix_PFCs : bool (default = True) + Makes correction to the category of Permeable Friction Course BMPs + excluded_bmps, excluded_params : sequence of str, optional + List of BMPs studies and parameters to exclude from the data. Returns ------- - transformed : pandas.DataFrame + summarizable : pandas.DataFrame """ - index_name_cache = df.index.names - existingparams = wqio.validate.at_least_empty_list(existingparams) - - transformed = ( - df.query("{} in @existingparams".format(paramlevel)) - .pipe(utils.refresh_index) - .unstack(level=paramlevel) - .pipe(wqio.utils.assign_multilevel_column, qualfxn, 'qual', newparam) - .pipe(wqio.utils.assign_multilevel_column, resfxn, 'res', newparam) - .xs(newparam, level=paramlevel, axis='columns', drop_level=False) - .stack(level=paramlevel) + excluded_bmps = wqio.validate.at_least_empty_list(excluded_bmps) + excluded_params = wqio.validate.at_least_empty_list(excluded_params) + + return ( + df.pipe(utils._maybe_combine_WB_RP, combine_WB_RP) + .pipe(utils._maybe_combine_nox, combine_nox) + .pipe(utils._maybe_fix_PFCs, fix_PFCs) + .pipe(utils._maybe_remove_grabs, remove_grabs, grab_ok_bmps) + .query("bmp not in @excluded_bmps") + .query("parameter not in @excluded_params") + .pipe(utils._pick_best_sampletype) + .pipe(utils._pick_best_station) + .pipe(utils._maybe_filter_onesided_BMPs, balanced_only) + .pipe(utils._filter_by_storm_count, minstorms) + .pipe(utils._filter_by_BMP_count, minbmps) ) - indexMods = wqio.validate.at_least_empty_dict(indexMods, units=newunits) - # add the units into indexMod, apply all changes - indexMods['units'] = newunits - for levelname, value in indexMods.items(): - transformed = wqio.utils.redefine_index_level(transformed, levelname, value, - criteria=None, dropold=True) - # return the *full* dataset (preserving original params) - result = pandas.concat([ - df.reset_index(), - transformed.reset_index() - ], sort=False).set_index(index_name_cache) - return result +def load_data(datapath=None, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, + remove_grabs=True, grab_ok_bmps='default', balanced_only=True, + fix_PFCs=True, excluded_bmps=None, excluded_params=None, + as_dataframe=False, **dc_kwargs): + """ Prepare data for categorical summaries + + Parameter + --------- + datapath : Path-like, optional + Path to the raw data CSV. If not provided, the latest data will be + downloaded. + minstorms : int (default = 3) + Minimum number of storms (monitoring events) for a BMP study to be included + minbmps : int (default = 3) + Minimum number of BMP studies for a parameter to be included + combine_nox : bool (default = True) + Toggles combining NO3 and NO2+NO3 into as new parameter NOx, giving + preference to NO2+NO3 when both parameters are observed for an event. + The underlying assuption is that NO2 concentrations are typically much + smaller than NO3, thus NO2+NO3 ~ NO3. + combine_WB_RP : bool (default = True) + Toggles combining Retention Pond and Wetland Basin data into a new + BMP category: Retention Pond/Wetland Basin. + remove_grabs : bool (default = True) + Toggles removing grab samples from the dataset except for: + - biological parameters + - BMPs categories that are whitelisted via *grab_ok_bmps* + grab_ok_bmps : sequence of str, optional + BMP categories for which grab data should be included. By default, this + inclues Retention Ponds, Wetland Basins, and the combined + Retention Pond/Wetland Basin category created when *combine_WB_RP* is + True. + balanced_only : bool (default = True) + Toggles removing BMP studies which have only influent or effluent data, + exclusively. + fix_PFCs : bool (default = True) + Makes correction to the category of Permeable Friction Course BMPs + excluded_bmps, excluded_params : sequence of str, optional + List of BMPs studies and parameters to exclude from the data. + as_dataframe : bool (default = False) + When False, a wqio.DataCollection is returned + + Additional Parameters + --------------------- + Any additional keword arguments will be passed to wqio.DataCollection. + Returns + ------- + bmp : pandas.DataFrame or wqio.DataCollection -def to_DataCollection(df, **kwargs): # pragma: no cover - othergroups = kwargs.pop('othergroups', ['category', 'units']) - pairgroups = kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) - dc = ( - df.reset_index() - .pipe(wqio.DataCollection, rescol='res', qualcol='qual', ndval=['ND'], - stationcol='station', paramcol='parameter', othergroups=othergroups, - pairgroups=pairgroups, **kwargs) + """ + othergroups = dc_kwargs.pop('othergroups', ['category', 'units']) + pairgroups = dc_kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) + rescol = dc_kwargs.pop('rescol', 'res') + qualcol = dc_kwargs.pop('qualcol', 'qual') + ndval = dc_kwargs.pop('ndval', ['ND', '<'],) + stationcol = dc_kwargs.pop('stationcol', 'station') + paramcol = dc_kwargs.pop('paramcol', 'parameter') + bmp = ( + _load_raw_data(datapath) + .pipe(_clean_raw_data) + .pipe(_prepare_for_summary, minstorms=minstorms, minbmps=minbmps, + combine_nox=combine_nox, combine_WB_RP=combine_WB_RP, + remove_grabs=remove_grabs, grab_ok_bmps=grab_ok_bmps, + balanced_only=balanced_only, fix_PFCs=fix_PFCs, + excluded_bmps=excluded_bmps, excluded_params=excluded_params) ) - return dc + if as_dataframe: + return bmp + return wqio.DataCollection(bmp, rescol='res', qualcol='qual', ndval=['ND'], + stationcol='station', paramcol='parameter', + othergroups=othergroups, pairgroups=pairgroups, + **dc_kwargs) diff --git a/pybmpdb/nsqd.py b/pybmpdb/nsqd.py index 8d20457..66c099b 100644 --- a/pybmpdb/nsqd.py +++ b/pybmpdb/nsqd.py @@ -6,37 +6,27 @@ import wqio -__all__ = ['NSQData', 'load_data'] - - -class NSQData(object): - """ Class representing the National Stormwater Quality Dataset. - +def load_data(datapath=None, as_dataframe=False, **dc_kwargs): + """ Parameters ---------- - datapath : string, optional. - Optional path the file to read. If not provided, the bundeled - data will be used. + datapath : str or pathlib.Path, optional + Path to the raw data CSV. If not provided, the latest data will be + downloaded. + as_dataframe : bool (default = False) + When False, a wqio.DataCollection is returned - """ + Additional Parameters + --------------------- + Any additional keword arguments will be passed to wqio.DataCollection. - def __init__(self, datapath=None): - # read my heavily modified version of the database - self.datapath = Path(datapath or wqio.download('nsqd')) - self._data = None + Returns + ------- + nsqd : pandas.DataFrame or wqio.DataCollection - @property - def data(self): - if self._data is None: - self._data = pandas.read_csv(self.datapath) - return self._data - - def to_DataCollection(self, *args, **kwargs): - return wqio.DataCollection(self.data, *args, **kwargs) - - -def load_data(datapath=None, as_dataframe=False, **kwargs): - nsqd = NSQData(datapath=datapath) + """ + datapath = Path(datapath or wqio.download('nsqd')) + nsqd = pandas.read_csv(datapath, encoding='utf-8') if as_dataframe: - return nsqd.data - return nsqd.to_DataCollection(**kwargs) + return nsqd + return wqio.DataCollection(nsqd, **dc_kwargs) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index accab4d..271ce56 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -1,25 +1,15 @@ import os -import sys -from pkg_resources import resource_filename -from functools import partial import numpy import matplotlib from matplotlib import pyplot import seaborn -import pandas from statsmodels.tools.decorators import ( resettable_cache, cache_readonly ) -from engarde import checks import wqio - -from . import bmpdb, info, utils -try: - from tqdm import tqdm -except ImportError: - tdqm = wqio.utils.misc.no_op +from . import bmpdb, utils def filterlocation(location, count=5, column='bmp'): @@ -38,282 +28,6 @@ def filterlocation(location, count=5, column='bmp'): ) >= count -def _pick_non_null(df, maincol, preferred, secondary): - return df[(maincol, preferred)].combine_first(df[(maincol, secondary)]) - - -def _pick_best_station(df): - def best_col(df, mainstation, backupstation, valcol): - for sta in [mainstation, backupstation]: - if (sta, valcol) not in df.columns: - df = wqio.utils.assign_multilevel_column(df, numpy.nan, sta, valcol) - - return df[(mainstation, valcol)].combine_first(df[(backupstation, valcol)]) - - orig_index = df.index.names - data = ( - df.pipe(utils.refresh_index) - .unstack(level='station') - .pipe(wqio.utils.swap_column_levels, 0, 1) - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'res'), - 'final_outflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'qual'), - 'final_outflow', 'qual') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'res'), - 'final_inflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'qual'), - 'final_inflow', 'qual') - .loc[:, lambda df: df.columns.map(lambda c: 'final_' in c[0])] - .rename(columns=lambda col: col.replace('final_', '')) - .stack(level='station') - ) - - return data - - -def _pick_best_sampletype(df): - orig_cols = df.columns - xtab = df.pipe(utils.refresh_index).unstack(level='sampletype') - for col in orig_cols: - grabvalues = numpy.where( - xtab[(col, 'composite')].isnull(), - xtab[(col, 'grab')], - numpy.nan - ) - xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, 'grab') - - data = ( - xtab.loc[:, xtab.columns.map(lambda c: c[1] != 'unknown')] - .stack(level=['sampletype']) - ) - return data - - -def _maybe_filter_onesided_BMPs(df, balanced_only): - grouplevels = ['site', 'bmp', 'parameter', 'category'] - pivotlevel = 'station' - - if balanced_only: - return ( - df.unstack(level=pivotlevel) - .groupby(level=grouplevels) - .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) - .stack(level=pivotlevel) - ) - else: - return df - - -def _filter_by_storm_count(df, minstorms): - # filter out all monitoring stations with less than /N/ storms - grouplevels = ['site', 'bmp', 'parameter', 'station'] - - data = ( - df.groupby(level=grouplevels) - .filter(lambda g: g.count()['res'] >= minstorms) - ) - return data - - -def _filter_by_BMP_count(df, minbmps): - grouplevels = ['category', 'parameter', 'station'] - - data = ( - df.groupby(level=grouplevels) - .filter(lambda g: g.index.get_level_values('bmp').unique().shape[0] >= minbmps) - ) - return data - - -def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): - if combine_WB_RP: - # merge Wetland Basins and Retention ponds, keeping - # the original records - wbrp_indiv = ['Retention Pond', 'Wetland Basin'] - wbrp_combo = 'Wetland Basin/Retention Pond' - level_pos = utils.get_level_position(df, catlevel) - return wqio.utils.redefine_index_level( - df, catlevel, wbrp_combo, dropold=False, - criteria=lambda row: row[level_pos] in wbrp_indiv - ).pipe( - checks.verify_any, - lambda df: df.index.get_level_values(catlevel) == wbrp_combo - ) - else: - return df - - -def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', - qualcol='qual', finalunits='mg/L'): - if combine_nox: - # combine NO3+NO2 and NO3 into NOx - nitro_components = [ - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - 'Nitrogen, Nitrate (NO3) as N' - ] - nitro_combined = 'Nitrogen, NOx as N' - - picker = partial(_pick_non_null, preferred=nitro_components[0], - secondary=nitro_components[1]) - - return bmpdb.transform_parameters( - df, nitro_components, nitro_combined, finalunits, - partial(picker, maincol=rescol), partial(picker, maincol=qualcol) - ).pipe( - checks.verify_any, - lambda df: df.index.get_level_values(paramlevel) == nitro_combined - ) - else: - return df - - -def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): - if fix_PFCs: - PFC = 'Permeable Friction Course' - type_level_pos = utils.get_level_position(df, typelevel) - return wqio.utils.redefine_index_level( - df, catlevel, PFC, dropold=True, - criteria=lambda row: row[type_level_pos] == 'PF' - ).pipe( - checks.verify_any, - lambda df: df.index.get_level_values(catlevel) == PFC - ) - else: - return df - - -def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): - if grab_ok_bmps == 'default': - grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] - - grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) - if remove_grabs: - querytxt = ( - "(sampletype == 'composite') | " - "(((category in @grab_ok_bmps) | (paramgroup == 'Biological')) & " - " (sampletype != 'unknown'))" - ) - return df.query(querytxt) - else: - return df - - -def prep_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, - remove_grabs=True, grab_ok_bmps='default', balanced_only=True, - fix_PFCs=True, excluded_bmps=None, excluded_params=None): - """ Prepare data for categorical summaries - - Parameter - --------- - df : pandas.DataFrame - minstorms : int (default = 3) - Minimum number of storms (monitoring events) for a BMP study to be included - minbmps : int (default = 3) - Minimum number of BMP studies for a parameter to be included - combine_nox : bool (default = True) - Toggles combining NO3 and NO2+NO3 into as new parameter NOx, giving - preference to NO2+NO3 when both parameters are observed for an event. - The underlying assuption is that NO2 concentrations are typically much - smaller than NO3, thus NO2+NO3 ~ NO3. - combine_WB_RP : bool (default = True) - Toggles combining Retention Pond and Wetland Basin data into a new - BMP category: Retention Pond/Wetland Basin. - remove_grabs : bool (default = True) - Toggles removing grab samples from the dataset except for: - - biological parameters - - BMPs categories that are whitelisted via *grab_ok_bmps* - grab_ok_bmps : sequence of str, optional - BMP categories for which grab data should be included. By default, this - inclues Retention Ponds, Wetland Basins, and the combined - Retention Pond/Wetland Basin category created when *combine_WB_RP* is - True. - balanced_only : bool (default = True) - Toggles removing BMP studies which have only influent or effluent data, - exclusively. - fix_PFCs : bool (default = True) - Makes correction to the category of Permeable Friction Course BMPs - excluded_bmps, excluded_params : sequence of str, optional - List of BMPs studies and parameters to exclude from the data. - - Returns - ------- - summarizable : pandas.DataFrame - - """ - - excluded_bmps = wqio.validate.at_least_empty_list(excluded_bmps) - excluded_params = wqio.validate.at_least_empty_list(excluded_params) - - return ( - df.pipe(_maybe_combine_WB_RP, combine_WB_RP) - .pipe(_maybe_combine_nox, combine_nox) - .pipe(_maybe_fix_PFCs, fix_PFCs) - .pipe(_maybe_remove_grabs, remove_grabs, grab_ok_bmps) - .query("bmp not in @excluded_bmps") - .query("parameter not in @excluded_params") - .pipe(_pick_best_sampletype) - .pipe(_pick_best_station) - .pipe(_maybe_filter_onesided_BMPs, balanced_only) - .pipe(_filter_by_storm_count, minstorms) - .pipe(_filter_by_BMP_count, minbmps) - ) - - -def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): - ND_neither = [(df[qualin] == '=') & (df[qualout] == '='), 'Pair'] - ND_in = [(df[qualin] == 'ND') & (df[qualout] == '='), 'Influent ND'] - ND_out = [(df[qualin] == '=') & (df[qualout] == 'ND'), 'Effluent ND'] - ND_both = [(df[qualin] == 'ND') & (df[qualout] == 'ND'), 'Both ND'] - return wqio.utils.selector('=', ND_neither, ND_in, ND_out, ND_both) - - -def setMPLStyle(serif=False): - if serif: - fontfamily = 'serif' - preamble = [ - r'\usepackage{siunitx}', - r'\sisetup{detect-all}', - r'\usepackage{fourier}' - ] - else: - fontfamily = 'sans-serif' - preamble = [ - r'\usepackage{siunitx}', - r'\sisetup{detect-all}', - r'\usepackage{helvet}', - r'\usepackage{sansmath}', - r'\sansmath' - ] - style_dict = { - 'text.usetex': True, - 'font.family': [fontfamily], - 'font.serif': ['Utopia', 'Palantino'], - 'font.sans-serif': ['Helvetica', 'Arial'], - 'lines.linewidth': 0.5, - 'patch.linewidth': 0.5, - 'text.latex.preamble': preamble, - 'axes.linewidth': 0.5, - 'axes.grid': True, - 'axes.titlesize': 12, - 'axes.labelsize': 10, - 'xtick.labelsize': 10, - 'xtick.direction': 'out', - 'ytick.labelsize': 10, - 'ytick.direction': 'out', - 'grid.linewidth': 0.5, - 'legend.fancybox': True, - 'legend.numpoints': 1, - 'legend.fontsize': 8, - 'figure.figsize': (6.5, 3.5), - 'savefig.dpi': 300 - } - matplotlib.rcParams.update(style_dict) - - class DatasetSummary(object): def __init__(self, dataset, paramgroup, figpath, forcepaths=False): self.forcepaths = forcepaths diff --git a/pybmpdb/tests/test_bmpdb.py b/pybmpdb/tests/test_bmpdb.py index 1047190..6a0f4bc 100644 --- a/pybmpdb/tests/test_bmpdb.py +++ b/pybmpdb/tests/test_bmpdb.py @@ -1,10 +1,11 @@ import sys import os -from io import StringIO -from pkg_resources import resource_filename import tempfile import zipfile +from io import StringIO +from pkg_resources import resource_filename from urllib import request +from pathlib import Path from unittest.mock import patch import pytest @@ -14,11 +15,6 @@ import numpy import pandas -try: - import pyodbc -except ImportError: - pyodbc = None - from pybmpdb import bmpdb import wqio @@ -27,10 +23,6 @@ def get_data_file(filename): return resource_filename("pybmpdb.tests._data", filename) -_no_access_file = not os.path.exists(get_data_file('bmpdata.accdb')) -NO_ACCESS = (pyodbc is None) or (os.name == 'posix') or _no_access_file - - @pytest.fixture def df_for_quals(): df = pandas.DataFrame([ @@ -85,50 +77,14 @@ def test__check_levelnames(): bmpdb._check_levelnames(['site', 'junk']) -@pytest.mark.skipif('NO_ACCESS') -def test_db_connection(): - dbfile = get_data_file('bmpdata.accdb') - try: - cnn = bmpdb.db_connection(dbfile) - assert isinstance(cnn, pyodbc.Connection) - cnn.close() - except: - raise - - -@patch.object(bmpdb, 'db_connection') -@patch.object(pandas, 'read_sql', return_value=1) -def test_get_data(mock_sql, mock_cnn): - bmpdb.get_data('select * from table', 'test.mdb') - mock_sql.assert_called_once_with('select * from table', mock_cnn().__enter__()) - - -@patch.object(bmpdb, 'get_default_query', return_value='select * from [{}]') -@patch.object(bmpdb, 'get_data') -@pytest.mark.parametrize(('sql', 'table', 'expected_sql'), [ - (None, None, 'select * from [bWQ BMP FlatFile BMP Indiv Anal_Rev 10-2014]'), - ('select * from bmp_data', None, 'select * from bmp_data'), - (None, 'bmp_data', 'select * from bmp_data'), - ('select * from bmp_data', 'another_table', 'select * from bmp_data'), -]) -def test_load_from_access(get_data, get_dq, sql, table, expected_sql): - dbfile = 'test.mdb' - _ = bmpdb.load_from_access(dbfile, sqlquery=sql, dbtable=table) - get_data.assert_called_once_with( - expected_sql, - dbfile, - driver=r'{Microsoft Access Driver (*.mdb, *.accdb)}' - ) - - @patch.object(pandas, 'read_csv') -def test_load_from_csv(read_csv): - bmpdb.load_from_csv('bmp.csv') - read_csv.assert_called_once_with('bmp.csv', parse_dates=['sampledate'], encoding='utf-8') +def test_load_data(read_csv): + bmpdb.load_data('bmp.csv') + read_csv.assert_called_once_with(Path('bmp.csv'), parse_dates=['sampledate'], encoding='utf-8') @pytest.mark.skipif(True, reason='test not ready') -def test_prepare_data(): +def test_clean_raw_data(): pass @@ -159,3 +115,64 @@ def test_transform_parameters(): paramlevel='param' ) pdtest.assert_frame_equal(result, expected) + + +@pytest.mark.parametrize(('fxn', 'args', 'index_cols', 'infilename', 'outfilename'), [ + (bmpdb._pick_best_station, [], ['site', 'bmp', 'storm', 'parameter', 'station'], + 'test_pick_station_input.csv', 'test_pick_station_output.csv'), + (bmpdb._pick_best_sampletype, [], ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'], + 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv'), + (bmpdb._filter_by_storm_count, [6], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], + 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv'), + (bmpdb._filter_by_BMP_count, [4], ['category', 'site', 'bmp', 'parameter', 'station'], + 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv',), +]) +def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): + input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) + expected_df = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() + + test_df = fxn(input_df, *args).sort_index() + pdtest.assert_frame_equal(expected_df.reset_index(), test_df.reset_index()) + + +@pytest.mark.parametrize('doit', [True, False]) +@pytest.mark.parametrize(('fxn', 'index_cols', 'infilename', 'outfilename'), [ + (bmpdb._maybe_filter_onesided_BMPs, ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], + 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), + (bmpdb._maybe_combine_nox, ['bmp', 'category', 'storm', 'units', 'parameter'], + 'test_WBRP_NOx_input.csv', 'test_NOx_output.csv'), + (bmpdb._maybe_combine_WB_RP, ['bmp', 'category', 'storm', 'units', 'parameter'], + 'test_WBRP_NOx_input.csv', 'test_WBRP_output.csv'), + (bmpdb._maybe_fix_PFCs, ['bmp', 'category', 'bmptype', 'storm', 'parameter'], + 'test_PFCs_input.csv', 'test_PFCs_output.csv'), + (bmpdb._maybe_remove_grabs, ['bmp', 'category', 'sampletype', 'storm'], + 'test_grabsample_input.csv', 'test_grabsample_output.csv') +]) +def test__maybe_filter_functions(fxn, doit, index_cols, infilename, outfilename): + input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) + result = fxn(input_df, doit).sort_index() + if doit: + expected = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() + else: + expected = input_df.copy().sort_index() + pdtest.assert_frame_equal(result, expected) + + +def test__pick_non_null(): + df = pandas.DataFrame({ + ('res', 'this'): [1.0, numpy.nan, 2.0, numpy.nan], + ('res', 'that'): [numpy.nan, numpy.nan, 9.0, 3.0] + }) + expected = numpy.array([1.0, numpy.nan, 2.0, 3.0]) + result = bmpdb._pick_non_null(df, 'res', 'this', 'that') + nptest.assert_array_equal(result, expected) + + +def test_paired_qual(): + df = pandas.DataFrame({ + 'in_qual': ['=', '=', 'ND', 'ND'], + 'out_qual': ['=', 'ND', '=', 'ND'] + }) + expected = ['Pair', 'Effluent ND', 'Influent ND', 'Both ND'] + result = bmpdb.paired_qual(df, 'in_qual', 'out_qual') + nptest.assert_array_equal(result, expected) diff --git a/pybmpdb/tests/test_nsqd.py b/pybmpdb/tests/test_nsqd.py index bf1cf79..3cd9732 100644 --- a/pybmpdb/tests/test_nsqd.py +++ b/pybmpdb/tests/test_nsqd.py @@ -1,42 +1,25 @@ from pkg_resources import resource_filename +from pathlib import Path import numpy as np import pandas import pytest import numpy.testing as nptest +from unittest.mock import patch import pybmpdb from pybmpdb import nsqd - - -class Test_NSQData: - def setup(self): - self.testfile = resource_filename('pybmpdb.tests._data', 'nsqdata.csv') - - self.data = nsqd.NSQData(datapath=self.testfile) - self.known_landuses = np.array([ - 'Commercial', 'Freeway', 'Industrial', 'Institutional', - 'Open Space', 'Residential', 'Unknown' - ]) - - self.known_columns = [ - 'epa_rain_zone', 'state', 'location_code', 'station_name', - 'jurisdiction_county', 'jurisdiction_city', 'primary_landuse', - 'secondary_landuse', 'percent_impervious', 'start_date', - 'days since last rain', 'precipitation_depth_(in)', 'season', - 'parameter', 'fraction', 'units', 'res', 'qual', - 'drainage_area_acres', 'latitude', 'longitude', - ] - - self.known_commerical_copper_shape = (329, 22) - - def test_data(self): - assert (hasattr(self.data, 'data')) - assert isinstance(self.data.data, pandas.DataFrame) - assert (self.data.data.columns.tolist() == self.known_columns) - - def test_data_season(self): - known_seasons = ['FA', 'SP', 'SU', 'WI'] - seasons = sorted(self.data.data['season'].unique().tolist()) - assert (seasons == known_seasons) +import wqio + + +@pytest.mark.parametrize('as_df', [True, False]) +@patch.object(wqio, 'DataCollection') +@patch.object(wqio, 'download', return_value=Path('./data/nsqd.csv')) +@patch.object(pandas, 'read_csv', return_value='NSQD_DataFrame') +def test_load_data(read_csv, download, dc, as_df): + nsqd.load_data() + download.assert_called_once_with('nsqd') + read_csv.assert_called_once_with(Path('./data/nsqd.csv'), encoding='utf-8') + if not as_df: + dc.assert_called_once_with('NSQD_DataFrame') diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 5871a19..c29f4a6 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -667,64 +667,3 @@ def expected_latext_content(): \clearpage """) return content - - -@pytest.mark.parametrize(('fxn', 'args', 'index_cols', 'infilename', 'outfilename'), [ - (summary._pick_best_station, [], ['site', 'bmp', 'storm', 'parameter', 'station'], - 'test_pick_station_input.csv', 'test_pick_station_output.csv'), - (summary._pick_best_sampletype, [], ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'], - 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv'), - (summary._filter_by_storm_count, [6], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], - 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv'), - (summary._filter_by_BMP_count, [4], ['category', 'site', 'bmp', 'parameter', 'station'], - 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv',), -]) -def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): - input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) - expected_df = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() - - test_df = fxn(input_df, *args).sort_index() - pdtest.assert_frame_equal(expected_df.reset_index(), test_df.reset_index()) - - -@pytest.mark.parametrize('doit', [True, False]) -@pytest.mark.parametrize(('fxn', 'index_cols', 'infilename', 'outfilename'), [ - (summary._maybe_filter_onesided_BMPs, ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], - 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), - (summary._maybe_combine_nox, ['bmp', 'category', 'storm', 'units', 'parameter'], - 'test_WBRP_NOx_input.csv', 'test_NOx_output.csv'), - (summary._maybe_combine_WB_RP, ['bmp', 'category', 'storm', 'units', 'parameter'], - 'test_WBRP_NOx_input.csv', 'test_WBRP_output.csv'), - (summary._maybe_fix_PFCs, ['bmp', 'category', 'bmptype', 'storm', 'parameter'], - 'test_PFCs_input.csv', 'test_PFCs_output.csv'), - (summary._maybe_remove_grabs, ['bmp', 'category', 'sampletype', 'storm'], - 'test_grabsample_input.csv', 'test_grabsample_output.csv') -]) -def test__maybe_filter_functions(fxn, doit, index_cols, infilename, outfilename): - input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) - result = fxn(input_df, doit).sort_index() - if doit: - expected = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() - else: - expected = input_df.copy().sort_index() - pdtest.assert_frame_equal(result, expected) - - -def test__pick_non_null(): - df = pandas.DataFrame({ - ('res', 'this'): [1.0, numpy.nan, 2.0, numpy.nan], - ('res', 'that'): [numpy.nan, numpy.nan, 9.0, 3.0] - }) - expected = numpy.array([1.0, numpy.nan, 2.0, 3.0]) - result = summary._pick_non_null(df, 'res', 'this', 'that') - nptest.assert_array_equal(result, expected) - - -def test_paired_qual(): - df = pandas.DataFrame({ - 'in_qual': ['=', '=', 'ND', 'ND'], - 'out_qual': ['=', 'ND', '=', 'ND'] - }) - expected = ['Pair', 'Effluent ND', 'Influent ND', 'Both ND'] - result = summary.paired_qual(df, 'in_qual', 'out_qual') - nptest.assert_array_equal(result, expected) diff --git a/pybmpdb/utils.py b/pybmpdb/utils.py index 0c04a4e..c761cde 100644 --- a/pybmpdb/utils.py +++ b/pybmpdb/utils.py @@ -396,6 +396,49 @@ def processFilename(filename): return fn +def setMPLStyle(serif=False): + if serif: + fontfamily = 'serif' + preamble = [ + r'\usepackage{siunitx}', + r'\sisetup{detect-all}', + r'\usepackage{fourier}' + ] + else: + fontfamily = 'sans-serif' + preamble = [ + r'\usepackage{siunitx}', + r'\sisetup{detect-all}', + r'\usepackage{helvet}', + r'\usepackage{sansmath}', + r'\sansmath' + ] + style_dict = { + 'text.usetex': True, + 'font.family': [fontfamily], + 'font.serif': ['Utopia', 'Palantino'], + 'font.sans-serif': ['Helvetica', 'Arial'], + 'lines.linewidth': 0.5, + 'patch.linewidth': 0.5, + 'text.latex.preamble': preamble, + 'axes.linewidth': 0.5, + 'axes.grid': True, + 'axes.titlesize': 12, + 'axes.labelsize': 10, + 'xtick.labelsize': 10, + 'xtick.direction': 'out', + 'ytick.labelsize': 10, + 'ytick.direction': 'out', + 'grid.linewidth': 0.5, + 'legend.fancybox': True, + 'legend.numpoints': 1, + 'legend.fontsize': 8, + 'figure.figsize': (6.5, 3.5), + 'savefig.dpi': 300 + } + matplotlib.rcParams.update(style_dict) + + class LaTeXDirectory(object): """ Context manager to help compile latex docs from python. From ac4b65c85481223f2ee64852ae3582f0aedb024a Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 3 Dec 2019 13:09:31 -0800 Subject: [PATCH 36/48] datashape logging, new yes/no vals, fix comp sampletype handling (#46) --- pybmpdb/_units.py | 6 ++ pybmpdb/bmpdb.py | 104 ++++++++++++++++++++-------------- pybmpdb/summary.py | 6 +- pybmpdb/tests/test_bmpdb.py | 1 - pybmpdb/tests/test_summary.py | 2 +- 5 files changed, 70 insertions(+), 49 deletions(-) diff --git a/pybmpdb/_units.py b/pybmpdb/_units.py index 6e5d9d9..9338689 100644 --- a/pybmpdb/_units.py +++ b/pybmpdb/_units.py @@ -145,6 +145,12 @@ "tex": "\\si[per-mode=symbol]{\\nano\\gram\\per\\liter}", "unicode": "ng/L" }, + { + "name": "pg/L", + "factor": 1e-12, + "tex": "\\si[per-mode=symbol]{\\pico\\gram\\per\\liter}", + "unicode": "pg/L" + }, { "name": "°C", "factor": 1, diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 683f433..7d8f8a8 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -1,4 +1,5 @@ import os +import logging from pkg_resources import resource_filename from functools import partial from pathlib import Path @@ -24,6 +25,10 @@ ] +_logger = logging.getLogger(__name__) + + +@wqio.utils.log_df_shape(_logger) def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, nd_correction=2): """ Determines the scaling factor to be applied to the water quality result @@ -71,6 +76,7 @@ def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, return wqio.utils.selector(1, normal_ND, weird_UJ) +@wqio.utils.log_df_shape(_logger) def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=None): """ Determines final qualifier to be applied to the water quality result based on the result qualifiers in the BMP Database. Non-detects get "ND", @@ -97,9 +103,9 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No -------- _handle_ND_factors - Notes + , nd Notes ----- - Same basic premise as _handle_ND_factors, but different qualifiers count + Same basic premise as _handle_ND_factors, b, ndut different qualifiers count as ND compared to what we used to determine the ND-scaling factors. """ @@ -112,15 +118,20 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No return numpy.where(is_ND, 'ND', '=') +@wqio.utils.log_df_shape(_logger) def _process_screening(df, screencol): - yes = df[screencol].str.lower().isin(['inc', 'yes']) - no = df[screencol].str.lower().isin(['exc', 'no']) + yes = df[screencol].str.lower().isin(['inc', 'yes', 'y']) + no = df[screencol].str.lower().isin(['exc', 'no', 'n']) return wqio.utils.selector('invalid', [yes, 'yes'], [no, 'no']) +@wqio.utils.log_df_shape(_logger) def _process_sampletype(df, sampletype): grab = [df[sampletype].str.lower().str.contains('grab'), 'grab'] - composite = [df[sampletype].str.lower().str.contains('composite'), 'composite'] + composite = [ + df[sampletype].str.lower().str.contains('emc') | df[sampletype].str.lower().str.contains('comp'), + 'composite' + ] return wqio.utils.selector('unknown', grab, composite) @@ -136,6 +147,7 @@ def _check_levelnames(levels): raise ValueError(msg) +@wqio.utils.log_df_shape(_logger) def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn, indexMods=None, paramlevel='parameter'): """ Apply an arbitrary transformation to a parameter in the data @@ -197,6 +209,7 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn return result +@wqio.utils.log_df_shape(_logger) def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): ND_neither = [(df[qualin] == '=') & (df[qualout] == '='), 'Pair'] ND_in = [(df[qualin] == 'ND') & (df[qualout] == '='), 'Influent ND'] @@ -205,10 +218,12 @@ def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): return wqio.utils.selector('=', ND_neither, ND_in, ND_out, ND_both) +@wqio.utils.log_df_shape(_logger) def _pick_non_null(df, maincol, preferred, secondary): return df[(maincol, preferred)].combine_first(df[(maincol, secondary)]) +@wqio.utils.log_df_shape(_logger) def _pick_best_station(df): def best_col(df, mainstation, backupstation, valcol): for sta in [mainstation, backupstation]: @@ -242,6 +257,7 @@ def best_col(df, mainstation, backupstation, valcol): return data +@wqio.utils.log_df_shape(_logger) def _pick_best_sampletype(df): orig_cols = df.columns xtab = df.pipe(utils.refresh_index).unstack(level='sampletype') @@ -260,6 +276,7 @@ def _pick_best_sampletype(df): return data +@wqio.utils.log_df_shape(_logger) def _maybe_filter_onesided_BMPs(df, balanced_only): grouplevels = ['site', 'bmp', 'parameter', 'category'] pivotlevel = 'station' @@ -275,6 +292,7 @@ def _maybe_filter_onesided_BMPs(df, balanced_only): return df +@wqio.utils.log_df_shape(_logger) def _filter_by_storm_count(df, minstorms): # filter out all monitoring stations with less than /N/ storms grouplevels = ['site', 'bmp', 'parameter', 'station'] @@ -286,6 +304,7 @@ def _filter_by_storm_count(df, minstorms): return data +@wqio.utils.log_df_shape(_logger) def _filter_by_BMP_count(df, minbmps): grouplevels = ['category', 'parameter', 'station'] @@ -296,6 +315,7 @@ def _filter_by_BMP_count(df, minbmps): return data +@wqio.utils.log_df_shape(_logger) def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): if combine_WB_RP: # merge Wetland Basins and Retention ponds, keeping @@ -314,6 +334,7 @@ def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): return df +@wqio.utils.log_df_shape(_logger) def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', qualcol='qual', finalunits='mg/L'): if combine_nox: @@ -338,6 +359,7 @@ def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', return df +@wqio.utils.log_df_shape(_logger) def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): if fix_PFCs: PFC = 'Permeable Friction Course' @@ -353,20 +375,25 @@ def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): return df +@wqio.utils.log_df_shape(_logger) def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): - if grab_ok_bmps == 'default': - grab_ok_bmps = ['Retention Pond', 'Wetland Basin', 'Wetland Basin/Retention Pond'] - - grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) if remove_grabs: + if grab_ok_bmps.lower() == 'default': + grab_ok_bmps = [ + 'Retention Pond', + 'Wetland Basin', + 'Wetland Basin/Retention Pond', + ] + + grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) + querytxt = ( "(sampletype == 'composite') | " "(((category in @grab_ok_bmps) | (paramgroup == 'Biological')) & " " (sampletype != 'unknown'))" ) return df.query(querytxt) - else: - return df + return df def _load_raw_data(csvfile=None): @@ -374,13 +401,14 @@ def _load_raw_data(csvfile=None): return pandas.read_csv(csvfile, parse_dates=['sampledate'], encoding='utf-8') -def _clean_raw_data(raw_df): +@wqio.utils.log_df_shape(_logger) +def _clean_raw_data(raw_df, nd_correction=2): _row_headers = [ 'category', 'epazone', 'state', 'site', 'bmp', 'station', 'storm', 'sampletype', 'watertype', 'paramgroup', 'units', 'parameter', 'fraction', - 'initialscreen', 'wqscreen', 'catscreen', 'balanced', - 'bmptype', 'pdf_id', 'ws_id', 'site_id', 'bmp_id', + 'initialscreen', 'wqscreen', 'catscreen', + 'bmptype', 'ws_id', 'site_id', 'bmp_id', 'dot_type' ] units_norm = { @@ -393,30 +421,20 @@ def _clean_raw_data(raw_df): for p in info.parameters } - # rename columns: - rename_columns = { - 'wq_qual': 'qual', - 'wq_value': 'res', - 'wq_units': 'units', - 'raw_parameter': 'general_parameter', - 'category': 'category' - } - - expected_rows = raw_df.loc[:, 'wq_value'].groupby(lambda x: x > 0).count().loc[True] - - biofilters = { - 'Biofilter - Grass Swale': 'Grass Swale', - 'Biofilter - Grass Strip': 'Grass Strip', - } + expected_rows = ( + raw_df.loc[:, 'res'] + .groupby(lambda x: x > 0) + .count() + .loc[True] + ) drop_columns = ['ms', '_parameter'] prepped = ( raw_df - .fillna({'wq_qual': '='}) - .rename(columns=rename_columns) + .fillna({'qual': '='}) .dropna(subset=['res']) .assign(qual=lambda df: df['qual'].str.strip()) - .assign(res=lambda df: df['res'] * _handle_ND_factors(df)) + .assign(res=lambda df: df['res'] * _handle_ND_factors(df, nd_correction=nd_correction)) .assign(qual=lambda df: _handle_ND_qualifiers(df)) .assign(initialscreen=lambda df: _process_screening(df, 'initialscreen')) .assign(wqscreen=lambda df: _process_screening(df, 'wqscreen')) @@ -426,8 +444,7 @@ def _clean_raw_data(raw_df): .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) .assign(units=lambda df: df['units'].map(lambda u: info.getUnits(u, attr='unicode'))) .assign(_parameter=lambda df: df['parameter'].str.lower().str.strip()) - .assign(fraction=lambda df: numpy.where(df['_parameter'].str.lower().str.contains('dissolved'), 'dissolved', 'total')) - .replace({'category': biofilters}) + .assign(fraction=lambda df: numpy.where(df['_parameter'].str.contains('dissolved'), 'dissolved', 'total')) .pipe(wqio.utils.normalize_units, units_norm, target_units, paramcol='_parameter', rescol='res', unitcol='units', napolicy='raise') .drop(drop_columns, axis=1) @@ -441,6 +458,7 @@ def _clean_raw_data(raw_df): return prepped +@wqio.utils.log_df_shape(_logger) def _prepare_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, remove_grabs=True, grab_ok_bmps='default', balanced_only=True, fix_PFCs=True, excluded_bmps=None, excluded_params=None): @@ -488,17 +506,17 @@ def _prepare_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_W excluded_params = wqio.validate.at_least_empty_list(excluded_params) return ( - df.pipe(utils._maybe_combine_WB_RP, combine_WB_RP) - .pipe(utils._maybe_combine_nox, combine_nox) - .pipe(utils._maybe_fix_PFCs, fix_PFCs) - .pipe(utils._maybe_remove_grabs, remove_grabs, grab_ok_bmps) + df.pipe(_maybe_combine_WB_RP, combine_WB_RP) + .pipe(_maybe_combine_nox, combine_nox) + .pipe(_maybe_fix_PFCs, fix_PFCs) + .pipe(_maybe_remove_grabs, remove_grabs, grab_ok_bmps) .query("bmp not in @excluded_bmps") .query("parameter not in @excluded_params") - .pipe(utils._pick_best_sampletype) - .pipe(utils._pick_best_station) - .pipe(utils._maybe_filter_onesided_BMPs, balanced_only) - .pipe(utils._filter_by_storm_count, minstorms) - .pipe(utils._filter_by_BMP_count, minbmps) + .pipe(_pick_best_sampletype) + .pipe(_pick_best_station) + .pipe(_maybe_filter_onesided_BMPs, balanced_only) + .pipe(_filter_by_storm_count, minstorms) + .pipe(_filter_by_BMP_count, minbmps) ) diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 271ce56..8057afc 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -4,9 +4,7 @@ import matplotlib from matplotlib import pyplot import seaborn -from statsmodels.tools.decorators import ( - resettable_cache, cache_readonly -) +from statsmodels.tools.decorators import cache_readonly import wqio from . import bmpdb, utils @@ -375,7 +373,7 @@ class CategoricalSummary(object): def __init__(self, datasets, paramgroup, basepath, figpath, showprogress=False, applyfilters=False, filtercount=5, filtercolumn='bmp'): - self._cache = resettable_cache() + self._cache = {} self._applyfilters = applyfilters self.filtercount = filtercount self.filtercolumn = filtercolumn diff --git a/pybmpdb/tests/test_bmpdb.py b/pybmpdb/tests/test_bmpdb.py index 6a0f4bc..68aab61 100644 --- a/pybmpdb/tests/test_bmpdb.py +++ b/pybmpdb/tests/test_bmpdb.py @@ -1,6 +1,5 @@ import sys import os -import tempfile import zipfile from io import StringIO from pkg_resources import resource_filename diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index c29f4a6..00eb1c2 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -425,7 +425,7 @@ def expected_latex_report(): return report -@ pytest.fixture +@pytest.fixture def temp_template(): with TemporaryDirectory() as datadir: filename = os.path.join(datadir, 'testtemplate.tex') From 0204138dbe1636c19a3652b4ebc2e50156818e15 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 3 Dec 2019 13:31:01 -0800 Subject: [PATCH 37/48] ran through black (#47) * ran through black * ignore W503 in style checker --- check_pybmpdb.py | 8 +- generate_vstasks.py | 6 +- pybmpdb/_parameters.py | 1086 ++++++++++++++++----------------- pybmpdb/_units.py | 160 ++--- pybmpdb/bmpdb.py | 473 ++++++++------ pybmpdb/info.py | 29 +- pybmpdb/nsqd.py | 4 +- pybmpdb/reports.py | 113 ++-- pybmpdb/summary.py | 471 ++++++++------ pybmpdb/tests/__init__.py | 15 +- pybmpdb/tests/test_bmpdb.py | 236 ++++--- pybmpdb/tests/test_info.py | 54 +- pybmpdb/tests/test_nsqd.py | 14 +- pybmpdb/tests/test_summary.py | 272 +++++---- pybmpdb/tests/test_utils.py | 118 ++-- pybmpdb/utils.py | 212 ++++--- setup.cfg | 1 + setup.py | 26 +- 18 files changed, 1795 insertions(+), 1503 deletions(-) diff --git a/check_pybmpdb.py b/check_pybmpdb.py index a158d1b..49df4c4 100644 --- a/check_pybmpdb.py +++ b/check_pybmpdb.py @@ -2,13 +2,13 @@ import matplotlib from matplotlib import style -matplotlib.use('agg') -style.use('classic') +matplotlib.use("agg") +style.use("classic") import pybmpdb -if '--strict' in sys.argv: - sys.argv.remove('--strict') +if "--strict" in sys.argv: + sys.argv.remove("--strict") tester = pybmpdb.teststrict else: tester = pybmpdb.test diff --git a/generate_vstasks.py b/generate_vstasks.py index a7e1634..9c75938 100644 --- a/generate_vstasks.py +++ b/generate_vstasks.py @@ -41,7 +41,7 @@ """ -if __name__ == '__main__': +if __name__ == "__main__": dirname = ".vscode" filename = "tasks.json" @@ -54,8 +54,8 @@ else: name = sys.argv[1] - python = '/'.join(sys.executable.split(os.path.sep)) + python = "/".join(sys.executable.split(os.path.sep)) config = TEMPLATE.format(pyexec=python, modulename=name) - with open(filepath, 'w') as configfile: + with open(filepath, "w") as configfile: configfile.write(config) diff --git a/pybmpdb/_parameters.py b/pybmpdb/_parameters.py index 5ddcdae..de7c627 100644 --- a/pybmpdb/_parameters.py +++ b/pybmpdb/_parameters.py @@ -4,3772 +4,3766 @@ "tex": "1,1,1,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,1,2-Tetrachloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,1,1-trichloroethane", "tex": "1,1,1-Trichloroethane", "units": "ug/L", "unicode": "1,1,1-Trichloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,1,2,2-tetrachloroethane", "tex": "1,1,2,2-Tetrachloroethane", "units": "ug/L", "unicode": "1,1,2,2-Tetrachloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,1,2-trichloroethane", "tex": "1,1,2-Trichloroethane", "units": "ug/L", "unicode": "1,1,2-Trichloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,1-dichloroethane", "tex": "1,1-Dichloroethane", "units": "ug/L", "unicode": "1,1-Dichloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,1-dichloroethylene", "tex": "1,1-Dichloroethylene", "units": "ug/L", "unicode": "1,1-Dichloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "1,1-dichloropropene", "tex": "1,1-Dichloropropene", "units": "ug/L", "unicode": "1,1-Dichloropropene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2,3-trichlorobenzene", "tex": "1,2,3-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,3-Trichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2,3-trichloropropane", "tex": "1,2,3-Trichloropropane", "units": "ug/L", "unicode": "1,2,3-Trichloropropane", - "fraction": "total" + "fraction": "total", }, { "name": "1,2,4-trichlorobenzene", "tex": "1,2,4-Trichlorobenzene", "units": "ug/L", "unicode": "1,2,4-Trichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2,4-trimethylbenzene", "tex": "1,2,4-Trimethylbenzene", "units": "ug/L", "unicode": "1,2,4-Trimethylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-benzanthracene", "tex": "1,2-Benzanthracene", "units": "ug/L", "unicode": "1,2-Benzanthracene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-dibromoethane", "tex": "1,2-Dibromoethane", "units": "ug/L", "unicode": "1,2-Dibromoethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-dichlorobenzene", "tex": "1,2-Dichlorobenzene", "units": "ug/L", "unicode": "1,2-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-dichloroethane", "tex": "1,2-Dichloroethane", "units": "ug/L", "unicode": "1,2-Dichloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-dichloropropane", "tex": "1,2-Dichloropropane", "units": "ug/L", "unicode": "1,2-Dichloropropane", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-diphenylhydrazine", "tex": "1,2-Diphenylhydrazine", "units": "ug/L", "unicode": "1,2-Diphenylhydrazine", - "fraction": "total" + "fraction": "total", }, { "name": "1,3,5-trimethylbenzene", "tex": "1,3,5-Trimethylbenzene", "units": "ug/L", "unicode": "1,3,5-Trimethylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,3-dichlorobenzene", "tex": "1,3-Dichlorobenzene", "units": "ug/L", "unicode": "1,3-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1,3-dichloropropane", "tex": "1,3-Dichloropropane", "units": "ug/L", "unicode": "1,3-Dichloropropane", - "fraction": "total" + "fraction": "total", }, { "name": "1,4-dichlorobenzene", "tex": "1,4-Dichlorobenzene", "units": "ug/L", "unicode": "1,4-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "1-chlorohexane", "tex": "1-Chlorohexane", "units": "ug/L", "unicode": "1-Chlorohexane", - "fraction": "total" + "fraction": "total", }, { "name": "1-methylnaphthalene", "tex": "1-Methylnaphthalene", "units": "ug/L", "unicode": "1-Methylnaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "2,2-dichloropropane", "tex": "2,2-Dichloropropane", "units": "ug/L", "unicode": "2,2-Dichloropropane", - "fraction": "total" + "fraction": "total", }, { "name": "2,4'-ddd", "tex": "2,4'-DDD", "units": "ug/L", "unicode": "2,4'-DDD", - "fraction": "total" + "fraction": "total", }, { "name": "2,4'-dde", "tex": "2,4'-DDE", "units": "ug/L", "unicode": "2,4'-DDE", - "fraction": "total" + "fraction": "total", }, { "name": "2,4'-ddt", "tex": "2,4'-DDT", "units": "ug/L", "unicode": "2,4'-DDT", - "fraction": "total" + "fraction": "total", }, { "name": "2,4,5-tp-silvex", "tex": "2,4,5-TP-SILVEX", "units": "ug/L", "unicode": "2,4,5-TP-Silvex", - "fraction": "total" + "fraction": "total", }, { "name": "2,4,5-trichlorophenol", "tex": "2,4,5-Trichlorophenol", "units": "ug/L", "unicode": "2,4,5-Trichlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "2,4,6-trichlorophenol", "tex": "2,4,6-Trichlorophenol", "units": "ug/L", "unicode": "2,4,6-Trichlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-d", "tex": "2,4-D", "units": "ug/L", "unicode": "2,4-D", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-dichlorophenol", "tex": "2,4-Dichlorophenol", "units": "ug/L", "unicode": "2,4-Dichlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-dinitrophenol", "tex": "2,4-Dinitrophenol", "units": "ug/L", "unicode": "2,4-Dinitrophenol", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-dinitrotoluene", "tex": "2,4-Dinitrotoluene", "units": "ug/L", "unicode": "2,4-Dinitrotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-dimethylphenol", "tex": "2,4-Dimethylphenol", "units": "ug/L", "unicode": "2,4-Dimethylphenol", - "fraction": "total" + "fraction": "total", }, { "name": "2,6-dinitrotoluene", "tex": "2,6-Dinitrotoluene", "units": "ug/L", "unicode": "2,6-Dinitrotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "2-butanone", "tex": "2-Butanone", "units": "ug/L", "unicode": "2-Butanone", - "fraction": "total" + "fraction": "total", }, { "name": "2-chloroethyl vinyl ether", "tex": "2-Chloroethyl Vinyl Ether", "units": "ug/L", "unicode": "2-Chloroethyl Vinyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "2-chloronaphthalene", "tex": "2-Chloronaphthalene", "units": "ug/L", "unicode": "2-Chloronaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "2-chlorophenol", "tex": "2-Chlorophenol", "units": "ug/L", "unicode": "2-Chlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "2-chlorotoluene", "tex": "2-Chlorotoluene", "units": "ug/L", "unicode": "2-Chlorotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "2-hexanone", "tex": "2-Hexanone", "units": "ug/L", "unicode": "2-Hexanone", - "fraction": "total" + "fraction": "total", }, { "name": "2-methylnaphthalene", "tex": "2-Methylnaphthalene", "units": "ug/L", "unicode": "2-Methylnaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "2-nitrophenol", "tex": "2-Nitrophenol", "units": "ug/L", "unicode": "2-Nitrophenol", - "fraction": "total" + "fraction": "total", }, { "name": "3,3'-dichlorobenzidine", "tex": "3,3'-Dichlorobenzidine", "units": "ug/L", "unicode": "3,3'-Dichlorobenzidine", - "fraction": "total" + "fraction": "total", }, { "name": "4,4'-ddd", "tex": "4,4'-DDD", "units": "ug/L", "unicode": "4,4'-DDD", - "fraction": "total" + "fraction": "total", }, { "name": "4,4'-dde", "tex": "4,4'-DDE", "units": "ug/L", "unicode": "4,4'-DDE", - "fraction": "total" + "fraction": "total", }, { "name": "4,4'-ddt", "tex": "4,4'-DDT", "units": "ug/L", "unicode": "4,4'-DDT", - "fraction": "total" + "fraction": "total", }, { "name": "4,6-dinitro-2-methylphenol", "tex": "4,6-Dinitro-2-methylphenol", "units": "ug/L", "unicode": "4,6-Dinitro-2-methylphenol", - "fraction": "total" + "fraction": "total", }, { "name": "4,6-dinitro-o-cresol", "tex": "4,6-Dinitro-o-cresol", "units": "ug/L", "unicode": "4,6-Dinitro-o-cresol", - "fraction": "total" + "fraction": "total", }, { "name": "4-bromophenyl phenyl ether", "tex": "4-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Bromophenyl Phenyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "4-chlorophenyl phenyl ether", "tex": "4-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "4-Chlorophenyl Phenyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "4-chlorotoluene", "tex": "4-Chlorotoluene", "units": "ug/L", "unicode": "4-Chlorotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "4-nitrophenol", "tex": "4-Nitrophenol", "units": "ug/L", "unicode": "4-Nitrophenol", - "fraction": "total" + "fraction": "total", }, { "name": "4-chloro-3-methylphenol", "tex": "4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", - "fraction": "total" + "fraction": "total", }, { "name": "4-chloro-3-methylphenol, dissolved", "tex": "Dissolved 4-Chloro-3-Methylphenol", "units": "ug/L", "unicode": "4-Chloro-3-Methylphenol", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "4-hydroxy-4-methyl-2-pentanone", "tex": "4-Hydroxy-4-Methyl-2-Pentanone", "units": "ug/L", "unicode": "4-Hydroxy-4-Methyl-2-Pentanone", - "fraction": "total" + "fraction": "total", }, { "name": "acenaphthene", "tex": "Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", - "fraction": "total" + "fraction": "total", }, { "name": "acenaphthene, dissolved", "tex": "Dissolved Acenaphthene", "units": "ug/L", "unicode": "Acenaphthene", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "acenaphthylene", "tex": "Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", - "fraction": "total" + "fraction": "total", }, { "name": "acenaphthylene, suspended", "tex": "Suspended Acenaphthylene", "units": "ug/L", "unicode": "Acenaphthylene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "acetone", "tex": "Acetone", "units": "ug/L", "unicode": "Acetone", - "fraction": "total" + "fraction": "total", }, { "name": "acrolein", "tex": "Acrolein", "units": "ug/L", "unicode": "Acrolein", - "fraction": "total" + "fraction": "total", }, { "name": "acrylonitrile", "tex": "Acrylonitrile", "units": "ug/L", "unicode": "Acrylonitrile", - "fraction": "total" + "fraction": "total", }, { "name": "alachlor", "tex": "Alachlor", "units": "ug/L", "unicode": "Alachlor", - "fraction": "total" + "fraction": "total", }, { "name": "aldrin", "tex": "Aldrin", "units": "ug/L", "unicode": "Aldrin", - "fraction": "total" + "fraction": "total", }, { "name": "alkalinity", "tex": "Alkalinity", "units": "mg/L", "unicode": "Alkalinity", - "fraction": "total" + "fraction": "total", }, { "name": "alkalinity, carbonate as caco3", "tex": "Alkalinity, Carbonate as CaCO$_{3}$", "units": "mg/L", "unicode": "Alkalinity, Carbonate as CaCO₃", - "fraction": "total" + "fraction": "total", }, { "name": "aluminum, dissolved", "tex": "Dissolved Aluminum", "units": "ug/L", "unicode": "Aluminum", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "aluminum, total", "tex": "Total Aluminum", "units": "ug/L", "unicode": "Aluminum", - "fraction": "total" + "fraction": "total", }, { "name": "anthracene", "tex": "Anthracene", "units": "ug/L", "unicode": "Anthracene", - "fraction": "total" + "fraction": "total", }, { "name": "anthracene, suspended", "tex": "Suspended Anthracene", "units": "ug/L", "unicode": "Anthracene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "antimony, dissolved", "tex": "Dissolved Antimony", "units": "ug/L", "unicode": "Antimony", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "antimony, total", "tex": "Total Antimony", "units": "ug/L", "unicode": "Antimony", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1016", "tex": "Aroclor 1016", "units": "ug/L", "unicode": "Aroclor 1016", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1221", "tex": "Aroclor 1221", "units": "ug/L", "unicode": "Aroclor 1221", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1232", "tex": "Aroclor 1232", "units": "ug/L", "unicode": "Aroclor 1232", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1242", "tex": "Aroclor 1242", "units": "ug/L", "unicode": "Aroclor 1242", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1248", "tex": "Aroclor 1248", "units": "ug/L", "unicode": "Aroclor 1248", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1254", "tex": "Aroclor 1254", "units": "ug/L", "unicode": "Aroclor 1254", - "fraction": "total" + "fraction": "total", }, { "name": "aroclor 1260", "tex": "Aroclor 1260", "units": "ug/L", "unicode": "Aroclor 1260", - "fraction": "total" + "fraction": "total", }, { "name": "arsenic, dissolved", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "arsenic, total", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved arsenic", "tex": "Dissolved Arsenic", "units": "ug/L", "unicode": "Arsenic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "total arsenic", "tex": "Total Arsenic", "units": "ug/L", "unicode": "Arsenic", - "fraction": "total" + "fraction": "total", }, { "name": "atrazine", "tex": "Atrazine", "units": "ug/L", "unicode": "Atrazine", - "fraction": "total" + "fraction": "total", }, { "name": "bhc-alpha", "tex": "BHC-ALPHA", "units": "ug/L", "unicode": "BHC-ALPHA", - "fraction": "total" + "fraction": "total", }, { "name": "bhc-beta", "tex": "BHC-BETA", "units": "ug/L", "unicode": "BHC-BETA", - "fraction": "total" + "fraction": "total", }, { "name": "bhc-delta", "tex": "BHC-DELTA", "units": "ug/L", "unicode": "BHC-DELTA", - "fraction": "total" + "fraction": "total", }, { "name": "bod", "tex": "Biological Oxygen Demand", "units": "mg/L", "unicode": "Biological Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "bod, dissolved", "tex": "Biological Oxygen Demand (dissolved)", "units": "mg/L", "unicode": "Biological Oxygen Demand", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "bod, non-standard conditions", "tex": "Biological Oxygen Demand (non-standard conditions)", "units": "mg/L", "unicode": "Biological Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "barium, dissolved", "tex": "Dissolved Barium", "units": "ug/L", "unicode": "Barium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "barium, total", "tex": "Total Barium", "units": "ug/L", "unicode": "Barium", - "fraction": "total" + "fraction": "total", }, { "name": "benz[a]anthracene", "tex": "Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", - "fraction": "total" + "fraction": "total", }, { "name": "benz[a]anthracene, suspended", "tex": "Suspended Benz[a]anthracene", "units": "ug/L", "unicode": "Benz[a]anthracene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "benzene", "tex": "Benzene", "units": "ug/L", "unicode": "Benzene", - "fraction": "total" + "fraction": "total", }, { "name": "benzidine", "tex": "Benzidine", "units": "ug/L", "unicode": "Benzidine", - "fraction": "total" + "fraction": "total", }, { "name": "benzofluoranthene", "tex": "Benzofluoranthene", "units": "ug/L", "unicode": "Benzofluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo(b)fluoranthene", "tex": "Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo(b)fluoranthene, suspended", "tex": "Suspended Benzo(b)fluoranthene", "units": "ug/L", "unicode": "Benzo(b)fluoranthene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "benzo[a]pyrene", "tex": "Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo[a]pyrene, suspended", "tex": "Suspended Benzo[a]pyrene", "units": "ug/L", "unicode": "Benzo[a]pyrene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "benzo[ghi]perylene", "tex": "Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo[ghi]perylene, suspended", "tex": "Suspended Benzo[ghi]perylene", "units": "ug/L", "unicode": "Benzo[ghi]perylene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "benzo[k]fluoranthene", "tex": "Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo[k]fluoranthene, suspended", "tex": "Suspended Benzo[k]fluoranthene", "units": "ug/L", "unicode": "Benzo[k]fluoranthene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "benzoic acid", "tex": "Benzoic acid", "units": "ug/L", "unicode": "Benzoic acid", - "fraction": "total" + "fraction": "total", }, { "name": "benzyl alcohol", "tex": "Benzyl Alcohol", "units": "ug/L", "unicode": "Benzyl Alcohol", - "fraction": "total" + "fraction": "total", }, { "name": "beryllium, dissolved", "tex": "Dissolved Beryllium", "units": "ug/L", "unicode": "Beryllium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "beryllium, total", "tex": "Total Beryllium", "units": "ug/L", "unicode": "Beryllium", - "fraction": "total" + "fraction": "total", }, { "name": "biphenyl", "tex": "Biphenyl", "units": "ug/L", "unicode": "Biphenyl", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-chloro-1-methylethyl) ether", "tex": "Bis(2-chloro-1-methylethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloro-1-methylethyl) Ether", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-chloroethoxy)methane", "tex": "Bis(2-chloroethoxy)methane", "units": "ug/L", "unicode": "Bis(2-chloroethoxy)methane", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-chloroethyl) ether", "tex": "Bis(2-chloroethyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroethyl) Ether", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-chloroisopropyl) ether", "tex": "Bis(2-chloroisopropyl) Ether", "units": "ug/L", "unicode": "Bis(2-chloroisopropyl) Ether", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-ethylhexyl) phthalate", "tex": "Bis(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "bis(2-ethylhexyl)phthalate", "tex": "Bis(2-ethylhexyl)Phthalate", "units": "ug/L", "unicode": "Bis(2-ethylhexyl) Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "bis(n-octyl)phthalate", "tex": "Bis(n-octyl)phthalate", "units": "ug/L", "unicode": "Bis(n-octyl) Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "bromobenzene", "tex": "Bromobenzene", "units": "ug/L", "unicode": "Bromobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "bromochloroiodomethane", "tex": "Bromochloroiodomethane", "units": "ug/L", "unicode": "Bromochloroiodomethane", - "fraction": "total" + "fraction": "total", }, { "name": "bromoform", "tex": "Bromoform", "units": "ug/L", "unicode": "Bromoform", - "fraction": "total" + "fraction": "total", }, { "name": "bromomethane", "tex": "Bromomethane", "units": "ug/L", "unicode": "Bromomethane", - "fraction": "total" + "fraction": "total", }, { "name": "butyl benzyl phthalate", "tex": "Butyl Benzyl Phthalate", "units": "ug/L", "unicode": "Butyl Benzyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "cbod", "tex": "Chemical-Biological Oxygen Demand", "units": "mg/L", "unicode": "Chemical-Biological Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "cfc-11", "tex": "CFC-11", "units": "ug/L", "unicode": "CFC-11", - "fraction": "total" + "fraction": "total", }, { "name": "cfc-12", "tex": "CFC-12", "units": "ug/L", "unicode": "CFC-12", - "fraction": "total" + "fraction": "total", }, { "name": "cadmium, dissolved", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "cadmium, suspended", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "cadmium, total", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved cadmium", "tex": "Dissolved Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "suspended cadmium", "tex": "Suspended Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "total cadmium", "tex": "Total Cadmium", "units": "ug/L", "unicode": "Cadmium", - "fraction": "total" + "fraction": "total", }, { "name": "calcium as caco3, total", "tex": "Total Calcium as CaCO$_{3}$", "units": "mg/L", "unicode": "Calcium as CaCO₃", - "fraction": "total" + "fraction": "total", }, { "name": "calcium, dissolved", "tex": "Dissolved Calcium", "units": "mg/L", "unicode": "Calcium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "calcium, total", "tex": "Total Calcium", "units": "mg/L", "unicode": "Calcium", - "fraction": "total" + "fraction": "total", }, { "name": "carbofuran", "tex": "Carbofuran", "units": "ug/L", "unicode": "Carbofuran", - "fraction": "total" + "fraction": "total", }, { "name": "carbon disulfide", "tex": "Carbon Disulfide", "units": "ug/L", "unicode": "Carbon Disulfide", - "fraction": "total" + "fraction": "total", }, { "name": "carbon fraction, particulate organic material", "tex": "Carbon Fraction, Particulate Organic Material", "units": "mg/L", "unicode": "Carbon, Organic", - "fraction": "particulate" + "fraction": "particulate", }, { "name": "carbon tetrachloride", "tex": "Carbon Tetrachloride", "units": "ug/L", "unicode": "Carbon Tetrachloride", - "fraction": "total" + "fraction": "total", }, { "name": "chemical oxygen demand", "tex": "Chemical Oxygen Demand", "units": "mg/L", "unicode": "Chemical Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "chemical oxygen demand, high level", "tex": "Chemical Oxygen Demand (high level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "chemical oxygen demand, low level", "tex": "Chemical Oxygen Demand (low level)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", - "fraction": "total" + "fraction": "total", }, { "name": "chemical oxygen demand, low level, filtered", "tex": "Chemical Oxygen Demand (low level, filtered)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "chemical oxygen demand, soluble", "tex": "Chemical Oxygen Demand (soluble)", "units": "mg/L", "unicode": "Chemical Oxygen Demand", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "chlordane", "tex": "Chlordane", "units": "ug/L", "unicode": "Chlordane", - "fraction": "total" + "fraction": "total", }, { "name": "chloride, dissolved", "tex": "Dissolved Chloride", "units": "mg/L", "unicode": "Chloride", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "chloride, total", "tex": "Total Chloride", "units": "mg/L", "unicode": "Chloride", - "fraction": "total" + "fraction": "total", }, { "name": "chlorobenzene", "tex": "Chlorobenzene", "units": "ug/L", "unicode": "Chlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "chlorodibromomethane", "tex": "Chlorodibromomethane", "units": "ug/L", "unicode": "Chlorodibromomethane", - "fraction": "total" + "fraction": "total", }, { "name": "chloroethane", "tex": "Chloroethane", "units": "ug/L", "unicode": "Chloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "chloroform", "tex": "Chloroform", "units": "ug/L", "unicode": "Chloroform", - "fraction": "total" + "fraction": "total", }, { "name": "chloromethane", "tex": "Chloromethane", "units": "ug/L", "unicode": "Chloromethane", - "fraction": "total" + "fraction": "total", }, { "name": "chlorotoluene", "tex": "Chlorotoluene", "units": "ug/L", "unicode": "Chlorotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "chlorpyrifos", "tex": "Chlorpyrifos", "units": "ug/L", "unicode": "Chlorpyrifos", - "fraction": "total" + "fraction": "total", }, { "name": "chromium(vi), dissolved", "tex": "Dissolved Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "chromium(vi), total", "tex": "Total Chromium(VI)", "units": "ug/L", "unicode": "Chromium(VI)", - "fraction": "total" + "fraction": "total", }, { "name": "chromium, dissolved", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "chromium, suspended", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "chromium, total", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved chromium", "tex": "Dissolved Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "suspended chromium", "tex": "Suspended Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "total chromium", "tex": "Total Chromium", "units": "ug/L", "unicode": "Chromium", - "fraction": "total" + "fraction": "total", }, { "name": "chrysene", "tex": "Chrysene", "units": "ug/L", "unicode": "Chrysene", - "fraction": "total" + "fraction": "total", }, { "name": "chrysene, suspended", "tex": "Suspended Chrysene", "units": "ug/L", "unicode": "Chrysene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "cobalt, total", "tex": "Total Cobalt", "units": "ug/L", "unicode": "Cobalt", - "fraction": "total" + "fraction": "total", }, { "name": "copper, dissolved", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "copper, suspended", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "copper, total", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved copper", "tex": "Dissolved Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "suspended copper", "tex": "Suspended Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "total copper", "tex": "Total Copper", "units": "ug/L", "unicode": "Copper", - "fraction": "total" + "fraction": "total", }, { "name": "cumene", "tex": "Cumene", "units": "ug/L", "unicode": "Cumene", - "fraction": "total" + "fraction": "total", }, { "name": "cyanazine", "tex": "Cyanazine", "units": "ug/L", "unicode": "Cyanazine", - "fraction": "total" + "fraction": "total", }, { "name": "cyanide", "tex": "Cyanide", "units": "mg/L", "unicode": "Cyanide", - "fraction": "total" + "fraction": "total", }, { "name": "daconil", "tex": "DACONIL", "units": "ug/L", "unicode": "DACONIL", - "fraction": "total" + "fraction": "total", }, { "name": "di(2-ethylhexyl) phthalate", "tex": "Di(2-ethylhexyl) Phthalate", "units": "ug/L", "unicode": "Di(2-ethylhexyl) Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "di-n-octyl phthalate", "tex": "Di-n-octyl Phthalate", "units": "ug/L", "unicode": "Di-n-octyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "diazinon", "tex": "Diazinon", "units": "ug/L", "unicode": "Diazinon", - "fraction": "total" + "fraction": "total", }, { "name": "dibenz[a,h]anthracene", "tex": "Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", - "fraction": "total" + "fraction": "total", }, { "name": "dibenz[a,h]anthracene, dissolved", "tex": "Dissolved Dibenz[a,h]anthracene", "units": "ug/L", "unicode": "Dibenz[a,h]anthracene", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "dibenzofuran", "tex": "Dibenzofuran", "units": "ug/L", "unicode": "Dibenzofuran", - "fraction": "total" + "fraction": "total", }, { "name": "dibromomethane", "tex": "Dibromomethane", "units": "ug/L", "unicode": "Dibromomethane", - "fraction": "total" + "fraction": "total", }, { "name": "dibromodichloromethane", "tex": "Dibromodichloromethane", "units": "ug/L", "unicode": "Dibromodichloromethane", - "fraction": "total" + "fraction": "total", }, { "name": "dibutyl phthalate", "tex": "Dibutyl Phthalate", "units": "ug/L", "unicode": "Dibutyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "dichlorobromomethane", "tex": "Dichlorobromomethane", "units": "ug/L", "unicode": "Dichlorobromomethane", - "fraction": "total" + "fraction": "total", }, { "name": "dichlorodifluoromethane", "tex": "Dichlorodifluoromethane", "units": "ug/L", "unicode": "Dichlorodifluoromethane", - "fraction": "total" + "fraction": "total", }, { "name": "dichlorophenol", "tex": "Dichlorophenol", "units": "ug/L", "unicode": "Dichlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "dinitrophenol", "tex": "Dinitrophenol", "units": "ug/L", "unicode": "Dinitrophenol", - "fraction": "total" + "fraction": "total", }, { "name": "dieldrin", "tex": "Dieldrin", "units": "ug/L", "unicode": "Dieldrin", - "fraction": "total" + "fraction": "total", }, { "name": "diethyl phthalate", "tex": "Diethyl Phthalate", "units": "ug/L", "unicode": "Diethyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "dimethyl phthalate", "tex": "Dimethyl Phthalate", "units": "ug/L", "unicode": "Dimethyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "dimethylnaphthalene", "tex": "Dimethylnaphthalene", "units": "ug/L", "unicode": "Dimethylnaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved oxygen (do)", "tex": "Dissolved Oxygen (DO)", "units": "mg/L", "unicode": "Dissolved Oxygen (DO)", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "dro", "tex": "DRO", "units": "ug/L", "unicode": "DRO", - "fraction": "total" + "fraction": "total", }, { "name": "endosulfan i", "tex": "Endosulfan I", "units": "ug/L", "unicode": "Endosulfan I", - "fraction": "total" + "fraction": "total", }, { "name": "endosulfan i (alpha)", "tex": "Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", - "fraction": "total" + "fraction": "total", }, { "name": ".alpha.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan I (alpha)", "units": "ug/L", "unicode": "Endosulfan I (alpha)", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "endosulfan ii", "tex": "Endosulfan II", "units": "ug/L", "unicode": "Endosulfan II", - "fraction": "total" + "fraction": "total", }, { "name": "endosulfan ii (beta)", "tex": "Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", - "fraction": "total" + "fraction": "total", }, { "name": ".beta.-endosulfan, dissolved", "tex": "Dissolved, Endosulfan II (beta)", "units": "ug/L", "unicode": "Endosulfan II (beta)", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "endosulfan sulfate", "tex": "Endosulfan sulfate", "units": "ug/L", "unicode": "Endosulfan sulfate", - "fraction": "total" + "fraction": "total", }, { "name": "endrin", "tex": "Endrin", "units": "ug/L", "unicode": "Endrin", - "fraction": "total" + "fraction": "total", }, { "name": "endrin aldehyde", "tex": "Endrin Aldehyde", "units": "ug/L", "unicode": "Endrin Aldehyde", - "fraction": "total" + "fraction": "total", }, { "name": "endrin ketone", "tex": "Endrin Ketone", "units": "ug/L", "unicode": "Endrin Ketone", - "fraction": "total" + "fraction": "total", }, { "name": "enterococcus", "tex": "Enterococcus", "units": "MPN/100 mL", "unicode": "Enterococcus", - "fraction": "total" + "fraction": "total", }, { "name": "escherichia coli", "tex": "Escherichia coli", "units": "MPN/100 mL", "unicode": "Escherichia coli", - "fraction": "total" + "fraction": "total", }, { "name": "male specific coliphage", "tex": "Male Specific Coliphage", "units": "PFU/100 mL", "unicode": "Male Specific Coliphage", - "fraction": "total" + "fraction": "total", }, { "name": "somatic coliphage", "tex": "Somatic Coliphage", "units": "PFU/100 mL", "unicode": "Somatic Coliphage", - "fraction": "total" + "fraction": "total", }, { "name": "ethyl methacrylate", "tex": "Ethyl Methacrylate", "units": "ug/L", "unicode": "Ethyl Methacrylate", - "fraction": "total" + "fraction": "total", }, { "name": "ethylbenzene", "tex": "Ethylbenzene", "units": "ug/L", "unicode": "Ethylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "ethylene dibromide", "tex": "Ethylene Dibromide", "units": "ug/L", "unicode": "Ethylene Dibromide", - "fraction": "total" + "fraction": "total", }, { "name": "fecal coliform", "tex": "Fecal Coliform", "units": "MPN/100 mL", "unicode": "Fecal Coliform", - "fraction": "total" + "fraction": "total", }, { "name": "fecal streptococcus group bacteria", "tex": "Fecal Streptococcus Group Bacteria", "units": "MPN/100 mL", "unicode": "Fecal Streptococcus Group Bacteria", - "fraction": "total" + "fraction": "total", }, { "name": "fluoranthene", "tex": "Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "fluoranthene, suspended", "tex": "Suspended Fluoranthene", "units": "ug/L", "unicode": "Fluoranthene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "fluorene", "tex": "Fluorene", "units": "ug/L", "unicode": "Fluorene", - "fraction": "total" + "fraction": "total", }, { "name": "fluorene, suspended", "tex": "Suspended Fluorene", "units": "ug/L", "unicode": "Fluorene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "fluoride, dissolved", "tex": "Dissolved Fluoride", "units": "mg/L", "unicode": "Fluoride", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "fluoride, total", "tex": "Total Fluoride", "units": "mg/L", "unicode": "Fluoride", - "fraction": "total" + "fraction": "total", }, { "name": "glyphosate", "tex": "Glyphosate", "units": "ug/L", "unicode": "Glyphosate", - "fraction": "total" + "fraction": "total", }, { "name": "halon 1011", "tex": "Halon 1011", "units": "ug/L", "unicode": "Halon 1011", - "fraction": "total" + "fraction": "total", }, { "name": "hardness", "tex": "Hardness", "units": "mg/L", "unicode": "Hardness", - "fraction": "total" + "fraction": "total", }, { "name": "hardness, non-carbonate", "tex": "Hardness, non-carbonate", "units": "mg/L", "unicode": "Hardness, non-carbonate", - "fraction": "total" + "fraction": "total", }, { "name": "heptachlor", "tex": "Heptachlor", "units": "ug/L", "unicode": "Heptachlor", - "fraction": "total" + "fraction": "total", }, { "name": "heptachlor epoxide", "tex": "Heptachlor Epoxide", "units": "ug/L", "unicode": "Heptachlor Epoxide", - "fraction": "total" + "fraction": "total", }, { "name": "hexachlorobenzene", "tex": "Hexachlorobenzene", "units": "ug/L", "unicode": "Hexachlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "hexachlorobutadiene", "tex": "Hexachlorobutadiene", "units": "ug/L", "unicode": "Hexachlorobutadiene", - "fraction": "total" + "fraction": "total", }, { "name": "hexachlorocyclopentadiene", "tex": "Hexachlorocyclopentadiene", "units": "ug/L", "unicode": "Hexachlorocyclopentadiene", - "fraction": "total" + "fraction": "total", }, { "name": "hexachloroethane", "tex": "Hexachloroethane", "units": "ug/L", "unicode": "Hexachloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "hydrocarbons, total petroleum (tph)", "tex": "Hydrocarbons, Total Petroleum (TPH)", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", - "fraction": "total" + "fraction": "total", }, { "name": "total petroleum hydrocarbons", "tex": "Total Petroleum Hydrocarbons", "units": "ug/L", "unicode": "Total Petroleum Hydrocarbons", - "fraction": "total" + "fraction": "total", }, { "name": "total petroleum hydrocarbons - diesel range", "tex": "Total Petroleum Hydrocarbons - Diesel range", "units": "ug/L", "unicode": "Organics, Diesel Range", - "fraction": "total" + "fraction": "total", }, { "name": "hydrocarbons, total petroleum, diesel range organics", "tex": "Hydrocarbons, Total Petroleum, diesel range Organics", "units": "ug/L", "unicode": "Organics, Diesel Range", - "fraction": "total" + "fraction": "total", }, { "name": "hydrocarbons, total petroleum, gasoline range organics", "tex": "Hydrocarbons, Total Petroleum, gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", - "fraction": "total" + "fraction": "total", }, { "name": "indeno[1,2,3-cd]pyrene", "tex": "Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", - "fraction": "total" + "fraction": "total", }, { "name": "indeno[1,2,3-cd]pyrene, suspended", "tex": "Suspended Indeno[1,2,3-cd]pyrene", "units": "ug/L", "unicode": "Indeno[1,2,3-cd]pyrene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "inorganic carbon, total", "tex": "Total Inorganic Carbon", "units": "mg/L", "unicode": "Carbon, Inorganic", - "fraction": "total" + "fraction": "total", }, { "name": "iodomethane", "tex": "Iodomethane", "units": "ug/L", "unicode": "Iodomethane", - "fraction": "total" + "fraction": "total", }, { "name": "iron, dissolved", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "iron, total", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved iron", "tex": "Dissolved Iron", "units": "ug/L", "unicode": "Iron", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "total iron", "tex": "Total Iron", "units": "ug/L", "unicode": "Iron", - "fraction": "total" + "fraction": "total", }, { "name": "isophorone", "tex": "Isophorone", "units": "ug/L", "unicode": "Isophorone", - "fraction": "total" + "fraction": "total", }, { "name": "isopropylbenzene", "tex": "Isopropylbenzene", "units": "ug/L", "unicode": "Isopropylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "kjeldahl nitrogen (tkn)", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", - "fraction": "total" + "fraction": "total", }, { "name": "total kjeldahl nitrogen", "tex": "Total Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", - "fraction": "total" + "fraction": "total", }, { "name": "kjeldahl nitrogen, dissolved", "tex": "Dissolved Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "kjeldahl nitrogen, suspended", "tex": "Suspended Kjeldahl Nitrogen", "units": "mg/L", "unicode": "Kjeldahl Nitrogen", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "Kjeldahl Phosphate (TKP)", "tex": "Total Kjeldahl Phosphate", "units": "mg/L", "unicode": "Kjeldahl Phosphate", - "fraction": "total" + "fraction": "total", }, { "name": "lead, dissolved", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "lead, suspended", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "lead, total", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved lead", "tex": "Dissolved Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "suspended lead", "tex": "Suspended Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "total lead", "tex": "Total Lead", "units": "ug/L", "unicode": "Lead", - "fraction": "total" + "fraction": "total", }, { "name": "lindane", "tex": "Lindane", "units": "ug/L", "unicode": "Lindane", - "fraction": "total" + "fraction": "total", }, { "name": "lithium, dissolved", "tex": "Dissolved Lithium", "units": "ug/L", "unicode": "Lithium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "magnesium, dissolved", "tex": "Dissolved Magnesium", "units": "ug/L", "unicode": "Magnesium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "magnesium, total", "tex": "Total Magnesium", "units": "ug/L", "unicode": "Magnesium", - "fraction": "total" + "fraction": "total", }, { "name": "malathion", "tex": "Malathion", "units": "ug/L", "unicode": "Malathion", - "fraction": "total" + "fraction": "total", }, { "name": "manganese, dissolved", "tex": "Dissolved Manganese", "units": "ug/L", "unicode": "Manganese", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "manganese, total", "tex": "Total Manganese", "units": "ug/L", "unicode": "Manganese", - "fraction": "total" + "fraction": "total", }, { "name": "mercury, dissolved", "tex": "Dissolved Mercury", "units": "ug/L", "unicode": "Mercury", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "mercury, total", "tex": "Total Mercury", "units": "ug/L", "unicode": "Mercury", - "fraction": "total" + "fraction": "total", }, { "name": "methoxychlor", "tex": "Methoxychlor", "units": "ug/L", "unicode": "Methoxychlor", - "fraction": "total" + "fraction": "total", }, { "name": "methyl mercury", "tex": "Methyl Mercury", "units": "ug/L", "unicode": "Methyl Mercury", - "fraction": "total" + "fraction": "total", }, { "name": "methyl bromide", "tex": "Methyl bromide", "units": "ug/L", "unicode": "Methyl bromide", - "fraction": "total" + "fraction": "total", }, { "name": "methyl ethyl ketone", "tex": "Methyl Ethyl Ketone", "units": "ug/L", "unicode": "Methyl Ethyl Ketone", - "fraction": "total" + "fraction": "total", }, { "name": "methyl isobutyl ketone", "tex": "Methyl Isobutyl Ketone", "units": "ug/L", "unicode": "Methyl Isobutyl Ketone", - "fraction": "total" + "fraction": "total", }, { "name": "methyl tert-butyl ether", "tex": "Methyl Tertiary Butyl Ether", "units": "ug/L", "unicode": "Methyl Tertiary Butyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "methylene blue active substances (mbas)", "tex": "Methylene Blue Active Substances (MBAS)", "units": "ug/L", "unicode": "Methylene Blue Active Substances", - "fraction": "total" + "fraction": "total", }, { "name": "methylene chloride", "tex": "Methylene Chloride", "units": "ug/L", "unicode": "Methylene Chloride", - "fraction": "total" + "fraction": "total", }, { "name": "methylnaphthalene", "tex": "Methylnaphthalene", "units": "ug/L", "unicode": "Methylnaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "molybdenum, total", "tex": "Total Molybdenum", "units": "ug/L", "unicode": "Molybdenum", - "fraction": "total" + "fraction": "total", }, { "name": "n-nitrosodi-n-propylamine", "tex": "N-Nitrosodi-n-Propylamine", "units": "ug/L", "unicode": "N-Nitrosodi-n-Propylamine", - "fraction": "total" + "fraction": "total", }, { "name": "n-nitrosodimethylamine", "tex": "N-Nitrosodimethylamine", "units": "ug/L", "unicode": "N-Nitrosodimethylamine", - "fraction": "total" + "fraction": "total", }, { "name": "n-nitrosodiphenylamine", "tex": "N-Nitrosodiphenylamine", "units": "ug/L", "unicode": "N-Nitrosodiphenylamine", - "fraction": "total" + "fraction": "total", }, { "name": "naphthalene", "tex": "Naphthalene", "units": "ug/L", "unicode": "Naphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "naphthalene, dissolved", "tex": "Dissolved Naphthalene", "units": "ug/L", "unicode": "Naphthalene", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "naphthalene, suspended", "tex": "Suspended Naphthalene", "units": "ug/L", "unicode": "Naphthalene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "nickel, dissolved", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "nickel, total", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved nickel", "tex": "Dissolved Nickel", "units": "ug/L", "unicode": "Nickel", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "total nickel", "tex": "Total Nickel", "units": "ug/L", "unicode": "Nickel", - "fraction": "total" + "fraction": "total", }, { "name": "nitrobenzene", "tex": "Nitrobenzene", "units": "ug/L", "unicode": "Nitrobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrate (no3) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO₃) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrate (NO₃) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrite (no2) + nitrate (no3) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrite (no$_{2}$) + nitrate (no$_{3}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) + Nitrate (NO$_{3}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO₂) + Nitrate (NO₃) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrite (no2) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO₂) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nitrite (no$_{2}$) as n", "tex": "Nitrogen, Nitrite (NO$_{2}$) as N", "units": "mg/L", "unicode": "Nitrogen, Nitrite (NO₂) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, nox as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NOₓ as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, no$_{x}$ as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NOₓ as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, noₓ as n", "tex": "Nitrogen, NO$_{x}$ as N", "units": "mg/L", "unicode": "Nitrogen, NOₓ as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, total", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", - "fraction": "total" + "fraction": "total", }, { "name": "total nitrogen", "tex": "Total Nitrogen", "units": "mg/L", "unicode": "Nitrogen", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, ammonia as n", "tex": "Nitrogen, Ammonia as N", "units": "mg/L", "unicode": "Nitrogen, Ammonia as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, ammonium (nh4) as n", "tex": "Nitrogen, Ammonium (NH4) as N", "units": "mg/L", "unicode": "Nitrogen, Ammonium (NH₄) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, ammonium (nh4) as nh4", "tex": "Nitrogen, Ammonium (NH$_{4}$) as NH$_{4}$", "units": "mg/L", "unicode": "Ammonium (NH₄) as NH₄", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, unionized ammonia (nh3) as n", "tex": "Nitrogen, Unionized Ammonia (NH$_{3}$) as N", "units": "mg/L", "unicode": "Unionized Ammonia (NH₃) as N", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, ammonia (nh3) as nh3", "tex": "Nitrogen, Ammonia (NH$_{3}$) as NH3", "units": "mg/L", "unicode": "Nitrogen, Ammonia (NH₃) as NH₃", - "fraction": "total" + "fraction": "total", }, { "name": "oil range organics", "tex": "Oil Range Organics", "units": "ug/L", "unicode": "Organics, Oil Range", - "fraction": "total" + "fraction": "total", }, { "name": "oil and grease", "tex": "Oil and Grease", "units": "mg/L", "unicode": "Oil and Grease", - "fraction": "total" + "fraction": "total", }, { "name": "organic nitrogen, dissolved", "tex": "Dissolved Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "nitrogen, dissolved inorganic", "tex": "Nitrogen, Dissolved Inorganic", "units": "mg/L", "unicode": "Nitrogen, Inorganic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "organic nitrogen, total", "tex": "Total Organic Nitrogen", "units": "mg/L", "unicode": "Nitrogen, Organic", - "fraction": "total" + "fraction": "total", }, { "name": "organic carbon, dissolved", "tex": "Dissolved Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "organic carbon, total", "tex": "Total Organic Carbon", "units": "mg/L", "unicode": "Carbon, Organic ", - "fraction": "total" + "fraction": "total", }, { "name": "oro", "tex": "ORO", "units": "ug/L", "unicode": "ORO", - "fraction": "total" + "fraction": "total", }, { "name": "oxidation reduction potential (orp)", "tex": "Oxidation Reduction Potential (ORP)", "units": "mV", "unicode": "Oxidation Reduction Potential (ORP)", - "fraction": "total" + "fraction": "total", }, { "name": "p-isopropyltoluene", "tex": "p-Isopropyltoluene", "units": "ug/L", "unicode": "p-Isopropyltoluene", - "fraction": "total" + "fraction": "total", }, { "name": "p,p'-dde", "tex": "p,p'-DDE", "units": "ug/L", "unicode": "p,p'-DDE", - "fraction": "total" + "fraction": "total", }, { "name": "pbp", "tex": "PBP", "units": "ug/L", "unicode": "PBP", - "fraction": "total" + "fraction": "total", }, { "name": "pentachlorophenol", "tex": "Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", - "fraction": "total" + "fraction": "total", }, { "name": "pentachlorophenol, dissolved", "tex": "Dissolved Pentachlorophenol", "units": "ug/L", "unicode": "Pentachlorophenol", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "phenanthrene", "tex": "Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", - "fraction": "total" + "fraction": "total", }, { "name": "phenanthrene, dissolved", "tex": "Dissolved Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "phenanthrene, suspended", "tex": "Suspended Phenanthrene", "units": "ug/L", "unicode": "Phenanthrene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "phenol", "tex": "Phenol", "units": "ug/L", "unicode": "Phenol", - "fraction": "total" + "fraction": "total", }, { "name": "phenols", "tex": "Phenols", "units": "ug/L", "unicode": "Phenols", - "fraction": "total" + "fraction": "total", }, { "name": "phosphate-phosphorus", "tex": "Phosphate-Phosphorus", "units": "mg/L", "unicode": "Phosphate-Phosphorus", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus as p, dissolved", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "dissolved phosphorus as p", "tex": "Dissolved Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "phosphorus as p, suspended", "tex": "Suspended Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "phosphorus as p, total", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "total" + "fraction": "total", }, { "name": "total phosphorus as p", "tex": "Total Phosphorus as P", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus as po4, total", "tex": "Total Phosphorus as PO4", "units": "mg/L", "unicode": "Phosphorus as PO₄", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus, particulate organic", "tex": "Phosphorus, Particulate Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", - "fraction": "particulate" + "fraction": "particulate", }, { "name": "phosphorus, particulate", "tex": "Phosphorus, Particulate", "units": "mg/L", "unicode": "Phosphorus as P", - "fraction": "particulate" + "fraction": "particulate", }, { "name": "phosphorus, organic", "tex": "Phosphorus, Organic", "units": "mg/L", "unicode": "Phosphorus, Organic", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus, soluble reactive (srp)", "tex": "Phosphorus, Soluble Reactive (SRP)", "units": "mg/L", "unicode": "Phosphorus, Soluble Reactive (SRP)", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus, organic as p, dissolved", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "dissolved phosphorus, organic as p", "tex": "Dissolved Phosphorus, organic as P", "units": "mg/L", "unicode": "Phosphorus, Organic", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "phosphorus, orthophosphate as p", "tex": "Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", - "fraction": "total" + "fraction": "total", }, { "name": "phosphorus, orthophosphate as p, dissolved", "tex": "Dissolved Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "phosphorus, orthophosphate as p, suspended", "tex": "Suspended Phosphorus, Orthophosphate as P", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as P", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "phosphorus, orthophosphate as po4", "tex": "Phosphorus, Orthophosphate as PO$_{4}$", "units": "mg/L", "unicode": "Phosphorus, Orthophosphate as PO₄", - "fraction": "total" + "fraction": "total", }, { "name": "polycyclic aromatic hydrocarbons", "tex": "Polycyclic Aromatic Hydrocarbons", "units": "ug/L", "unicode": "Polycyclic Aromatic Hydrocarbons", - "fraction": "total" + "fraction": "total", }, { "name": "potassium, dissolved", "tex": "Dissolved Potassium", "units": "mg/L", "unicode": "Potassium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "potassium, total", "tex": "Total Potassium", "units": "mg/L", "unicode": "Potassium", - "fraction": "total" + "fraction": "total", }, { "name": "prometryn", "tex": "Prometryn", "units": "ug/L", "unicode": "Prometryn", - "fraction": "total" + "fraction": "total", }, { "name": "pyrene", "tex": "Pyrene", "units": "ug/L", "unicode": "Pyrene", - "fraction": "total" + "fraction": "total", }, { "name": "pyrene, suspended", "tex": "Suspended Pyrene", "units": "ug/L", "unicode": "Pyrene", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "relative toxicity (i 25% reduction)", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", - "fraction": "total" + "fraction": "total", }, { "name": "relative toxicity (i 25% reduction), filtered", "tex": "RELATIVE TOXICITY (I 25\\% REDUCTION, filtered)", "units": "%", "unicode": "Relative Toxicity (I 25% Reduction)", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "ssc-total coarse fraction (>63um)", "tex": "SSC-Total Coarse Fraction ($>63$ \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Coarse Fraction (>63 µm)", - "fraction": "total" + "fraction": "total", }, { "name": "ssc-total fine fraction (<63um)", "tex": "SSC-Total Fine Fraction (<63 \\si[per-mode=symbol]{\\micro\\meter})", "units": "mg/L", "unicode": "SSC-Total Fine Fraction (<63 µm)", - "fraction": "total" + "fraction": "total", }, { "name": "ssc-total particulate solids", "tex": "SSC-Total Particulate Solids", "units": "mg/L", "unicode": "SSC-Total Particulate Solids", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <2000 microns", "tex": "SSC $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <2000 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <1000 microns", "tex": "SSC $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <1000 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <500 microns", "tex": "SSC $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <500 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <250 microns", "tex": "SSC $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <250 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <100 microns", "tex": "SSC $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <100 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <62.5 microns", "tex": "SSC $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <62.5 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <50 microns", "tex": "SSC $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <50 µm", - "fraction": "total" + "fraction": "total", }, { "name": "ssc <25 microns", "tex": "SSC $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "SSC <25 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <2000 microns", "tex": "TVSS $<2000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <2000 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <1000 microns", "tex": "TVSS $<1000$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <1000 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <500 microns", "tex": "TVSS $<500$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <500 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <250 microns", "tex": "TVSS $<250$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <250 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <100 microns", "tex": "TVSS $<100$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <100 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <62.5 microns", "tex": "TVSS $<62.5$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <62.5 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <50 microns", "tex": "TVSS $<50$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <50 µm", - "fraction": "total" + "fraction": "total", }, { "name": "tvss <25 microns", "tex": "TVSS $<25$ \\si[per-mode=symbol]{\\micro\\meter}", "units": "mg/L", "unicode": "TVSS <25 µm", - "fraction": "total" + "fraction": "total", }, { "name": "sand", "tex": "Sand", "units": "mg/L", "unicode": "Sand", - "fraction": "total" + "fraction": "total", }, { "name": "sec-butylbenzene", "tex": "Sec-Butylbenzene", "units": "ug/L", "unicode": "Sec-Butylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "selenium, dissolved", "tex": "Dissolved Selenium", "units": "ug/L", "unicode": "Selenium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "selenium, total", "tex": "Total Selenium", "units": "ug/L", "unicode": "Selenium", - "fraction": "total" + "fraction": "total", }, { "name": "settleable solids", "tex": "Settleable Solids", "units": "mg/L", "unicode": "Settleable Solids", - "fraction": "total" + "fraction": "total", }, { "name": "silt", "tex": "Silt", "units": "mg/L", "unicode": "Silt", - "fraction": "total" + "fraction": "total", }, { "name": "silver, dissolved", "tex": "Dissolved Silver", "units": "ug/L", "unicode": "Silver", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "silver, total", "tex": "Total Silver", "units": "ug/L", "unicode": "Silver", - "fraction": "total" + "fraction": "total", }, { "name": "simazine", "tex": "Simazine", "units": "ug/L", "unicode": "Simazine", - "fraction": "total" + "fraction": "total", }, { "name": "sodium, dissolved", "tex": "Dissolved Sodium", "units": "mg/L", "unicode": "Sodium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "sodium, total", "tex": "Total Sodium", "units": "mg/L", "unicode": "Sodium", - "fraction": "total" + "fraction": "total", }, { "name": "specific conductance", "tex": "Specific Conductance", "units": "umhos/cm", "unicode": "Specific Conductance", - "fraction": "total" + "fraction": "total", }, { "name": "styrene", "tex": "Styrene", "units": "ug/L", "unicode": "Styrene", - "fraction": "total" + "fraction": "total", }, { "name": "sulfate, dissolved", "tex": "Dissolved Sulfate", "units": "mg/L", "unicode": "Sulfate", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "sulfate, total", "tex": "Total Sulfate", "units": "mg/L", "unicode": "Sulfate", - "fraction": "total" + "fraction": "total", }, { "name": "sulfide, total", "tex": "Total Sulfide", "units": "mg/L", "unicode": "Sulfide", - "fraction": "total" + "fraction": "total", }, { "name": "surfactants", "tex": "Surfactants", "units": "ug/L", "unicode": "Surfactants", - "fraction": "total" + "fraction": "total", }, { "name": "suspended sediment concentration (ssc)", "tex": "Suspended Sediment Concentration", "units": "mg/L", "unicode": "Suspended Sediment Concentration", - "fraction": "total" + "fraction": "total", }, { "name": "temperature, water", "tex": "Temperature, water", "units": "deg C", "unicode": "Temperature, Water", - "fraction": "total" + "fraction": "total", }, { "name": "tetrachloroethane", "tex": "Tetrachloroethane", "units": "ug/L", "unicode": "Tetrachloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "tetrachloroethylene", "tex": "Tetrachloroethylene", "units": "ug/L", "unicode": "Tetrachloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "thallium, dissolved", "tex": "Dissolved Thallium", "units": "ug/L", "unicode": "Thallium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "thallium, total", "tex": "Total Thallium", "units": "ug/L", "unicode": "Thallium", - "fraction": "total" + "fraction": "total", }, { "name": "toluene", "tex": "Toluene", "units": "ug/L", "unicode": "Toluene", - "fraction": "total" + "fraction": "total", }, { "name": "total coliform", "tex": "Total Coliform", "units": "MPN/100 mL", "unicode": "Total Coliform", - "fraction": "total" + "fraction": "total", }, { "name": "salmonella", "tex": "Salmonella", "units": "MPN/100 mL", "unicode": "Salmonella", - "fraction": "total" + "fraction": "total", }, { "name": "C. perfringens spores", "tex": "C. perfringens Spores", "units": "MPN/100 mL", "unicode": "C. perfringens Spores", - "fraction": "total" + "fraction": "total", }, { "name": "total dissolved solids", "tex": "Total Dissolved Solids", "units": "mg/L", "unicode": "Total Dissolved Solids", - "fraction": "total" + "fraction": "total", }, { "name": "total solids", "tex": "Total Solids", "units": "mg/L", "unicode": "Total Solids", - "fraction": "total" + "fraction": "total", }, { "name": "total suspended solids", "tex": "Total Suspended Solids", "units": "mg/L", "unicode": "Total Suspended Solids", - "fraction": "total" + "fraction": "total", }, { "name": "total volatile solids", "tex": "Total Volatile Solids", "units": "mg/L", "unicode": "Total Volatile Solids", - "fraction": "total" + "fraction": "total", }, { "name": "total volatile solids, filterable", "tex": "Total Volatile Solids (filterable)", "units": "mg/L", "unicode": "Total Volatile Solids", - "fraction": "total" + "fraction": "total", }, { "name": "toxaphene", "tex": "Toxaphene", "units": "ug/L", "unicode": "Toxaphene", - "fraction": "total" + "fraction": "total", }, { "name": "tribromomethane", "tex": "Tribromomethane", "units": "ug/L", "unicode": "Tribromomethane", - "fraction": "total" + "fraction": "total", }, { "name": "trichloroethane", "tex": "Trichloroethane", "units": "ug/L", "unicode": "Trichloroethane", - "fraction": "total" + "fraction": "total", }, { "name": "trichloroethylene", "tex": "Trichloroethylene", "units": "ug/L", "unicode": "Trichloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "trichlorofuoromethane", "tex": "Trichlorofuoromethane", "units": "ug/L", "unicode": "Trichlorofuoromethane", - "fraction": "total" + "fraction": "total", }, { "name": "trichlorotrifluoroethane", "tex": "Trichlorotrifluoroethane", "units": "ug/L", "unicode": "Trichlorotrifluoroethane", - "fraction": "total" + "fraction": "total", }, { "name": "trihalomethanes", "tex": "Trihalomethanes", "units": "ug/L", "unicode": "Trihalomethanes", - "fraction": "total" + "fraction": "total", }, { "name": "true color", "tex": "True Color", "units": "ADMI Value", "unicode": "True Color", - "fraction": "total" + "fraction": "total", }, { "name": "true color, filtered", "tex": "Filtered True Color", "units": "ADMI Value", "unicode": "Filtered True Color", - "fraction": "total" + "fraction": "total", }, { "name": "turbidity", "tex": "Turbidity", "units": "NT", "unicode": "Turbidity", - "fraction": "total" + "fraction": "total", }, { "name": "turbidity, filtered", "tex": "Filtered Turbidity", "units": "NT", "unicode": "Filtered Turbidity", - "fraction": "total" + "fraction": "total", }, { "name": "vanadium, total", "tex": "Total Vanadium", "units": "ug/L", "unicode": "Vanadium", - "fraction": "total" + "fraction": "total", }, { "name": "vinyl acetate", "tex": "Vinyl Acetate", "units": "ug/L", "unicode": "Vinyl Acetate", - "fraction": "total" + "fraction": "total", }, { "name": "vinyl chloride", "tex": "Vinyl Chloride", "units": "ug/L", "unicode": "Vinyl Chloride", - "fraction": "total" + "fraction": "total", }, { "name": "xylenes, total", "tex": "Total Xylenes", "units": "ug/L", "unicode": "Total Xylenes", - "fraction": "total" + "fraction": "total", }, { "name": "zinc, dissolved", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "zinc, suspended", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "zinc, total", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "total" + "fraction": "total", }, { "name": "dissolved zinc", "tex": "Dissolved Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "suspended zinc", "tex": "Suspended Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "suspended" + "fraction": "suspended", }, { "name": "total zinc", "tex": "Total Zinc", "units": "ug/L", "unicode": "Zinc", - "fraction": "total" + "fraction": "total", }, { "name": "alpha-chlordane", "tex": "alpha-chlordane", "units": "ug/L", "unicode": "alpha-chlordane", - "fraction": "total" + "fraction": "total", }, { "name": "cis-1,2-dichloroethylene", "tex": "cis-1,2-Dichloroethylene", "units": "ug/L", "unicode": "cis-1,2-Dichloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "cis-1,3-dichloropropene", "tex": "cis-1,3-Dichloropropene", "units": "ug/L", "unicode": "cis-1,3-Dichloropropene", - "fraction": "total" + "fraction": "total", }, { "name": "di-n-butyl phthalate", "tex": "di-n-Butyl Phthalate", "units": "ug/L", "unicode": "di-n-Butyl Phthalate", - "fraction": "total" + "fraction": "total", }, { "name": "gamma-chlordane", "tex": "Gamma-Chlordane", "units": "ug/L", "unicode": "Gamma-Chlordane", - "fraction": "total" + "fraction": "total", }, { "name": "m-dichlorobenzene", "tex": "m-Dichlorobenzene", "units": "ug/L", "unicode": "m-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "m-nitroaniline", "tex": "m-Nitroaniline", "units": "ug/L", "unicode": "m-Nitroaniline", - "fraction": "total" + "fraction": "total", }, { "name": "m-xylene", "tex": "m-Xylene", "units": "ug/L", "unicode": "m-Xylene", - "fraction": "total" + "fraction": "total", }, { "name": "n-butylbenzene", "tex": "n-Butylbenzene", "units": "ug/L", "unicode": "n-Butylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "n-propylbenzene", "tex": "n-Propylbenzene", "units": "ug/L", "unicode": "n-Propylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "o-chlorotoluene", "tex": "o-Chlorotoluene", "units": "ug/L", "unicode": "o-Chlorotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "o-dichlorobenzene", "tex": "o-Dichlorobenzene", "units": "ug/L", "unicode": "o-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "o-xylene", "tex": "o-Xylene", "units": "ug/L", "unicode": "o-Xylene", - "fraction": "total" + "fraction": "total", }, { "name": "p-bromophenyl phenyl ether", "tex": "p-Bromophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Bromophenyl Phenyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "p-chlorophenyl phenyl ether", "tex": "p-Chlorophenyl Phenyl Ether", "units": "ug/L", "unicode": "p-Chlorophenyl Phenyl Ether", - "fraction": "total" + "fraction": "total", }, { "name": "p-chlorotoluene", "tex": "p-Chlorotoluene", "units": "ug/L", "unicode": "p-Chlorotoluene", - "fraction": "total" + "fraction": "total", }, { "name": "p-cymene", "tex": "p-Cymene", "units": "ug/L", "unicode": "p-Cymene", - "fraction": "total" + "fraction": "total", }, { "name": "p-dichlorobenzene", "tex": "p-Dichlorobenzene", "units": "ug/L", "unicode": "p-Dichlorobenzene", - "fraction": "total" + "fraction": "total", }, { "name": "p-nitrophenol", "tex": "p-Nitrophenol", "units": "ug/L", "unicode": "p-Nitrophenol", - "fraction": "total" + "fraction": "total", }, { "name": "p-xylene", "tex": "p-Xylene", "units": "ug/L", "unicode": "p-Xylene", - "fraction": "total" - }, - { - "name": "ph", - "tex": "pH", - "units": "S", - "unicode": "pH", - "fraction": "total" + "fraction": "total", }, + {"name": "ph", "tex": "pH", "units": "S", "unicode": "pH", "fraction": "total"}, { "name": "protons", "tex": "Protons (Hydrogen Ions)", "units": "mg/L", "unicode": "Protons (Hydrogen Ions)", - "fraction": "total" + "fraction": "total", }, { "name": "tert-butylbenzene", "tex": "Tertiary Butylbenzene", "units": "ug/L", "unicode": "Tertiary Butylbenzene", - "fraction": "total" + "fraction": "total", }, { "name": "total petroleum hydrocarbons - motor oil range", "tex": "Total Petroleum Hydrocarbons (motor oil range)", "units": "ug/L", "unicode": "Organics, Motor Oil Range", - "fraction": "total" + "fraction": "total", }, { "name": "trans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "trans-1,3-dichloropropene", "tex": "trans-1,3-Dichloropropene", "units": "ug/L", "unicode": "trans-1,3-Dichloropropene", - "fraction": "total" + "fraction": "total", }, { "name": "trans-1,4-dichloro-2-butene", "tex": "trans-1,4-Dichloro-2-butene", "units": "ug/L", "unicode": "trans-1,4-Dichloro-2-butene", - "fraction": "total" + "fraction": "total", }, { "name": "dibenzo[b,k]fluoranthene", "tex": "Dibenzo[b,k]fluoranthene", "units": "ug/L", "unicode": "Dibenzo[b,k]fluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "dichlobenil", "tex": "Dichlobenil", "units": "ug/L", "unicode": "Dichlobenil", - "fraction": "total" + "fraction": "total", }, { "name": "prometon", "tex": "Prometon", "units": "ug/L", "unicode": "Prometon", - "fraction": "total" + "fraction": "total", }, { "name": "total volatile solids, non-filterable", "tex": "Total Volatile Solids (non-filterable)", "units": "ug/L", "unicode": "Total Volatile Solids", - "fraction": "total" + "fraction": "total", }, { "name": "benzo(b/j)fluoranthene", "tex": "Benzo(b/j)fluoranthene", "units": "ug/L", "unicode": "Benzo(b/j)fluoranthene", - "fraction": "total" + "fraction": "total", }, { "name": "bismuth", "tex": "Bismuth", "units": "ug/L", "unicode": "Bismuth", - "fraction": "total" + "fraction": "total", }, { "name": "boron", "tex": "Boron", "units": "ug/L", "unicode": "Boron", - "fraction": "total" + "fraction": "total", }, { "name": "lithium, total", "tex": "Lithium, Total", "units": "ug/L", "unicode": "Lithium", - "fraction": "total" + "fraction": "total", }, { "name": "silicon", "tex": "Silicon", "units": "ug/L", "unicode": "Silicon", - "fraction": "total" + "fraction": "total", }, { "name": "strontium", "tex": "Strontium", "units": "ug/L", "unicode": "Strontium", - "fraction": "total" + "fraction": "total", }, { "name": "tellurium", "tex": "Tellurium", "units": "ug/L", "unicode": "Tellurium", - "fraction": "total" + "fraction": "total", }, { "name": "tin, total", "tex": "Tin, Total", "units": "ug/L", "unicode": "Tin", - "fraction": "total" + "fraction": "total", }, { "name": "titanium, total", "tex": "Titanium, Total", "units": "ug/L", "unicode": "Titanium", - "fraction": "total" + "fraction": "total", }, { "name": "tungsten", "tex": "Tungsten", "units": "ug/L", "unicode": "Tungsten", - "fraction": "total" + "fraction": "total", }, { "name": "uranium-234/235/238", "tex": "Uranium-234/235/238", "units": "ug/L", "unicode": "Uranium", - "fraction": "total" + "fraction": "total", }, { "name": "uranium", "tex": "Uranium", "units": "ug/L", "unicode": "Uranium", - "fraction": "total" + "fraction": "total", }, { "name": "zirconium", "tex": "Zirconium", "units": "ug/L", "unicode": "Zirconium", - "fraction": "total" + "fraction": "total", }, { "name": "cesium", "tex": "Cesium", "units": "ug/L", "unicode": "Cesium", - "fraction": "total" + "fraction": "total", }, { "name": "rubidium", "tex": "Rubidium", "units": "ug/L", "unicode": "Rubidium", - "fraction": "total" + "fraction": "total", }, { "name": "1,2-dibromo-3-chloropropane", "tex": "1,2-Dibromo-3-Chloropropane", "units": "ug/L", "unicode": "1,2-Dibromo-3-Chloropropane", - "fraction": "total" + "fraction": "total", }, { "name": "trans-1,2-dichloroethylenetrans-1,2-dichloroethylene", "tex": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", "units": "ug/L", "unicode": "trans-1,2-Dichloroethylenetrans-1,2-Dichloroethylene", - "fraction": "total" + "fraction": "total", }, { "name": "2,4,5-t", "tex": "2,4,5-T", "units": "ug/L", "unicode": "2,4,5-T", - "fraction": "total" + "fraction": "total", }, { "name": "2,4-db", "tex": "2,4-DB", "units": "ug/L", "unicode": "2,4-DB", - "fraction": "total" + "fraction": "total", }, { "name": "dalapon", "tex": "Dalapon", "units": "ug/L", "unicode": "Dalapon", - "fraction": "total" + "fraction": "total", }, { "name": "dicamba", "tex": "Dicamba", "units": "ug/L", "unicode": "Dicamba", - "fraction": "total" + "fraction": "total", }, { "name": "dichlorprop", "tex": "Dichlorprop", "units": "ug/L", "unicode": "Dichlorprop", - "fraction": "total" + "fraction": "total", }, { "name": "mcpa", "tex": "MCPA", "units": "ug/L", "unicode": "MCPA", - "fraction": "total" + "fraction": "total", }, { "name": "mecoprop", "tex": "Mecoprop", "units": "ug/L", "unicode": "Mecoprop", - "fraction": "total" + "fraction": "total", }, { "name": "sulfur", "tex": "Sulfur", "units": "ug/L", "unicode": "Sulfur", - "fraction": "total" + "fraction": "total", }, { "name": "m,p-xylenes", "tex": "m,p-Xylenes", "units": "ug/L", "unicode": "m,p-Xylenes", - "fraction": "total" + "fraction": "total", }, { "name": "silica", "tex": "Silica", "units": "ug/L", "unicode": "Silica", - "fraction": "total" + "fraction": "total", }, { "name": "nitrogen, dissolved", "tex": "Nitrogen, Dissolved", "units": "ug/L", "unicode": "Nitrogen", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "nitrogen, particulate", "tex": "Nitrogen, Particulate", "units": "ug/L", "unicode": "Nitrogen", - "fraction": "particulate" + "fraction": "particulate", }, { "name": "meta & para xylene mix", "tex": "meta & para Xylene mix", "units": "ug/L", "unicode": "m,p-Xylenes", - "fraction": "total" + "fraction": "total", }, { "name": "temperature, air", "tex": "Temperature, air", "units": "deg C", "unicode": "Temperature, Air", - "fraction": "total" + "fraction": "total", }, { "name": "gasoline range organics", "tex": "Gasoline range organics", "units": "ug/L", "unicode": "Organics, Gasoline Range", - "fraction": "total" + "fraction": "total", }, { "name": "particle size, percent > 50 microns", "tex": "Particle Size, Percent > 50 microns", "units": "ug/L", "unicode": "Particle Size, Percent >50 µm", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <0.34 um, >0.21 um", "tex": "Particle Size, % between 0.34 and 0.21 micros", "units": "%", "unicode": "Particle Size, % between 0.34 and 0.21 micros", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <0.43 um, >0.34 um", "tex": "Particle Size, % between 0.43 and 0.34 microns", "units": "%", "unicode": "Particle Size, % between 0.43 and 0.34 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <0.66 um, >0.43 um", "tex": "Particle Size, % between 0.66 and 0.43 microns", "units": "%", "unicode": "Particle Size, % between 0.66 and 0.43 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <1.01 um, >0.66 um", "tex": "Particle Size, % between 1.01 and 0.66 microns", "units": "%", "unicode": "Particle Size, % between 1.01 and 0.66 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <1.69 um, >1.01 um", "tex": "Particle Size, % between 1.69 and 1.01 microns", "units": "%", "unicode": "Particle Size, % between 1.69 and 1.01 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <10.5 um, >7.46 um", "tex": "Particle Size, % between 10.5 and 7.46 microns", "units": "%", "unicode": "Particle Size, % between 10.5 and 7.46 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <1000 um, >42.2 um", "tex": "Particle Size, % between 1000 and 42.2 microns", "units": "%", "unicode": "Particle Size, % between 1000 and 42.2 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <1000 um, >62 um, sum", "tex": "Particle Size, % between 1000 and 62 um, smicrons", "units": "%", "unicode": "Particle Size, % between 1000 and 62 um, smicrons", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <1000 um, >704 um", "tex": "Particle Size, % between 1000 and 704 microns", "units": "%", "unicode": "Particle Size, % between 1000 and 704 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <125 um, >88 um", "tex": "Particle Size, % between 125 and 88 microns", "units": "%", "unicode": "Particle Size, % between 125 and 88 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <14.9 um, >10.5 um", "tex": "Particle Size, % between 14.9 and 10.5 microns", "units": "%", "unicode": "Particle Size, % between 14.9 and 10.5 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <176 um, >125 um", "tex": "Particle Size, % between 176 and 125 microns", "units": "%", "unicode": "Particle Size, % between 176 and 125 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <2.63 um, >0.10 um, sum", "tex": "Particle Size, % between 2.63 and 0.10 um, smicrons", "units": "%", "unicode": "Particle Size, % between 2.63 and 0.10 um, smicrons", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <2.63 um, >1.69 um", "tex": "Particle Size, % between 2.63 and 1.69 microns", "units": "%", "unicode": "Particle Size, % between 2.63 and 1.69 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <21.1 um, >14.9 um", "tex": "Particle Size, % between 21.1 and 14.9 microns", "units": "%", "unicode": "Particle Size, % between 21.1 and 14.9 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <250 um, >176 um", "tex": "Particle Size, % between 250 and 176 microns", "units": "%", "unicode": "Particle Size, % between 250 and 176 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <29.8 um, >21.1 um", "tex": "Particle Size, % between 29.8 and 21.1 microns", "units": "%", "unicode": "Particle Size, % between 29.8 and 21.1 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <3.73 um, >2.63 um", "tex": "Particle Size, % between 3.73 and 2.63 microns", "units": "%", "unicode": "Particle Size, % between 3.73 and 2.63 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <352 um, >250 um", "tex": "Particle Size, % between 352 and 250 microns", "units": "%", "unicode": "Particle Size, % between 352 and 250 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <42.2 um", "tex": "Particle Size, % <42.2 micros", "units": "%", "unicode": "Particle Size, % <42.2 micros", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <42.2 um, >29.8 um", "tex": "Particle Size, % between 42.2 and 29.8 microns", "units": "%", "unicode": "Particle Size, % between 42.2 and 29.8 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <5.27 um, >3.73 um", "tex": "Particle Size, % between 5.27 and 3.73 microns", "units": "%", "unicode": "Particle Size, % between 5.27 and 3.73 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <500 um, >352 um", "tex": "Particle Size, % between 500 and 352 microns", "units": "%", "unicode": "Particle Size, % between 500 and 352 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <62 um, >2.63 um, sum", "tex": "Particle Size, % between 62 and 2.63 um, smicrons", "units": "%", "unicode": "Particle Size, % between 62 and 2.63 um, smicrons", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <62 um, >42.2 um", "tex": "Particle Size, % between 62 and 42.2 microns", "units": "%", "unicode": "Particle Size, % between 62 and 42.2 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <7.46 um, >5.27 um", "tex": "Particle Size, % between 7.46 and 5.27 microns", "units": "%", "unicode": "Particle Size, % between 7.46 and 5.27 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <704 um, >500 um", "tex": "Particle Size, % between 704 and 500 microns", "units": "%", "unicode": "Particle Size, % between 704 and 500 microns", - "fraction": "total" + "fraction": "total", }, { "name": "Particle Size, % <88 um, >62 um", "tex": "Particle Size, % between 88 and 62 microns", "units": "%", "unicode": "Particle Size, % between 88 and 62 microns", - "fraction": "total" + "fraction": "total", }, { "name": "chlorophyll a, uncorrected for pheophytin", "tex": "Chlorophyll A (uncorrected for pheophytin)", "units": "ug/L", "unicode": "Chlorophyll A (uncorrected for pheophytin)", - "fraction": "total" + "fraction": "total", }, { "name": "1-methylphenanthrene", "tex": "1-Methylphenanthrene", "units": "ug/L", "unicode": "1-Methylphenanthrene", - "fraction": "total" + "fraction": "total", }, { "name": "2,6-dimethylnaphthalene", "tex": "2,6-Dimethylnaphthalene", "units": "ug/L", "unicode": "2,6-Dimethylnaphthalene", - "fraction": "total" + "fraction": "total", }, { "name": "benzo[e]pyrene", "tex": "Benzo[e]pyrene", "units": "ug/L", "unicode": "Benzo[e]pyrene", - "fraction": "total" + "fraction": "total", }, { "name": "bifenthrin by nci", "tex": "Bifenthrin by NCI", "units": "ug/L", "unicode": "Bifenthrin by NCI", - "fraction": "total" + "fraction": "total", }, { "name": "cobalt, dissolved", "tex": "Cobalt, Dissolved", "units": "ug/L", "unicode": "Cobalt", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "cyfluthrin by nci", "tex": "Cyfluthrin by NCI", "units": "ug/L", "unicode": "Cyfluthrin by NCI", - "fraction": "total" + "fraction": "total", }, { "name": "cypermethrin", "tex": "Cypermethrin", "units": "ug/L", "unicode": "Cypermethrin", - "fraction": "total" + "fraction": "total", }, { "name": "dibenzothiophene", "tex": "Dibenzothiophene", "units": "ug/L", "unicode": "Dibenzothiophene", - "fraction": "total" + "fraction": "total", }, { "name": "esfenvalerate", "tex": "Esfenvalerate", "units": "ug/L", "unicode": "Esfenvalerate", - "fraction": "total" + "fraction": "total", }, { "name": "fenvalerate", "tex": "Fenvalerate", "units": "ug/L", "unicode": "Fenvalerate", - "fraction": "total" + "fraction": "total", }, { "name": "l-cyhalothrin by nci", "tex": "L-Cyhalothrin by NCI", "units": "ug/L", "unicode": "L-Cyhalothrin by NCI", - "fraction": "total" + "fraction": "total", }, { "name": "molybdenum, dissolved", "tex": "Molybdenum, Dissolved", "units": "ug/L", "unicode": "Molybdenum", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "permethrin", "tex": "Permethrin", "units": "ug/L", "unicode": "Permethrin", - "fraction": "total" + "fraction": "total", }, { "name": "tin, dissolved", "tex": "Tin, Dissolved", "units": "ug/L", "unicode": "Tin", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "titanium, dissolved", "tex": "Titanium, Dissolved", "units": "ug/L", "unicode": "Titanium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "vanadium, dissolved", "tex": "Vanadium, Dissolved", "units": "ug/L", "unicode": "Vanadium", - "fraction": "dissolved" + "fraction": "dissolved", }, { "name": "cypermethrin by nci", "tex": "Cypermethrin by NCI", "units": "ug/L", "unicode": "Cypermethrin by NCI", - "fraction": "total" + "fraction": "total", }, { "name": "bicarbonate", "tex": "Bicarbonate", "units": "ug/L", "unicode": "Bicarbonate", - "fraction": "total" + "fraction": "total", }, { "name": "Campylobacter spp.", "tex": "Campylobacter spp.", "units": "MPN/100 mL", "unicode": "Campylobacter spp.", - "fraction": "total" + "fraction": "total", }, { "name": "C. dubia % survival (100% sample)", "tex": "c. dubia % survival (100% sample)", "units": "%", "unicode": "c. dubia % survival (100% sample)", - "fraction": "total" + "fraction": "total", }, { "name": "C. dubia reproduction, % control (100% sample)", "tex": "C. dubia reproduction, % control (100% sample)", "units": "%", "unicode": "C. dubia reproduction, % control (100% sample)", - "fraction": "total" + "fraction": "total", }, { "name": "d8-acenaphthylene", "tex": "D8-Acenaphthylene", "units": "ug/L", "unicode": "D8-Acenaphthylene", - "fraction": "total" + "fraction": "total", }, { "name": "d10-anthracene", "tex": "D10-Anthracene", "units": "ug/L", "unicode": "D10-Anthracene", - "fraction": "total" + "fraction": "total", }, { "name": "d14-terphenyl (fs)", "tex": "D14-Terphenyl (FS)", "units": "ug/L", "unicode": "D14-Terphenyl (FS)", - "fraction": "total" + "fraction": "total", }, { "name": "particle size, % <0.21 um, >0.10 um", "tex": "Particle Size, % <0.21 um, >0.10 um", "units": "mg/L", "unicode": "Particle Size, % <0.21 µm, >0.10 µm", - "fraction": "total" + "fraction": "total", }, { "name": "particle size, d50", "tex": "Particle Size, D50", "units": "μm", "unicode": "Particle Size, D50", - "fraction": "total" + "fraction": "total", }, { "name": "% sand, very coarse (1000-2000um)", "tex": "Percent sand, very coarse (1000-2000 \\si[per-mode=symbol]{\\micro\\meter})", "units": "%", "unicode": "Percent sand, very coarse (1000-2000 µm)", - "fraction": "total" + "fraction": "total", }, { "name": "echinoderm fertilization (50% sample)", "tex": "Echinoderm fertilization (50% sample)", "units": "NS", "unicode": "Echinoderm fertilization (50% sample)", - "fraction": "total" - } + "fraction": "total", + }, ] diff --git a/pybmpdb/_units.py b/pybmpdb/_units.py index 9338689..4881e1c 100644 --- a/pybmpdb/_units.py +++ b/pybmpdb/_units.py @@ -1,274 +1,204 @@ units = [ - { - "name": "%", - "factor": 1, - "tex": "\\si{\\percent}", - "unicode": "%" - }, - { - "name": "NS", - "factor": 1, - "tex": "NS", - "unicode": "NS" - }, + {"name": "%", "factor": 1, "tex": "\\si{\\percent}", "unicode": "%"}, + {"name": "NS", "factor": 1, "tex": "NS", "unicode": "NS"}, { "name": "#/100mL", "factor": 1, "tex": "\\#\\SI[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "MPN/100 mL" + "unicode": "MPN/100 mL", }, { "name": "10/ml", "factor": 100, "tex": "\\SI[per-mode=symbol]{10}{\\per\\milli\\liter}", - "unicode": "10/mL" + "unicode": "10/mL", }, { "name": "MPN/100 mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "MPN/100 mL" + "unicode": "MPN/100 mL", }, { "name": "MPN/L", "factor": 0.1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "MPN/100 mL" + "unicode": "MPN/100 mL", }, { "name": "MPN/1L", "factor": 0.1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "MPN/100 mL" + "unicode": "MPN/100 mL", }, { "name": "MPN/100mL", "factor": 1, "tex": "MPN\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "MPN/100 mL" + "unicode": "MPN/100 mL", }, { "name": "CFU/100 mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "CFU/100 mL" + "unicode": "CFU/100 mL", }, { "name": "CFU/100mL", "factor": 1, "tex": "CFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "CFU/100 mL" + "unicode": "CFU/100 mL", }, { "name": "PFU/100 mL", "factor": 1, "tex": "PFU\\si[per-mode=symbol]{\\per100\\milli\\liter}", - "unicode": "PFU/100 mL" - }, - { - "name": "NT", - "factor": 1, - "tex": "NT", - "unicode": "NT" - }, - { - "name": "PC", - "factor": 1, - "tex": "PC", - "unicode": "PC" - }, - { - "name": "s", - "factor": 1, - "tex": "", - "unicode": "S" + "unicode": "PFU/100 mL", }, + {"name": "NT", "factor": 1, "tex": "NT", "unicode": "NT"}, + {"name": "PC", "factor": 1, "tex": "PC", "unicode": "PC"}, + {"name": "s", "factor": 1, "tex": "", "unicode": "S"}, { "name": "ml/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\liter\\per\\liter}", - "unicode": "mL/L" + "unicode": "mL/L", }, { "name": "mV", "factor": 1, "tex": "\\si[per-mode=symbol]{\\milli\\volt}", - "unicode": "mV" + "unicode": "mV", }, { "name": "kg/L", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\kilo\\gram\\per\\liter}", - "unicode": "kg/L" + "unicode": "kg/L", }, { "name": "g/L", "factor": 1, "tex": "\\si[per-mode=symbol]{\\gram\\per\\liter}", - "unicode": "g/L" + "unicode": "g/L", }, { "name": "mg/L", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", - "unicode": "mg/L" + "unicode": "mg/L", }, { "name": "mg CaCO3/L", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\gram\\per\\liter}", - "unicode": "mg CaCO₃/L" + "unicode": "mg CaCO₃/L", }, { "name": "ug/L", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", - "unicode": "µg/L" + "unicode": "µg/L", }, { "meta": "converts greek letter to the micro sign", "name": "μg/L", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", - "unicode": "µg/L" + "unicode": "µg/L", }, { "meta": "no-op entry for the micro sign", "name": "µg/L", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\gram\\per\\liter}", - "unicode": "µg/L" + "unicode": "µg/L", }, { "name": "ng/L", "factor": 1e-9, "tex": "\\si[per-mode=symbol]{\\nano\\gram\\per\\liter}", - "unicode": "ng/L" + "unicode": "ng/L", }, { "name": "pg/L", "factor": 1e-12, "tex": "\\si[per-mode=symbol]{\\pico\\gram\\per\\liter}", - "unicode": "pg/L" - }, - { - "name": "°C", - "factor": 1, - "tex": "\\si{\\degreeCelsius}", - "unicode": "°C" - }, - { - "name": "deg C", - "factor": 1, - "tex": "\\si{\\degreeCelsius}", - "unicode": "°C" - }, - { - "name": "degC", - "factor": 1, - "tex": "\\si{\\degreeCelsius}", - "unicode": "°C" + "unicode": "pg/L", }, + {"name": "°C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "°C"}, + {"name": "deg C", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "°C"}, + {"name": "degC", "factor": 1, "tex": "\\si{\\degreeCelsius}", "unicode": "°C"}, { "name": "µmhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "μmhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "umhos/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "umho/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "μS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "µS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "uS/cm", "factor": 1, "tex": "\\si[per-mode=symbol]{\\micro\\siemens\\per\\centi\\meter}", - "unicode": "μS/cm" + "unicode": "μS/cm", }, { "name": "mS", "factor": 1000, "tex": "\\si[per-mode=symbol]{\\milli\\siemens}", - "unicode": "mS" - }, - { - "name": "ADMI value", - "factor": 1, - "tex": "ADMI Value", - "unicode": "ADMI Value" - }, - { - "name": "kg", - "factor": 1, - "tex": "kg", - "unicode": "kg" - }, - { - "name": "m", - "factor": 1, - "tex": "\\si[per-mode=symbol]{meter}", - "unicode": "m" + "unicode": "mS", }, + {"name": "ADMI value", "factor": 1, "tex": "ADMI Value", "unicode": "ADMI Value"}, + {"name": "kg", "factor": 1, "tex": "kg", "unicode": "kg"}, + {"name": "m", "factor": 1, "tex": "\\si[per-mode=symbol]{meter}", "unicode": "m"}, { "name": "mm", "factor": 0.001, "tex": "\\si[per-mode=symbol]{\\milli\\meter}", - "unicode": "mm" + "unicode": "mm", }, { "name": "um", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", - "unicode": "μm" + "unicode": "μm", }, { "name": "μm", "factor": 0.000001, "tex": "\\si[per-mode=symbol]{\\micro\\meter}", - "unicode": "μm" - }, - { - "name": "SU", - "factor": 1, - "tex": "SU", - "unicode": "SU" + "unicode": "μm", }, - { - "name": "NTU", - "factor": 1, - "tex": "NTU", - "unicode": "NTU" - }, - { - "name": "PCU", - "factor": 1, - "tex": "PCU", - "unicode": "PCU" - } + {"name": "SU", "factor": 1, "tex": "SU", "unicode": "SU"}, + {"name": "NTU", "factor": 1, "tex": "NTU", "unicode": "NTU"}, + {"name": "PCU", "factor": 1, "tex": "PCU", "unicode": "PCU"}, ] diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 7d8f8a8..5f2fa0d 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -18,19 +18,16 @@ import wqio -__all__ = [ - 'load_data', - 'transform_parameters', - 'paired_qual', -] +__all__ = ["load_data", "transform_parameters", "paired_qual"] _logger = logging.getLogger(__name__) @wqio.utils.log_df_shape(_logger) -def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, - nd_correction=2): +def _handle_ND_factors( + df, qualcol="qual", rescol="res", dlcol="DL", quals=None, nd_correction=2 +): """ Determines the scaling factor to be applied to the water quality result based on the result qualifiers in the BMP Database. @@ -69,15 +66,18 @@ def _handle_ND_factors(df, qualcol='qual', rescol='res', dlcol='DL', quals=None, quals = wqio.validate.at_least_empty_list(quals) if not quals: - quals.extend(['U', 'UK', 'UA', 'UC', 'K']) + quals.extend(["U", "UK", "UA", "UC", "K"]) normal_ND = [df[qualcol].isin(quals), float(nd_correction)] - weird_UJ = [(df[qualcol] == 'UJ') & (df[rescol] < df[dlcol]), df[dlcol] / df[rescol]] + weird_UJ = [ + (df[qualcol] == "UJ") & (df[rescol] < df[dlcol]), + df[dlcol] / df[rescol], + ] return wqio.utils.selector(1, normal_ND, weird_UJ) @wqio.utils.log_df_shape(_logger) -def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=None): +def _handle_ND_qualifiers(df, qualcol="qual", rescol="res", dlcol="DL", quals=None): """ Determines final qualifier to be applied to the water quality result based on the result qualifiers in the BMP Database. Non-detects get "ND", detected values get "=". @@ -112,35 +112,44 @@ def _handle_ND_qualifiers(df, qualcol='qual', rescol='res', dlcol='DL', quals=No quals = wqio.validate.at_least_empty_list(quals) if not quals: - quals.extend(['U', 'UA', 'UI', 'UC', 'UK', 'K']) + quals.extend(["U", "UA", "UI", "UC", "UK", "K"]) - is_ND = df[qualcol].isin(quals) | ((df[qualcol] == 'UJ') & (df[rescol] <= df[dlcol])) - return numpy.where(is_ND, 'ND', '=') + is_ND = df[qualcol].isin(quals) | ( + (df[qualcol] == "UJ") & (df[rescol] <= df[dlcol]) + ) + return numpy.where(is_ND, "ND", "=") @wqio.utils.log_df_shape(_logger) def _process_screening(df, screencol): - yes = df[screencol].str.lower().isin(['inc', 'yes', 'y']) - no = df[screencol].str.lower().isin(['exc', 'no', 'n']) - return wqio.utils.selector('invalid', [yes, 'yes'], [no, 'no']) + yes = df[screencol].str.lower().isin(["inc", "yes", "y"]) + no = df[screencol].str.lower().isin(["exc", "no", "n"]) + return wqio.utils.selector("invalid", [yes, "yes"], [no, "no"]) @wqio.utils.log_df_shape(_logger) def _process_sampletype(df, sampletype): - grab = [df[sampletype].str.lower().str.contains('grab'), 'grab'] + grab = [df[sampletype].str.lower().str.contains("grab"), "grab"] composite = [ - df[sampletype].str.lower().str.contains('emc') | df[sampletype].str.lower().str.contains('comp'), - 'composite' + df[sampletype].str.lower().str.contains("emc") + | df[sampletype].str.lower().str.contains("comp"), + "composite", ] - return wqio.utils.selector('unknown', grab, composite) + return wqio.utils.selector("unknown", grab, composite) def _check_levelnames(levels): good_levels = [ - 'category', 'site', 'bmp', 'parameter', - 'sampletype', 'epazone', 'state', 'paramgroup' + "category", + "site", + "bmp", + "parameter", + "sampletype", + "epazone", + "state", + "paramgroup", ] - msg = 'valid levels are {}'.format(good_levels) + msg = "valid levels are {}".format(good_levels) for lvl in levels: if lvl not in good_levels: @@ -148,8 +157,16 @@ def _check_levelnames(levels): @wqio.utils.log_df_shape(_logger) -def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn, - indexMods=None, paramlevel='parameter'): +def transform_parameters( + df, + existingparams, + newparam, + newunits, + resfxn, + qualfxn, + indexMods=None, + paramlevel="parameter", +): """ Apply an arbitrary transformation to a parameter in the data Parameters @@ -186,36 +203,36 @@ def transform_parameters(df, existingparams, newparam, newunits, resfxn, qualfxn transformed = ( df.query("{} in @existingparams".format(paramlevel)) - .pipe(utils.refresh_index) - .unstack(level=paramlevel) - .pipe(wqio.utils.assign_multilevel_column, qualfxn, 'qual', newparam) - .pipe(wqio.utils.assign_multilevel_column, resfxn, 'res', newparam) - .xs(newparam, level=paramlevel, axis='columns', drop_level=False) - .stack(level=paramlevel) + .pipe(utils.refresh_index) + .unstack(level=paramlevel) + .pipe(wqio.utils.assign_multilevel_column, qualfxn, "qual", newparam) + .pipe(wqio.utils.assign_multilevel_column, resfxn, "res", newparam) + .xs(newparam, level=paramlevel, axis="columns", drop_level=False) + .stack(level=paramlevel) ) indexMods = wqio.validate.at_least_empty_dict(indexMods, units=newunits) # add the units into indexMod, apply all changes - indexMods['units'] = newunits + indexMods["units"] = newunits for levelname, value in indexMods.items(): - transformed = wqio.utils.redefine_index_level(transformed, levelname, value, - criteria=None, dropold=True) + transformed = wqio.utils.redefine_index_level( + transformed, levelname, value, criteria=None, dropold=True + ) # return the *full* dataset (preserving original params) - result = pandas.concat([ - df.reset_index(), - transformed.reset_index() - ], sort=False).set_index(index_name_cache) + result = pandas.concat( + [df.reset_index(), transformed.reset_index()], sort=False + ).set_index(index_name_cache) return result @wqio.utils.log_df_shape(_logger) -def paired_qual(df, qualin='qual_inflow', qualout='qual_outflow'): - ND_neither = [(df[qualin] == '=') & (df[qualout] == '='), 'Pair'] - ND_in = [(df[qualin] == 'ND') & (df[qualout] == '='), 'Influent ND'] - ND_out = [(df[qualin] == '=') & (df[qualout] == 'ND'), 'Effluent ND'] - ND_both = [(df[qualin] == 'ND') & (df[qualout] == 'ND'), 'Both ND'] - return wqio.utils.selector('=', ND_neither, ND_in, ND_out, ND_both) +def paired_qual(df, qualin="qual_inflow", qualout="qual_outflow"): + ND_neither = [(df[qualin] == "=") & (df[qualout] == "="), "Pair"] + ND_in = [(df[qualin] == "ND") & (df[qualout] == "="), "Influent ND"] + ND_out = [(df[qualin] == "=") & (df[qualout] == "ND"), "Effluent ND"] + ND_both = [(df[qualin] == "ND") & (df[qualout] == "ND"), "Both ND"] + return wqio.utils.selector("=", ND_neither, ND_in, ND_out, ND_both) @wqio.utils.log_df_shape(_logger) @@ -235,23 +252,35 @@ def best_col(df, mainstation, backupstation, valcol): orig_index = df.index.names data = ( df.pipe(utils.refresh_index) - .unstack(level='station') - .pipe(wqio.utils.swap_column_levels, 0, 1) - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'res'), - 'final_outflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'outflow', 'subsurface', 'qual'), - 'final_outflow', 'qual') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'res'), - 'final_inflow', 'res') - .pipe(wqio.utils.assign_multilevel_column, - lambda df: best_col(df, 'inflow', 'reference outflow', 'qual'), - 'final_inflow', 'qual') - .loc[:, lambda df: df.columns.map(lambda c: 'final_' in c[0])] - .rename(columns=lambda col: col.replace('final_', '')) - .stack(level='station') + .unstack(level="station") + .pipe(wqio.utils.swap_column_levels, 0, 1) + .pipe( + wqio.utils.assign_multilevel_column, + lambda df: best_col(df, "outflow", "subsurface", "res"), + "final_outflow", + "res", + ) + .pipe( + wqio.utils.assign_multilevel_column, + lambda df: best_col(df, "outflow", "subsurface", "qual"), + "final_outflow", + "qual", + ) + .pipe( + wqio.utils.assign_multilevel_column, + lambda df: best_col(df, "inflow", "reference outflow", "res"), + "final_inflow", + "res", + ) + .pipe( + wqio.utils.assign_multilevel_column, + lambda df: best_col(df, "inflow", "reference outflow", "qual"), + "final_inflow", + "qual", + ) + .loc[:, lambda df: df.columns.map(lambda c: "final_" in c[0])] + .rename(columns=lambda col: col.replace("final_", "")) + .stack(level="station") ) return data @@ -260,33 +289,30 @@ def best_col(df, mainstation, backupstation, valcol): @wqio.utils.log_df_shape(_logger) def _pick_best_sampletype(df): orig_cols = df.columns - xtab = df.pipe(utils.refresh_index).unstack(level='sampletype') + xtab = df.pipe(utils.refresh_index).unstack(level="sampletype") for col in orig_cols: grabvalues = numpy.where( - xtab[(col, 'composite')].isnull(), - xtab[(col, 'grab')], - numpy.nan + xtab[(col, "composite")].isnull(), xtab[(col, "grab")], numpy.nan ) - xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, 'grab') + xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, "grab") - data = ( - xtab.loc[:, xtab.columns.map(lambda c: c[1] != 'unknown')] - .stack(level=['sampletype']) + data = xtab.loc[:, xtab.columns.map(lambda c: c[1] != "unknown")].stack( + level=["sampletype"] ) return data @wqio.utils.log_df_shape(_logger) def _maybe_filter_onesided_BMPs(df, balanced_only): - grouplevels = ['site', 'bmp', 'parameter', 'category'] - pivotlevel = 'station' + grouplevels = ["site", "bmp", "parameter", "category"] + pivotlevel = "station" if balanced_only: return ( df.unstack(level=pivotlevel) - .groupby(level=grouplevels) - .filter(lambda g: numpy.all(g['res'].describe().loc['count'] > 0)) - .stack(level=pivotlevel) + .groupby(level=grouplevels) + .filter(lambda g: numpy.all(g["res"].describe().loc["count"] > 0)) + .stack(level=pivotlevel) ) else: return df @@ -295,94 +321,104 @@ def _maybe_filter_onesided_BMPs(df, balanced_only): @wqio.utils.log_df_shape(_logger) def _filter_by_storm_count(df, minstorms): # filter out all monitoring stations with less than /N/ storms - grouplevels = ['site', 'bmp', 'parameter', 'station'] + grouplevels = ["site", "bmp", "parameter", "station"] - data = ( - df.groupby(level=grouplevels) - .filter(lambda g: g.count()['res'] >= minstorms) - ) + data = df.groupby(level=grouplevels).filter(lambda g: g.count()["res"] >= minstorms) return data @wqio.utils.log_df_shape(_logger) def _filter_by_BMP_count(df, minbmps): - grouplevels = ['category', 'parameter', 'station'] + grouplevels = ["category", "parameter", "station"] - data = ( - df.groupby(level=grouplevels) - .filter(lambda g: g.index.get_level_values('bmp').unique().shape[0] >= minbmps) + data = df.groupby(level=grouplevels).filter( + lambda g: g.index.get_level_values("bmp").unique().shape[0] >= minbmps ) return data @wqio.utils.log_df_shape(_logger) -def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel='category'): +def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel="category"): if combine_WB_RP: # merge Wetland Basins and Retention ponds, keeping # the original records - wbrp_indiv = ['Retention Pond', 'Wetland Basin'] - wbrp_combo = 'Wetland Basin/Retention Pond' + wbrp_indiv = ["Retention Pond", "Wetland Basin"] + wbrp_combo = "Wetland Basin/Retention Pond" level_pos = utils.get_level_position(df, catlevel) return wqio.utils.redefine_index_level( - df, catlevel, wbrp_combo, dropold=False, - criteria=lambda row: row[level_pos] in wbrp_indiv + df, + catlevel, + wbrp_combo, + dropold=False, + criteria=lambda row: row[level_pos] in wbrp_indiv, ).pipe( checks.verify_any, - lambda df: df.index.get_level_values(catlevel) == wbrp_combo + lambda df: df.index.get_level_values(catlevel) == wbrp_combo, ) else: return df @wqio.utils.log_df_shape(_logger) -def _maybe_combine_nox(df, combine_nox, paramlevel='parameter', rescol='res', - qualcol='qual', finalunits='mg/L'): +def _maybe_combine_nox( + df, + combine_nox, + paramlevel="parameter", + rescol="res", + qualcol="qual", + finalunits="mg/L", +): if combine_nox: # combine NO3+NO2 and NO3 into NOx nitro_components = [ - 'Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N', - 'Nitrogen, Nitrate (NO3) as N' + "Nitrogen, Nitrite (NO2) + Nitrate (NO3) as N", + "Nitrogen, Nitrate (NO3) as N", ] - nitro_combined = 'Nitrogen, NOx as N' + nitro_combined = "Nitrogen, NOx as N" - picker = partial(_pick_non_null, preferred=nitro_components[0], - secondary=nitro_components[1]) + picker = partial( + _pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1] + ) return transform_parameters( - df, nitro_components, nitro_combined, finalunits, - partial(picker, maincol=rescol), partial(picker, maincol=qualcol) + df, + nitro_components, + nitro_combined, + finalunits, + partial(picker, maincol=rescol), + partial(picker, maincol=qualcol), ).pipe( checks.verify_any, - lambda df: df.index.get_level_values(paramlevel) == nitro_combined + lambda df: df.index.get_level_values(paramlevel) == nitro_combined, ) else: return df @wqio.utils.log_df_shape(_logger) -def _maybe_fix_PFCs(df, fix_PFCs, catlevel='category', typelevel='bmptype'): +def _maybe_fix_PFCs(df, fix_PFCs, catlevel="category", typelevel="bmptype"): if fix_PFCs: - PFC = 'Permeable Friction Course' + PFC = "Permeable Friction Course" type_level_pos = utils.get_level_position(df, typelevel) return wqio.utils.redefine_index_level( - df, catlevel, PFC, dropold=True, - criteria=lambda row: row[type_level_pos] == 'PF' - ).pipe( - checks.verify_any, - lambda df: df.index.get_level_values(catlevel) == PFC - ) + df, + catlevel, + PFC, + dropold=True, + criteria=lambda row: row[type_level_pos] == "PF", + ).pipe(checks.verify_any, lambda df: df.index.get_level_values(catlevel) == PFC) else: return df @wqio.utils.log_df_shape(_logger) -def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): +def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps="default"): if remove_grabs: - if grab_ok_bmps.lower() == 'default': + if grab_ok_bmps.lower() == "default": grab_ok_bmps = [ - 'Retention Pond', - 'Wetland Basin', - 'Wetland Basin/Retention Pond', + "Retention Pond", + "Wetland Basin", + "Wetland Basin/Retention Pond", ] grab_ok_bmps = wqio.validate.at_least_empty_list(grab_ok_bmps) @@ -397,71 +433,104 @@ def _maybe_remove_grabs(df, remove_grabs, grab_ok_bmps='default'): def _load_raw_data(csvfile=None): - csvfile = Path(csvfile or wqio.download('bmpdata')) - return pandas.read_csv(csvfile, parse_dates=['sampledate'], encoding='utf-8') + csvfile = Path(csvfile or wqio.download("bmpdata")) + return pandas.read_csv(csvfile, parse_dates=["sampledate"], encoding="utf-8") @wqio.utils.log_df_shape(_logger) def _clean_raw_data(raw_df, nd_correction=2): _row_headers = [ - 'category', 'epazone', 'state', 'site', 'bmp', - 'station', 'storm', 'sampletype', 'watertype', - 'paramgroup', 'units', 'parameter', 'fraction', - 'initialscreen', 'wqscreen', 'catscreen', - 'bmptype', 'ws_id', 'site_id', 'bmp_id', 'dot_type' + "category", + "epazone", + "state", + "site", + "bmp", + "station", + "storm", + "sampletype", + "watertype", + "paramgroup", + "units", + "parameter", + "fraction", + "initialscreen", + "wqscreen", + "catscreen", + "bmptype", + "ws_id", + "site_id", + "bmp_id", + "dot_type", ] - units_norm = { - u['unicode']: info.getNormalization(u['name']) - for u in info.units - } + units_norm = {u["unicode"]: info.getNormalization(u["name"]) for u in info.units} target_units = { - p['name'].lower(): info.getUnitsFromParam(p['name'], attr='unicode') + p["name"].lower(): info.getUnitsFromParam(p["name"], attr="unicode") for p in info.parameters } - expected_rows = ( - raw_df.loc[:, 'res'] - .groupby(lambda x: x > 0) - .count() - .loc[True] - ) + expected_rows = raw_df.loc[:, "res"].groupby(lambda x: x > 0).count().loc[True] - drop_columns = ['ms', '_parameter'] + drop_columns = ["ms", "_parameter"] prepped = ( - raw_df - .fillna({'qual': '='}) - .dropna(subset=['res']) - .assign(qual=lambda df: df['qual'].str.strip()) - .assign(res=lambda df: df['res'] * _handle_ND_factors(df, nd_correction=nd_correction)) - .assign(qual=lambda df: _handle_ND_qualifiers(df)) - .assign(initialscreen=lambda df: _process_screening(df, 'initialscreen')) - .assign(wqscreen=lambda df: _process_screening(df, 'wqscreen')) - .assign(catscreen=lambda df: _process_screening(df, 'catscreen')) - .assign(station=lambda df: df['station'].str.lower()) - .assign(sampletype=lambda df: _process_sampletype(df, 'sampletype')) - .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) - .assign(units=lambda df: df['units'].map(lambda u: info.getUnits(u, attr='unicode'))) - .assign(_parameter=lambda df: df['parameter'].str.lower().str.strip()) - .assign(fraction=lambda df: numpy.where(df['_parameter'].str.contains('dissolved'), 'dissolved', 'total')) - .pipe(wqio.utils.normalize_units, units_norm, target_units, paramcol='_parameter', - rescol='res', unitcol='units', napolicy='raise') - .drop(drop_columns, axis=1) - .query("res > 0") - .pipe(checks.none_missing, columns=_row_headers) - .groupby(by=_row_headers) - .agg({'res': 'mean', 'qual': 'min', 'sampledatetime': 'min'}) - .set_index('sampledatetime', append=True) - .pipe(checks.unique_index) + raw_df.fillna({"qual": "="}) + .dropna(subset=["res"]) + .assign(qual=lambda df: df["qual"].str.strip()) + .assign( + res=lambda df: df["res"] + * _handle_ND_factors(df, nd_correction=nd_correction) + ) + .assign(qual=lambda df: _handle_ND_qualifiers(df)) + .assign(initialscreen=lambda df: _process_screening(df, "initialscreen")) + .assign(wqscreen=lambda df: _process_screening(df, "wqscreen")) + .assign(catscreen=lambda df: _process_screening(df, "catscreen")) + .assign(station=lambda df: df["station"].str.lower()) + .assign(sampletype=lambda df: _process_sampletype(df, "sampletype")) + .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) + .assign( + units=lambda df: df["units"].map(lambda u: info.getUnits(u, attr="unicode")) + ) + .assign(_parameter=lambda df: df["parameter"].str.lower().str.strip()) + .assign( + fraction=lambda df: numpy.where( + df["_parameter"].str.contains("dissolved"), "dissolved", "total" + ) + ) + .pipe( + wqio.utils.normalize_units, + units_norm, + target_units, + paramcol="_parameter", + rescol="res", + unitcol="units", + napolicy="raise", + ) + .drop(drop_columns, axis=1) + .query("res > 0") + .pipe(checks.none_missing, columns=_row_headers) + .groupby(by=_row_headers) + .agg({"res": "mean", "qual": "min", "sampledatetime": "min"}) + .set_index("sampledatetime", append=True) + .pipe(checks.unique_index) ) return prepped @wqio.utils.log_df_shape(_logger) -def _prepare_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, - remove_grabs=True, grab_ok_bmps='default', balanced_only=True, - fix_PFCs=True, excluded_bmps=None, excluded_params=None): +def _prepare_for_summary( + df, + minstorms=3, + minbmps=3, + combine_nox=True, + combine_WB_RP=True, + remove_grabs=True, + grab_ok_bmps="default", + balanced_only=True, + fix_PFCs=True, + excluded_bmps=None, + excluded_params=None, +): """ Prepare data for categorical summaries Parameter @@ -507,23 +576,34 @@ def _prepare_for_summary(df, minstorms=3, minbmps=3, combine_nox=True, combine_W return ( df.pipe(_maybe_combine_WB_RP, combine_WB_RP) - .pipe(_maybe_combine_nox, combine_nox) - .pipe(_maybe_fix_PFCs, fix_PFCs) - .pipe(_maybe_remove_grabs, remove_grabs, grab_ok_bmps) - .query("bmp not in @excluded_bmps") - .query("parameter not in @excluded_params") - .pipe(_pick_best_sampletype) - .pipe(_pick_best_station) - .pipe(_maybe_filter_onesided_BMPs, balanced_only) - .pipe(_filter_by_storm_count, minstorms) - .pipe(_filter_by_BMP_count, minbmps) + .pipe(_maybe_combine_nox, combine_nox) + .pipe(_maybe_fix_PFCs, fix_PFCs) + .pipe(_maybe_remove_grabs, remove_grabs, grab_ok_bmps) + .query("bmp not in @excluded_bmps") + .query("parameter not in @excluded_params") + .pipe(_pick_best_sampletype) + .pipe(_pick_best_station) + .pipe(_maybe_filter_onesided_BMPs, balanced_only) + .pipe(_filter_by_storm_count, minstorms) + .pipe(_filter_by_BMP_count, minbmps) ) -def load_data(datapath=None, minstorms=3, minbmps=3, combine_nox=True, combine_WB_RP=True, - remove_grabs=True, grab_ok_bmps='default', balanced_only=True, - fix_PFCs=True, excluded_bmps=None, excluded_params=None, - as_dataframe=False, **dc_kwargs): +def load_data( + datapath=None, + minstorms=3, + minbmps=3, + combine_nox=True, + combine_WB_RP=True, + remove_grabs=True, + grab_ok_bmps="default", + balanced_only=True, + fix_PFCs=True, + excluded_bmps=None, + excluded_params=None, + as_dataframe=False, + **dc_kwargs +): """ Prepare data for categorical summaries Parameter @@ -571,25 +651,42 @@ def load_data(datapath=None, minstorms=3, minbmps=3, combine_nox=True, combine_W bmp : pandas.DataFrame or wqio.DataCollection """ - othergroups = dc_kwargs.pop('othergroups', ['category', 'units']) - pairgroups = dc_kwargs.pop('pairgroups', ['category', 'units', 'bmp_id', 'site_id', 'storm']) - rescol = dc_kwargs.pop('rescol', 'res') - qualcol = dc_kwargs.pop('qualcol', 'qual') - ndval = dc_kwargs.pop('ndval', ['ND', '<'],) - stationcol = dc_kwargs.pop('stationcol', 'station') - paramcol = dc_kwargs.pop('paramcol', 'parameter') + othergroups = dc_kwargs.pop("othergroups", ["category", "units"]) + pairgroups = dc_kwargs.pop( + "pairgroups", ["category", "units", "bmp_id", "site_id", "storm"] + ) + rescol = dc_kwargs.pop("rescol", "res") + qualcol = dc_kwargs.pop("qualcol", "qual") + ndval = dc_kwargs.pop("ndval", ["ND", "<"]) + stationcol = dc_kwargs.pop("stationcol", "station") + paramcol = dc_kwargs.pop("paramcol", "parameter") bmp = ( _load_raw_data(datapath) .pipe(_clean_raw_data) - .pipe(_prepare_for_summary, minstorms=minstorms, minbmps=minbmps, - combine_nox=combine_nox, combine_WB_RP=combine_WB_RP, - remove_grabs=remove_grabs, grab_ok_bmps=grab_ok_bmps, - balanced_only=balanced_only, fix_PFCs=fix_PFCs, - excluded_bmps=excluded_bmps, excluded_params=excluded_params) + .pipe( + _prepare_for_summary, + minstorms=minstorms, + minbmps=minbmps, + combine_nox=combine_nox, + combine_WB_RP=combine_WB_RP, + remove_grabs=remove_grabs, + grab_ok_bmps=grab_ok_bmps, + balanced_only=balanced_only, + fix_PFCs=fix_PFCs, + excluded_bmps=excluded_bmps, + excluded_params=excluded_params, + ) ) if as_dataframe: return bmp - return wqio.DataCollection(bmp, rescol='res', qualcol='qual', ndval=['ND'], - stationcol='station', paramcol='parameter', - othergroups=othergroups, pairgroups=pairgroups, - **dc_kwargs) + return wqio.DataCollection( + bmp, + rescol="res", + qualcol="qual", + ndval=["ND"], + stationcol="station", + paramcol="parameter", + othergroups=othergroups, + pairgroups=pairgroups, + **dc_kwargs + ) diff --git a/pybmpdb/info.py b/pybmpdb/info.py index 931f029..40685df 100644 --- a/pybmpdb/info.py +++ b/pybmpdb/info.py @@ -5,34 +5,35 @@ from ._units import units -__all__ = ['getUnits', 'getTexParam', 'getTexUnit', - 'getNormalization', 'getConversion'] +__all__ = ["getUnits", "getTexParam", "getTexUnit", "getNormalization", "getConversion"] -def _find_by_name(value_string, list_of_dicts, key='name'): +def _find_by_name(value_string, list_of_dicts, key="name"): # get the parameter's entry in the lookup list of dicts - _entry = list(filter( - lambda x: x[key].strip().lower() == value_string.strip().lower(), - list_of_dicts - )) + _entry = list( + filter( + lambda x: x[key].strip().lower() == value_string.strip().lower(), + list_of_dicts, + ) + ) if len(_entry) != 1: - msg = 'Found ({}) entries found for {}. Expected 1.' + msg = "Found ({}) entries found for {}. Expected 1." raise ValueError(msg.format(len(_entry), value_string)) return _entry[0] -def getUnitsFromParam(paramname, attr='name'): +def getUnitsFromParam(paramname, attr="name"): """ Returns the standard units for a given parameter """ p = _find_by_name(paramname, parameters) - u = _find_by_name(p['units'], units) + u = _find_by_name(p["units"], units) return u[attr] -def getUnits(unitname, attr='name'): +def getUnits(unitname, attr="name"): """ Returns the standard units for a given parameter """ @@ -40,7 +41,7 @@ def getUnits(unitname, attr='name'): return u[attr] -def getParam(paramname, attr='name'): +def getParam(paramname, attr="name"): p = _find_by_name(paramname, parameters) return p[attr] @@ -56,7 +57,7 @@ def getNormalization(unit): else: # get the unit's entry u = _find_by_name(unit, units) - _factor = u['factor'] + _factor = u["factor"] return _factor @@ -71,4 +72,4 @@ def getConversion(param): # get the parameter's entry in the lookup list of dicts p = _find_by_name(param, parameters) - return getNormalization(p['units']) + return getNormalization(p["units"]) diff --git a/pybmpdb/nsqd.py b/pybmpdb/nsqd.py index 66c099b..d2f2096 100644 --- a/pybmpdb/nsqd.py +++ b/pybmpdb/nsqd.py @@ -25,8 +25,8 @@ def load_data(datapath=None, as_dataframe=False, **dc_kwargs): nsqd : pandas.DataFrame or wqio.DataCollection """ - datapath = Path(datapath or wqio.download('nsqd')) - nsqd = pandas.read_csv(datapath, encoding='utf-8') + datapath = Path(datapath or wqio.download("nsqd")) + nsqd = pandas.read_csv(datapath, encoding="utf-8") if as_dataframe: return nsqd return wqio.DataCollection(nsqd, **dc_kwargs) diff --git a/pybmpdb/reports.py b/pybmpdb/reports.py index 37c089f..5788f7a 100644 --- a/pybmpdb/reports.py +++ b/pybmpdb/reports.py @@ -8,79 +8,102 @@ def test_run(): report.makeInputFiles(report.std_tables) -class Report(): +class Report: def __init__(self): - self.std_tables = ['bacteria', 'metals'] - self.std_docs = ['Bacteria', 'Metals'] - - self.cbay_tables = ['tss_cbay', 'nutrients_cbay', 'tss_noncbay', 'nutrients_noncbay'] - self.cbay_docs = ['Total Suspended Solids in Chesapeake Bay', - 'Nutrients in Chesapeake Bay', - 'Total Suspended Solids outside of Chesapeake Bay', - 'Nutrients outside of Chesapeake Bay'] - - self.md_tables = ['metals_md', 'tss_md', 'nutrients_md'] - self.md_docs = ['Metals (Manufactured devices only)', - 'TSS (Manufactured devices only)', - 'Nutrients (Manufactured devices only)'] - - self.all_tables = ['bacteria', 'metals', 'tss', 'nutrients', - 'tss_cbay', 'nutrients_cbay', - 'tss_noncbay', 'nutrients_noncbay', - 'metals_md', 'tss_md', 'nutrients_md'] - - self.all_docs = ['Bacteria', 'Metals', 'Total Suspended Solids', 'Nutrients', - 'Total Suspended Solids in Chesapeake Bay', - 'Nutrients in Chesapeake Bay', - 'Total Suspended Solids outside of Chesapeake Bay', - 'Nutrients outside of Chesapeake Bay', - 'Metals (Manufactured devices only)', - 'TSS (Manufactured devices only)', - 'Nutrients (Manufactured devices only)'] - - self.sbpat_tables = ['bacteria_sbpat', 'tss', 'nutrients', 'metals'] + self.std_tables = ["bacteria", "metals"] + self.std_docs = ["Bacteria", "Metals"] + + self.cbay_tables = [ + "tss_cbay", + "nutrients_cbay", + "tss_noncbay", + "nutrients_noncbay", + ] + self.cbay_docs = [ + "Total Suspended Solids in Chesapeake Bay", + "Nutrients in Chesapeake Bay", + "Total Suspended Solids outside of Chesapeake Bay", + "Nutrients outside of Chesapeake Bay", + ] + + self.md_tables = ["metals_md", "tss_md", "nutrients_md"] + self.md_docs = [ + "Metals (Manufactured devices only)", + "TSS (Manufactured devices only)", + "Nutrients (Manufactured devices only)", + ] + + self.all_tables = [ + "bacteria", + "metals", + "tss", + "nutrients", + "tss_cbay", + "nutrients_cbay", + "tss_noncbay", + "nutrients_noncbay", + "metals_md", + "tss_md", + "nutrients_md", + ] + + self.all_docs = [ + "Bacteria", + "Metals", + "Total Suspended Solids", + "Nutrients", + "Total Suspended Solids in Chesapeake Bay", + "Nutrients in Chesapeake Bay", + "Total Suspended Solids outside of Chesapeake Bay", + "Nutrients outside of Chesapeake Bay", + "Metals (Manufactured devices only)", + "TSS (Manufactured devices only)", + "Nutrients (Manufactured devices only)", + ] + + self.sbpat_tables = ["bacteria_sbpat", "tss", "nutrients", "metals"] def makeSBPAT_tables(self): for t in self.sbpat_tables: - print('\n\nsummarizing %s for SBPAT' % t) + print("\n\nsummarizing %s for SBPAT" % t) summary.sbpat_stats(t) def makeBoxplots(self, tables): for t in tables: - print('\n\nboxplot summaries for %s' % t) + print("\n\nboxplot summaries for %s" % t) summary.paramBoxplots(t) def makeInputFiles(self, tables): for t in tables: - print('\n\nmaking input files for %s' % t) + print("\n\nmaking input files for %s" % t) summary.latexInputFile(t, regenFigs=True) def makeReports(self, tables, docs): - versions = ['draft', 'final'] + versions = ["draft", "final"] for t, d in zip(tables, docs): for v in versions: - print('\n\nsummarizing %s' % t) + print("\n\nsummarizing %s" % t) summary.latexReport(t, d, template=v) - def compileReport(self, docs, version='draft'): - os.chdir('bmp/tex') + def compileReport(self, docs, version="draft"): + os.chdir("bmp/tex") for d in docs: - filename = '%s_%s.tex' % (version, d.replace(' ', '')) - print('Compiling report %s' % filename) - os.system('pdflatex -quiet %s' % filename) - print('Updating references in %s' % filename) - os.system('pdflatex -quiet %s' % filename) + filename = "%s_%s.tex" % (version, d.replace(" ", "")) + print("Compiling report %s" % filename) + os.system("pdflatex -quiet %s" % filename) + print("Updating references in %s" % filename) + os.system("pdflatex -quiet %s" % filename) - os.chdir('../..') + os.chdir("../..") def makeTables(self, tables): for t in tables: - print('\n\nsummary table for %s' % t) + print("\n\nsummary table for %s" % t) summary.paramTables(t) def dumpData(self, tables): for t in tables: - print('\n\ndumping %s table' % t) + print("\n\ndumping %s table" % t) summary.dataDump(t) def fullSuite(self, tables, docs, version): diff --git a/pybmpdb/summary.py b/pybmpdb/summary.py index 8057afc..ca9812f 100644 --- a/pybmpdb/summary.py +++ b/pybmpdb/summary.py @@ -10,19 +10,13 @@ from . import bmpdb, utils -def filterlocation(location, count=5, column='bmp'): - location.filtered_data = ( - location.filtered_data - .groupby(level=column) - .filter(lambda g: g.count() >= count) +def filterlocation(location, count=5, column="bmp"): + location.filtered_data = location.filtered_data.groupby(level=column).filter( + lambda g: g.count() >= count ) location.include = ( - location.filtered_data - .index - .get_level_values(column) - .unique() - .shape[0] + location.filtered_data.index.get_level_values(column).unique().shape[0] ) >= count @@ -32,9 +26,9 @@ def __init__(self, dataset, paramgroup, figpath, forcepaths=False): self.figpath = figpath self.paramgroup = paramgroup self.ds = dataset - self.parameter = self.ds.definition['parameter'] + self.parameter = self.ds.definition["parameter"] self.parameter.usingTex = True - self.bmp = self.ds.definition['category'] + self.bmp = self.ds.definition["category"] # properties self._latex_file_name = None @@ -46,9 +40,9 @@ def __init__(self, dataset, paramgroup, figpath, forcepaths=False): @property def latex_file_name(self): if self._latex_file_name is None: - self._latex_file_name = utils.processFilename('{}_{}_{}'.format( - self.paramgroup, self.bmp, self.parameter.name - )).lower() + self._latex_file_name = utils.processFilename( + "{}_{}_{}".format(self.paramgroup, self.bmp, self.parameter.name) + ).lower() return self._latex_file_name @latex_file_name.setter @@ -58,7 +52,7 @@ def latex_file_name(self, value): @property def scatter_fig_path(self): if self._scatter_fig_path is None: - self._scatter_fig_path = self.figpath + '/scatterplot' + self._scatter_fig_path = self.figpath + "/scatterplot" if not os.path.exists(self._scatter_fig_path) and self.forcepaths: os.mkdir(self._scatter_fig_path) return self._scatter_fig_path @@ -66,8 +60,10 @@ def scatter_fig_path(self): @property def scatter_fig_name(self): if self._scatter_fig_name is None: - figname = utils.processFilename('{}_scatter.pdf'.format(self.latex_file_name)) - self._scatter_fig_name = self.scatter_fig_path + '/' + figname + figname = utils.processFilename( + "{}_scatter.pdf".format(self.latex_file_name) + ) + self._scatter_fig_name = self.scatter_fig_path + "/" + figname return self._scatter_fig_name @scatter_fig_name.setter @@ -77,7 +73,7 @@ def scatter_fig_name(self, value): @property def stat_fig_path(self): if self._stat_fig_path is None: - self._stat_fig_path = self.figpath + '/statplot' + self._stat_fig_path = self.figpath + "/statplot" if not os.path.exists(self._stat_fig_path) and self.forcepaths: os.mkdir(self._stat_fig_path) return self._stat_fig_path @@ -85,35 +81,50 @@ def stat_fig_path(self): @property def stat_fig_name(self): if self._stat_fig_name is None: - figname = utils.processFilename('{}_stats.pdf'.format(self.latex_file_name)) - self._stat_fig_name = self.stat_fig_path + '/' + figname + figname = utils.processFilename("{}_stats.pdf".format(self.latex_file_name)) + self._stat_fig_name = self.stat_fig_path + "/" + figname return self._stat_fig_name @stat_fig_name.setter def stat_fig_name(self, value): self._stat_fig_name = value - def _tex_table_row(self, name, attribute, rule='mid', twoval=False, - sigfigs=3, ci=False, fromdataset=False, pval=False, - tex=False, forceint=False): + def _tex_table_row( + self, + name, + attribute, + rule="mid", + twoval=False, + sigfigs=3, + ci=False, + fromdataset=False, + pval=False, + tex=False, + forceint=False, + ): rulemap = { - 'top': '\\toprule', - 'mid': '\\midrule', - 'bottom': '\\bottomrule', - 'none': '%%', + "top": "\\toprule", + "mid": "\\midrule", + "bottom": "\\bottomrule", + "none": "%%", } try: thisrule = rulemap[rule] except KeyError: - raise KeyError('top, mid, bottom rules or none allowed') + raise KeyError("top, mid, bottom rules or none allowed") if fromdataset: if self.ds.effluent.include and self.ds.influent.include: - val = wqio.utils.sigFigs(getattr(self.ds, attribute), sigfigs, - pval=pval, tex=tex, forceint=forceint) + val = wqio.utils.sigFigs( + getattr(self.ds, attribute), + sigfigs, + pval=pval, + tex=tex, + forceint=forceint, + ) else: - val = 'NA' + val = "NA" formatter = dict(ruler=thisrule, name=name, value=val) row = r""" @@ -123,41 +134,46 @@ def _tex_table_row(self, name, attribute, rule='mid', twoval=False, valstrings = [] for loc in [self.ds.influent, self.ds.effluent]: if loc.include: - if hasattr(attribute, 'append'): - val = [getattr(loc, attr) - for attr in attribute] + if hasattr(attribute, "append"): + val = [getattr(loc, attr) for attr in attribute] else: val = getattr(loc, attribute) if val is not None: if twoval: - thisstring = '{}; {}'.format( - wqio.utils.sigFigs(val[0], sigfigs, pval=pval, - tex=tex, forceint=forceint), - wqio.utils.sigFigs(val[1], sigfigs, pval=pval, - tex=tex, forceint=forceint) + thisstring = "{}; {}".format( + wqio.utils.sigFigs( + val[0], + sigfigs, + pval=pval, + tex=tex, + forceint=forceint, + ), + wqio.utils.sigFigs( + val[1], + sigfigs, + pval=pval, + tex=tex, + forceint=forceint, + ), ) if ci: - thisstring = '({})'.format(thisstring) + thisstring = "({})".format(thisstring) else: thisstring = wqio.utils.sigFigs( - val, sigfigs, pval=pval, - tex=tex, forceint=forceint + val, sigfigs, pval=pval, tex=tex, forceint=forceint ) else: - thisstring = 'NA' + thisstring = "NA" else: - thisstring = 'NA' + thisstring = "NA" valstrings.append(thisstring) formatter = dict( - ruler=thisrule, - name=name, - val_in=valstrings[0], - val_out=valstrings[1] + ruler=thisrule, name=name, val_in=valstrings[0], val_out=valstrings[1] ) row = r""" {ruler} @@ -166,7 +182,7 @@ def _tex_table_row(self, name, attribute, rule='mid', twoval=False, return row.format(**formatter) def _make_tex_table(self, tabletitle): - ''' + """ Generate a LaTeX table comparing the stats of `self.influent` and `self.effluent`. @@ -183,64 +199,80 @@ def _make_tex_table(self, tabletitle): stattable : string The LaTeX commands for the statsummary table. - ''' - stattable = r""" + """ + stattable = ( + r""" \begin{table}[h!] \caption{%s} \centering \begin{tabular}{l l l l l} \toprule - \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\""" % tabletitle + \textbf{Statistic} & \textbf{Inlet} & \textbf{Outlet} \\""" + % tabletitle + ) stats = [ - {'name': 'Count', 'attribute': 'N', 'rule': 'top', 'forceint': True}, - {'name': 'Number of NDs', 'attribute': 'ND', 'forceint': True}, - {'name': 'Min; Max', 'attribute': ['min', 'max'], 'twoval': True}, - {'name': 'Mean', 'attribute': 'mean', }, + {"name": "Count", "attribute": "N", "rule": "top", "forceint": True}, + {"name": "Number of NDs", "attribute": "ND", "forceint": True}, + {"name": "Min; Max", "attribute": ["min", "max"], "twoval": True}, + {"name": "Mean", "attribute": "mean"}, { - 'name': '(95\% confidence interval)', - 'attribute': 'mean_conf_interval', - 'twoval': True, 'ci': True, 'rule': 'none' + "name": "(95\% confidence interval)", + "attribute": "mean_conf_interval", + "twoval": True, + "ci": True, + "rule": "none", }, - {'name': 'Standard Deviation', 'attribute': 'std', }, - {'name': 'Log. Mean', 'attribute': 'logmean', }, + {"name": "Standard Deviation", "attribute": "std"}, + {"name": "Log. Mean", "attribute": "logmean"}, { - 'name': '(95\% confidence interval)', - 'attribute': 'logmean_conf_interval', - 'twoval': True, 'ci': True, 'rule': 'none' + "name": "(95\% confidence interval)", + "attribute": "logmean_conf_interval", + "twoval": True, + "ci": True, + "rule": "none", }, - {'name': 'Log. Standard Deviation', 'attribute': 'logstd', }, - {'name': 'Geo. Mean', 'attribute': 'geomean', }, + {"name": "Log. Standard Deviation", "attribute": "logstd"}, + {"name": "Geo. Mean", "attribute": "geomean"}, { - 'name': '(95\% confidence interval)', - 'attribute': 'geomean_conf_interval', - 'twoval': True, 'ci': True, 'rule': 'none' + "name": "(95\% confidence interval)", + "attribute": "geomean_conf_interval", + "twoval": True, + "ci": True, + "rule": "none", }, - {'name': 'Coeff. of Variation', 'attribute': 'cov', }, - {'name': 'Skewness', 'attribute': 'skew', }, - {'name': 'Median', 'attribute': 'median', }, + {"name": "Coeff. of Variation", "attribute": "cov"}, + {"name": "Skewness", "attribute": "skew"}, + {"name": "Median", "attribute": "median"}, { - 'name': '(95\% confidence interval)', - 'attribute': 'median_conf_interval', - 'twoval': True, 'ci': True, 'rule': 'none' + "name": "(95\% confidence interval)", + "attribute": "median_conf_interval", + "twoval": True, + "ci": True, + "rule": "none", }, + {"name": "Quartiles", "attribute": ["pctl25", "pctl75"], "twoval": True}, { - 'name': 'Quartiles', - 'attribute': ['pctl25', 'pctl75'], - 'twoval': True, + "name": "Number of Pairs", + "attribute": "n_pairs", + "rule": "top", + "fromdataset": True, + "sigfigs": 1, + "forceint": True, }, { - 'name': 'Number of Pairs', 'attribute': 'n_pairs', - 'rule': 'top', 'fromdataset': True, - 'sigfigs': 1, 'forceint': True + "name": "Wilcoxon p-value", + "attribute": "wilcoxon_p", + "fromdataset": True, + "pval": True, + "tex": True, }, { - 'name': 'Wilcoxon p-value', 'attribute': 'wilcoxon_p', - 'fromdataset': True, 'pval': True, 'tex': True - }, - { - 'name': 'Mann-Whitney p-value', 'attribute': 'mannwhitney_p', - 'fromdataset': True, 'pval': True, 'tex': True + "name": "Mann-Whitney p-value", + "attribute": "mannwhitney_p", + "fromdataset": True, + "pval": True, + "tex": True, }, ] for s in stats: @@ -251,11 +283,11 @@ def _make_tex_table(self, tabletitle): \end{tabular} \end{table}""" - return stattable + '\n' + return stattable + "\n" # doesn't need to be a class method yet - def _make_tex_figure(self, filename, caption, position='hb', clearpage=True): - ''' + def _make_tex_figure(self, filename, caption, position="hb", clearpage=True): + """ Create the LaTeX for include a figure in a document Parameters @@ -279,22 +311,27 @@ def _make_tex_figure(self, filename, caption, position='hb', clearpage=True): figurestring : string The LaTeX string to include a figure in a document - ''' + """ if clearpage: - clrpage = ' \\clearpage\n' + clrpage = " \\clearpage\n" else: - clrpage = '\n' + clrpage = "\n" figurestring = r""" \begin{figure}[%s] %% FIGURE \centering \includegraphics[scale=1.00]{%s} \caption{%s} - \end{figure}%s""" % (position, filename, caption, clrpage) + \end{figure}%s""" % ( + position, + filename, + caption, + clrpage, + ) return figurestring def makeTexInput(self, tabletitle, subsection=True): - ''' + """ Creates an input file for a dataset including a summary table, stat plot, and scatter plot. @@ -314,32 +351,30 @@ def makeTexInput(self, tabletitle, subsection=True): filename : string Filename and path of the file that is written - ''' - tablestring = '' + """ + tablestring = "" # if there's enough effluent data if self.ds.effluent.include: if subsection: - tablestring += r'\subsection{%s}' % (self.bmp,) + tablestring += r"\subsection{%s}" % (self.bmp,) # caption for the stats plot - prob_caption = 'Box and Probability Plots of {} at {} BMPs'.format( - self.parameter.name, - self.bmp + prob_caption = "Box and Probability Plots of {} at {} BMPs".format( + self.parameter.name, self.bmp ) # caption for the scatter plot - scatter_caption = 'Influent vs. Effluent Plots of {} at {} BMPs'.format( - self.parameter.name, - self.bmp + scatter_caption = "Influent vs. Effluent Plots of {} at {} BMPs".format( + self.parameter.name, self.bmp ) # warning about having a lot of non-detects - warning = ''' + warning = """ Warning: there is a very high percentage of non-detects in this data set. The hypothesis test results and other statistics reported in this table may not be valid. - ''' + """ # make the table and write it to the output file tablestring += self._make_tex_table(tabletitle) @@ -370,22 +405,29 @@ def makeTexInput(self, tabletitle, subsection=True): class CategoricalSummary(object): - def __init__(self, datasets, paramgroup, basepath, figpath, - showprogress=False, applyfilters=False, - filtercount=5, filtercolumn='bmp'): + def __init__( + self, + datasets, + paramgroup, + basepath, + figpath, + showprogress=False, + applyfilters=False, + filtercount=5, + filtercolumn="bmp", + ): self._cache = {} self._applyfilters = applyfilters self.filtercount = filtercount self.filtercolumn = filtercolumn - self._raw_datasets = [ds for ds in filter( - lambda x: x.effluent.include, - datasets - )] + self._raw_datasets = [ + ds for ds in filter(lambda x: x.effluent.include, datasets) + ] self.basepath = basepath self.figpath = figpath self.showprogress = showprogress - self.parameters = [ds.definition['parameter'] for ds in self.datasets] - self.bmps = [ds.definition['category'] for ds in self.datasets] + self.parameters = [ds.definition["parameter"] for ds in self.datasets] + self.bmps = [ds.definition["category"] for ds in self.datasets] self.paramgroup = paramgroup @cache_readonly @@ -393,11 +435,13 @@ def datasets(self): if self._applyfilters: filtered_datasets = [] for ds in self._raw_datasets: - filterlocation(ds.effluent, count=self.filtercount, - column=self.filtercolumn) + filterlocation( + ds.effluent, count=self.filtercount, column=self.filtercolumn + ) - filterlocation(ds.influent, count=self.filtercount, - column=self.filtercolumn) + filterlocation( + ds.influent, count=self.filtercount, column=self.filtercolumn + ) ds.include = ds.effluent.include @@ -410,36 +454,36 @@ def datasets(self): def _make_input_file_IO(self, inputIO, regenfigs=True): - figoptions = dict(dpi=600, bbox_inches='tight', transparent=True) + figoptions = dict(dpi=600, bbox_inches="tight", transparent=True) if self.showprogress: pbar = utils.ProgressBar(self.datasets) - old_param = 'pure garbage' + old_param = "pure garbage" for n, ds in enumerate(self.datasets, 1): dsum = DatasetSummary(ds, self.paramgroup, self.figpath) new_param = dsum.parameter.name - tabletitle = 'Statistics for {} at {} BMPs'.format( + tabletitle = "Statistics for {} at {} BMPs".format( dsum.parameter.paramunit(), dsum.bmp ) - latex_input = '' + latex_input = "" if old_param != new_param: - latex_input = '\\section{%s}\n' % dsum.parameter.name + latex_input = "\\section{%s}\n" % dsum.parameter.name latex_input += dsum.makeTexInput(tabletitle, subsection=True) - latex_input += '\\clearpage\n' + latex_input += "\\clearpage\n" if regenfigs: statfig = ds.statplot( ylabel=dsum.parameter.paramunit(), - bacteria=(self.paramgroup == 'Bacteria'), - axtype='prob' + bacteria=(self.paramgroup == "Bacteria"), + axtype="prob", ) scatterfig = ds.scatterplot( - xlabel='Influent ' + dsum.parameter.paramunit(), - ylabel='Effluent ' + dsum.parameter.paramunit(), - one2one=True + xlabel="Influent " + dsum.parameter.paramunit(), + ylabel="Effluent " + dsum.parameter.paramunit(), + one2one=True, ) statpath = os.path.join(self.basepath, dsum.stat_fig_name) @@ -449,7 +493,7 @@ def _make_input_file_IO(self, inputIO, regenfigs=True): scatterfig.savefig(scatterpath, **figoptions) inputIO.write(latex_input) - pyplot.close('all') + pyplot.close("all") old_param = new_param @@ -459,43 +503,56 @@ def _make_input_file_IO(self, inputIO, regenfigs=True): def _make_report_IO(self, templateIO, inputpath, reportIO, report_title): inputname = os.path.basename(inputpath) - documentstring = templateIO.read().replace('__VARTITLE', report_title) - documentstring += '\n\\input{%s}\n\\end{document}\n' % (inputname,) + documentstring = templateIO.read().replace("__VARTITLE", report_title) + documentstring += "\n\\input{%s}\n\\end{document}\n" % (inputname,) reportIO.write(documentstring) - def makeReport(self, templatepath, inputpath, reportpath, report_title, - regenfigs=True): + def makeReport( + self, templatepath, inputpath, reportpath, report_title, regenfigs=True + ): - with open(inputpath, 'w') as inputIO: + with open(inputpath, "w") as inputIO: self._make_input_file_IO(inputIO, regenfigs=regenfigs) - with open(templatepath, 'r') as templateIO: - with open(reportpath, 'w') as reportIO: - self._make_report_IO( - templateIO, - inputpath, - reportIO, - report_title - ) + with open(templatepath, "r") as templateIO: + with open(reportpath, "w") as reportIO: + self._make_report_IO(templateIO, inputpath, reportIO, report_title) def _proxy_inflow_outflow(dataset): from matplotlib.lines import Line2D + infl_color = dataset.influent.color - infl = Line2D([], [], color=infl_color, linestyle='-', linewidth=1.75, - marker='o', markerfacecolor='white', - markeredgewidth=1.25, markeredgecolor=infl_color) + infl = Line2D( + [], + [], + color=infl_color, + linestyle="-", + linewidth=1.75, + marker="o", + markerfacecolor="white", + markeredgewidth=1.25, + markeredgecolor=infl_color, + ) effl_color = dataset.effluent.color - effl = Line2D([], [], color=effl_color, linestyle='-', linewidth=1.75, - marker='s', markerfacecolor='white', - markeredgewidth=1.25, markeredgecolor=effl_color) + effl = Line2D( + [], + [], + color=effl_color, + linestyle="-", + linewidth=1.75, + marker="s", + markerfacecolor="white", + markeredgewidth=1.25, + markeredgecolor=effl_color, + ) return infl, effl -def categorical_boxplots(dc, outpath='.'): +def categorical_boxplots(dc, outpath="."): param = None - bmplabels = sorted(dc.tidy['category'].unique()) + bmplabels = sorted(dc.tidy["category"].unique()) matplotlib.rc("lines", markeredgewidth=0.5) @@ -504,87 +561,113 @@ def categorical_boxplots(dc, outpath='.'): pos_map = dict(zip(bmplabels, bmppositions)) paramunits = ( - dc.tidy[['parameter', 'paramgroup', 'units']] - .drop_duplicates() - .to_dict(orient='records') + dc.tidy[["parameter", "paramgroup", "units"]] + .drop_duplicates() + .to_dict(orient="records") ) for pu in paramunits: - parameter = pu['parameter'] - group = pu['paramgroup'] - units = pu['units'] + parameter = pu["parameter"] + group = pu["paramgroup"] + units = pu["units"] param = wqio.Parameter(name=parameter, units=units) fig, ax = pyplot.subplots(figsize=(6.5, 4)) - datasets = dc.selectDatasets('inflow', 'outflow', parameter=parameter) + datasets = dc.selectDatasets("inflow", "outflow", parameter=parameter) infl_proxy = None for n, ds in enumerate(datasets): - pos = pos_map[ds.definition['category']] + pos = pos_map[ds.definition["category"]] if ds is not None: - bp = ds.boxplot(ax=ax, yscale='log', width=0.45, bothTicks=False, - bacteria=group == 'Biological', - pos=pos, offset=0.25, - patch_artist=True) + bp = ds.boxplot( + ax=ax, + yscale="log", + width=0.45, + bothTicks=False, + bacteria=group == "Biological", + pos=pos, + offset=0.25, + patch_artist=True, + ) if infl_proxy is None: infl_proxy, effl_proxy = _proxy_inflow_outflow(ds) ax.set_xticks(bmppositions) - ax.set_xticklabels([x.replace('/', '/\n') for x in bmplabels]) + ax.set_xticklabels([x.replace("/", "/\n") for x in bmplabels]) ax.set_ylabel(param.paramunit()) - ax.set_xlabel('') - ax.yaxis.grid(True, which='major', color='0.5', linestyle='-') - ax.yaxis.grid(False, which='minor') - wqio.viz.rotateTickLabels(ax, 45, 'x') + ax.set_xlabel("") + ax.yaxis.grid(True, which="major", color="0.5", linestyle="-") + ax.yaxis.grid(False, which="minor") + wqio.viz.rotateTickLabels(ax, 45, "x") ax.set_xlim(left=1, right=bmppositions.max() + 1) if infl_proxy is not None: ax.legend( (infl_proxy, effl_proxy), - ('Influent', 'Effluent'), + ("Influent", "Effluent"), ncol=2, frameon=False, - bbox_to_anchor=(1.0, 1.1) + bbox_to_anchor=(1.0, 1.1), ) fig.tight_layout() seaborn.despine(fig) - fname = '{}_{}_boxplots.png'.format(group, parameter.replace(', ', '')) + fname = "{}_{}_boxplots.png".format(group, parameter.replace(", ", "")) - fig.savefig(os.path.join(outpath, fname), dpi=600, bbox_inches='tight', transparent=False) + fig.savefig( + os.path.join(outpath, fname), + dpi=600, + bbox_inches="tight", + transparent=False, + ) pyplot.close(fig) def _get_fmt(paramgroup): - if paramgroup == 'Solids': - return lambda x: '{:.1f}'.format(x) - elif paramgroup == 'Biological': + if paramgroup == "Solids": + return lambda x: "{:.1f}".format(x) + elif paramgroup == "Biological": return lambda x: wqio.utils.sigFigs(x, n=2) else: - return lambda x: '{:.2f}'.format(x) + return lambda x: "{:.2f}".format(x) def categorical_stats(dc, simple=False): return ( - dc.data - .loc[:, dc.groupcols + ['bmp_id']] + dc.data.loc[:, dc.groupcols + ["bmp_id"]] .drop_duplicates() .groupby(dc.groupcols) .size() - .unstack(level='station') - .fillna(0).astype(int) - .pipe(wqio.utils.add_column_level, 'BMPs', 'result') - .swaplevel(axis='columns') + .unstack(level="station") + .fillna(0) + .astype(int) + .pipe(wqio.utils.add_column_level, "BMPs", "result") + .swaplevel(axis="columns") .join(dc.count.fillna(0).astype(int)) .join(dc.percentile(25).round(2)) .join(dc.median.round(2)) .join(dc.percentile(75).round(2)) .pipe(wqio.utils.flatten_columns) - .assign(diff_medianci=~wqio.utils.checkIntervalOverlap( - dc.median['inflow'], dc.median['outflow'], axis=1, oneway=False) + .assign( + diff_medianci=~wqio.utils.checkIntervalOverlap( + dc.median["inflow"], dc.median["outflow"], axis=1, oneway=False + ) + ) + .assign( + diff_mannwhitney=(dc.mann_whitney["pvalue"] < 0.05).xs( + ("inflow", "outflow"), level=["station_1", "station_2"] + ) + ) + .assign( + diff_wilcoxon=(dc.wilcoxon["pvalue"] < 0.05).xs( + ("inflow", "outflow"), level=["station_1", "station_2"] + ) + ) + .assign( + diff_symbol=lambda df: wqio.utils.symbolize_bools( + df.loc[:, lambda df: df.columns.map(lambda c: c.startswith("diff"))], + true_symbol="◆", + false_symbol="◇", + other_symbol="✖", + join_char=" ", + ) ) - .assign(diff_mannwhitney=(dc.mann_whitney['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) - .assign(diff_wilcoxon=(dc.wilcoxon['pvalue'] < 0.05).xs(('inflow', 'outflow'), level=['station_1', 'station_2'])) - .assign(diff_symbol=lambda df: wqio.utils.symbolize_bools( - df.loc[:, lambda df: df.columns.map(lambda c: c.startswith('diff'))], - true_symbol='◆', false_symbol='◇', other_symbol='✖', join_char=' ' - )) - .pipe(wqio.utils.expand_columns, sep='_', names=['result', 'value']) - .swaplevel(axis='columns') + .pipe(wqio.utils.expand_columns, sep="_", names=["result", "value"]) + .swaplevel(axis="columns") ) diff --git a/pybmpdb/tests/__init__.py b/pybmpdb/tests/__init__.py index d5a4143..1cdf61e 100644 --- a/pybmpdb/tests/__init__.py +++ b/pybmpdb/tests/__init__.py @@ -9,24 +9,21 @@ pytest = None -@requires(pytest, 'pytest') +@requires(pytest, "pytest") def test(*args): - options = [resource_filename('pybmpdb', '')] + options = [resource_filename("pybmpdb", "")] options.extend(list(args)) return pytest.main(options) -@requires(pytest, 'pytest') +@requires(pytest, "pytest") def teststrict(*args): - options = [ - '--pep8', '--doctest-modules', - *list(args) - ] + options = ["--pep8", "--doctest-modules", *list(args)] return test(*list(set(options))) -@requires(pytest, 'pytest') +@requires(pytest, "pytest") def test_nowarnings(*args): with warnings.catch_warnings(): - warnings.simplefilter('error') + warnings.simplefilter("error") return teststrict(*args) diff --git a/pybmpdb/tests/test_bmpdb.py b/pybmpdb/tests/test_bmpdb.py index 68aab61..28a49a5 100644 --- a/pybmpdb/tests/test_bmpdb.py +++ b/pybmpdb/tests/test_bmpdb.py @@ -24,18 +24,20 @@ def get_data_file(filename): @pytest.fixture def df_for_quals(): - df = pandas.DataFrame([ - {'res': 1, 'DL': 2, 'qual': 'U'}, - {'res': 1, 'DL': 2, 'qual': 'UK'}, - {'res': 1, 'DL': 2, 'qual': 'UA'}, - {'res': 1, 'DL': 2, 'qual': 'UC'}, - {'res': 1, 'DL': 2, 'qual': 'K'}, - {'res': 5., 'DL': 15., 'qual': 'UJ'}, - {'res': 5., 'DL': 10., 'qual': 'UJ'}, - {'res': 10., 'DL': 5., 'qual': 'UJ'}, - {'res': 10., 'DL': 10., 'qual': 'UJ'}, - {'res': 5., 'DL': 5., 'qual': 'junk'}, - ]) + df = pandas.DataFrame( + [ + {"res": 1, "DL": 2, "qual": "U"}, + {"res": 1, "DL": 2, "qual": "UK"}, + {"res": 1, "DL": 2, "qual": "UA"}, + {"res": 1, "DL": 2, "qual": "UC"}, + {"res": 1, "DL": 2, "qual": "K"}, + {"res": 5.0, "DL": 15.0, "qual": "UJ"}, + {"res": 5.0, "DL": 10.0, "qual": "UJ"}, + {"res": 10.0, "DL": 5.0, "qual": "UJ"}, + {"res": 10.0, "DL": 10.0, "qual": "UJ"}, + {"res": 5.0, "DL": 5.0, "qual": "junk"}, + ] + ) return df @@ -47,131 +49,189 @@ def test__handle_ND_factors(df_for_quals): def test__handle_ND_qualifiers(df_for_quals): result = bmpdb._handle_ND_qualifiers(df_for_quals) - expected = numpy.array(['ND', 'ND', 'ND', 'ND', 'ND', 'ND', 'ND', '=', 'ND', '=']) + expected = numpy.array(["ND", "ND", "ND", "ND", "ND", "ND", "ND", "=", "ND", "="]) nptest.assert_array_equal(result, expected) def test__process_screening(): - df = pandas.DataFrame({ - 'screen': ['Yes', 'INC', 'No', 'eXC', 'junk'] - }) - expected = numpy.array(['yes', 'yes', 'no', 'no', 'invalid']) - result = bmpdb._process_screening(df, 'screen') + df = pandas.DataFrame({"screen": ["Yes", "INC", "No", "eXC", "junk"]}) + expected = numpy.array(["yes", "yes", "no", "no", "invalid"]) + result = bmpdb._process_screening(df, "screen") nptest.assert_array_equal(result, expected) def test__process_sampletype(): - df = pandas.DataFrame({ - 'sampletype': ['SRL GraB asdf', 'SeL cOMPositE df', 'jeL LSDR as'] - }) - expected = numpy.array(['grab', 'composite', 'unknown']) - result = bmpdb._process_sampletype(df, 'sampletype') + df = pandas.DataFrame( + {"sampletype": ["SRL GraB asdf", "SeL cOMPositE df", "jeL LSDR as"]} + ) + expected = numpy.array(["grab", "composite", "unknown"]) + result = bmpdb._process_sampletype(df, "sampletype") nptest.assert_array_equal(result, expected) def test__check_levelnames(): - bmpdb._check_levelnames(['epazone', 'category']) + bmpdb._check_levelnames(["epazone", "category"]) with pytest.raises(ValueError): - bmpdb._check_levelnames(['site', 'junk']) + bmpdb._check_levelnames(["site", "junk"]) -@patch.object(pandas, 'read_csv') +@patch.object(pandas, "read_csv") def test_load_data(read_csv): - bmpdb.load_data('bmp.csv') - read_csv.assert_called_once_with(Path('bmp.csv'), parse_dates=['sampledate'], encoding='utf-8') + bmpdb.load_data("bmp.csv") + read_csv.assert_called_once_with( + Path("bmp.csv"), parse_dates=["sampledate"], encoding="utf-8" + ) -@pytest.mark.skipif(True, reason='test not ready') +@pytest.mark.skipif(True, reason="test not ready") def test_clean_raw_data(): pass def test_transform_parameters(): - index_cols = ['storm', 'param', 'units'] - df = pandas.DataFrame({ - 'storm': [1, 1, 2, 2, 3, 3], - 'param': list('ABABAB'), - 'units': ['mg/L'] * 6, - 'res': [1, 2, 3, 4, 5, 6], - 'qual': ['<', '='] * 3, - }).set_index(index_cols) - - expected = pandas.DataFrame({ - 'storm': [1, 1, 2, 2, 3, 3, 1, 2, 3], - 'param': list('ABABABCCC'), - 'units': (['mg/L'] * 6) + (['ug/L'] * 3), - 'res': [1, 2, 3, 4, 5, 6, 3000, 7000, 11000], - 'qual': (['<', '='] * 3) + (['='] * 3), - }).set_index(index_cols) - - old_params = ['A', 'B'] - new_param = 'C' + index_cols = ["storm", "param", "units"] + df = pandas.DataFrame( + { + "storm": [1, 1, 2, 2, 3, 3], + "param": list("ABABAB"), + "units": ["mg/L"] * 6, + "res": [1, 2, 3, 4, 5, 6], + "qual": ["<", "="] * 3, + } + ).set_index(index_cols) + + expected = pandas.DataFrame( + { + "storm": [1, 1, 2, 2, 3, 3, 1, 2, 3], + "param": list("ABABABCCC"), + "units": (["mg/L"] * 6) + (["ug/L"] * 3), + "res": [1, 2, 3, 4, 5, 6, 3000, 7000, 11000], + "qual": (["<", "="] * 3) + (["="] * 3), + } + ).set_index(index_cols) + + old_params = ["A", "B"] + new_param = "C" result = bmpdb.transform_parameters( - df, old_params, new_param, 'ug/L', - lambda x: 1000 * x['res'].sum(axis=1), - lambda x: x[('qual', 'B')], - paramlevel='param' + df, + old_params, + new_param, + "ug/L", + lambda x: 1000 * x["res"].sum(axis=1), + lambda x: x[("qual", "B")], + paramlevel="param", ) pdtest.assert_frame_equal(result, expected) -@pytest.mark.parametrize(('fxn', 'args', 'index_cols', 'infilename', 'outfilename'), [ - (bmpdb._pick_best_station, [], ['site', 'bmp', 'storm', 'parameter', 'station'], - 'test_pick_station_input.csv', 'test_pick_station_output.csv'), - (bmpdb._pick_best_sampletype, [], ['site', 'bmp', 'storm', 'parameter', 'station', 'sampletype'], - 'test_pick_sampletype_input.csv', 'test_pick_sampletype_output.csv'), - (bmpdb._filter_by_storm_count, [6], ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], - 'test_filter_bmp-storm_counts_input.csv', 'test_filter_storm_counts_output.csv'), - (bmpdb._filter_by_BMP_count, [4], ['category', 'site', 'bmp', 'parameter', 'station'], - 'test_filter_bmp-storm_counts_input.csv', 'test_filter_bmp_counts_output.csv',), -]) +@pytest.mark.parametrize( + ("fxn", "args", "index_cols", "infilename", "outfilename"), + [ + ( + bmpdb._pick_best_station, + [], + ["site", "bmp", "storm", "parameter", "station"], + "test_pick_station_input.csv", + "test_pick_station_output.csv", + ), + ( + bmpdb._pick_best_sampletype, + [], + ["site", "bmp", "storm", "parameter", "station", "sampletype"], + "test_pick_sampletype_input.csv", + "test_pick_sampletype_output.csv", + ), + ( + bmpdb._filter_by_storm_count, + [6], + ["category", "site", "bmp", "storm", "parameter", "station"], + "test_filter_bmp-storm_counts_input.csv", + "test_filter_storm_counts_output.csv", + ), + ( + bmpdb._filter_by_BMP_count, + [4], + ["category", "site", "bmp", "parameter", "station"], + "test_filter_bmp-storm_counts_input.csv", + "test_filter_bmp_counts_output.csv", + ), + ], +) def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) - expected_df = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() + expected_df = pandas.read_csv( + get_data_file(outfilename), index_col=index_cols + ).sort_index() test_df = fxn(input_df, *args).sort_index() pdtest.assert_frame_equal(expected_df.reset_index(), test_df.reset_index()) -@pytest.mark.parametrize('doit', [True, False]) -@pytest.mark.parametrize(('fxn', 'index_cols', 'infilename', 'outfilename'), [ - (bmpdb._maybe_filter_onesided_BMPs, ['category', 'site', 'bmp', 'storm', 'parameter', 'station'], - 'test_filter_onesidedbmps_input.csv', 'test_filter_onesidedbmps_output.csv'), - (bmpdb._maybe_combine_nox, ['bmp', 'category', 'storm', 'units', 'parameter'], - 'test_WBRP_NOx_input.csv', 'test_NOx_output.csv'), - (bmpdb._maybe_combine_WB_RP, ['bmp', 'category', 'storm', 'units', 'parameter'], - 'test_WBRP_NOx_input.csv', 'test_WBRP_output.csv'), - (bmpdb._maybe_fix_PFCs, ['bmp', 'category', 'bmptype', 'storm', 'parameter'], - 'test_PFCs_input.csv', 'test_PFCs_output.csv'), - (bmpdb._maybe_remove_grabs, ['bmp', 'category', 'sampletype', 'storm'], - 'test_grabsample_input.csv', 'test_grabsample_output.csv') -]) +@pytest.mark.parametrize("doit", [True, False]) +@pytest.mark.parametrize( + ("fxn", "index_cols", "infilename", "outfilename"), + [ + ( + bmpdb._maybe_filter_onesided_BMPs, + ["category", "site", "bmp", "storm", "parameter", "station"], + "test_filter_onesidedbmps_input.csv", + "test_filter_onesidedbmps_output.csv", + ), + ( + bmpdb._maybe_combine_nox, + ["bmp", "category", "storm", "units", "parameter"], + "test_WBRP_NOx_input.csv", + "test_NOx_output.csv", + ), + ( + bmpdb._maybe_combine_WB_RP, + ["bmp", "category", "storm", "units", "parameter"], + "test_WBRP_NOx_input.csv", + "test_WBRP_output.csv", + ), + ( + bmpdb._maybe_fix_PFCs, + ["bmp", "category", "bmptype", "storm", "parameter"], + "test_PFCs_input.csv", + "test_PFCs_output.csv", + ), + ( + bmpdb._maybe_remove_grabs, + ["bmp", "category", "sampletype", "storm"], + "test_grabsample_input.csv", + "test_grabsample_output.csv", + ), + ], +) def test__maybe_filter_functions(fxn, doit, index_cols, infilename, outfilename): input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) result = fxn(input_df, doit).sort_index() if doit: - expected = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() + expected = pandas.read_csv( + get_data_file(outfilename), index_col=index_cols + ).sort_index() else: expected = input_df.copy().sort_index() pdtest.assert_frame_equal(result, expected) def test__pick_non_null(): - df = pandas.DataFrame({ - ('res', 'this'): [1.0, numpy.nan, 2.0, numpy.nan], - ('res', 'that'): [numpy.nan, numpy.nan, 9.0, 3.0] - }) + df = pandas.DataFrame( + { + ("res", "this"): [1.0, numpy.nan, 2.0, numpy.nan], + ("res", "that"): [numpy.nan, numpy.nan, 9.0, 3.0], + } + ) expected = numpy.array([1.0, numpy.nan, 2.0, 3.0]) - result = bmpdb._pick_non_null(df, 'res', 'this', 'that') + result = bmpdb._pick_non_null(df, "res", "this", "that") nptest.assert_array_equal(result, expected) def test_paired_qual(): - df = pandas.DataFrame({ - 'in_qual': ['=', '=', 'ND', 'ND'], - 'out_qual': ['=', 'ND', '=', 'ND'] - }) - expected = ['Pair', 'Effluent ND', 'Influent ND', 'Both ND'] - result = bmpdb.paired_qual(df, 'in_qual', 'out_qual') + df = pandas.DataFrame( + {"in_qual": ["=", "=", "ND", "ND"], "out_qual": ["=", "ND", "=", "ND"]} + ) + expected = ["Pair", "Effluent ND", "Influent ND", "Both ND"] + result = bmpdb.paired_qual(df, "in_qual", "out_qual") nptest.assert_array_equal(result, expected) diff --git a/pybmpdb/tests/test_info.py b/pybmpdb/tests/test_info.py index d633292..8671bb0 100644 --- a/pybmpdb/tests/test_info.py +++ b/pybmpdb/tests/test_info.py @@ -5,11 +5,14 @@ from pybmpdb import info -@pytest.mark.parametrize(('value', 'expected', 'error'), [ - ('ug/L', {"name": "ug/L", "factor": 1}, None), - ('mg/L', None, ValueError), - ('MPN/100 mL', None, ValueError), -]) +@pytest.mark.parametrize( + ("value", "expected", "error"), + [ + ("ug/L", {"name": "ug/L", "factor": 1}, None), + ("mg/L", None, ValueError), + ("MPN/100 mL", None, ValueError), + ], +) def test__find_by_name(value, expected, error): source = [ {"name": "MPN/100 mL", "factor": 1}, @@ -21,28 +24,25 @@ def test__find_by_name(value, expected, error): assert result == expected -@patch.object(info, 'units') -@patch.object(info, 'parameters') -@patch.object(info, '_find_by_name', return_value={'name': 'Lead', 'units': 'mg/L'}) +@patch.object(info, "units") +@patch.object(info, "parameters") +@patch.object(info, "_find_by_name", return_value={"name": "Lead", "units": "mg/L"}) def test_getUnitsFromParam(_find_by_name, parameters, units): - assert info.getUnitsFromParam('Lead') == 'Lead' - _find_by_name.assert_any_call('mg/L', units) - _find_by_name.assert_any_call('Lead', parameters) + assert info.getUnitsFromParam("Lead") == "Lead" + _find_by_name.assert_any_call("mg/L", units) + _find_by_name.assert_any_call("Lead", parameters) -@patch.object(info, 'units') -@patch.object(info, '_find_by_name') +@patch.object(info, "units") +@patch.object(info, "_find_by_name") def test_getUnits(_find_by_name, units): - _ = info.getUnits('mg/L') - _find_by_name.assert_called_once_with('mg/L', units) + _ = info.getUnits("mg/L") + _find_by_name.assert_called_once_with("mg/L", units) -@patch.object(info, 'units') -@patch.object(info, '_find_by_name', return_value={'factor': 10}) -@pytest.mark.parametrize(('value', 'expected'), [ - (None, 1), - ('mg/L', 10) -]) +@patch.object(info, "units") +@patch.object(info, "_find_by_name", return_value={"factor": 10}) +@pytest.mark.parametrize(("value", "expected"), [(None, 1), ("mg/L", 10)]) def test_getNormalization(_find_by_name, units, value, expected): result = info.getNormalization(value) assert result == expected @@ -50,10 +50,10 @@ def test_getNormalization(_find_by_name, units, value, expected): _find_by_name.assert_called_once_with(value, units) -@patch.object(info, 'parameters') -@patch.object(info, 'getNormalization') -@patch.object(info, '_find_by_name', return_value={'units': 'mg/L'}) +@patch.object(info, "parameters") +@patch.object(info, "getNormalization") +@patch.object(info, "_find_by_name", return_value={"units": "mg/L"}) def test_getConversion(_find_by_name, getNormalization, parameters): - result = info.getConversion('Lead') - _find_by_name.assert_called_once_with('Lead', parameters) - getNormalization.assert_called_once_with('mg/L') + result = info.getConversion("Lead") + _find_by_name.assert_called_once_with("Lead", parameters) + getNormalization.assert_called_once_with("mg/L") diff --git a/pybmpdb/tests/test_nsqd.py b/pybmpdb/tests/test_nsqd.py index 3cd9732..1e4c030 100644 --- a/pybmpdb/tests/test_nsqd.py +++ b/pybmpdb/tests/test_nsqd.py @@ -13,13 +13,13 @@ import wqio -@pytest.mark.parametrize('as_df', [True, False]) -@patch.object(wqio, 'DataCollection') -@patch.object(wqio, 'download', return_value=Path('./data/nsqd.csv')) -@patch.object(pandas, 'read_csv', return_value='NSQD_DataFrame') +@pytest.mark.parametrize("as_df", [True, False]) +@patch.object(wqio, "DataCollection") +@patch.object(wqio, "download", return_value=Path("./data/nsqd.csv")) +@patch.object(pandas, "read_csv", return_value="NSQD_DataFrame") def test_load_data(read_csv, download, dc, as_df): nsqd.load_data() - download.assert_called_once_with('nsqd') - read_csv.assert_called_once_with(Path('./data/nsqd.csv'), encoding='utf-8') + download.assert_called_once_with("nsqd") + read_csv.assert_called_once_with(Path("./data/nsqd.csv"), encoding="utf-8") if not as_df: - dc.assert_called_once_with('NSQD_DataFrame') + dc.assert_called_once_with("NSQD_DataFrame") diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 00eb1c2..2ffcba0 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -36,12 +36,12 @@ def get_tex_file(filename): class mock_parameter(object): def __init__(self): - self.name = 'Carbon Dioxide' - self.tex = r'$[\mathrm{CO}_2]$' - self.units = 'mg/L' + self.name = "Carbon Dioxide" + self.tex = r"$[\mathrm{CO}_2]$" + self.units = "mg/L" def paramunit(self, *args, **kwargs): - return 'Carbon Dioxide (mg/L)' + return "Carbon Dioxide (mg/L)" class mock_location(object): @@ -76,10 +76,7 @@ def __init__(self, infl_include, effl_include): self.n_pairs = 22 self.wilcoxon_p = 0.0005 self.mannwhitney_p = 0.456123 - self.definition = { - 'parameter': mock_parameter(), - 'category': 'testbmp' - } + self.definition = {"parameter": mock_parameter(), "category": "testbmp"} self.scenario = (infl_include, effl_include) def scatterplot(self, *args, **kwargs): @@ -89,19 +86,14 @@ def statplot(self, *args, **kwargs): return mock_figure() -@pytest.fixture(params=[ - (True, True), - (True, False), - (False, False), - (False, True) -]) +@pytest.fixture(params=[(True, True), (True, False), (False, False), (False, True)]) def dset_sum(request): ds = mock_dataset(request.param[0], request.param[1]) - return summary.DatasetSummary(ds, 'Metals', 'testfigpath') + return summary.DatasetSummary(ds, "Metals", "testfigpath") def test_DatasetSummary_paramgroup(dset_sum): - assert dset_sum.paramgroup == 'Metals' + assert dset_sum.paramgroup == "Metals" def test_DatasetSummary_ds(dset_sum): @@ -109,113 +101,166 @@ def test_DatasetSummary_ds(dset_sum): def test_DatasetSummary_parameter(dset_sum): - assert dset_sum.parameter is dset_sum.ds.definition['parameter'] + assert dset_sum.parameter is dset_sum.ds.definition["parameter"] def test_DatasetSummary_bmp(dset_sum): - assert dset_sum.bmp is dset_sum.ds.definition['category'] + assert dset_sum.bmp is dset_sum.ds.definition["category"] def test_DatasetSummary_latex_file_name(dset_sum): - assert dset_sum.latex_file_name == 'metalstestbmpcarbondioxide' + assert dset_sum.latex_file_name == "metalstestbmpcarbondioxide" def test_DatasetSummary__tex_table_row_basic(dset_sum): expected = { - (True, True): r''' - \midrule - The Medians & 1.23 & 1.23 \\''', - (True, False): r''' - \midrule - The Medians & 1.23 & NA \\''', - (False, True): r''' - \midrule - The Medians & NA & 1.23 \\''', - (False, False): r''' - \midrule - The Medians & NA & NA \\''' + ( + True, + True, + ): r""" + \midrule + The Medians & 1.23 & 1.23 \\""", + ( + True, + False, + ): r""" + \midrule + The Medians & 1.23 & NA \\""", + ( + False, + True, + ): r""" + \midrule + The Medians & NA & 1.23 \\""", + ( + False, + False, + ): r""" + \midrule + The Medians & NA & NA \\""", } - result_row = dset_sum._tex_table_row('The Medians', 'median') + result_row = dset_sum._tex_table_row("The Medians", "median") assert result_row == expected[dset_sum.ds.scenario] def test_DatasetSummary__tex_table_row_forceint(dset_sum): expected = { - (True, True): r''' - \midrule - Counts & 25 & 25 \\''', - (True, False): r''' - \midrule - Counts & 25 & NA \\''', - (False, True): r''' - \midrule - Counts & NA & 25 \\''', - (False, False): r''' - \midrule - Counts & NA & NA \\''' + ( + True, + True, + ): r""" + \midrule + Counts & 25 & 25 \\""", + ( + True, + False, + ): r""" + \midrule + Counts & 25 & NA \\""", + ( + False, + True, + ): r""" + \midrule + Counts & NA & 25 \\""", + ( + False, + False, + ): r""" + \midrule + Counts & NA & NA \\""", } - result_row = dset_sum._tex_table_row('Counts', 'N', forceint=True, sigfigs=1) + result_row = dset_sum._tex_table_row("Counts", "N", forceint=True, sigfigs=1) assert result_row == expected[dset_sum.ds.scenario] def test_DatasetSummary__tex_table_row_advanced(dset_sum): expected = { - (True, True): r''' + ( + True, + True, + ): r""" \toprule - Mean CI & (11; 13) & (11; 13) \\''', - (True, False): r''' + Mean CI & (11; 13) & (11; 13) \\""", + ( + True, + False, + ): r""" \toprule - Mean CI & (11; 13) & NA \\''', - (False, True): r''' + Mean CI & (11; 13) & NA \\""", + ( + False, + True, + ): r""" \toprule - Mean CI & NA & (11; 13) \\''', - (False, False): r''' + Mean CI & NA & (11; 13) \\""", + ( + False, + False, + ): r""" \toprule - Mean CI & NA & NA \\''', + Mean CI & NA & NA \\""", } - result_row = dset_sum._tex_table_row('Mean CI', 'mean_conf_interval', rule='top', - twoval=True, ci=True, sigfigs=2) + result_row = dset_sum._tex_table_row( + "Mean CI", "mean_conf_interval", rule="top", twoval=True, ci=True, sigfigs=2 + ) assert result_row == expected[dset_sum.ds.scenario] def test_DatasetSummary__text_table_row_twoattrs(dset_sum): expected = { - (True, True): r''' - \midrule - Quartiles & 0.612; 2.35 & 0.612; 2.35 \\''', - (True, False): r''' - \midrule - Quartiles & 0.612; 2.35 & NA \\''', - (False, True): r''' - \midrule - Quartiles & NA & 0.612; 2.35 \\''', - (False, False): r''' - \midrule - Quartiles & NA & NA \\''', + ( + True, + True, + ): r""" + \midrule + Quartiles & 0.612; 2.35 & 0.612; 2.35 \\""", + ( + True, + False, + ): r""" + \midrule + Quartiles & 0.612; 2.35 & NA \\""", + ( + False, + True, + ): r""" + \midrule + Quartiles & NA & 0.612; 2.35 \\""", + ( + False, + False, + ): r""" + \midrule + Quartiles & NA & NA \\""", } - result_row = dset_sum._tex_table_row('Quartiles', ['pctl25', 'pctl75'], twoval=True) + result_row = dset_sum._tex_table_row("Quartiles", ["pctl25", "pctl75"], twoval=True) assert result_row == expected[dset_sum.ds.scenario] def test_DatasetSummary__make_tex_figure(dset_sum): - fig = dset_sum._make_tex_figure('testfig.png', 'test caption') - known_fig = r""" + fig = dset_sum._make_tex_figure("testfig.png", "test caption") + known_fig = ( + r""" \begin{figure}[hb] % FIGURE \centering \includegraphics[scale=1.00]{testfig.png} \caption{test caption} - \end{figure} \clearpage""" + '\n' + \end{figure} \clearpage""" + + "\n" + ) assert fig == known_fig def test_DatasetSummary_makeTexInput(dset_sum, expected_latext_input): - result = dset_sum.makeTexInput('test table title') + result = dset_sum.makeTexInput("test table title") helpers.assert_bigstring_equal(result, expected_latext_input[dset_sum.ds.scenario]) def test_DatasetSummary__make_tex_table(dset_sum): if dset_sum.ds.scenario == (True, True): - expected = r""" + expected = ( + r""" \begin{table}[h!] \caption{test title} \centering @@ -262,8 +307,10 @@ def test_DatasetSummary__make_tex_table(dset_sum): Mann-Whitney p-value & \multicolumn{2}{c} {0.456} \\ \bottomrule \end{tabular} - \end{table}""" + '\n' - result = dset_sum._make_tex_table('test title') + \end{table}""" + + "\n" + ) + result = dset_sum._make_tex_table("test title") helpers.assert_bigstring_equal(result, expected) else: pass @@ -272,9 +319,12 @@ def test_DatasetSummary__make_tex_table(dset_sum): @pytest.fixture def expected_latext_input(): return { - (False, False): '', - (True, False): '', - (True, True): r"""\subsection{testbmp} + (False, False): "", + (True, False): "", + ( + True, + True, + ): r"""\subsection{testbmp} \begin{table}[h!] \caption{test table title} \centering @@ -333,8 +383,12 @@ def expected_latext_input(): \centering \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage""" + '\n', - (False, True): r"""\subsection{testbmp} + \end{figure} \clearpage""" + + "\n", + ( + False, + True, + ): r"""\subsection{testbmp} \begin{table}[h!] \caption{test table title} \centering @@ -393,7 +447,8 @@ def expected_latext_input(): \centering \includegraphics[scale=1.00]{testfigpath/scatterplot/metalstestbmpcarbondioxidescatter.pdf} \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} - \end{figure} \clearpage""" + '\n' + \end{figure} \clearpage""" + + "\n", } @@ -404,33 +459,32 @@ def cat_sum(): (True, False), (True, True), (False, False), - (False, True) + (False, True), ] cs = summary.CategoricalSummary( - [mock_dataset(*inc) for inc in includes], - 'Metals', - 'basepath', - 'testfigpath' + [mock_dataset(*inc) for inc in includes], "Metals", "basepath", "testfigpath" ) return cs @pytest.fixture def expected_latex_report(): - report = dedent("""\ + report = dedent( + """\ \\begin{document}test report title \\input{testpath.tex} \\end{document} - """) + """ + ) return report @pytest.fixture def temp_template(): with TemporaryDirectory() as datadir: - filename = os.path.join(datadir, 'testtemplate.tex') - with open(filename, 'w') as f: - f.write('\\begin{document}__VARTITLE') + filename = os.path.join(datadir, "testtemplate.tex") + with open(filename, "w") as f: + f.write("\\begin{document}__VARTITLE") yield filename @@ -444,7 +498,7 @@ def test_CategoricalSummary_datasets(cat_sum): def test_CategoricalSummary_paramgroup(cat_sum): assert isinstance(cat_sum.paramgroup, str) - assert cat_sum.paramgroup == 'Metals' + assert cat_sum.paramgroup == "Metals" def test_CategoricalSummary__make_input_file_IO(cat_sum, expected_latext_content): @@ -455,33 +509,36 @@ def test_CategoricalSummary__make_input_file_IO(cat_sum, expected_latext_content helpers.assert_bigstring_equal(input_string, expected_latext_content) -def test_CategoricalSummary__make_report_IO(cat_sum, expected_latex_report, temp_template): - with StringIO() as report, open(temp_template, 'r') as template: - cat_sum._make_report_IO(template, 'testpath.tex', report, 'test report title') +def test_CategoricalSummary__make_report_IO( + cat_sum, expected_latex_report, temp_template +): + with StringIO() as report, open(temp_template, "r") as template: + cat_sum._make_report_IO(template, "testpath.tex", report, "test report title") helpers.assert_bigstring_equal(report.getvalue(), expected_latex_report) def test_CategoricalSummary_makeReport(cat_sum, expected_latex_report, temp_template): - templatepath = get_tex_file('draft_template.tex') - inputpath = get_tex_file('inputs_{}.tex'.format(cat_sum.paramgroup.lower())) + templatepath = get_tex_file("draft_template.tex") + inputpath = get_tex_file("inputs_{}.tex".format(cat_sum.paramgroup.lower())) with TemporaryDirectory() as tmpdir: - reportpath = os.path.join(tmpdir, 'report_{}.tex'.format(cat_sum.paramgroup.lower())) - testpath = os.path.join(tmpdir, 'testpath.tex'.format(cat_sum.paramgroup.lower())) + reportpath = os.path.join( + tmpdir, "report_{}.tex".format(cat_sum.paramgroup.lower()) + ) + testpath = os.path.join( + tmpdir, "testpath.tex".format(cat_sum.paramgroup.lower()) + ) cat_sum.makeReport( - temp_template, - testpath, - reportpath, - 'test report title', - regenfigs=False + temp_template, testpath, reportpath, "test report title", regenfigs=False ) - with open(reportpath, 'r') as rp: + with open(reportpath, "r") as rp: helpers.assert_bigstring_equal(rp.read(), expected_latex_report) @pytest.fixture def expected_latext_content(): - content = dedent(r""" \section{Carbon Dioxide} + content = dedent( + r""" \section{Carbon Dioxide} \subsection{testbmp} \begin{table}[h!] \caption{Statistics for Carbon Dioxide (mg/L) at testbmp BMPs} @@ -665,5 +722,6 @@ def expected_latext_content(): \caption{Influent vs. Effluent Plots of Carbon Dioxide at testbmp BMPs} \end{figure} \clearpage \clearpage - """) + """ + ) return content diff --git a/pybmpdb/tests/test_utils.py b/pybmpdb/tests/test_utils.py index 9b10724..376590e 100644 --- a/pybmpdb/tests/test_utils.py +++ b/pybmpdb/tests/test_utils.py @@ -25,11 +25,9 @@ def test__sig_figs_helper(): def test_refresh_index(): - idx = pandas.MultiIndex.from_product([list('ABC'), list('ABC')], names=['A', 'B']) + idx = pandas.MultiIndex.from_product([list("ABC"), list("ABC")], names=["A", "B"]) df = pandas.DataFrame( - index=idx, - columns=list('abc'), - data=numpy.arange(27).reshape(9, 3) + index=idx, columns=list("abc"), data=numpy.arange(27).reshape(9, 3) ) pdtest.assert_frame_equal(df, utils.refresh_index(df)) @@ -38,12 +36,12 @@ def test_refresh_index(): def test_get_level_position(): - idx = pandas.MultiIndex.from_product([ - list('ABC'), ['cat', 'dog', 'fox', 'deer'] - ], names=['forest', 'animal']) - df = pandas.DataFrame(index=idx, columns=list('abc')) + idx = pandas.MultiIndex.from_product( + [list("ABC"), ["cat", "dog", "fox", "deer"]], names=["forest", "animal"] + ) + df = pandas.DataFrame(index=idx, columns=list("abc")) - assert utils.get_level_position(df, 'animal') == 1 + assert utils.get_level_position(df, "animal") == 1 def test_sanitizeTex(): @@ -59,7 +57,7 @@ def test_sanitizeTex(): @pytest.mark.skipif(True, reason="WIP") def test_makeBoxplotLegend(): - utils.makeBoxplotLegend(helpers.test_data_path('bplegendtest')) + utils.makeBoxplotLegend(helpers.test_data_path("bplegendtest")) @pytest.fixture @@ -69,22 +67,24 @@ def inputpath(): def test_csvToTex(inputpath): result = utils.csvToTex(inputpath) - knownfile = resource_filename("pybmpdb.tests._data", 'testtable_toTex_Known.tex') - with open(knownfile, 'r') as known: + knownfile = resource_filename("pybmpdb.tests._data", "testtable_toTex_Known.tex") + with open(knownfile, "r") as known: expected = known.read() assert result == expected def test_csvToXlsx(inputpath): - with mock.patch.object(pandas.DataFrame, 'to_excel') as toxl: - outputpath = resource_filename("pybmpdb.tests._data", 'testtable_toXL.xlsx') + with mock.patch.object(pandas.DataFrame, "to_excel") as toxl: + outputpath = resource_filename("pybmpdb.tests._data", "testtable_toXL.xlsx") utils.csvToXlsx(inputpath, outputpath) - toxl.assert_called_once_with(outputpath, float_format=None, - na_rep='--', index=False) + toxl.assert_called_once_with( + outputpath, float_format=None, na_rep="--", index=False + ) def test_makeTexTable_normal(): - known = dedent(r""" + known = dedent( + r""" \begin{table}[h!] \rowcolors{1}{CVCWhite}{CVCLightGrey} \caption{test caption} @@ -93,14 +93,16 @@ def test_makeTexTable_normal(): \end{table} - """) + """ + ) - test = utils.makeTexTable('fake.tex', 'test caption') + test = utils.makeTexTable("fake.tex", "test caption") assert known == test def test_makeTexTable_allOptions(): - known = dedent(r""" + known = dedent( + r""" \begin{sidewaystable}[bt] \rowcolors{1}{CVCWhite}{CVCLightGrey} \caption{test caption} @@ -109,17 +111,24 @@ def test_makeTexTable_allOptions(): \end{sidewaystable} test footnote \clearpage - """) - test = utils.makeTexTable('fake.tex', 'test caption', sideways=True, - footnotetext='test footnote', clearpage=True, - pos='bt') + """ + ) + test = utils.makeTexTable( + "fake.tex", + "test caption", + sideways=True, + footnotetext="test footnote", + clearpage=True, + pos="bt", + ) assert known == test @pytest.fixture def long_landscape_tables(): tables = { - None: dedent(r""" + None: dedent( + r""" \begin{landscape} \centering \rowcolors{1}{CVCWhite}{CVCLightGrey} @@ -157,8 +166,10 @@ def long_landscape_tables(): \end{landscape} \clearpage - """), - 'test note': dedent(r""" + """ + ), + "test note": dedent( + r""" \begin{landscape} \centering \rowcolors{1}{CVCWhite}{CVCLightGrey} @@ -196,66 +207,62 @@ def long_landscape_tables(): \end{landscape} test note \clearpage - """) + """ + ), } return tables -@pytest.mark.parametrize('footnote', ['test note', None]) +@pytest.mark.parametrize("footnote", ["test note", None]) def test_makeLongLandscapeTexTable(footnote, long_landscape_tables): dfdict = { - 'W': { - 'a': 0.84386963791251501, - 'b': -0.22109837444207142, - }, - 'X': { - 'a': 0.70049867715201963, - 'b': 1.4764939161054218, - }, - 'Y': { - 'a': -1.3477794473987552, - 'b': -1.1939220296611821, - }, + "W": {"a": 0.84386963791251501, "b": -0.22109837444207142}, + "X": {"a": 0.70049867715201963, "b": 1.4764939161054218}, + "Y": {"a": -1.3477794473987552, "b": -1.1939220296611821}, } df = pandas.DataFrame.from_dict(dfdict) - result = utils.makeLongLandscapeTexTable(df, 'test caption', 'label', - footnotetext=footnote) + result = utils.makeLongLandscapeTexTable( + df, "test caption", "label", footnotetext=footnote + ) expected = long_landscape_tables[footnote] helpers.assert_bigstring_equal(result, expected) def test_makeTexFigure(): - known = dedent(r""" + known = dedent( + r""" \begin{figure}[hb] % FIGURE \centering \includegraphics[scale=1.00]{fake.pdf} \caption{test caption} \end{figure} % FIGURE \clearpage - """) - test = utils.makeTexFigure('fake.pdf', 'test caption') + """ + ) + test = utils.makeTexFigure("fake.pdf", "test caption") assert known == test def test_processFilename(): - startname = 'This-is a, very+ &dumb$_{test/name}' - endname = 'This-isaverydumbtestname' + startname = "This-is a, very+ &dumb$_{test/name}" + endname = "This-isaverydumbtestname" assert endname == utils.processFilename(startname) @pytest.fixture def deep_dir(latex_content): with TemporaryDirectory() as td: - dd = os.path.join(td, 'test1', 'test2', 'test3') + dd = os.path.join(td, "test1", "test2", "test3") os.makedirs(dd) - with open(os.path.join(dd, 'f.tex'), 'w') as f: + with open(os.path.join(dd, "f.tex"), "w") as f: f.write(latex_content) yield dd @pytest.fixture def latex_content(): - return dedent(r""" + return dedent( + r""" \documentclass[12pt]{article} \usepackage{lingmacros} \usepackage{tree-dvips} @@ -302,7 +309,8 @@ def latex_content(): or WH-phrase. \end{document} - """) + """ + ) def test_LaTeXDirectory_folder_only(deep_dir): @@ -315,16 +323,16 @@ def test_LaTeXDirectory_folder_only(deep_dir): def test_LaTeXDirectory_file(deep_dir): origdir = os.getcwd() - deep_file = os.path.join(deep_dir, 'f.tex') + deep_file = os.path.join(deep_dir, "f.tex") with utils.LaTeXDirectory(deep_file): assert os.getcwd() == deep_dir assert os.getcwd() == origdir -@pytest.mark.skipif(helpers.checkdep_tex() is None, reason='No LaTeX') +@pytest.mark.skipif(helpers.checkdep_tex() is None, reason="No LaTeX") def test_compile_smoke(deep_dir, latex_content): - deep_file = os.path.join(deep_dir, 'f.tex') + deep_file = os.path.join(deep_dir, "f.tex") with utils.LaTeXDirectory(deep_file) as latex: latex.compile(deep_file) diff --git a/pybmpdb/utils.py b/pybmpdb/utils.py index c761cde..bd3368b 100644 --- a/pybmpdb/utils.py +++ b/pybmpdb/utils.py @@ -50,22 +50,29 @@ def sanitizeTex(texstring): """ newstring = ( - texstring.replace(r'\\%', r'\%') - .replace(r'\\', r'\tabularnewline') - .replace('\$', '$') - .replace('\_', '_') - .replace('ug/L', '\si[per-mode=symbol]{\micro\gram\per\liter}') - .replace(r'\textbackslashtimes', r'\times') - .replace(r'\textbackslash', '') - .replace(r'\textasciicircum', r'^') - .replace('\{', '{') - .replace('\}', '}') + texstring.replace(r"\\%", r"\%") + .replace(r"\\", r"\tabularnewline") + .replace("\$", "$") + .replace("\_", "_") + .replace("ug/L", "\si[per-mode=symbol]{\micro\gram\per\liter}") + .replace(r"\textbackslashtimes", r"\times") + .replace(r"\textbackslash", "") + .replace(r"\textasciicircum", r"^") + .replace("\{", "{") + .replace("\}", "}") ) return newstring -def csvToTex(csvpath, na_rep='--', float_format=_sig_figs, pcols=15, - addmidrules=None, replaceTBrules=True, replacestats=True): +def csvToTex( + csvpath, + na_rep="--", + float_format=_sig_figs, + pcols=15, + addmidrules=None, + replaceTBrules=True, + replacestats=True, +): """ Convert data in CSV format to a LaTeX table Parameters @@ -103,16 +110,16 @@ def csvToTex(csvpath, na_rep='--', float_format=_sig_figs, pcols=15, if pcols > 0: lines = [] - header, rest_of_file = latex.split('\n', maxsplit=1) + header, rest_of_file = latex.split("\n", maxsplit=1) # createa a bew header - header_sections = header.split('{') + header_sections = header.split("{") old_col_def = header_sections[-1][:-1] - new_col_def = '' + new_col_def = "" for n in range(len(old_col_def)): if n == 0: - new_col_def = new_col_def + 'l' - new_col_def = new_col_def + 'x{%smm}' % pcols + new_col_def = new_col_def + "l" + new_col_def = new_col_def + "x{%smm}" % pcols lines.append(header.replace(old_col_def, new_col_def)) @@ -134,18 +141,18 @@ def csvToTex(csvpath, na_rep='--', float_format=_sig_figs, pcols=15, rest_of_file = rest_of_file.replace("AluMin.um", "Aluminum") if addmidrules is not None: - if hasattr(addmidrules, 'append'): + if hasattr(addmidrules, "append"): for amr in addmidrules: - rest_of_file = rest_of_file.replace(amr, '\\midrule\n%s' % amr) + rest_of_file = rest_of_file.replace(amr, "\\midrule\n%s" % amr) else: - rest_of_file = rest_of_file.replace(amr, '\\midrule\n%s' % addmidrules) + rest_of_file = rest_of_file.replace(amr, "\\midrule\n%s" % addmidrules) lines.append(rest_of_file) - return sanitizeTex('\n'.join(lines)) + return sanitizeTex("\n".join(lines)) -def csvToXlsx(csvpath, xlsxpath, na_rep='--', float_format=None): +def csvToXlsx(csvpath, xlsxpath, na_rep="--", float_format=None): """ Convert data in CSV format to an Excel workbook Parameters @@ -172,8 +179,9 @@ def csvToXlsx(csvpath, xlsxpath, na_rep='--', float_format=None): data.to_excel(xlsxpath, float_format=float_format, na_rep=na_rep, index=False) -def makeTexTable(tablefile, caption, sideways=False, footnotetext=None, - clearpage=False, pos='h!'): +def makeTexTable( + tablefile, caption, sideways=False, footnotetext=None, clearpage=False, pos="h!" +): """ Creates a table block for a LaTeX document. Does not add it any file. @@ -204,22 +212,24 @@ def makeTexTable(tablefile, caption, sideways=False, footnotetext=None, """ if sideways: - tabletype = 'sidewaystable' + tabletype = "sidewaystable" clearpage = True else: - tabletype = 'table' + tabletype = "table" if clearpage: - clearpagetext = r'\clearpage' + clearpagetext = r"\clearpage" else: - clearpagetext = '' + clearpagetext = "" if footnotetext is None: - notes = '' + notes = "" else: notes = footnotetext - tablestring = dedent(r""" + tablestring = ( + dedent( + r""" \begin{%s}[%s] \rowcolors{1}{CVCWhite}{CVCLightGrey} \caption{%s} @@ -228,7 +238,10 @@ def makeTexTable(tablefile, caption, sideways=False, footnotetext=None, \end{%s} %s %s - """) % (tabletype, pos, caption, tablefile, tabletype, notes, clearpagetext) + """ + ) + % (tabletype, pos, caption, tablefile, tabletype, notes, clearpagetext) + ) return tablestring @@ -258,33 +271,35 @@ def makeLongLandscapeTexTable(df, caption, label, footnotetext=None, index=False """ if footnotetext is None: - notes = '' + notes = "" else: notes = footnotetext - tabletexstring = df.to_latex(index=index, float_format=_sig_figs, na_rep='--') - valuelines = tabletexstring.split('\n')[4:-3] - valuestring = '\n'.join(valuelines) + tabletexstring = df.to_latex(index=index, float_format=_sig_figs, na_rep="--") + valuelines = tabletexstring.split("\n")[4:-3] + valuestring = "\n".join(valuelines) def _multicol_format(args): n, col = args if n == 0: - align = 'l' + align = "l" else: - align = 'p{16mm}' + align = "p{16mm}" - return r"\multicolumn{1}{%s}{%s}" % (align, col.replace('%', r'\%')) + return r"\multicolumn{1}{%s}{%s}" % (align, col.replace("%", r"\%")) dfcols = df.columns.tolist() - colalignlist = ['c'] * len(dfcols) - colalignlist[0] = 'l' - colalignment = ''.join(colalignlist) + colalignlist = ["c"] * len(dfcols) + colalignlist[0] = "l" + colalignment = "".join(colalignlist) col_enum = list(enumerate(dfcols)) - columns = ' &\n '.join(list(map(_multicol_format, col_enum))) + columns = " &\n ".join(list(map(_multicol_format, col_enum))) - tablestring = dedent(r""" + tablestring = ( + dedent( + r""" \begin{landscape} \centering \rowcolors{1}{CVCWhite}{CVCLightGrey} @@ -317,12 +332,24 @@ def _multicol_format(args): \end{landscape} %s \clearpage - """) % (colalignment, caption, label, columns, len(dfcols), - columns, len(dfcols), valuestring, notes) + """ + ) + % ( + colalignment, + caption, + label, + columns, + len(dfcols), + columns, + len(dfcols), + valuestring, + notes, + ) + ) return tablestring -def makeTexFigure(figFile, caption, pos='hb', clearpage=True): +def makeTexFigure(figFile, caption, pos="hb", clearpage=True): """ Create the LaTeX for include a figure in a document. Does not actually add it to any document. @@ -353,18 +380,23 @@ def makeTexFigure(figFile, caption, pos='hb', clearpage=True): """ if clearpage: - clearpagetext = r'\clearpage' + clearpagetext = r"\clearpage" else: - clearpagetext = '' + clearpagetext = "" - figurestring = dedent(r''' + figurestring = ( + dedent( + r""" \begin{figure}[%s] %% FIGURE \centering \includegraphics[scale=1.00]{%s} \caption{%s} \end{figure} %% FIGURE %s - ''') % (pos, figFile, caption, clearpagetext) + """ + ) + % (pos, figFile, caption, clearpagetext) + ) return figurestring @@ -389,52 +421,52 @@ def processFilename(filename): """ - badchars = [' ', ',', '+', '$', '_', '{', '}', '/', '&'] + badchars = [" ", ",", "+", "$", "_", "{", "}", "/", "&"] fn = filename for bc in badchars: - fn = fn.replace(bc, '') + fn = fn.replace(bc, "") return fn def setMPLStyle(serif=False): if serif: - fontfamily = 'serif' + fontfamily = "serif" preamble = [ - r'\usepackage{siunitx}', - r'\sisetup{detect-all}', - r'\usepackage{fourier}' + r"\usepackage{siunitx}", + r"\sisetup{detect-all}", + r"\usepackage{fourier}", ] else: - fontfamily = 'sans-serif' + fontfamily = "sans-serif" preamble = [ - r'\usepackage{siunitx}', - r'\sisetup{detect-all}', - r'\usepackage{helvet}', - r'\usepackage{sansmath}', - r'\sansmath' + r"\usepackage{siunitx}", + r"\sisetup{detect-all}", + r"\usepackage{helvet}", + r"\usepackage{sansmath}", + r"\sansmath", ] style_dict = { - 'text.usetex': True, - 'font.family': [fontfamily], - 'font.serif': ['Utopia', 'Palantino'], - 'font.sans-serif': ['Helvetica', 'Arial'], - 'lines.linewidth': 0.5, - 'patch.linewidth': 0.5, - 'text.latex.preamble': preamble, - 'axes.linewidth': 0.5, - 'axes.grid': True, - 'axes.titlesize': 12, - 'axes.labelsize': 10, - 'xtick.labelsize': 10, - 'xtick.direction': 'out', - 'ytick.labelsize': 10, - 'ytick.direction': 'out', - 'grid.linewidth': 0.5, - 'legend.fancybox': True, - 'legend.numpoints': 1, - 'legend.fontsize': 8, - 'figure.figsize': (6.5, 3.5), - 'savefig.dpi': 300 + "text.usetex": True, + "font.family": [fontfamily], + "font.serif": ["Utopia", "Palantino"], + "font.sans-serif": ["Helvetica", "Arial"], + "lines.linewidth": 0.5, + "patch.linewidth": 0.5, + "text.latex.preamble": preamble, + "axes.linewidth": 0.5, + "axes.grid": True, + "axes.titlesize": 12, + "axes.labelsize": 10, + "xtick.labelsize": 10, + "xtick.direction": "out", + "ytick.labelsize": 10, + "ytick.direction": "out", + "grid.linewidth": 0.5, + "legend.fancybox": True, + "legend.numpoints": 1, + "legend.fontsize": 8, + "figure.figsize": (6.5, 3.5), + "savefig.dpi": 300, } matplotlib.rcParams.update(style_dict) @@ -488,15 +520,17 @@ def compile(self, texdoc, clean=False): if helpers.checkdep_tex() is not None: # use ``pdflatex`` to compile the document - tex = subprocess.call(['pdflatex', texdoc, '--quiet'], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - shell=False) + tex = subprocess.call( + ["pdflatex", texdoc, "--quiet"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=False, + ) if clean: - extensions = ['aux', 'log', 'nav', 'out', 'snm', 'toc'] + extensions = ["aux", "log", "nav", "out", "snm", "toc"] for ext in extensions: - junkfiles = glob.glob('*.{}'.format(ext)) + junkfiles = glob.glob("*.{}".format(ext)) for junk in junkfiles: os.remove(junk) diff --git a/setup.cfg b/setup.cfg index fc22859..a6d1f77 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,6 +5,7 @@ description-file = readme.md pep8ignore = E501 E131 + W503 check_pybmpdb.py ALL pybmpdb/examples/* ALL pybmpdb/tests/* E241 E201 diff --git a/setup.py b/setup.py index b601ad9..bc5b7ac 100644 --- a/setup.py +++ b/setup.py @@ -7,10 +7,7 @@ def getDataFiles(folder): - files = [d for d in map( - lambda x: os.path.join(folder, x), - os.listdir(folder) - )] + files = [d for d in map(lambda x: os.path.join(folder, x), os.listdir(folder))] return files @@ -31,14 +28,23 @@ def getDataFiles(folder): "Programming Language :: Python", "Intended Audience :: Science/Research", "Topic :: Software Development :: Libraries :: Python Modules", - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", +] +INSTALL_REQUIRES = [ + "wqio", + "numpy", + "matplotlib", + "pandas", + "statsmodels", + "openpyxl", + "seaborn", + "engarde", ] -INSTALL_REQUIRES = ['wqio', 'numpy', 'matplotlib', 'pandas', 'statsmodels', 'openpyxl', 'seaborn', 'engarde'] PACKAGE_DATA = { - 'pybmpdb.data': ['*.csv', '*.sql'], - 'pybmpdb.tests._data': ['bmpdata*'], - 'pybmpdb.tex': ['*.tex'], + "pybmpdb.data": ["*.csv", "*.sql"], + "pybmpdb.tests._data": ["bmpdata*"], + "pybmpdb.tex": ["*.tex"], } From a38bef7cb5992b0286e6482b4eef315759e5eb40 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 14:10:25 -0800 Subject: [PATCH 38/48] rename/clarify some columns --- pybmpdb/bmpdb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 5f2fa0d..1ddd02d 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -453,9 +453,9 @@ def _clean_raw_data(raw_df, nd_correction=2): "units", "parameter", "fraction", - "initialscreen", - "wqscreen", - "catscreen", + "wq_initialscreen", + "ms_indivscreen", + "wq_catscreen", "bmptype", "ws_id", "site_id", @@ -482,9 +482,9 @@ def _clean_raw_data(raw_df, nd_correction=2): * _handle_ND_factors(df, nd_correction=nd_correction) ) .assign(qual=lambda df: _handle_ND_qualifiers(df)) - .assign(initialscreen=lambda df: _process_screening(df, "initialscreen")) - .assign(wqscreen=lambda df: _process_screening(df, "wqscreen")) - .assign(catscreen=lambda df: _process_screening(df, "catscreen")) + .assign(wq_initialscreen=lambda df: _process_screening(df, "wq_initialscreen")) + .assign(ms_indivscreen=lambda df: _process_screening(df, "ms_indivscreen")) + .assign(wq_catscreen=lambda df: _process_screening(df, "wq_catscreen")) .assign(station=lambda df: df["station"].str.lower()) .assign(sampletype=lambda df: _process_sampletype(df, "sampletype")) .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) From 970146fbff12a1b538e199ccc9a5f465450eb58a Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 14:10:48 -0800 Subject: [PATCH 39/48] properly pass params to functions --- pybmpdb/bmpdb.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index 1ddd02d..cc9827c 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -681,11 +681,11 @@ def load_data( return bmp return wqio.DataCollection( bmp, - rescol="res", - qualcol="qual", - ndval=["ND"], - stationcol="station", - paramcol="parameter", + rescol=rescol, + qualcol=qualcol, + ndval=ndval, + stationcol=stationcol, + paramcol=paramcol, othergroups=othergroups, pairgroups=pairgroups, **dc_kwargs From 7f76647d7c9618f855be4078c6ebf5ed11c326a2 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 14:13:52 -0800 Subject: [PATCH 40/48] ignore coverage report --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8a4e4b9..ecf022e 100644 --- a/.gitignore +++ b/.gitignore @@ -72,6 +72,7 @@ pybmpdb/*/tests/*.xlsx pybmpdb.egg-info/* result_images/* .pytest_cache +cov.xml # scratch files # ################# @@ -94,4 +95,4 @@ coversheets # docs # ######## -examples/* \ No newline at end of file +examples/* From 09aae1f126c6a8c9d96310e7e8108969c0a570b2 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 14:14:03 -0800 Subject: [PATCH 41/48] remove pep8 check --- pybmpdb/tests/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pybmpdb/tests/__init__.py b/pybmpdb/tests/__init__.py index 1cdf61e..a33e1be 100644 --- a/pybmpdb/tests/__init__.py +++ b/pybmpdb/tests/__init__.py @@ -18,7 +18,7 @@ def test(*args): @requires(pytest, "pytest") def teststrict(*args): - options = ["--pep8", "--doctest-modules", *list(args)] + options = ["--doctest-modules", *list(args)] return test(*list(set(options))) From 672f53b3f29059e23662423753d53d13b76656b3 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 14:24:15 -0800 Subject: [PATCH 42/48] clean stray key strokes [ci skip] --- pybmpdb/bmpdb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index cc9827c..f4ad48b 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -103,9 +103,9 @@ def _handle_ND_qualifiers(df, qualcol="qual", rescol="res", dlcol="DL", quals=No -------- _handle_ND_factors - , nd Notes + Notes ----- - Same basic premise as _handle_ND_factors, b, ndut different qualifiers count + Same basic premise as _handle_ND_factors, but different qualifiers count as ND compared to what we used to determine the ND-scaling factors. """ From 5ef9f45e9e09a437a60a59390fdbf3e59891fe78 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 15 Jan 2020 17:29:49 -0800 Subject: [PATCH 43/48] update data prep steps [ci skip] --- readme.md | 212 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 155 insertions(+), 57 deletions(-) diff --git a/readme.md b/readme.md index f85f966..f4456fd 100644 --- a/readme.md +++ b/readme.md @@ -5,60 +5,158 @@ ## Data preparation -The data file provided with this package is, for all intents and purposes, "unprepared". -To load and prepare the data according to the procedure employed in the official analyses, use the `pybmp.summary.getSummaryData` function. - -In short, `pybmp.prepare_data` does the following: - - 1. Fill null result qualifiers with the "detected" qualifier ("=") - 1. Strip leaading and trailing whitespace from the remaining result qualifers - 1. Correct non-detect results to be 100% of the detection limit - 1. Normalize values in the `initialscreen`, `wqscreen`, and `catscreen` columns to either 'yes', 'no', or 'unknown' - 1. Make values in the `station` column to all lower case - 1. Normalize the `sampletype` column to either 'grab', 'composite', or 'unknown' - 1. Clean up the sample dates and times - 1. Makes of the pollutant names and fractions (e.g., dissolved, total) lower case - 1. Remove "Biofilter - " from "Biofileter - Grass Strip" and "Biofilter - Grass Swale" - 1. Assign the final `units` column as the preferred unit for each analyter per [the parameters dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_parameters.py) - 1. Normalize the results based on their original units and final units per the [the units dictionary](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_units.py) - 1. Remove duplicate values by selecting the mean result, most restrictive qualifier, and first sample date based the following index columns: - 1. 'category' - 1. 'epazone' - 1. 'state' - 1. 'site' - 1. 'bmp' - 1. 'station' - 1. 'storm' - 1. 'sampletype' - 1. 'watertype' - 1. 'paramgroup' - 1. 'units' - 1. 'parameter' - 1. 'fraction' - 1. 'initialscreen' - 1. 'wqscreen' - 1. 'catscreen' - 1. 'balanced' - 1. 'bmptype' - 1. 'pdf_id' - 1. 'ws_id' - 1. 'site_id' - 1. 'bmp_id' - -Then `pybmpdb.prep_for_summary` will: - - 1. Select RP and WB data, combine into RP/WB, append to main dataset - 1. Select NO3 and NO2+NO3 data, combine into NOx, append to main dataset - 1. Remove data with "unknown" as a sample type - 1. Select all data where sample type is "composite", set aside as the "final" dataset - 1. Select all grab data for WB & RP BMP categories and biological parameters, append to "final" dataset - 1. Rename "PF" BMPs to "Permeable Friction Course" - 1. Then with that final dataset, go through each event and: - 1. Select (prefer) composite samples when both composite and grab samples exist - 1. Fall back to subsurface samples if an outflow sample is not available (reclassify as outflow) - 1. Fall back to reference samples in an inflow sample is not available (reclassify as inflow) - 1. Group by site ID, bmp ID, parameter, monitoring station and remove groups with fewer than 3 samples - 1. Group by bmp category, parameter, monitoring station and remove groups with fewer than 3 unique BMP IDs - 1. Pivot the monitoring stations into columns - 1. Group by site ID, bmp ID, parameter, & bmp category. - 1. Finally, remove all groups that are missing either outflow or inflow data entirely. +### Intitial Prep + +The data are prepared for the BMP Database in the following ways: + +1. Fetch Site data from the DOT Sites endpoint (`/DOTSites`), rename columns (see column mapping section) +1. Fetch BMP Category data from the BMP Code endpoint `(/vBMPCodes)`, rename columns (see column mapping section) +1. Fetch WQ data from the raw WQ Flat File endpoint (`/WQFlatFile`), rename columns (see column mapping section) +1. Select only WQ Data where the 'webscreen' column is "y" +1. Drop any rows with nulls in the "units" column (there should be 0 rows that meet this condition) +1. Fill nulls in the 'epazone' column with -99, convert column to an integer type +1. Convert the "storm" (event) column to an integer type +1. Create a "bmpcode" column that is equal to the "bmptype" column when the "_category" column is 'Manufactured Device', otherwise use the "_catcode" column +1. Join in the BMPCodes dataset on the "bmpcode" and "category" columns +1. Drop any rows with nulls in the "ws_id" columns (there should be 0 rows that meet this condition) +1. Pipe the resulting dataset to `pybmpdb._clean_raw_data, which does the following: + 1. Fills nulls in the "qual" column with '=' + 1. Drops rows with nulls in the "res" column + 1. Any leading or trailing whitespace from values in the "qual" column + 1. Standardizes values in the "wq_initialscreen" column to either 'y' or 'n' + 1. Standardizes values in the "ms_indivscreen" column to either 'y' or 'n' + 1. Standardizes values in the "wq_catscreen" column to either 'y' or 'n' + 1. Makes values in the "station" column fully lower case (e.g., 'Inflow' becomes 'inflow') + 1. Standardizes values in the "sampletype" column to either 'composite', 'grab', or 'unknown' + 1. Combines the "sampledate" and "sampletime" columns in a column called "sampledatetime" + 1. Normalize all results to the "preferred units" for each parameter ![See here for more info](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_parameters.py) + 1. Creates and fills a "fraction" column with either 'total' or 'dissolved' + 1. Filter out results where the "res" column is less than 0 (there should be 0 rows that meet this condition) + 1. Checks that none of the "header" columns have null values (header columns together should uniquely define each observation and are listed below) + 1. Group the dataset by the "header" column, compute the mean of the "res" column, minimum of the "qual" column, and minimum of the "sampledatetime" column + 1. Confirm that each row has a unique combination of the header columns +1. Pipe that dataframe to `pybmpdb._prepare_for_summary`, which does the following: + 1. Combines Wetland Basin and Retention Pond data into a serparate dataset where BMP category is shown as "Retention Pond/Wetland Basin" and appended to the main dataaset + 1. NO2+NO3 and NO3 datasets are combined (with preference given to NO2+NO3) and assigned a parameter called NOx + 1. Grab samples are removed from the dataset except for: + 1. Biological data at all BMP categories + 1. All parameter groups at Retention Pond, Wetland Basin, and Wetland Basin/Retention Pond BMPs +1. Then with that dataset, go through each event and: + 1. Select (prefer) composite samples when both composite and grab samples exist + 1. Fall back to subsurface samples if an outflow sample is not available (reclassify as outflow) + 1. Fall back to reference samples in an inflow sample is not available (reclassify as inflow) +1. Save the dataset in this state as the the "flat" (unpaired) dataset +1. Pivot the dataset such that the values "station" column nest with the "res" and "qual" columns. In effect, we now have: + 1. Half as many rows + 1. Two columns for "res" and "qual" at the inflow and outflow monitoring stations +1. Drop all rows where either the "res_inflow" or "res_outflow" column is null (i.e., dropped unpaired observations) +1. Save this dataset as the "paired" dataset + +These two dataset ("flat" and "paired") are merged with the Site data to include the DOT-related information then uploaded to the BMP Database as "WQRecords" and "WQPairs", respectively. + +### Final Prep + +Prior to the analysis for the main WQ and DOT summary report, the following steps are taken: + +1. The data are read in from the `/WQRecords` endpoint +1. Non-detect values reported at 0.5 * DL are converted to the full detection limit +1. A "paramunit" column is created and filled in the format: '{parameter} ({units})' +1. A "DOT_Activity" column is created from the existing "dot_type" column, replacing 'Not Applicable' values with 'Non-DOT' +1. Group by "site", "bmp", "paramunit", "station", "Is_DOT" columns and remove groups with fewer than 3 observed events (storms) +1. Group by "category", "paramunit", "station", "Is_DOT" acolumns nd remove groups with fewer than 3 unique BMP IDs +1. Select all rows with the specific parameters and BMP catgories to be included in the analysis. + +## Renaming column mappings + +### WQ Data + +
+ +* SiteID → site_id +* SiteName → site +* City → city +* State → state +* Country → country +* EPARainZone → epazone +* DOT_flag → dot_flag +* BMPID → bmp_id +* BMPName → bmp +* BMPCategory_Code → _catcode +* BMPCategory_Desc → _category +* BMPType → bmptype +* BMPType_Desc → bmpdesc +* MSID → ms_id +* MSName → ms +* MSType → station +* EventID → storm +* EventType → event_type +* DateSample → sampledate +* TimeSample → sampletime +* SampleMedia → watertype +* SampleType → sampletype +* WQID → wq_id +* WSID → ws_id +* ParameterName → parameter +* Value_SubHalfDL → res +* Value_Unit → units +* WQQualifier → qual +* DetectionLimit → DL +* InitialScreen_flag → wq_initialscreen +* CategoryAnalysisScreen_flag → _screenflag +* UseIndividualAnalysis_Flag → ms_indivscreen +* UseCateogoryAnalysis_Flag → _cat +* UseInCategoricalAnalysis → wq_catscreen +* UseInWebTool → webscreen +* DOT_ActivityType_flag → dot_type +* ParameterGroupCode → paramgroup + +
+ +### Site Data + +
+ +* SiteID → site_id +* DOT_AADT → aadt +* BMPID → bmp_id +* WSID → ws_id + +
+ +### BMP Codes + +
+ +* category_name → category +* category_code → bmpcode + +
+ +## Header Columns + +### WQ Data + +
+ +* category +* epazone +* state +* site +* bmp +* station +* storm +* sampletype +* watertype +* paramgroup +* units +* parameter +* fraction +* wq_initialscreen +* ms_indivscreen +* wq_catscreen +* bmptype +* ws_id +* site_id +* bmp_id + +
From 97e4c8a7925f3ba517f8320ae8fda15f4e4348e6 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 16 Jan 2020 09:23:52 -0800 Subject: [PATCH 44/48] Self-referential links in the README --- readme.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/readme.md b/readme.md index f4456fd..34e6f0a 100644 --- a/readme.md +++ b/readme.md @@ -9,9 +9,9 @@ The data are prepared for the BMP Database in the following ways: -1. Fetch Site data from the DOT Sites endpoint (`/DOTSites`), rename columns (see column mapping section) -1. Fetch BMP Category data from the BMP Code endpoint `(/vBMPCodes)`, rename columns (see column mapping section) -1. Fetch WQ data from the raw WQ Flat File endpoint (`/WQFlatFile`), rename columns (see column mapping section) +1. Fetch Site data from the DOT Sites endpoint (`/DOTSites`), rename columns(see column [mapping section](#site-data-column-map)) +1. Fetch BMP Category data from the BMP Code endpoint `(/vBMPCodes)`, rename columns (see column [mapping section](#bmp-codes-column-map)) +1. Fetch WQ data from the raw WQ Flat File endpoint (`/WQFlatFile`), rename columns (see column [mapping section](#wq-data-column-map)) 1. Select only WQ Data where the 'webscreen' column is "y" 1. Drop any rows with nulls in the "units" column (there should be 0 rows that meet this condition) 1. Fill nulls in the 'epazone' column with -99, convert column to an integer type @@ -32,7 +32,7 @@ The data are prepared for the BMP Database in the following ways: 1. Normalize all results to the "preferred units" for each parameter ![See here for more info](https://github.com/Geosyntec/pybmpdb/blob/master/pybmpdb/_parameters.py) 1. Creates and fills a "fraction" column with either 'total' or 'dissolved' 1. Filter out results where the "res" column is less than 0 (there should be 0 rows that meet this condition) - 1. Checks that none of the "header" columns have null values (header columns together should uniquely define each observation and are listed below) + 1. Checks that none of the "header" columns have null values (header columns together should uniquely define each observation and [are listed below](#wq-data-header-columns)) 1. Group the dataset by the "header" column, compute the mean of the "res" column, minimum of the "qual" column, and minimum of the "sampledatetime" column 1. Confirm that each row has a unique combination of the header columns 1. Pipe that dataframe to `pybmpdb._prepare_for_summary`, which does the following: @@ -68,7 +68,7 @@ Prior to the analysis for the main WQ and DOT summary report, the following step ## Renaming column mappings -### WQ Data +### WQ Data Column Map
@@ -112,7 +112,7 @@ Prior to the analysis for the main WQ and DOT summary report, the following step
-### Site Data +### Site Data Column Map
@@ -123,7 +123,7 @@ Prior to the analysis for the main WQ and DOT summary report, the following step
-### BMP Codes +### BMP Codes Column Map
@@ -134,7 +134,7 @@ Prior to the analysis for the main WQ and DOT summary report, the following step ## Header Columns -### WQ Data +### WQ Data Header Columns
From 78636fccc98535174eace88407f0bc5629157b0b Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Thu, 16 Jan 2020 13:26:34 -0800 Subject: [PATCH 45/48] correct name of raw endpoint --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 34e6f0a..846fd63 100644 --- a/readme.md +++ b/readme.md @@ -11,7 +11,7 @@ The data are prepared for the BMP Database in the following ways: 1. Fetch Site data from the DOT Sites endpoint (`/DOTSites`), rename columns(see column [mapping section](#site-data-column-map)) 1. Fetch BMP Category data from the BMP Code endpoint `(/vBMPCodes)`, rename columns (see column [mapping section](#bmp-codes-column-map)) -1. Fetch WQ data from the raw WQ Flat File endpoint (`/WQFlatFile`), rename columns (see column [mapping section](#wq-data-column-map)) +1. Fetch WQ data from the raw WQ Flat File endpoint (`/vWQRaw`), rename columns (see column [mapping section](#wq-data-column-map)) 1. Select only WQ Data where the 'webscreen' column is "y" 1. Drop any rows with nulls in the "units" column (there should be 0 rows that meet this condition) 1. Fill nulls in the 'epazone' column with -99, convert column to an integer type From 8a937f2fb78b8d76d6594f0eb71a95d18e902cb5 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Tue, 23 Feb 2021 17:30:44 -0800 Subject: [PATCH 46/48] basic summary reports --- pybmpdb/reports.py | 625 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 621 insertions(+), 4 deletions(-) diff --git a/pybmpdb/reports.py b/pybmpdb/reports.py index 5788f7a..a4b2a90 100644 --- a/pybmpdb/reports.py +++ b/pybmpdb/reports.py @@ -1,14 +1,626 @@ import os +from pathlib import Path +from datetime import datetime +from functools import partial +from math import ceil + +import pandas + +from reportlab.lib.pagesizes import letter, landscape +from reportlab.platypus import ( + SimpleDocTemplate, + Paragraph, + Image, + Table, + PageBreak, + Spacer, +) +from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle +from reportlab.lib.enums import TA_CENTER, TA_LEFT +from reportlab.lib.units import inch +from reportlab.lib import colors +from reportlab.pdfgen import canvas from pybmpdb import summary +from wqio.utils import sigFigs, no_op +TODAY = datetime.today().strftime("%Y-%m-%d") +STYLES = getSampleStyleSheet() +BASEURL = "https://dot-portal-app.azurewebsites.net/api" -def test_run(): - report = Report() - report.makeInputFiles(report.std_tables) +_FOOTERSTYLE = STYLES["Normal"].clone("footer") +_FOOTERSTYLE.fontName = "Helvetica" +_FOOTERSTYLE.fontSize = 8 +_FOOTERSTYLE.alignment = TA_CENTER + +_HEADERSTYLE = STYLES["Heading1"].clone("header") +_HEADERSTYLE.fontName = "Helvetica-Bold" +_HEADERSTYLE.fontSize = 16 +_HEADERSTYLE.alignment = TA_CENTER + + +def _table_float(x): + if pandas.isnull(x): + return "N/A" + return sigFigs(x, 3, tex=False, pval=False, forceint=False) + + +def _table_int(x): + if pandas.isnull(x): + return "N/A" + return str(int(x)) + + +def _table_string(x): + if pandas.isnull(x): + return "N/A" + return str(x) + + +def _table_date(d): + if pandas.isnull(d): + return "N/A" + else: + return pandas.to_datetime(d).strftime("%Y-%m-%d") + + +def _table_cost(x): + if pandas.isnull(x): + return "N/A" + else: + return "${:,d}".format(int(x)) + + +def _paragraph(text): + styleN = STYLES["BodyText"] + styleN.alignment = TA_LEFT + styleN.leading = 9 + return Paragraph(f"{text}", styleN) + + +class NumberedCanvas(canvas.Canvas): + def __init__(self, *args, **kwargs): + canvas.Canvas.__init__(self, *args, **kwargs) + self._saved_page_states = [] + + def showPage(self): + self._saved_page_states.append(dict(self.__dict__)) + self._startPage() + + def save(self): + """add page info to each page (page x of y)""" + num_pages = len(self._saved_page_states) + for state in self._saved_page_states: + self.__dict__.update(state) + self.setFont(_FOOTERSTYLE.fontName, _FOOTERSTYLE.fontSize) + self.draw_page_number(num_pages) + canvas.Canvas.showPage(self) + canvas.Canvas.save(self) + + def draw_page_number(self, page_count): + # Change the position of this to wherever you want the page number to be + self.drawRightString( + 10.5 * inch, 0.35 * inch, f"Page {self._pageNumber} of {page_count}" + ) + # self.drawCentredString(6.5 * inch, 0.5 * inch, "Test centred") + self.drawString(0.5 * inch, 0.35 * inch, f"Generated: {TODAY}") + + +def get_sites_info(): + return pandas.read_json(BASEURL + "/DOTSites", dtype={"PDFID": str}).sort_values( + by=["PDFID"] + ) + + +def get_bmp_info(pdfid, sites): + dtype = {"PDFID": str} + + # bmp design meta data + meta = ( + pandas.read_json( + BASEURL + f"/vBMPDesignMetas?pdf_id={pdfid}", + dtype=dtype, + ) + .merge(sites, on="PDFID", suffixes=("", "_ds"), how="left") + .loc[0, lambda df: df.columns.map(lambda c: not c.endswith("_ds"))] + ) + + # bmp design elements + elements = pandas.read_json( + BASEURL + f"/vBMPDesignElements?pdf_id={pdfid}", dtype=dtype + ) + + if elements.shape[0] == 0: + elements = None + + title = meta["BMPName"] + return meta, elements, title + + +def dot_table(meta): + dot_columns = { + "DOT_ActivityType_flag": ("Activity Type", _table_string), + "DOT_AADT": ("AADT", _table_int), + "DOT_Lane_Count": ("Lane Count", _table_string), + "DOT_HighwayConditions_Descr": ("Highway Conditions", _table_string), + "DOT_HighwayMaintenance_Descr": ("Highway Maintenance", _table_string), + "DOT_RoadType": ("Road Type", _table_string), + "DOT_Resurfacing_Descr": ("Resurfacing", _table_string), + "DOT_Shoulder_Descr": ("Shoulder", _table_string), + "DOT_WinterMaintenance_Descr": ("Winter Maintenance", _table_string), + "DOT_Conveyance_Descr": ("Conveyance", _table_string), + } + data = {value[0]: value[1](meta.get(key)) for key, value in dot_columns.items()} + + return pandas.Series(data).fillna("N/A").reset_index() + + +def watershed_table(meta): + watershed_names = { + "EPARainZone": ("EPA Rain Zone", _table_string), + "WSName": ("Watershed Name", _table_string), + "Type": ("Watershed Type", _table_string), + "Area": ("Total Watershed Area", _table_float), + "Area_unit": ("Area Unit", _table_string), + "AreaImpervious_pct": ("Percent Impervious", _table_float), + "NRCSSoilGroup": ("Soil Group", _table_string), + "Area_Descr": ("Watershed Description", _table_string), + "LandUse_Descr": ("Land Use Description", _table_string), + "Vegetation_Descr": ("Vegetation Description", _table_string), + } + data = {value[0]: value[1](meta.get(key)) for key, value in watershed_names.items()} + + return pandas.Series(data).fillna("N/A").reset_index() + + +def location_info_table(meta): + if not pandas.isnull(meta["ZipCode"]): + address = "{City}, {State} {ZipCode}, {Country}" + else: + address = "{City}, {State}, {Country}" + + data = { + "Description": meta.get("BMPType_Desc", "N/A"), + "Test Site": meta.get("SiteName", "N/A"), + "Location": address.format(**meta), + } + + return pandas.Series(data).fillna("N/A").reset_index() + + +def bmpinfo_table(meta): + data = { + "BMP Type": "{BMPCategory_Desc} ({BMPType})".format(**meta), + "BMP Category": meta["BMPCategory_Code"], + "Install Date": _table_date(meta["DateInstalled"]), + } + return pandas.Series(data).fillna("N/A").reset_index() + + +def cost_table(meta): + cost_names = {"CostYear": "Cost per year", "CostTotal": "Total Cost"} + + data = {value: _table_cost(meta.get(key)) for key, value in cost_names.items()} + return pandas.Series(data).fillna("N/A").reset_index() + + +def design_table(elements): + if elements is not None: + table = ( + elements.assign( + Value=lambda df: df["Value_Final"].combine_first(df["Narrative_Descr"]) + ) + .rename(columns={"DesignParameter_Final": "Design Parameter"}) + .reindex(columns=["Design Parameter", "Value"]) + ) + return table + + +def _make_table_from_df( + df, headers, style, datecols=None, dateformat=None, banded=True, col_widths=None +): + """Helper function to make a reportlab table from a dataframe + + Parameters + ---------- + df : pandas.DataFrame + Dataframe containing the data to be tabulated + headers : list of str + Column labels for the rendered table + style : list of tuples + List of reportlab-compatible table style tuples + banded : bool (default = True) + When true, every other row in the table will have a light grey + background. -class Report: + + """ + if datecols: + if not dateformat: + dateformat = "%Y-%m-%d" + df = df.assign(**{dc: df[dc].dt.strftime(dateformat) for dc in datecols}) + + if banded: + bands = [ + ("BACKGROUND", (0, row), (-1, row), colors.lightgrey) + for row in range(1, df.shape[0] + 1, 2) + ] + style = [*style, *bands] + + _data = df.astype(str).applymap(_paragraph).values.tolist() + table_values = [headers, *_data] + table = Table( + table_values, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths + ) + return table + + +def make_wshed_dot_table(wshed, dot, table_width): + data = pandas.concat([wshed, dot], axis="columns") + headers = ("Watershed Characteristics", "", "Transportation Characteristics", "") + style = [ + ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 + ("SPAN", (2, 0), (3, 0)), # header row, merge columns 3 and 4 + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # watershed header col is bold + ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # DOT header col is bold + ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold + ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold + ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered + ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned + ( + "ALIGN", + (1, 1), + (-1, -1), + "LEFT", + ), # all other cells are horizontally centered + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers + ( + "LINEAFTER", + (1, 0), + (1, -1), + 1, + colors.black, + ), # line between the two subtables + ] + col_widths = [table_width / len(headers)] * len(headers) + table = _make_table_from_df( + data, headers, style, banded=False, col_widths=col_widths + ) + return table + + +def make_bmp_info_table(loc, bmp, table_width): + data = pandas.concat([loc, bmp], axis="columns") + style = [ + ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # loc header col is bold + ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # bmp header col is bold + ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold + ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold + ("ALIGN", (0, 0), (-2, -1), "LEFT"), # first three cols are left-aligned + ("ALIGN", (-1, 0), (-1, -1), "RIGHT"), # last col is right-aligned + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ] + col_widths = [table_width * x for x in (0.10, 0.60, 0.15, 0.15)] + table = _make_table_from_df( + data, [""] * 4, style, banded=False, col_widths=col_widths + ) + return table + + +def make_cost_or_design_table(data, which, table_width, factor): + headers = (f"BMP {which} Informatiom", "") + style = [ + ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # header col is bold + ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold + ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered + ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned + ( + "ALIGN", + (1, 1), + (-1, -1), + "LEFT", + ), # all other cells are horizontally centered + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers + ] + col_widths = [factor * table_width, factor * table_width] + table = _make_table_from_df( + data, headers, style, banded=False, col_widths=col_widths + ) + return table + + +def make_design_table(design_elements, table_width): + if design_elements is None: + data = [("BMP Design Information",), ("No Design Information Available",)] + style = [ + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ( + "LINEBELOW", + (0, 0), + (-1, 0), + 1, + colors.black, + ), # line below column headers + ("ALIGN", (0, 0), (-1, -1), "CENTER"), # center everything + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ] + col_widths = [0.25 * table_width] + table = Table( + data, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths + ) + else: + nrows = design_elements.shape[0] + + if nrows < 10: + table = make_cost_or_design_table( + design_elements, "Design", table_width, 0.33 + ) + else: + half_rows = ceil(design_elements.shape[0] / 2) + table = make_wshed_dot_table( + design_elements.iloc[:half_rows].reset_index(drop=True), + design_elements.iloc[half_rows:].reset_index(drop=True), + table_width, + ) + data = pandas.concat( + [ + design_elements.iloc[:half_rows].reset_index(drop=True), + design_elements.iloc[half_rows:].reset_index(drop=True), + ], + axis="columns", + ).fillna("") + headers = ("BMP Design Information", "", "BMP Design Information", "") + style = [ + ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 + ("SPAN", (2, 0), (3, 0)), # header row, merge columns 3 and 4 + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ( + "FONTNAME", + (0, 0), + (0, -1), + "Helvetica-Bold", + ), # watershed header col is bold + ( + "FONTNAME", + (2, 0), + (2, -1), + "Helvetica-Bold", + ), # DOT header col is bold + ( + "FONTNAME", + (1, 1), + (1, -1), + "Helvetica", + ), # watershed data cells are not bold + ( + "FONTNAME", + (3, 1), + (3, -1), + "Helvetica", + ), # DOT data cells are not bold + ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered + ( + "ALIGN", + (0, 1), + (0, -1), + "LEFT", + ), # header col is horizontally left-aligned + ( + "ALIGN", + (1, 1), + (-1, -1), + "LEFT", + ), # all other cells are horizontally centered + ( + "VALIGN", + (0, 0), + (-1, -1), + "TOP", + ), # all cells are vertically centered + ( + "LINEBELOW", + (0, 0), + (-1, 0), + 1, + colors.black, + ), # line below column headers + ( + "LINEAFTER", + (1, 0), + (1, -1), + 1, + colors.black, + ), # line between the two subtables + ] + col_widths = [table_width / len(headers)] * len(headers) + table = _make_table_from_df( + data, headers, style, banded=False, col_widths=col_widths + ) + return table + + +def _header_footer(canvas, doc, filename, title): + # Save the state of our canvas so we can draw on it + canvas.saveState() + + # Header + title = Paragraph(f"BMP: {title}", _HEADERSTYLE) + w, h = title.wrap(doc.width, doc.topMargin) + title.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - 0.75 * inch) + + logo = Image("logo-notext.png") + logo.drawHeight *= 0.5 + logo.drawWidth *= 0.5 + logo.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - 1 * inch) + + # Footer + footer = Paragraph(filename, _FOOTERSTYLE) + w, h = footer.wrap(doc.width, doc.bottomMargin) + footer.drawOn(canvas, doc.leftMargin, 0.35 * inch) + + # Release the canvas + canvas.restoreState() + + +class _PDFReportMixin: + def build(self, doc, doc_elements): + doc.build( + doc_elements, + onFirstPage=partial( + _header_footer, filename=self.filename, title=self.title + ), + onLaterPages=partial( + _header_footer, filename=self.filename, title=self.title + ), + canvasmaker=NumberedCanvas, + ) + + def save(self, *folders): + for d in folders: + self.buffer.seek(0) + with Path(d, self.filename).open("wb") as out: + out.write(self.buffer.read()) + + +class BMPDescriptionReport(_PDFReportMixin): + def __init__(self, buffer, filename, meta, design_elements, title): + self.buffer = buffer + self.pagesize = landscape(letter) + self.width, self.height = self.pagesize + self.meta = meta + self.design_elements = design_elements + self.title = title + self.filename = filename + + def render(self): + margin = 0.5 * inch + doc = SimpleDocTemplate( + self.buffer, + rightMargin=margin, + leftMargin=margin, + topMargin=margin * 3, + bottomMargin=margin, + pagesize=self.pagesize, + ) + + # Our container for 'Flowable' objects + loc_bmp = make_bmp_info_table( + location_info_table(self.meta), + bmpinfo_table(self.meta), + table_width=self.width - 2 * doc.leftMargin, + ) + loc_bmp.wrap(*self.pagesize) + + wshed_dot = make_wshed_dot_table( + watershed_table(self.meta), + dot_table(self.meta), + table_width=self.width - 2 * doc.leftMargin, + ) + wshed_dot.wrap(*self.pagesize) + + cost = make_cost_or_design_table( + cost_table(self.meta), + "Cost", + table_width=self.width - 2 * doc.leftMargin, + factor=0.2, + ) + cost.wrap(*self.pagesize) + + design = make_design_table( + design_table(self.design_elements), self.width - 2 * doc.leftMargin + ) + design.wrap(*self.pagesize) + + doc_elements = [ + loc_bmp, + Spacer(self.width, 0.25 * inch), + wshed_dot, + Spacer(self.width, 0.25 * inch), + cost, + ] + if self.design_elements is None: + _spacer = Spacer(self.width, 0.25 * inch) + else: + _spacer = PageBreak() + + doc_elements.extend([_spacer, design]) + self.build(doc, doc_elements) + + +class BMPHydroReport(_PDFReportMixin): + def __init__(self, buffer, filename, meta, climate, precip, flow, title): + self.buffer = buffer + self.pagesize = letter + self.width, self.height = self.pagesize + self.meta = meta + self.climate = climate + self.precip = precip + self.flow = flow + self.title = title + self.filename = filename + + def render(self): + margin = 0.5 * inch + doc = SimpleDocTemplate( + self.buffer, + rightMargin=margin, + leftMargin=margin, + topMargin=margin * 3, + bottomMargin=margin, + pagesize=self.pagesize, + ) + + # Our container for 'Flowable' objects + loc_bmp = make_bmp_info_table( + location_info_table(self.meta), + bmpinfo_table(self.meta), + table_width=self.width - 2 * doc.leftMargin, + ) + loc_bmp.wrap(*self.pagesize) + + wshed_dot = make_wshed_dot_table( + watershed_table(self.meta), + dot_table(self.meta), + table_width=self.width - 2 * doc.leftMargin, + ) + wshed_dot.wrap(*self.pagesize) + + cost = make_cost_or_design_table( + cost_table(self.meta), + "Cost", + table_width=self.width - 2 * doc.leftMargin, + factor=0.2, + ) + cost.wrap(*self.pagesize) + + design = make_design_table( + design_table(self.design_elements), self.width - 2 * doc.leftMargin + ) + design.wrap(*self.pagesize) + + doc_elements = [ + loc_bmp, + Spacer(self.width, 0.25 * inch), + wshed_dot, + Spacer(self.width, 0.25 * inch), + cost, + ] + if self.design_elements is None: + _spacer = Spacer(self.width, 0.25 * inch) + else: + _spacer = PageBreak() + + doc_elements.extend([_spacer, design]) + self.build(doc, doc_elements) + + +class StatReport: def __init__(self): self.std_tables = ["bacteria", "metals"] self.std_docs = ["Bacteria", "Metals"] @@ -113,3 +725,8 @@ def fullSuite(self, tables, docs, version): self.makeReports(tables, docs) self.makeInputFiles(tables) self.compileReport(docs, version=version) + + +def test_run(): + report = StatReport() + report.makeInputFiles(report.std_tables) From 0bf9ba5a92814f9ce5f1a7388eb42a90e48cef99 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 7 Apr 2021 13:47:39 -0700 Subject: [PATCH 47/48] update dependencies + some linting --- .travis.yml | 2 +- pybmpdb/bmpdb.py | 90 ++++++++++++----------------------- pybmpdb/nsqd.py | 1 - pybmpdb/tests/test_bmpdb.py | 22 +++------ pybmpdb/tests/test_summary.py | 32 ++++--------- pybmpdb/tests/test_utils.py | 18 ++----- setup.py | 2 +- 7 files changed, 51 insertions(+), 116 deletions(-) diff --git a/.travis.yml b/.travis.yml index d38dba7..6f67b57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ before_install: install: - conda create --name=test python=$TRAVIS_PYTHON_VERSION nomkl --channel=conda-forge --yes - source activate test - - conda install numpy scipy pandas matplotlib statsmodels seaborn mpl-probscale engarde pytest pytest-cov pytest-mpl pytest-pep8 coverage docopt requests pyyaml tqdm --channel=conda-forge --yes + - conda install numpy scipy pandas matplotlib statsmodels seaborn mpl-probscale bulwark pytest pytest-cov pytest-mpl pytest-pep8 coverage docopt requests pyyaml tqdm --channel=conda-forge --yes - pip install git+https://github.com/Geosyntec/wqio.git - pip install codecov - pip install . --no-deps diff --git a/pybmpdb/bmpdb.py b/pybmpdb/bmpdb.py index f4ad48b..1cd4400 100644 --- a/pybmpdb/bmpdb.py +++ b/pybmpdb/bmpdb.py @@ -4,14 +4,9 @@ from functools import partial from pathlib import Path -try: - import pyodbc -except ImportError: - pyodbc = None - import numpy import pandas -from engarde import checks +from bulwark import checks from . import info, utils @@ -25,10 +20,8 @@ @wqio.utils.log_df_shape(_logger) -def _handle_ND_factors( - df, qualcol="qual", rescol="res", dlcol="DL", quals=None, nd_correction=2 -): - """ Determines the scaling factor to be applied to the water quality result +def _handle_ND_factors(df, qualcol="qual", rescol="res", dlcol="DL", quals=None, nd_correction=2): + """Determines the scaling factor to be applied to the water quality result based on the result qualifiers in the BMP Database. Parameters @@ -78,7 +71,7 @@ def _handle_ND_factors( @wqio.utils.log_df_shape(_logger) def _handle_ND_qualifiers(df, qualcol="qual", rescol="res", dlcol="DL", quals=None): - """ Determines final qualifier to be applied to the water quality result + """Determines final qualifier to be applied to the water quality result based on the result qualifiers in the BMP Database. Non-detects get "ND", detected values get "=". @@ -114,9 +107,7 @@ def _handle_ND_qualifiers(df, qualcol="qual", rescol="res", dlcol="DL", quals=No if not quals: quals.extend(["U", "UA", "UI", "UC", "UK", "K"]) - is_ND = df[qualcol].isin(quals) | ( - (df[qualcol] == "UJ") & (df[rescol] <= df[dlcol]) - ) + is_ND = df[qualcol].isin(quals) | ((df[qualcol] == "UJ") & (df[rescol] <= df[dlcol])) return numpy.where(is_ND, "ND", "=") @@ -131,8 +122,7 @@ def _process_screening(df, screencol): def _process_sampletype(df, sampletype): grab = [df[sampletype].str.lower().str.contains("grab"), "grab"] composite = [ - df[sampletype].str.lower().str.contains("emc") - | df[sampletype].str.lower().str.contains("comp"), + df[sampletype].str.lower().str.contains("emc") | df[sampletype].str.lower().str.contains("comp"), "composite", ] return wqio.utils.selector("unknown", grab, composite) @@ -167,7 +157,7 @@ def transform_parameters( indexMods=None, paramlevel="parameter", ): - """ Apply an arbitrary transformation to a parameter in the data + """Apply an arbitrary transformation to a parameter in the data Parameters ---------- @@ -215,14 +205,10 @@ def transform_parameters( # add the units into indexMod, apply all changes indexMods["units"] = newunits for levelname, value in indexMods.items(): - transformed = wqio.utils.redefine_index_level( - transformed, levelname, value, criteria=None, dropold=True - ) + transformed = wqio.utils.redefine_index_level(transformed, levelname, value, criteria=None, dropold=True) # return the *full* dataset (preserving original params) - result = pandas.concat( - [df.reset_index(), transformed.reset_index()], sort=False - ).set_index(index_name_cache) + result = pandas.concat([df.reset_index(), transformed.reset_index()], sort=False).set_index(index_name_cache) return result @@ -291,14 +277,10 @@ def _pick_best_sampletype(df): orig_cols = df.columns xtab = df.pipe(utils.refresh_index).unstack(level="sampletype") for col in orig_cols: - grabvalues = numpy.where( - xtab[(col, "composite")].isnull(), xtab[(col, "grab")], numpy.nan - ) + grabvalues = numpy.where(xtab[(col, "composite")].isnull(), xtab[(col, "grab")], numpy.nan) xtab = wqio.utils.assign_multilevel_column(xtab, grabvalues, col, "grab") - data = xtab.loc[:, xtab.columns.map(lambda c: c[1] != "unknown")].stack( - level=["sampletype"] - ) + data = xtab.loc[:, xtab.columns.map(lambda c: c[1] != "unknown")].stack(level=["sampletype"]) return data @@ -331,9 +313,7 @@ def _filter_by_storm_count(df, minstorms): def _filter_by_BMP_count(df, minbmps): grouplevels = ["category", "parameter", "station"] - data = df.groupby(level=grouplevels).filter( - lambda g: g.index.get_level_values("bmp").unique().shape[0] >= minbmps - ) + data = df.groupby(level=grouplevels).filter(lambda g: g.index.get_level_values("bmp").unique().shape[0] >= minbmps) return data @@ -352,7 +332,7 @@ def _maybe_combine_WB_RP(df, combine_WB_RP, catlevel="category"): dropold=False, criteria=lambda row: row[level_pos] in wbrp_indiv, ).pipe( - checks.verify_any, + checks.custom_check, lambda df: df.index.get_level_values(catlevel) == wbrp_combo, ) else: @@ -376,9 +356,7 @@ def _maybe_combine_nox( ] nitro_combined = "Nitrogen, NOx as N" - picker = partial( - _pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1] - ) + picker = partial(_pick_non_null, preferred=nitro_components[0], secondary=nitro_components[1]) return transform_parameters( df, @@ -388,7 +366,7 @@ def _maybe_combine_nox( partial(picker, maincol=rescol), partial(picker, maincol=qualcol), ).pipe( - checks.verify_any, + checks.custom_check, lambda df: df.index.get_level_values(paramlevel) == nitro_combined, ) else: @@ -406,7 +384,7 @@ def _maybe_fix_PFCs(df, fix_PFCs, catlevel="category", typelevel="bmptype"): PFC, dropold=True, criteria=lambda row: row[type_level_pos] == "PF", - ).pipe(checks.verify_any, lambda df: df.index.get_level_values(catlevel) == PFC) + ).pipe(checks.custom_check, lambda df: df.index.get_level_values(catlevel) == PFC) else: return df @@ -465,10 +443,7 @@ def _clean_raw_data(raw_df, nd_correction=2): units_norm = {u["unicode"]: info.getNormalization(u["name"]) for u in info.units} - target_units = { - p["name"].lower(): info.getUnitsFromParam(p["name"], attr="unicode") - for p in info.parameters - } + target_units = {p["name"].lower(): info.getUnitsFromParam(p["name"], attr="unicode") for p in info.parameters} expected_rows = raw_df.loc[:, "res"].groupby(lambda x: x > 0).count().loc[True] @@ -477,10 +452,7 @@ def _clean_raw_data(raw_df, nd_correction=2): raw_df.fillna({"qual": "="}) .dropna(subset=["res"]) .assign(qual=lambda df: df["qual"].str.strip()) - .assign( - res=lambda df: df["res"] - * _handle_ND_factors(df, nd_correction=nd_correction) - ) + .assign(res=lambda df: df["res"] * _handle_ND_factors(df, nd_correction=nd_correction)) .assign(qual=lambda df: _handle_ND_qualifiers(df)) .assign(wq_initialscreen=lambda df: _process_screening(df, "wq_initialscreen")) .assign(ms_indivscreen=lambda df: _process_screening(df, "ms_indivscreen")) @@ -488,15 +460,9 @@ def _clean_raw_data(raw_df, nd_correction=2): .assign(station=lambda df: df["station"].str.lower()) .assign(sampletype=lambda df: _process_sampletype(df, "sampletype")) .assign(sampledatetime=lambda df: df.apply(wqio.utils.makeTimestamp, axis=1)) - .assign( - units=lambda df: df["units"].map(lambda u: info.getUnits(u, attr="unicode")) - ) + .assign(units=lambda df: df["units"].map(lambda u: info.getUnits(u, attr="unicode"))) .assign(_parameter=lambda df: df["parameter"].str.lower().str.strip()) - .assign( - fraction=lambda df: numpy.where( - df["_parameter"].str.contains("dissolved"), "dissolved", "total" - ) - ) + .assign(fraction=lambda df: numpy.where(df["_parameter"].str.contains("dissolved"), "dissolved", "total")) .pipe( wqio.utils.normalize_units, units_norm, @@ -508,7 +474,13 @@ def _clean_raw_data(raw_df, nd_correction=2): ) .drop(drop_columns, axis=1) .query("res > 0") - .pipe(checks.none_missing, columns=_row_headers) + .pipe( + checks.multi_check, + [ + lambda df: checks.has_no_nans(df, columns=_row_headers), + lambda df: checks.has_no_nones(df, columns=_row_headers), + ], + ) .groupby(by=_row_headers) .agg({"res": "mean", "qual": "min", "sampledatetime": "min"}) .set_index("sampledatetime", append=True) @@ -531,7 +503,7 @@ def _prepare_for_summary( excluded_bmps=None, excluded_params=None, ): - """ Prepare data for categorical summaries + """Prepare data for categorical summaries Parameter --------- @@ -604,7 +576,7 @@ def load_data( as_dataframe=False, **dc_kwargs ): - """ Prepare data for categorical summaries + """Prepare data for categorical summaries Parameter --------- @@ -652,9 +624,7 @@ def load_data( """ othergroups = dc_kwargs.pop("othergroups", ["category", "units"]) - pairgroups = dc_kwargs.pop( - "pairgroups", ["category", "units", "bmp_id", "site_id", "storm"] - ) + pairgroups = dc_kwargs.pop("pairgroups", ["category", "units", "bmp_id", "site_id", "storm"]) rescol = dc_kwargs.pop("rescol", "res") qualcol = dc_kwargs.pop("qualcol", "qual") ndval = dc_kwargs.pop("ndval", ["ND", "<"]) diff --git a/pybmpdb/nsqd.py b/pybmpdb/nsqd.py index d2f2096..1d79c92 100644 --- a/pybmpdb/nsqd.py +++ b/pybmpdb/nsqd.py @@ -1,7 +1,6 @@ from pathlib import Path import pandas -from engarde import checks import wqio diff --git a/pybmpdb/tests/test_bmpdb.py b/pybmpdb/tests/test_bmpdb.py index 28a49a5..53b7c60 100644 --- a/pybmpdb/tests/test_bmpdb.py +++ b/pybmpdb/tests/test_bmpdb.py @@ -9,7 +9,7 @@ from unittest.mock import patch import pytest import numpy.testing as nptest -import pandas.util.testing as pdtest +import pandas.testing as pdtest import numpy import pandas @@ -61,9 +61,7 @@ def test__process_screening(): def test__process_sampletype(): - df = pandas.DataFrame( - {"sampletype": ["SRL GraB asdf", "SeL cOMPositE df", "jeL LSDR as"]} - ) + df = pandas.DataFrame({"sampletype": ["SRL GraB asdf", "SeL cOMPositE df", "jeL LSDR as"]}) expected = numpy.array(["grab", "composite", "unknown"]) result = bmpdb._process_sampletype(df, "sampletype") nptest.assert_array_equal(result, expected) @@ -79,9 +77,7 @@ def test__check_levelnames(): @patch.object(pandas, "read_csv") def test_load_data(read_csv): bmpdb.load_data("bmp.csv") - read_csv.assert_called_once_with( - Path("bmp.csv"), parse_dates=["sampledate"], encoding="utf-8" - ) + read_csv.assert_called_once_with(Path("bmp.csv"), parse_dates=["sampledate"], encoding="utf-8") @pytest.mark.skipif(True, reason="test not ready") @@ -160,9 +156,7 @@ def test_transform_parameters(): ) def test_summary_filter_functions(fxn, args, index_cols, infilename, outfilename): input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) - expected_df = pandas.read_csv( - get_data_file(outfilename), index_col=index_cols - ).sort_index() + expected_df = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() test_df = fxn(input_df, *args).sort_index() pdtest.assert_frame_equal(expected_df.reset_index(), test_df.reset_index()) @@ -208,9 +202,7 @@ def test__maybe_filter_functions(fxn, doit, index_cols, infilename, outfilename) input_df = pandas.read_csv(get_data_file(infilename), index_col=index_cols) result = fxn(input_df, doit).sort_index() if doit: - expected = pandas.read_csv( - get_data_file(outfilename), index_col=index_cols - ).sort_index() + expected = pandas.read_csv(get_data_file(outfilename), index_col=index_cols).sort_index() else: expected = input_df.copy().sort_index() pdtest.assert_frame_equal(result, expected) @@ -229,9 +221,7 @@ def test__pick_non_null(): def test_paired_qual(): - df = pandas.DataFrame( - {"in_qual": ["=", "=", "ND", "ND"], "out_qual": ["=", "ND", "=", "ND"]} - ) + df = pandas.DataFrame({"in_qual": ["=", "=", "ND", "ND"], "out_qual": ["=", "ND", "=", "ND"]}) expected = ["Pair", "Effluent ND", "Influent ND", "Both ND"] result = bmpdb.paired_qual(df, "in_qual", "out_qual") nptest.assert_array_equal(result, expected) diff --git a/pybmpdb/tests/test_summary.py b/pybmpdb/tests/test_summary.py index 2ffcba0..67262fb 100644 --- a/pybmpdb/tests/test_summary.py +++ b/pybmpdb/tests/test_summary.py @@ -7,17 +7,13 @@ from unittest import mock import pytest -import numpy.testing as nptest -import pandas.util.testing as pdtest + from wqio.tests import helpers import numpy from matplotlib import pyplot -import pandas -from engarde import checks -import wqio -from pybmpdb import summary, utils, bmpdb +from pybmpdb import summary mock_figure = mock.Mock(spec=pyplot.Figure) @@ -201,9 +197,7 @@ def test_DatasetSummary__tex_table_row_advanced(dset_sum): \toprule Mean CI & NA & NA \\""", } - result_row = dset_sum._tex_table_row( - "Mean CI", "mean_conf_interval", rule="top", twoval=True, ci=True, sigfigs=2 - ) + result_row = dset_sum._tex_table_row("Mean CI", "mean_conf_interval", rule="top", twoval=True, ci=True, sigfigs=2) assert result_row == expected[dset_sum.ds.scenario] @@ -461,9 +455,7 @@ def cat_sum(): (False, False), (False, True), ] - cs = summary.CategoricalSummary( - [mock_dataset(*inc) for inc in includes], "Metals", "basepath", "testfigpath" - ) + cs = summary.CategoricalSummary([mock_dataset(*inc) for inc in includes], "Metals", "basepath", "testfigpath") return cs @@ -509,9 +501,7 @@ def test_CategoricalSummary__make_input_file_IO(cat_sum, expected_latext_content helpers.assert_bigstring_equal(input_string, expected_latext_content) -def test_CategoricalSummary__make_report_IO( - cat_sum, expected_latex_report, temp_template -): +def test_CategoricalSummary__make_report_IO(cat_sum, expected_latex_report, temp_template): with StringIO() as report, open(temp_template, "r") as template: cat_sum._make_report_IO(template, "testpath.tex", report, "test report title") helpers.assert_bigstring_equal(report.getvalue(), expected_latex_report) @@ -521,15 +511,9 @@ def test_CategoricalSummary_makeReport(cat_sum, expected_latex_report, temp_temp templatepath = get_tex_file("draft_template.tex") inputpath = get_tex_file("inputs_{}.tex".format(cat_sum.paramgroup.lower())) with TemporaryDirectory() as tmpdir: - reportpath = os.path.join( - tmpdir, "report_{}.tex".format(cat_sum.paramgroup.lower()) - ) - testpath = os.path.join( - tmpdir, "testpath.tex".format(cat_sum.paramgroup.lower()) - ) - cat_sum.makeReport( - temp_template, testpath, reportpath, "test report title", regenfigs=False - ) + reportpath = os.path.join(tmpdir, "report_{}.tex".format(cat_sum.paramgroup.lower())) + testpath = os.path.join(tmpdir, "testpath.tex".format(cat_sum.paramgroup.lower())) + cat_sum.makeReport(temp_template, testpath, reportpath, "test report title", regenfigs=False) with open(reportpath, "r") as rp: helpers.assert_bigstring_equal(rp.read(), expected_latex_report) diff --git a/pybmpdb/tests/test_utils.py b/pybmpdb/tests/test_utils.py index 376590e..f61da91 100644 --- a/pybmpdb/tests/test_utils.py +++ b/pybmpdb/tests/test_utils.py @@ -8,7 +8,7 @@ from unittest import mock import pytest -import pandas.util.testing as pdtest +import pandas.testing as pdtest from wqio.tests import helpers import numpy @@ -26,9 +26,7 @@ def test__sig_figs_helper(): def test_refresh_index(): idx = pandas.MultiIndex.from_product([list("ABC"), list("ABC")], names=["A", "B"]) - df = pandas.DataFrame( - index=idx, columns=list("abc"), data=numpy.arange(27).reshape(9, 3) - ) + df = pandas.DataFrame(index=idx, columns=list("abc"), data=numpy.arange(27).reshape(9, 3)) pdtest.assert_frame_equal(df, utils.refresh_index(df)) dfr = df.reset_index() @@ -36,9 +34,7 @@ def test_refresh_index(): def test_get_level_position(): - idx = pandas.MultiIndex.from_product( - [list("ABC"), ["cat", "dog", "fox", "deer"]], names=["forest", "animal"] - ) + idx = pandas.MultiIndex.from_product([list("ABC"), ["cat", "dog", "fox", "deer"]], names=["forest", "animal"]) df = pandas.DataFrame(index=idx, columns=list("abc")) assert utils.get_level_position(df, "animal") == 1 @@ -77,9 +73,7 @@ def test_csvToXlsx(inputpath): with mock.patch.object(pandas.DataFrame, "to_excel") as toxl: outputpath = resource_filename("pybmpdb.tests._data", "testtable_toXL.xlsx") utils.csvToXlsx(inputpath, outputpath) - toxl.assert_called_once_with( - outputpath, float_format=None, na_rep="--", index=False - ) + toxl.assert_called_once_with(outputpath, float_format=None, na_rep="--", index=False) def test_makeTexTable_normal(): @@ -221,9 +215,7 @@ def test_makeLongLandscapeTexTable(footnote, long_landscape_tables): "Y": {"a": -1.3477794473987552, "b": -1.1939220296611821}, } df = pandas.DataFrame.from_dict(dfdict) - result = utils.makeLongLandscapeTexTable( - df, "test caption", "label", footnotetext=footnote - ) + result = utils.makeLongLandscapeTexTable(df, "test caption", "label", footnotetext=footnote) expected = long_landscape_tables[footnote] helpers.assert_bigstring_equal(result, expected) diff --git a/setup.py b/setup.py index bc5b7ac..f88391c 100644 --- a/setup.py +++ b/setup.py @@ -39,7 +39,7 @@ def getDataFiles(folder): "statsmodels", "openpyxl", "seaborn", - "engarde", + "bulwark", ] PACKAGE_DATA = { "pybmpdb.data": ["*.csv", "*.sql"], From 29d8e8a6804d25cfcaef671cf04d7f17f6d74098 Mon Sep 17 00:00:00 2001 From: Paul Hobson Date: Wed, 7 Apr 2021 13:47:58 -0700 Subject: [PATCH 48/48] revamped reporting module --- pybmpdb/reports.py | 962 ++++++++++++++++++++++++++++----------------- 1 file changed, 596 insertions(+), 366 deletions(-) diff --git a/pybmpdb/reports.py b/pybmpdb/reports.py index a4b2a90..dd86647 100644 --- a/pybmpdb/reports.py +++ b/pybmpdb/reports.py @@ -1,9 +1,11 @@ import os +from io import BytesIO from pathlib import Path from datetime import datetime from functools import partial from math import ceil +import numpy import pandas from reportlab.lib.pagesizes import letter, landscape @@ -16,19 +18,22 @@ Spacer, ) from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle -from reportlab.lib.enums import TA_CENTER, TA_LEFT +from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT from reportlab.lib.units import inch from reportlab.lib import colors from reportlab.pdfgen import canvas +from matplotlib import pyplot, ticker, figure +import seaborn + from pybmpdb import summary -from wqio.utils import sigFigs, no_op +from wqio.utils import sigFigs +from wqio import validate, viz TODAY = datetime.today().strftime("%Y-%m-%d") STYLES = getSampleStyleSheet() BASEURL = "https://dot-portal-app.azurewebsites.net/api" - _FOOTERSTYLE = STYLES["Normal"].clone("footer") _FOOTERSTYLE.fontName = "Helvetica" _FOOTERSTYLE.fontSize = 8 @@ -37,7 +42,109 @@ _HEADERSTYLE = STYLES["Heading1"].clone("header") _HEADERSTYLE.fontName = "Helvetica-Bold" _HEADERSTYLE.fontSize = 16 -_HEADERSTYLE.alignment = TA_CENTER +_HEADERSTYLE.alignment = TA_RIGHT + +_pal = seaborn.color_palette("deep") +BLUE = _pal[0] +GREEN = _pal[2] + + +def _get_units(df, col): + if not df.empty: + all_units = df[col].unique().tolist() + if not len(all_units) == 1: + raise ValueError(f"lots of {col} ({all_units})") + else: + return all_units[0] + + +def precip_flow_plot(precip, volume, punit, vunit) -> figure.Figure: + # fig = pyplot.figure(figsize=(7, 5), dpi=300) + # pax = fig.add_axes([0.05, 0.65, 0.90, 0.30]) + # vax = fig.add_axes([0.05, 0.05, 0.90, 0.60], sharex=pax) + if not punit: + punit = "No Units" + if not vunit: + vunit = "No Units" + + fig, (pax, vax) = pyplot.subplots( + nrows=2, + ncols=1, + figsize=(7.5, 4.5), + dpi=300, + sharex=True, + gridspec_kw=dict(height_ratios=[1, 2.5], hspace=0.00), + ) + + pax.yaxis.set_label_position("right") + pax.yaxis.tick_right() + pax.invert_yaxis() + pax.xaxis.tick_top() + pax.set_ylabel(f"Precip. ({punit})", rotation=270, va="top", labelpad=10) + + vax.set_ylabel(f"Flow Volume ({vunit})") + + if not precip.empty: + pax.bar("date", "PrecipDepth_Value", color="0.425", data=precip) + else: + pax.annotate( + "No Data to show", + (0.5, 0.5), + (0, 0), + xycoords="axes fraction", + textcoords="offset points", + ha="center", + va="center", + ) + pax.yaxis.set_major_formatter(ticker.NullFormatter()) + pax.set_ylim(top=0) + + if not volume.empty: + vax.plot( + "date", + "Volume_Total", + marker="d", + linestyle="none", + label="Inflow", + color=BLUE, + data=volume.loc[volume["MSType"] == "Inflow"], + ) + + vax.plot( + "date", + "Volume_Total", + marker="s", + linestyle="none", + label="Outflow", + color=GREEN, + data=volume.loc[volume["MSType"] == "Outflow"], + ) + vax.yaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: f"{int(x):,d}")) + vax.legend(loc="best") + vax.set_ylim(bottom=0) + else: + vax.annotate( + "No Data to show", + (0.5, 0.5), + (0, 0), + xycoords="axes fraction", + textcoords="offset points", + ha="center", + va="center", + ) + vax.yaxis.set_major_formatter(ticker.NullFormatter()) + + if precip.empty and volume.empty: + pax.xaxis.set_major_formatter(ticker.NullFormatter()) + + seaborn.despine(ax=pax, left=False, right=False, top=False, bottom=True) + seaborn.despine(ax=vax, left=False, right=False, top=True, bottom=False) + + viz.rotateTickLabels(pax, -25, "x") + viz.rotateTickLabels(vax, 25, "x") + + fig.tight_layout() + return fig def _table_float(x): @@ -49,7 +156,7 @@ def _table_float(x): def _table_int(x): if pandas.isnull(x): return "N/A" - return str(int(x)) + return "{:,d}".format(int(x)) def _table_string(x): @@ -72,14 +179,32 @@ def _table_cost(x): return "${:,d}".format(int(x)) -def _paragraph(text): +def _table_paragraph(text): styleN = STYLES["BodyText"] styleN.alignment = TA_LEFT styleN.leading = 9 return Paragraph(f"{text}", styleN) -class NumberedCanvas(canvas.Canvas): +def _design_param_fmt(x): + if pandas.isnull(x): + return "N/A" + elif numpy.isreal(x): + if int(x) == x: + return _table_int(x) + else: + return _table_float(x) + else: + return _table_string(x) + + +def parse_dates(df): + if not df.empty: + return df.assign(date=lambda df: pandas.to_datetime(df["DateStart"])) + return df + + +class NumberedCanvasLandscape(canvas.Canvas): def __init__(self, *args, **kwargs): canvas.Canvas.__init__(self, *args, **kwargs) self._saved_page_states = [] @@ -100,17 +225,43 @@ def save(self): def draw_page_number(self, page_count): # Change the position of this to wherever you want the page number to be - self.drawRightString( - 10.5 * inch, 0.35 * inch, f"Page {self._pageNumber} of {page_count}" - ) + self.drawRightString(10.5 * inch, 0.35 * inch, f"Page {self._pageNumber} of {page_count}") + # self.drawCentredString(6.5 * inch, 0.5 * inch, "Test centred") + self.drawString(0.5 * inch, 0.35 * inch, f"Generated: {TODAY}") + + +class NumberedCanvasPortrait(NumberedCanvasLandscape): + def draw_page_number(self, page_count): + # Change the position of this to wherever you want the page number to be + self.drawRightString(8 * inch, 0.35 * inch, f"Page {self._pageNumber} of {page_count}") # self.drawCentredString(6.5 * inch, 0.5 * inch, "Test centred") self.drawString(0.5 * inch, 0.35 * inch, f"Generated: {TODAY}") +def get_api_data(endpoint): + return pandas.read_json(BASEURL + endpoint, dtype={"PDFID": str}).sort_values(by=["PDFID"]) + + def get_sites_info(): - return pandas.read_json(BASEURL + "/DOTSites", dtype={"PDFID": str}).sort_values( - by=["PDFID"] - ) + return pandas.read_json(BASEURL + "/DOTSites", dtype={"PDFID": str}).sort_values(by=["PDFID"]) + + +def get_climate_info(): + return pandas.read_json(BASEURL + "/vClimateRecords", dtype={"PDFID": str}).sort_values(by=["PDFID"]) + + +def get_hydro_info(pdfid, all_climate, all_precip, all_flow): + + # dtype = {"PDFID": str} + # flow = pandas.read_json(BASEURL + f"/vFlowRecords?pdf_id={pdfid}", dtype=dtype).pipe(parse_dates) + # precip = pandas.read_json(BASEURL + f"/vPrecipRecords?pdf_id={pdfid}", dtype=dtype).pipe(parse_dates) + selector = lambda df: df["PDFID"] == pdfid + c = all_climate.loc[selector] + p = all_precip.loc[selector] + f = all_flow.loc[selector] + assert c.shape[0] == 1 + + return c.iloc[0], p, f def get_bmp_info(pdfid, sites): @@ -127,9 +278,7 @@ def get_bmp_info(pdfid, sites): ) # bmp design elements - elements = pandas.read_json( - BASEURL + f"/vBMPDesignElements?pdf_id={pdfid}", dtype=dtype - ) + elements = pandas.read_json(BASEURL + f"/vBMPDesignElements?pdf_id={pdfid}", dtype=dtype) if elements.shape[0] == 0: elements = None @@ -138,88 +287,7 @@ def get_bmp_info(pdfid, sites): return meta, elements, title -def dot_table(meta): - dot_columns = { - "DOT_ActivityType_flag": ("Activity Type", _table_string), - "DOT_AADT": ("AADT", _table_int), - "DOT_Lane_Count": ("Lane Count", _table_string), - "DOT_HighwayConditions_Descr": ("Highway Conditions", _table_string), - "DOT_HighwayMaintenance_Descr": ("Highway Maintenance", _table_string), - "DOT_RoadType": ("Road Type", _table_string), - "DOT_Resurfacing_Descr": ("Resurfacing", _table_string), - "DOT_Shoulder_Descr": ("Shoulder", _table_string), - "DOT_WinterMaintenance_Descr": ("Winter Maintenance", _table_string), - "DOT_Conveyance_Descr": ("Conveyance", _table_string), - } - data = {value[0]: value[1](meta.get(key)) for key, value in dot_columns.items()} - - return pandas.Series(data).fillna("N/A").reset_index() - - -def watershed_table(meta): - watershed_names = { - "EPARainZone": ("EPA Rain Zone", _table_string), - "WSName": ("Watershed Name", _table_string), - "Type": ("Watershed Type", _table_string), - "Area": ("Total Watershed Area", _table_float), - "Area_unit": ("Area Unit", _table_string), - "AreaImpervious_pct": ("Percent Impervious", _table_float), - "NRCSSoilGroup": ("Soil Group", _table_string), - "Area_Descr": ("Watershed Description", _table_string), - "LandUse_Descr": ("Land Use Description", _table_string), - "Vegetation_Descr": ("Vegetation Description", _table_string), - } - data = {value[0]: value[1](meta.get(key)) for key, value in watershed_names.items()} - - return pandas.Series(data).fillna("N/A").reset_index() - - -def location_info_table(meta): - if not pandas.isnull(meta["ZipCode"]): - address = "{City}, {State} {ZipCode}, {Country}" - else: - address = "{City}, {State}, {Country}" - - data = { - "Description": meta.get("BMPType_Desc", "N/A"), - "Test Site": meta.get("SiteName", "N/A"), - "Location": address.format(**meta), - } - - return pandas.Series(data).fillna("N/A").reset_index() - - -def bmpinfo_table(meta): - data = { - "BMP Type": "{BMPCategory_Desc} ({BMPType})".format(**meta), - "BMP Category": meta["BMPCategory_Code"], - "Install Date": _table_date(meta["DateInstalled"]), - } - return pandas.Series(data).fillna("N/A").reset_index() - - -def cost_table(meta): - cost_names = {"CostYear": "Cost per year", "CostTotal": "Total Cost"} - - data = {value: _table_cost(meta.get(key)) for key, value in cost_names.items()} - return pandas.Series(data).fillna("N/A").reset_index() - - -def design_table(elements): - if elements is not None: - table = ( - elements.assign( - Value=lambda df: df["Value_Final"].combine_first(df["Narrative_Descr"]) - ) - .rename(columns={"DesignParameter_Final": "Design Parameter"}) - .reindex(columns=["Design Parameter", "Value"]) - ) - return table - - -def _make_table_from_df( - df, headers, style, datecols=None, dateformat=None, banded=True, col_widths=None -): +def _make_table_from_df(df, headers, style, datecols=None, dateformat=None, banded=True, col_widths=None, title=None): """Helper function to make a reportlab table from a dataframe Parameters @@ -233,7 +301,8 @@ def _make_table_from_df( banded : bool (default = True) When true, every other row in the table will have a light grey background. - + title : str, optional + If provided, inserts a single-valued row above the column headers """ if datecols: @@ -242,76 +311,79 @@ def _make_table_from_df( df = df.assign(**{dc: df[dc].dt.strftime(dateformat) for dc in datecols}) if banded: - bands = [ - ("BACKGROUND", (0, row), (-1, row), colors.lightgrey) - for row in range(1, df.shape[0] + 1, 2) - ] + bands = [("BACKGROUND", (0, row), (-1, row), colors.lightgrey) for row in range(1, df.shape[0] + 1, 2)] style = [*style, *bands] - _data = df.astype(str).applymap(_paragraph).values.tolist() - table_values = [headers, *_data] - table = Table( - table_values, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths - ) + _data = df.astype(str).applymap(_table_paragraph).values.tolist() + _headers = [_table_paragraph(h) for h in headers] + table_values = [_headers, *_data] + if title: + _blanks = ["" for _ in range(len(headers) - 1)] + _title = [title, *_blanks] + table_values = [_title, *table_values] + + table = Table(table_values, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths) return table -def make_wshed_dot_table(wshed, dot, table_width): - data = pandas.concat([wshed, dot], axis="columns") - headers = ("Watershed Characteristics", "", "Transportation Characteristics", "") - style = [ - ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 - ("SPAN", (2, 0), (3, 0)), # header row, merge columns 3 and 4 - ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold - ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # watershed header col is bold - ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # DOT header col is bold - ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold - ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold - ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered - ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned - ( - "ALIGN", - (1, 1), - (-1, -1), - "LEFT", - ), # all other cells are horizontally centered - ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered - ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers - ( - "LINEAFTER", - (1, 0), - (1, -1), - 1, - colors.black, - ), # line between the two subtables - ] - col_widths = [table_width / len(headers)] * len(headers) - table = _make_table_from_df( - data, headers, style, banded=False, col_widths=col_widths - ) +def two_tables_next_to_eachother(leftdata, rightdata, leftheader, rightheader, col_widths, styled=True): + # headers = ("Watershed Characteristics", "", "Transportation Characteristics", "") + # col_widths = [table_width / len(headers)] * len(headers) + data = pandas.concat([leftdata, rightdata], axis="columns").fillna("") + headers = (leftheader, "", rightheader, "") + if styled: + style = [ + ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 + ("SPAN", (2, 0), (3, 0)), # header row, merge columns 3 and 4 + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # watershed header col is bold + ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # DOT header col is bold + ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold + ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold + ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered + ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned + ("ALIGN", (1, 1), (-1, -1), "LEFT"), # all other cells are horizontally centered + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers + ("LINEAFTER", (1, 0), (1, -1), 1, colors.black), # line btwn the two subtables + ] + else: + style = [ + ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # loc header col is bold + ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # bmp header col is bold + ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold + ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold + ("ALIGN", (0, 0), (-2, -1), "LEFT"), # first three cols are left-aligned + ("ALIGN", (-1, 0), (-1, -1), "RIGHT"), # last col is right-aligned + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ] + table = _make_table_from_df(data, headers, style, banded=False, col_widths=col_widths) return table -def make_bmp_info_table(loc, bmp, table_width): - data = pandas.concat([loc, bmp], axis="columns") +def normal_table(data, title, col_widths): style = [ - ("FONTNAME", (0, 0), (0, -1), "Helvetica-Bold"), # loc header col is bold - ("FONTNAME", (2, 0), (2, -1), "Helvetica-Bold"), # bmp header col is bold - ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold - ("FONTNAME", (3, 1), (3, -1), "Helvetica"), # DOT data cells are not bold - ("ALIGN", (0, 0), (-2, -1), "LEFT"), # first three cols are left-aligned - ("ALIGN", (-1, 0), (-1, -1), "RIGHT"), # last col is right-aligned + ("SPAN", (0, 0), (-1, 0)), # header row, merge all columns 1 and 2 + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # title row is bold + ("FONTNAME", (0, 1), (-1, 1), "Helvetica-Bold"), + # ("BACKGROUND", (0, 1), (-1, 1), colors.lightblue), + # ("FONTNAME", (0, 1), (-1, 1), "Helvetica-Bold"), # header row is bold + # ("FONTNAME", (0, 2), (0, -1), "Helvetica-Bold"), # header col is bold + # ("FONTNAME", (1, 2), (1, -1), "Helvetica"), # watershed data cells are not bold + ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered + ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned + ("ALIGN", (1, 1), (-1, -1), "LEFT"), # all other cells are left-aligned ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + # ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column title + ("LINEBELOW", (0, 1), (-1, 1), 1, colors.black), # line below column headers ] - col_widths = [table_width * x for x in (0.10, 0.60, 0.15, 0.15)] - table = _make_table_from_df( - data, [""] * 4, style, banded=False, col_widths=col_widths - ) + table = _make_table_from_df(data, data.columns.tolist(), style, banded=False, col_widths=col_widths, title=title) return table -def make_cost_or_design_table(data, which, table_width, factor): - headers = (f"BMP {which} Informatiom", "") +def single_table(data, header, col_widths): + # headers = (f"BMP {which} Informatiom", "") + headers = (header, "") style = [ ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold @@ -319,128 +391,46 @@ def make_cost_or_design_table(data, which, table_width, factor): ("FONTNAME", (1, 1), (1, -1), "Helvetica"), # watershed data cells are not bold ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered ("ALIGN", (0, 1), (0, -1), "LEFT"), # header col is horizontally left-aligned - ( - "ALIGN", - (1, 1), - (-1, -1), - "LEFT", - ), # all other cells are horizontally centered + ("ALIGN", (1, 1), (-1, -1), "LEFT"), # all other cells are left-aligned ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers ] - col_widths = [factor * table_width, factor * table_width] - table = _make_table_from_df( - data, headers, style, banded=False, col_widths=col_widths - ) + table = _make_table_from_df(data, headers, style, banded=False, col_widths=col_widths) + return table + + +def no_info_table(header, col_width, msg): + data = [(header,), (msg,)] + style = [ + ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold + ("LINEBELOW", (0, 0), (-1, 0), 1, colors.black), # line below column headers + ("ALIGN", (0, 0), (-1, -1), "CENTER"), # center everything + ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered + ] + col_widths = validate.at_least_empty_list(col_width) + table = Table(data, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths) return table def make_design_table(design_elements, table_width): + header = "BMP Design Information" if design_elements is None: - data = [("BMP Design Information",), ("No Design Information Available",)] - style = [ - ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold - ( - "LINEBELOW", - (0, 0), - (-1, 0), - 1, - colors.black, - ), # line below column headers - ("ALIGN", (0, 0), (-1, -1), "CENTER"), # center everything - ("VALIGN", (0, 0), (-1, -1), "TOP"), # all cells are vertically centered - ] - col_widths = [0.25 * table_width] - table = Table( - data, repeatRows=1, repeatCols=1, style=style, colWidths=col_widths - ) + table = no_info_table(header, 0.25 * table_width, "No Design Information Available") else: nrows = design_elements.shape[0] - if nrows < 10: - table = make_cost_or_design_table( - design_elements, "Design", table_width, 0.33 - ) + col_widths = [table_width * 0.33] * 2 + table = single_table(design_elements, header, col_widths) else: half_rows = ceil(design_elements.shape[0] / 2) - table = make_wshed_dot_table( + col_widths = [table_width * 0.25] * 4 + table = two_tables_next_to_eachother( design_elements.iloc[:half_rows].reset_index(drop=True), design_elements.iloc[half_rows:].reset_index(drop=True), - table_width, - ) - data = pandas.concat( - [ - design_elements.iloc[:half_rows].reset_index(drop=True), - design_elements.iloc[half_rows:].reset_index(drop=True), - ], - axis="columns", - ).fillna("") - headers = ("BMP Design Information", "", "BMP Design Information", "") - style = [ - ("SPAN", (0, 0), (1, 0)), # header row, merge columns 1 and 2 - ("SPAN", (2, 0), (3, 0)), # header row, merge columns 3 and 4 - ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"), # header row is bold - ( - "FONTNAME", - (0, 0), - (0, -1), - "Helvetica-Bold", - ), # watershed header col is bold - ( - "FONTNAME", - (2, 0), - (2, -1), - "Helvetica-Bold", - ), # DOT header col is bold - ( - "FONTNAME", - (1, 1), - (1, -1), - "Helvetica", - ), # watershed data cells are not bold - ( - "FONTNAME", - (3, 1), - (3, -1), - "Helvetica", - ), # DOT data cells are not bold - ("ALIGN", (0, 0), (-1, 0), "CENTER"), # header row is centered - ( - "ALIGN", - (0, 1), - (0, -1), - "LEFT", - ), # header col is horizontally left-aligned - ( - "ALIGN", - (1, 1), - (-1, -1), - "LEFT", - ), # all other cells are horizontally centered - ( - "VALIGN", - (0, 0), - (-1, -1), - "TOP", - ), # all cells are vertically centered - ( - "LINEBELOW", - (0, 0), - (-1, 0), - 1, - colors.black, - ), # line below column headers - ( - "LINEAFTER", - (1, 0), - (1, -1), - 1, - colors.black, - ), # line between the two subtables - ] - col_widths = [table_width / len(headers)] * len(headers) - table = _make_table_from_df( - data, headers, style, banded=False, col_widths=col_widths + header, + header, + col_widths, + styled=True, ) return table @@ -450,13 +440,13 @@ def _header_footer(canvas, doc, filename, title): canvas.saveState() # Header - title = Paragraph(f"BMP: {title}", _HEADERSTYLE) - w, h = title.wrap(doc.width, doc.topMargin) - title.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - 0.75 * inch) + title = Paragraph(title, _HEADERSTYLE) + w, h = title.wrap((doc.width - 3.5 * inch), 1 * inch) + title.drawOn(canvas, 3.5 * inch, doc.height + doc.topMargin - 0.825 * inch) - logo = Image("logo-notext.png") - logo.drawHeight *= 0.5 - logo.drawWidth *= 0.5 + logo = Image("logo-withtext.png") + logo.drawHeight *= 0.35 + logo.drawWidth *= 0.35 logo.drawOn(canvas, doc.leftMargin, doc.height + doc.topMargin - 1 * inch) # Footer @@ -469,16 +459,36 @@ def _header_footer(canvas, doc, filename, title): class _PDFReportMixin: + margin = 0.5 * inch + + @property + def table_width(self): + return self.width - 2 * self.margin + + def render(self): + doc = SimpleDocTemplate( + self.buffer, + rightMargin=self.margin, + leftMargin=self.margin, + topMargin=self.margin * 3, + bottomMargin=self.margin, + pagesize=self.pagesize, + ) + doc_elements = self.arrange_elements() + self.build(doc, doc_elements) + def build(self, doc, doc_elements): + if self.pagesize == landscape(letter): + canvasmaker = NumberedCanvasLandscape + elif self.pagesize == letter: + canvasmaker = NumberedCanvasPortrait + else: + raise NotImplementedError(f"Only letter paper is available, not {self.pagsize}") doc.build( doc_elements, - onFirstPage=partial( - _header_footer, filename=self.filename, title=self.title - ), - onLaterPages=partial( - _header_footer, filename=self.filename, title=self.title - ), - canvasmaker=NumberedCanvas, + onFirstPage=partial(_header_footer, filename=self.filename, title=self.title), + onLaterPages=partial(_header_footer, filename=self.filename, title=self.title), + canvasmaker=canvasmaker, ) def save(self, *folders): @@ -498,59 +508,144 @@ def __init__(self, buffer, filename, meta, design_elements, title): self.title = title self.filename = filename - def render(self): - margin = 0.5 * inch - doc = SimpleDocTemplate( - self.buffer, - rightMargin=margin, - leftMargin=margin, - topMargin=margin * 3, - bottomMargin=margin, - pagesize=self.pagesize, - ) + self._loc_bmp_table = None + self._wshed_dot_table = None + self._cost_table = None + self._design_table = None + + @property + def loc_bmp_table(self): + if self._loc_bmp_table is None: + self._loc_bmp_table = two_tables_next_to_eachother( + self.location_values(), + self.bmp_values(), + "", + "", + col_widths=[self.table_width * x for x in (0.10, 0.60, 0.15, 0.15)], + styled=False, + ) + self._loc_bmp_table.wrap(*self.pagesize) + return self._loc_bmp_table + + @property + def wshed_dot_table(self): + if self._wshed_dot_table is None: + self._wshed_dot_table = two_tables_next_to_eachother( + self.watershed_values(), + self.dot_values(), + "Watershed Characteristics", + "Transportation Characteristics", + col_widths=[self.table_width / 4] * 4, + styled=True, + ) + self._wshed_dot_table.wrap(*self.pagesize) + return self._wshed_dot_table + + @property + def design_table(self): + if self._design_table is None: + self._design_table = make_design_table(self.design_values(), self.table_width) + self._design_table.wrap(*self.pagesize) + return self._design_table + + @property + def cost_table(self): + if self._cost_table is None: + self._cost_table = single_table( + self.cost_values(), "BMP Cost Informatiom", col_widths=[0.2 * self.table_width] * 2 + ) + self._cost_table.wrap(*self.pagesize) + return self._cost_table + + def watershed_values(self): + watershed_names = { + "EPARainZone": ("EPA Rain Zone", _table_string), + "WSName": ("Watershed Name", _table_string), + "Type": ("Watershed Type", _table_string), + "Area": ("Total Watershed Area", _table_float), + "Area_unit": ("Area Unit", _table_string), + "AreaImpervious_pct": ("Percent Impervious", _table_float), + "NRCSSoilGroup": ("Soil Group", _table_string), + "Area_Descr": ("Watershed Description", _table_string), + "LandUse_Descr": ("Land Use Description", _table_string), + "Vegetation_Descr": ("Vegetation Description", _table_string), + } + data = {value[0]: value[1](self.meta.get(key)) for key, value in watershed_names.items()} + + return pandas.Series(data).fillna("N/A").reset_index() + + def dot_values(self): + dot_columns = { + "DOT_ActivityType_flag": ("Activity Type", _table_string), + "DOT_AADT": ("AADT", _table_int), + "DOT_Lane_Count": ("Lane Count", _table_string), + "DOT_HighwayConditions_Descr": ("Highway Conditions", _table_string), + "DOT_HighwayMaintenance_Descr": ("Highway Maintenance", _table_string), + "DOT_RoadType": ("Road Type", _table_string), + "DOT_Resurfacing_Descr": ("Resurfacing", _table_string), + "DOT_Shoulder_Descr": ("Shoulder", _table_string), + "DOT_WinterMaintenance_Descr": ("Winter Maintenance", _table_string), + "DOT_Conveyance_Descr": ("Conveyance", _table_string), + } + data = {value[0]: value[1](self.meta.get(key)) for key, value in dot_columns.items()} + + return pandas.Series(data).fillna("N/A").reset_index() + + def location_values(self): + if not pandas.isnull(self.meta["ZipCode"]): + address = "{City}, {State} {ZipCode}, {Country}" + else: + address = "{City}, {State}, {Country}" + + data = { + "Description": self.meta.get("BMPType_Desc", "N/A"), + "Test Site": self.meta.get("SiteName", "N/A"), + "Location": address.format(**self.meta), + } + + return pandas.Series(data).fillna("N/A").reset_index() + + def bmp_values(self): + data = { + "BMP Type": "{BMPCategory_Desc} ({BMPType})".format(**self.meta), + "BMP Category": self.meta["BMPCategory_Code"], + "Install Date": _table_date(self.meta["DateInstalled"]), + } + return pandas.Series(data).fillna("N/A").reset_index() + + def cost_values(self): + cost_names = {"CostYear": "Annual Maintenance Cost", "CostTotal": "Capital Cost"} + + data = {value: _table_cost(self.meta.get(key)) for key, value in cost_names.items()} + return pandas.Series(data).fillna("N/A").reset_index() + + def design_values(self): + if self.design_elements is not None: + table = ( + self.design_elements.assign( + Value=lambda df: df["Value_Final"].combine_first(df["Narrative_Descr"]).apply(_design_param_fmt) + ) + .rename(columns={"DesignParameter_Final": "Design Parameter"}) + .reindex(columns=["Design Parameter", "Value"]) + ) + return table + def arrange_elements(self): # Our container for 'Flowable' objects - loc_bmp = make_bmp_info_table( - location_info_table(self.meta), - bmpinfo_table(self.meta), - table_width=self.width - 2 * doc.leftMargin, - ) - loc_bmp.wrap(*self.pagesize) - - wshed_dot = make_wshed_dot_table( - watershed_table(self.meta), - dot_table(self.meta), - table_width=self.width - 2 * doc.leftMargin, - ) - wshed_dot.wrap(*self.pagesize) - - cost = make_cost_or_design_table( - cost_table(self.meta), - "Cost", - table_width=self.width - 2 * doc.leftMargin, - factor=0.2, - ) - cost.wrap(*self.pagesize) - - design = make_design_table( - design_table(self.design_elements), self.width - 2 * doc.leftMargin - ) - design.wrap(*self.pagesize) - doc_elements = [ - loc_bmp, + self.loc_bmp_table, Spacer(self.width, 0.25 * inch), - wshed_dot, + self.wshed_dot_table, Spacer(self.width, 0.25 * inch), - cost, + self.cost_table, ] if self.design_elements is None: _spacer = Spacer(self.width, 0.25 * inch) else: _spacer = PageBreak() - doc_elements.extend([_spacer, design]) - self.build(doc, doc_elements) + doc_elements.extend([_spacer, self.design_table]) + return doc_elements class BMPHydroReport(_PDFReportMixin): @@ -565,59 +660,194 @@ def __init__(self, buffer, filename, meta, climate, precip, flow, title): self.title = title self.filename = filename - def render(self): - margin = 0.5 * inch - doc = SimpleDocTemplate( - self.buffer, - rightMargin=margin, - leftMargin=margin, - topMargin=margin * 3, - bottomMargin=margin, - pagesize=self.pagesize, - ) - - # Our container for 'Flowable' objects - loc_bmp = make_bmp_info_table( - location_info_table(self.meta), - bmpinfo_table(self.meta), - table_width=self.width - 2 * doc.leftMargin, - ) - loc_bmp.wrap(*self.pagesize) - - wshed_dot = make_wshed_dot_table( - watershed_table(self.meta), - dot_table(self.meta), - table_width=self.width - 2 * doc.leftMargin, - ) - wshed_dot.wrap(*self.pagesize) - - cost = make_cost_or_design_table( - cost_table(self.meta), - "Cost", - table_width=self.width - 2 * doc.leftMargin, - factor=0.2, - ) - cost.wrap(*self.pagesize) - - design = make_design_table( - design_table(self.design_elements), self.width - 2 * doc.leftMargin - ) - design.wrap(*self.pagesize) - + self._loc_values = None + self._bmp_values = None + self._climate_values = None + self._precip_values = None + self._flow_values = None + + self._loc_bmp_table = None + self._climate_table = None + self._precip_table = None + self._flow_table = None + self._plot_image = None + + self.precip_units = _get_units(self.precip, "PrecipDepth_Unit") + self.volume_units = _get_units(self.flow, "Volume_Units") + + @property + def bmp_values(self): + if self._bmp_values is None and (not self.meta.empty): + data = { + "BMP Category": self.meta["BMPCategory_Desc"], + "BMP Type": self.meta["BMPType_Desc"], + "Climate Station": self.climate["StationName"], + } + self._bmp_values = pandas.Series(data).fillna("N/A").reset_index() + return self._bmp_values + + @property + def loc_values(self): + if self._loc_values is None and (not self.meta.empty): + if not pandas.isnull(self.meta["ZipCode"]): + address = "{City}, {State} {ZipCode}, {Country}" + else: + address = "{City}, {State}, {Country}" + + data = { + "Test Site Name": self.meta["SiteName"], + "BMP Name": self.meta["BMPName"], + "Location": address.format(**self.meta), + } + self._loc_values = pandas.Series(data).fillna("N/A").reset_index() + return self._loc_values + + @property + def climate_values(self): + if self._climate_values is None and not (self.climate.empty): + columns = [ + "NbrStorms_{}Annual", + "DepthInch_{}", + "DurationHr_{}", + "IntensityInchHr_{}", + "InterEventDryDurationHr_{}", + ] + statistics = ("Avg", "COV") + self._climate_value = pandas.DataFrame( + data=[[_table_float(self.climate[col.format(stat)]) for col in columns] for stat in statistics], + index=["Mean", "Coefficient of Variation"], + columns=[ + "Annual Number of Storms", + "Annual Total Precip. (cm)", + "Storm Duration (hrs)", + "Storm Intensity (cm/hrs)", + "Period Between Storms (hrs)", + ], + ) + return self._climate_value.rename_axis(index="Statistic").reset_index() + + @property + def precip_values(self): + if self._precip_values is None and (not self.precip.empty): + d = self.precip["PrecipDepth_Value"].describe() + self._precip_values = pandas.DataFrame( + { + "Number of Events Monitored": [_table_int(d["count"])], + f"Average Depth of Precipitation ({self.precip_units})": [_table_float(d["mean"])], + f"Minimum Depth of Precipitation ({self.precip_units})": [_table_float(d["min"])], + f"Maximum Depth of Precipitation ({self.precip_units})": [_table_float(d["max"])], + f"Standard Deviation of Precipitation ({self.precip_units})": [_table_float(d["std"])], + } + ) + return self._precip_values + + @property + def flow_values(self): + if self._flow_values is None and (not self.flow.empty): + cols = { + "MSType": "Flow Type", + "count": "Number of Events", + "mean": f"Average Event Flow Volume ({self.volume_units})", + "min": f"Minimum Event Flow Volume ({self.volume_units})", + "max": f"Maximum Event Flow Volume ({self.volume_units})", + "std": f"Standard Deviation of Event Flow Volume ({self.volume_units})", + } + self._flow_values = ( + self.flow.groupby(["MSType"])["Volume_Total"] + .describe() + .fillna({"std": 0}) + .astype(int) + .applymap(_table_int) + .reset_index() + .loc[:, list(cols.keys())] + .rename(columns=cols) + ) + return self._flow_values + + @property + def loc_bmp_table(self): + if self._loc_bmp_table is None and self.loc_values is not None and self.bmp_values is not None: + self._loc_bmp_table = two_tables_next_to_eachother( + self.loc_values, + self.bmp_values, + "", + "", + col_widths=[self.table_width * x for x in (0.15, 0.35, 0.15, 0.35)], + styled=False, + ) + self._loc_bmp_table.wrap(*self.pagesize) + return self._loc_bmp_table + + @property + def climate_table(self): + if self._climate_table is None: + title = "Regional Climate Statistics" + if self.climate_values is not None: + self._climate_table = normal_table( + self.climate_values, + title, + col_widths=[0.16 * self.table_width] * 6, + ) + else: + self._climate_table = no_info_table(title, self.table_width * 0.25, "No Climate Information Available") + self._climate_table.wrap(*self.pagesize) + return self._climate_table + + @property + def precip_table(self): + if self._precip_table is None: + title = "Measured Precipitation Statistics" + if self.precip_values is not None: + self._precip_table = normal_table(self.precip_values, title, col_widths=[0.2 * self.table_width] * 5) + else: + self._precip_table = no_info_table( + title, + self.table_width * 0.25, + "Precipitation Data Flagged for Limited Use or Not Available", + ) + self._precip_table.wrap(*self.pagesize) + return self._precip_table + + @property + def flow_table(self): + if self._flow_table is None: + title = "Measured Volume Statistics" + if self.flow_values is not None: + self._flow_table = normal_table(self.flow_values, title, col_widths=[0.16 * self.table_width] * 6) + else: + self._flow_table = no_info_table( + title, self.table_width * 0.25, "Volume Data Flagged for Limited Use or Not Available" + ) + self._flow_table.wrap(*self.pagesize) + return self._flow_table + + @property + def plot_image(self): + if self._plot_image is None: + _buffer = BytesIO() + fig = precip_flow_plot(self.precip, self.flow, self.precip_units, self.volume_units) + fig.tight_layout() + fig.savefig(_buffer, format="png") + _buffer.seek(0) + self._plot_image = Image(_buffer) + self._plot_image.drawHeight *= 0.20 + self._plot_image.drawWidth *= 0.20 + pyplot.close(fig) + return self._plot_image + + def arrange_elements(self): doc_elements = [ - loc_bmp, + self.loc_bmp_table, Spacer(self.width, 0.25 * inch), - wshed_dot, + self.climate_table, Spacer(self.width, 0.25 * inch), - cost, + self.precip_table, + Spacer(self.width, 0.25 * inch), + self.flow_table, + Spacer(self.width, 0.35 * inch), + self.plot_image, ] - if self.design_elements is None: - _spacer = Spacer(self.width, 0.25 * inch) - else: - _spacer = PageBreak() - - doc_elements.extend([_spacer, design]) - self.build(doc, doc_elements) + return doc_elements class StatReport: