Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -23,7 +23,7 @@ from sklearn.metrics import mean_squared_error # MAE removed
|
|
| 23 |
APP_NAME = "ST_TOC"
|
| 24 |
TAGLINE = "Total Organic Carbon Estimation Using AI"
|
| 25 |
|
| 26 |
-
FEATURES = ["AHT90
|
| 27 |
TARGET = "TOC"
|
| 28 |
PRED_COL = "TOC_Pred"
|
| 29 |
|
|
@@ -157,35 +157,50 @@ def read_book_bytes(b: bytes):
|
|
| 157 |
|
| 158 |
# ---- Canonical feature aliasing (accept legacy headers) ----
|
| 159 |
def _build_alias_map(canonical_features: list[str], target_name: str) -> dict:
|
|
|
|
| 160 |
def pick(expected, variants):
|
| 161 |
for v in variants:
|
| 162 |
-
if v in expected:
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
can_DT = pick(canonical_features, ["DT"
|
| 169 |
-
|
| 170 |
-
can_K = pick(canonical_features, ["K"
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
|
|
|
| 174 |
|
| 175 |
alias = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
"GR": can_GR, "Gamma Ray": can_GR, "GR (API)": can_GR,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
"RHOB": can_RHOB, "Bulk Density": can_RHOB, "RHOB (g/cc)": can_RHOB,
|
| 178 |
-
"
|
|
|
|
| 179 |
"TNPH": can_TNPH, "NPHI": can_TNPH, "TNPH (%)": can_TNPH,
|
| 180 |
-
"
|
|
|
|
| 181 |
"Th": can_Th, "Thorium": can_Th, "Th (ppm)": can_Th,
|
|
|
|
| 182 |
"Ur": can_Ur, "U": can_Ur, "U (ppm)": can_Ur,
|
| 183 |
-
"AHT90": can_AHT, "AHT_90": can_AHT, "AHT-90": can_AHT,
|
| 184 |
|
| 185 |
-
# Optional depth
|
| 186 |
-
"Depth
|
| 187 |
|
| 188 |
-
#
|
| 189 |
"TOC": target_name, "TOC (%)": target_name, "Total Organic Carbon": target_name,
|
| 190 |
}
|
| 191 |
return alias
|
|
@@ -576,7 +591,7 @@ except Exception as e:
|
|
| 576 |
st.error(f"Failed to load model: {e}")
|
| 577 |
st.stop()
|
| 578 |
|
| 579 |
-
# Prefer
|
| 580 |
meta = {}
|
| 581 |
meta_candidates = [MODELS_DIR / "toc_meta.json", MODELS_DIR / "meta.json"]
|
| 582 |
meta_path = next((p for p in meta_candidates if p.exists()), None)
|
|
|
|
| 23 |
APP_NAME = "ST_TOC"
|
| 24 |
TAGLINE = "Total Organic Carbon Estimation Using AI"
|
| 25 |
|
| 26 |
+
FEATURES = ["AHT90", "DT", "GR", "K", "RHOB", "TNPH", "Th", "Ur"]
|
| 27 |
TARGET = "TOC"
|
| 28 |
PRED_COL = "TOC_Pred"
|
| 29 |
|
|
|
|
| 157 |
|
| 158 |
# ---- Canonical feature aliasing (accept legacy headers) ----
|
| 159 |
def _build_alias_map(canonical_features: list[str], target_name: str) -> dict:
|
| 160 |
+
# Helper: prefer a canonical name from FEATURES if present
|
| 161 |
def pick(expected, variants):
|
| 162 |
for v in variants:
|
| 163 |
+
if v in expected:
|
| 164 |
+
return v
|
| 165 |
+
return variants[0] # fall back
|
| 166 |
+
|
| 167 |
+
# Canonical abbreviations (what we WANT in the DataFrame)
|
| 168 |
+
can_AHT = pick(canonical_features, ["AHT90"])
|
| 169 |
+
can_DT = pick(canonical_features, ["DT"])
|
| 170 |
+
can_GR = pick(canonical_features, ["GR"])
|
| 171 |
+
can_K = pick(canonical_features, ["K"])
|
| 172 |
+
can_RHOB = pick(canonical_features, ["RHOB"])
|
| 173 |
+
can_TNPH = pick(canonical_features, ["TNPH"])
|
| 174 |
+
can_Th = pick(canonical_features, ["Th"])
|
| 175 |
+
can_Ur = pick(canonical_features, ["Ur"])
|
| 176 |
|
| 177 |
alias = {
|
| 178 |
+
# Abbrev ↔ variants (map everything to the abbrev)
|
| 179 |
+
"AHT90": can_AHT, "AHT_90": can_AHT, "AHT-90": can_AHT,
|
| 180 |
+
"AHT90 (Average Hydrocarbon Tool 90° Phase)": can_AHT,
|
| 181 |
+
|
| 182 |
+
"DT": can_DT, "AC": can_DT, "DT (us/ft)": can_DT,
|
| 183 |
+
"DT (Delta-T Sonic Travel Time)": can_DT,
|
| 184 |
+
|
| 185 |
"GR": can_GR, "Gamma Ray": can_GR, "GR (API)": can_GR,
|
| 186 |
+
"GR (Gamma Ray)": can_GR,
|
| 187 |
+
|
| 188 |
+
"K": can_K, "Potassium": can_K, "K (%)": can_K,
|
| 189 |
+
|
| 190 |
"RHOB": can_RHOB, "Bulk Density": can_RHOB, "RHOB (g/cc)": can_RHOB,
|
| 191 |
+
"RHOB (Bulk Density)": can_RHOB,
|
| 192 |
+
|
| 193 |
"TNPH": can_TNPH, "NPHI": can_TNPH, "TNPH (%)": can_TNPH,
|
| 194 |
+
"TNPH (Thermal Neutron Porosity)": can_TNPH,
|
| 195 |
+
|
| 196 |
"Th": can_Th, "Thorium": can_Th, "Th (ppm)": can_Th,
|
| 197 |
+
|
| 198 |
"Ur": can_Ur, "U": can_Ur, "U (ppm)": can_Ur,
|
|
|
|
| 199 |
|
| 200 |
+
# Optional depth aliases (if you add later)
|
| 201 |
+
"Depth": "Depth", "Depth (ft)": "Depth", "DEPTH": "Depth", "MD (ft)": "Depth",
|
| 202 |
|
| 203 |
+
# Target aliases → canonical TARGET
|
| 204 |
"TOC": target_name, "TOC (%)": target_name, "Total Organic Carbon": target_name,
|
| 205 |
}
|
| 206 |
return alias
|
|
|
|
| 591 |
st.error(f"Failed to load model: {e}")
|
| 592 |
st.stop()
|
| 593 |
|
| 594 |
+
# Prefer toc-specific meta
|
| 595 |
meta = {}
|
| 596 |
meta_candidates = [MODELS_DIR / "toc_meta.json", MODELS_DIR / "meta.json"]
|
| 597 |
meta_path = next((p for p in meta_candidates if p.exists()), None)
|