# Sampling from the Blow up Measure

This page contains the code for the experiments in Table 3 for the Blow up measure

`BlowUpMeasure.m`

```// We list all the partitions of 6 and the corresponding lines-counts.

partitionCounts := [[[6],                                       [0]      ],
[[5,1],                                 [2]      ],
[[4, 2 ],                               [1]      ],
[[4, 1, 1],                     [5]      ],
[[3, 3],                                [0]      ],
[[3, 2, 1],                     [3]      ],
[[3, 1, 1, 1],                  [9]      ],
[[2, 2, 2],                     [3]      ],
[[2, 2, 1, 1],                  [7]      ],
[[2, 1, 1, 1, 1],               [15] ],
[[1, 1, 1, 1, 1, 1],    [27]]];

// The function randomPolynomial(p,N) which gives a random polynomial of degree 6.

function randomPolynomial(p,N)

_<x> := PolynomialRing(K);

listCoef := [0..p^(N+1)-1];

randomPoly:= 0*x;

for i in  [0..6] do
coef := Random(listCoef);
randomPoly :=  randomPoly +  coef * x^i;
end for;

return randomPoly;

end function;

// The function howManyLines(g) which computes the number of lines on the cubic surface defined by the roots of a given polynomial of degree 6.

function howManyLines(g)

c := -1;

try  F := Factorization(g);

part := Reverse( Sort([Degree(factor[1]) : factor in F ]) );

for j in partitionCounts do
if j[1] eq part then
c := j[2][1];
end if;
end for;

catch e c := -1;
end try;

return c;

end function;

//We determine the distribution of the lines-counts using lineCounts(p,N,M) for M polynomials.

function lineCounts(p,N,M)

counts := [0 : j in [-1..27]];

c := -1;

for i in [1..M] do

if (i mod 1000) eq 0 then
print i;
end if;

g := randomPolynomial(p,N);
c := howManyLines(g);

counts[c+2] := counts[c+2] + 1;

while c eq -1 do
g := randomPolynomial(p,N);
c := howManyLines(g);
counts[c+2] := counts[c+2] + 1;
end while;

end for;

return counts;

end function;
```