Beispiel #1
0
    def sinh_effective_mass_errors(self, dt, fast=True, period=None):
        if fast: logging.info("sinh emass computed fast method")

        T = self.period_check(period)

        jkasv = self.jackknife_average_sub_vev()
        jkemass = {}
        for cfg in self.configs:
            asvc = jkasv[cfg]
            emass = {}
            for t in self.times[dt:-dt]:
                if t in self.emass_skip_times:
                    emass[t] = 0.0
                    continue
                try:
                    guess = (1.0 / float(dt))*math.asinh((asvc[t+dt] + asvc[t-dt])/(2.0*asvc[t]))
                    if fast:
                        emass[t] = guess
                    else:
                        emass[t] = newton.newton_sinh_for_m(t,t+dt,asvc, guess, T)
                except ValueError:
                    #logging.debug("invalid argument to log, setting to zero")
                    emass[t] = 0.0
                except ZeroDivisionError:
                    logging.debug("div by zero, setting to zero")
                    emass[t] = 0.0
                except KeyError:
                    logging.error("index out of range")
            jkemass[cfg] = emass
        jkemassobj = configtimeobj.Cfgtimeobj.fromDataDict(jkemass)
        effmass_dt = self.sinh_effective_mass(dt, fast=fast, period=T)
        return {t: jackknife.errorbars(effmass_dt[t], jkemassobj.get(time=t))
                for t in self.times[dt:-dt]}
Beispiel #2
0
 def sinh_effective_mass(self, dt, fast=True, period=None):
     if fast: logging.info("sinh emass computed fast method")
     T = self.period_check(period)
     asv = self.average_sub_vev()
     emass = {}
     for t in self.times[dt:-dt]:
         if t in self.emass_skip_times:
             emass[t] = 0.0
             continue
         try:
             guess = (1.0 / float(dt))*math.asinh((asv[t+dt] + asv[t-dt])/(2.0*asv[t]))
             if fast:
                 emass[t] = guess
             else:
                 emass[t] = newton.newton_sinh_for_m(t,t+dt,asv, guess, T)
         except ValueError:
             logging.debug("invalid argument to asinh, setting to zero")
             emass[t] = float('NaN')
         except KeyError:
             logging.error("index out of range")
         except ZeroDivisionError:
             logging.error("Div by zero either dt:{} or average value sub vev {}".format(dt,asv[t]))
             emass[t] = float('NaN')
     return emass