Commits

Kanwei Li  committed 760d122

Make wiggle parsing more resiliant (fix UCSC truncation issues)

  • Participants
  • Parent commits 206f183

Comments (0)

Files changed (5)

File lib/bx/arrays/array_tree.c

-/* Generated by Cython 0.11.2 on Fri Sep 18 13:10:46 2009 */
+/* Generated by Cython 0.11.3 on Mon Sep 28 19:24:07 2009 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "structmember.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install development version of Python.
-#endif
+#else
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
 #include <math.h>
 #define __PYX_HAVE_API__bx__arrays__array_tree
 #include "stdlib.h"
+#include "stdio.h"
 #include "numpy/arrayobject.h"
 #define __PYX_USE_C99_COMPLEX defined(_Complex_I)
 
 #define __Pyx_PyBytes_AsString            PyBytes_AsString
 #endif
 
+#define __Pyx_PyBytes_FromUString(s)      __Pyx_PyBytes_FromString((char*)s)
+#define __Pyx_PyBytes_AsUString(s)        ((unsigned char*) __Pyx_PyBytes_AsString(s))
+
 #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
 static INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
 #endif
 #endif
 
+
+#if !defined(T_ULONGLONG)
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : -1))))
+#else
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : \
+        ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1)))))
+#endif
+#if !defined(T_LONGLONG)
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : -1))))
+#else
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : \
+        ((sizeof(x) == sizeof(PY_LONG_LONG))   ? T_LONGLONG : -1)))))
+#endif
+
+#define __Pyx_T_FLOATING(x) \
+        ((sizeof(x) == sizeof(float)) ? T_FLOAT : \
+        ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1))
+
 #if !defined(T_SIZET)
 #if !defined(T_ULONGLONG)
 #define T_SIZET \
 static PyObject *__pyx_m;
 static PyObject *__pyx_b;
 static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
 static int __pyx_lineno;
 static int __pyx_clineno = 0;
 static const char * __pyx_cfilenm= __FILE__;
     }
 }
 
+static INLINE void __Pyx_RaiseNoneNotIterableError(void);
+
+static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+static INLINE void __Pyx_RaiseTooManyValuesError(void);
+
+static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); /*proto*/
+
 static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact); /*proto*/
 
 
 static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
 
-static INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
-
-static INLINE void __Pyx_RaiseTooManyValuesError(void);
-
 static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
 static int __Pyx_EndUnpack(PyObject *); /*proto*/
 
 static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
+static INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
+
+static INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
+
+static INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
+
+static INLINE char __Pyx_PyInt_AsChar(PyObject *);
+
+static INLINE short __Pyx_PyInt_AsShort(PyObject *);
+
+static INLINE int __Pyx_PyInt_AsInt(PyObject *);
+
+static INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
+
+static INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
+
+static INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
+
+static INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
+
+static INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
+
+static INLINE long __Pyx_PyInt_AsLong(PyObject *);
+
+static INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
+
+static INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
+
+static INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
+
+static void __Pyx_WriteUnraisable(const char *name); /*proto*/
+
 static INLINE int __Pyx_StrEq(const char *, const char *); /*proto*/
 
-static INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
-
-static INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
-
-static INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
-
-static INLINE char __Pyx_PyInt_AsChar(PyObject *);
-
-static INLINE short __Pyx_PyInt_AsShort(PyObject *);
-
-static INLINE int __Pyx_PyInt_AsInt(PyObject *);
-
-static INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
-
-static INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
-
-static INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
-
-static INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
-
-static INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
-
-static INLINE long __Pyx_PyInt_AsLong(PyObject *);
-
-static INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
-
-static INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
-
-static INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
-
-static void __Pyx_WriteUnraisable(const char *name); /*proto*/
-
 static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size);  /*proto*/
 
 typedef npy_float64 __pyx_t_5numpy_float64_t;
 
-typedef npy_complex64 __pyx_t_5numpy_complex64_t;
-
-typedef npy_complex128 __pyx_t_5numpy_complex128_t;
+typedef __pyx_t_float_complex __pyx_t_5numpy_complex64_t;
+
+typedef __pyx_t_double_complex __pyx_t_5numpy_complex128_t;
 
 typedef npy_long __pyx_t_5numpy_int_t;
 
 
 typedef npy_cdouble __pyx_t_5numpy_complex_t;
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/wiggle.pxd":1
+/* "/Users/kanwei/bx-python/lib/bx/arrays/wiggle.pxd":1
  * cdef enum linemode:             # <<<<<<<<<<<<<<
  *     MODE_BED
  *     MODE_FIXED
   __pyx_e_2bx_6arrays_6wiggle_MODE_VARIABLE
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":199
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":199
  *             return min
  * 
  * cdef class Summary:             # <<<<<<<<<<<<<<
   PyObject *sumsquares;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":211
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":211
  * 
  * cdef class ArrayTreeNode
  * cdef class ArrayTreeLeaf             # <<<<<<<<<<<<<<
   long start_offset;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":119
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":119
  *         FileCDBDict.to_file( cdb_dict, file, is_little_endian=is_little_endian )
  * 
  * cdef class FileArrayTree:             # <<<<<<<<<<<<<<
   PyObject *io;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":213
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":213
  * cdef class ArrayTreeLeaf
  * 
  * cdef class ArrayTree:             # <<<<<<<<<<<<<<
   struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *root;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":78
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":78
  * 
  * 
  * cdef class FileArrayTreeDict:             # <<<<<<<<<<<<<<
   PyObject *cdb_dict;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":210
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":210
  *     cdef public object sumsquares
  * 
  * cdef class ArrayTreeNode             # <<<<<<<<<<<<<<
   long start_offset;
 };
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/wiggle.pxd":6
+/* "/Users/kanwei/bx-python/lib/bx/arrays/wiggle.pxd":6
  *     MODE_VARIABLE
  * 
  * cdef class IntervalReader:             # <<<<<<<<<<<<<<
 };
 
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":119
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":119
  *         FileCDBDict.to_file( cdb_dict, file, is_little_endian=is_little_endian )
  * 
  * cdef class FileArrayTree:             # <<<<<<<<<<<<<<
 static struct __pyx_vtabstruct_2bx_6arrays_10array_tree_FileArrayTree *__pyx_vtabptr_2bx_6arrays_10array_tree_FileArrayTree;
 
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":298
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":298
  *         return tree
  * 
  * cdef class ArrayTreeNode:             # <<<<<<<<<<<<<<
 
 /* Module declarations from stdlib */
 
+/* Module declarations from stdio */
+
 /* Module declarations from numpy */
 
 /* Module declarations from numpy */
 
 static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
+static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
+static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
 static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
 static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
 /* Module declarations from bx.arrays.wiggle */
 static PyObject *__pyx_kp_flags;
 static char __pyx_k_ValueError[] = "ValueError";
 static PyObject *__pyx_kp_ValueError;
-static char __pyx_k_itervalues[] = "itervalues";
-static PyObject *__pyx_kp_itervalues;
 static char __pyx_k_RuntimeError[] = "RuntimeError";
 static PyObject *__pyx_kp_RuntimeError;
 static PyObject *__pyx_kp_1;
 static char __pyx_k_29[] = "Format string allocated too short.";
 static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)";
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":61
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":61
  * VERSION = 0
  * 
  * def array_tree_dict_from_wiggle_reader( bx.arrays.wiggle.IntervalReader reader, sizes, default_size=2147483647, block_size=1000 ):             # <<<<<<<<<<<<<<
   __pyx_v_val = Py_None; __Pyx_INCREF(Py_None);
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_reader), __pyx_ptype_2bx_6arrays_6wiggle_IntervalReader, 1, "reader", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":63
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":63
  * def array_tree_dict_from_wiggle_reader( bx.arrays.wiggle.IntervalReader reader, sizes, default_size=2147483647, block_size=1000 ):
  *     # Create empty array trees
  *     rval = {}             # <<<<<<<<<<<<<<
   __pyx_v_rval = ((PyObject *)__pyx_1);
   __pyx_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":67
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":67
  *     ##    rval[ key ] = ArrayTree( size, 1000 )
  *     # Fill
  *     last_chrom = None             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_v_last_chrom);
   __pyx_v_last_chrom = Py_None;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":68
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":68
  *     # Fill
  *     last_chrom = None
  *     last_array_tree = None             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_v_last_array_tree);
   __pyx_v_last_array_tree = Py_None;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":69
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":69
  *     last_chrom = None
  *     last_array_tree = None
  *     for chrom, start, end, _, val in reader:             # <<<<<<<<<<<<<<
       __pyx_6 = 0;
     }
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":70
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":70
  *     last_array_tree = None
  *     for chrom, start, end, _, val in reader:
  *         if chrom != last_chrom:             # <<<<<<<<<<<<<<
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":71
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":71
  *     for chrom, start, end, _, val in reader:
  *         if chrom != last_chrom:
  *             if chrom not in rval:             # <<<<<<<<<<<<<<
       __pyx_t_4 = (!PySequence_Contains(__pyx_v_rval, __pyx_v_chrom)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (__pyx_t_4) {
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":72
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":72
  *         if chrom != last_chrom:
  *             if chrom not in rval:
  *                 rval[chrom] = ArrayTree( sizes.get( chrom, default_size ), block_size )             # <<<<<<<<<<<<<<
       }
       __pyx_L9:;
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":73
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":73
  *             if chrom not in rval:
  *                 rval[chrom] = ArrayTree( sizes.get( chrom, default_size ), block_size )
  *             last_array_tree = rval[chrom]             # <<<<<<<<<<<<<<
     }
     __pyx_L8:;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":74
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":74
  *                 rval[chrom] = ArrayTree( sizes.get( chrom, default_size ), block_size )
  *             last_array_tree = rval[chrom]
  *         last_array_tree.set_range( start, end, val )             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":75
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":75
  *             last_array_tree = rval[chrom]
  *         last_array_tree.set_range( start, end, val )
  *     return rval             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":84
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":84
  *     cdef object io
  *     cdef object cdb_dict
  *     def __init__( self, file ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   __pyx_v_io = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":85
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":85
  *     cdef object cdb_dict
  *     def __init__( self, file ):
  *         self.io = io = BinaryFileReader( file, MAGIC )             # <<<<<<<<<<<<<<
   __pyx_v_io = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":86
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":86
  *     def __init__( self, file ):
  *         self.io = io = BinaryFileReader( file, MAGIC )
  *         assert io.read_uint32() == VERSION             # <<<<<<<<<<<<<<
   }
   #endif
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":87
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":87
  *         self.io = io = BinaryFileReader( file, MAGIC )
  *         assert io.read_uint32() == VERSION
  *         self.cdb_dict = FileCDBDict( file, is_little_endian=io.is_little_endian )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":88
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":88
  *         assert io.read_uint32() == VERSION
  *         self.cdb_dict = FileCDBDict( file, is_little_endian=io.is_little_endian )
  *     def __getitem__( self, key ):             # <<<<<<<<<<<<<<
   __Pyx_SetupRefcountContext("__getitem__");
   __pyx_v_offset = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":89
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":89
  *         self.cdb_dict = FileCDBDict( file, is_little_endian=io.is_little_endian )
  *     def __getitem__( self, key ):
  *         offset = self.cdb_dict[key]             # <<<<<<<<<<<<<<
   __pyx_v_offset = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":90
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":90
  *     def __getitem__( self, key ):
  *         offset = self.cdb_dict[key]
  *         offset = self.io.unpack( "L", offset )[0]             # <<<<<<<<<<<<<<
   __pyx_v_offset = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":91
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":91
  *         offset = self.cdb_dict[key]
  *         offset = self.io.unpack( "L", offset )[0]
  *         self.io.seek( offset )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":92
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":92
  *         offset = self.io.unpack( "L", offset )[0]
  *         self.io.seek( offset )
  *         return FileArrayTree( self.io.file, self.io.is_little_endian )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":95
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":95
  * 
  *     @classmethod
  *     def dict_to_file( Class, dict, file, is_little_endian=True ):             # <<<<<<<<<<<<<<
   __pyx_v_value = Py_None; __Pyx_INCREF(Py_None);
   __pyx_v_offset = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":100
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":100
  *         read efficiently using this class.
  *         """
  *         io = BinaryFileWriter( file, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   __pyx_v_io = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":102
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":102
  *         io = BinaryFileWriter( file, is_little_endian=is_little_endian )
  *         # Write magic number and version
  *         io.write_uint32( MAGIC )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":103
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":103
  *         # Write magic number and version
  *         io.write_uint32( MAGIC )
  *         io.write_uint32( VERSION )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":105
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":105
  *         io.write_uint32( VERSION )
  *         # Write cdb index with fake values just to fill space
  *         cdb_dict = {}             # <<<<<<<<<<<<<<
   __pyx_v_cdb_dict = ((PyObject *)__pyx_1);
   __pyx_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":106
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":106
  *         # Write cdb index with fake values just to fill space
  *         cdb_dict = {}
  *         for key in dict.iterkeys():             # <<<<<<<<<<<<<<
     __pyx_v_key = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":107
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":107
  *         cdb_dict = {}
  *         for key in dict.iterkeys():
  *             cdb_dict[ key ] = io.pack( "L", 0 )             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":108
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":108
  *         for key in dict.iterkeys():
  *             cdb_dict[ key ] = io.pack( "L", 0 )
  *         cdb_offset = io.tell()             # <<<<<<<<<<<<<<
   __pyx_v_cdb_offset = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":109
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":109
  *             cdb_dict[ key ] = io.pack( "L", 0 )
  *         cdb_offset = io.tell()
  *         FileCDBDict.to_file( cdb_dict, file, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":111
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":111
  *         FileCDBDict.to_file( cdb_dict, file, is_little_endian=is_little_endian )
  *         # Write each tree and save offset
  *         for key, value in dict.iteritems():             # <<<<<<<<<<<<<<
       __pyx_3 = 0;
     }
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":112
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":112
  *         # Write each tree and save offset
  *         for key, value in dict.iteritems():
  *             offset = io.tell()             # <<<<<<<<<<<<<<
     __pyx_v_offset = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":113
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":113
  *         for key, value in dict.iteritems():
  *             offset = io.tell()
  *             cdb_dict[ key ] = io.pack( "L", offset )             # <<<<<<<<<<<<<<
     if (PyObject_SetItem(__pyx_v_cdb_dict, __pyx_v_key, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":114
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":114
  *             offset = io.tell()
  *             cdb_dict[ key ] = io.pack( "L", offset )
  *             value.to_file( file, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":116
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":116
  *             value.to_file( file, is_little_endian=is_little_endian )
  *         # Go back and write the index again
  *         io.seek( cdb_offset )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":117
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":117
  *         # Go back and write the index again
  *         io.seek( cdb_offset )
  *         FileCDBDict.to_file( cdb_dict, file, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":131
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":131
  *     cdef object io
  * 
  *     def __init__( self, file, is_little_endian=True ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   __pyx_v_dt = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":132
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":132
  * 
  *     def __init__( self, file, is_little_endian=True ):
  *         self.io = BinaryFileReader( file, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->io = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":133
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":133
  *     def __init__( self, file, is_little_endian=True ):
  *         self.io = BinaryFileReader( file, is_little_endian=is_little_endian )
  *         self.offset = self.io.tell()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->offset = __pyx_t_3;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":135
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":135
  *         self.offset = self.io.tell()
  *         # Read basic info about the tree
  *         self.max = self.io.read_uint32()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->max = __pyx_t_3;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":136
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":136
  *         # Read basic info about the tree
  *         self.max = self.io.read_uint32()
  *         self.block_size = self.io.read_uint32()             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->block_size = __pyx_t_3;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":138
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":138
  *         self.block_size = self.io.read_uint32()
  *         # Read dtype and canonicalize
  *         dt = self.io.read( 1 )             # <<<<<<<<<<<<<<
   __pyx_v_dt = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":139
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":139
  *         # Read dtype and canonicalize
  *         dt = self.io.read( 1 )
  *         self.dtype = numpy.dtype( dt )             # <<<<<<<<<<<<<<
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->dtype = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":140
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":140
  *         dt = self.io.read( 1 )
  *         self.dtype = numpy.dtype( dt )
  *         self.io.skip( 3 )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":142
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":142
  *         self.io.skip( 3 )
  *         # How many levels are needed to cover the entire range?
  *         self.levels = 0             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->levels = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":143
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":143
  *         # How many levels are needed to cover the entire range?
  *         self.levels = 0
  *         while ( <long long> self.block_size ) ** ( self.levels + 1 ) < self.max:             # <<<<<<<<<<<<<<
     __pyx_t_5 = (__Pyx_pow_PY_LONG_LONG(((PY_LONG_LONG)((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->block_size), (((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->levels + 1)) < ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->max);
     if (!__pyx_t_5) break;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":144
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":144
  *         self.levels = 0
  *         while ( <long long> self.block_size ) ** ( self.levels + 1 ) < self.max:
  *             self.levels += 1             # <<<<<<<<<<<<<<
     ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->levels += 1;
   }
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":146
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":146
  *             self.levels += 1
  *         # Not yet dealing with the case where the root is a Leaf
  *         assert self.levels > 0, "max < block_size not yet handled"             # <<<<<<<<<<<<<<
   }
   #endif
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":148
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":148
  *         assert self.levels > 0, "max < block_size not yet handled"
  *         # Save offset of root
  *         self.root_offset = self.io.tell()             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":150
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":150
  *         self.root_offset = self.io.tell()
  * 
  *     def __getitem__( self, index ):             # <<<<<<<<<<<<<<
   __Pyx_SetupRefcountContext("__getitem__");
   __pyx_v_min = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":151
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":151
  * 
  *     def __getitem__( self, index ):
  *         min = self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 )             # <<<<<<<<<<<<<<
   __pyx_v_min = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":152
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":152
  *     def __getitem__( self, index ):
  *         min = self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 )
  *         if min < 0:             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":153
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":153
  *         min = self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 )
  *         if min < 0:
  *             return nan             # <<<<<<<<<<<<<<
   }
   __pyx_L5:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":154
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":154
  *         if min < 0:
  *             return nan
  *         self.io.skip( self.dtype.itemsize * ( index - min ) )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":155
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":155
  *             return nan
  *         self.io.skip( self.dtype.itemsize * ( index - min ) )
  *         return self.io.read_raw_array( self.dtype, 1 )[0]             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":157
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":157
  *         return self.io.read_raw_array( self.dtype, 1 )[0]
  * 
  *     def get_summary( self, index, level ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   __pyx_v_s = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":158
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":158
  * 
  *     def get_summary( self, index, level ):
  *         assert 0 < level <= self.levels             # <<<<<<<<<<<<<<
   }
   #endif
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":159
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":159
  *     def get_summary( self, index, level ):
  *         assert 0 < level <= self.levels
  *         if self.r_seek_to_node( index, 0, self.root_offset, self.levels, level ) < 0:             # <<<<<<<<<<<<<<
   __pyx_t_3 = (((struct __pyx_vtabstruct_2bx_6arrays_10array_tree_FileArrayTree *)((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->__pyx_vtab)->r_seek_to_node(((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self), __pyx_t_4, 0, ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->root_offset, ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->levels, __pyx_t_5) < 0);
   if (__pyx_t_3) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":160
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":160
  *         assert 0 < level <= self.levels
  *         if self.r_seek_to_node( index, 0, self.root_offset, self.levels, level ) < 0:
  *             return None             # <<<<<<<<<<<<<<
   }
   __pyx_L6:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":162
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":162
  *             return None
  *         # Read summary arrays
  *         s = Summary()             # <<<<<<<<<<<<<<
   __pyx_v_s = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":163
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":163
  *         # Read summary arrays
  *         s = Summary()
  *         s.counts = self.io.read_raw_array( self.dtype, self.block_size )             # <<<<<<<<<<<<<<
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_counts, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":164
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":164
  *         s = Summary()
  *         s.counts = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.sums = self.io.read_raw_array( self.dtype, self.block_size )             # <<<<<<<<<<<<<<
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_sums, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":165
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":165
  *         s.counts = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.sums = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.mins = self.io.read_raw_array( self.dtype, self.block_size)             # <<<<<<<<<<<<<<
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_mins, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":166
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":166
  *         s.sums = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.mins = self.io.read_raw_array( self.dtype, self.block_size)
  *         s.maxs = self.io.read_raw_array( self.dtype, self.block_size )             # <<<<<<<<<<<<<<
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_maxs, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":167
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":167
  *         s.mins = self.io.read_raw_array( self.dtype, self.block_size)
  *         s.maxs = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.sumsquares = self.io.read_raw_array( self.dtype, self.block_size )             # <<<<<<<<<<<<<<
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_sumsquares, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":168
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":168
  *         s.maxs = self.io.read_raw_array( self.dtype, self.block_size )
  *         s.sumsquares = self.io.read_raw_array( self.dtype, self.block_size )
  *         return s             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":170
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":170
  *         return s
  * 
  *     def get_leaf( self, index ):             # <<<<<<<<<<<<<<
   PyObject *__pyx_t_5 = NULL;
   __Pyx_SetupRefcountContext("get_leaf");
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":171
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":171
  * 
  *     def get_leaf( self, index ):
  *         if self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 ) < 0:             # <<<<<<<<<<<<<<
   __pyx_t_2 = (((struct __pyx_vtabstruct_2bx_6arrays_10array_tree_FileArrayTree *)((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->__pyx_vtab)->r_seek_to_node(((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self), __pyx_t_1, 0, ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->root_offset, ((struct __pyx_obj_2bx_6arrays_10array_tree_FileArrayTree *)__pyx_v_self)->levels, 0) < 0);
   if (__pyx_t_2) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":172
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":172
  *     def get_leaf( self, index ):
  *         if self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 ) < 0:
  *             return None             # <<<<<<<<<<<<<<
   }
   __pyx_L5:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":173
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":173
  *         if self.r_seek_to_node( index, 0, self.root_offset, self.levels, 0 ) < 0:
  *             return None
  *         return self.io.read_raw_array( self.dtype, self.block_size )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":175
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":175
  *         return self.io.read_raw_array( self.dtype, self.block_size )
  * 
  *     cdef int r_seek_to_node( self, int index, int min, long long offset, int level, int desired_level ):             # <<<<<<<<<<<<<<
   __Pyx_SetupRefcountContext("r_seek_to_node");
   __pyx_v_child_offset = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":181
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":181
  *         """
  *         cdef int child_size, bin_index, child_min
  *         self.io.seek( offset )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":182
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":182
  *         cdef int child_size, bin_index, child_min
  *         self.io.seek( offset )
  *         if level > desired_level:             # <<<<<<<<<<<<<<
   __pyx_t_4 = (__pyx_v_level > __pyx_v_desired_level);
   if (__pyx_t_4) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":183
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":183
  *         self.io.seek( offset )
  *         if level > desired_level:
  *             child_size = self.block_size ** level             # <<<<<<<<<<<<<<
  */
     __pyx_v_child_size = __Pyx_pow_int(__pyx_v_self->block_size, __pyx_v_level);
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":184
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":184
  *         if level > desired_level:
  *             child_size = self.block_size ** level
  *             bin_index = ( index - min ) // ( child_size )             # <<<<<<<<<<<<<<
  */
     __pyx_v_bin_index = ((__pyx_v_index - __pyx_v_min) / __pyx_v_child_size);
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":185
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":185
  *             child_size = self.block_size ** level
  *             bin_index = ( index - min ) // ( child_size )
  *             child_min = min + ( bin_index * child_size )             # <<<<<<<<<<<<<<
  */
     __pyx_v_child_min = (__pyx_v_min + (__pyx_v_bin_index * __pyx_v_child_size));
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":187
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":187
  *             child_min = min + ( bin_index * child_size )
  *             # Skip summary arrays -- 5 arrays * itemsize * block_size
  *             self.io.skip( 5 * self.dtype.itemsize * self.block_size )             # <<<<<<<<<<<<<<
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":189
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":189
  *             self.io.skip( 5 * self.dtype.itemsize * self.block_size )
  *             # Skip to offset of correct child -- offsets are 8 bytes
  *             self.io.skip( 8 * bin_index )             # <<<<<<<<<<<<<<
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":191
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":191
  *             self.io.skip( 8 * bin_index )
  *             # Read offset of child
  *             child_offset = self.io.read_uint64()             # <<<<<<<<<<<<<<
     __pyx_v_child_offset = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":192
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":192
  *             # Read offset of child
  *             child_offset = self.io.read_uint64()
  *             if child_offset == 0:             # <<<<<<<<<<<<<<
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_4) {
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":193
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":193
  *             child_offset = self.io.read_uint64()
  *             if child_offset == 0:
  *                 return -1             # <<<<<<<<<<<<<<
     }
     __pyx_L4:;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":194
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":194
  *             if child_offset == 0:
  *                 return -1
  *             return self.r_seek_to_node( index, child_min, child_offset, level - 1, desired_level )             # <<<<<<<<<<<<<<
   }
   /*else*/ {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":197
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":197
  *         else:
  *             # The file pointer is at the start of the desired node, do nothing
  *             return min             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":233
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":233
  *     cdef public object dtype
  *     cdef public int levels
  *     cdef public ArrayTreeNode root             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":235
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":235
  *     cdef public ArrayTreeNode root
  * 
  *     def __init__( self, int max, int block_size, dtype=float32 ):             # <<<<<<<<<<<<<<
   return -1;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":239
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":239
  *         Create a new array tree of size `max`
  *         """
  *         self.max = max             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->max = __pyx_v_max;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":240
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":240
  *         """
  *         self.max = max
  *         self.block_size = block_size             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->block_size = __pyx_v_block_size;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":242
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":242
  *         self.block_size = block_size
  *         # Force the dtype argument to its canonical dtype object
  *         self.dtype = numpy.dtype( dtype )             # <<<<<<<<<<<<<<
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->dtype = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":244
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":244
  *         self.dtype = numpy.dtype( dtype )
  *         # How many levels are needed to cover the entire range?
  *         self.levels = 0             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->levels = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":245
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":245
  *         # How many levels are needed to cover the entire range?
  *         self.levels = 0
  *         while ( <long long> self.block_size ) ** ( self.levels + 1 ) < self.max:             # <<<<<<<<<<<<<<
     __pyx_t_3 = (__Pyx_pow_PY_LONG_LONG(((PY_LONG_LONG)((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->block_size), (((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->levels + 1)) < ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->max);
     if (!__pyx_t_3) break;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":246
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":246
  *         self.levels = 0
  *         while ( <long long> self.block_size ) ** ( self.levels + 1 ) < self.max:
  *             self.levels += 1             # <<<<<<<<<<<<<<
     ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTree *)__pyx_v_self)->levels += 1;
   }
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":248
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":248
  *             self.levels += 1
  *         # Not yet dealing with the case where the root is a Leaf
  *         assert self.levels > 0, "max < block_size not yet handled"             # <<<<<<<<<<<<<<
   }
   #endif
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":250
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":250
  *         assert self.levels > 0, "max < block_size not yet handled"
  *         # Create the root node
  *         self.root = ArrayTreeNode( self, 0, max, block_size, self.levels )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":252
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":252
  *         self.root = ArrayTreeNode( self, 0, max, block_size, self.levels )
  * 
  *     def __setitem__( self, int index, value ):             # <<<<<<<<<<<<<<
   return -1;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":253
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":253
  * 
  *     def __setitem__( self, int index, value ):
  *         self.root.set( index, value )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":255
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":255
  *         self.root.set( index, value )
  * 
  *     def set_range( self, int start, int end, value ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":256
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":256
  * 
  *     def set_range( self, int start, int end, value ):
  *         for i from start <= i < end:             # <<<<<<<<<<<<<<
     __pyx_v_i = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":257
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":257
  *     def set_range( self, int start, int end, value ):
  *         for i from start <= i < end:
  *             self.root.set( i, value )             # <<<<<<<<<<<<<<
     __pyx_1 = __Pyx_PyInt_AsInt(__pyx_v_i); if (unlikely((__pyx_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":256
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":256
  * 
  *     def set_range( self, int start, int end, value ):
  *         for i from start <= i < end:             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":259
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":259
  *             self.root.set( i, value )
  * 
  *     def __getitem__( self, int index ):             # <<<<<<<<<<<<<<
   return NULL;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":260
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":260
  * 
  *     def __getitem__( self, int index ):
  *         return self.root.get( index )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":262
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":262
  *         return self.root.get( index )
  * 
  *     def to_file( self, f, is_little_endian=True ):             # <<<<<<<<<<<<<<
   __pyx_v_io = Py_None; __Pyx_INCREF(Py_None);
   __pyx_v_level = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":263
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":263
  * 
  *     def to_file( self, f, is_little_endian=True ):
  *         io = BinaryFileWriter( f, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   __pyx_v_io = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":265
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":265
  *         io = BinaryFileWriter( f, is_little_endian=is_little_endian )
  *         ## io.write_uint32( VERSION )
  *         io.write_uint32( self.max )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":266
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":266
  *         ## io.write_uint32( VERSION )
  *         io.write_uint32( self.max )
  *         io.write_uint32( self.block_size )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":267
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":267
  *         io.write_uint32( self.max )
  *         io.write_uint32( self.block_size )
  *         io.write( self.dtype.char )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":268
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":268
  *         io.write_uint32( self.block_size )
  *         io.write( self.dtype.char )
  *         io.write( "\0\0\0" )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":270
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":270
  *         io.write( "\0\0\0" )
  *         # Data pass, level order
  *         for level in range( self.levels, -1, -1 ):             # <<<<<<<<<<<<<<
     __pyx_v_level = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":271
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":271
  *         # Data pass, level order
  *         for level in range( self.levels, -1, -1 ):
  *             self.root.to_file_data_pass( io, level )             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":273
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":273
  *             self.root.to_file_data_pass( io, level )
  *         # Offset pass to fix up indexes
  *         self.root.to_file_offset_pass( io )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":276
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":276
  * 
  *     @classmethod
  *     def from_file( Class, f, is_little_endian=True ):             # <<<<<<<<<<<<<<
   __pyx_v_dt = Py_None; __Pyx_INCREF(Py_None);
   __pyx_v_tree = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":277
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":277
  *     @classmethod
  *     def from_file( Class, f, is_little_endian=True ):
  *         io = BinaryFileReader( f, is_little_endian=is_little_endian )             # <<<<<<<<<<<<<<
   __pyx_v_io = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":279
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":279
  *         io = BinaryFileReader( f, is_little_endian=is_little_endian )
  *         ## assert io.read_uint32() == VERSION
  *         max = io.read_uint32()             # <<<<<<<<<<<<<<
   __pyx_v_max = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":280
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":280
  *         ## assert io.read_uint32() == VERSION
  *         max = io.read_uint32()
  *         block_size = io.read_uint32()             # <<<<<<<<<<<<<<
   __pyx_v_block_size = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":281
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":281
  *         max = io.read_uint32()
  *         block_size = io.read_uint32()
  *         dt = io.read( 1 )             # <<<<<<<<<<<<<<
   __pyx_v_dt = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":282
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":282
  *         block_size = io.read_uint32()
  *         dt = io.read( 1 )
  *         io.read( 3 )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":283
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":283
  *         dt = io.read( 1 )
  *         io.read( 3 )
  *         tree = Class( max, block_size, dt )             # <<<<<<<<<<<<<<
   __pyx_v_tree = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":284
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":284
  *         io.read( 3 )
  *         tree = Class( max, block_size, dt )
  *         tree.root.from_file( io )             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":285
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":285
  *         tree = Class( max, block_size, dt )
  *         tree.root.from_file( io )
  *         return tree             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":288
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":288
  * 
  *     @classmethod
  *     def from_sequence( Class, s, block_size=1000 ):             # <<<<<<<<<<<<<<
   __pyx_v_tree = Py_None; __Pyx_INCREF(Py_None);
   __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":293
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":293
  *         length and getitem).
  *         """
  *         tree = Class( len( s ), block_size )             # <<<<<<<<<<<<<<
   __pyx_v_tree = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":294
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":294
  *         """
  *         tree = Class( len( s ), block_size )
  *         for i in range( len( s ) ):             # <<<<<<<<<<<<<<
     __pyx_v_i = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":295
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":295
  *         tree = Class( len( s ), block_size )
  *         for i in range( len( s ) ):
  *             tree[i] = s[i]             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":296
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":296
  *         for i in range( len( s ) ):
  *             tree[i] = s[i]
  *         return tree             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":311
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":311
  *     cdef int child_size
  *     cdef object children
  *     cdef public Summary summary             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":314
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":314
  *     cdef public long start_offset
  * 
  *     def __init__( self, ArrayTree tree, int min, int max, int block_size, int level ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tree), __pyx_ptype_2bx_6arrays_10array_tree_ArrayTree, 1, "tree", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":315
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":315
  * 
  *     def __init__( self, ArrayTree tree, int min, int max, int block_size, int level ):
  *         self.tree = tree             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->tree));
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->tree = __pyx_v_tree;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":316
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":316
  *     def __init__( self, ArrayTree tree, int min, int max, int block_size, int level ):
  *         self.tree = tree
  *         self.min = min             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->min = __pyx_v_min;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":317
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":317
  *         self.tree = tree
  *         self.min = min
  *         self.max = max             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->max = __pyx_v_max;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":318
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":318
  *         self.min = min
  *         self.max = max
  *         self.block_size = block_size             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->block_size = __pyx_v_block_size;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":319
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":319
  *         self.max = max
  *         self.block_size = block_size
  *         self.level = level             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->level = __pyx_v_level;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":321
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":321
  *         self.level = level
  *         # Each of my children represents block_size ** level values
  *         self.child_size = self.block_size ** self.level             # <<<<<<<<<<<<<<
  */
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->child_size = __Pyx_pow_int(((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->block_size, ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->level);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":322
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":322
  *         # Each of my children represents block_size ** level values
  *         self.child_size = self.block_size ** self.level
  *         self.children = [None] * self.block_size             # <<<<<<<<<<<<<<
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->children = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":323
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":323
  *         self.child_size = self.block_size ** self.level
  *         self.children = [None] * self.block_size
  *         self.summary = None             # <<<<<<<<<<<<<<
   __Pyx_DECREF(((PyObject *)((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->summary));
   ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->summary = ((struct __pyx_obj_2bx_6arrays_10array_tree_Summary *)Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":324
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":324
  *         self.children = [None] * self.block_size
  *         self.summary = None
  *         self.start_offset = 0             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":326
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":326
  *         self.start_offset = 0
  * 
  *     cdef inline init_bin( self, int index ):             # <<<<<<<<<<<<<<
   PyObject *__pyx_t_6 = NULL;
   __Pyx_SetupRefcountContext("init_bin");
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":327
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":327
  * 
  *     cdef inline init_bin( self, int index ):
  *         cdef int min = self.min + ( index * self.child_size )             # <<<<<<<<<<<<<<
  */
   __pyx_v_min = (__pyx_v_self->min + (__pyx_v_index * __pyx_v_self->child_size));
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":328
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":328
  *     cdef inline init_bin( self, int index ):
  *         cdef int min = self.min + ( index * self.child_size )
  *         cdef int max = min + self.child_size             # <<<<<<<<<<<<<<
  */
   __pyx_v_max = (__pyx_v_min + __pyx_v_self->child_size);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":329
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":329
  *         cdef int min = self.min + ( index * self.child_size )
  *         cdef int max = min + self.child_size
  *         if self.level == 1:             # <<<<<<<<<<<<<<
   __pyx_t_1 = (__pyx_v_self->level == 1);
   if (__pyx_t_1) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":330
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":330
  *         cdef int max = min + self.child_size
  *         if self.level == 1:
  *             self.children[ index ] = ArrayTreeLeaf( self.tree, min, max )             # <<<<<<<<<<<<<<
   }
   /*else*/ {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":332
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":332
  *             self.children[ index ] = ArrayTreeLeaf( self.tree, min, max )
  *         else:
  *             self.children[ index ] = ArrayTreeNode( self.tree, min, max, self.block_size, self.level - 1 )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":334
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":334
  *             self.children[ index ] = ArrayTreeNode( self.tree, min, max, self.block_size, self.level - 1 )
  * 
  *     def set( self, int index, value ):             # <<<<<<<<<<<<<<
   return NULL;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":335
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":335
  * 
  *     def set( self, int index, value ):
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )             # <<<<<<<<<<<<<<
  */
   __pyx_v_bin_index = ((__pyx_v_index - ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->min) / ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->child_size);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":336
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":336
  *     def set( self, int index, value ):
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )
  *         if self.children[ bin_index ] is None:             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
   if (__pyx_t_1) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":337
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":337
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )
  *         if self.children[ bin_index ] is None:
  *             self.init_bin( bin_index )             # <<<<<<<<<<<<<<
   }
   __pyx_L6:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":338
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":338
  *         if self.children[ bin_index ] is None:
  *             self.init_bin( bin_index )
  *         self.children[ bin_index ].set( index, value )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":340
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":340
  *         self.children[ bin_index ].set( index, value )
  * 
  *     def get( self, int index ):             # <<<<<<<<<<<<<<
   return NULL;
   __pyx_L4_argument_unpacking_done:;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":341
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":341
  * 
  *     def get( self, int index ):
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )             # <<<<<<<<<<<<<<
  */
   __pyx_v_bin_index = ((__pyx_v_index - ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->min) / ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->child_size);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":342
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":342
  *     def get( self, int index ):
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )
  *         if self.children[ bin_index ] is None:             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
   if (__pyx_t_1) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":343
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":343
  *         cdef int bin_index = ( index - self.min ) // ( self.child_size )
  *         if self.children[ bin_index ] is None:
  *             return nan             # <<<<<<<<<<<<<<
   }
   /*else*/ {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":345
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":345
  *             return nan
  *         else:
  *             return self.children[ bin_index ].get( index )             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":347
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":347
  *             return self.children[ bin_index ].get( index )
  * 
  *     cpdef build_summary( self ):             # <<<<<<<<<<<<<<
     __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
   }
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":351
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":351
  *         Build summary of children.
  *         """
  *         counts = empty( self.tree.block_size, self.tree.dtype )             # <<<<<<<<<<<<<<
   __pyx_v_counts = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":352
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":352
  *         """
  *         counts = empty( self.tree.block_size, self.tree.dtype )
  *         mins = empty( self.tree.block_size, self.tree.dtype )             # <<<<<<<<<<<<<<
   __pyx_v_mins = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":353
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":353
  *         counts = empty( self.tree.block_size, self.tree.dtype )
  *         mins = empty( self.tree.block_size, self.tree.dtype )
  *         maxs = empty( self.tree.block_size, self.tree.dtype )             # <<<<<<<<<<<<<<
   __pyx_v_maxs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":354
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":354
  *         mins = empty( self.tree.block_size, self.tree.dtype )
  *         maxs = empty( self.tree.block_size, self.tree.dtype )
  *         sums = empty( self.tree.block_size, self.tree.dtype )             # <<<<<<<<<<<<<<
   __pyx_v_sums = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":355
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":355
  *         maxs = empty( self.tree.block_size, self.tree.dtype )
  *         sums = empty( self.tree.block_size, self.tree.dtype )
  *         sumsquares = empty( self.tree.block_size, self.tree.dtype )             # <<<<<<<<<<<<<<
   __pyx_v_sumsquares = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":356
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":356
  *         sums = empty( self.tree.block_size, self.tree.dtype )
  *         sumsquares = empty( self.tree.block_size, self.tree.dtype )
  *         for i in range( len( self.children ) ):             # <<<<<<<<<<<<<<
     __pyx_v_i = __pyx_t_1;
     __pyx_t_1 = 0;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":357
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":357
  *         sumsquares = empty( self.tree.block_size, self.tree.dtype )
  *         for i in range( len( self.children ) ):
  *             if self.children[i]:             # <<<<<<<<<<<<<<
     __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
     if (__pyx_t_5) {
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":358
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":358
  *         for i in range( len( self.children ) ):
  *             if self.children[i]:
  *                 if self.level == 1:             # <<<<<<<<<<<<<<
       __pyx_t_5 = (__pyx_v_self->level == 1);
       if (__pyx_t_5) {
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":359
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":359
  *             if self.children[i]:
  *                 if self.level == 1:
  *                     v = self.children[i].values             # <<<<<<<<<<<<<<
         __pyx_v_v = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":360
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":360
  *                 if self.level == 1:
  *                     v = self.children[i].values
  *                     counts[i] = sum( ~isnan( v ) )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_counts, __pyx_v_i, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":361
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":361
  *                     v = self.children[i].values
  *                     counts[i] = sum( ~isnan( v ) )
  *                     mins[i] = nanmin( v )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_mins, __pyx_v_i, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":362
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":362
  *                     counts[i] = sum( ~isnan( v ) )
  *                     mins[i] = nanmin( v )
  *                     maxs[i] = nanmax( v )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_maxs, __pyx_v_i, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":363
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":363
  *                     mins[i] = nanmin( v )
  *                     maxs[i] = nanmax( v )
  *                     sums[i] = nansum( v )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_sums, __pyx_v_i, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":364
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":364
  *                     maxs[i] = nanmax( v )
  *                     sums[i] = nansum( v )
  *                     sumsquares[i] = nansum( v ** 2 )             # <<<<<<<<<<<<<<
       }
       /*else*/ {
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":366
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":366
  *                     sumsquares[i] = nansum( v ** 2 )
  *                 else:
  *                     c = self.children[i]             # <<<<<<<<<<<<<<
         __pyx_v_c = __pyx_1;
         __pyx_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":367
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":367
  *                 else:
  *                     c = self.children[i]
  *                     c.build_summary()             # <<<<<<<<<<<<<<
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":368
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":368
  *                     c = self.children[i]
  *                     c.build_summary()
  *                     counts[i] = sum( c.summary.counts )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_counts, __pyx_v_i, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":369
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":369
  *                     c.build_summary()
  *                     counts[i] = sum( c.summary.counts )
  *                     mins[i] = nanmin( c.summary.mins )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_mins, __pyx_v_i, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":370
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":370
  *                     counts[i] = sum( c.summary.counts )
  *                     mins[i] = nanmin( c.summary.mins )
  *                     maxs[i] = nanmax( c.summary.maxs )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_maxs, __pyx_v_i, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":371
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":371
  *                     mins[i] = nanmin( c.summary.mins )
  *                     maxs[i] = nanmax( c.summary.maxs )
  *                     sums[i] = nansum( c.summary.sums )             # <<<<<<<<<<<<<<
         if (PyObject_SetItem(__pyx_v_sums, __pyx_v_i, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-        /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":372
+        /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":372
  *                     maxs[i] = nanmax( c.summary.maxs )
  *                     sums[i] = nansum( c.summary.sums )
  *                     sumsquares[i] = nansum( c.summary.sumsquares )             # <<<<<<<<<<<<<<
     }
     /*else*/ {
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":374
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":374
  *                     sumsquares[i] = nansum( c.summary.sumsquares )
  *             else:
  *                 counts[i] = 0             # <<<<<<<<<<<<<<
  */
       if (PyObject_SetItem(__pyx_v_counts, __pyx_v_i, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":375
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":375
  *             else:
  *                 counts[i] = 0
  *                 mins[i] = nan             # <<<<<<<<<<<<<<
       if (PyObject_SetItem(__pyx_v_mins, __pyx_v_i, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":376
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":376
  *                 counts[i] = 0
  *                 mins[i] = nan
  *                 maxs[i] = nan             # <<<<<<<<<<<<<<
       if (PyObject_SetItem(__pyx_v_maxs, __pyx_v_i, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":377
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":377
  *                 mins[i] = nan
  *                 maxs[i] = nan
  *                 sums[i] = nan             # <<<<<<<<<<<<<<
       if (PyObject_SetItem(__pyx_v_sums, __pyx_v_i, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_1); __pyx_1 = 0;
 
-      /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":378
+      /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":378
  *                 maxs[i] = nan
  *                 sums[i] = nan
  *                 sumsquares[i] = nan             # <<<<<<<<<<<<<<
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":379
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":379
  *                 sums[i] = nan
  *                 sumsquares[i] = nan
  *         s = Summary()             # <<<<<<<<<<<<<<
   __pyx_v_s = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":380
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":380
  *                 sumsquares[i] = nan
  *         s = Summary()
  *         s.counts = counts             # <<<<<<<<<<<<<<
  */
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_counts, __pyx_v_counts) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":381
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":381
  *         s = Summary()
  *         s.counts = counts
  *         s.mins = mins             # <<<<<<<<<<<<<<
  */
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_mins, __pyx_v_mins) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":382
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":382
  *         s.counts = counts
  *         s.mins = mins
  *         s.maxs = maxs             # <<<<<<<<<<<<<<
  */
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_maxs, __pyx_v_maxs) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":383
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":383
  *         s.mins = mins
  *         s.maxs = maxs
  *         s.sums = sums             # <<<<<<<<<<<<<<
  */
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_sums, __pyx_v_sums) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":384
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":384
  *         s.maxs = maxs
  *         s.sums = sums
  *         s.sumsquares = sumsquares             # <<<<<<<<<<<<<<
  */
   if (PyObject_SetAttr(__pyx_v_s, __pyx_kp_sumsquares, __pyx_v_sumsquares) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":385
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":385
  *         s.sums = sums
  *         s.sumsquares = sumsquares
  *         self.summary = s             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":347
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":347
  *             return self.children[ bin_index ].get( index )
  * 
  *     cpdef build_summary( self ):             # <<<<<<<<<<<<<<
   return __pyx_r;
 }
 
-/* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":387
+/* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":387
  *         self.summary = s
  * 
  *     def to_file_data_pass( self, io, level ):             # <<<<<<<<<<<<<<
   __pyx_L4_argument_unpacking_done:;
   __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":391
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":391
  *         First pass of writing to file, writes data and saves position of block.
  *         """
  *         assert self.summary, "Writing without summaries is currently not supported"             # <<<<<<<<<<<<<<
   }
   #endif
 
-  /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":393
+  /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":393
  *         assert self.summary, "Writing without summaries is currently not supported"
  *         # If we are at the current level being written, write a block
  *         if self.level == level:             # <<<<<<<<<<<<<<
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__pyx_t_1) {
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":395
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":395
  *         if self.level == level:
  *             # Save file offset where this block starts
  *             self.start_offset = io.tell()             # <<<<<<<<<<<<<<
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     ((struct __pyx_obj_2bx_6arrays_10array_tree_ArrayTreeNode *)__pyx_v_self)->start_offset = __pyx_t_4;
 
-    /* "/Users/james/projects/bx-python/code/bx-python-central/lib/bx/arrays/array_tree.pyx":397
+    /* "/Users/kanwei/bx-python/lib/bx/arrays/array_tree.pyx":397
  *             self.start_offset = io.tell()
  *             # Write out summary data
  *             io.write_raw_array( self.summary.counts )             # <<<<<<<<<<<<<<