示例#1
0
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
示例#2
0
    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
示例#3
0
    # 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("------------")