Selectivity curves¶

This file demonstrates the use of Selectivity curves

Import packages¶

In [1]:
import numpy as np
import pandas as pd
import sys
import os
import matplotlib.pyplot as plt
import gstlearn as gl
import gstlearn.plot as gp
import gstlearn.document as gdoc

gdoc.setNoScroll()

Reading the Grid file

In [2]:
filename = gdoc.loadData("Selectivity", "Grid_100.ascii")
db100 = gl.DbGrid.createFromNF(filename)
db100.display()
Data Base Grid Characteristics
==============================

Data Base Summary
-----------------
File is organized as a regular grid
Space dimension              = 2
Number of Columns            = 4
Total number of samples      = 100

Grid characteristics:
---------------------
Origin :      0.000     0.000
Mesh   :      1.000     1.000
Number :         10        10

Variables
---------
Column = 0 - Name = rank - Locator = NA
Column = 1 - Name = x1 - Locator = x1
Column = 2 - Name = x2 - Locator = x2
Column = 3 - Name = z1 - Locator = z1
 

Plotting the grid of samples

In [3]:
gp.setDefaultGeographic(xlim=[-1,10],ylim=[-1,10])
gp.printDefault()
Non geographical defaults:
- Figure dimensions = [5, 5]
- Limits along X (not defined)
- Limits along Y (not defined)
- Aspect = auto
Geographical defaults:
- Figure dimensions = [8, 8]
- Limits along X = [-1, 10]
- Limits along Y = [-1, 10]
- Aspect = 1
In [4]:
fig, ax = gp.initGeographic()
ax.raster(db100, name="z1")
ax.decoration(title="Data")
plt.show()
In [5]:
fig, ax = gp.initGeographic()
ax.literal(db100, name="z1")
ax.decoration(title="Data")
plt.show()
In [6]:
fig, ax = gp.init()
ax.histogram(db100, name="z1", bins=20)
ax.decoration(title="Data")
plt.show()
In [7]:
gl.dbStatisticsMono(db100,["z1"],[gl.EStatOption.MEAN, gl.EStatOption.VAR])
Out[7]:
         Mean   Variance
z1      1.531      1.615

Creating the grid of blocks by averaging samples 2 by 2

In [8]:
db25 = gl.DbGrid.create(nx=[5,5], dx=[2,2], x0=[0.5,0.5])
dum = gl.dbStatisticsOnGrid(db100, db25, gl.EStatOption.MEAN, namconv = gl.NamingConvention(""))
In [9]:
fig, ax = gp.initGeographic()
ax.raster(db25, name="z1")
ax.decoration(title="Blocks")
plt.show()
In [10]:
fig, ax = gp.initGeographic()
ax.literal(db25,name="z1")
ax.decoration(title="Blocks")
plt.show()
In [11]:
fig, ax = gp.init()
ax.histogram(db25, name="z1", bins=10)
ax.decoration(title="Blocks")
plt.show()
In [12]:
gl.dbStatisticsMono(db25, ["z1"],[gl.EStatOption.MEAN, gl.EStatOption.VAR])
Out[12]:
         Mean   Variance
z1      1.531      0.974

Creating a samping grid keeping only the upper right corner sample for each block

In [13]:
db25s = gl.DbGrid.create(nx=[5,5],dx=[2,2],x0=[0.5,0.5])
dum = gl.migrate(db100,db25s,name="z1",namconv=gl.NamingConvention(""))
In [14]:
fig, ax = gp.initGeographic()
ax.raster(db25s, name="z1")
ax.decoration(title="Sampling")
plt.show()
In [15]:
fig, ax = gp.initGeographic()
ax.literal(db25s,name="z1")
ax.decoration(title="Sampling")
plt.show()
In [16]:
gl.dbStatisticsMono(db25s, ["z1"],[gl.EStatOption.MEAN, gl.EStatOption.VAR])
Out[16]:
         Mean   Variance
z1      1.364      1.165

Using the Selectivity Curves¶

We compare the selectivity curves between Data and Blocks:

In [17]:
selectivity = gl.Selectivity(100)
table100 = selectivity.eval(db100, True)
table25  = selectivity.eval(db25,  True)
table25s = selectivity.eval(db25s, True)
In [18]:
table100.getColumnNames()
Out[18]:
('Z-Cut', 'T-estim', 'Q-estim', 'B-estim', 'M-estim')
  • Ore tonnage as a function of the cutoff
In [19]:
fig, ax = gp.init()
ax.table(table100,[1,0],color='blue')
ax.table(table25,[1,0],color='red')
ax.decoration(title="T(z)")
plt.show()
  • Metal as a function of the cutoff
In [20]:
fig, ax = gp.init()
ax.table(table100,[2,0],color='blue')
ax.table(table25,[2,0],color='red')
ax.decoration(title="Q(z)")
plt.show()
  • Recovered grade as a function of the cutoff
In [21]:
fig, ax = gp.init()
ax.table(table100,[4,0],color='blue')
ax.table(table25,[4,0],color='red')
ax.decoration(title="M(z)")
plt.show()
  • Conventional Benefit as a function of the cutoff
In [22]:
fig, ax = gp.init()
ax.table(table100,[3,0],color='blue')
ax.table(table25,[3,0],color='red')
ax.decoration(title="B(z)")
plt.show()
  • Metal as a function of Ore Tonnage
In [23]:
fig, ax = gp.init()
ax.table(table100,[2,1],color='blue')
ax.table(table25,[2,1],color='red')
ax.plot([0.,1.], [0.,db100.getMean("z1")], linestyle='dashed')
ax.decoration(title="Q(T)")
plt.show()

Regressions¶

Display regressions

In [24]:
fig, ax = gp.init()
ax.correlation(db25,namex="z1",namey="z1",db2=db25s, asPoint=True, diagLine=True, regrLine=True)
ax.decoration(ylabel="Blocks",xlabel="Samples",title="Block vs. Sample")
plt.show()
In [25]:
fig, ax = gp.init()
ax.correlation(db25s,namex="z1",namey="z1",db2=db25, asPoint=True, diagLine=True, regrLine=True)
ax.decoration(xlabel="Blocks",ylabel="Samples",title="Sample vs. Block")
plt.show()

Comparing selectivity curves¶

In [26]:
fig, ax = gp.init()
ax.table(table100,[2,1],color='blue')
ax.table(table25,[2,1],color='red')
ax.table(table25s,[2,1],color='green')
ax.plot([0.,1.], [0.,db100.getMean("z1")], linestyle='dashed')
ax.plot([0.,1.], [0.,db25s.getMean("z1")], linestyle='dashed')
ax.decoration(title="Q(T)")
plt.show()