From b60e1c2232d9f8e187ecb877b323154445b991f6 Mon Sep 17 00:00:00 2001
From: Aaron LI <aly@aaronly.me>
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(-)

(limited to 'fg21sim/extragalactic/clusters')

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