Samples

This section contains a number of example quota frames with different structures.

Minimal

The minimal quota frame only sets a total target.

var quotaFrame = new QuotaFrameBuilder()
    .Target(100)
    .Build();

One Variable

A small quota frame containing only a single variable with targets.

var quotaFrame = new QuotaFrameBuilder()
    .Target(100)
    .VariableDefinition(
      variableName: "Gender",
      odinVariableName: "gender",
      levelNames: new [] { "Male", "Female" })
    .Structure(
      root => root.Variable("Gender")
      )
    .Build();
quotaFrame["Gender", "Male"].Target = 50;
quotaFrame["Gender", "Female"].Target = 50;

Two independent variables

This quota frame contains two independent variables.

var quotaFrame = new QuotaFrameBuilder()
    .Target(100)
    .VariableDefinition(
      variableName: "Gender",
      odinVariableName: "gender",
      levelNames: new [] { "Male", "Female" })
    .VariableDefinition(
      variableName: "Region",
      odinVariableName: "region",
      levelNames : new [] { "North", "South", "West", "East"})
    .Structure(
      root => {
        root.Variable("Gender");
        root.Variable("Region");
      })
    .Build();
quotaFrame["Gender", "Male"].Target = 50;
quotaFrame["Gender", "Female"].Target = 50;
quotaFrame["Region", "North"].Target = 25;
quotaFrame["Region", "South"].Target = 25;
quotaFrame["Region", "West"].Target = 25;
quotaFrame["Region", "East"].Target = 25;

Two interlocked variables

This quota frame contains two interlocked variables, allowing more fine-grained control over the distribution of respondents.

var quotaFrame = new QuotaFrameBuilder()
    .Target(200)
    .VariableDefinition(
      variableName: "Gender",
      odinVariableName: "gender",
      levelNames: new [] { "Male", "Female" })
    .VariableDefinition(
      variableName: "Region",
      odinVariableName: "region",
      levelNames : new [] { "North", "South", "West", "East"})
    .Structure(
      root => root.Variable("Gender", gender =>
        gender.Variable("Region")
        )
      )
    .Build();
quotaFrame["Gender", "Male"].Target = 100;
quotaFrame["Gender", "Male"]["Region", "North"].Target = 25;
quotaFrame["Gender", "Male"]["Region", "South"].Target = 25;
quotaFrame["Gender", "Male"]["Region", "West"].Target = 25;
quotaFrame["Gender", "Male"]["Region", "East"].Target = 25;

quotaFrame["Gender", "Female"].Target = 100;
quotaFrame["Gender", "Female"]["Region", "North"].Target = 25;
quotaFrame["Gender", "Female"]["Region", "South"].Target = 25;
quotaFrame["Gender", "Female"]["Region", "West"].Target = 25;
quotaFrame["Gender", "Female"]["Region", "East"].Target = 25;