def install_callbacks(self):
        self.on_trait_change(self._iotype_modified, '_iotype')
        # _alltraits() is missing some traits after a deepcopy, so use the
        # union of _alltraits() and everything in self.__dict__
        allset = set(self._alltraits().keys())
        allset.update(self.__dict__.keys())
        for name in allset:
            if name not in ('trait_added', 'trait_modified') \
               and not name.startswith('_') and hasattr(self, name):
                self.on_trait_change(self._trait_modified, name)
                obj = getattr(self, name)
                if isinstance(obj, VariableTree) and obj is not self.parent:
                    obj.install_callbacks()
lowmem read/write of 2D NMRPipe frequency domain file.
dataset/ETHPy150Open OpenMDAO/OpenMDAO-Framework/openmdao.main/src/openmdao/main/vartree.py/VariableTree.install_callbacks--crossover with--dataset/ETHPy150Open jjhelmus/nmrglue/nmrglue/fileio/tests/test_pipe.py/test_2d_freq_lowmem