I think I was too quick in my previous answer. For some reason I missed that you have only signal and background in your examples

(4) is equivalent to `EqualNumEvents`

where average event weight is ~1 (unless very unbalanced classes).

(1) is a closely related version that where sum of *multiclass* event weights is 1 per class.

To exemplify this we can look at this mockup code which mimics the TMVA process.

```
import numpy as np
def norm(cs, mode='EqualNumEvents'):
if mode == 'EqualNumEvents':
c0 = cs[0]
class_weights = np.asarray([c0/c for c in cs])
elif mode == 'None':
class_weights = np.asarray([1.0 for c in cs])
return class_weights
# Signal: 100 evs,
# Bkg1 : 200 evs,
# Bkg2 : 300 evs.
x = np.asarray([100, 200, 300])
x1 = np.asarray([1 , 1 + 1])
x2 = np.asarray([1 , 1 + 1])
x3 = np.asarray([100, 1 + 1])
x4 = np.asarray([100, 100 + 100])
x5 = np.asarray([100, 100 + 100])
np.set_printoptions(formatter={'float': lambda x: f'{x:>3.0f}'})
print('Multiclass weights:', norm(x))
print('Multiclass effective events:', norm(x)*x)
print(f'x1 weights={norm(x1, mode="None")}, eff_evs={norm(x1, mode="None")*x1}')
print(f'x2 weights={norm(x2) }, eff_evs={norm(x2)*x2 }')
print(f'x3 weights={norm(x3) }, eff_evs={norm(x3)*x3 }')
print(f'x4 weights={norm(x4, mode="None")}, eff_evs={norm(x4, mode="None")*x4}')
print(f'x5 weights={norm(x5) }, eff_evs={norm(x5)*x5 }')
# Output
# Multiclass weights: [1. 0.5 0.33]
# Multiclass effective events: [100. 100. 100.]
#
# x1 weights=[1.0 1.0], eff_evs=[ 1.0 2.0]
# x2 weights=[1.0 0.5], eff_evs=[ 1.0 1.0]
# x3 weights=[1.0 50.0], eff_evs=[100.0 100.0]
# x4 weights=[1.0 1.0], eff_evs=[100.0 200.0] # <- Equivalent to multiclass EqualNumEvents
# x5 weights=[1.0 0.5], eff_evs=[100.0 100.0]
```

Cheers,

Kim