gea-program 0.4.0__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gea_program-0.4.0 → gea_program-0.6.0}/PKG-INFO +141 -12
- {gea_program-0.4.0 → gea_program-0.6.0}/README.md +140 -11
- gea_program-0.6.0/gea/BENCH_TEST_PROTOCOL.md +91 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/__init__.py +25 -34
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/__main__.py +338 -57
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/acceptance_tests.py +676 -88
- gea_program-0.6.0/gea/bench.py +123 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +1 -1
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/client_reports.py +111 -10
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/downhole_engine.py +70 -163
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/drift_monitor.py +1 -1
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/fat_sat.py +1 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/files.py +15 -2
- gea_program-0.6.0/gea/gauge_aging.py +61 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/gauge_specs.py +31 -41
- gea_program-0.6.0/gea/help/drift.md +13 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/files.md +1 -1
- gea_program-0.6.0/gea/help/seismic.md +13 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/helplib.py +3 -2
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/matplotlib_demo.py +6 -5
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/model_card.py +14 -16
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/operator_app.py +22 -50
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/qt6_downhole_app.py +12 -32
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/reconciler.py +31 -32
- gea_program-0.6.0/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +122 -0
- gea_program-0.6.0/gea/reference/IU_ANMO_10_BHZ_response.xml +188 -0
- gea_program-0.6.0/gea/reference/libmseed_steim.provenance.json +20 -0
- gea_program-0.6.0/gea/reference/libmseed_steim1_4096.mseed +0 -0
- gea_program-0.6.0/gea/reference/libmseed_steim2_4096.mseed +0 -0
- gea_program-0.6.0/gea/reference/libmseed_steim2_512.mseed +0 -0
- gea_program-0.6.0/gea/seismic.py +887 -0
- gea_program-0.6.0/gea/seismic_array.py +592 -0
- gea_program-0.6.0/gea/seismic_detect.py +298 -0
- gea_program-0.6.0/gea/seismic_response.py +358 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/service.py +75 -2
- gea_program-0.6.0/gea/service_life.py +116 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/tool_library.py +45 -79
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/web/app.html +54 -1
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/workspace.py +189 -1
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/PKG-INFO +141 -12
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/SOURCES.txt +12 -2
- {gea_program-0.4.0 → gea_program-0.6.0}/pyproject.toml +2 -2
- gea_program-0.4.0/gea/BENCH_TEST_PROTOCOL.md +0 -96
- gea_program-0.4.0/gea/bench.py +0 -144
- gea_program-0.4.0/gea/case_study.py +0 -228
- gea_program-0.4.0/gea/help/drift.md +0 -13
- gea_program-0.4.0/gea/quartz_hpht_extension.py +0 -152
- gea_program-0.4.0/gea/service_life.py +0 -173
- {gea_program-0.4.0 → gea_program-0.6.0}/LICENSE +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/blind_harness.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/certificates.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/cli.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/config_versioning.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/correlation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/dashboard.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/deviation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/doctor.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/earth_model.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/example_register_map.json +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/follower.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/forward_model.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/gamma.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/alarms.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/data-in.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/doctor.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/instruments.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/notifications.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/patches.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/quality.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/site.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/start.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/transients.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/housekeeping.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/jobs.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/live_ports.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/loadtest.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/modbus.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/notify.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/opcua_port.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/patches.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/ports.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/project.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/sample_record.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/sbom.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/segy.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/shell.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/shut_in.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/sla_report.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/store_forward.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/strata_join.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/survey_view.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/telemetry.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/transient.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/well_assembler.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/wits0.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea/witsml.py +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/setup.cfg +0 -0
- {gea_program-0.4.0 → gea_program-0.6.0}/tests/test_acceptance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
|
|
5
5
|
Author: Daniel T. Murphy
|
|
6
6
|
License: MPL-2.0
|
|
@@ -92,6 +92,25 @@ reaches a client document. Nothing unmeasured is ever reported as met.
|
|
|
92
92
|
- **Survey track** (`earth_model.py`, `strata_join.py`, `inverse_engine.py`,
|
|
93
93
|
`blind_harness.py`, `rock_inventory.py`, `forward_model.py`, ...): strata
|
|
94
94
|
property estimation over a public co-located library, blind-scored on every run.
|
|
95
|
+
- **The second leg - seismic** (`seismic.py`, `seismic_detect.py`): raw seismic
|
|
96
|
+
records in (miniSEED with Steim1/Steim2, SAC, or fetched from any FDSN
|
|
97
|
+
archive - TexNet, EarthScope), Welch spectra, spectrograms and the persistent
|
|
98
|
+
lines above the local floor out, and the detectability test: one station's
|
|
99
|
+
record against a list of known rigs with positions and working windows,
|
|
100
|
+
verdict per rig, the detection radius bracketed between the farthest rig
|
|
101
|
+
heard and the nearest not heard. The instrument response (`seismic_response.py`):
|
|
102
|
+
the station's StationXML read into its stages, evaluated as evalresp does,
|
|
103
|
+
removed with a water level - counts to m/s, m or m/s^2. The decoder is proven
|
|
104
|
+
against libmseed on a corpus of real-station files; the response against
|
|
105
|
+
evalresp on a real IRIS channel. The array step (`seismic_array.py`):
|
|
106
|
+
beamforming over a slowness grid with the array response function's width
|
|
107
|
+
beside every bearing, the crossing of bearings from several arrays with its
|
|
108
|
+
ellipse, location from lags with the velocity named as an input, and the
|
|
109
|
+
array's detectability test - did it point at each known rig. On a site the
|
|
110
|
+
leg lives on the dashboard: a Seismic page where a station or an array is
|
|
111
|
+
added by upload with its rigs list and station file, refreshed as a job,
|
|
112
|
+
and read - spectrum, lines, verdicts, bearing - with its Seismic Station
|
|
113
|
+
Report under Reports. See *The second leg*.
|
|
95
114
|
|
|
96
115
|
## Quick start
|
|
97
116
|
|
|
@@ -103,8 +122,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
103
122
|
gea client-report --report accuracy --out client_report
|
|
104
123
|
gea model-cards --out model_cards
|
|
105
124
|
gea sbom --out sbom
|
|
106
|
-
gea accept # the product gate (
|
|
107
|
-
gea help drift # the help library, by the job (
|
|
125
|
+
gea accept # the product gate (258 checks)
|
|
126
|
+
gea help drift # the help library, by the job (15 pages; the same text is on every dashboard page)
|
|
108
127
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
109
128
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
110
129
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
@@ -112,6 +131,7 @@ gea serve --workspace C:\site # the dashboard as
|
|
|
112
131
|
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
113
132
|
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
114
133
|
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
134
|
+
gea seismic --action detect --file tx.mseed --station-lat 31.9 --station-lon -102.1 --sources rigs.csv # the second leg: is a known rig in this record?
|
|
115
135
|
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
116
136
|
```
|
|
117
137
|
|
|
@@ -231,10 +251,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
|
231
251
|
|
|
232
252
|
### The help library
|
|
233
253
|
|
|
234
|
-
`gea help` lists
|
|
254
|
+
`gea help` lists fifteen pages indexed by the job a reader arrives with -
|
|
235
255
|
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
236
|
-
the site, instruments, shut-ins and build-ups,
|
|
237
|
-
which code is running, upkeep. Each page carries four lines and stops: the
|
|
256
|
+
the site, instruments, shut-ins and build-ups, seismic (the second leg),
|
|
257
|
+
patches, files, notifications, which code is running, upkeep. Each page carries four lines and stops: the
|
|
238
258
|
command, what it writes, the one number to check, and what the page will not
|
|
239
259
|
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
240
260
|
same text is what `/api/help` serves and what the dashboard shows under every
|
|
@@ -286,6 +306,94 @@ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
|
286
306
|
result follows. It is the first look every shut-in should get automatically,
|
|
287
307
|
not a replacement for a full interpretation, and it says so.
|
|
288
308
|
|
|
309
|
+
### The second leg
|
|
310
|
+
|
|
311
|
+
The second leg of the program is seismic: the client's site records ground
|
|
312
|
+
motion that conventional processing treats as noise, and in that noise are
|
|
313
|
+
the machinery lines of every rig working within range - mud pumps and their
|
|
314
|
+
harmonics, rotary tables, engines. The leg starts with ingest and one measured
|
|
315
|
+
number, not with a map. `gea seismic` reads the two formats the archives and
|
|
316
|
+
most field recorders write (miniSEED with Steim1/Steim2 and integer/float
|
|
317
|
+
encodings, decided by content; SAC), fetches records from any FDSN web service
|
|
318
|
+
(`--base texnet` for the Texas network TX, `--base iris` for EarthScope), and
|
|
319
|
+
produces the standard spectral products: the Welch PSD, a spectrogram, and
|
|
320
|
+
the lines that persist above a running-median floor in the band where rig
|
|
321
|
+
machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
|
|
322
|
+
suite against records written by libmseed, the format's reference
|
|
323
|
+
implementation (`gea/reference/`), and `tools/seismic_reader_check.py` runs it
|
|
324
|
+
against libmseed on about ninety real-station files of every encoding and
|
|
325
|
+
byte order (the obspy test corpus, fetched with pip, never redistributed):
|
|
326
|
+
every time-series file sample-exact.
|
|
327
|
+
|
|
328
|
+
Physical units come from the station's own response file. `gea seismic
|
|
329
|
+
--action remove-response --stationxml station.xml` reads the FDSN StationXML
|
|
330
|
+
the archives serve beside the data (`fetch --with-response` fetches it),
|
|
331
|
+
builds the response from its stages - the poles and zeros of the sensor, the
|
|
332
|
+
gain of each stage, the FIR and IIR coefficients of the digitizer with their
|
|
333
|
+
delay corrections - the way evalresp builds it, and removes it in the
|
|
334
|
+
frequency domain with a water level and a pre-filter, giving velocity,
|
|
335
|
+
displacement or acceleration in SI units. The acceptance suite holds the
|
|
336
|
+
evaluation to evalresp's numbers on a real IRIS channel (IU.ANMO.10.BHZ,
|
|
337
|
+
`gea/reference/`) to one part in a hundred thousand. A station file whose
|
|
338
|
+
stages disagree with their own declared sensitivity, a polynomial stage, a
|
|
339
|
+
channel the file does not cover: refused with the reason, never patched, and
|
|
340
|
+
the record stays in counts, labelled.
|
|
341
|
+
|
|
342
|
+
One station detects; an array gives a direction. `gea seismic --action beam`
|
|
343
|
+
takes three or more sensors' records with their positions and returns the
|
|
344
|
+
back-azimuth and slowness the band's energy crossed the array with, by
|
|
345
|
+
frequency-domain beamforming over a slowness grid (the conventional Bartlett
|
|
346
|
+
beam, or Capon), refined around its maximum - and, beside the bearing, the
|
|
347
|
+
array response function's half-power width, which is the resolution the
|
|
348
|
+
geometry allows at that band, and whether the geometry has aliasing lobes
|
|
349
|
+
there, so a lone peak is not mistaken for a source. `--action array-detect`
|
|
350
|
+
is the array's form of the detectability test: for each rig on the
|
|
351
|
+
ground-truth list, in the windows it worked alone, did the array point at it
|
|
352
|
+
within its own tolerance (POINTED, NOT_POINTED, INCOHERENT). `--action
|
|
353
|
+
locate` crosses the bearings of two or more arrays, weighted by their
|
|
354
|
+
uncertainties, and returns the point with its 1-sigma ellipse, the crossing
|
|
355
|
+
angle and the residual of each bearing; a location from station-pair lags is
|
|
356
|
+
there too, with the medium velocity it needs named as the input it is. On
|
|
357
|
+
the labelled synthetic scene (`--action array-selftest`) a 1.2 km,
|
|
358
|
+
nine-sensor array points at rigs from 6 to 45 km within 0.3 degrees against
|
|
359
|
+
a 7-degree tolerance, and three arrays' bearings cross within a kilometre of
|
|
360
|
+
the rig. What none of it claims: a position from one array, a bearing to a
|
|
361
|
+
source nearer than five apertures, a direction finer than the array response
|
|
362
|
+
function, or a velocity that was not measured.
|
|
363
|
+
|
|
364
|
+
On a site the leg is a page. Seismic, beside Wells: a station (one record)
|
|
365
|
+
or an array (one record per sensor and a sensors CSV) is added by upload with
|
|
366
|
+
its position, its rigs list and, when there is one, its StationXML, and lives
|
|
367
|
+
under `seismic/<station>/` in the workspace with its files copied in verbatim
|
|
368
|
+
and hashed. Refresh - a button, or `gea workspace --action refresh-seismic`,
|
|
369
|
+
and like every other action a job with its log - reads the record, removes
|
|
370
|
+
the response when the station file is there, writes the spectrum, the
|
|
371
|
+
persistent lines, the detectability verdicts and, for an array, the beam and
|
|
372
|
+
the array verdicts under `reports/seismic/<station>/`, and the Seismic
|
|
373
|
+
Station Report beside them; the station page draws the spectrum and shows
|
|
374
|
+
the tables with the limits printed under each. The home page counts the
|
|
375
|
+
stations and the listed rigs heard. The sample report is in
|
|
376
|
+
`docs/report_samples/`.
|
|
377
|
+
|
|
378
|
+
The first number is the detectability test (`--action detect`): one station's
|
|
379
|
+
continuous record, the station's position, and a CSV of known rigs - position
|
|
380
|
+
and working window from a public permit register or the operator's own
|
|
381
|
+
schedule. For every rig that worked alone for enough windows the test
|
|
382
|
+
compares the band power in its windows with the quiet baseline (the windows
|
|
383
|
+
when no listed rig was working) and says DETECTED or NOT_DETECTED, with the
|
|
384
|
+
excess in dB and the lines that belong to those windows and not to the quiet
|
|
385
|
+
ones; a rig that never worked alone is AMBIGUOUS, and a record with no quiet
|
|
386
|
+
hour gets NO_QUIET_BASELINE and no verdict at all. The result is the radius
|
|
387
|
+
bracketed between the farthest rig heard and the nearest not heard - the
|
|
388
|
+
station's measured reach for rigs like those on the list. Everything the leg
|
|
389
|
+
can later claim sits inside that radius. What the test will not call a
|
|
390
|
+
measurement is printed with it: a well's position or track (one station
|
|
391
|
+
detects, it does not locate - locating is the array step that comes after
|
|
392
|
+
this number exists), a radius beyond the farthest listed rig, anything about
|
|
393
|
+
a rig not on the list, and any quantity in physical units until a station's
|
|
394
|
+
response has been applied and named. `--action selftest` runs the test on a
|
|
395
|
+
synthetic scene and labels its output SIMULATION_SELF_TEST.
|
|
396
|
+
|
|
289
397
|
### Before a site goes live
|
|
290
398
|
|
|
291
399
|
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
@@ -309,10 +417,15 @@ workspace folder it never deletes.
|
|
|
309
417
|
|
|
310
418
|
```
|
|
311
419
|
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
312
|
-
python tools/build_installer.py --extras live,plotting,xls
|
|
420
|
+
python tools/build_installer.py --extras live,plotting,xls # a smaller kit without the PyQt6 desktop window
|
|
313
421
|
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
314
422
|
```
|
|
315
423
|
|
|
424
|
+
The kit carries every optional dependency by default - the live ports
|
|
425
|
+
(asyncua, paho-mqtt, pymodbus, pyserial), matplotlib, xlrd and the PyQt6
|
|
426
|
+
desktop window - so `gea sbom` from an installed kit lists all of them as
|
|
427
|
+
installed; and `report-samples/`, one rendered example of every report.
|
|
428
|
+
|
|
316
429
|
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
317
430
|
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
318
431
|
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
@@ -328,6 +441,8 @@ attaches the zips to the GitHub release of that tag.
|
|
|
328
441
|
gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
|
|
329
442
|
workspace, jobs, service, patches and web/app.html (the served dashboard)
|
|
330
443
|
gea/catalog/ 52 public archive entries, each with a provenance file
|
|
444
|
+
gea/reference/ miniSEED records written by libmseed and an IRIS StationXML with evalresp's numbers, with provenance: the independent references
|
|
445
|
+
docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
|
|
331
446
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
332
447
|
SESSION_LOG.md (the working record, session by session),
|
|
333
448
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
@@ -348,10 +463,22 @@ density anchors and Vp ranges with their citations (Telford, Geldart and
|
|
|
348
463
|
Sheriff; Schon). Every catalogue entry under `gea/catalog/` has a provenance
|
|
349
464
|
file naming its public source.
|
|
350
465
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
466
|
+
The gauge aging rate the drift evaluation uses is the instrument's published
|
|
467
|
+
drift specification, read from a cited datasheet (`gea/gauge_specs.py`), with
|
|
468
|
+
nothing added for temperature or pressure - above the rating the rate is
|
|
469
|
+
flagged, not changed. The program carries no aging model of its own, no
|
|
470
|
+
engineering constant that is not a datasheet number, and no claim about a
|
|
471
|
+
gauge beyond what its datasheet says; `tools/standalone_check.py` fails the
|
|
472
|
+
build on the names, phrases and numbers of the model that once stood there.
|
|
473
|
+
The seismic leg is textbook signal processing - Welch's PSD estimate, a
|
|
474
|
+
running-median floor, band power, great-circle distance - and the decoder is
|
|
475
|
+
checked against libmseed; the synthetic scene behind its self-test states its
|
|
476
|
+
own assumptions (body-wave spreading, a Q) and is labelled as a scene, not a
|
|
477
|
+
ground. Two statements the product carries on its own model cards: the datasheet
|
|
478
|
+
rate has no field validation on record against a gauge with a known history
|
|
479
|
+
(`gea bench` is the instrument for it), and five of the fourteen back-tested
|
|
480
|
+
strata quantities are NOT ACCEPTABLE at the 95 % target. Both are printed,
|
|
481
|
+
never claimed otherwise.
|
|
355
482
|
|
|
356
483
|
## Shipping
|
|
357
484
|
|
|
@@ -361,7 +488,9 @@ not exist anywhere, every version in `SHIP_LOG.md` must have its tag, `python -m
|
|
|
361
488
|
accept` must be green, `SHIP_MESSAGE.txt` must start with the tag; then commit, tag,
|
|
362
489
|
push, and the remote tag must be seen before SHIPPED is printed. `CHANGELOG.md` must carry a
|
|
363
490
|
section headed by the tag, and `tools/standalone_check.py` must report no findings. `-DryRun` runs every
|
|
364
|
-
check and changes nothing; `-NoPush` stops after the local tag.
|
|
491
|
+
check and changes nothing; `-NoPush` stops after the local tag. Before the gate, after the bump:
|
|
492
|
+
`python tools/render_report_samples.py` re-renders `docs/report_samples/` from the new build
|
|
493
|
+
(section AM fails on a stale build number).
|
|
365
494
|
|
|
366
495
|
## Publishing to PyPI
|
|
367
496
|
|
|
@@ -53,6 +53,25 @@ reaches a client document. Nothing unmeasured is ever reported as met.
|
|
|
53
53
|
- **Survey track** (`earth_model.py`, `strata_join.py`, `inverse_engine.py`,
|
|
54
54
|
`blind_harness.py`, `rock_inventory.py`, `forward_model.py`, ...): strata
|
|
55
55
|
property estimation over a public co-located library, blind-scored on every run.
|
|
56
|
+
- **The second leg - seismic** (`seismic.py`, `seismic_detect.py`): raw seismic
|
|
57
|
+
records in (miniSEED with Steim1/Steim2, SAC, or fetched from any FDSN
|
|
58
|
+
archive - TexNet, EarthScope), Welch spectra, spectrograms and the persistent
|
|
59
|
+
lines above the local floor out, and the detectability test: one station's
|
|
60
|
+
record against a list of known rigs with positions and working windows,
|
|
61
|
+
verdict per rig, the detection radius bracketed between the farthest rig
|
|
62
|
+
heard and the nearest not heard. The instrument response (`seismic_response.py`):
|
|
63
|
+
the station's StationXML read into its stages, evaluated as evalresp does,
|
|
64
|
+
removed with a water level - counts to m/s, m or m/s^2. The decoder is proven
|
|
65
|
+
against libmseed on a corpus of real-station files; the response against
|
|
66
|
+
evalresp on a real IRIS channel. The array step (`seismic_array.py`):
|
|
67
|
+
beamforming over a slowness grid with the array response function's width
|
|
68
|
+
beside every bearing, the crossing of bearings from several arrays with its
|
|
69
|
+
ellipse, location from lags with the velocity named as an input, and the
|
|
70
|
+
array's detectability test - did it point at each known rig. On a site the
|
|
71
|
+
leg lives on the dashboard: a Seismic page where a station or an array is
|
|
72
|
+
added by upload with its rigs list and station file, refreshed as a job,
|
|
73
|
+
and read - spectrum, lines, verdicts, bearing - with its Seismic Station
|
|
74
|
+
Report under Reports. See *The second leg*.
|
|
56
75
|
|
|
57
76
|
## Quick start
|
|
58
77
|
|
|
@@ -64,8 +83,8 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
64
83
|
gea client-report --report accuracy --out client_report
|
|
65
84
|
gea model-cards --out model_cards
|
|
66
85
|
gea sbom --out sbom
|
|
67
|
-
gea accept # the product gate (
|
|
68
|
-
gea help drift # the help library, by the job (
|
|
86
|
+
gea accept # the product gate (258 checks)
|
|
87
|
+
gea help drift # the help library, by the job (15 pages; the same text is on every dashboard page)
|
|
69
88
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
70
89
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
71
90
|
gea workspace --path C:\site --action init --name "Pad 3" # a site folder
|
|
@@ -73,6 +92,7 @@ gea serve --workspace C:\site # the dashboard as
|
|
|
73
92
|
gea doctor --workspace C:\site # which code runs, can it serve, with every fix
|
|
74
93
|
gea files --workspace C:\site --action list --root historian # the import roots, detection by content, import, export, packs
|
|
75
94
|
gea transient --file historian.csv --params params.json --out pta # shut-ins and build-up analysis with a band
|
|
95
|
+
gea seismic --action detect --file tx.mseed --station-lat 31.9 --station-lon -102.1 --sources rigs.csv # the second leg: is a known rig in this record?
|
|
76
96
|
gea swaps / gea certificates / gea notify / gea housekeeping / gea loadtest # instruments, notification rules, site upkeep
|
|
77
97
|
```
|
|
78
98
|
|
|
@@ -192,10 +212,10 @@ text: JSON, JSON lines, CSV, Markdown, HTML.
|
|
|
192
212
|
|
|
193
213
|
### The help library
|
|
194
214
|
|
|
195
|
-
`gea help` lists
|
|
215
|
+
`gea help` lists fifteen pages indexed by the job a reader arrives with -
|
|
196
216
|
start, bring data in, quality rules, drift, well tests, alarms and the month,
|
|
197
|
-
the site, instruments, shut-ins and build-ups,
|
|
198
|
-
which code is running, upkeep. Each page carries four lines and stops: the
|
|
217
|
+
the site, instruments, shut-ins and build-ups, seismic (the second leg),
|
|
218
|
+
patches, files, notifications, which code is running, upkeep. Each page carries four lines and stops: the
|
|
199
219
|
command, what it writes, the one number to check, and what the page will not
|
|
200
220
|
call a measurement. The pages ship inside the package (`gea/help/`), and the
|
|
201
221
|
same text is what `/api/help` serves and what the dashboard shows under every
|
|
@@ -247,6 +267,94 @@ chose it; an analyst can move the region (`gea transient --mtr 2:40`) and the
|
|
|
247
267
|
result follows. It is the first look every shut-in should get automatically,
|
|
248
268
|
not a replacement for a full interpretation, and it says so.
|
|
249
269
|
|
|
270
|
+
### The second leg
|
|
271
|
+
|
|
272
|
+
The second leg of the program is seismic: the client's site records ground
|
|
273
|
+
motion that conventional processing treats as noise, and in that noise are
|
|
274
|
+
the machinery lines of every rig working within range - mud pumps and their
|
|
275
|
+
harmonics, rotary tables, engines. The leg starts with ingest and one measured
|
|
276
|
+
number, not with a map. `gea seismic` reads the two formats the archives and
|
|
277
|
+
most field recorders write (miniSEED with Steim1/Steim2 and integer/float
|
|
278
|
+
encodings, decided by content; SAC), fetches records from any FDSN web service
|
|
279
|
+
(`--base texnet` for the Texas network TX, `--base iris` for EarthScope), and
|
|
280
|
+
produces the standard spectral products: the Welch PSD, a spectrogram, and
|
|
281
|
+
the lines that persist above a running-median floor in the band where rig
|
|
282
|
+
machinery sits (1-50 Hz by default). The decoder is proven in the acceptance
|
|
283
|
+
suite against records written by libmseed, the format's reference
|
|
284
|
+
implementation (`gea/reference/`), and `tools/seismic_reader_check.py` runs it
|
|
285
|
+
against libmseed on about ninety real-station files of every encoding and
|
|
286
|
+
byte order (the obspy test corpus, fetched with pip, never redistributed):
|
|
287
|
+
every time-series file sample-exact.
|
|
288
|
+
|
|
289
|
+
Physical units come from the station's own response file. `gea seismic
|
|
290
|
+
--action remove-response --stationxml station.xml` reads the FDSN StationXML
|
|
291
|
+
the archives serve beside the data (`fetch --with-response` fetches it),
|
|
292
|
+
builds the response from its stages - the poles and zeros of the sensor, the
|
|
293
|
+
gain of each stage, the FIR and IIR coefficients of the digitizer with their
|
|
294
|
+
delay corrections - the way evalresp builds it, and removes it in the
|
|
295
|
+
frequency domain with a water level and a pre-filter, giving velocity,
|
|
296
|
+
displacement or acceleration in SI units. The acceptance suite holds the
|
|
297
|
+
evaluation to evalresp's numbers on a real IRIS channel (IU.ANMO.10.BHZ,
|
|
298
|
+
`gea/reference/`) to one part in a hundred thousand. A station file whose
|
|
299
|
+
stages disagree with their own declared sensitivity, a polynomial stage, a
|
|
300
|
+
channel the file does not cover: refused with the reason, never patched, and
|
|
301
|
+
the record stays in counts, labelled.
|
|
302
|
+
|
|
303
|
+
One station detects; an array gives a direction. `gea seismic --action beam`
|
|
304
|
+
takes three or more sensors' records with their positions and returns the
|
|
305
|
+
back-azimuth and slowness the band's energy crossed the array with, by
|
|
306
|
+
frequency-domain beamforming over a slowness grid (the conventional Bartlett
|
|
307
|
+
beam, or Capon), refined around its maximum - and, beside the bearing, the
|
|
308
|
+
array response function's half-power width, which is the resolution the
|
|
309
|
+
geometry allows at that band, and whether the geometry has aliasing lobes
|
|
310
|
+
there, so a lone peak is not mistaken for a source. `--action array-detect`
|
|
311
|
+
is the array's form of the detectability test: for each rig on the
|
|
312
|
+
ground-truth list, in the windows it worked alone, did the array point at it
|
|
313
|
+
within its own tolerance (POINTED, NOT_POINTED, INCOHERENT). `--action
|
|
314
|
+
locate` crosses the bearings of two or more arrays, weighted by their
|
|
315
|
+
uncertainties, and returns the point with its 1-sigma ellipse, the crossing
|
|
316
|
+
angle and the residual of each bearing; a location from station-pair lags is
|
|
317
|
+
there too, with the medium velocity it needs named as the input it is. On
|
|
318
|
+
the labelled synthetic scene (`--action array-selftest`) a 1.2 km,
|
|
319
|
+
nine-sensor array points at rigs from 6 to 45 km within 0.3 degrees against
|
|
320
|
+
a 7-degree tolerance, and three arrays' bearings cross within a kilometre of
|
|
321
|
+
the rig. What none of it claims: a position from one array, a bearing to a
|
|
322
|
+
source nearer than five apertures, a direction finer than the array response
|
|
323
|
+
function, or a velocity that was not measured.
|
|
324
|
+
|
|
325
|
+
On a site the leg is a page. Seismic, beside Wells: a station (one record)
|
|
326
|
+
or an array (one record per sensor and a sensors CSV) is added by upload with
|
|
327
|
+
its position, its rigs list and, when there is one, its StationXML, and lives
|
|
328
|
+
under `seismic/<station>/` in the workspace with its files copied in verbatim
|
|
329
|
+
and hashed. Refresh - a button, or `gea workspace --action refresh-seismic`,
|
|
330
|
+
and like every other action a job with its log - reads the record, removes
|
|
331
|
+
the response when the station file is there, writes the spectrum, the
|
|
332
|
+
persistent lines, the detectability verdicts and, for an array, the beam and
|
|
333
|
+
the array verdicts under `reports/seismic/<station>/`, and the Seismic
|
|
334
|
+
Station Report beside them; the station page draws the spectrum and shows
|
|
335
|
+
the tables with the limits printed under each. The home page counts the
|
|
336
|
+
stations and the listed rigs heard. The sample report is in
|
|
337
|
+
`docs/report_samples/`.
|
|
338
|
+
|
|
339
|
+
The first number is the detectability test (`--action detect`): one station's
|
|
340
|
+
continuous record, the station's position, and a CSV of known rigs - position
|
|
341
|
+
and working window from a public permit register or the operator's own
|
|
342
|
+
schedule. For every rig that worked alone for enough windows the test
|
|
343
|
+
compares the band power in its windows with the quiet baseline (the windows
|
|
344
|
+
when no listed rig was working) and says DETECTED or NOT_DETECTED, with the
|
|
345
|
+
excess in dB and the lines that belong to those windows and not to the quiet
|
|
346
|
+
ones; a rig that never worked alone is AMBIGUOUS, and a record with no quiet
|
|
347
|
+
hour gets NO_QUIET_BASELINE and no verdict at all. The result is the radius
|
|
348
|
+
bracketed between the farthest rig heard and the nearest not heard - the
|
|
349
|
+
station's measured reach for rigs like those on the list. Everything the leg
|
|
350
|
+
can later claim sits inside that radius. What the test will not call a
|
|
351
|
+
measurement is printed with it: a well's position or track (one station
|
|
352
|
+
detects, it does not locate - locating is the array step that comes after
|
|
353
|
+
this number exists), a radius beyond the farthest listed rig, anything about
|
|
354
|
+
a rig not on the list, and any quantity in physical units until a station's
|
|
355
|
+
response has been applied and named. `--action selftest` runs the test on a
|
|
356
|
+
synthetic scene and labels its output SIMULATION_SELF_TEST.
|
|
357
|
+
|
|
250
358
|
### Before a site goes live
|
|
251
359
|
|
|
252
360
|
`deploy/README.md` is the checklist: keep the service on the loopback
|
|
@@ -270,10 +378,15 @@ workspace folder it never deletes.
|
|
|
270
378
|
|
|
271
379
|
```
|
|
272
380
|
python tools/build_installer.py # dist/gea-program-<version>-win64/ and .zip (needs internet here, none there)
|
|
273
|
-
python tools/build_installer.py --extras live,plotting,xls
|
|
381
|
+
python tools/build_installer.py --extras live,plotting,xls # a smaller kit without the PyQt6 desktop window
|
|
274
382
|
python tools/build_installer.py --platform linux # a venv-based kit for a Linux site server
|
|
275
383
|
```
|
|
276
384
|
|
|
385
|
+
The kit carries every optional dependency by default - the live ports
|
|
386
|
+
(asyncua, paho-mqtt, pymodbus, pyserial), matplotlib, xlrd and the PyQt6
|
|
387
|
+
desktop window - so `gea sbom` from an installed kit lists all of them as
|
|
388
|
+
installed; and `report-samples/`, one rendered example of every report.
|
|
389
|
+
|
|
277
390
|
At the site: unzip, `install.cmd`, `start-dashboard.cmd`; the browser opens
|
|
278
391
|
`http://127.0.0.1:8765/`. `verify.cmd` runs the acceptance gate from the
|
|
279
392
|
installed kit (the client's own evidence), `register-service.cmd` starts the
|
|
@@ -289,6 +402,8 @@ attaches the zips to the GitHub release of that tag.
|
|
|
289
402
|
gea/ the package: engines, record layer, reports, monitor, dashboard, cli, shell, acceptance suite,
|
|
290
403
|
workspace, jobs, service, patches and web/app.html (the served dashboard)
|
|
291
404
|
gea/catalog/ 52 public archive entries, each with a provenance file
|
|
405
|
+
gea/reference/ miniSEED records written by libmseed and an IRIS StationXML with evalresp's numbers, with provenance: the independent references
|
|
406
|
+
docs/report_samples/ one rendered example of every client report, from this build (tools/render_report_samples.py; SAMPLES.md names each command)
|
|
292
407
|
docs/ TESTER_GUIDE.md, REQUIREMENTS_MATRIX.md (the scope-of-work mirror that shaped the reports), examples/ (port configs),
|
|
293
408
|
SESSION_LOG.md (the working record, session by session),
|
|
294
409
|
commercial/ (pilot proposal, bench readiness, commercial use), HISTORY.md (the ship-by-ship record)
|
|
@@ -309,10 +424,22 @@ density anchors and Vp ranges with their citations (Telford, Geldart and
|
|
|
309
424
|
Sheriff; Schon). Every catalogue entry under `gea/catalog/` has a provenance
|
|
310
425
|
file naming its public source.
|
|
311
426
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
427
|
+
The gauge aging rate the drift evaluation uses is the instrument's published
|
|
428
|
+
drift specification, read from a cited datasheet (`gea/gauge_specs.py`), with
|
|
429
|
+
nothing added for temperature or pressure - above the rating the rate is
|
|
430
|
+
flagged, not changed. The program carries no aging model of its own, no
|
|
431
|
+
engineering constant that is not a datasheet number, and no claim about a
|
|
432
|
+
gauge beyond what its datasheet says; `tools/standalone_check.py` fails the
|
|
433
|
+
build on the names, phrases and numbers of the model that once stood there.
|
|
434
|
+
The seismic leg is textbook signal processing - Welch's PSD estimate, a
|
|
435
|
+
running-median floor, band power, great-circle distance - and the decoder is
|
|
436
|
+
checked against libmseed; the synthetic scene behind its self-test states its
|
|
437
|
+
own assumptions (body-wave spreading, a Q) and is labelled as a scene, not a
|
|
438
|
+
ground. Two statements the product carries on its own model cards: the datasheet
|
|
439
|
+
rate has no field validation on record against a gauge with a known history
|
|
440
|
+
(`gea bench` is the instrument for it), and five of the fourteen back-tested
|
|
441
|
+
strata quantities are NOT ACCEPTABLE at the 95 % target. Both are printed,
|
|
442
|
+
never claimed otherwise.
|
|
316
443
|
|
|
317
444
|
## Shipping
|
|
318
445
|
|
|
@@ -322,7 +449,9 @@ not exist anywhere, every version in `SHIP_LOG.md` must have its tag, `python -m
|
|
|
322
449
|
accept` must be green, `SHIP_MESSAGE.txt` must start with the tag; then commit, tag,
|
|
323
450
|
push, and the remote tag must be seen before SHIPPED is printed. `CHANGELOG.md` must carry a
|
|
324
451
|
section headed by the tag, and `tools/standalone_check.py` must report no findings. `-DryRun` runs every
|
|
325
|
-
check and changes nothing; `-NoPush` stops after the local tag.
|
|
452
|
+
check and changes nothing; `-NoPush` stops after the local tag. Before the gate, after the bump:
|
|
453
|
+
`python tools/render_report_samples.py` re-renders `docs/report_samples/` from the new build
|
|
454
|
+
(section AM fails on a stale build number).
|
|
326
455
|
|
|
327
456
|
## Publishing to PyPI
|
|
328
457
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Bench-Test Protocol - Does this gauge drift within its datasheet?
|
|
2
|
+
|
|
3
|
+
The program judges a measured drift trend against one number: the
|
|
4
|
+
instrument's published drift specification (percent of full scale per year,
|
|
5
|
+
from its datasheet). That number is a specification, not a measurement of
|
|
6
|
+
the gauge in your hand. This protocol is the measurement: one gauge, one
|
|
7
|
+
held setpoint, one reference standard, enough weeks, and a verdict written
|
|
8
|
+
down - the bench record the drift report cites as `NONE ON RECORD` until it
|
|
9
|
+
exists.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. What is being tested
|
|
14
|
+
|
|
15
|
+
For a gauge of serial number S with datasheet drift specification D (%FS/yr):
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
measured drift rate (|slope| of the gauge's reading against the reference, at a held setpoint)
|
|
19
|
+
compared with D, with the slope's own standard error
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The outcome is one of four words (section 5). A gauge that drifts faster
|
|
23
|
+
than its datasheet is a finding, not an error.
|
|
24
|
+
|
|
25
|
+
## 2. Apparatus
|
|
26
|
+
|
|
27
|
+
- The gauge under test, with its serial number and its calibration
|
|
28
|
+
certificate id (both go on the record; `gea certificates` files the
|
|
29
|
+
certificate).
|
|
30
|
+
- A temperature-controlled bath or pressure vessel holding a setpoint inside
|
|
31
|
+
the gauge's rating (the rating check applies on the bench too).
|
|
32
|
+
- A reference pressure standard of a class better than the specification
|
|
33
|
+
under test (deadweight tester or transfer standard), logged at the same
|
|
34
|
+
cadence, or at least checked weekly and logged.
|
|
35
|
+
- Logging at one reading per day or better into the program's historian CSV
|
|
36
|
+
format (a timestamp or `time_s` column and one pressure column per
|
|
37
|
+
instrument).
|
|
38
|
+
|
|
39
|
+
## 3. Duration - the program's own rule applies
|
|
40
|
+
|
|
41
|
+
The reconciler refuses trend verdicts below its minimum span
|
|
42
|
+
(`ReconcilerConfig.min_trend_span_years`, the 18-day rule), and the bench
|
|
43
|
+
analysis reads that floor from the same configuration: a shorter record is
|
|
44
|
+
`INSUFFICIENT_SPAN`, no verdict. The protocol asks for **at least 90 days**
|
|
45
|
+
at setpoint; 180 days or more when the specification is tight (a 0.01 %FS/yr
|
|
46
|
+
gauge at 30,000 psi full scale drifts 3 psi in a year - 0.75 psi in 90
|
|
47
|
+
days - so the reference and the logging must resolve tenths of a psi).
|
|
48
|
+
|
|
49
|
+
## 4. Procedure
|
|
50
|
+
|
|
51
|
+
1. File the certificate (`gea certificates --action add ...`) and record the
|
|
52
|
+
serial number.
|
|
53
|
+
2. Install the gauge and the reference at the setpoint; log continuously.
|
|
54
|
+
3. Weekly: verify the setpoint against the reference; do not adjust the gauge
|
|
55
|
+
under test. Log every intervention.
|
|
56
|
+
4. Export the gauge's series and the reference's series as historian CSVs.
|
|
57
|
+
5. Run:
|
|
58
|
+
|
|
59
|
+
gea bench --gauge-csv gauge.csv --reference-csv reference.csv --spec geoq177_30k --serial SN --certificate CERT --out bench_register.jsonl
|
|
60
|
+
|
|
61
|
+
The reference series is subtracted first (the setpoint's own wander is
|
|
62
|
+
not the gauge's drift). `--spec` names the datasheet preset or a JSON
|
|
63
|
+
datasheet of your own.
|
|
64
|
+
6. Keep the record: the JSON line appended to the register carries the fit,
|
|
65
|
+
the band, the datasheet source, the serial, the certificate and the verdict.
|
|
66
|
+
|
|
67
|
+
## 5. Analysis and verdict vocabulary
|
|
68
|
+
|
|
69
|
+
- The slope of the (gauge - reference) series is fitted by least squares;
|
|
70
|
+
its standard error comes from the residuals.
|
|
71
|
+
- A band of k sigma (default 2) is placed around the measured rate.
|
|
72
|
+
- `WITHIN_DATASHEET` - the whole band is at or below the specification.
|
|
73
|
+
- `EXCEEDS_DATASHEET` - the whole band is above the specification: this
|
|
74
|
+
gauge, at these conditions, drifts faster than its datasheet says. A
|
|
75
|
+
first-class outcome.
|
|
76
|
+
- `INSUFFICIENT_SPAN` - shorter than the 18-day floor; no verdict.
|
|
77
|
+
- `INSUFFICIENT_SNR` - the band straddles the specification; a longer span
|
|
78
|
+
or a quieter setpoint is needed; no verdict.
|
|
79
|
+
|
|
80
|
+
`gea bench --selftest` runs the arithmetic on synthetic series and labels
|
|
81
|
+
its output `SIMULATION_SELF_TEST`; it proves nothing about a physical gauge.
|
|
82
|
+
|
|
83
|
+
## 6. What the record changes
|
|
84
|
+
|
|
85
|
+
Nothing in the program's arithmetic changes with a bench result; the
|
|
86
|
+
datasheet rate stays the rate the reports use. What changes is the model
|
|
87
|
+
card's `field validation` line, which can cite the register once a gauge
|
|
88
|
+
with a known history has been run, and the reader's confidence in a
|
|
89
|
+
`DRIFT_CONSISTENT` label on that instrument. An `EXCEEDS_DATASHEET` record
|
|
90
|
+
is the reason to recalibrate, replace or re-rate that gauge, and to file
|
|
91
|
+
the result with its certificate.
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
"""gea
|
|
4
|
+
"""gea - GEA-Program: the downhole gauge monitoring program.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
user-facing settings are the two instrument trims (k_structural_trim,
|
|
14
|
-
phi_coupling_trim), never the constants. See README.md.
|
|
6
|
+
A described well (gradients or a real profile, a toolstring of cited
|
|
7
|
+
instruments), the data that comes back from it (files or live ports), and
|
|
8
|
+
the report family that judges the two against each other: data quality,
|
|
9
|
+
gauge drift against each instrument's datasheet aging rate, well tests,
|
|
10
|
+
alarms, shut-ins and build-ups, instruments and certificates, the monthly
|
|
11
|
+
service note. Every number on a report names the rule or the datasheet it
|
|
12
|
+
came from; the program adds no physics of its own.
|
|
15
13
|
|
|
16
14
|
Quick use (headless):
|
|
17
15
|
from gea import DownholeEngine, SimulatorConfig
|
|
@@ -19,18 +17,10 @@ Quick use (headless):
|
|
|
19
17
|
for _ in range(100): e.step()
|
|
20
18
|
print(e.summary()); e.export_csv("run.csv")
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
python -m gea.matplotlib_demo
|
|
24
|
-
python -m gea.qt6_downhole_app (pip install PyQt6)
|
|
20
|
+
The dashboard: gea workspace --path C:\\site --action init --name "Pad 3"; gea serve --workspace C:\\site
|
|
25
21
|
"""
|
|
26
22
|
|
|
27
|
-
from .
|
|
28
|
-
calculate_quartz_transducer_hpht_program,
|
|
29
|
-
canonical_suppression,
|
|
30
|
-
conventional_drift,
|
|
31
|
-
drift_comparison,
|
|
32
|
-
PROGRAM_MODEL_AVAILABLE,
|
|
33
|
-
)
|
|
23
|
+
from .gauge_aging import aging_rate, rate_psi_yr, accuracy_psi
|
|
34
24
|
from .downhole_engine import (
|
|
35
25
|
Sensor,
|
|
36
26
|
SimulatorConfig,
|
|
@@ -49,15 +39,11 @@ from .telemetry import (
|
|
|
49
39
|
TelemetryConfig,
|
|
50
40
|
TelemetryRecorder,
|
|
51
41
|
)
|
|
52
|
-
from .case_study import (
|
|
53
|
-
CaseStudyConfig,
|
|
54
|
-
case_study,
|
|
55
|
-
depth_sweep,
|
|
56
|
-
write_markdown,
|
|
57
|
-
)
|
|
58
42
|
from .gauge_specs import (
|
|
59
43
|
GaugeSpec,
|
|
60
44
|
GAUGE_SPECS,
|
|
45
|
+
DEFAULT_SPEC,
|
|
46
|
+
get_spec,
|
|
61
47
|
load_gauge_spec_json,
|
|
62
48
|
)
|
|
63
49
|
from .deviation import (
|
|
@@ -70,7 +56,7 @@ from .tool_library import (
|
|
|
70
56
|
TOOL_LIBRARY,
|
|
71
57
|
ToolString,
|
|
72
58
|
drift_model_for,
|
|
73
|
-
|
|
59
|
+
user_gauge_tool,
|
|
74
60
|
rating_check,
|
|
75
61
|
)
|
|
76
62
|
from .ports import (
|
|
@@ -109,6 +95,13 @@ from .well_assembler import (
|
|
|
109
95
|
from .gamma import (
|
|
110
96
|
find_gr_channels, shale_volume, formation_flags, gamma_report, gamma_entries,
|
|
111
97
|
)
|
|
98
|
+
from .seismic import (
|
|
99
|
+
Trace as SeismicTrace, read_mseed, write_mseed, read_sac, write_sac, read_any as read_seismic, fdsn_fetch, fdsn_stations,
|
|
100
|
+
welch_psd, spectrogram, persistent_lines, band_power,
|
|
101
|
+
)
|
|
102
|
+
from .seismic_detect import Source as SeismicSource, detectability_test, load_sources_csv, haversine_km, DRILLING_BAND_HZ
|
|
103
|
+
from .seismic_response import read_stationxml, remove_response, transfer as response_transfer, fdsn_stationxml
|
|
104
|
+
from .seismic_array import Sensor as SeismicSensor, load_sensors_csv, beam as array_beam, array_detectability, intersect_backazimuths, locate_from_lags
|
|
112
105
|
from .bench import (
|
|
113
106
|
bench_analysis, bench_selftest,
|
|
114
107
|
)
|
|
@@ -129,19 +122,17 @@ from .profile_catalog import (
|
|
|
129
122
|
read_pangaea_txt,
|
|
130
123
|
)
|
|
131
124
|
|
|
132
|
-
__version__ = "0.
|
|
125
|
+
__version__ = "0.6.0"
|
|
133
126
|
__all__ = [
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"PROGRAM_MODEL_AVAILABLE", "Sensor", "SimulatorConfig", "DownholeEngine",
|
|
127
|
+
"aging_rate", "rate_psi_yr", "accuracy_psi",
|
|
128
|
+
"Sensor", "SimulatorConfig", "DownholeEngine",
|
|
137
129
|
"WellProfile", "load_well_profile_csv", "make_sensor_string",
|
|
138
130
|
"ServiceLifeConfig", "ServiceLifeSimulator",
|
|
139
131
|
"TelemetryConfig", "TelemetryRecorder",
|
|
140
|
-
"
|
|
141
|
-
"GaugeSpec", "GAUGE_SPECS", "load_gauge_spec_json",
|
|
132
|
+
"GaugeSpec", "GAUGE_SPECS", "DEFAULT_SPEC", "get_spec", "load_gauge_spec_json",
|
|
142
133
|
"DeviationSurvey", "load_deviation_csv", "run_batch",
|
|
143
134
|
"ToolSpec", "TOOL_LIBRARY", "ToolString", "drift_model_for",
|
|
144
|
-
"
|
|
135
|
+
"user_gauge_tool", "rating_check",
|
|
145
136
|
"LiveStream", "StreamChannel", "PortSpec", "PORT_REGISTRY",
|
|
146
137
|
"ingest", "read_historian_csv", "read_las", "register_port",
|
|
147
138
|
"Reconciler", "ReconcilerConfig", "auto_station_map",
|