function getMinus_semiStart(nSwitches, bVal, semiStart) result(minusWeight)
real(dp), intent(in) :: nSwitches, bVal
type(WeightData_t), intent(in) :: semiStart
real(dp) :: minusWeight
character(*), parameter :: this_routine = "getMinus_semiStart"
ASSERT(nSwitches >= 0.0_dp)
! change b value treatment, by just checking if excitations is
! technically possible if b == 0
minusWeight = semiStart%F * semiStart%zero + semiStart%G * semiStart%minus + &
nSwitches / max(1.0_dp, bval) * (semiStart%F * semiStart%plus + semiStart%G * semiStart%zero)
ASSERT(minusWeight >= 0.0_dp)
end function getMinus_semiStart