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]}
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