def pdf(cls, mass, log_mode=True):
        """ PDF for the Kroupa IMF.

        Normalization is set over the mass range from 0.1 Msun to 100 Msun
        """
        log_mass = np.log10(mass)
        # From Eq 2
        mb = mbreak  = [0.08, 0.5] # Msun
        a = alpha = [0.3, 1.3, 2.3] # alpha

        # Normalization set from 0.1 -- 100 Msun
        norm = 0.27947743949440446

        b = 1./norm
        c = b * mbreak[0]**(alpha[1]-alpha[0])
        d = c * mbreak[1]**(alpha[2]-alpha[1])

        dn_dm  = b * (mass < 0.08) * mass**(-alpha[0])
        dn_dm += c * (0.08 <= mass) * (mass < 0.5) * mass**(-alpha[1])
        dn_dm += d * (0.5  <= mass) * mass**(-alpha[2])

        if log_mode:
            # Number per logarithmic mass range, i.e., dN/dlog(M)
            return dn_dm * (mass * np.log(10))
        else:
            # Number per linear mass range, i.e., dN/dM
            return dn_dm
def pdf ( cls , mass , log_mode = True ) : log_mass = np . log10 ( mass ) mb = mbreak = [ 0.08 , 0.5 ] a = alpha = [ 0.3 , 1.3 , 2.3 ] norm = 0.27947743949440446 b = 1. / norm c = b * mbreak [ 0 ] ** ( alpha [ 1 ] - alpha [ 0 ] ) d = c * mbreak [ 1 ] ** ( alpha [ 2 ] - alpha [ 1 ] ) dn_dm = b * ( mass < 0.08 ) * mass ** ( - alpha [ 0 ] ) dn_dm += c * ( 0.08 <= mass ) * ( mass < 0.5 ) * mass ** ( - alpha [ 1 ] ) dn_dm += d * ( 0.5 <= mass ) * mass ** ( - alpha [ 2 ] ) if log_mode : return dn_dm * ( mass * np . log ( 10 ) ) else : return dn_dm
PDF for the Kroupa IMF.

        Normalization is set over the mass range from 0.1 Msun to 100 Msun