Skip to content

Commit d202656

Browse files
committed
fix: code clenaing and lateral data update
1 parent 63525c1 commit d202656

File tree

3 files changed

+117
-99
lines changed

3 files changed

+117
-99
lines changed

LoopStructural/modelling/intrusions/intrusion_builder.py

Lines changed: 104 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ def __init__(
7777

7878
self.marginal_faults = self._feature.intrusion_frame.builder.marginal_faults
7979

80-
if self.marginal_faults is not None:
81-
for fault_i in self.marginal_faults.keys():
82-
marginal_fault = self.marginal_faults[fault_i].get('structure')
83-
self.intrusion_frame[2] = marginal_fault[0]
80+
# if self.marginal_faults is not None:
81+
# for fault_i in self.marginal_faults.keys():
82+
# marginal_fault = self.marginal_faults[fault_i].get('structure')
83+
# self.intrusion_frame[2] = marginal_fault[0]
8484

8585

8686
# self.growth_simulated_thresholds_grid = None
@@ -426,49 +426,35 @@ def set_data_for_lateral_thresholds(self):
426426

427427
if self.width_data[0] == False: # i.e., no lateral data for side L<0
428428
print(
429-
"Not enought lateral data for simulation of side L<0, Using roof/floor data to condition the conceptual model"
429+
"Not enought lateral data to constrain side L<0. Conceptual model will be used to constrain lateral extent"
430430
)
431431

432-
# -- try using vertical data to set some points and run interpolation
433-
# -- only use points outside the conceptual model
434-
vertical_data = pd.concat(
435-
[self.vertical_contact_data[0], self.vertical_contact_data[1]]
436-
)
437-
vertical_data.loc[
438-
:, ["conceptual_maxside", "conceptual_minside"]
439-
] = self.lateral_extent_model(
440-
lateral_contact_data=vertical_data,
441-
minP=minP,
442-
maxP=maxP,
443-
minS=minL,
444-
maxS=maxL,
445-
)
446-
447-
data_minL_temp = vertical_data[vertical_data["coord2"] < 0].copy()
448-
449-
data_for_min_L = data_minL_temp[data_minL_temp['coord2'] <= data_minL_temp['conceptual_minside']].loc[
450-
:,['X','Y','Z','coord0','coord1','coord2','conceptual_minside']].copy()
451-
data_for_min_L.loc[:,'l_residual'] = data_for_min_L.loc[
452-
:,'conceptual_minside'] - data_for_min_L.loc[:,'coord2']
453-
data_for_min_L.rename(columns={'conceptual_minside': 'l_conceptual'}, inplace = True)
454-
data_for_min_L.reset_index(inplace = True)
455-
data_for_min_L.drop_duplicates(
456-
subset = ['X','Y','Z','coord0','coord1','coord2','l_conceptual','l_residual'],
457-
inplace = True)
458-
459-
if len(data_for_min_L) < 3:
460-
# create random points along coordinate 1, and evaluate them in conceptual model. Residual = 0. Add points to dataframe containing input for sgs
461-
print(
462-
"Simulation of lateral side L<0: No enought roof/floor data to condition the conceptual model, lateral contact equivalent to conceptual"
463-
)
432+
random_p = pd.DataFrame(np.random.uniform(minP, maxP, 10), columns = ['coord1'])
433+
conceptual_l = self.lateral_extent_model(lateral_contact_data=random_p, minP=minP, maxP=maxP, minS=minL, maxS=maxL)
434+
data_for_min_L = pd.DataFrame(np.vstack([conceptual_l[:,1],random_p.loc[:,'coord1'].to_numpy()]).T, columns = ['l_conceptual','coord1'])
435+
data_for_min_L.loc[:,'l_residual'] = 0
436+
464437

465-
random_p = pd.DataFrame(np.random.uniform(minP, maxP, 10), columns = ['coord1'])
466-
conceptual_l = self.lateral_extent_model(lateral_contact_data=random_p, minP=minP, maxP=maxP, minS=minL, maxS=maxL)
467-
data_for_min_L_ = pd.DataFrame(np.vstack([conceptual_l[:,1],random_p.loc[:,'coord1'].to_numpy()]).T, columns = ['l_conceptual','coord1'])
468-
data_for_min_L_.loc[:,'l_residual'] = 0
438+
if len(self.lateral_contact_data[1]) > 0:
439+
data_minL = self.lateral_contact_data[1]
440+
data_conceptual_minL = self.lateral_extent_model(
441+
lateral_contact_data=data_minL,
442+
minP=minP,
443+
maxP=maxP,
444+
minS=minL,
445+
maxS=maxL,
446+
)
447+
data_residual_minL = (data_conceptual_minL[:, 1] - data_minL.loc[:, "coord2"]).to_numpy()
448+
data_for_min_L_ = data_minL.loc[:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]].copy()
449+
data_for_min_L_.loc[:, "l_residual"] = data_residual_minL
450+
data_for_min_L_.loc[:, "l_conceptual"] = data_conceptual_minL[:, 1]
451+
data_for_min_L_.reset_index(inplace=True)
469452
data_for_min_L = pd.concat([data_for_min_L, data_for_min_L_])
470453

471-
data_for_min_L.loc[:, "ref_coord"] = 0
454+
455+
data_for_min_L['l_residual'] = data_for_min_L['l_residual'].astype(float)
456+
data_for_min_L['coord1'] = data_for_min_L['coord1'].astype(float)
457+
472458

473459
else:
474460
# -- Side of intrusion with coord2<0 (l<0)
@@ -480,59 +466,42 @@ def set_data_for_lateral_thresholds(self):
480466
minS=minL,
481467
maxS=maxL,
482468
)
483-
data_residual_minL = (
484-
data_conceptual_minL[:, 1] - data_minL.loc[:, "coord2"]
485-
).to_numpy()
486-
data_for_min_L = data_minL.loc[
487-
:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]
488-
].copy()
469+
data_residual_minL = (data_conceptual_minL[:, 1] - data_minL.loc[:, "coord2"]).to_numpy()
470+
data_for_min_L = data_minL.loc[:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]].copy()
489471
data_for_min_L.loc[:, "l_residual"] = data_residual_minL
490472
data_for_min_L.loc[:, "l_conceptual"] = data_conceptual_minL[:, 1]
491-
492473
data_for_min_L.reset_index(inplace=True)
493-
data_for_min_L.loc[:, "ref_coord"] = 0
474+
# data_for_min_L.loc[:, "ref_coord"] = 0
494475

495476
if self.width_data[1] == False: # i.e., no lateral data for side L>0
496477
print(
497-
"Not enought lateral data for simulation of side L>=0, Using roof/floor data to condition the conceptual model"
498-
)
499-
500-
# -- try using vertical data to set some points and run SGS
501-
vertical_data = pd.concat(
502-
[self.vertical_contact_data[0], self.vertical_contact_data[1]]
503-
)
504-
vertical_data.loc[
505-
:, ["conceptual_maxside", "conceptual_minside"]
506-
] = self.lateral_extent_model(
507-
lateral_contact_data=vertical_data,
508-
minP=minP,
509-
maxP=maxP,
510-
minS=minL,
511-
maxS=maxL,
478+
"Not enought lateral data to constrain side L>0. Conceptual model will be used to constrain lateral extent"
512479
)
513480

514-
data_maxL_temp = vertical_data[vertical_data["coord2"] >= 0].copy()
515-
516-
data_for_max_L = data_maxL_temp[data_maxL_temp['coord2'] >= data_maxL_temp['conceptual_maxside']].loc[:,['X','Y','Z','coord0','coord1','coord2','conceptual_maxside']].copy()
517-
data_for_max_L.loc[:,'l_residual'] = data_for_max_L.loc[:,'conceptual_maxside'] - data_for_max_L.loc[:,'coord2']
518-
data_for_max_L.rename(columns={'conceptual_maxside': 'l_conceptual'}, inplace = True)
519-
data_for_max_L.reset_index(inplace = True)
520-
data_for_max_L.drop_duplicates(
521-
subset = ['X','Y','Z','coord0','coord1','coord2','l_conceptual','l_residual'],
522-
inplace = True)
523-
524-
if len(data_for_max_L) < 3:
525-
print(
526-
"Simulation of lateral side L>=0: No enought roof/floor data to condition the conceptual model, lateral contact equivalent to conceptual"
481+
random_p = pd.DataFrame(np.random.uniform(minP, maxP, 10), columns = ['coord1'])
482+
conceptual_l = self.lateral_extent_model(lateral_contact_data=random_p, minP=minP, maxP=maxP, minS=minL, maxS=maxL)
483+
data_for_max_L = pd.DataFrame(np.vstack([conceptual_l[:,0],random_p.loc[:,'coord1'].to_numpy()]).T, columns = ['l_conceptual','coord1'])
484+
data_for_max_L.loc[:,'l_residual'] = 0
485+
486+
if len(self.lateral_contact_data[2]) > 0:
487+
data_maxL = self.lateral_contact_data[2]
488+
data_conceptual_maxL = self.lateral_extent_model(
489+
lateral_contact_data=data_maxL,
490+
minP=minP,
491+
maxP=maxP,
492+
minS=minL,
493+
maxS=maxL,
527494
)
528-
# create random points along coordinate 1, and evaluate them conceptual model. Residual = 0. Add points to dataframe containing input for sgs
529-
random_p = pd.DataFrame(np.random.uniform(minP, maxP, 10), columns = ['coord1'])
530-
conceptual_l = self.lateral_extent_model(lateral_contact_data=random_p, minP=minP, maxP=maxP, minS=minL, maxS=maxL)
531-
data_for_max_L_ = pd.DataFrame(np.vstack([conceptual_l[:,0],random_p.loc[:,'coord1'].to_numpy()]).T, columns = ['l_conceptual','coord1'])
532-
data_for_max_L_.loc[:,'l_residual'] = 0
495+
data_residual_maxL = (data_conceptual_maxL[:, 0] - data_maxL.loc[:, "coord2"]).to_numpy()
496+
data_for_max_L_ = data_maxL.loc[:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]].copy()
497+
data_for_max_L_.loc[:, "l_residual"] = data_residual_maxL
498+
data_for_max_L_.loc[:, "l_conceptual"] = data_conceptual_maxL[:, 0]
499+
data_for_max_L_.reset_index(inplace=True)
533500
data_for_max_L = pd.concat([data_for_max_L, data_for_max_L_])
501+
534502

535-
data_for_max_L.loc[:, "ref_coord"] = 0
503+
data_for_max_L['l_residual'] = data_for_max_L['l_residual'].astype(float)
504+
data_for_max_L['coord1'] = data_for_max_L['coord1'].astype(float)
536505

537506
else:
538507
data_maxL = self.lateral_contact_data[2]
@@ -543,17 +512,54 @@ def set_data_for_lateral_thresholds(self):
543512
minS=minL,
544513
maxS=maxL,
545514
)
546-
data_residual_maxL = (
547-
data_conceptual_maxL[:, 0] - data_maxL.loc[:, "coord2"]
548-
).to_numpy()
549-
data_for_max_L = data_maxL.loc[
550-
:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]
551-
].copy()
515+
data_residual_maxL = (data_conceptual_maxL[:, 0] - data_maxL.loc[:, "coord2"]).to_numpy()
516+
data_for_max_L = data_maxL.loc[:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]].copy()
552517
data_for_max_L.loc[:, "l_residual"] = data_residual_maxL
553518
data_for_max_L.loc[:, "l_conceptual"] = data_conceptual_maxL[:, 0]
554-
555519
data_for_max_L.reset_index(inplace=True)
556-
data_for_max_L.loc[:, "ref_coord"] = 0
520+
# data_for_max_L.loc[:, "ref_coord"] = 0
521+
522+
523+
# check if roof or floor data outside of conceptual model.
524+
# if so, add as constraints to conceptual model.
525+
vertical_data = pd.concat([self.vertical_contact_data[0], self.vertical_contact_data[1]])
526+
vertical_data.loc[:, ["conceptual_maxside", "conceptual_minside"]] = self.lateral_extent_model(
527+
lateral_contact_data=vertical_data,
528+
minP=minP,
529+
maxP=maxP,
530+
minS=minL,
531+
maxS=maxL,
532+
)
533+
534+
data_minL_temp = vertical_data[vertical_data["coord2"] < 0].copy()
535+
data_for_min_L_ = data_minL_temp[data_minL_temp['coord2'] < data_minL_temp['conceptual_minside']].loc[:,['X','Y','Z','coord0','coord1','coord2','conceptual_minside']].copy()
536+
data_for_min_L_.loc[:,'l_residual'] = data_for_min_L_.loc[:,'conceptual_minside'] - data_for_min_L_.loc[:,'coord2']
537+
data_for_min_L_.rename(columns={'conceptual_minside': 'l_conceptual'}, inplace = True)
538+
data_for_min_L_.reset_index(inplace = True)
539+
data_for_min_L_.drop_duplicates(subset = ['X','Y','Z','coord0','coord1','coord2','l_conceptual','l_residual'], inplace = True)
540+
541+
if len(data_for_min_L_) >0:
542+
print('adding data from roof/floor to constrain L<0')
543+
data_for_min_L = pd.concat([data_for_min_L, data_for_min_L_])
544+
545+
data_maxL_temp = vertical_data[vertical_data["coord2"] >= 0].copy()
546+
data_for_max_L_ = data_maxL_temp[data_maxL_temp['coord2'] > data_maxL_temp['conceptual_maxside']].loc[:,['X','Y','Z','coord0','coord1','coord2','conceptual_maxside']].copy()
547+
data_for_max_L_.loc[:,'l_residual'] = data_for_max_L_.loc[:,'conceptual_maxside'] - data_for_max_L_.loc[:,'coord2']
548+
data_for_max_L_.rename(columns={'conceptual_maxside': 'l_conceptual'}, inplace = True)
549+
data_for_max_L_.reset_index(inplace = True)
550+
data_for_max_L_.drop_duplicates(
551+
subset = ['X','Y','Z','coord0','coord1','coord2','l_conceptual','l_residual'],
552+
inplace = True)
553+
554+
if len(data_for_max_L_) >0:
555+
print('adding data from roof/floor to constrain L>0')
556+
data_for_max_L = pd.concat([data_for_max_L, data_for_max_L_])
557+
558+
559+
data_for_min_L['l_residual'] = data_for_min_L['l_residual'].astype(float)
560+
data_for_min_L['coord1'] = data_for_min_L['coord1'].astype(float)
561+
data_for_max_L['l_residual'] = data_for_max_L['l_residual'].astype(float)
562+
data_for_max_L['coord1'] = data_for_max_L['coord1'].astype(float)
557563

558564
self.data_for_lateral_extent_calculation = [data_for_min_L, data_for_max_L]
559565

@@ -625,14 +631,18 @@ def set_data_for_vertical_thresholds(self):
625631
inputsimdata_maxG_.loc[:, "g_conceptual"] = data_conceptual_G_[:, 1]
626632
inputsimdata_maxG_.loc[:, "g_residual"] = 0
627633

628-
inputsimdata_maxG = pd.concat(inputsimdata_maxG, inputsimdata_maxG_)
634+
inputsimdata_maxG_complete = pd.concat([inputsimdata_maxG, inputsimdata_maxG_])
635+
636+
else:
637+
inputsimdata_maxG_complete = inputsimdata_maxG
638+
629639

630640
# --- growth simulation input data for intrusion network conditioning
631641
inputsimdata_inetG = inet_data.loc[
632642
:, ["X", "Y", "Z", "coord0", "coord1", "coord2"]
633643
].copy()
634644

635-
self.data_for_vertical_extent_calculation = [inputsimdata_maxG, inputsimdata_inetG]
645+
self.data_for_vertical_extent_calculation = [inputsimdata_maxG_complete, inputsimdata_inetG]
636646

637647
def build(
638648
self,

LoopStructural/modelling/intrusions/intrusion_feature.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,12 @@ def interpolate_lateral_thresholds(self, points_coord1):
120120
inputsimdata_maxL = self.builder.data_for_lateral_extent_calculation[1]
121121

122122
minL_inputdata_coord1 = inputsimdata_minL.coord1.to_numpy()
123-
minL_inputdata_coord2 = inputsimdata_minL.coord2.to_numpy()
123+
# minL_inputdata_coord2 = inputsimdata_minL.coord2.to_numpy()
124124
minL_inputdata_residual = inputsimdata_minL.l_residual.to_numpy()
125125
# minL_inputdata_conceptual = inputsimdata_minL.l_conceptual.to_numpy()
126126

127127
maxL_inputdata_coord1 = inputsimdata_maxL.coord1.to_numpy()
128-
maxL_inputdata_coord2 = inputsimdata_maxL.coord2.to_numpy()
128+
# maxL_inputdata_coord2 = inputsimdata_maxL.coord2.to_numpy()
129129
maxL_inputdata_residual = inputsimdata_maxL.l_residual.to_numpy()
130130
# maxL_inputdata_conceptual = inputsimdata_maxL.l_conceptual.to_numpy()
131131

@@ -322,7 +322,7 @@ def evaluate_value(self, points):
322322
)
323323

324324
if self.intrusion_frame.builder.marginal_faults is not None:
325-
c2_minside_threshold = np.zeros_like(intrusion_coord2_pts)
325+
c2_minside_threshold = thresholds[0] #np.zeros_like(intrusion_coord2_pts)
326326
c2_maxside_threshold = thresholds[1]
327327

328328

LoopStructural/modelling/intrusions/intrusion_frame_builder.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ def set_intrusion_steps_parameters(self):
342342
contact_0_mean = np.mean(contact_0_vals)
343343
contact_0_std = np.std(contact_0_vals)
344344

345-
if contact_0_std == 0:
345+
if contact_0_std == 0 or np.isnan(contact_0_std)==True:
346346
contact_0_std = std_backup
347347

348348
# contact 1
@@ -352,7 +352,7 @@ def set_intrusion_steps_parameters(self):
352352
contact_1_mean = np.mean(contact_1_vals)
353353
contact_1_std = np.std(contact_1_vals)
354354

355-
if contact_1_std == 0:
355+
if contact_1_std == 0 or np.isnan(contact_1_std)==True:
356356
contact_1_std = std_backup
357357

358358
if contact_0_mean <= contact_1_mean:
@@ -418,6 +418,14 @@ def set_intrusion_steps_parameters(self):
418418
series_values_mod = series_values
419419
step["unit_to_mean"] = np.nanmean(series_values_mod)
420420
step["unit_to_std"] = np.nanstd(series_values_mod)
421+
check_mean = step["unit_to_mean"]
422+
check_std = step["unit_to_std"]
423+
424+
if np.isnan(check_mean) == True:
425+
step["unit_to_mean"] = 40
426+
427+
if np.isnan(check_std) == True:
428+
step["unit_to_std"] = std_backup
421429

422430
if step["unit_to_std"] == 0:
423431
step["unit_to_std"] = std_backup

0 commit comments

Comments
 (0)