From b60e1c2232d9f8e187ecb877b323154445b991f6 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Tue, 29 Jan 2019 15:59:17 +0800 Subject: clusters/formation: Move history() to mergertree.get_history() --- fg21sim/extragalactic/clusters/formation.py | 33 ++------------------- fg21sim/extragalactic/clusters/mergertree.py | 43 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/fg21sim/extragalactic/clusters/formation.py b/fg21sim/extragalactic/clusters/formation.py index 65e32b6..dc39b62 100644 --- a/fg21sim/extragalactic/clusters/formation.py +++ b/fg21sim/extragalactic/clusters/formation.py @@ -17,14 +17,13 @@ References """ import logging -import operator as op import numpy as np import scipy.integrate import scipy.special import scipy.optimize -from .mergertree import MergerTree +from .mergertree import MergerTree, get_history from ...share import COSMO @@ -256,14 +255,10 @@ class ClusterFormation: def history(self, mtree=None, merger_only=False): """ - Extract and return all the formation events, e.g., merger and - accretion. + Extract all the formation history (merger and accretion events). Parameters ---------- - mtree : `~MergerTree`, optional - The simulated merger tree from which to extract the history. - Default: ``self.mtree`` merger_only : bool, optional If ``True``, only extract the merger events. @@ -275,29 +270,7 @@ class ClusterFormation: """ if mtree is None: mtree = self.mtree - - evlist = [] - for main, sub in mtree.itermain(): - z, age, M_main = op.itemgetter("z", "age", "mass")(main) - if sub: - # merger - M_sub = sub["mass"] - R_mass = M_main / M_sub - else: - # accretion - if merger_only: - continue - M_sub, R_mass = None, None - - evlist.append({ - "z": z, - "age": age, - "M_main": M_main, - "M_sub": M_sub, - "R_mass": R_mass, - }) - - return evlist + return get_history(mtree=mtree, merger_only=merger_only) def mergers(self, mtree=None): """ diff --git a/fg21sim/extragalactic/clusters/mergertree.py b/fg21sim/extragalactic/clusters/mergertree.py index 609dbee..1df7b2f 100644 --- a/fg21sim/extragalactic/clusters/mergertree.py +++ b/fg21sim/extragalactic/clusters/mergertree.py @@ -6,6 +6,7 @@ Merger tree that represents the merging history of a cluster using the binary tree data structure. """ +import operator as op import logging from ...utils.io import pickle_dump, pickle_load @@ -105,6 +106,48 @@ def read_mtree(infile): return mtree +def get_history(mtree, merger_only=False): + """ + Extract all the formation history (merger and accretion events). + + Parameters + ---------- + mtree : `~MergerTree` + The simulated merger tree from which to extract the history. + Default: ``self.mtree`` + merger_only : bool, optional + If ``True``, only extract the merger events. + + Returns + ------- + evlist : list[event] + List of events with each element being a dictionary of the + event properties. + """ + evlist = [] + for main, sub in mtree.itermain(): + z, age, M_main = op.itemgetter("z", "age", "mass")(main) + if sub: + # merger + M_sub = sub["mass"] + R_mass = M_main / M_sub + else: + # accretion + if merger_only: + continue + M_sub, R_mass = None, None + + evlist.append({ + "z": z, + "age": age, + "M_main": M_main, + "M_sub": M_sub, + "R_mass": R_mass, + }) + + return evlist + + def show_mtree(mtree): """ Trace the main cluster and show its formation history. -- cgit v1.2.2