Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

All the key steps for creating and validating a generic Reserves Model based on multiple block models, as well as instructions for mapping fields, adding variables and checking results, see below.

...

Creating new Reserves Model

  1. Click the New button to open the Reservable Models Generator window.

  2. Import your Block Model (for this tutorial start with “pit1a”).

    1. supported formats are:

      1. .csv

      2. .bmf (Vulcan)

      3. .bintab

      4. .dat (MineSight)

      5. .mdl (Surpac)

      6. .dat (Micromine)

...

3. Select “pit1a.csv” from your training dataset.

...

Once you complete an import, in the Reservable Model Generator window you’ll see:

  1. List of imported Block Models.

  2. All the fields contained in the imported Block Model listed on a right hand side, as well as feature to create and choose Custom Variable, that can be missing, but required for mapping to one of the fields.

  3. Default fields that every single Reserves model needs to have.

  4. Minimum and Maximum columns to clamp numbers by block to be >= Minimum and <= Maximum.

  5. Format selection column.

  6. Mapping fields to be populated.

  7. List of errors without resolving which you will not be able to generate your Reserves model.

  8. Row Parcel Mappings template.

  9. Buttons to Generate Reserves Model or Cancel changes made.

...

...

Default Fields Mapping

  • Once the block model has loaded, its header fields are listed in the Variables panel on the right.

  • To map variables to the fields you can:

    • manually type it in,

    • drag and drop,

    • double click.

  • X, Y and Z are blocks coordinates.

  • DX, DY and DX are blocks dimensions.

  • For the Volume field use the formula N("DX")*N("DY")*N("DZ").

    • For the DryTonnes field use the formula N("DX")*N("DY")*N("DZ")*N("SG").

    • For the WetTonnes field use the formula N("DX")*N("DY")*N("DZ")*N("SG")/0.95 or N("DX")*N("DY")*N("DZ")N("SG")(1+N("moi")).

  • Numeric fields use the N(“field”) syntax, and text fields use the T(“field”) syntax.

...

To add new fields use the Add Additive (Sum), Add Weight Averaged (Weighted) and Add Text (Class) Icons located in the top button ribbon. These add new rows into the field list.

...

  1. Add Additive - Sum fields - summed together, such as volumes, tonnes, and gold ounces.

  2. Add Weight Averaged - Weighted fields - weight-averaged by their parent field, such as iron percent or gold ppm.

  3. Add Text - Class fields - create subtotals of their parent fields, such as tonnes of Indicated / Inferred / Measured.

Since all grades are weight averaged by Dry tonnes, add three weight-averaged fields “Head_Fe”, “Head_Al” and “Head_Si” and map corresponding fields to them.

...

Different formulas and operators that you use to create Block Model fields expressions can be found in the RR. Block Model Formulas section.

  1. Type in a condition or the statement to test, which will be if N(“Fe”) is greater than (“>”) 60 return (“?”) “ore” otherwise (“:”) call it “waste”.

...

2. Regenerate Reserves Model (override existing one).

...

Normally Ore and Waste definitions are more complex and multiple grades and types inputs are required. In this case, use Custom Variable functionality to define different properties through the Script Editor. Scripting language is C#.

  1. Return to the Reservable Model Generator by pressing Edit.

  2. Press Custom Variables button at the top right corner to open Script Editor window.

...

There are multiple different types of variables you can create, mains are Text and Double. In this example we will practice to create a Text Variable.

...

5. Create variable called “fe” to reference all the grades within the Block Model. Use semicolon to close the formula . > double fe = context.N("Fe");

...

7. To check if the statement is correct, press the Compile button.

...

If you did made a mistake, the Compile Error window will pop up, showing a row and a column of an error with a short description of its type.

...

9. In the list of available variables on the right you will see a new variable CustomT("CustomTextVar") in bold, map it to the Parcel field.

...

11. Review grades in the Reserves Summary. You should see the same “Ore” and “Waste” parcels.

Creating more detailed on the grade binning variable

Advantage of creating Custom Variable via the Script Editor is that there it’s possible to add more complicated variables.

  1. Update the created variable by adding lines with a breakdown of parcels based on Fe content as shown below, or copy preconfigured formula from the RR. Block Model Custom Variables page.

...

2. Map this new custom variable to the Parcel field.

3. Regenerate Reserves Model.

4. Review grades in the Reserves Summary. Based on populated values, you should see “hg”, “mg”, “lg1”, “lg2”, “minw” and “w” parcels added.

...

Create more detailed on grade binning custom variable, consisting of two variables: Parcel (as shown above) and OreType, including Al and Si grades.

  1. Use nested “IF” statement, and if it doesn’t satisfy any of set grade bins parcel “waste” will be returned, or

    1. Copy and paste the code below.

Code Block
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Alastri.Scripting;
using Alastri.BlockModel.Engine.CustomVariables;
 
public class Parcel : ITextCustomVariable
{
    public string GetText(CustomVariablesContext context)
    {
        double fe = context.N("Fe");
         
        if(fe > 60)        return "hg";
        else if(fe > 58)   return "mg";
        else if(fe > 57.5) return "lg1";
        else if(fe > 56)   return "lg2";
        else if(fe > 50)   return "minw";
        else               return "w";
 
    }
}

public class OreType : ITextCustomVariable
{
    public string GetText(CustomVariablesContext context)
    {
        double fe = context.N("Fe");
        double al = context.N("Al");
        double si = context.N("Si");
         
        if(fe > 58)        
        {
            if     (si <= 6 && al <= 3) return "hg";
            else if(si >  6 && al <= 3) return "hghs";
            else if(si <= 6 && al >  3) return "hgha";
            else                        return "bg";
        }
        else if(fe > 55)   
        {
            return "bg";
        }
        else if(fe > 52) 
        {
            return "lg";
        }
        else if(fe > 50)   return "minw";
        else               return "w";
 
    }
}

...

3. You should see two new Custom Variables CustomT("Parcel") and CustomT("OreType"). Map in “OreType” to the Parcel field and generate new Reserves model.

...

Add extra fields to map variables available from your Block Model.

  1. Add a Sum (Add Additive icon) field - Fines_Volume - to calculate fines volume use inline formula N("DX")*N("DY")*N("DZ")*N("fines_pct").

  2. Add a Sum (Add Additive icon) field - Fines_Tonnes_Dry - to calculate dry tonnes of fines use inline formula N("DX")*N("DY")*N("DZ")*N("SG")*N("fines_pct").

  3. Add four Weight Averaged fields (Add Weight Averaged icon) - Fines_Fe, Fines_Al, Fines_Si, Fines_Pct - map corresponding numerical fields to them.

  4. Add a Sum (Add Additive icon) field - Fines_Tonnes_Wet- to calculate wet tonnes of fines use inline formula N("DX")*N("DY")*N("DZ")*N("SG")N("fines_pct")(1+N("moi")).

  5. Repeat for Lumps.

    1. You can use the Find and Replace functionality.

...

Use the Import Template button to populate preconfigured fields and mappings (available in your Sample Dataset folder).

...

For each of the imported Block Models fields are the same. Within the Reserves Model for each of the Models you are importing in you have to have the same structure (number of fields and fields themselves). If in source models different variables or different names are uses, you can change fields mapping, but not the fields.

Copying Mappings

  1. In “pit1a” Block Model table use <SHIFT> or <CTRL> buttons to select all or multiple fields.

  2. Press the Copy Mappings icon at the top toolbar to copy selected mappings to the clipboard.

...

Pasting Mappings

  1. Navigate to the imported “pit2a” Block Model and multi select all the empty fields to be mapped with custom variables.

  2. Press Paste Mappings icon at the top toolbar to populate selected fields with the mapping imported.

...

3. Repeat for “pit3a” Block Model.

...