Sorry – you posted 2 figured and asked if it was DGP1 or DGP2. The scenario should be like DGP2 in principle.
The figure above is what I get from my simulations with a fixed fraction of 0.5 (as you said how you locked it).
See below
background_rate = 1e-4
signal_rate=5e-2
simulated_data = pd.DataFrame(
data = [ss.norm.rvs(loc = 10_000, scale = 1_500, size = 500)],
index = ["N"]
).T
simulated_data["N"] = simulated_data["N"].astype(int)
simulated_data["sample_type"] = [np.random.randint(2) for i in range(len(simulated_data))]
simulated_data["fraction"] = 0.5#ss.uniform.rvs(size=500)
simulated_data["background_counts"] = ss.binom.rvs(n=simulated_data["N"],p=background_rate)
simulated_data["non_fractional_signal_counts"] = ss.binom.rvs(n=simulated_data["N"],p=signal_rate)
cnd = simulated_data["sample_type"] == 0
simulated_data.loc[cnd,"non_fractional_signal_counts"] = 0
simulated_data["signal_counts"] = simulated_data["non_fractional_signal_counts"]*simulated_data["fraction"]
simulated_data["observed_counts"] = simulated_data["signal_counts"] + simulated_data["background_counts"]*(1-simulated_data["fraction"])
simulated_data["observed_counts"] = simulated_data["observed_counts"].astype(int)
for col in simulated_data:
plt.figure(figsize=(7,5))
sns.histplot(simulated_data[col])