This whole block (`__init__` and `__call__`) seems kind of weird... you make `disperson0` unit'd, then get its unitless value, then reimpose units?  Is the intent to keep dispersion0 and delta_dispersion unitless?