def FastDecayLimit(exp, x_in, Lim_in, Del_in, Del, geff, optype="V", CombMerge=1.1, useHeavyMeson=False): xeff, Limeff = MakeEffLimits(exp, x_in, Lim_in, geff, optype, Del_in) xi_cast, Lim_cast, Lim_cast_low = RecastDecayLimit(xeff, Limeff, Del_in, Del, exp, geff, optype, useHeavyMeson) # print("Full limits: " , exp, xi_cast,Lim_cast,Lim_cast_low) xi_cast_full, Lim_cast_full = uf.CombineUpDown(xi_cast, Lim_cast_low, Lim_cast, CombMerge) return xi_cast_full, Lim_cast_full
def recast(self, delrec, geff, optype, useHeavyMeson=False): # we define the recast based on the expected signal if self.channel == "decay": if self.model == "EFT": # For naive NoE based limits xi, EffLimtmp = de.GetNaiveDecayLimits(delrec, self.exp, 10, geff, optype) xi, EffLim, EffLim_low = de.RecastDecayLimit( xi, EffLimtmp, delrec, delrec, self.exp, geff, optype) xi_full, Lim_full = uf.CombineUpDown(xi, EffLim_low, EffLim, self.combthr) else: # Standard recasting case xi_full, Lim_full = de.FastDecayLimit( self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype, self.combthr, useHeavyMeson) elif self.channel == "heavymesondecay": if self.model == "EFT": xi, EffLimtmp = de.GetNaiveDecayLimits(delrec, self.exp, 10, geff, optype, True) xi_heavy, EffLim_heavy, EffLim_heavy_low = de.RecastDecayLimit( xi, EffLimtmp, delrec, delrec, self.exp, geff, optype, True) xi_full, Lim_full = uf.CombineUpDown(xi_heavy, EffLim_heavy_low, EffLim_heavy, self.combthr) else: xi_full, Lim_full = de.FastDecayLimit( self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype, self.combthr, useHeavyMeson) elif self.channel == "scattering": xi_full, Lim_full = de.FastScatLimit(self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype) elif self.channel == "monogam": xi_full, Lim_full = de.FastMonoPhoton(self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype) elif self.channel == "invisibledecayBmtoKm": if self.exp == "babar": xi_full, Lim_full = de.FastInvMesDecay("babar_BmtoKmnunu", delrec, geff, optype) elif self.exp == "belle2": xi_full, Lim_full = de.FastInvMesDecay("belle2_BmtoKmnunu", delrec, geff, optype) elif self.channel == "invisibledecayBmtoPim": xi_full, Lim_full = de.FastInvMesDecay("babar_BmtoPimnunu", delrec, geff, optype) elif self.channel == "invisibledecayB0toPi0": xi_full, Lim_full = de.FastInvMesDecay("belle_B0toPi0nunu", delrec, geff, optype) elif self.channel == "invisibledecayB0toK0": xi_full, Lim_full = de.FastInvMesDecay("belle_B0toK0nunu", delrec, geff, optype) elif self.channel == "monojet_down": xi_full, Lim_full = de.FastMonoJet(self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype) elif self.channel == "monojet_up": xi_full, Lim_full = de.FastMonoJet(self.exp, self.mx_ini, self.lim_ini, self.delini, delrec, geff, optype) elif self.channel == "invisibledecayKL0toPi0": if self.exp == "e391a": xi_full, Lim_full = de.FastInvMesDecay("e391a_KL0toPi0nunu", delrec, geff, optype) if self.exp == "na62": xi_full, Lim_full = de.FastInvMesDecay("na62_KL0toPi0nunu", delrec, geff, optype) elif self.channel == "invisibledecayPi0": xi_full, Lim_full = de.FastInvMesDecay("na62_pi0toinvisible", delrec, geff, optype) elif self.channel == "invisibledecayJPsi": xi_full, Lim_full = de.FastInvMesDecay("bes_JPsitoinvisible", delrec, geff, optype) elif self.channel == "invisibledecayUpsilon": xi_full, Lim_full = de.FastInvMesDecay("babar_Upsilontoinvisible", delrec, geff, optype) elif self.channel == "invisibledecayKptoPip": if self.exp == "na62": xi_full, Lim_full = de.FastInvMesDecay("na62_KptoPipa", delrec, geff, optype) elif self.exp == "e949": xi_full, Lim_full = de.FastInvMesDecay("e949_KptoPipa", delrec, geff, optype) elif self.channel == "cosmicrays": xi_full, Lim_low_full, Lim_high_full = de.FastCRLimit( "t2k", delrec, geff, optype) xi_full, Lim_full = uf.CombineUpDown(xi_full, Lim_low_full, Lim_high_full) elif self.channel == "low_cooling": xi_full, Lim_full = de.FastSN1987Limit(self.lim_inifull, delrec, geff, optype, False) elif self.channel == "high_cooling": xi_full, Lim_full = de.FastSN1987Limit(self.lim_inifull, delrec, geff, optype, True) else: print( "Channel selected: ", self.channel, " is not currently implemented. Possible choices: \n", "'decay' : faser, mathusla, ship, charm, seaquest, seaquest_Phase2, lsnd \n", "heavymesondecay : ship" "'scattering' : nova, miniboone, sbnd \n", "'missingE' : babar, belleII, atlas, lep \n", "'cosmicrays' : t2k (decay from cosmic ray showers into t2k), ", "cooling : for sn1987_low (pessimistic limit from SN1987 cooling), sn1987_high (optimistic limit from SN1987 cooling) ", "Invisible light meson decays: na62 (pi0decay and invisibledecayKptoPip) e949 (pi0decay and invisibledecayKptoPip), e391a (invisibledecayKL0toPi0)", "Invisible heavy meson decay: belle (invisibledecayB0toPi0 ,invisibledecayB0toK0) and belleII (invisibledecayBmtoKm)" ) xi_full = np.logspace(-3., 1., 30.) Lim_full = np.zeros(np.shape(xi_full)) return xi_full, Lim_full
# Let us use a bit more the inner functions and make the decay limits for a combined V and AV operator for CHARM exp = 'charm' Delini = 0.1 Delf = 5 xeff, Limeff = de.MakeEffLimits(exp, lim.charm_decay.mx_ini, lim.charm_decay.lim_ini, geffem, "V", Delini) xprod, Nprod = br.NProd(Delini, exp, geffem, "V") # xifV, EffLimV = de.ShiftLimDel(xprod, Nprod, xeff, Limeff, Delf, Delini, exp, "V", geffem) xeff, Limeff = de.MakeEffLimits(exp, lim.charm_decay.mx_ini, lim.charm_decay.lim_ini, geffAV, "AV", Delini) xprod, Nprod = br.NProd(Delini, exp, geffAV, "AV") # xifAV, EffLimAV = de.ShiftLimDel(xprod, Nprod, xeff, Limeff, Delf, Delini, exp, ("AV", "V"), (geffAV, geffem)) xif, EffLim = uf.CombineLimits((xifV, xifAV), (EffLimV, EffLimAV)) Dexp, Lexp, beamtype = de.GeomForExp( exp) # Need to clean the above functions EffLimFin_Low = de.ShortLamLimit(xif, Delf, EffLim, Dexp, Lexp, beamtype, (geffAV, geffem), ("AV", "V")) xi_charm, Lim_charm = uf.CombineUpDown(xif, EffLimFin_Low, EffLim, 1.1) print("----- Recasted limit on Lambda (in GeV) -------") print(np.dstack((xif, EffLimFin_Low, EffLim))) print("------------") print("----- Combined up and down limit on Lambda (in GeV) -------") print(np.dstack((xi_charm, Lim_charm))) print("------------")