def test_hyd_load_hyd_abn_no_dum(self): name = 'u50fenv' path = '/home/bakl/Sn/my/papers/18/fischer/model' # eve = StellaHydAbn(name, path=path).load_hyd() eve = sn_eve.load_hyd_abn(name, path=path, is_dum=False) self.assertTrue(eve.is_set('Rho'), "hyd-file have not been loaded: %s" % name)
def test_hyd_load(self): name = 'm030307mhh' path = join(dirname(abspath(__file__)), 'data', 'stella') # eve = StellaHydAbn(name, path=path).load_hyd() eve = sn_eve.load_hyd_abn(name, path=path) self.assertTrue(eve.is_set('Rho'), "hyd-file have not been loaded: %s" % name)
def test_hyd_abn_load(self): name = 'm030307mhh' path = join(dirname(abspath(__file__)), 'data', 'stella') eve = sn_eve.load_hyd_abn(name, path=path) self.assertTrue(eve.nzon > 0, "Zones numbers should be more 0 [%d]." % eve.nzon)
def test_abn_write(self): name = 'm030307mhh' path = join(dirname(abspath(__file__)), 'data', 'stella') eve = sn_eve.load_hyd_abn(name, path=path) fname = 'tmp.abn' res = eve.write_abn(fname) self.assertTrue(res, "Fail to write in %s" % fname)
def get_eve(self, name=None, path=None, is_hyd_abn=False, **kwargs): from pystella.model import sn_eve if name is None: name = self.Name if path is None: path = self.Path if is_hyd_abn: eve = sn_eve.load_hyd_abn(name, path, **kwargs) else: eve = sn_eve.load_rho(os.path.join(path, name + '.rho')) return eve
def test_presn_reshape(self): name = 'u50fenv' path = '/home/bakl/Sn/my/papers/18/fischer/model' eve = sn_eve.load_hyd_abn(name, path=path, is_dum=False) # for same size must be the same evenew = eve.reshape(nz=eve.nzon) self.assertEqual( evenew.nzon, eve.nzon, "Reshape PreSn: you have {} zone, but it should be {}".format( eve.nzon, eve.nzon)) # todo check range for Rho, V, T for k in (0, -1): self.assertAlmostEqual( eve.m[k] / evenew.m[k], 1., msg= "Mass PreSn: you have the first zone where old mass {} = new {}" .format(eve.m[k], evenew.m[k])) self.assertAlmostEqual( eve.r[k] / evenew.r[k], 1., msg= "Radius PreSn: you have the last zone where old r {} = new {}". format(eve.r[k], evenew.r[k])) self.assertAlmostEqual( eve.rho[k] / evenew.rho[k], 1., msg= "Density PreSn: you have the last zone where old rho {} = new {}" .format(eve.rho[k], evenew.rho[k])) nzon = 500 nstart = 309 evenew = eve.reshape(nz=nzon, start=nstart, end=None) self.assertEqual( evenew.nzon, nstart + nzon, "Reshape PreSn: you have {} zone, but it should be {}".format( eve.nzon, nstart + nzon)) evenew.plot_chem() plt.show()
def test_presn_zone_reduce(self): name = 'u50fenv' path = '/home/bakl/Sn/my/papers/18/fischer/model' # eve = StellaHydAbn(name, path=path).load_hyd() eve = sn_eve.load_hyd_abn(name, path=path, is_dum=False) # evenew = eve.zone_reduce(diff=1.005, start=110, end=-20) evenew = eve.zone_reduce(by='M', diff=1.01, start=309, end=-100) ii = np.arange(evenew.nzon) if not np.all(np.diff(evenew.m) > 0.): print("Not np.all(np.diff(evenew.m) > 0.): {}".format( ii[np.diff(evenew.m) < 0.])) self.assertTrue(np.all(np.diff(evenew.m) > 0.), " Any M[i] < M[i+1]") self.assertTrue(np.all(np.diff(evenew.r) > 0.), " Any R[i] < R[i+1]") # plot plt.plot(evenew.m / ps.phys.M_sun, np.log10(evenew.rho), marker='d', ls='', label='eveinterp', linewidth=4) plt.plot(evenew.m / ps.phys.M_sun, np.log10(evenew.rho), ls='', marker='<', label='evenew', markersize='3') plt.plot(eve.m / ps.phys.M_sun, np.log10(eve.rho), ls='--', label='u50fenv', linewidth=2) plt.xlabel('M, [Msun]') plt.ylabel(r'$log_{10}(\rho)$') plt.legend(loc='best') plt.show()
def main(): import os import sys from itertools import cycle def get(arr, i, default): if i < len(arr): if a[i] != '*': return a[i] return default parser = get_parser() args, unknownargs = parser.parse_known_args() eve_prev = None markersize = 6 fig = None if args.path: pathDef = os.path.expanduser(args.path) else: pathDef = os.getcwd() # if args.elements: if '_' in args.elements: elements = list(sneve.eve_elements) excluded = args.elements.split(':') for e in excluded: if not e.startswith('_'): logger.error( 'For excluded mode all elements should be starts from _. Even element: ' + e) sys.exit(2) e = e[1:] if e not in sneve.eve_elements: logger.error('No such element: ' + e) sys.exit(2) elements.remove(e) else: elements = args.elements.split(':') for e in elements: if e not in sneve.eve_elements: logger.error('No such element: ' + e) sys.exit(2) # Set model names names = [] if args.input: for nm in args.input: names.append(nm[0]) # remove extension else: if len(unknownargs) > 0: names.append(unknownargs[0]) if len(names) == 0: # logger.error(" No data. Use key '-i' ") parser.print_help() sys.exit(2) if len(names) > 1: # special case markers_cycler = cycle(markers_style) lines_cycler = cycle(lines_style) else: markers_cycler = cycle([None]) lines_cycler = cycle(['-']) ax = None ax2 = None handles_nm = [] for nm in names: # print("Run eve-model %s" % nm) path, fullname = os.path.split(nm) if len(path) == 0: path = pathDef # print("Run eve-model %s in %s" % (name, path)) if fullname.endswith('hyd') or fullname.endswith('abn'): name = fullname.replace('.hyd', '') # remove extension name = name.replace('.abn', '') # remove extension try: # With header eve = sneve.load_hyd_abn(name=name, path=path, is_dm=False, is_dum=args.is_dum) except ValueError: # No header eve = sneve.load_hyd_abn(name=name, path=path, is_dm=False, is_dum=args.is_dum, skiprows=0) else: name = fullname.replace('.rho', '') # remove extension rho_file = os.path.join(path, name + '.rho') eve = sneve.load_rho(rho_file) if args.reshape is not None: a = args.reshape.split(':') nz, axis, xmode = get(a, 0, eve.nzon), get(a, 1, 'M'), get(a, 2, 'resize') # rlog start, end = get(a, 3, 0), get(a, 4, None) kind = get(a, 5, 'np') start = int(start) if end is None or end.upper() in 'NONE': end = None if end is not None: end = int(end) nz = int(nz) print(f'Resize: before Nzon={eve.nzon}') print( f'Resize parameters: nznew= {nz} axis={axis} xmode={xmode} ' f'start= {start} end= {end} kind= {kind}') print("The element masses: before Resize") print_masses(eve) eve = eve.reshape(nz=nz, axis=axis, xmode=xmode, start=start, end=end, kind=kind) eve.chem_norm() # eve = eve_resize print(f'Resize: after Nzon={eve.nzon}') print("The element masses: after Resize") print_masses(eve) # Boxcar if args.box is not None: is_info = False s = args.box.split(':') dm, n = float(s[0]), int(s[1]) if len(s) == 3: is_info = bool(s[2]) print(f'Running boxcar average: dm= {dm} Msun Repeats= {n}') print("The element masses: Before boxcar") print_masses(eve) eve_box = eve.boxcar(box_dm=dm, n=n, el_included=elements, is_info=is_info) print("The element masses: After boxcar") print_masses(eve_box) eve, eve_prev = eve_box, eve # Smooth if args.smooth is not None: is_info = False s = args.smooth.split(':') window_length, polyorder = int(s[0]), int(s[1]) mode = 'interp' if len(s) == 3: mode = s[2] if len(s) == 4: is_info = True print( f'Running Savitzky-Golay filter to Rho: ' f'window_length= {window_length} Msun polyorder= {polyorder} mode= {mode}' ) print("The element masses: Before smoothing") print_masses(eve, is_el=is_info) eve_smooth = eve.smooth(window_length=window_length, polyorder=polyorder, mode=mode, is_info=is_info) print("The element masses: After smoothing") print_masses(eve_smooth, is_el=is_info) eve, eve_prev = eve_smooth, eve if args.write_to: fname = os.path.expanduser(args.write_to) # fname = os.path.join(path, name) # f = fname + '.eve.abn' fname = fname.replace('.rho', '') f = fname + '.abn' if eve.write_abn(f, is_header=True): print(" abn has been saved to {}".format(f)) else: print("Error with abn saving to {}".format(f)) # f = fname + '.eve.hyd' f = fname + '.hyd' if eve.write_hyd(f): print(" hyd has been saved to {}".format(f)) else: print("Error with hyd saving to {}".format(f)) continue marker = next(markers_cycler) ls = next(lines_cycler) if args.is_structure: fig = eve.plot_structure(elements=elements, title=name, ylimChem=(1e-8, 1.)) else: if args.is_chem: # print "Plot eve-model %s" % name ax = eve.plot_chem(elements=elements, ax=ax, x=args.x, ylim=(1e-8, 1.), marker=marker, markersize=markersize, leg_loc='lower center') if eve_prev is not None: eve_prev.plot_chem(elements=elements, ax=ax, x=args.x, ylim=(1e-8, 1.), marker=marker, markersize=max(1, markersize - 2), alpha=0.5, leg_loc='lower center') # ax.set_title('{}: before boxcar'.format(eve_prev.Name)) if args.rho: if args.is_chem: if ax2 is None: ax2 = ax.twinx() ax2.set_ylabel(r'$\rho, [g/cm^3]$ ') else: ax2 = ax ax2 = eve.plot_rho(x=args.x, ax=ax2, ls=ls, marker=marker) if eve_prev is not None: eve_prev.plot_rho(x=args.x, ax=ax2, ls=ls, markersize=max(1, markersize - 2), alpha=0.5) else: ls = 'None' handle = mlines.Line2D([], [], color='black', marker=marker, markersize=markersize, label=name, linestyle=ls) handles_nm.append(handle) if len(names) > 1: if ax2 is None: ax2 = ax.twinx() ax2.legend(handles=handles_nm, loc=4, fancybox=False, frameon=False) if args.is_verb: m_tot = 0. m_ni56 = 0. print('{:22s}: '.format(eve.Name)) for n, m in eve.mass_tot_el().items(): m_tot += m print(f'{n} {m/phys.M_sun:.3e}') print(' m_tot= {:6.3f} m_tot(El)= {:6.3f} '.format( eve.m_tot / phys.M_sun, m_tot / phys.M_sun)) # eve.chem_norm() # print('{:22s} after Norm '.format(eve.Name)) # for n, m in eve.mass_tot_el().items(): # m_tot += m # print(f'{n} {m/phys.M_sun:.3e}') # print(' m_tot= {:6.3f} m_tot(El)= {:6.3f} '.format(eve.m_tot/phys.M_sun, m_tot/phys.M_sun)) if not args.write_to: if args.save_plot: fsave = os.path.expanduser(args.save_plot) # if args.rho: # fsave = os.path.join(os.path.expanduser('~/'), 'rho_%s.pdf' % names[0]) # else: # fsave = os.path.join(os.path.expanduser('~/'), 'chem_%s.pdf' % names[0]) logger.info(" Save plot to %s " % fsave) if fig is None: fig = ax.get_figure() fig.savefig(fsave, bbox_inches='tight') else: plt.show()
def test_hyd_abn_load_H(self): name = 'm030307mhh' path = join(dirname(abspath(__file__)), 'data', 'stella') eve = sn_eve.load_hyd_abn(name, path=path) self.assertTrue( len(eve.el('H')) > 0, "abn-file have not been loaded: %s" % name)