Calculate the calibration factor#
Tip
Example script to process the calibration data in the examples folder.
Here is an example on how to use gSolve to calculate the calibration_factor. The calibration_factor scales the readings against a set of well constrained absolute stations on a calibration range. Note that the calibration_factor is calculated using un-corrected data and is solved as part of the network adjustment.
Once the calibration_factor is calculated you can use the previous tutorial to apply it to your measurements.
import pathlib
from gsolve import (
GravityObservations,
GravitySites,
GravitySurvey,
ReferenceGravity,
DialToMgalConverter,
GSolveReport
)
Set up the directory and files required. We need a calibration survey dataset (in excel format here), the G meter dial correction table and the reference stations list.
data_path = pathlib.Path.cwd()
cal_data_path = data_path / "surveys/calibration/"
obs_file = cal_data_path + "G106-Data23Nov2018.xlsx"
ref_site_file = data_path / "absolute_gravity" / "base_stations_calibration.csv"
corr_table_file = data_path / "correction_tables" / "G106.csv"
Read in observations#
Tip
Here we are using the old gsovle spreadsheet format so you need to supply the sheet_name
obs = GravityObservations.from_excel(
obs_file, parse_split_datetime=True, sheet_name="Survey Data"
)
Read in site location information#
sites = GravitySites.from_excel(obs_file, sheet_name="Locations")
Read in list reference (i.e. absolute) stations#
ref_sites = ReferenceGravity.from_csv(ref_site_file)
set which reference stations are used in this survey (must be in sites)#
_ = sites.set_reference_gravity(ref_sites)
Process the observed data#
As this is a manually read G meter we need to convert dial values to mgal via a conversion table. First read in the conversion table
g106converter = DialToMgalConverter.from_csv(corr_table_file)
apply dial conversion to convert values to mGal#
obs.apply_dial_to_mgal(g106converter)
Note that as we want to calculate the calibration factor we do not need to apply an existing calibration.
calculate the earth tide correction which requires location information from sites#
obs.apply_earth_tide_correction(sites)
calculate earth tide corrected gravity#
obs.calculate_tide_corrected_gravity()
plot the observed data for loop #1#
obs.plot_observed_data(1, "datetime", "meter_reading_mgal")
create a survey object using observations and site objects#
surv = GravitySurvey(obs, sites)
Run the network adjustment#
As this is a calibration survey we set calculate_calibration=True. Here we use solve method “2”, as we have high confidence in our absolute stations. We process each loop individually and use all data (confidence_interval=100).
results = surv.solve_lstsq(
method=2, use_loops=True, calculate_calibration=True, confidence_interval=100
)
Tip
results.site_solution contains the adjusted gravity per station
print(results.site_solution)
Tip
results.obs_solution contains the residuals for each reading.
print(results.obs_solution)
Tip
results.calibration_factor contains the calibration_factor.
print("calibration factor", results.calibration_factor)
Calibration factor = 1.00148517
plot drift and residual curves#
results.plot_residual_drift(
loop=1, savefilename=str(cal_data_path) + "Calibration_residual_drift.png"
)
results.plot_residual_cdf(
loop=1, savefilename=str(cal_data_path) + "Calibration_residual_cdf.png"
)
save output files#
as individual csv files
results.site_solution.to_csv(cal_data_path / "calibration_site_solution.csv")
results.obs_solution.to_csv(cal_data_path / "calibration_observations_solution.csv")
or as a single excel
report = GSolveReport(survey, results)
report.to_excel(obs_path / "okataina_survey_results.xlsx")