def cosh_effective_mass_errors(self, dt, fast=True, period=None): if fast: logging.info("cosh emass computed fast method") period = self.period 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.acosh((asvc[t+dt] + asvc[t-dt])/(2.0*asvc[t])) if fast: emass[t] = guess else: emass[t] = newton.newton_cosh_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.cosh_effective_mass(dt, fast=fast, period=period) return {t: jackknife.errorbars(effmass_dt[t], jkemassobj.get(time=t)) for t in self.times[dt:-dt]}
def cosh_effective_mass(self, dt, fast=True, period=None): if fast: logging.info("cosh 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.acosh((asv[t+dt] + asv[t-dt])/(2.0*asv[t])) if fast: emass[t] = guess else: emass[t] = newton.newton_cosh_for_m(t,t+dt,asv, guess, T) except ValueError: logging.debug("invalid argument to acosh, 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
def plot(cors, funct, time_starts, time_ends, averages, stds, chi, options): import plot_helpers import newton dt = 1 fig = plt.figure() corplots = {} corplots[0] = plt.subplot(221) corplots[1] = plt.subplot(222) emassplots = {} emassplots[0] = plt.subplot(223) emassplots[1] = plt.subplot(224) for i in [0,1]: corplots[i].errorbar(cors[i].times, cors[i].average_sub_vev().values(), yerr=cors[i].jackknifed_errors().values(), fmt='o') emass = cors[i].periodic_effective_mass(dt, fast=False, period=options.period) emass_errs = cors[i].periodic_effective_mass_errors(dt, fast=False).values() emassplots[i].errorbar(emass.keys(), emass.values(), yerr=emass_errs, fmt='o') fn = funct.individual(Nt=options.period) for i in [0, 1]: #X = np.array(cors[i].times) X = np.linspace(time_starts[i], time_ends[i]) X = np.arange(time_starts[i], time_ends[i]+1, 1) Xe = np.arange(time_starts[i], time_ends[i], 1) Y = fn.formula((averages[0], averages[i+1]), X) Ydt = fn.formula((averages[0], averages[i+1]), X+dt) corplots[i].plot(X, Y) guess = (1.0 / float(dt)) * np.log(Y/Ydt) fitemass = {} Yd = dict(enumerate(Y, start=time_starts[i])) guess = dict(enumerate(guess, start=time_starts[i])) for t in range(time_starts[i], time_ends[i]): fitemass[t] = newton.newton_cosh_for_m(t, t+dt, Yd, guess[t], options.period) emassplots[i].plot(fitemass.keys(),fitemass.values()) if options.output_stub: filestub = options.output_stub logging.info("Saving plot to {}".format(filestub+".png")) fig.set_size_inches(18.5, 10.5) plt.savefig(filestub+".png") else: plt.show()