ok I have found how the weights are computed. The article above slice the surface of the sphere by moving a plane, generating concentric rings.

another way follow the picture below:

View attachment 76774
And a third way is by intersecting 2 lunes, which is what they chooses.

if alpha and beta are two angles that defines the quadrangle, then. The area

is given by:

def areaQ(alpha_d, beta_d):

alpha = alpha_d * 2 * math.pi / 360

beta = beta_d * 2 * math.pi /360

gamma = math.acos(math.cos(alpha)*math.cos(beta))

A = math.atan(math.sin(beta)/math.tan(alpha))

B = math.atan(math.sin(alpha)/math.tan(beta))

C = math.acos(-math.cos(A)*math.cos(B)+math.sin(A)*math.sin(B)*math.cos(gamma))

S = (4*C-2*math.pi)

#print('gamma {} A {} B {} C {} S {}'.format(

# gamma*360/2/math.pi, A*360/2/math.pi, B*360/2/math.pi, C*360/2/math.pi, S))

return S

for the weights, they start at 0,0 with alpha=5 and beta=5

the next one is alpha=15, beta=15 (minus the first one);

a = [i*10+5 for i in range(0,9)] + [90]

wa = [areaQ(i, i) for i in a]

w = [wa[0]] + [wa

*-wa[i-1] for i in range (1,len(wa))]*

w[9] *= 2

ws = np.linalg.norm(w)

w /= ws/0.047133397655733274

print(w)
*which gives the weights from the standard from 0 to 90 degrees, after they are periodic.*
*[0.00060449 0.00473019 0.00895503 0.01238735 0.01498961 0.01686815 0.01816596 0.01900674 0.01947779 0.01962937]*

almost done.
*I still need to figure out why 0.047xx for normalizing And why x2 for 90degree. I have learnt plenty on spherical excess and other funny relations on a sphere which are known for a long time. If I was not on my iPad I would add some pictures of drawing that helps to understand alpha, beta and the various trigonometric equations.*